diff options
Diffstat (limited to 'reproduce/software/make')
-rw-r--r-- | reproduce/software/make/README.md | 30 | ||||
-rwxr-xr-x | reproduce/software/make/atlas-multiple.mk | 19 | ||||
-rwxr-xr-x | reproduce/software/make/atlas-single.mk | 19 | ||||
-rw-r--r-- | reproduce/software/make/basic.mk | 725 | ||||
-rw-r--r-- | reproduce/software/make/build-rules.mk | 61 | ||||
-rw-r--r-- | reproduce/software/make/high-level.mk | 330 | ||||
-rw-r--r-- | reproduce/software/make/python.mk | 134 |
7 files changed, 736 insertions, 582 deletions
diff --git a/reproduce/software/make/README.md b/reproduce/software/make/README.md index d71a3d5..7376cdd 100644 --- a/reproduce/software/make/README.md +++ b/reproduce/software/make/README.md @@ -1,5 +1,8 @@ Software building instructions -============================== +------------------------------ + +Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>\ +See the end of the file for license conditions. This directory contains Makefiles that are called by the high-level `reproduce/software/shell/configure.sh` script. The main target for the @@ -13,8 +16,7 @@ Besides being directly used in the paper, these simple plain text files also act as prerequisites for higher-level software that depend on lower-level ones. -Note on prerequisites ---------------------- +### Note on prerequisites Tarballs are order-only prerequsites (after a `|`) because we already check their contents with the checksums, so their date is irrelevant: a @@ -30,4 +32,24 @@ higher-level program, then it shouldn't be order-only. Libraries or Python modules that are used at compile time must be normal prerequisites (not order-only), because they are used during the building -of the program.
\ No newline at end of file +of the program. + + + + + +### Copyright information +This file is part of Maneage (https://maneage.org). + +This file is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or (at your +option) any later version. + +This file is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with this file. If not, see <http://www.gnu.org/licenses/>.
\ No newline at end of file diff --git a/reproduce/software/make/atlas-multiple.mk b/reproduce/software/make/atlas-multiple.mk index c98130d..9bd26b1 100755 --- a/reproduce/software/make/atlas-multiple.mk +++ b/reproduce/software/make/atlas-multiple.mk @@ -10,15 +10,18 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org> # -# This Makefile is part of Maneage. Maneage is free software: you can -# redistribute it and/or modify it under the terms of the GNU General -# Public License as published by the Free Software Foundation, either -# version 3 of the License, or (at your option) any later version. +# This Makefile is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# Maneage is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. See <http://www.gnu.org/licenses/>. +# This Makefile is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this Makefile. If not, see <http://www.gnu.org/licenses/>. ORIGLDFLAGS := $(LDFLAGS) diff --git a/reproduce/software/make/atlas-single.mk b/reproduce/software/make/atlas-single.mk index 82eade9..29373e0 100755 --- a/reproduce/software/make/atlas-single.mk +++ b/reproduce/software/make/atlas-single.mk @@ -10,15 +10,18 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org> # -# This Makefile is part of Maneage. Maneage is free software: you can -# redistribute it and/or modify it under the terms of the GNU General -# Public License as published by the Free Software Foundation, either -# version 3 of the License, or (at your option) any later version. +# This Makefile is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# Maneage is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. See <http://www.gnu.org/licenses/>. +# This Makefile is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this Makefile. If not, see <http://www.gnu.org/licenses/>. ORIGLDFLAGS := $(LDFLAGS) diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 0bec163..b4745e2 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -18,15 +18,18 @@ # Copyright (C) 2018-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2019-2020 Raul Infante-Sainz <infantesainz@gmail.com> # -# This Makefile is part of Maneage. Maneage is free software: you can -# redistribute it and/or modify it under the terms of the GNU General -# Public License as published by the Free Software Foundation, either -# version 3 of the License, or (at your option) any later version. +# This Makefile is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# Maneage is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. See <http://www.gnu.org/licenses/>. +# This Makefile is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this Makefile. If not, see <http://www.gnu.org/licenses/>. # Top level environment @@ -49,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 @@ -56,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, @@ -82,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) + + @@ -124,17 +142,18 @@ tarballs = $(foreach t, bash-$(bash-version).tar.lz \ findutils-$(findutils-version).tar.xz \ gawk-$(gawk-version).tar.lz \ gcc-$(gcc-version).tar.xz \ + gettext-$(gettext-version).tar.xz \ 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 \ - lzip-$(lzip-version).tar.gz \ + libunistring-$(libunistring-version).tar.xz \ + libxml2-$(libxml2-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 \ @@ -161,102 +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 = 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 = 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 @@ -265,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. @@ -302,6 +330,7 @@ $(ibidir)/low-level-links: | $(ibdir) $(ildir) $(call makelink,clang++) # Mac OS specific + $(call makelink,mig) $(call makelink,sysctl) $(call makelink,sw_vers) $(call makelink,dsymutil) @@ -312,17 +341,14 @@ $(ibidir)/low-level-links: | $(ibdir) $(ildir) # executable name `glibtool'. $(call makelink,libtool) - # GNU Gettext (translate messages) - $(call makelink,msgfmt) - # 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 @@ -342,59 +368,54 @@ $(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 - # from the "Linux from Scratch" guide for Bzip2): + # from the GNU/Linux from Scratch (LFS) guide for Bzip2): # 1) The `sed' call is for relative installed symbolic links. # 2) The special Makefile-libbz2_so builds shared libraries. # # 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)/%,$|)) \ + && 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 \ @@ -402,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)" > $@ @@ -425,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)" > $@ @@ -435,13 +459,12 @@ $(ibidir)/zlib: | $(tdir)/zlib-$(zlib-version).tar.gz # Tar to be the last compression-related software (the first-set of # software to be built). $(ibidir)/tar: $(ibidir)/xz \ - $(ibidir)/zip \ - $(ibidir)/gzip \ - $(ibidir)/lzip \ + $(ibidir)/zip \ + $(ibidir)/gzip \ $(ibidir)/zlib \ $(ibidir)/bzip2 \ - $(ibidir)/unzip \ - | $(tdir)/tar-$(tar-version).tar.gz + $(ibidir)/unzip \ + $(tdir)/tar-$(tar-version).tar.gz # Since all later programs depend on Tar, the configuration will be # stuck here, only making Tar. So its more efficient to built it on # multiple threads (when the user's Make doesn't pass down the @@ -469,14 +492,8 @@ $(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 \ - $(tdir)/ncurses-$(ncurses-version).tar.gz +$(ibidir)/ncurses: $(ibidir)/tar \ + $(tdir)/ncurses-$(ncurses-version).tar.gz # Delete the library that will be installed (so we can make sure # the build process completed afterwards and reset the links). @@ -507,7 +524,7 @@ $(ibidir)/ncurses: | $(ibidir)/make \ # explicitly mentioning its name correctly (as a value to `-l' at # link time in their configure scripts). # - # This part is taken from the Arch Linux build script[1], then + # This part is taken from the Arch GNU/Linux build script[1], then # extended to Mac thanks to Homebrew's script [2]. # # [1] https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/ncurses @@ -533,43 +550,43 @@ $(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 \ - | $(tdir)/readline-$(readline-version).tar.gz + $(tdir)/readline-$(readline-version).tar.gz $(call gbuild, readline-$(readline-version), static, \ --with-curses --disable-install-examples, \ SHLIB_LIBS="-lncursesw" -j$(numthreads)) \ && echo "GNU Readline $(readline-version)" > $@ -$(ibidir)/patchelf: | $(ibidir)/make \ - $(tdir)/patchelf-$(patchelf-version).tar.gz +$(ibidir)/patchelf: $(ibidir)/tar \ + $(tdir)/patchelf-$(patchelf-version).tar.gz $(call gbuild, patchelf-$(patchelf-version)) \ && echo "PatchELF $(patchelf-version)" > $@ @@ -609,43 +626,38 @@ needpatchelf = else needpatchelf = $(ibidir)/patchelf endif -$(ibidir)/bash: $(ibidir)/readline \ - | $(needpatchelf) \ - $(tdir)/bash-$(bash-version).tar.lz +$(ibidir)/bash: $(needpatchelf) \ + $(ibidir)/gettext \ + $(ibidir)/readline \ + $(tdir)/bash-$(bash-version).tar.lz - # Delete the (possibly) existing Bash executable. + # Delete the (possibly) existing Bash executable in the project, + # let it use the default shell of the host. rm -f $(ibdir)/bash - # Build Bash. Note that we aren't building Bash with - # `--with-installed-readline'. This is because (as described above) - # Bash needs the `LD_LIBRARY_PATH' set properly before it is - # run. Within a recipe, things are fine (we do set - # `LD_LIBRARY_PATH'). However, Make will also call the shell - # outside of the recipe (for example in the `foreach' Make - # function!). In such cases, our new `LD_LIBRARY_PATH' is not set. - # This will cause a crash in the shell and thus the Makefile, - # complaining that it can't find `libreadline'. Therefore, even - # though we build readline below, we won't link Bash with an - # external readline. - # # Bash has many `--enable' features which are already enabled by # 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; \ - $(call gbuild, bash-$(bash-version),, \ - --with-installed-readline=$(ildir) $$stopt, \ - -j$(numthreads)) + 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)\"' " + $(call gbuild, bash-$(bash-version),, $$stopt \ + --with-installed-readline=$(ildir) \ + --with-curses=yes, \ + -j$(numthreads)) # Atleast on GNU/Linux systems, Bash doesn't include RPATH by # 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 @@ -656,10 +668,10 @@ $(ibidir)/bash: $(ibidir)/readline \ # 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 @@ -676,25 +688,20 @@ perl-conflddlflags = else perl-conflddlflags = -Dlddlflags="-shared $$LDFLAGS" endif -$(ibidir)/perl: | $(ibidir)/bash \ - $(tdir)/perl-$(perl-version).tar.gz +$(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 \ + && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \ echo; echo "Tar error"; exit 1; \ fi \ && cd perl-$(perl-version) \ - && sed -e's|\#\! /bin/sh|\#\! $(ibdir)/bash|' \ - -e's|\#\!/bin/sh|\#\! $(ibdir)/bash|' \ - Configure > Configure-tmp \ - && mv -f Configure-tmp Configure \ - && chmod +x Configure \ && ./Configure -des \ -Dusethreads \ -Duseshrplib \ @@ -715,8 +722,8 @@ $(ibidir)/perl: | $(ibidir)/bash \ -Dcccdlflags='-fPIC' \ $(perl-conflddlflags) \ -Dldflags="$$LDFLAGS" \ - && make SHELL=$(ibdir)/bash -j$(numthreads) \ - && make SHELL=$(ibdir)/bash install \ + && make -j$(numthreads) \ + && make install \ && cd .. \ && rm -rf perl-$(perl-version) \ && cd $$topdir \ @@ -747,12 +754,13 @@ $(ibidir)/perl: | $(ibidir)/bash \ # an error). # # Coreutils uses Perl to create man pages! -$(ibidir)/coreutils: $(ibidir)/openssl \ - | $(ibidir)/perl \ - $(tdir)/coreutils-$(coreutils-version).tar.xz +$(ibidir)/coreutils: $(ibidir)/bash \ + $(ibidir)/perl \ + $(ibidir)/openssl \ + $(tdir)/coreutils-$(coreutils-version).tar.xz cd $(ddir) \ && rm -rf coreutils-$(coreutils-version) \ - && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \ + && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \ echo; echo "Tar error"; exit 1; \ fi \ && cd coreutils-$(coreutils-version) \ @@ -794,10 +802,13 @@ $(ibidir)/coreutils: $(ibidir)/openssl \ #openssl-static = no-dso no-dynamic-engine no-shared #endif $(idir)/etc:; mkdir $@ -$(ibidir)/openssl: $(tdir)/cert.pem \ - | $(idir)/etc \ - $(ibidir)/make \ - $(tdir)/openssl-$(openssl-version).tar.gz +# 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)/tar \ + $(tdir)/openssl-$(openssl-version).tar.gz \ + $(tdir)/cert.pem \ + | $(idir)/etc # According to OpenSSL's Wiki (link bellow), it can't automatically # detect Mac OS's structure. It will need some help. So we'll use # the `on_mac_os' Make variable that we defined in the configure @@ -853,8 +864,8 @@ $(ibidir)/openssl: $(tdir)/cert.pem \ # them. Note that if it does link with them, the configuration will crash # when the library is updated/changed by the host, and the whole purpose of # this project is avoid dependency on the host as much as possible. -$(ibidir)/curl: | $(ibidir)/coreutils \ - $(tdir)/curl-$(curl-version).tar.gz +$(ibidir)/curl: $(ibidir)/coreutils \ + $(tdir)/curl-$(curl-version).tar.gz $(call gbuild, curl-$(curl-version), , \ LIBS="-pthread" \ --with-zlib=$(ildir) \ @@ -892,8 +903,8 @@ $(ibidir)/curl: | $(ibidir)/coreutils \ # host system (especially a crash when these libraries are updated on the # host), they are disabled here. $(ibidir)/wget: $(ibidir)/libiconv \ - | $(ibidir)/coreutils \ - $(tdir)/wget-$(wget-version).tar.lz + $(ibidir)/coreutils \ + $(tdir)/wget-$(wget-version).tar.lz # We need to explicitly disable `libiconv', because of the # `pkg-config' and `libiconv' problem. libs="-pthread"; \ @@ -926,25 +937,25 @@ $(ibidir)/wget: $(ibidir)/libiconv \ # process of the higher-level programs and libraries. Note that during the # building of those higher-level programs (after this Makefile finishes), # there is no access to the system's PATH. -$(ibidir)/diffutils: | $(ibidir)/coreutils \ - $(tdir)/diffutils-$(diffutils-version).tar.xz +$(ibidir)/diffutils: $(ibidir)/coreutils \ + $(tdir)/diffutils-$(diffutils-version).tar.xz $(call gbuild, diffutils-$(diffutils-version), static,,V=1) \ && echo "GNU Diffutils $(diffutils-version)" > $@ -$(ibidir)/file: | $(ibidir)/coreutils \ - $(tdir)/file-$(file-version).tar.gz +$(ibidir)/file: $(ibidir)/coreutils \ + $(tdir)/file-$(file-version).tar.gz $(call gbuild, file-$(file-version), static,,V=1) \ && echo "File $(file-version)" > $@ -$(ibidir)/findutils: | $(ibidir)/coreutils \ - $(tdir)/findutils-$(findutils-version).tar.xz +$(ibidir)/findutils: $(ibidir)/coreutils \ + $(tdir)/findutils-$(findutils-version).tar.xz $(call gbuild, findutils-$(findutils-version), static,,V=1) \ && echo "GNU Findutils $(findutils-version)" > $@ $(ibidir)/gawk: $(ibidir)/gmp \ $(ibidir)/mpfr \ - | $(ibidir)/coreutils \ - $(tdir)/gawk-$(gawk-version).tar.lz + $(ibidir)/coreutils \ + $(tdir)/gawk-$(gawk-version).tar.lz # AWK doesn't include RPATH by default, so we'll have to manually # include it using the `patchelf' program (which was a dependency # of Bash). Just note that AWK produces two executables (for @@ -963,14 +974,41 @@ $(ibidir)/gawk: $(ibidir)/gmp \ fi \ && echo "GNU AWK $(gawk-version)" > $@ -$(ibidir)/libiconv: | $(ibidir)/pkg-config \ - $(tdir)/libiconv-$(libiconv-version).tar.gz +$(ibidir)/libiconv: $(ibidir)/pkg-config \ + $(tdir)/libiconv-$(libiconv-version).tar.gz $(call gbuild, libiconv-$(libiconv-version), static) \ && echo "GNU libiconv $(libiconv-version)" > $@ +$(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)/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 + # the Python bindings, the easiest solution is to compile without + # Python support: `./configure --without-python'. If you really need + # the Python bindings, use `--with-python-install-dir=DIR' instead. + $(call gbuild, libxml2-$(libxml2-version), static, \ + --without-python) \ + && echo "Libxml2 $(libxml2-version)" > $@ + +$(ibidir)/gettext: $(ibidir)/m4 \ + $(ibidir)/libxml2 \ + $(ibidir)/ncurses \ + $(ibidir)/libiconv \ + $(ibidir)/libunistring \ + $(tdir)/gettext-$(gettext-version).tar.xz + $(call gbuild, gettext-$(gettext-version), static, V=1) \ + && echo "GNU gettext $(gettext-version)" > $@ + $(ibidir)/git: $(ibidir)/curl \ + $(ibidir)/gettext \ $(ibidir)/libiconv \ - | $(tdir)/git-$(git-version).tar.xz + $(tdir)/git-$(git-version).tar.xz if [ x$(on_mac_os) = xyes ]; then \ export LDFLAGS="$$LDFLAGS -lcharset"; \ fi; \ @@ -979,29 +1017,29 @@ $(ibidir)/git: $(ibidir)/curl \ --with-iconv=$(idir), V=1) \ && echo "Git $(git-version)" > $@ -$(ibidir)/gmp: | $(ibidir)/m4 \ - $(ibidir)/coreutils \ - $(tdir)/gmp-$(gmp-version).tar.lz +$(ibidir)/gmp: $(ibidir)/m4 \ + $(ibidir)/coreutils \ + $(tdir)/gmp-$(gmp-version).tar.lz $(call gbuild, gmp-$(gmp-version), static, \ --enable-cxx --enable-fat, ,make check) \ && echo "GNU Multiple Precision Arithmetic Library $(gmp-version)" > $@ # On Mac OS, libtool does different things, so to avoid confusion, we'll # prefix GNU's libtool executables with `glibtool'. -$(ibidir)/glibtool: | $(ibidir)/m4 \ - $(tdir)/libtool-$(libtool-version).tar.xz +$(ibidir)/glibtool: $(ibidir)/m4 \ + $(tdir)/libtool-$(libtool-version).tar.xz $(call gbuild, libtool-$(libtool-version), static, \ --program-prefix=g, V=1) \ && ln -s $(ibdir)/glibtoolize $(ibdir)/libtoolize \ && echo "GNU Libtool $(libtool-version)" > $@ -$(ibidir)/grep: | $(ibidir)/coreutils \ - $(tdir)/grep-$(grep-version).tar.xz +$(ibidir)/grep: $(ibidir)/coreutils \ + $(tdir)/grep-$(grep-version).tar.xz $(call gbuild, grep-$(grep-version), static,,V=1) \ && echo "GNU Grep $(grep-version)" > $@ -$(ibidir)/libbsd: | $(ibidir)/coreutils \ - $(tdir)/libbsd-$(libbsd-version).tar.xz +$(ibidir)/libbsd: $(ibidir)/coreutils \ + $(tdir)/libbsd-$(libbsd-version).tar.xz $(call gbuild, libbsd-$(libbsd-version), static,,V=1) \ && echo "Libbsd $(libbsd-version)" > $@ @@ -1010,27 +1048,24 @@ $(ibidir)/libbsd: | $(ibidir)/coreutils \ # # [1] https://raw.githubusercontent.com/macports/macports-ports/edf0ee1e2cf/devel/m4/files/secure_snprintf.patch # [2] https://github.com/Homebrew/homebrew-core/blob/master/Formula/m4.rb -$(ibidir)/m4: | $(ibidir)/sed \ - $(ibidir)/texinfo \ - $(ibidir)/coreutils \ - $(tdir)/m4-$(m4-version).tar.gz +$(ibidir)/m4: $(ibidir)/texinfo \ + $(tdir)/m4-$(m4-version).tar.gz cd $(ddir); \ unpackdir=m4-$(m4-version); \ rm -rf $$unpackdir \ - && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \ + && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \ echo; echo "Tar error"; exit 1; \ fi \ && cd $$unpackdir \ && if [ x$(on_mac_os) = xyes ]; then \ - sed -i -e's|if !(((__GLIBC__ > 2|if !defined(__APPLE__) \&\& !(((__GLIBC__ > 2|' lib/vasnprintf.c; \ + sed 's|if !(((__GLIBC__ > 2|if !defined(__APPLE__) \&\& !(((__GLIBC__ > 2|' \ + lib/vasnprintf.c > lib/vasnprintf_edited.c; \ + mv lib/vasnprintf_edited.c lib/vasnprintf.c; \ fi \ - && sed -i -e's|\#\! /bin/sh|\#\! $(ibdir)/bash|' \ - -e's|\#\!/bin/sh|\#\! $(ibdir)/bash|' \ - configure \ - && ./configure --prefix=$(idir) SHELL=$(ibdir)/bash \ - LDFLAGS="$(LDFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ - && make SHELL=$(ibdir)/bash V=1 -j$(numthreads) \ - && make SHELL=$(ibdir)/bash V=1 install \ + && ./configure --prefix=$(idir) LDFLAGS="$(LDFLAGS)" \ + CPPFLAGS="$(CPPFLAGS)" \ + && make V=1 -j$(numthreads) \ + && make V=1 install \ && cd .. \ && rm -rf $$unpackdir \ && echo "GNU M4 $(m4-version)" > $@ @@ -1058,11 +1093,11 @@ else needlibbsd = $(ibidir)/libbsd endif $(ibidir)/metastore: $(needlibbsd) \ - | $(ibidir)/sed \ - $(ibidir)/git \ - $(ibidir)/gawk \ - $(ibidir)/coreutils \ - $(tdir)/metastore-$(metastore-version).tar.gz + $(ibidir)/sed \ + $(ibidir)/git \ + $(ibidir)/gawk \ + $(ibidir)/coreutils \ + $(tdir)/metastore-$(metastore-version).tar.gz # Metastore doesn't have any `./configure' script. So we'll just # call `pwd' as a place-holder for the `./configure' command. @@ -1121,12 +1156,12 @@ $(ibidir)/metastore: $(needlibbsd) \ $(ibidir)/mpfr: $(ibidir)/gmp \ - | $(tdir)/mpfr-$(mpfr-version).tar.xz + $(tdir)/mpfr-$(mpfr-version).tar.xz $(call gbuild, mpfr-$(mpfr-version), static, , , make check) \ && echo "GNU Multiple Precision Floating-Point Reliably $(mpfr-version)" > $@ -$(ibidir)/pkg-config: | $(ibidir)/coreutils \ - $(tdir)/pkg-config-$(pkgconfig-version).tar.gz +$(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, # `pkg-config' is built first. But when we don't have a clean build @@ -1147,13 +1182,13 @@ $(ibidir)/pkg-config: | $(ibidir)/coreutils \ --with-pc-path=$(ildir)/pkgconfig, V=1) \ && echo "pkg-config $(pkgconfig-version)" > $@ -$(ibidir)/sed: | $(ibidir)/coreutils \ - $(tdir)/sed-$(sed-version).tar.xz +$(ibidir)/sed: $(ibidir)/coreutils \ + $(tdir)/sed-$(sed-version).tar.xz $(call gbuild, sed-$(sed-version), static,,V=1) \ && echo "GNU Sed $(sed-version)" > $@ -$(ibidir)/texinfo: | $(ibidir)/perl \ - $(tdir)/texinfo-$(texinfo-version).tar.xz +$(ibidir)/texinfo: $(ibidir)/perl \ + $(tdir)/texinfo-$(texinfo-version).tar.xz $(call gbuild, texinfo-$(texinfo-version), static) \ && if [ "x$(needpatchelf)" != x ]; then \ $(ibdir)/patchelf --set-rpath $(ildir) $(ibdir)/info; \ @@ -1161,8 +1196,8 @@ $(ibidir)/texinfo: | $(ibidir)/perl \ fi \ && echo "GNU Texinfo $(texinfo-version)" > $@ -$(ibidir)/which: | $(ibidir)/coreutils \ - $(tdir)/which-$(which-version).tar.gz +$(ibidir)/which: $(ibidir)/coreutils \ + $(tdir)/which-$(which-version).tar.gz $(call gbuild, which-$(which-version), static) \ && echo "GNU Which $(which-version)" > $@ @@ -1179,12 +1214,12 @@ $(ibidir)/which: | $(ibidir)/coreutils \ # ------------------------- $(ibidir)/isl: $(ibidir)/gmp \ - | $(tdir)/isl-$(isl-version).tar.bz2 + $(tdir)/isl-$(isl-version).tar.bz2 $(call gbuild, isl-$(isl-version), static, , V=1) \ && echo "GNU Integer Set Library $(isl-version)" > $@ $(ibidir)/mpc: $(ibidir)/mpfr \ - | $(tdir)/mpc-$(mpc-version).tar.gz + $(tdir)/mpc-$(mpc-version).tar.gz $(call gbuild, mpc-$(mpc-version), static, , , make check) \ && echo "GNU Multiple Precision Complex library" > $@ @@ -1218,19 +1253,19 @@ endif # these necessary files in our local build directory. IMPORTANT NOTE: # later, when we build the GNU C Library in the project, we should remove # this step. -$(ibidir)/binutils: | $(ibidir)/sed \ - $(ibidir)/wget \ - $(ibidir)/grep \ - $(ibidir)/file \ - $(ibidir)/gawk \ - $(ibidir)/which \ - $(ibidir)/glibtool \ - $(binutils-tarball) \ - $(ibidir)/metastore \ - $(ibidir)/findutils \ - $(ibidir)/diffutils \ - $(ibidir)/coreutils \ - $(gcc-prerequisites) +$(ibidir)/binutils: $(ibidir)/sed \ + $(ibidir)/wget \ + $(ibidir)/grep \ + $(ibidir)/file \ + $(ibidir)/gawk \ + $(ibidir)/which \ + $(ibidir)/glibtool \ + $(binutils-tarball) \ + $(ibidir)/metastore \ + $(ibidir)/findutils \ + $(ibidir)/diffutils \ + $(ibidir)/coreutils \ + $(gcc-prerequisites) if [ x$(on_mac_os) = xyes ]; then \ $(call makelink,as); \ @@ -1271,8 +1306,8 @@ gcc-tarball = else gcc-tarball = $(tdir)/gcc-$(gcc-version).tar.xz endif -$(ibidir)/gcc: | $(ibidir)/binutils \ - $(gcc-tarball) +$(ibidir)/gcc: $(gcc-tarball) \ + $(ibidir)/binutils # GCC builds is own libraries in '$(idir)/lib64'. But all other # libraries are in '$(idir)/lib'. Since this project is only for a @@ -1280,11 +1315,11 @@ $(ibidir)/gcc: | $(ibidir)/binutils \ # 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 \ @@ -1305,7 +1340,7 @@ $(ibidir)/gcc: | $(ibidir)/binutils \ fi; \ cd $$odir; \ rm -rf gcc-$(gcc-version); \ - tar xf $(word 1,$(filter $(tdir)/%,$|)); \ + tar xf $(word 1,$(filter $(tdir)/%,$^)); \ if [ $$odir != $(ddir) ]; then \ ln -s $$odir/gcc-$(gcc-version) $(ddir)/gcc-$(gcc-version); \ fi; \ diff --git a/reproduce/software/make/build-rules.mk b/reproduce/software/make/build-rules.mk index 8d78ce3..260ded8 100644 --- a/reproduce/software/make/build-rules.mk +++ b/reproduce/software/make/build-rules.mk @@ -5,15 +5,18 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org> # -# This Makefile is part of Maneage. Maneage is free software: you can -# redistribute it and/or modify it under the terms of the GNU General -# Public License as published by the Free Software Foundation, either -# version 3 of the License, or (at your option) any later version. +# This Makefile is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# Maneage is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. See <http://www.gnu.org/licenses/>. +# This Makefile is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this Makefile. If not, see <http://www.gnu.org/licenses/>. @@ -31,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 # ---------------- # @@ -55,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)/%,$|)); \ + 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; \ @@ -111,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 4480e19..7cc2d51 100644 --- a/reproduce/software/make/high-level.mk +++ b/reproduce/software/make/high-level.mk @@ -11,15 +11,18 @@ # Copyright (C) 2018-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2019-2020 Raul Infante-Sainz <infantesainz@gmail.com> # -# This Makefile is part of Maneage. Maneage is free software: you can -# redistribute it and/or modify it under the terms of the GNU General -# Public License as published by the Free Software Foundation, either -# version 3 of the License, or (at your option) any later version. +# This Makefile is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# Maneage is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. See <http://www.gnu.org/licenses/>. +# This Makefile is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this Makefile. If not, see <http://www.gnu.org/licenses/>. @@ -39,6 +42,7 @@ ibdir = $(BDIR)/software/installed/bin ildir = $(BDIR)/software/installed/lib iidir = $(BDIR)/software/installed/include dtexdir = $(shell pwd)/reproduce/software/bibtex +patchdir= $(shell pwd)/reproduce/software/patches itidir = $(BDIR)/software/installed/version-info/tex ictdir = $(BDIR)/software/installed/version-info/cite ipydir = $(BDIR)/software/installed/version-info/python @@ -100,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: # @@ -180,12 +185,12 @@ tarballs = $(foreach t, apachelog4cxx-$(apachelog4cxx-version).tar.lz \ libnsl-$(libnsl-version).tar.gz \ libpng-$(libpng-version).tar.xz \ libtirpc-$(libtirpc-version).tar.bz2 \ - libxml2-$(libxml2-version).tar.gz \ missfits-$(missfits-version).tar.gz \ netpbm-$(netpbm-version).tar.gz \ openblas-$(openblas-version).tar.gz \ openmpi-$(openmpi-version).tar.gz \ openssh-$(openssh-version).tar.gz \ + patch-$(patch-version).tar.gz \ pixman-$(pixman-version).tar.gz \ R-$(R-version).tar.gz \ scamp-$(scamp-version).tar.lz \ @@ -196,6 +201,7 @@ tarballs = $(foreach t, apachelog4cxx-$(apachelog4cxx-version).tar.lz \ rpcsvc-proto-$(rpcsvc-proto-version).tar.xz \ tides-$(tides-version).tar.gz \ tiff-$(libtiff-version).tar.gz \ + valgrind-$(valgrind-version).tar.bz2 \ wcslib-$(wcslib-version).tar.bz2 \ xlsxio-$(xlsxio-version).tar.gz \ yaml-$(yaml-version).tar.gz \ @@ -280,7 +286,6 @@ $(tarballs): $(tdir)/%: | $(lockdir) c=$(libgit2-checksum) w=https://github.com/libgit2/libgit2/archive/v$(libgit2-version).tar.gz elif [ $$n = libtirpc ]; then c=$(libtirpc-checksum); w=https://downloads.sourceforge.net/libtirpc - elif [ $$n = libxml2 ]; then c=$(libxml2-checksum); w=ftp://xmlsoft.org/libxml2 elif [ $$n = missfits ]; then c=$(missfits-checksum); w=https://www.astromatic.net/download/missfits elif [ $$n = netpbm ]; then c=$(netpbm-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = openblas ]; then @@ -293,6 +298,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) majorver=$$(echo $(openmpi-version) | sed -e 's/\./ /g' | awk '{printf("%d.%d", $$1, $$2)}') w=https://download.open-mpi.org/release/open-mpi/v$$majorver/$* elif [ $$n = openssh ]; then c=$(openssh-checksum); w=https://artfiles.org/openbsd/OpenSSH/portable + elif [ $$n = patch ]; then c=$(patch-checksum); w=http://ftp.gnu.org/gnu/patch elif [ $$n = pixman ]; then c=$(pixman-checksum); w=https://www.cairographics.org/releases elif [ $$n = R ]; then c=$(R-checksum); majver=$$(echo $(R-version) | sed -e's/\./ /g' | awk '{print $$1}') @@ -308,6 +314,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) elif [ $$n = swig ]; then c=$(swig-checksum); w=https://sourceforge.net/projects/swig/files/swig/swig-$(swig-version) elif [ $$n = tides ]; then c=$(tides-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = tiff ]; then c=$(libtiff-checksum); w=https://download.osgeo.org/libtiff + elif [ $$n = valgrind ]; then c=$(valgrind-checksum); w=https://sourceware.org/pub/valgrind elif [ $$n = wcslib ]; then c=$(wcslib-checksum); w=ftp://ftp.atnf.csiro.au/pub/software/wcslib elif [ $$n = xlsxio ]; then mergenames=0 @@ -329,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 @@ -401,14 +409,14 @@ $(tarballs): $(tdir)/%: | $(lockdir) # build it because it will complain about the version of libtool, so until # the version 0.11.0 of log4cxx, we'll have to run `autogen.sh' on the # unpacked source also. -$(ibidir)/apachelog4cxx: | $(ibidir)/automake \ - $(tdir)/apachelog4cxx-$(apachelog4cxx-version).tar.lz +$(ibidir)/apachelog4cxx: $(ibidir)/automake \ + $(tdir)/apachelog4cxx-$(apachelog4cxx-version).tar.lz pdir=apachelog4cxx-$(apachelog4cxx-version) rm -rf $(ddir)/$$pdir topdir=$(pwd) cd $(ddir) - tar xf $(word 1,$(filter $(tdir)/%,$|)) + tar xf $(word 1,$(filter $(tdir)/%,$^)) cd $$pdir ./autogen.sh \ && ./configure SHELL=$(ibdir)/bash --prefix=$(idir) \ @@ -419,12 +427,12 @@ $(ibidir)/apachelog4cxx: | $(ibidir)/automake \ && cd $$topdir \ && echo "Apache log4cxx $(apachelog4cxx-version)" > $@ -$(ibidir)/apr: | $(tdir)/apr-$(apr-version).tar.gz +$(ibidir)/apr: $(tdir)/apr-$(apr-version).tar.gz $(call gbuild, apr-$(apr-version), ,--disable-static) \ && echo "Apache Portable Runtime $(apr-version)" > $@ $(ibidir)/apr-util: $(ibidir)/apr \ - | $(tdir)/apr-util-$(apr-util-version).tar.gz + $(tdir)/apr-util-$(apr-util-version).tar.gz $(call gbuild, apr-util-$(apr-util-version), , \ --disable-static \ --with-apr=$(idir) \ @@ -432,8 +440,8 @@ $(ibidir)/apr-util: $(ibidir)/apr \ --with-crypto ) \ && echo "Apache Portable Runtime Utility $(apr-util-version)" > $@ -$(ibidir)/atlas: | $(tdir)/atlas-$(atlas-version).tar.bz2 \ - $(tdir)/lapack-$(lapack-version).tar.gz +$(ibidir)/atlas: $(tdir)/atlas-$(atlas-version).tar.bz2 \ + $(tdir)/lapack-$(lapack-version).tar.gz # Get the operating system specific features (how to get # CPU frequency and the library suffixes). To make the steps @@ -514,12 +522,12 @@ $(ibidir)/atlas: | $(tdir)/atlas-$(atlas-version).tar.bz2 \ # Boost doesn't use the standard GNU Build System. $(ibidir)/boost: $(ibidir)/openmpi \ - | $(ibidir)/python \ - $(tdir)/boost-$(boost-version).tar.gz + $(ibidir)/python \ + $(tdir)/boost-$(boost-version).tar.gz vstr=$$(echo $(boost-version) | sed -e's/\./_/g') rm -rf $(ddir)/boost_$$vstr topdir=$(pwd); cd $(ddir); - tar xf $(word 1,$(filter $(tdir)/%,$|)) \ + tar xf $(word 1,$(filter $(tdir)/%,$^)) \ && cd boost_$$vstr \ && ./bootstrap.sh --prefix=$(idir) --with-libraries=all \ --with-python=python3 \ @@ -531,13 +539,13 @@ $(ibidir)/boost: $(ibidir)/openmpi \ && echo "Boost $(boost-version)" > $@ $(ibidir)/cfitsio: $(ibidir)/curl \ - | $(tdir)/cfitsio-$(cfitsio-version).tar.gz + $(tdir)/cfitsio-$(cfitsio-version).tar.gz # CFITSIO hard-codes '@rpath' inside the shared library on # Mac systems. So we need to change it to our library # installation path. It doesn't affect GNU/Linux, so we'll # just do it in any case to keep things clean. - topdir=$(pwd); cd $(ddir); tar xf $(word 1,$(filter $(tdir)/%,$|)) + topdir=$(pwd); cd $(ddir); tar xf $(word 1,$(filter $(tdir)/%,$^)) customtar=cfitsio-$(cfitsio-version)-custom.tar.gz cd cfitsio-$(cfitsio-version) sed configure -e's|@rpath|$(ildir)|g' > configure_tmp @@ -560,7 +568,7 @@ $(ibidir)/cfitsio: $(ibidir)/curl \ $(ibidir)/cairo: $(ibidir)/freetype \ $(ibidir)/libpng \ $(ibidir)/pixman \ - | $(tdir)/cairo-$(cairo-version).tar.xz + $(tdir)/cairo-$(cairo-version).tar.xz $(call gbuild, cairo-$(cairo-version), static, \ --with-x=no, -j$(numthreads) V=1) \ && echo "Cairo $(cairo-version)" > $@ @@ -568,20 +576,20 @@ $(ibidir)/cairo: $(ibidir)/freetype \ # Eigen is just headers! So it doesn't need to be compiled. Once unpacked # it has a checksum after `eigen-eigen', so we'll just use a `*' to choose # the unpacked directory. -$(ibidir)/eigen: | $(tdir)/eigen-$(eigen-version).tar.gz +$(ibidir)/eigen: $(tdir)/eigen-$(eigen-version).tar.gz rm -rf $(ddir)/eigen-eigen-* - topdir=$(pwd); cd $(ddir); tar xf $(word 1,$(filter $(tdir)/%,$|)) + topdir=$(pwd); cd $(ddir); tar xf $(word 1,$(filter $(tdir)/%,$^)) cd eigen-eigen-* cp -r Eigen $(iidir)/eigen3 \ && cd $$topdir \ && rm -rf $(ddir)/eigen-eigen-* \ && echo "Eigen $(eigen-version)" > $@ -$(ibidir)/expat: | $(tdir)/expat-$(expat-version).tar.lz +$(ibidir)/expat: $(tdir)/expat-$(expat-version).tar.lz $(call gbuild, expat-$(expat-version), static) \ && echo "Expat $(expat-version)" > $@ -$(ibidir)/fftw: | $(tdir)/fftw-$(fftw-version).tar.gz +$(ibidir)/fftw: $(tdir)/fftw-$(fftw-version).tar.gz # FFTW's single and double precission libraries must be built # independently: for the the single-precision library, we need to # add the `--enable-float' option. We will build this first, then @@ -596,16 +604,16 @@ $(ibidir)/fftw: | $(tdir)/fftw-$(fftw-version).tar.gz # Freetype is necessary to install matplotlib $(ibidir)/freetype: $(ibidir)/libpng \ - | $(tdir)/freetype-$(freetype-version).tar.gz + $(tdir)/freetype-$(freetype-version).tar.gz $(call gbuild, freetype-$(freetype-version), static) \ && echo "FreeType $(freetype-version)" > $@ -$(ibidir)/gsl: | $(tdir)/gsl-$(gsl-version).tar.gz +$(ibidir)/gsl: $(tdir)/gsl-$(gsl-version).tar.gz $(call gbuild, gsl-$(gsl-version), static) \ && echo "GNU Scientific Library $(gsl-version)" > $@ $(ibidir)/hdf5: $(ibidir)/openmpi \ - | $(tdir)/hdf5-$(hdf5-version).tar.gz + $(tdir)/hdf5-$(hdf5-version).tar.gz export CC=mpicc; \ export FC=mpif90; \ $(call gbuild, hdf5-$(hdf5-version), static, \ @@ -629,10 +637,10 @@ else healpix-python-dep = $(ipydir)/matplotlib $(ipydir)/astropy endif $(ibidir)/healpix: $(ibidir)/cfitsio \ + $(ibidir)/autoconf \ + $(ibidir)/automake \ $(healpix-python-dep) \ - | $(ibidir)/autoconf \ - $(ibidir)/automake \ - $(tdir)/healpix-$(healpix-version).tar.gz + $(tdir)/healpix-$(healpix-version).tar.gz if [ x"$(healpix-python-dep)" = x ]; then pycommand1="echo no-healpy-because-no-other-python" pycommand2="echo no-healpy-because-no-other-python" @@ -642,7 +650,7 @@ $(ibidir)/healpix: $(ibidir)/cfitsio \ fi rm -rf $(ddir)/Healpix_$(healpix-version) topdir=$(pwd); cd $(ddir); - tar xf $(word 1,$(filter $(tdir)/%,$|)) + tar xf $(word 1,$(filter $(tdir)/%,$^)) && cd Healpix_$(healpix-version)/src/C/autotools/ \ && autoreconf --install \ && ./configure --prefix=$(idir) \ @@ -661,51 +669,40 @@ $(ibidir)/healpix: $(ibidir)/cfitsio \ && cp $(dtexdir)/healpix.tex $(ictdir)/ \ && echo "HEALPix $(healpix-version) \citep{healpix}" > $@ -$(ibidir)/libjpeg: | $(tdir)/jpegsrc.$(libjpeg-version).tar.gz +$(ibidir)/libjpeg: $(tdir)/jpegsrc.$(libjpeg-version).tar.gz $(call gbuild, jpeg-9b, static,,V=1) \ && echo "Libjpeg $(libjpeg-version)" > $@ $(ibidir)/libnsl: $(ibidir)/libtirpc \ $(ibidir)/rpcsvc-proto \ - | $(tdir)/libnsl-$(libnsl-version).tar.gz + $(tdir)/libnsl-$(libnsl-version).tar.gz $(call gbuild, libnsl-$(libnsl-version), static, \ --sysconfdir=$(idir)/etc) \ && echo "Libnsl $(libnsl-version)" > $@ -$(ibidir)/libpng: | $(tdir)/libpng-$(libpng-version).tar.xz +$(ibidir)/libpng: $(tdir)/libpng-$(libpng-version).tar.xz $(call gbuild, libpng-$(libpng-version), static) \ && echo "Libpng $(libpng-version)" > $@ $(ibidir)/libtiff: $(ibidir)/libjpeg \ - | $(tdir)/tiff-$(libtiff-version).tar.gz + $(tdir)/tiff-$(libtiff-version).tar.gz $(call gbuild, tiff-$(libtiff-version), static, \ --disable-jbig \ --disable-webp \ --disable-zstd) \ && echo "Libtiff $(libtiff-version)" > $@ -$(ibidir)/libtirpc: | $(tdir)/libtirpc-$(libtirpc-version).tar.bz2 +$(ibidir)/libtirpc: $(tdir)/libtirpc-$(libtirpc-version).tar.bz2 $(call gbuild, libtirpc-$(libtirpc-version), static, \ --disable-gssapi, V=1) \ echo "libtirpc $(libtirpc-version)" > $@ -$(ibidir)/libxml2: | $(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 the Python - # bindings, the easiest solution is to compile without Python support: - # ./configure --without-python - # If you really need the Python bindings, try the - # --with-python-install-dir=DIR option - $(call gbuild, libxml2-$(libxml2-version), static, \ - --without-python) \ - && echo "Libxml2 $(libxml2-version)" > $@ - -$(ibidir)/openblas: | $(tdir)/openblas-$(openblas-version).tar.gz +$(ibidir)/openblas: $(tdir)/openblas-$(openblas-version).tar.gz if [ x$(on_mac_os) = xyes ]; then \ export CC=clang; \ fi; \ cd $(ddir) \ - && tar xf $(word 1,$(filter $(tdir)/%,$|)) \ + && tar xf $(word 1,$(filter $(tdir)/%,$^)) \ && cd OpenBLAS-$(openblas-version) \ && make \ && make PREFIX=$(idir) install \ @@ -713,7 +710,7 @@ $(ibidir)/openblas: | $(tdir)/openblas-$(openblas-version).tar.gz && rm -rf OpenBLAS-$(openblas-version) \ && echo "OpenBLAS $(openblas-version)" > $@ -$(ibidir)/openmpi: | $(tdir)/openmpi-$(openmpi-version).tar.gz +$(ibidir)/openmpi: $(tdir)/openmpi-$(openmpi-version).tar.gz $(call gbuild, openmpi-$(openmpi-version), static, , \ -j$(numthreads) V=1) \ && echo "Open MPI $(openmpi-version)" > $@ @@ -723,7 +720,7 @@ $(ibidir)/openmpi: | $(tdir)/openmpi-$(openmpi-version).tar.gz # within the project because of all the security issues it may cause. Only # enable/build it in a project with caution, and if there is no other # solution (for example to disable SSH in a program that may ask for it. -$(ibidir)/openssh: | $(tdir)/openssh-$(openssh-version).tar.gz +$(ibidir)/openssh: $(tdir)/openssh-$(openssh-version).tar.gz $(call gbuild, openssh-$(openssh-version), static, \ --with-privsep-path=$(ibdir)/.ssh_privsep \ --with-privsep-user=nobody \ @@ -732,22 +729,49 @@ $(ibidir)/openssh: | $(tdir)/openssh-$(openssh-version).tar.gz , -j$(numthreads) V=1) \ && echo "OpenSSH $(openssh-version)" > $@ -$(ibidir)/pixman: | $(tdir)/pixman-$(pixman-version).tar.gz +$(ibidir)/pixman: $(tdir)/pixman-$(pixman-version).tar.gz $(call gbuild, pixman-$(pixman-version), static, , \ -j$(numthreads) V=1) \ && echo "Pixman $(pixman-version)" > $@ -$(ibidir)/rpcsvc-proto: | $(tdir)/rpcsvc-proto-$(rpcsvc-proto-version).tar.xz +$(ibidir)/rpcsvc-proto: $(tdir)/rpcsvc-proto-$(rpcsvc-proto-version).tar.xz $(call gbuild, rpcsvc-proto-$(rpcsvc-proto-version), static) \ && echo "rpcsvc $(rpcsvc-proto-version)" > $@ -$(ibidir)/tides: | $(tdir)/tides-$(tides-version).tar.gz +$(ibidir)/tides: $(tdir)/tides-$(tides-version).tar.gz $(call gbuild, tides-$(tides-version), static,\ --with-gmp=$(idir) --with-mpfr=$(idir)) \ && cp $(dtexdir)/tides.tex $(ictdir)/ \ && echo "TIDES $(tides-version) \citep{tides}" > $@ -$(ibidir)/yaml: | $(tdir)/yaml-$(yaml-version).tar.gz +$(ibidir)/valgrind: $(ibidir)/patch \ + $(ibidir)/autoconf \ + $(ibidir)/automake \ + $(tdir)/valgrind-$(valgrind-version).tar.bz2 + # For valgrind-3.15.0, see + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=946329 for a + # report on an MPI-related compile bug and the two patches + # below. These two patches and `automake` should allow valgrind to + # compile with gcc-9.2.0. + cd $(ddir) \ + && tar -x -f $(word 1,$(filter $(tdir)/%,$^)) \ + && valgrinddir=valgrind-$(valgrind-version) \ + && cd $${valgrinddir} \ + && printf "valgrindir=$${valgrinddir} ; pwd = %s .\n" $$($(ibdir)/pwd) \ + && if [ "x$(valgrind-version)" = "x3.15.0" ]; then \ + patch --verbose -p1 < $(patchdir)/valgrind-3.15.0-mpi-fix1.patch; \ + patch --verbose -p1 < $(patchdir)/valgrind-3.15.0-mpi-fix2.patch; \ + fi \ + && autoreconf \ + && ./configure --prefix=$(idir) \ + && make -j$(numthreads) \ + && if ! make check -j$(numthreads); then \ + echo; echo "Valgrind's 'make check' failed!"; echo; \ + fi \ + && make install \ + && echo "Valgrind $(valgrind-version)" > $@ + +$(ibidir)/yaml: $(tdir)/yaml-$(yaml-version).tar.gz $(call gbuild, yaml-$(yaml-version), static) \ && echo "LibYAML $(yaml-version)" > $@ @@ -777,8 +801,8 @@ $(ibidir)/yaml: | $(tdir)/yaml-$(yaml-version).tar.gz # that it uses if it can't find libiconv on macOS. So, to fix this problem # it is necessary to use the option `-DUSE_ICONV=OFF` in the configure step. $(ibidir)/libgit2: $(ibidir)/curl \ - | $(ibidir)/cmake \ - $(tdir)/libgit2-$(libgit2-version).tar.gz + $(ibidir)/cmake \ + $(tdir)/libgit2-$(libgit2-version).tar.gz $(call cbuild, libgit2-$(libgit2-version), static, \ -DUSE_SSH=OFF -DBUILD_CLAR=OFF \ -DTHREADSAFE=ON -DUSE_ICONV=OFF ) \ @@ -789,12 +813,18 @@ $(ibidir)/libgit2: $(ibidir)/curl \ && echo "Libgit2 $(libgit2-version)" > $@ $(ibidir)/wcslib: $(ibidir)/cfitsio \ - | $(tdir)/wcslib-$(wcslib-version).tar.bz2 + $(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; \ @@ -825,14 +855,14 @@ $(ibidir)/astrometrynet: $(ibidir)/gsl \ $(ibidir)/wcslib \ $(ibidir)/cfitsio \ $(ibidir)/libjpeg \ - | $(tdir)/astrometry.net-$(astrometrynet-version).tar.gz + $(tdir)/astrometry.net-$(astrometrynet-version).tar.gz # We are modifying the Makefile in two steps because on Mac OS # system we do not have `/proc/cpuinfo' nor `free'. Since this is # only for the `report.txt', this changes do not causes problems in # running `astrometrynet' cd $(ddir) \ && rm -rf astrometry.net-$(astrometrynet-version) \ - && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \ + && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \ echo; echo "Tar error"; exit 1; \ fi \ && cd astrometry.net-$(astrometrynet-version) \ @@ -848,17 +878,17 @@ $(ibidir)/astrometrynet: $(ibidir)/gsl \ && cp $(dtexdir)/astrometrynet.tex $(ictdir)/ \ && echo "Astrometry.net $(astrometrynet-version) \citep{astrometrynet}" > $@ -$(ibidir)/autoconf: | $(tdir)/autoconf-$(autoconf-version).tar.lz +$(ibidir)/autoconf: $(tdir)/autoconf-$(autoconf-version).tar.lz $(call gbuild, autoconf-$(autoconf-version), static, ,V=1) \ && echo "GNU Autoconf $(autoconf-version)" > $@ -$(ibidir)/automake: | $(ibidir)/autoconf \ - $(tdir)/automake-$(automake-version).tar.gz +$(ibidir)/automake: $(ibidir)/autoconf \ + $(tdir)/automake-$(automake-version).tar.gz $(call gbuild, automake-$(automake-version), static, ,V=1) \ && echo "GNU Automake $(automake-version)" > $@ -$(ibidir)/bison: | $(ibidir)/help2man \ - $(tdir)/bison-$(bison-version).tar.xz +$(ibidir)/bison: $(ibidir)/help2man \ + $(tdir)/bison-$(bison-version).tar.xz $(call gbuild, bison-$(bison-version), static, ,V=1) \ && echo "GNU Bison $(bison-version)" > $@ @@ -869,9 +899,9 @@ $(ibidir)/bison: | $(ibidir)/help2man \ # programs are scripts and we need to touch them before installing. # Otherwise this software will be re-built each time the configure step is # invoked. -$(ibidir)/cdsclient: | $(tdir)/cdsclient-$(cdsclient-version).tar.gz +$(ibidir)/cdsclient: $(tdir)/cdsclient-$(cdsclient-version).tar.gz cd $(ddir) \ - && tar xf $(word 1,$(filter $(tdir)/%,$|)) \ + && tar xf $(word 1,$(filter $(tdir)/%,$^)) \ && cd cdsclient-$(cdsclient-version) \ && touch * \ && ./configure --prefix=$(idir) \ @@ -883,7 +913,7 @@ $(ibidir)/cdsclient: | $(tdir)/cdsclient-$(cdsclient-version).tar.gz # CMake can be built with its custom `./bootstrap' script. $(ibidir)/cmake: $(ibidir)/curl \ - | $(tdir)/cmake-$(cmake-version).tar.gz + $(tdir)/cmake-$(cmake-version).tar.gz # After searching in `bootstrap', I couldn't find `LIBS', only # `LDFLAGS'. So the extra libraries are being added to `LDFLAGS', # not `LIBS'. @@ -896,7 +926,7 @@ $(ibidir)/cmake: $(ibidir)/curl \ fi; \ cd $(ddir) \ && rm -rf cmake-$(cmake-version) \ - && tar xf $(word 1,$(filter $(tdir)/%,$|)) \ + && tar xf $(word 1,$(filter $(tdir)/%,$^)) \ && cd cmake-$(cmake-version) \ && ./bootstrap --prefix=$(idir) --system-curl --system-zlib \ --system-bzip2 --system-liblzma --no-qt-gui \ @@ -908,18 +938,18 @@ $(ibidir)/cmake: $(ibidir)/curl \ && echo "CMake $(cmake-version)" > $@ $(ibidir)/flex: $(ibidir)/bison \ - | $(tdir)/flex-$(flex-version).tar.gz + $(tdir)/flex-$(flex-version).tar.gz $(call gbuild, flex-$(flex-version), static, ,V=1) \ && echo "Flex $(flex-version)" > $@ -$(ibidir)/gdb: | $(ibidir)/python \ - $(tdir)/gdb-$(gdb-version).tar.gz +$(ibidir)/gdb: $(ibidir)/python \ + $(tdir)/gdb-$(gdb-version).tar.gz $(call gbuild, gdb-$(gdb-version),,,V=1) \ && echo "GNU Project Debugger (GDB) $(gdb-version)" > $@ $(ibidir)/ghostscript: $(ibidir)/libpng \ $(ibidir)/libtiff \ - | $(tdir)/ghostscript-$(ghostscript-version).tar.gz + $(tdir)/ghostscript-$(ghostscript-version).tar.gz # First we need to make sure some necessary X11 libraries that we # don't yet install in this template are present on the host # system, see https://savannah.nongnu.org/task/?15481 . @@ -965,7 +995,7 @@ $(ibidir)/gnuastro: $(ibidir)/gsl \ $(ibidir)/libtiff \ $(ibidir)/libgit2 \ $(ibidir)/ghostscript \ - | $(tdir)/gnuastro-$(gnuastro-version).tar.lz + $(tdir)/gnuastro-$(gnuastro-version).tar.lz ifeq ($(static_build),yes) staticopts="--enable-static=yes --enable-shared=no"; endif @@ -974,14 +1004,14 @@ endif && cp $(dtexdir)/gnuastro.tex $(ictdir)/ \ && echo "GNU Astronomy Utilities $(gnuastro-version) \citep{gnuastro}" > $@ -$(ibidir)/help2man: | $(tdir)/help2man-$(help2man-version).tar.xz +$(ibidir)/help2man: $(tdir)/help2man-$(help2man-version).tar.xz $(call gbuild, help2man-$(help2man-version), static, ,V=1) \ && echo "Help2man $(Help2man-version)" > $@ $(ibidir)/imagemagick: $(ibidir)/zlib \ $(ibidir)/libjpeg \ $(ibidir)/libtiff \ - | $(tdir)/imagemagick-$(imagemagick-version).tar.xz + $(tdir)/imagemagick-$(imagemagick-version).tar.xz $(call gbuild, ImageMagick-$(imagemagick-version), static, \ --without-x --disable-openmp, V=1 -j$(numthreads)) \ && echo "ImageMagick $(imagemagick-version)" > $@ @@ -999,11 +1029,11 @@ $(ibidir)/imfit: $(ibidir)/gsl \ $(ibidir)/fftw \ $(ibidir)/scons \ $(ibidir)/cfitsio \ - | $(tdir)/imfit-$(imfit-version).tar.gz + $(tdir)/imfit-$(imfit-version).tar.gz cd $(ddir) \ && unpackdir=imfit-$(imfit-version) \ && rm -rf $$unpackdir \ - && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \ + && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \ echo; echo "Tar error"; exit 1; \ fi \ && cd $$unpackdir \ @@ -1037,17 +1067,17 @@ $(ibidir)/imfit: $(ibidir)/gsl \ # Autotools (Autoconf and Automake). Note that Minizip 2.x isn't like this # any more and has its own independent tarball, but currently the programs # that depend on Minizip need Minizip 1.x. The instructions to build -# minizip were taken from ArchLinux. +# minizip were taken from Arch GNU/Linux. # # About deleting the final crypt.h file after installation, see # https://bugzilla.redhat.com/show_bug.cgi?id=1424609 $(ibidir)/minizip: $(ibidir)/automake \ - | $(tdir)/zlib-$(zlib-version).tar.gz + $(tdir)/zlib-$(zlib-version).tar.gz cd $(ddir) \ && unpackdir=minizip-$(minizip-version) \ && rm -rf $$unpackdir \ && mkdir $$unpackdir \ - && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)) \ + && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)) \ -C$$unpackdir --strip-components=1; then \ echo; echo "Tar error"; exit 1; \ fi \ @@ -1070,7 +1100,7 @@ $(ibidir)/minizip: $(ibidir)/automake \ && rm -rf $$unpackdir \ && echo "Minizip $(minizip-version)" > $@ -$(ibidir)/missfits: | $(tdir)/missfits-$(missfits-version).tar.gz +$(ibidir)/missfits: $(tdir)/missfits-$(missfits-version).tar.gz $(call gbuild, missfits-$(missfits-version), static) \ && cp $(dtexdir)/missfits.tex $(ictdir)/ \ && echo "MissFITS $(missfits-version) \citep{missfits}" > $@ @@ -1086,7 +1116,7 @@ $(ibidir)/netpbm: $(ibidir)/unzip \ $(ibidir)/libjpeg \ $(ibidir)/libtiff \ $(ibidir)/libxml2 \ - | $(tdir)/netpbm-$(netpbm-version).tar.gz + $(tdir)/netpbm-$(netpbm-version).tar.gz if [ x$(on_mac_os) = xyes ]; then \ answers='\n\n$(ildir)\n\n\n\n\n\n$(ildir)/include\n\n$(ildir)/include\n\n$(ildir)/include\nnone\n\n'; \ else \ @@ -1095,7 +1125,7 @@ $(ibidir)/netpbm: $(ibidir)/unzip \ cd $(ddir) \ && unpackdir=netpbm-$(netpbm-version) \ && rm -rf $$unpackdir \ - && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \ + && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \ echo; echo "Tar error"; exit 1; \ fi \ && cd $$unpackdir \ @@ -1109,11 +1139,15 @@ $(ibidir)/netpbm: $(ibidir)/unzip \ && rm -rf $$unpackdir \ && echo "Netpbm $(netpbm-version)" > $@ +$(ibidir)/patch: $(tdir)/patch-$(patch-version).tar.gz + $(call gbuild, patch-$(patch-version), static, ,V=1) \ + && echo "GNU Patch $(patch-version)" > $@ + # R programming language $(ibidir)/R: $(ibidir)/libpng \ $(ibidir)/libjpeg \ $(ibidir)/libtiff \ - | $(tdir)/R-$(R-version).tar.gz + $(tdir)/R-$(R-version).tar.gz export R_SHELL=$(SHELL); \ $(call gbuild, R-$(R-version), static, \ --without-x --with-readline \ @@ -1128,9 +1162,11 @@ $(ibidir)/R: $(ibidir)/libpng \ $(ibidir)/scamp: $(ibidir)/fftw \ $(ibidir)/openblas \ $(ibidir)/cdsclient \ - | $(tdir)/scamp-$(scamp-version).tar.lz + $(tdir)/scamp-$(scamp-version).tar.lz $(call gbuild, scamp-$(scamp-version), static, \ - --enable-threads --enable-openblas \ + --enable-threads \ + --enable-openblas \ + --enable-plplot=no \ --with-fftw-libdir=$(idir) \ --with-fftw-incdir=$(idir)/include \ --with-openblas-libdir=$(ildir) \ @@ -1140,12 +1176,12 @@ $(ibidir)/scamp: $(ibidir)/fftw \ # Since `scons' doesn't use the traditional GNU installation with # `configure' and `make' it is installed manually using `python'. -$(ibidir)/scons: | $(ibidir)/python \ - $(tdir)/scons-$(scons-version).tar.gz +$(ibidir)/scons: $(ibidir)/python \ + $(tdir)/scons-$(scons-version).tar.gz cd $(ddir) \ && unpackdir=scons-$(scons-version) \ && rm -rf $$unpackdir \ - && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \ + && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \ echo; echo "Tar error"; exit 1; \ fi \ && cd $$unpackdir \ @@ -1158,7 +1194,7 @@ $(ibidir)/scons: | $(ibidir)/python \ # the configuration step. $(ibidir)/sextractor: $(ibidir)/fftw \ $(ibidir)/openblas \ - | $(tdir)/sextractor-$(sextractor-version).tar.lz + $(tdir)/sextractor-$(sextractor-version).tar.lz $(call gbuild, sextractor-$(sextractor-version), static, \ --enable-threads --enable-openblas \ --with-openblas-libdir=$(ildir) \ @@ -1168,13 +1204,13 @@ $(ibidir)/sextractor: $(ibidir)/fftw \ && echo "SExtractor $(sextractor-version) \citep{sextractor}" > $@ $(ibidir)/swarp: $(ibidir)/fftw \ - | $(tdir)/swarp-$(swarp-version).tar.gz + $(tdir)/swarp-$(swarp-version).tar.gz $(call gbuild, swarp-$(swarp-version), static, \ --enable-threads) \ && cp $(dtexdir)/swarp.tex $(ictdir)/ \ && echo "SWarp $(swarp-version) \citep{swarp}" > $@ -$(ibidir)/swig: | $(tdir)/swig-$(swig-version).tar.gz +$(ibidir)/swig: $(tdir)/swig-$(swig-version).tar.gz # Option --without-pcre was a suggestion once the configure step # was tried and it failed. It was not recommended but it works! # pcr is a dependency of swig @@ -1184,7 +1220,7 @@ $(ibidir)/swig: | $(tdir)/swig-$(swig-version).tar.gz $(ibidir)/xlsxio: $(ibidir)/cmake \ $(ibidir)/expat \ $(ibidir)/minizip \ - | $(tdir)/xlsxio-$(xlsxio-version).tar.gz + $(tdir)/xlsxio-$(xlsxio-version).tar.gz if [ x$(on_mac_os) = xyes ]; then \ export CC=clang; \ export CXX=clang++; \ @@ -1220,7 +1256,6 @@ $(ibidir)/xlsxio: $(ibidir)/cmake \ - # Since we want to avoid complicating the PATH, we are putting a symbolic # link of all the TeX Live executables in $(ibdir). But symbolic links are # hard to track for Make (as a target). Also, TeX in general is optional @@ -1228,18 +1263,7 @@ $(ibidir)/xlsxio: $(ibidir)/cmake \ # the final PDF). So we'll make a simple ASCII file called # `texlive-ready-tlmgr' and use its contents to mark if we can use it or # not. -# TeX tarball are updated yearly, and because of that, it may crash when trying -# to re-configure the project. As an example: an already present TeX tarball of -# year 2019 and try to re-configure the project when the official version is of -# the year 2020. In that case the installation will do the following: # -# - Install the 2019 (but the official version is 2020!), so it will complain -# about that, and the error will be saved into a log file. -# - Check if the error mesage correspond to this problem. -# - If yes, it will move the old tarball, and download and install the new one. -# - If not, it will complain about not being able to install it (for any other -# reason). - # TeX Live mirror # --------------- # @@ -1252,7 +1276,7 @@ tlmirror=http://mirrors.rit.edu/CTAN/systems/texlive/tlnet # The core TeX Live system. $(itidir)/texlive-ready-tlmgr: reproduce/software/config/texlive.conf \ - | $(tdir)/install-tl-unx.tar.gz + $(tdir)/install-tl-unx.tar.gz # Unpack, enter the directory, and install based on the given # configuration (prerequisite of this rule). @@ -1268,11 +1292,33 @@ $(itidir)/texlive-ready-tlmgr: reproduce/software/config/texlive.conf \ # TeX Live's installation may fail due to any reason. But TeX Live # is optional (only necessary for building the final PDF). So we # don't want the configure script to fail if it can't run. - # Possible error messages will be saved into `log.tx'. After that, this - # file will be checked to see if the error during the installation is - # due to the different version of the current tarball while it expects - # to have a newer version. - if ./install-tl --profile=texlive.conf -repository $(tlmirror) 2> log.txt; then + # Possible error messages will be saved into `log.txt' and if it + # fails, 'log.txt' will be checked to see if the error is due to + # the different version of the current tarball and the TeXLive + # server or something else. + # + # The problem with versions is this: each installer tarball (that + # is downloaded and a user may backup) is for a specific version of + # TeXLive (specified by year, usually around April). So if a user + # has an old tarball, but the CTAN server has been updated, the + # script will fail with a message like this: + # + # ============================================================= + # ./install-tl: The TeX Live versions of the local installation + # and the repository being accessed are not compatible: + # local: 2019 + # repository: 2020 + # Perhaps you need to use a different CTAN mirror? + # (For more, see the output of install-tl --help, especially the + # -repository option. Online via https://tug.org/texlive/doc.) + # ============================================================= + # + # To address this problem, when this happens, we simply download a + # the most recent tarball, and if it succeeds, we will build + # TeXLive using that. The old tarball will be preserved, but will + # have an '-OLD' suffix after it. + if ./install-tl --profile=texlive.conf -repository \ + $(tlmirror) 2> log.txt; then # Put a symbolic link of the TeX Live executables in `ibdir' to # avoid all the complexities of its sub-directories and additions @@ -1282,31 +1328,38 @@ $(itidir)/texlive-ready-tlmgr: reproduce/software/config/texlive.conf \ # Register that the build was successful. echo "TeX Live is ready." > $@ + # The build failed! else - # Print on the command line the error messages during the installation + # Print on the command line the error messages during the + # installation. cat log.txt - # Look for words `repository:' and `local:' in `log.txt' - version_check=$$(grep -w 'repository:\|local:' log.txt) - - # If these words exists, then there is a conflict with tarball - # versions. So it is necessary to move the old tarball and download - # the new one to install it. - if [ x"$$version_check" != x ]; then + # Look for words `repository:' and `local:' in `log.txt' and make + # sure that two lines are returned. Note that we need to check + # for two lines because one of them may exist, but another may + # not (in this case, its not a version conflict scenario). + version_check=$$(grep -w 'repository:\|local:' log.txt | wc -l) + + # If these words exists and two lines are found, there is a + # conflict with the main TeXLive version in the tarball and on + # the server. So it is necessary to move the old tarball and + # download the new one to install it. + if [ x"$$version_check" = x2 ]; then + # Go back to the top project directory, don't remove the + # tarball, just rename it. cd $$topdir - - # Don't remove the tarball, just rename it mv $(tdir)/install-tl-unx.tar.gz $(tdir)/install-tl-unx-OLD.tar.gz - # Download using the script specially defined for this job. - tarballurl=http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz + # Download using the script specially defined for this job. If + # the download of new tarball success, install it (same lines + # than above). If not, record the fail into the target. + url=http://mirror.ctan.org/systems/texlive/tlnet + tarballurl=$$url/install-tl-unx.tar.gz touch $(lockdir)/download downloader="wget --no-use-server-timestamps -O" if $(downloadwrapper) "$$downloader" $(lockdir)/download \ $$tarballurl "$(tdir)/install-tl-unx.tar.gz" \ - "$(backupservers)"; then - # If the download of new tarball success, install it (same lines - # than above). If not, record the fail into the target. + "$(backupservers)"; then cd $(ddir) rm -rf install-tl-* tar xf $(tdir)/install-tl-unx.tar.gz @@ -1314,15 +1367,18 @@ $(itidir)/texlive-ready-tlmgr: reproduce/software/config/texlive.conf \ sed -e's|@installdir[@]|$(idir)|g' \ $$topdir/reproduce/software/config/texlive.conf \ > texlive.conf - if ./install-tl --profile=texlive.conf -repository $(tlmirror); then + if ./install-tl --profile=texlive.conf -repository \ + $(tlmirror); then ln -fs $(idir)/texlive/maneage/bin/*/* $(ibdir)/ echo "TeX Live is ready." > $@ else - echo "NOT!" > $@ + echo "NOT!" > $@ # Building failed. fi else - echo "NOT!" > $@ + echo "NOT!" > $@ # Download failed. fi + else + echo "NOT!" > $@ # Error was not version. fi fi @@ -1381,7 +1437,9 @@ $(itidir)/texlive: reproduce/software/config/texlive-packages.conf \ ln -fs $(idir)/texlive/maneage/bin/*/* $(ibdir)/ # Get all the necessary versions. - texlive=$$(pdflatex --version | awk 'NR==1' | sed 's/.*(\(.*\))/\1/' \ + texlive=$$(pdflatex --version \ + | awk 'NR==1' \ + | sed 's/.*(\(.*\))/\1/' \ | awk '{print $$NF}'); # Package names and versions. Note that all TeXLive packages diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk index f378650..eef8279 100644 --- a/reproduce/software/make/python.mk +++ b/reproduce/software/make/python.mk @@ -11,15 +11,18 @@ # Copyright (C) 2019-2020 Raul Infante-Sainz <infantesainz@gmail.com> # Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org> # -# This Makefile is part of Maneage. Maneage is free software: you can -# redistribute it and/or modify it under the terms of the GNU General -# Public License as published by the Free Software Foundation, either -# version 3 of the License, or (at your option) any later version. +# This Makefile is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. # -# Maneage is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. See <http://www.gnu.org/licenses/>. +# This Makefile is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this Makefile. If not, see <http://www.gnu.org/licenses/>. @@ -247,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 @@ -283,7 +287,7 @@ $(pytarballs): $(tdir)/%: # # While this Makefile is for Python programs, in some cases, we need # certain programs (like Python itself), or libraries for the modules. -$(ibidir)/libffi: | $(tdir)/libffi-$(libffi-version).tar.gz +$(ibidir)/libffi: $(tdir)/libffi-$(libffi-version).tar.gz # On some Fedora systems, libffi installs in `lib64', not # `lib'. This will cause problems when building setuptools @@ -299,7 +303,7 @@ $(ibidir)/libffi: | $(tdir)/libffi-$(libffi-version).tar.gz && echo "Libffi $(libffi-version)" > $@ $(ibidir)/python: $(ibidir)/libffi \ - | $(tdir)/python-$(python-version).tar.gz + $(tdir)/python-$(python-version).tar.gz # On Mac systems, the build complains about `clang' specific # features, so we can't use our own GCC build here. if [ x$(on_mac_os) = xyes ]; then \ @@ -339,7 +343,7 @@ $(ibidir)/python: $(ibidir)/libffi \ # pyhook_before: optional steps before running `python setup.py build' # pyhook_after: optional steps after running `python setup.py install' pybuild = cd $(ddir); rm -rf $(2); \ - if ! $(1) $(word 1,$(filter $(tdir)/%,$|)); then \ + if ! $(1) $(word 1,$(filter $(tdir)/%,$^)); then \ echo; echo "Tar error"; exit 1; \ fi; \ cd $(2); \ @@ -365,19 +369,19 @@ pybuild = cd $(ddir); rm -rf $(2); \ # # All the necessary Python modules go here. $(ipydir)/asn1crypto: $(ipydir)/setuptools \ - | $(tdir)/asn1crypto-$(asn1crypto-version).tar.gz + $(tdir)/asn1crypto-$(asn1crypto-version).tar.gz $(call pybuild, tar xf, asn1crypto-$(asn1crypto-version), , \ Asn1crypto $(asn1crypto-version)) $(ipydir)/asteval: $(ipydir)/numpy \ - | $(tdir)/asteval-$(asteval-version).tar.gz + $(tdir)/asteval-$(asteval-version).tar.gz $(call pybuild, tar xf, asteval-$(asteval-version), , \ ASTEVAL $(asteval-version)) $(ipydir)/astroquery: $(ipydir)/astropy \ $(ipydir)/keyring \ $(ipydir)/requests \ - | $(tdir)/astroquery-$(astroquery-version).tar.gz + $(tdir)/astroquery-$(astroquery-version).tar.gz $(call pybuild, tar xf, astroquery-$(astroquery-version), ,\ Astroquery $(astroquery-version)) @@ -388,7 +392,7 @@ $(ipydir)/astropy: $(ipydir)/h5py \ $(ipydir)/pyyaml \ $(ipydir)/html5lib \ $(ipydir)/beautifulsoup4 \ - | $(tdir)/astropy-$(astropy-version).tar.gz + $(tdir)/astropy-$(astropy-version).tar.gz # Currently, when the Expat library is already built in a project # (for example as a dependency of another program), Astropy's # internal building of Expat will conflict with the project's. So @@ -405,28 +409,28 @@ $(ipydir)/astropy: $(ipydir)/h5py \ && echo "Astropy $(astropy-version) \citep{astropy2013,astropy2018}" > $@ $(ipydir)/beautifulsoup4: $(ipydir)/soupsieve \ - | $(tdir)/beautifulsoup4-$(beautifulsoup4-version).tar.gz + $(tdir)/beautifulsoup4-$(beautifulsoup4-version).tar.gz $(call pybuild, tar xf, beautifulsoup4-$(beautifulsoup4-version), ,\ BeautifulSoup $(beautifulsoup4-version)) $(ipydir)/certifi: $(ipydir)/setuptools \ - | $(tdir)/certifi-$(certifi-version).tar.gz + $(tdir)/certifi-$(certifi-version).tar.gz $(call pybuild, tar xf, certifi-$(certifi-version), ,\ Certifi $(certifi-version)) $(ipydir)/cffi: $(ibidir)/libffi \ $(ipydir)/pycparser \ - | $(tdir)/cffi-$(cffi-version).tar.gz + $(tdir)/cffi-$(cffi-version).tar.gz $(call pybuild, tar xf, cffi-$(cffi-version), ,\ cffi $(cffi-version)) $(ipydir)/chardet: $(ipydir)/setuptools \ - | $(tdir)/chardet-$(chardet-version).tar.gz + $(tdir)/chardet-$(chardet-version).tar.gz $(call pybuild, tar xf, chardet-$(chardet-version), ,\ Chardet $(chardet-version)) $(ipydir)/corner: $(ipydir)/matplotlib \ - | $(tdir)/corner-$(corner-version).tar.gz + $(tdir)/corner-$(corner-version).tar.gz $(call pybuild, tar xf, corner-$(corner-version), ,\ Corner $(corner-version)) \ && cp $(dtexdir)/corner.tex $(ictdir)/ \ @@ -434,50 +438,50 @@ $(ipydir)/corner: $(ipydir)/matplotlib \ $(ipydir)/cryptography: $(ipydir)/cffi \ $(ipydir)/asn1crypto \ - | $(tdir)/cryptography-$(cryptography-version).tar.gz + $(tdir)/cryptography-$(cryptography-version).tar.gz $(call pybuild, tar xf, cryptography-$(cryptography-version), ,\ Cryptography $(cryptography-version)) $(ipydir)/cycler: $(ipydir)/six \ - | $(tdir)/cycler-$(cycler-version).tar.gz + $(tdir)/cycler-$(cycler-version).tar.gz $(call pybuild, tar xf, cycler-$(cycler-version), ,\ Cycler $(cycler-version)) $(ipydir)/cython: $(ipydir)/setuptools \ - | $(tdir)/cython-$(cython-version).tar.gz + $(tdir)/cython-$(cython-version).tar.gz $(call pybuild, tar xf, Cython-$(cython-version)) \ && cp $(dtexdir)/cython.tex $(ictdir)/ \ && echo "Cython $(cython-version) \citep{cython2011}" > $@ $(ipydir)/esutil: $(ipydir)/numpy \ - | $(tdir)/esutil-$(esutil-version).tar.gz + $(tdir)/esutil-$(esutil-version).tar.gz $(call pybuild, tar xf, esutil-$(esutil-version), ,\ esutil $(esutil-version)) $(ipydir)/eigency: $(ibidir)/eigen \ - | $(tdir)/eigency-$(eigency-version).tar.gz + $(tdir)/eigency-$(eigency-version).tar.gz $(call pybuild, tar xf, eigency-$(eigency-version), ,\ eigency $(eigency-version)) $(ipydir)/emcee: $(ipydir)/numpy \ $(ipydir)/setuptools_scm \ - | $(tdir)/emcee-$(emcee-version).tar.gz + $(tdir)/emcee-$(emcee-version).tar.gz $(call pybuild, tar xf, emcee-$(emcee-version), ,\ emcee $(emcee-version)) $(ipydir)/entrypoints: $(ipydir)/setuptools \ - | $(tdir)/entrypoints-$(entrypoints-version).tar.gz + $(tdir)/entrypoints-$(entrypoints-version).tar.gz $(call pybuild, tar xf, entrypoints-$(entrypoints-version), ,\ EntryPoints $(entrypoints-version)) $(ipydir)/flake8: $(ipydir)/pyflakes \ $(ipydir)/pycodestyle \ - | $(tdir)/flake8-$(flake8-version).tar.gz + $(tdir)/flake8-$(flake8-version).tar.gz $(call pybuild, tar xf, flake8-$(flake8-version), ,\ Flake8 $(flake8-version)) $(ipydir)/future: $(ipydir)/setuptools \ - | $(tdir)/future-$(future-version).tar.gz + $(tdir)/future-$(future-version).tar.gz $(call pybuild, tar xf, future-$(future-version), ,\ Future $(future-version)) @@ -486,7 +490,7 @@ $(ipydir)/galsim: $(ipydir)/future \ $(ipydir)/eigency \ $(ipydir)/pybind11 \ $(ipydir)/lsstdesccoord \ - | $(tdir)/galsim-$(galsim-version).tar.gz + $(tdir)/galsim-$(galsim-version).tar.gz $(call pybuild, tar xf, GalSim-$(galsim-version)) \ && cp $(dtexdir)/galsim.tex $(ictdir)/ \ && echo "Galsim $(galsim-version) \citep{galsim}" > $@ @@ -497,7 +501,7 @@ $(ipydir)/h5py: $(ipydir)/six \ $(ipydir)/cython \ $(ipydir)/mpi4py \ $(ipydir)/pypkgconfig \ - | $(tdir)/h5py-$(h5py-version).tar.gz + $(tdir)/h5py-$(h5py-version).tar.gz export HDF5_MPI=ON; \ export HDF5_DIR=$(ildir); \ $(call pybuild, tar xf, h5py-$(h5py-version), ,\ @@ -515,29 +519,29 @@ $(ipydir)/healpy: $(ibidir)/healpix $(ipydir)/html5lib: $(ipydir)/six \ $(ipydir)/webencodings \ - | $(tdir)/html5lib-$(html5lib-version).tar.gz + $(tdir)/html5lib-$(html5lib-version).tar.gz $(call pybuild, tar xf, html5lib-$(html5lib-version), ,\ HTML5lib $(html5lib-version)) $(ipydir)/idna: $(ipydir)/setuptools \ - | $(tdir)/idna-$(idna-version).tar.gz + $(tdir)/idna-$(idna-version).tar.gz $(call pybuild, tar xf, idna-$(idna-version), ,\ idna $(idna-version)) $(ipydir)/jeepney: $(ipydir)/setuptools \ - | $(tdir)/jeepney-$(jeepney-version).tar.gz + $(tdir)/jeepney-$(jeepney-version).tar.gz $(call pybuild, tar xf, jeepney-$(jeepney-version), ,\ Jeepney $(jeepney-version)) $(ipydir)/keyring: $(ipydir)/entrypoints \ $(ipydir)/secretstorage \ $(ipydir)/setuptools_scm \ - | $(tdir)/keyring-$(keyring-version).tar.gz + $(tdir)/keyring-$(keyring-version).tar.gz $(call pybuild, tar xf, keyring-$(keyring-version), ,\ Keyring $(keyring-version)) $(ipydir)/kiwisolver: $(ipydir)/setuptools \ - | $(tdir)/kiwisolver-$(kiwisolver-version).tar.gz + $(tdir)/kiwisolver-$(kiwisolver-version).tar.gz $(call pybuild, tar xf, kiwisolver-$(kiwisolver-version), ,\ Kiwisolver $(kiwisolver-version)) @@ -548,12 +552,12 @@ $(ipydir)/lmfit: $(ipydir)/six \ $(ipydir)/asteval \ $(ipydir)/matplotlib \ $(ipydir)/uncertainties \ - | $(tdir)/lmfit-$(lmfit-version).tar.gz + $(tdir)/lmfit-$(lmfit-version).tar.gz $(call pybuild, tar xf, lmfit-$(lmfit-version), ,\ LMFIT $(lmfit-version)) $(ipydir)/lsstdesccoord: $(ipydir)/setuptools \ - | $(tdir)/lsstdesccoord-$(lsstdesccoord-version).tar.gz + $(tdir)/lsstdesccoord-$(lsstdesccoord-version).tar.gz $(call pybuild, tar xf, LSSTDESC.Coord-$(lsstdesccoord-version), ,\ LSSTDESC.Coord $(lsstdesccoord-version)) @@ -566,7 +570,7 @@ $(ipydir)/matplotlib: $(ipydir)/numpy \ $(ibidir)/ghostscript \ $(ibidir)/imagemagick \ $(ipydir)/python-dateutil \ - | $(tdir)/matplotlib-$(matplotlib-version).tar.gz + $(tdir)/matplotlib-$(matplotlib-version).tar.gz # On Mac systems, the build complains about `clang' specific # features, so we can't use our own GCC build here. if [ x$(on_mac_os) = xyes ]; then \ @@ -579,20 +583,20 @@ $(ipydir)/matplotlib: $(ipydir)/numpy \ $(ipydir)/mpi4py: $(ibidir)/openmpi \ $(ipydir)/setuptools \ - | $(tdir)/mpi4py-$(mpi4py-version).tar.gz + $(tdir)/mpi4py-$(mpi4py-version).tar.gz $(call pybuild, tar xf, mpi4py-$(mpi4py-version)) \ && cp $(dtexdir)/mpi4py.tex $(ictdir)/ \ && echo "mpi4py $(mpi4py-version) \citep{mpi4py2011}" > $@ $(ipydir)/mpmath: $(ipydir)/setuptools \ - | $(tdir)/mpmath-$(mpmath-version).tar.gz + $(tdir)/mpmath-$(mpmath-version).tar.gz $(call pybuild, tar xf, mpmath-$(mpmath-version), ,\ mpmath $(mpmath-version)) $(ipydir)/numpy: $(ibidir)/unzip \ $(ibidir)/openblas \ $(ipydir)/setuptools \ - | $(tdir)/numpy-$(numpy-version).zip + $(tdir)/numpy-$(numpy-version).zip if [ x$(on_mac_os) = xyes ]; then \ export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"; \ else \ @@ -606,24 +610,24 @@ $(ipydir)/numpy: $(ibidir)/unzip \ && echo "Numpy $(numpy-version) \citep{numpy2011}" > $@ $(ipydir)/pexpect: $(ipydir)/setuptools \ - | $(tdir)/pexpect-$(pexpect-version).tar.gz + $(tdir)/pexpect-$(pexpect-version).tar.gz $(call pybuild, tar xf, pexpect-$(pexpect-version), ,\ Pexpect $(pexpect-version)) $(ibidir)/pip3: $(ipydir)/setuptools \ - | $(tdir)/pip-$(pip-version).tar.gz + $(tdir)/pip-$(pip-version).tar.gz $(call pybuild, tar xf, pip-$(pip-version), ,\ PiP $(pip-version)) $(ipydir)/pycodestyle: $(ipydir)/setuptools \ - | $(tdir)/pycodestyle-$(pycodestyle-version).tar.gz + $(tdir)/pycodestyle-$(pycodestyle-version).tar.gz $(call pybuild, tar xf, pycodestyle-$(pycodestyle-version), ,\ pycodestyle $(pycodestyle-version)) $(ipydir)/pybind11: $(ibidir)/eigen \ $(ibidir)/boost \ $(ipydir)/setuptools \ - | $(tdir)/pybind11-$(pybind11-version).tar.gz + $(tdir)/pybind11-$(pybind11-version).tar.gz pyhook_after() { cp -r include/pybind11 $(iidir)/python$(python-major-version)m/ } @@ -631,34 +635,34 @@ $(ipydir)/pybind11: $(ibidir)/eigen \ pybind11 $(pybind11-version)) $(ipydir)/pycparser: $(ipydir)/setuptools \ - | $(tdir)/pycparser-$(pycparser-version).tar.gz + $(tdir)/pycparser-$(pycparser-version).tar.gz $(call pybuild, tar xf, pycparser-$(pycparser-version), ,\ pycparser $(pycparser-version)) $(ipydir)/pyflakes: $(ipydir)/setuptools \ - | $(tdir)/pyflakes-$(pyflakes-version).tar.gz + $(tdir)/pyflakes-$(pyflakes-version).tar.gz $(call pybuild, tar xf, pyflakes-$(pyflakes-version), ,\ pyflakes $(pyflakes-version)) $(ipydir)/pyparsing: $(ipydir)/setuptools \ - | $(tdir)/pyparsing-$(pyparsing-version).tar.gz + $(tdir)/pyparsing-$(pyparsing-version).tar.gz $(call pybuild, tar xf, pyparsing-$(pyparsing-version), ,\ PyParsing $(pyparsing-version)) $(ipydir)/pypkgconfig: $(ipydir)/setuptools \ - | $(tdir)/pkgconfig-$(pypkgconfig-version).tar.gz + $(tdir)/pkgconfig-$(pypkgconfig-version).tar.gz $(call pybuild, tar xf, pkgconfig-$(pypkgconfig-version), , pkgconfig $(pypkgconfig-version)) $(ipydir)/python-dateutil: $(ipydir)/six \ $(ipydir)/setuptools_scm \ - | $(tdir)/python-dateutil-$(python-dateutil-version).tar.gz + $(tdir)/python-dateutil-$(python-dateutil-version).tar.gz $(call pybuild, tar xf, python-dateutil-$(python-dateutil-version), ,\ python-dateutil $(python-dateutil-version)) $(ipydir)/pyyaml: $(ibidir)/yaml \ $(ipydir)/cython \ - | $(tdir)/pyyaml-$(pyyaml-version).tar.gz + $(tdir)/pyyaml-$(pyyaml-version).tar.gz $(call pybuild, tar xf, PyYAML-$(pyyaml-version), ,\ PyYAML $(pyyaml-version)) @@ -667,12 +671,12 @@ $(ipydir)/requests: $(ipydir)/idna \ $(ipydir)/certifi \ $(ipydir)/chardet \ $(ipydir)/urllib3 \ - | $(tdir)/requests-$(requests-version).tar.gz + $(tdir)/requests-$(requests-version).tar.gz $(call pybuild, tar xf, requests-$(requests-version), ,\ Requests $(requests-version)) $(ipydir)/scipy: $(ipydir)/numpy \ - | $(tdir)/scipy-$(scipy-version).tar.gz + $(tdir)/scipy-$(scipy-version).tar.gz if [ x$(on_mac_os) = xyes ]; then \ export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"; \ else \ @@ -685,56 +689,56 @@ $(ipydir)/scipy: $(ipydir)/numpy \ $(ipydir)/secretstorage: $(ipydir)/jeepney \ $(ipydir)/cryptography \ - | $(tdir)/secretstorage-$(secretstorage-version).tar.gz + $(tdir)/secretstorage-$(secretstorage-version).tar.gz $(call pybuild, tar xf, SecretStorage-$(secretstorage-version), ,\ SecretStorage $(secretstorage-version)) $(ipydir)/setuptools: $(ibidir)/unzip \ $(ibidir)/python \ - | $(tdir)/setuptools-$(setuptools-version).zip + $(tdir)/setuptools-$(setuptools-version).zip $(call pybuild, unzip, setuptools-$(setuptools-version), ,\ Setuptools $(setuptools-version)) $(ipydir)/setuptools_scm: $(ipydir)/setuptools \ - | $(tdir)/setuptools_scm-$(setuptools_scm-version).tar.gz + $(tdir)/setuptools_scm-$(setuptools_scm-version).tar.gz $(call pybuild, tar xf, setuptools_scm-$(setuptools_scm-version), ,\ Setuptools-scm $(setuptools_scm-version)) $(ipydir)/sip_tpv: $(ipydir)/sympy \ $(ipydir)/astropy \ - | $(tdir)/sip_tpv-$(sip_tpv-version).tar.gz + $(tdir)/sip_tpv-$(sip_tpv-version).tar.gz $(call pybuild, tar xf, sip_tpv-$(sip_tpv-version), ,) \ && cp $(dtexdir)/sip_tpv.tex $(ictdir)/ \ - && echo "sip\_tpv $(sip_tpv-version) \citep{sip-tpv}" > $@ + && echo "sip_tpv $(sip_tpv-version) \citep{sip-tpv}" > $@ $(ipydir)/six: $(ipydir)/setuptools \ - | $(tdir)/six-$(six-version).tar.gz + $(tdir)/six-$(six-version).tar.gz $(call pybuild, tar xf, six-$(six-version), ,\ Six $(six-version)) $(ipydir)/soupsieve: $(ipydir)/setuptools \ - | $(tdir)/soupsieve-$(soupsieve-version).tar.gz + $(tdir)/soupsieve-$(soupsieve-version).tar.gz $(call pybuild, tar xf, soupsieve-$(soupsieve-version), ,\ SoupSieve $(soupsieve-version)) $(ipydir)/sympy: $(ipydir)/mpmath \ - | $(tdir)/sympy-$(sympy-version).tar.gz + $(tdir)/sympy-$(sympy-version).tar.gz $(call pybuild, tar xf, sympy-$(sympy-version), ,) \ && cp $(dtexdir)/sympy.tex $(ictdir)/ \ && echo "SymPy $(sympy-version) \citep{sympy}" > $@ $(ipydir)/uncertainties: $(ipydir)/numpy \ - | $(tdir)/uncertainties-$(uncertainties-version).tar.gz + $(tdir)/uncertainties-$(uncertainties-version).tar.gz $(call pybuild, tar xf, uncertainties-$(uncertainties-version), ,\ uncertainties $(uncertainties-version)) $(ipydir)/urllib3: $(ipydir)/setuptools \ - | $(tdir)/urllib3-$(urllib3-version).tar.gz + $(tdir)/urllib3-$(urllib3-version).tar.gz $(call pybuild, tar xf, urllib3-$(urllib3-version), ,\ Urllib3 $(urllib3-version)) $(ipydir)/webencodings: $(ipydir)/setuptools \ - | $(tdir)/webencodings-$(webencodings-version).tar.gz + $(tdir)/webencodings-$(webencodings-version).tar.gz $(call pybuild, tar xf, webencodings-$(webencodings-version), ,\ Webencodings $(webencodings-version)) |