From 035e44f3bfdd814c4b7d8240011672ed625aed8d Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Fri, 16 Nov 2018 19:07:03 +0000 Subject: Configure script checks if static libraries will be built The default Mac compiler has problems building static libraries. Since we are not yet building the GNU C Compiler as part of the pipeline, we'll have to rely on the host system's compiler. Therefore, a check is now added a the start of the configure script that will build a minimal program with the `-static' flag and if it fails, it will print a warning. Afterwards, none of the dependencies will be built with the `-static' flag. --- reproduce/src/make/dependencies-basic.mk | 51 +++++++++++++++++++++++++- reproduce/src/make/dependencies-build-rules.mk | 6 ++- 2 files changed, 53 insertions(+), 4 deletions(-) (limited to 'reproduce') diff --git a/reproduce/src/make/dependencies-basic.mk b/reproduce/src/make/dependencies-basic.mk index 4c57e30..45a4192 100644 --- a/reproduce/src/make/dependencies-basic.mk +++ b/reproduce/src/make/dependencies-basic.mk @@ -134,8 +134,16 @@ $(tarballs): $(tdir)/%: # GNU Lzip: For a static build, the `-static' flag should be given to # LDFLAGS on the command-line (not from the environment). $(ibdir)/lzip: $(tdir)/lzip-$(lzip-version).tar.gz + echo; echo $(static_build); echo; +ifeq ($(static_build),yes) $(call gbuild,$(subst $(tdir)/,,$<), lzip-$(lzip-version), , \ - LDFLAGS="-static") + LDFLAGS="-static") +else + $(call gbuild,$(subst $(tdir)/,,$<), lzip-$(lzip-version)) +endif + + + # GNU Gzip. @@ -144,24 +152,47 @@ $(ibdir)/gzip: $(tdir)/gzip-$(gzip-version).tar.lz \ $(call gbuild,$(subst $(tdir)/,,$<), gzip-$(gzip-version), static) + + + # Zlib: its `./configure' doesn't use Autoconf's configure script, it just # accepts a direct `--static' option. $(ildir)/libz.a: $(tdir)/zlib-$(zlib-version).tar.gz +ifeq ($(static_build),yes) $(call gbuild,$(subst $(tdir)/,,$<), zlib-$(zlib-version), , \ --static) +else + $(call gbuild,$(subst $(tdir)/,,$<), zlib-$(zlib-version)) +endif + + + + # XZ Utils $(ibdir)/xz: $(tdir)/xz-$(xz-version).tar.gz $(call gbuild,$(subst $(tdir)/,,$<), xz-$(xz-version), static) + + + + # Bzip2: Bzip2 doesn't have a configure script. $(ibdir)/bzip2: $(tdir)/bzip2-$(bzip2-version).tar.gz tdir=bzip2-$(bzip2-version); \ + if [ $(static_build) = yes ]; then \ + makecommand="make LDFLAGS=-static"; \ + else \ + makecommand="make"; \ + fi; \ cd $(ddir) && rm -rf $$tdir && tar xf $< && cd $$tdir && \ - make LDFLAGS=-static && make install PREFIX=$(idir) && \ + $$makecommand && make install PREFIX=$(idir) && \ cd .. && rm -rf $$tdir + + + # GNU Binutils: $(ibdir)/nm: $(tdir)/binutils-$(binutils-version).tar.lz \ $(ibdir)/lzip \ @@ -169,6 +200,10 @@ $(ibdir)/nm: $(tdir)/binutils-$(binutils-version).tar.lz \ $(call gbuild,$(subst $(tdir)/,,$<), binutils-$(binutils-version), \ static) + + + + # GNU Tar: When built statically, tar gives a segmentation fault on # unpacking Bash. So we'll build it dynamically. $(ibdir)/tar: $(tdir)/tar-$(tar-version).tar.gz \ @@ -179,6 +214,10 @@ $(ibdir)/tar: $(tdir)/tar-$(tar-version).tar.gz \ $(ibdir)/nm $(call gbuild,$(subst $(tdir)/,,$<), tar-$(tar-version)) + + + + # GNU Make: Unfortunately it needs dynamic linking in two instances: when # loading objects (dynamically linked libraries), or when using the # `getpwnam' function (for tilde expansion). The first can be disabled with @@ -188,8 +227,16 @@ $(ibdir)/make: $(tdir)/make-$(make-version).tar.lz \ $(ibdir)/tar $(call gbuild,$(subst $(tdir)/,,$<), make-$(make-version)) + + + + # GNU Bash $(ibdir)/bash: $(tdir)/bash-$(bash-version).tar.gz \ $(ibdir)/make +ifeq ($(static_build),yes) $(call gbuild,$(subst $(tdir)/,,$<), bash-$(bash-version), , \ --enable-static-link) +else + $(call gbuild,$(subst $(tdir)/,,$<), bash-$(bash-version)) +endif diff --git a/reproduce/src/make/dependencies-build-rules.mk b/reproduce/src/make/dependencies-build-rules.mk index 31e7759..49838f3 100644 --- a/reproduce/src/make/dependencies-build-rules.mk +++ b/reproduce/src/make/dependencies-build-rules.mk @@ -48,7 +48,9 @@ # 4: Extra configuration options. # 5: Extra options/arguments to pass to Make. # 6: Step to run between `make' and `make install': usually `make check'. -gbuild = if [ $(3)x = staticx ]; then export LDFLAGS="$$LDFLAGS -static"; fi; \ +gbuild = if [ $(static_build) = yes ] && $(3)x = staticx ]; then \ + export LDFLAGS="$$LDFLAGS -static"; \ + fi; \ check="$(6)"; \ if [ x"$$check" = x ]; then check="echo Skipping-check"; fi; \ cd $(ddir) && rm -rf $(2) && tar xf $(tdir)/$(1) && cd $(2) && \ @@ -64,7 +66,7 @@ gbuild = if [ $(3)x = staticx ]; then export LDFLAGS="$$LDFLAGS -static"; fi; \ # CMake # ----- -cbuild = if [ $(3)x = staticx ]; then \ +cbuild = if [ $(static_build) = yes ] && [ $(3)x = staticx ]; then \ export LDFLAGS="$$LDFLAGS -static"; \ opts="-DBUILD_SHARED_LIBS=OFF"; \ fi; \ -- cgit v1.2.1