aboutsummaryrefslogtreecommitdiff
path: root/reproduce/software/make
diff options
context:
space:
mode:
Diffstat (limited to 'reproduce/software/make')
-rw-r--r--reproduce/software/make/basic.mk466
-rw-r--r--reproduce/software/make/build-rules.mk40
-rw-r--r--reproduce/software/make/high-level.mk12
-rw-r--r--reproduce/software/make/python.mk1
4 files changed, 282 insertions, 237 deletions
diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk
index e0da312..b4745e2 100644
--- a/reproduce/software/make/basic.mk
+++ b/reproduce/software/make/basic.mk
@@ -52,6 +52,7 @@ syspath := $(PATH)
# As we build more programs, we want to use this project's built programs
# and libraries, not the host's.
+.ONESHELL:
export CCACHE_DISABLE := 1
export PATH := $(ibdir):$(PATH)
export PKG_CONFIG_PATH := $(ildir)/pkgconfig
@@ -59,6 +60,17 @@ export PKG_CONFIG_LIBDIR := $(ildir)/pkgconfig
export CPPFLAGS := -I$(idir)/include $(CPPFLAGS)
export LDFLAGS := $(rpath_command) -L$(ildir) $(LDFLAGS)
+# Note that we build GNU Bash here in 'basic.mk'. So we can't assume Bash
+# in this Makefile and use the DASH shell that was before calling this
+# Makefile: http://gondor.apana.org.au/~herbert/dash. Dash is a minimalist
+# POSIX shell, so it doesn't have startup options like '--noprofile
+# --norc'. But from its manual, to load startup files, Dash actually
+# requires that it be called with a '-' before it (for example '-dash'), so
+# it shouldn't be loading any startup files if it was interpretted
+# properly.
+.SHELLFLAGS := -e -c
+export SHELL := $(ibdir)/dash
+
# This is the "basic" tools where we are relying on the host operating
# system, but are slowly populating our basic software envirnoment. To run
# (system or template) programs, `LD_LIBRARY_PATH' is necessary, so here,
@@ -85,7 +97,10 @@ all: $(foreach p, $(top-level-programs), $(ibidir)/$(p))
# Servers to use as backup, later this should go in a file that is not
# under version control (the actual server that the tarbal comes from is
# irrelevant).
-backupservers = http://akhlaghi.org/maneage-software
+backupservers := $(shell awk '!/^#/{printf "%s ", $$1}' \
+ reproduce/software/config/servers-backup.conf)
+
+
@@ -131,16 +146,14 @@ tarballs = $(foreach t, bash-$(bash-version).tar.lz \
git-$(git-version).tar.xz \
gmp-$(gmp-version).tar.lz \
grep-$(grep-version).tar.xz \
- gzip-$(gzip-version).tar.gz \
+ gzip-$(gzip-version).tar.lz \
isl-$(isl-version).tar.bz2 \
libbsd-$(libbsd-version).tar.xz \
libiconv-$(libiconv-version).tar.gz \
libtool-$(libtool-version).tar.xz \
libunistring-$(libunistring-version).tar.xz \
libxml2-$(libxml2-version).tar.gz \
- lzip-$(lzip-version).tar.gz \
m4-$(m4-version).tar.gz \
- make-$(make-version).tar.gz \
metastore-$(metastore-version).tar.gz \
mpfr-$(mpfr-version).tar.xz \
mpc-$(mpc-version).tar.gz \
@@ -167,105 +180,108 @@ $(tarballs): $(tdir)/%: | $(lockdir)
# the first character of the version to be a digit: packages such
# as `foo' and `foo-3' will not be distinguished, but `foo' and
# `foo2' will be distinguished.
- n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \
- | awk '{print $$1}' ); \
- \
+ @n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \
+ | awk '{print $$1}' )
+
mergenames=1; \
- if [ $$n = bash ]; then c=$(bash-checksum); w=http://akhlaghi.org/maneage-software; \
- elif [ $$n = binutils ]; then c=$(binutils-checksum); w=http://ftp.gnu.org/gnu/binutils; \
- elif [ $$n = bzip2 ]; then c=$(bzip2-checksum); w=http://akhlaghi.org/maneage-software; \
- elif [ $$n = cert ]; then c=$(cert-checksum); w=http://akhlaghi.org/maneage-software; \
- elif [ $$n = coreutils ]; then c=$(coreutils-checksum); w=http://ftp.gnu.org/gnu/coreutils;\
- elif [ $$n = curl ]; then c=$(curl-checksum); w=https://curl.haxx.se/download; \
- elif [ $$n = diffutils ]; then c=$(diffutils-checksum); w=http://ftp.gnu.org/gnu/diffutils;\
- elif [ $$n = file ]; then c=$(file-checksum); w=ftp://ftp.astron.com/pub/file; \
- elif [ $$n = findutils ]; then c=$(findutils-checksum); w=http://ftp.gnu.org/gnu/findutils; \
- elif [ $$n = gawk ]; then c=$(gawk-checksum); w=http://ftp.gnu.org/gnu/gawk; \
- elif [ $$n = gcc ]; then c=$(gcc-checksum); w=http://ftp.gnu.org/gnu/gcc/gcc-$(gcc-version); \
- elif [ $$n = gettext ]; then c=$(gettext-checksum); w=https://ftp.gnu.org/gnu/gettext; \
- elif [ $$n = git ]; then c=$(git-checksum); w=http://mirrors.edge.kernel.org/pub/software/scm/git; \
- elif [ $$n = gmp ]; then c=$(gmp-checksum); w=https://gmplib.org/download/gmp; \
- elif [ $$n = grep ]; then c=$(grep-checksum); w=http://ftp.gnu.org/gnu/grep; \
- elif [ $$n = gzip ]; then c=$(gzip-checksum); w=http://ftp.gnu.org/gnu/gzip; \
- elif [ $$n = isl ]; then c=$(isl-checksum); w=ftp://gcc.gnu.org/pub/gcc/infrastructure; \
- elif [ $$n = libbsd ]; then c=$(libbsd-checksum); w=http://libbsd.freedesktop.org/releases; \
- elif [ $$n = libiconv ]; then c=$(libiconv-checksum); w=https://ftp.gnu.org/pub/gnu/libiconv; \
- elif [ $$n = libtool ]; then c=$(libtool-checksum); w=http://ftp.gnu.org/gnu/libtool; \
- elif [ $$n = libunistring ]; then c=$(libunistring-checksum); w=http://ftp.gnu.org/gnu/libunistring; \
- elif [ $$n = libxml2 ]; then c=$(libxml2-checksum); w=ftp://xmlsoft.org/libxml2; \
- elif [ $$n = lzip ]; then c=$(lzip-checksum); w=http://download.savannah.gnu.org/releases/lzip; \
- elif [ $$n = m4 ]; then \
- mergenames=0; \
- c=$(m4-checksum); \
- w=http://akhlaghi.org/maneage-software/m4-1.4.18-patched.tar.gz; \
- elif [ $$n = make ]; then c=$(make-checksum); w=https://ftp.gnu.org/gnu/make; \
- elif [ $$n = metastore ]; then c=$(metastore-checksum); w=http://akhlaghi.org/maneage-software; \
- elif [ $$n = mpc ]; then c=$(mpc-checksum); w=http://ftp.gnu.org/gnu/mpc; \
- elif [ $$n = mpfr ]; then c=$(mpfr-checksum); w=http://www.mpfr.org/mpfr-current;\
- elif [ $$n = ncurses ]; then c=$(ncurses-checksum); w=http://ftp.gnu.org/gnu/ncurses; \
- elif [ $$n = openssl ]; then c=$(openssl-checksum); w=http://www.openssl.org/source; \
- elif [ $$n = patchelf ]; then c=$(patchelf-checksum); w=http://nixos.org/releases/patchelf/patchelf-$(patchelf-version); \
- elif [ $$n = perl ]; then \
- c=$(perl-checksum); \
- v=$$(echo $(perl-version) | sed -e's/\./ /g' | awk '{printf("%d.0", $$1)}'); \
- w=https://www.cpan.org/src/$$v; \
- elif [ $$n = pkg-config ]; then c=$(pkgconfig-checksum); w=http://pkg-config.freedesktop.org/releases; \
- elif [ $$n = readline ]; then c=$(readline-checksum); w=http://ftp.gnu.org/gnu/readline; \
- elif [ $$n = sed ]; then c=$(sed-checksum); w=http://ftp.gnu.org/gnu/sed; \
- elif [ $$n = tar ]; then c=$(tar-checksum); w=http://ftp.gnu.org/gnu/tar; \
- elif [ $$n = texinfo ]; then c=$(texinfo-checksum); w=http://ftp.gnu.org/gnu/texinfo; \
- elif [ $$n = unzip ]; then \
- c=$(unzip-checksum); \
- mergenames=0; v=$$(echo $(unzip-version) | sed -e's/\.//'); \
- w=ftp://ftp.info-zip.org/pub/infozip/src/unzip$$v.tgz; \
- elif [ $$n = wget ]; then c=$(wget-checksum); w=http://ftp.gnu.org/gnu/wget; \
- elif [ $$n = which ]; then c=$(which-checksum); w=http://ftp.gnu.org/gnu/which; \
- elif [ $$n = xz ]; then c=$(xz-checksum); w=http://tukaani.org/xz; \
- elif [ $$n = zip ]; then \
- c=$(zip-checksum); \
- mergenames=0; v=$$(echo $(zip-version) | sed -e's/\.//'); \
- w=ftp://ftp.info-zip.org/pub/infozip/src/zip$$v.tgz; \
- elif [ $$n = zlib ]; then c=$(zlib-checksum); w=http://www.zlib.net; \
- else \
- echo; echo; echo; \
- echo "'$$n' not recognized as a software tarball name to download."; \
- echo; echo; echo; \
- exit 1; \
- fi; \
- \
- \
- if [ -f $(DEPENDENCIES-DIR)/$* ]; then \
- cp $(DEPENDENCIES-DIR)/$* "$@.unchecked"; \
- else \
- if [ $$mergenames = 1 ]; then tarballurl=$$w/"$*"; \
- else tarballurl=$$w; \
- fi; \
- \
- echo "Downloading $$tarballurl"; \
- if [ -f $(ibdir)/wget ]; then \
- downloader="wget --no-use-server-timestamps -O"; \
- else \
- downloader="$(DOWNLOADER)"; \
- fi; \
- \
- touch $(lockdir)/download; \
+ if [ $$n = bash ]; then c=$(bash-checksum); w=http://akhlaghi.org/maneage-software
+ elif [ $$n = binutils ]; then c=$(binutils-checksum); w=http://ftp.gnu.org/gnu/binutils
+ elif [ $$n = bzip2 ]; then c=$(bzip2-checksum); w=http://akhlaghi.org/maneage-software
+ elif [ $$n = cert ]; then c=$(cert-checksum); w=http://akhlaghi.org/maneage-software
+ elif [ $$n = coreutils ]; then c=$(coreutils-checksum); w=http://ftp.gnu.org/gnu/coreutils
+ elif [ $$n = curl ]; then c=$(curl-checksum); w=https://curl.haxx.se/download
+ elif [ $$n = diffutils ]; then c=$(diffutils-checksum); w=http://ftp.gnu.org/gnu/diffutils
+ elif [ $$n = file ]; then c=$(file-checksum); w=ftp://ftp.astron.com/pub/file
+ elif [ $$n = findutils ]; then c=$(findutils-checksum); w=http://ftp.gnu.org/gnu/findutils
+ elif [ $$n = gawk ]; then c=$(gawk-checksum); w=http://ftp.gnu.org/gnu/gawk
+ elif [ $$n = gcc ]; then c=$(gcc-checksum); w=http://ftp.gnu.org/gnu/gcc/gcc-$(gcc-version)
+ elif [ $$n = gettext ]; then c=$(gettext-checksum); w=https://ftp.gnu.org/gnu/gettext
+ elif [ $$n = git ]; then c=$(git-checksum); w=http://mirrors.edge.kernel.org/pub/software/scm/git
+ elif [ $$n = gmp ]; then c=$(gmp-checksum); w=https://gmplib.org/download/gmp
+ elif [ $$n = grep ]; then c=$(grep-checksum); w=http://ftp.gnu.org/gnu/grep
+ elif [ $$n = gzip ]; then c=$(gzip-checksum); w=http://akhlaghi.org/src
+ elif [ $$n = isl ]; then c=$(isl-checksum); w=ftp://gcc.gnu.org/pub/gcc/infrastructure
+ elif [ $$n = libbsd ]; then c=$(libbsd-checksum); w=http://libbsd.freedesktop.org/releases
+ elif [ $$n = libiconv ]; then c=$(libiconv-checksum); w=https://ftp.gnu.org/pub/gnu/libiconv
+ elif [ $$n = libtool ]; then c=$(libtool-checksum); w=http://ftp.gnu.org/gnu/libtool
+ elif [ $$n = libunistring ]; then c=$(libunistring-checksum); w=http://ftp.gnu.org/gnu/libunistring
+ elif [ $$n = libxml2 ]; then c=$(libxml2-checksum); w=ftp://xmlsoft.org/libxml2
+ elif [ $$n = m4 ]; then
+ mergenames=0
+ c=$(m4-checksum)
+ w=http://akhlaghi.org/maneage-software/m4-1.4.18-patched.tar.gz
+ elif [ $$n = metastore ]; then c=$(metastore-checksum); w=http://akhlaghi.org/maneage-software
+ elif [ $$n = mpc ]; then c=$(mpc-checksum); w=http://ftp.gnu.org/gnu/mpc
+ elif [ $$n = mpfr ]; then c=$(mpfr-checksum); w=http://www.mpfr.org/mpfr-current
+ elif [ $$n = ncurses ]; then c=$(ncurses-checksum); w=http://ftp.gnu.org/gnu/ncurses
+ elif [ $$n = openssl ]; then c=$(openssl-checksum); w=http://www.openssl.org/source
+ elif [ $$n = patchelf ]; then c=$(patchelf-checksum); w=http://nixos.org/releases/patchelf/patchelf-$(patchelf-version)
+ elif [ $$n = perl ]; then
+ c=$(perl-checksum)
+ v=$$(echo $(perl-version) | sed -e's/\./ /g' | awk '{printf("%d.0", $$1)}')
+ w=https://www.cpan.org/src/$$v
+ elif [ $$n = pkg-config ]; then c=$(pkgconfig-checksum); w=http://pkg-config.freedesktop.org/releases
+ elif [ $$n = readline ]; then c=$(readline-checksum); w=http://ftp.gnu.org/gnu/readline
+ elif [ $$n = sed ]; then c=$(sed-checksum); w=http://ftp.gnu.org/gnu/sed
+ elif [ $$n = tar ]; then c=$(tar-checksum); w=http://ftp.gnu.org/gnu/tar
+ elif [ $$n = texinfo ]; then c=$(texinfo-checksum); w=http://ftp.gnu.org/gnu/texinfo
+ elif [ $$n = unzip ]; then
+ c=$(unzip-checksum)
+ mergenames=0; v=$$(echo $(unzip-version) | sed -e's/\.//')
+ w=ftp://ftp.info-zip.org/pub/infozip/src/unzip$$v.tgz
+ elif [ $$n = wget ]; then c=$(wget-checksum); w=http://ftp.gnu.org/gnu/wget
+ elif [ $$n = which ]; then c=$(which-checksum); w=http://ftp.gnu.org/gnu/which
+ elif [ $$n = xz ]; then c=$(xz-checksum); w=http://tukaani.org/xz
+ elif [ $$n = zip ]; then
+ c=$(zip-checksum)
+ mergenames=0; v=$$(echo $(zip-version) | sed -e's/\.//')
+ w=ftp://ftp.info-zip.org/pub/infozip/src/zip$$v.tgz
+ elif [ $$n = zlib ]; then c=$(zlib-checksum); w=http://www.zlib.net
+ else
+ echo; echo; echo
+ echo "'$$n' not recognized as a software tarball name to download."
+ echo; echo; echo
+ exit 1
+ fi
+
+ # Download the raw tarball, using an '.unchecked' suffix to specify
+ # that it is not yet fully checked and usable. But first, since the
+ # download may be interrupted in a previous build and an incomplete
+ # '.unchecked' file may remain, we'll remove any possibly existing
+ # uncheked file.
+ rm -f "$@.unchecked"
+ if [ -f $(DEPENDENCIES-DIR)/$* ]; then
+ cp $(DEPENDENCIES-DIR)/$* "$@.unchecked"
+ else
+ if [ $$mergenames = 1 ]; then tarballurl=$$w/"$*"
+ else tarballurl=$$w
+ fi
+
+ echo "Downloading $$tarballurl"
+ if [ -f $(ibdir)/wget ]; then
+ downloader="wget --no-use-server-timestamps -O"
+ else
+ downloader="$(DOWNLOADER)"
+ fi
+
+ touch $(lockdir)/download
$(downloadwrapper) "$$downloader" $(lockdir)/download \
- $$tarballurl "$@.unchecked" "$(backupservers)"; \
- fi; \
- \
- \
- if type sha512sum > /dev/null 2>/dev/null; then \
- checksum=$$(sha512sum "$@.unchecked" | awk '{print $$1}'); \
- if [ x"$$checksum" = x"$$c" ]; then \
- mv "$@.unchecked" "$@"; \
- else \
- echo "ERROR: Non-matching checksum for '$*'."; \
- echo "Checksum should be: $$c"; \
- echo "Checksum is: $$checksum"; \
- exit 1; \
- fi; \
- else mv "$@.unchecked" "$@"; \
- fi;
+ $$tarballurl "$@.unchecked" "$(backupservers)"
+ fi
+
+ # Make sure the file's Checksum is correct.
+ if type sha512sum > /dev/null 2>/dev/null; then
+ checksum=$$(sha512sum "$@.unchecked" | awk '{print $$1}')
+ if [ x"$$checksum" = x"$$c" ]; then
+ mv "$@.unchecked" "$@"
+ else
+ echo "ERROR: Non-matching checksum for '$*'."
+ echo "Checksum should be: $$c"
+ echo "Checksum is: $$checksum"
+ exit 1
+ fi
+ else mv "$@.unchecked" "$@"
+ fi
@@ -274,36 +290,39 @@ $(tarballs): $(tdir)/%: | $(lockdir)
# Low-level (not built) programs
# ------------------------------
#
-# For the time being, we aren't building a local C compiler, but we'll use
-# any C compiler that the system already has and just make a symbolic link
-# to it.
+# For the time being, some components of the project on some systems, so we
+# are simply making a symbolic link to the system's files here. We'll do
+# this after building GNU Coreutils to have trustable elements.
#
-# ccache: ccache acts like a wrapper over the C compiler and is made to
-# avoid/speed-up compiling of identical files in a system (it is commonly
-# used on large servers). It actually makes `gcc' or `g++' a symbolic link
-# to itself so it can control them internally. So, for our purpose here, it
-# is very annoying and can cause many complications. We thus remove any
-# part of PATH of that has `ccache' in it before making symbolic links to
-# the programs we are not building ourselves.
+# About ccache: ccache acts like a wrapper over the C compiler and is made
+# to avoid/speed-up compiling of identical files in a system (it is
+# commonly used on large servers). It actually makes `gcc' or `g++' a
+# symbolic link to itself so it can control them internally. So, for our
+# purpose here, it is very annoying and can cause many complications. We
+# thus remove any part of PATH of that has `ccache' in it before making
+# symbolic links to the programs we are not building ourselves.
makelink = origpath="$$PATH"; \
- export PATH=$$(echo $(syspath) \
- | tr : '\n' \
- | grep -v ccache \
- | tr '\n' :); \
- a=$$(which $(1) 2> /dev/null); \
- if [ -e $(ibdir)/$(1) ]; then rm $(ibdir)/$(1); fi; \
- if [ x$$a = x ]; then \
- if [ "x$(strip $(2))" = xmandatory ]; then \
- echo "'$(1)' is necessary for higher-level tools."; \
- echo "Please install it for the configuration to continue."; \
- exit 1; \
- fi; \
- else \
- ln -s $$a $(ibdir)/$(1); \
- fi; \
- export PATH="$$origpath"
+ export PATH=$$(echo $(syspath) \
+ | tr : '\n' \
+ | grep -v ccache \
+ | tr '\n' :); \
+ if type $(1) > /dev/null 2> /dev/null; then \
+ if [ x$(3) = x ]; then \
+ ln -sf $$(which $(1)) $(ibdir)/$(1); \
+ else \
+ ln -sf $$(which $(1)) $(ibdir)/$(3); \
+ fi; \
+ else \
+ if [ "x$(strip $(2))" = xmandatory ]; then \
+ echo "'$(1)' is necessary for higher-level tools."; \
+ echo "Please install it for the configuration to continue."; \
+ exit 1; \
+ fi; \
+ fi; \
+ export PATH="$$origpath"
+
$(ibdir) $(ildir):; mkdir $@
-$(ibidir)/low-level-links: | $(ibdir) $(ildir)
+$(ibidir)/low-level-links: $(ibidir)/coreutils | $(ibdir) $(ildir)
# Not-installed (but necessary in some cases) compilers.
# Clang is necessary for CMake.
@@ -325,11 +344,11 @@ $(ibidir)/low-level-links: | $(ibdir) $(ildir)
# Necessary libraries:
# Libdl (for dynamic loading libraries at runtime)
# POSIX Threads library for multi-threaded programs.
- for l in dl pthread; do \
- rm -f $(ildir)/lib$$l*; \
- if [ -f /usr/lib/lib$$l.a ]; then \
- ln -s /usr/lib/lib$$l.* $(ildir)/; \
- fi; \
+ for l in dl pthread; do
+ rm -f $(ildir)/lib$$l*;
+ if [ -f /usr/lib/lib$$l.a ]; then
+ ln -s /usr/lib/lib$$l.* $(ildir)/
+ fi
done
# We want this to be empty (so it doesn't interefere with the other
@@ -349,28 +368,23 @@ $(ibidir)/low-level-links: | $(ibdir) $(ildir)
# ------------------------------------------
#
# The first set of programs to be built are those that we need to unpack
-# the source code tarballs of each program. First, we'll build the
-# necessary programs, then we'll build GNU Tar.
-$(ibidir)/gzip: $(tdir)/gzip-$(gzip-version).tar.gz
+# the source code tarballs of each program. We have already installed Lzip
+# before calling 'basic.mk', so it is present and working. Hence we first
+# build the Lzipped tarball of Gzip, then use our own Gzip to unpack the
+# tarballs of the other compression programs. Once all the compression
+# programs/libraries are complete, we build our own GNU Tar and continue
+# with other software.
+$(ibidir)/gzip: $(tdir)/gzip-$(gzip-version).tar.lz
$(call gbuild, gzip-$(gzip-version), static, , V=1) \
&& echo "GNU Gzip $(gzip-version)" > $@
-# GNU Lzip: For a static build, the `-static' flag should be given to
-# LDFLAGS on the command-line (not from the environment).
-ifeq ($(static_build),yes)
-lzipconf="LDFLAGS=-static"
-else
-lzipconf=
-endif
-$(ibidir)/lzip: $(tdir)/lzip-$(lzip-version).tar.gz
- $(call gbuild, lzip-$(lzip-version), , $(lzipconf)) \
- && echo "Lzip $(lzip-version)" > $@
-
-$(ibidir)/xz: $(tdir)/xz-$(xz-version).tar.gz
+$(ibidir)/xz: $(ibidir)/gzip \
+ $(tdir)/xz-$(xz-version).tar.gz
$(call gbuild, xz-$(xz-version), static) \
&& echo "XZ Utils $(xz-version)" > $@
-$(ibidir)/bzip2: $(tdir)/bzip2-$(bzip2-version).tar.gz
+$(ibidir)/bzip2: $(ibidir)/gzip \
+ $(tdir)/bzip2-$(bzip2-version).tar.gz
# Bzip2 doesn't have a `./configure' script, and its Makefile
# doesn't build a shared library. So we can't use the `gbuild'
# function here and we need to take some extra steps (inspired
@@ -380,28 +394,28 @@ $(ibidir)/bzip2: $(tdir)/bzip2-$(bzip2-version).tar.gz
#
# NOTE: the major version number appears in the final symbolic
# link.
- tdir=bzip2-$(bzip2-version); \
- if [ $(static_build) = yes ]; then \
- makecommand="make LDFLAGS=-static"; \
- makeshared="echo no-shared"; \
- else \
- makecommand="make"; \
- if [ x$(on_mac_os) = xyes ]; then \
- makeshared="echo no-shared"; \
- else \
- makeshared="make -f Makefile-libbz2_so"; \
- fi; \
- fi; \
+ tdir=bzip2-$(bzip2-version)
+ if [ $(static_build) = yes ]; then
+ makecommand="make LDFLAGS=-static"
+ makeshared="echo no-shared"
+ else
+ makecommand="make"
+ if [ x$(on_mac_os) = xyes ]; then
+ makeshared="echo no-shared"
+ else
+ makeshared="make -f Makefile-libbz2_so"
+ fi
+ fi
cd $(ddir) && rm -rf $$tdir \
&& tar xf $(word 1,$(filter $(tdir)/%,$^)) \
&& cd $$tdir \
&& sed -e 's@\(ln -s -f \)$$(PREFIX)/bin/@\1@' Makefile \
> Makefile.sed \
&& mv Makefile.sed Makefile \
- && $$makeshared \
+ && $$makeshared CC=cc \
&& cp -a libbz2* $(ildir)/ \
&& make clean \
- && $$makecommand \
+ && $$makecommand CC=cc \
&& make install PREFIX=$(idir) \
&& cd .. \
&& rm -rf $$tdir \
@@ -409,21 +423,23 @@ $(ibidir)/bzip2: $(tdir)/bzip2-$(bzip2-version).tar.gz
&& ln -fs libbz2.so.1.0 libbz2.so \
&& echo "Bzip2 $(bzip2-version)" > $@
-$(ibidir)/unzip: $(tdir)/unzip-$(unzip-version).tar.gz
- v=$$(echo $(unzip-version) | sed -e's/\.//'); \
+$(ibidir)/unzip: $(ibidir)/gzip \
+ $(tdir)/unzip-$(unzip-version).tar.gz
+ v=$$(echo $(unzip-version) | sed -e's/\.//')
$(call gbuild, unzip$$v, static,, \
- -f unix/Makefile generic_gcc \
+ -f unix/Makefile generic \
CFLAGS="-DBIG_MEM -DMMAP",,pwd, \
- -f unix/Makefile \
+ -f unix/Makefile generic \
BINDIR=$(ibdir) MANDIR=$(idir)/man/man1 ) \
&& echo "Unzip $(unzip-version)" > $@
-$(ibidir)/zip: $(tdir)/zip-$(zip-version).tar.gz
- v=$$(echo $(zip-version) | sed -e's/\.//'); \
+$(ibidir)/zip: $(ibidir)/gzip \
+ $(tdir)/zip-$(zip-version).tar.gz
+ v=$$(echo $(zip-version) | sed -e's/\.//')
$(call gbuild, zip$$v, static,, \
- -f unix/Makefile generic_gcc \
+ -f unix/Makefile generic \
CFLAGS="-DBIG_MEM -DMMAP",,pwd, \
- -f unix/Makefile \
+ -f unix/Makefile generic \
BINDIR=$(ibdir) MANDIR=$(idir)/man/man1 ) \
&& echo "Zip $(zip-version)" > $@
@@ -432,7 +448,8 @@ $(ibidir)/zip: $(tdir)/zip-$(zip-version).tar.gz
#
# Note for a static-only build: Zlib's `./configure' doesn't use Autoconf's
# configure script, it just accepts a direct `--static' option.
-$(ibidir)/zlib: $(tdir)/zlib-$(zlib-version).tar.gz
+$(ibidir)/zlib: $(ibidir)/gzip \
+ $(tdir)/zlib-$(zlib-version).tar.gz
$(call gbuild, zlib-$(zlib-version)) \
&& echo "Zlib $(zlib-version)" > $@
@@ -443,8 +460,7 @@ $(ibidir)/zlib: $(tdir)/zlib-$(zlib-version).tar.gz
# software to be built).
$(ibidir)/tar: $(ibidir)/xz \
$(ibidir)/zip \
- $(ibidir)/gzip \
- $(ibidir)/lzip \
+ $(ibidir)/gzip \
$(ibidir)/zlib \
$(ibidir)/bzip2 \
$(ibidir)/unzip \
@@ -476,13 +492,7 @@ $(ibidir)/tar: $(ibidir)/xz \
# function (for tilde expansion). The first can be disabled with
# `--disable-load', but unfortunately I don't know any way to fix the
# second. So, we'll have to build it dynamically for now.
-$(ibidir)/make: $(ibidir)/tar \
- $(tdir)/make-$(make-version).tar.gz
- # See Tar's comments for the `-j' option.
- $(call gbuild, make-$(make-version), , , -j$(numthreads)) \
- && echo "GNU Make $(make-version)" > $@
-
-$(ibidir)/ncurses: $(ibidir)/make \
+$(ibidir)/ncurses: $(ibidir)/tar \
$(tdir)/ncurses-$(ncurses-version).tar.gz
# Delete the library that will be installed (so we can make sure
@@ -540,32 +550,32 @@ $(ibidir)/ncurses: $(ibidir)/make \
#
# 5. A link is made to also be able to include files from the
# `ncurses' headers.
- if [ x$(on_mac_os) = xyes ]; then so="dylib"; else so="so"; fi; \
- if [ -f $(ildir)/libncursesw.$$so ]; then \
- \
+ if [ x$(on_mac_os) = xyes ]; then so="dylib"; else so="so"; fi
+ if [ -f $(ildir)/libncursesw.$$so ]; then
+
sov=$$(ls -l $(ildir)/libncursesw* \
| awk '/^-/{print $$NF}' \
- | sed -e's|'$(ildir)/libncursesw.'||'); \
- \
- cd "$(ildir)"; \
- for lib in ncurses ncurses++ form panel menu; do \
- ln -fs lib$$lib"w".$$sov lib$$lib.$$so; \
- ln -fs $(ildir)/pkgconfig/"$$lib"w.pc pkgconfig/$$lib.pc; \
- done; \
- for lib in tic tinfo; do \
- ln -fs libncursesw.$$sov lib$$lib.$$so; \
- ln -fs libncursesw.$$sov lib$$lib.$$sov; \
- ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/$$lib.pc; \
- done; \
- ln -fs libncursesw.$$sov libcurses.$$so; \
- ln -fs libncursesw.$$sov libcursesw.$$sov; \
- ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/curses.pc; \
- ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/cursesw.pc; \
- \
- ln -fs $(idir)/include/ncursesw $(idir)/include/ncurses; \
- echo "GNU NCURSES $(ncurses-version)" > $@; \
- else \
- exit 1; \
+ | sed -e's|'$(ildir)/libncursesw.'||')
+
+ cd "$(ildir)"
+ for lib in ncurses ncurses++ form panel menu; do
+ ln -fs lib$$lib"w".$$sov lib$$lib.$$so
+ ln -fs $(ildir)/pkgconfig/"$$lib"w.pc pkgconfig/$$lib.pc
+ done
+ for lib in tic tinfo; do
+ ln -fs libncursesw.$$sov lib$$lib.$$so
+ ln -fs libncursesw.$$sov lib$$lib.$$sov
+ ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/$$lib.pc
+ done
+ ln -fs libncursesw.$$sov libcurses.$$so
+ ln -fs libncursesw.$$sov libcursesw.$$sov
+ ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/curses.pc
+ ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/cursesw.pc
+
+ ln -fs $(idir)/include/ncursesw $(idir)/include/ncurses
+ echo "GNU NCURSES $(ncurses-version)" > $@
+ else
+ exit 1
fi
$(ibidir)/readline: $(ibidir)/ncurses \
@@ -575,7 +585,7 @@ $(ibidir)/readline: $(ibidir)/ncurses \
SHLIB_LIBS="-lncursesw" -j$(numthreads)) \
&& echo "GNU Readline $(readline-version)" > $@
-$(ibidir)/patchelf: $(ibidir)/make \
+$(ibidir)/patchelf: $(ibidir)/tar \
$(tdir)/patchelf-$(patchelf-version).tar.gz
$(call gbuild, patchelf-$(patchelf-version)) \
&& echo "PatchELF $(patchelf-version)" > $@
@@ -629,13 +639,13 @@ $(ibidir)/bash: $(needpatchelf) \
# default. As described in the manual, they are mainly useful when
# you disable them all with `--enable-minimal-config' and enable a
# subset using the `--enable' options.
- if [ "x$(static_build)" = xyes ]; then stopt="--enable-static-link";\
- else stopt=""; \
- fi; \
+ if [ "x$(static_build)" = xyes ]; then stopt="--enable-static-link"
+ else stopt=""
+ fi;
export CFLAGS="$$CFLAGS \
-DDEFAULT_PATH_VALUE='\"$(ibdir)\"' \
-DSTANDARD_UTILS_PATH='\"$(ibdir)\"' \
- -DSYS_BASHRC='\"$(BASH_ENV)\"' "; \
+ -DSYS_BASHRC='\"$(BASH_ENV)\"' "
$(call gbuild, bash-$(bash-version),, $$stopt \
--with-installed-readline=$(ildir) \
--with-curses=yes, \
@@ -645,9 +655,9 @@ $(ibidir)/bash: $(needpatchelf) \
# default. So, we have to manually include it, currently we are
# only doing this on GNU/Linux systems (using the `patchelf'
# program).
- if [ "x$(needpatchelf)" != x ]; then \
- if [ -f $(ibdir)/bash ]; then \
- $(ibdir)/patchelf --set-rpath $(ildir) $(ibdir)/bash; fi \
+ if [ "x$(needpatchelf)" != x ]; then
+ if [ -f $(ibdir)/bash ]; then
+ $(ibdir)/patchelf --set-rpath $(ildir) $(ibdir)/bash; fi
fi
# To be generic, some systems use the `sh' command to call the
@@ -658,10 +668,10 @@ $(ibidir)/bash: $(needpatchelf) \
# Just to be sure that the installation step above went well,
# before making the link, we'll see if the file actually exists
# there.
- if [ -f $(ibdir)/bash ]; then \
- ln -fs $(ibdir)/bash $(ibdir)/sh; \
- echo "GNU Bash $(bash-version)" > $@; \
- else \
+ if [ -f $(ibdir)/bash ]; then
+ ln -fs $(ibdir)/bash $(ibdir)/sh
+ echo "GNU Bash $(bash-version)" > $@
+ else
echo "GNU Bash not built!"; exit 1; fi
@@ -678,14 +688,14 @@ perl-conflddlflags =
else
perl-conflddlflags = -Dlddlflags="-shared $$LDFLAGS"
endif
-$(ibidir)/perl: $(ibidir)/make \
+$(ibidir)/perl: $(ibidir)/tar \
$(tdir)/perl-$(perl-version).tar.gz
major_version=$$(echo $(perl-version) \
| sed -e's/\./ /g' \
- | awk '{printf("%d", $$1)}'); \
+ | awk '{printf("%d", $$1)}')
base_version=$$(echo $(perl-version) \
| sed -e's/\./ /g' \
- | awk '{printf("%d.%d", $$1, $$2)}'); \
+ | awk '{printf("%d.%d", $$1, $$2)}')
cd $(ddir) \
&& rm -rf perl-$(perl-version) \
&& if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \
@@ -795,7 +805,7 @@ $(idir)/etc:; mkdir $@
# Note: cert.pm has to be AFTER the tarball, otherwise the build script
# will try to unpack cert.pm and crash (it unpacks the first dependency
# under `tdir').
-$(ibidir)/openssl: $(ibidir)/make \
+$(ibidir)/openssl: $(ibidir)/tar \
$(tdir)/openssl-$(openssl-version).tar.gz \
$(tdir)/cert.pem \
| $(idir)/etc
@@ -969,13 +979,13 @@ $(ibidir)/libiconv: $(ibidir)/pkg-config \
$(call gbuild, libiconv-$(libiconv-version), static) \
&& echo "GNU libiconv $(libiconv-version)" > $@
-$(ibidir)/libunistring: $(ibidir)/make \
+$(ibidir)/libunistring: $(ibidir)/libiconv \
$(tdir)/libunistring-$(libunistring-version).tar.xz
$(call gbuild, libunistring-$(libunistring-version), static,, \
-j$(numthreads)) \
&& echo "GNU libunistring $(libunistring-version)" > $@
-$(ibidir)/libxml2: $(ibidir)/make \
+$(ibidir)/libxml2: $(ibidir)/tar \
$(tdir)/libxml2-$(libxml2-version).tar.gz
# The libxml2 tarball also contains Python bindings which are built
# and installed to a system directory by default. If you don't need
@@ -1150,7 +1160,7 @@ $(ibidir)/mpfr: $(ibidir)/gmp \
$(call gbuild, mpfr-$(mpfr-version), static, , , make check) \
&& echo "GNU Multiple Precision Floating-Point Reliably $(mpfr-version)" > $@
-$(ibidir)/pkg-config: $(ibidir)/make \
+$(ibidir)/pkg-config: $(ibidir)/tar \
$(tdir)/pkg-config-$(pkgconfig-version).tar.gz
# An existing `libiconv' can cause a conflict with `pkg-config',
# this is why `libiconv' depends on `pkg-config'. On a clean build,
@@ -1305,11 +1315,11 @@ $(ibidir)/gcc: $(gcc-tarball) \
# in '$(idir)/lib' by defining the '$(idir)/lib64' as a symbolic
# link to '$(idir)/lib'.
if [ $(host_cc) = 1 ]; then \
- $(call makelink,gcc); \
- $(call makelink,g++,mandatory); \
- $(call makelink,gfortran,mandatory); \
+ $(call makelink,cc); \
+ $(call makelink,cc,,gcc); \
+ $(call makelink,c++,,g++); \
+ $(call makelink,gfortran); \
$(call makelink,strip,mandatory); \
- ln -sf $$(which gcc) $(ibdir)/cc; \
ccinfo=$$(gcc --version | awk 'NR==1'); \
echo "C compiler (""$$ccinfo"")" > $@; \
else \
diff --git a/reproduce/software/make/build-rules.mk b/reproduce/software/make/build-rules.mk
index 9f5b493..260ded8 100644
--- a/reproduce/software/make/build-rules.mk
+++ b/reproduce/software/make/build-rules.mk
@@ -34,6 +34,31 @@
+# Unpack a tarball in the current directory. The issue is that until we
+# install GNU Tar within Maneage, we have to use the host's Tar
+# implementation and in some cases, they don't recognize '.lz'.
+uncompress = csuffix=$$(echo $$tarball \
+ | sed -e's/\./ /g' \
+ | awk '{print $$NF}'); \
+ if [ x$$csuffix = xlz ]; then \
+ intarrm=1; \
+ intar=$$(echo $$tarball | sed -e's/.lz//'); \
+ lzip -c -d $$tarball > $$intar; \
+ else \
+ intarrm=0; \
+ intar=$$tarball; \
+ fi; \
+ if tar xf $$intar; then \
+ if [ x$$intarrm = x1 ]; then rm $$intar; fi; \
+ else \
+ echo; echo "Tar error"; exit 1; \
+ fi
+
+
+
+
+
+
# GNU Build system
# ----------------
#
@@ -58,13 +83,13 @@ gbuild = if [ x$(static_build) = xyes ] && [ "x$(2)" = xstatic ]; then \
fi; \
check="$(5)"; \
if [ x"$$check" = x ]; then check="echo Skipping-check"; fi; \
- cd $(ddir); rm -rf $(1); \
+ cd $(ddir); \
+ rm -rf $(1); \
if [ x"$$gbuild_tar" = x ]; then \
tarball=$(word 1,$(filter $(tdir)/%,$^)); \
else tarball=$$gbuild_tar; \
fi; \
- if ! tar xf $$tarball; then \
- echo; echo "Tar error"; exit 1; fi; \
+ $(call uncompress); \
cd $(1); \
\
if [ x"$(strip $(6))" = x ]; then confscript=./configure; \
@@ -114,10 +139,11 @@ cbuild = if [ x$(static_build) = xyes ] && [ $(2)x = staticx ]; then \
export LDFLAGS="$$LDFLAGS -static"; \
opts="-DBUILD_SHARED_LIBS=OFF"; \
fi; \
- cd $(ddir) \
- && rm -rf $(1) \
- && tar xf $(word 1,$(filter $(tdir)/%,$^)) \
- && cd $(1) \
+ tarball=$(word 1,$(filter $(tdir)/%,$^)); \
+ cd $(ddir); \
+ rm -rf $(1); \
+ $(call uncompress); \
+ cd $(1) \
&& rm -rf project-build \
&& mkdir project-build \
&& cd project-build \
diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk
index 19cb52f..7cc2d51 100644
--- a/reproduce/software/make/high-level.mk
+++ b/reproduce/software/make/high-level.mk
@@ -104,7 +104,8 @@ export BASH_ENV := $(shell pwd)/reproduce/software/shell/bashrc.sh
# Servers to use as backup, later this should go in a file that is not
# under version control (the actual server that the tarbal comes from is
# irrelevant).
-backupservers = http://akhlaghi.org/maneage-software
+backupservers := $(shell awk '!/^#/{printf "%s ", $$1}' \
+ reproduce/software/config/servers-backup.conf)
# Building flags:
#
@@ -335,6 +336,7 @@ $(tarballs): $(tdir)/%: | $(lockdir)
# storing all the tarballs in one directory, we want it to have the
# same naming convention, so we'll download it to a temporary name,
# then rename that.
+ rm -f "$@.unchecked"
if [ -f $(DEPENDENCIES-DIR)/$* ]; then
cp $(DEPENDENCIES-DIR)/$* "$@.unchecked"
else
@@ -812,11 +814,17 @@ $(ibidir)/libgit2: $(ibidir)/curl \
$(ibidir)/wcslib: $(ibidir)/cfitsio \
$(tdir)/wcslib-$(wcslib-version).tar.bz2
+ # If Fortran isn't present, don't build WCSLIB with it.
+ if type gfortran &> /dev/null; then fortranopt="";
+ else fortranopt="--disable-fortran"
+ fi
+
+ # Build WCSLIB.
$(call gbuild, wcslib-$(wcslib-version), , \
LIBS="-pthread -lcurl -lm" \
--with-cfitsiolib=$(ildir) \
--with-cfitsioinc=$(idir)/include \
- --without-pgplot) \
+ --without-pgplot $$fortranopt) \
&& if [ x$(on_mac_os) = xyes ]; then \
install_name_tool -id $(ildir)/libwcs.6.4.dylib \
$(ildir)/libwcs.6.4.dylib; \
diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk
index 43499c7..eef8279 100644
--- a/reproduce/software/make/python.mk
+++ b/reproduce/software/make/python.mk
@@ -250,6 +250,7 @@ $(pytarballs): $(tdir)/%:
# storing all the tarballs in one directory, we want it to have
# the same naming convention, so we'll download it to a temporary
# name, then rename that.
+ rm -f "$@.unchecked"
if [ -f $(DEPENDENCIES-DIR)/$* ]; then
cp $(DEPENDENCIES-DIR)/$* "$@.unchecked"
else