diff options
Diffstat (limited to 'reproduce/src/make')
-rw-r--r-- | reproduce/src/make/dependencies-basic.mk | 59 | ||||
-rw-r--r-- | reproduce/src/make/dependencies-build-rules.mk | 3 | ||||
-rw-r--r-- | reproduce/src/make/dependencies.mk | 63 |
3 files changed, 80 insertions, 45 deletions
diff --git a/reproduce/src/make/dependencies-basic.mk b/reproduce/src/make/dependencies-basic.mk index 77a47c4..0f66b06 100644 --- a/reproduce/src/make/dependencies-basic.mk +++ b/reproduce/src/make/dependencies-basic.mk @@ -63,7 +63,7 @@ export LDFLAGS := -L$(ildir) $(LDFLAGS) export CPPFLAGS := -I$(idir)/include $(CPPFLAGS) export LD_LIBRARY_PATH := $(ildir):$(LD_LIBRARY_PATH) -top-level-programs = ls sed gawk grep diff find bash wget which pkg-config +top-level-programs = ls sed gawk grep diff find bash wget which all: $(foreach p, $(top-level-programs), $(ibdir)/$(p)) @@ -160,11 +160,17 @@ $(tarballs): $(tdir)/%: if [ $$mergenames = 1 ]; then tarballurl=$$w/"$*"; \ else tarballurl=$$w; \ fi; \ + \ echo "Downloading $$tarballurl"; \ if [ -f $(ibdir)/wget ]; then \ - $(ibdir)/wget --no-use-server-timestamps -O$@ $$tarballurl; \ + downloader="wget --no-use-server-timestamps -O"; \ else \ - $(DOWNLOADER) $@ $$tarballurl; \ + downloader="$(DOWNLOADER)"; \ + fi; \ + \ + if ! $$downloader $@ $$tarballurl; then \ + rm -f $@; \ + echo; echo "DOWNLOAD FAILED: $$tarballurl"; echo; exit 1; \ fi; \ fi @@ -212,10 +218,14 @@ $(ibdir)/low-level: | $(ibdir) $(ildir) # Needed by TeXLive specifically. $(call makelink,perl) - # Libdl (for dynamic loading libraries at runtime) - if [ -f /usr/lib/libdl.a ]; then \ - ln -s /usr/lib/libdl.* $(ildir)/; \ - fi; + # Necessary libraries: + # Libdl (for dynamic loading libraries at runtime) + # POSIX Threads library for multi-threaded programs. + for l in dl pthread; do \ + if [ -f /usr/lib/lib$$l.a ]; then \ + ln -s /usr/lib/lib$$l.* $(ildir)/; \ + fi; \ + done echo "Low-level symbolic links are setup" > $@ @@ -294,32 +304,32 @@ $(ibdir)/make: $(tdir)/make-$(make-version).tar.lz \ # Downloader # ---------- # -# Zlib's `./configure' doesn't use Autoconf's configure script, it just -# accepts a direct `--static' option. +# Some programs (like Wget and CMake) that use zlib need it to be dynamic +# so they use our custom build. So we won't force a static-only build. +# +# Note for a static-only build: Zlib's `./configure' doesn't use Autoconf's +# configure script, it just accepts a direct `--static' option. $(idir)/etc:; mkdir $@ $(ilidir): | $(ildir); mkdir $@ $(ilidir)/zlib: $(tdir)/zlib-$(zlib-version).tar.gz \ $(ibdir)/make | $(ilidir) - # IMPORTANT, the second argument to `gbuild', must not have any - # spaces before or after it: it is going to be checked. -ifeq ($(static_build),yes) - $(call gbuild, $<,zlib-$(zlib-version), , --static) \ - && echo "Zlib is built" > $@ -else $(call gbuild, $<,zlib-$(zlib-version)) && echo "Zlib is built" > $@ -endif -# OpenSSL -ifeq ($(static_build),yes) -openssl-static = no-dso no-dynamic-engine no-shared -endif +# OpenSSL: Some programs/libraries later need dynamic linking. So we'll +# build libssl (and libcrypto) dynamically also. +# +# In case you do want a static OpenSSL and libcrypto, then uncomment the +# following conditional and put $(openssl-static) in the configure options. +# +#ifeq ($(static_build),yes) +#openssl-static = no-dso no-dynamic-engine no-shared +#endif $(ilidir)/openssl: $(tdir)/openssl-$(openssl-version).tar.gz \ $(ilidir)/zlib | $(idir)/etc - $(call gbuild, $<, openssl-$(openssl-version), static, \ + $(call gbuild, $<, openssl-$(openssl-version), , \ --openssldir=$(idir)/etc/ssl \ --with-zlib-lib=$(ildir) \ - --with-zlib-include=$(idir)/include zlib \ - $(openssl-static) ) \ + --with-zlib-include=$(idir)/include zlib ) \ && echo "OpenSSL is built" > $@ # GNU Wget @@ -331,12 +341,13 @@ $(ilidir)/openssl: $(tdir)/openssl-$(openssl-version).tar.gz \ # Also note that since Wget needs to load outside libraries dynamically, it # gives a segmentation fault when built statically. $(ibdir)/wget: $(tdir)/wget-$(wget-version).tar.lz \ + $(ibdir)/pkg-config \ $(ilidir)/openssl libs="-pthread"; \ if [ x$(needs_ldl) = xyes ]; then libs="$$libs -ldl"; fi; \ $(call gbuild, $<, wget-$(wget-version), , \ LIBS="$$LIBS $$libs" --with-ssl=openssl \ - --with-openssl=yes) + --with-openssl=yes --with-libssl-prefix=$(idir)) diff --git a/reproduce/src/make/dependencies-build-rules.mk b/reproduce/src/make/dependencies-build-rules.mk index d1cc5dc..457d5fe 100644 --- a/reproduce/src/make/dependencies-build-rules.mk +++ b/reproduce/src/make/dependencies-build-rules.mk @@ -106,7 +106,8 @@ cbuild = if [ x$(static_build) = xyes ] && [ $(3)x = staticx ]; then \ rm -rf pipeline-build && mkdir pipeline-build && \ cd pipeline-build && \ cmake .. -DCMAKE_LIBRARY_PATH=$(ildir) \ - -DCMAKE_INSTALL_PREFIX=$(idir) $$opts $(4) && \ + -DCMAKE_INSTALL_PREFIX=$(idir) \ + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON $$opts $(4) && \ make && make install && \ cd ../.. && \ rm -rf $(2) diff --git a/reproduce/src/make/dependencies.mk b/reproduce/src/make/dependencies.mk index b65d8e8..d705d1e 100644 --- a/reproduce/src/make/dependencies.mk +++ b/reproduce/src/make/dependencies.mk @@ -153,8 +153,15 @@ $(tarballs): $(tdir)/%: if [ $$mergenames = 1 ]; then tarballurl=$$w/"$*" else tarballurl=$$w fi + + # If the download fails, Wget will write the error message in the + # target file, so Make will think that its done! To avoid this + # problem, we'll rename the output. echo "Downloading $$tarballurl" - $(ibdir)/wget --no-use-server-timestamps -O$@ $$tarballurl + if ! wget --no-use-server-timestamps -O$@ $$tarballurl; then + rm -f $@ + echo; echo "DOWNLOAD FAILED: $$tarballurl"; echo; exit 1 + fi fi @@ -177,23 +184,25 @@ $(tarballs): $(tdir)/%: # and create/write into it when the library is successfully built. $(ilidir)/cfitsio: $(tdir)/cfitsio-$(cfitsio-version).tar.gz \ $(ibdir)/curl - $(call gbuild, $<,cfitsio, static, --enable-sse2 --enable-reentrant) \ + $(call gbuild, $<, cfitsio, static, LIBS="-lssl -lcrypto -lz" \ + --enable-sse2 --enable-reentrant) \ && echo "CFITSIO is built" > $@ # The libgit2 page recommends doing a static build, especially for Mac -# systems. Under XCode, the following link has written "It’s highly -# recommended that you build libgit2 as a static library for Xcode -# projects. This simplifies distribution significantly, as the resolution -# of dynamic libraries at runtime can be extremely problematic.". This is a -# major problem we have been having so far with Mac systems: -# https://libgit2.org/docs/guides/build-and-link +# systems (with `-DBUILD_SHARED_LIBS=OFF'). Under XCode, the following link +# has written "It’s highly recommended that you build libgit2 as a static +# library for Xcode projects. This simplifies distribution significantly, +# as the resolution of dynamic libraries at runtime can be extremely +# problematic.". This is a major problem we have been having so far with +# Mac systems: https://libgit2.org/docs/guides/build-and-link $(ilidir)/libgit2: $(tdir)/libgit2-$(libgit2-version).tar.gz \ $(ibdir)/cmake \ $(ibdir)/curl + export LDFLAGS="$$LDFLAGS -lssl -lcrypto -lz"; \ $(call cbuild, $<, libgit2-$(libgit2-version), static, \ -DUSE_SSH=OFF -DBUILD_CLAR=OFF \ - -DTHREADSAFE=ON -DBUILD_SHARED_LIBS=OFF) \ + -DTHREADSAFE=ON ) \ && echo "Libgit2 is built" > $@ $(ilidir)/gsl: $(tdir)/gsl-$(gsl-version).tar.gz @@ -212,9 +221,11 @@ $(ilidir)/wcslib: $(tdir)/wcslib-$(wcslib-version).tar.bz2 \ $(ilidir)/cfitsio # Unfortunately WCSLIB forces the building of shared libraries. So # we'll just delete any shared library that is produced afterwards. - $(call gbuild, $<, wcslib-$(wcslib-version), , \ - LIBS="-pthread -lcurl -lm" --without-pgplot \ - --disable-fortran) && \ + $(call gbuild, $<, wcslib-$(wcslib-version), , \ + LIBS="-pthread -lcurl -lssl -lcrypto -lz -lm" \ + --with-cfitsiolib=$(ildir) \ + --with-cfitsioinc=$(idir)/include \ + --without-pgplot --disable-fortran) && \ echo "WCSLIB is built" > $@ @@ -226,15 +237,27 @@ $(ilidir)/wcslib: $(tdir)/wcslib-$(wcslib-version).tar.bz2 \ # CMake can be built with its custom `./bootstrap' script. $(ibdir)/cmake: $(tdir)/cmake-$(cmake-version).tar.gz \ $(ibdir)/curl - cd $(ddir) && rm -rf cmake-$(cmake-version) && \ - tar xf $< && cd cmake-$(cmake-version) && \ - ./bootstrap --prefix=$(idir) --system-curl --system-zlib \ - --system-bzip2 --system-liblzma && \ - make && make install && \ + # After searching in `bootstrap', I couldn't find `LIBS', only + # `LDFLAGS'. So the extra libraries are being added to `LDFLAGS', + # not `LIBS'. + cd $(ddir) && rm -rf cmake-$(cmake-version) && \ + tar xf $< && cd cmake-$(cmake-version) && \ + ./bootstrap --prefix=$(idir) --system-curl --system-zlib \ + --system-bzip2 --system-liblzma --no-qt-gui && \ + make LIBS="$$LIBS -lssl -lcrypto -lz" VERBOSE=1 && \ + make install && \ cd ..&& rm -rf cmake-$(cmake-version) +# Some programs that depend on cURL (in particular CMake) don't necessarily +# have easiy ways to explicity tell them to also link with libcurl's +# dependencies (libssl, libcrypto, and libz). So we won't force curl to +# only be static. $(ibdir)/curl: $(tdir)/curl-$(curl-version).tar.gz - $(call gbuild, $<, curl-$(curl-version), static, --without-brotli) + $(call gbuild, $<, curl-$(curl-version), , \ + --with-zlib=$(ildir) \ + --with-ssl=$(idir) \ + --without-brotli \ + LIBS="-pthread" ) # On Mac OS, libtool does different things, so to avoid confusion, we'll # prefix GNU's libtool executables with `glibtool'. @@ -263,10 +286,10 @@ $(ibdir)/astnoisechisel: $(tdir)/gnuastro-$(gnuastro-version).tar.lz \ ifeq ($(static_build),yes) $(call gbuild, $<, gnuastro-$(gnuastro-version), static, \ --enable-static=yes --enable-shared=no, -j8, \ - cp config.log ../gnuastro-config.log; make check -j8) + make check -j8) else $(call gbuild, $<, gnuastro-$(gnuastro-version), , , -j8, \ - cp config.log ../gnuastro-config.log; make check -j8) + make check -j8) endif |