From dda89debd25af2ed4628fdd5772640b958de86f9 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Sun, 3 Nov 2019 14:07:55 +0000 Subject: Corrected build of log4cxx by re-building the tarball used When building the log4cxx tarball from its Git history, I noticed that files with very long names are not packaged by tar (because by default Automake uses the ancient v7 tar format that only supports file names less than 99 characters). So I build the tarball with the `tar-ustar' option to Automake (by modifying the log4cxx source) and the resulting tarball was able to compile and run successfully. This has been described above the rule to build log4cxx and I also sent an email to their developing mailing list to inform them of this problem. If they address it, I will remove the note on the necessary corrections. --- .../software/config/installation/checksums.mk | 2 +- reproduce/software/config/installation/versions.mk | 2 +- reproduce/software/make/high-level.mk | 42 +++++++++++++++------- 3 files changed, 31 insertions(+), 15 deletions(-) (limited to 'reproduce/software') diff --git a/reproduce/software/config/installation/checksums.mk b/reproduce/software/config/installation/checksums.mk index b4efaa1..6ea6da4 100644 --- a/reproduce/software/config/installation/checksums.mk +++ b/reproduce/software/config/installation/checksums.mk @@ -73,7 +73,7 @@ zlib-checksum = 73fd3fff4adeccd4894084c15ddac89890cd10ef105dd5e1835e1e9bbb6a49ff # `reproduce/software/config/installation/TARGETS.mk' will be built as part # of a project. To specify a software there, just remove the `-checksum' # suffix from the list below. -apachelog4cxx-checksum = 1c34d80983db5648bc4582ddcf6b4fdefdc6594c2769f95235f5441cd6d03cf279cc8f365e9a687085b113f79ebac9d7d33a54b6aa3b3b808c0e1a56a15ffa37 +apachelog4cxx-checksum = aa59ce549c2c5cbeec031361dfce09cdfc3e62ee3bc9ecbc809507b7ec878c14409b98536b7d13c27690809c8e9d5ebafc3589c9fb5e4aecd5cc064943ae7d6b apr-checksum = daa140c83c7e2c45c3980d9dc81d34fa662bebd050653562c39572d0ddf2eaedb71767c518a59d77f59db9b32e00221ef48b9f72ec3666c4521dd511969f3706 apr-util-checksum = 84da76e9b64da2de0996d4d6f3ab3f23db3724eb6352d218e0e8196bcc0b0a5d4fe791f41b4cc350ce3d04cce3bb3cf8bfb513d777d0cd030928368e6b55a536 astrometrynet-checksum = 35c268bf0a7068e01323b9bfccdf255c993df83c24b2e6026a00084c4ab87d031f1024205d0ed3aecc7e2a495d4bc0b0e67270d66679020b7cc2e4b2f30f5c4a diff --git a/reproduce/software/config/installation/versions.mk b/reproduce/software/config/installation/versions.mk index b498733..bf503ff 100644 --- a/reproduce/software/config/installation/versions.mk +++ b/reproduce/software/config/installation/versions.mk @@ -71,7 +71,7 @@ zlib-version = 1.2.11 # `reproduce/software/config/installation/TARGETS.mk' will be built as part # of a project. To specify a software there, just remove the `-version' # suffix from the list below. -apachelog4cxx-version = 0.10.0 +apachelog4cxx-version = 0.10.0-603-014954db apr-version = 1.7.0 apr-util-version = 1.6.1 astrometrynet-version = 0.77 diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk index 0812067..7f0e044 100644 --- a/reproduce/software/make/high-level.mk +++ b/reproduce/software/make/high-level.mk @@ -132,7 +132,7 @@ include reproduce/software/make/python.mk # convention, but include the name/version in their tarball names with # another format, we'll do the modification before the download so the # downloaded file has our desired format. -tarballs = $(foreach t, apachelog4cxx-$(apachelog4cxx-version).tar.gz \ +tarballs = $(foreach t, apachelog4cxx-$(apachelog4cxx-version).tar.lz \ apr-$(apr-version).tar.gz \ apr-util-$(apr-util-version).tar.gz \ astrometry.net-$(astrometrynet-version).tar.gz \ @@ -190,10 +190,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) # Set the top download link of the requested tarball. mergenames=1 - if [ $$n = apachelog ]; then - mergenames=0; - c=$(apachelog4cxx-checksum); - w=https://www-eu.apache.org/dist/logging/log4cxx/$(apachelog4cxx-version)/apache-log4cxx-$(apachelog4cxx-version).tar.lz + if [ $$n = apachelog ]; then c=$(apachelog4cxx-checksum); w=http://akhlaghi.org/reproduce-software elif [ $* = apr-util-$(apr-util-version).tar.gz ]; then c=$(apr-util-checksum); w=https://www-us.apache.org/dist/apr elif [ $$n = apr ]; then c=$(apr-checksum); w=https://www-us.apache.org/dist/apr @@ -346,18 +343,37 @@ $(tarballs): $(tdir)/%: | $(lockdir) # library names. # Until version 0.11.0 is released, we are using the version corresponding -# to commit 014954db +# to commit 014954db (603 commits after version 0.10.0, most recent when +# first importing log4cxx into this project). +# +# Note that after cloning the project, the following changes are necessary +# in `configure.ac'. +# - Update the final name of the tarball and its version (from `git +# - describe') by modifying the `AC_INIT' line: +# AC_INIT([apachelog4cxx], [0.10.0-603-014954db]) +# - Because of the long file names in the project, some files will not be +# packaged by default, so pass the `tar-ustar' option to Automake (the +# `AM_INIT_AUTOMAKE' line of `configure.ac': +# AM_INIT_AUTOMAKE([foreign subdir-objects -Wall tar-ustar]) +# +# You can then simply bootstrap the project and make the distribution +# tarball like this: +# ./autogen.sh && ./configure && make -j8 && make dist-lzip +# +# Unfortunately we have to re-run the `autogen.sh' script on the tarball to +# 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.gz + $(tdir)/apachelog4cxx-$(apachelog4cxx-version).tar.lz - ######################### - # STILL NOT COMPLETE: needs a patch. - ######################### - pdir=apache-log4cxx-$(apachelog4cxx-version) + pdir=apachelog4cxx-$(apachelog4cxx-version) rm -rf $(ddir)/$$pdir - topdir=$(pwd); cd $(ddir); + topdir=$(pwd) + cd $(ddir) tar xf $(word 1,$(filter $(tdir)/%,$|)) - cd $$pdir \ + cd $$pdir + ./autogen.sh \ && ./configure SHELL=$(ibdir)/bash --prefix=$(idir) \ && make -j$(numthreads) SHELL=$(ibdir)/bash \ && make install \ -- cgit v1.2.1