On Mon, Jun 25, 2018 at 1:39 PM Bernhard M. Wiedemann
<bwiedem...@suse.de> wrote:
>
> so that gcc builds in a reproducible way
> in spite of indeterministic filesystem readdir order
>
> See https://reproducible-builds.org/ for why this is good.
>
> While working on the reproducible builds effort, I found that
> when building the gcc8 package for openSUSE, there were differences
> between each build in resulting binaries like gccgo, cc1obj and cpp
> because the order of objects in libstdc++.a varied based on
> the order of entries returned by the filesystem.
>
> Two remaining issues are with timestamps in the ada build
> and with profiledbootstrap that only is reproducible if all inputs
> in the profiling run remain constant (and make -j breaks it too)
>
> Testcases:
>   none included because patch is trivial and it would need to compare builds 
> on 2 filesystems.
>
> Bootstrapping and testing:
>   tested successfully with gcc8 on x86_64

Looks ok to me.

Btw, running find to search for libtool.m4/ltmain.sh I find extra copies in

./libgo/config/ltmain.sh
./libgo/config/libtool.m4

which are nearly identical besides appearantly patched in GO support?

Can we consolidate those and/or do we need to patch those as well?

Thanks,
Richard.

> [gcc]
> 2018-06-19  Bernhard M. Wiedemann  <bwiedem...@suse.de>
>
>         libtool: Sort output of 'find' to enable deterministic builds.
>
> ---
> pulled in libtool commit 74c8993c178a1386ea5e2363a01d919738402f30
> because a full update appears to be too troublesome after 8+ years
> of divergence, but we still really want that fix.
>
> See also https://gcc.gnu.org/ml/gcc/2017-10/msg00060.html
> ---
>  libtool.m4 | 8 ++++----
>  ltmain.sh  | 4 ++--
>  2 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/libtool.m4 b/libtool.m4
> index 24d13f344..940faaa16 100644
> --- a/libtool.m4
> +++ b/libtool.m4
> @@ -6005,20 +6005,20 @@ if test "$_lt_caught_CXX_error" != yes; then
>               _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
>                 rm -rf $tpldir~
>                 $CC --prelink_objects --instantiation_dir $tpldir $objs 
> $libobjs $compile_deplibs~
> -               compile_command="$compile_command `find $tpldir -name \*.o | 
> $NL2SP`"'
> +               compile_command="$compile_command `find $tpldir -name \*.o | 
> sort | $NL2SP`"'
>               _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
>                 rm -rf $tpldir~
>                 $CC --prelink_objects --instantiation_dir $tpldir 
> $oldobjs$old_deplibs~
> -               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name 
> \*.o | $NL2SP`~
> +               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name 
> \*.o | sort | $NL2SP`~
>                 $RANLIB $oldlib'
>               _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
>                 rm -rf $tpldir~
>                 $CC --prelink_objects --instantiation_dir $tpldir 
> $predep_objects $libobjs $deplibs $convenience $postdep_objects~
> -               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find 
> $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname 
> ${wl}$soname -o $lib'
> +               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find 
> $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags 
> ${wl}-soname ${wl}$soname -o $lib'
>               _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
>                 rm -rf $tpldir~
>                 $CC --prelink_objects --instantiation_dir $tpldir 
> $predep_objects $libobjs $deplibs $convenience $postdep_objects~
> -               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find 
> $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname 
> ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
> +               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find 
> $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags 
> ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o 
> $lib'
>               ;;
>             *) # Version 6 and above use weak symbols
>               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag 
> $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags 
> ${wl}-soname ${wl}$soname -o $lib'
> diff --git a/ltmain.sh b/ltmain.sh
> index 9503ec85d..79f9ba89a 100644
> --- a/ltmain.sh
> +++ b/ltmain.sh
> @@ -2917,7 +2917,7 @@ func_extract_archives ()
>             darwin_file=
>             darwin_files=
>             for darwin_file in $darwin_filelist; do
> -             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
> +             darwin_files=`find unfat-$$ -name $darwin_file -print | sort | 
> $NL2SP`
>               $LIPO -create -output "$darwin_file" $darwin_files
>             done # $darwin_filelist
>             $RM -rf unfat-$$
> @@ -2932,7 +2932,7 @@ func_extract_archives ()
>          func_extract_an_archive "$my_xdir" "$my_xabs"
>         ;;
>        esac
> -      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o 
> -name \*.lo -print | $NL2SP`
> +      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o 
> -name \*.lo -print | sort | $NL2SP`
>      done
>
>      func_extract_archives_result="$my_oldobjs"
> --
> 2.13.7
>

Reply via email to