aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2014-02-06 11:57:45 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2014-02-10 16:20:13 +0100
commitc13a13efec0051e1fe84749c36c6676dc6e267af (patch)
tree3ec85247e392de8a0802a4072a7acbefed619649 /contrib
parent1552145ae56bf12f3deaef1cdd8a78b2e923a80e (diff)
downloadbitcoin-c13a13efec0051e1fe84749c36c6676dc6e267af.tar.xz
gitian: add -D flag to ar for deterministic output for linux deps
ar -D: Operate in deterministic mode. When adding files and the archive index use zero for UIDs, GIDs, timestamps, and use consistent file modes for all files. When this option is used, if ar is used with identical options and identical input files, multiple runs will create identical output files regardless of the input files' owners, groups, file modes, or modification times.
Diffstat (limited to 'contrib')
-rw-r--r--contrib/gitian-descriptors/boost-linux.yml14
-rw-r--r--contrib/gitian-descriptors/deps-linux.yml11
2 files changed, 22 insertions, 3 deletions
diff --git a/contrib/gitian-descriptors/boost-linux.yml b/contrib/gitian-descriptors/boost-linux.yml
index d752a906a2..a538ff30a8 100644
--- a/contrib/gitian-descriptors/boost-linux.yml
+++ b/contrib/gitian-descriptors/boost-linux.yml
@@ -19,6 +19,7 @@ files:
- "boost_1_55_0.tar.bz2"
script: |
STAGING="$HOME/install"
+ TEMPDIR="$HOME/tmp"
export LIBRARY_PATH="$STAGING/lib"
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
export FAKETIME=$REFERENCE_DATETIME
@@ -38,7 +39,16 @@ script: |
./bootstrap.sh --without-icu
- ./bjam toolset=gcc threadapi=pthread threading=multi variant=release link=static runtime-link=shared --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 --layout=tagged --build-type=complete --prefix="$STAGING" $MAKEOPTS install
+ ./bjam toolset=gcc threadapi=pthread threading=multi variant=release link=static runtime-link=shared --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 --layout=tagged --build-type=complete --prefix="$STAGING" $MAKEOPTS -d+2 install
+ # post-process all generated libraries to be deterministic
+ # extract them to a temporary directory then re-build them deterministically
+ for LIB in $(find $STAGING -name \*.a); do
+ rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR
+ ar xv $LIB | cut -b5- > /tmp/list.txt
+ rm $LIB
+ ar crsD $LIB $(cat /tmp/list.txt)
+ done
+ #
cd "$STAGING"
- find -type f | sort | zip -X@ $OUTDIR/boost-linux${GBUILD_BITS}-1.55.0-gitian-r1.zip
+ find | sort | zip -X@ $OUTDIR/boost-linux${GBUILD_BITS}-1.55.0-gitian-r1.zip
diff --git a/contrib/gitian-descriptors/deps-linux.yml b/contrib/gitian-descriptors/deps-linux.yml
index 8585661458..908f9321a4 100644
--- a/contrib/gitian-descriptors/deps-linux.yml
+++ b/contrib/gitian-descriptors/deps-linux.yml
@@ -23,6 +23,7 @@ files:
- "db-4.8.30.NC.tar.gz"
script: |
STAGING="$HOME/install"
+ TEMPDIR="$HOME/tmp"
OPTFLAGS='-O2'
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
export FAKETIME=$REFERENCE_DATETIME
@@ -84,6 +85,14 @@ script: |
make $MAKEOPTS library_build
make install_lib install_include
cd ../..
+ # post-process all generated libraries to be deterministic
+ # extract them to a temporary directory then re-build them deterministically
+ for LIB in $(find $STAGING -name \*.a); do
+ rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR
+ ar xv $LIB | cut -b5- > /tmp/list.txt
+ rm $LIB
+ ar crsD $LIB $(cat /tmp/list.txt)
+ done
#
cd $STAGING
- find include lib bin host -type f | sort | zip -X@ $OUTDIR/bitcoin-deps-linux${GBUILD_BITS}-gitian-r3.zip
+ find include lib bin host | sort | zip -X@ $OUTDIR/bitcoin-deps-linux${GBUILD_BITS}-gitian-r3.zip