Hi subversion developers!
I'm working on fixing parallel build (or install) faliures in upstream
packages used in NixOS linux distribution. Mostly to speed package builds
up on continuous build farm.
That usually means that
$ ./configure && make && make install
is changed to
$ ./configure && make -j$(nproc) && make -j$(nproc) install
To make the error more obvioud GNU make recently added --shuffle option
to better expose missing dependencies across Makefile targets:
https://savannah.gnu.org/bugs/index.php?62100
'subversion-1.14.2' came as one of the packages that sometimes fails on
'make install'
There is a build log snippet that exposed missing install dependencies:
$ ./configure --disable-static --prefix=/<<NIX>>/subversion-1.14.2
--bindir=/<<NIX>>/subversion-1.14.2/bin
--sbindir=/<<NIX>>/subversion-1.14.2/sbin
--includedir=/<<NIX>>/subversion-1.14.2-dev/include
--oldincludedir=/<<NIX>>/subversion-1.14.2-dev/include
--mandir=/<<NIX>>/subversion-1.14.2-man/share/man
--infodir=/<<NIX>>/subversion-1.14.2/share/info
--docdir=/<<NIX>>/subversion-1.14.2/share/doc/subversion
--libdir=/<<NIX>>/subversion-1.14.2/lib
--libexecdir=/<<NIX>>/subversion-1.14.2/libexec
--localedir=/<<NIX>>/subversion-1.14.2/share/locale --with-berkeley-db
--without-apxs --without-swig --without-sasl --with-serf=/<<NIX>>/serf-1.3.9
--with-zlib=/<<NIX>>/zlib-1.2.12-dev --with-sqlite=/<<NIX>>/sqlite-3.38.5-dev
--build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu
...
$ make -j16 -l16 SHELL=/<<NIX>>/bash-5.1-p16/bin/bash
APACHE_LIBEXECDIR=/<<NIX>>/subversion-1.14.2/modules
...
$ make --shuffle APACHE_LIBEXECDIR=/<<NIX>>/subversion-1.14.2/modules
pkgconfigdir=/<<NIX>>/subversion-1.14.2-dev/lib/pkgconfig
m4datadir=/<<NIX>>/subversion-1.14.2-dev/share/aclocal
aclocaldir=/<<NIX>>/subversion-1.14.2-dev/share/aclocal install
test -d /<<NIX>>/subversion-1.14.2-dev/include/subversion-1 || \
/<<NIX>>/coreutils-9.1/bin/install -c -d
/<<NIX>>/subversion-1.14.2-dev/include/subversion-1
(subversion/svnversion/svnversion . 2> /dev/null || \
svnversion . 2> /dev/null || \
echo "unknown"; \
) > /<<NIX>>/subversion-1.14.2-dev/include/subversion-1/svn-revision.txt
/<<NIX>>/coreutils-9.1/bin/install -c -d /<<NIX>>/subversion-1.14.2/lib
/<<NIX>>/subversion-1.14.2/share/pkgconfig
cd subversion/libsvn_fs_base ; /<<NIX>>/bash-5.1-p16/bin/bash
"/build/subversion/libtool" --mode=install /<<NIX>>/coreutils-9.1/bin/install
-c libsvn_fs_base-1.la /<<NIX>>/subversion-1.14.2/lib/libsvn_fs_base-1.la
libtool: warning: relinking 'libsvn_fs_base-1.la'
libtool: install: (cd /build/subversion/subversion/libsvn_fs_base;
/<<NIX>>/bash-5.1-p16/bin/bash "/build/subversion/libtool" --tag CC --silent
--mode=relink gcc -shared -g -O2 -g -O2 -L/<<NIX>>/openssl-1.1.1o/lib
-L/<<NIX>>/db-5.3.28/lib -L/<<NIX>>/expat-2.4.8/lib -L/<<NIX>>/serf-1.3.9/lib
-rpath /<<NIX>>/subversion-1.14.2/lib -version-info 0 -Wl,--no-undefined -o
libsvn_fs_base-1.la bdb/bdb-err.lo bdb/bdb_compat.lo bdb/changes-table.lo
bdb/checksum-reps-table.lo bdb/copies-table.lo bdb/dbt.lo bdb/env.lo
bdb/lock-tokens-table.lo bdb/locks-table.lo bdb/miscellaneous-table.lo
bdb/node-origins-table.lo bdb/nodes-table.lo bdb/reps-table.lo bdb/rev-table.lo
bdb/strings-table.lo bdb/txn-table.lo bdb/uuids-table.lo dag.lo err.lo fs.lo
id.lo key-gen.lo lock.lo node-rev.lo reps-strings.lo revs-txns.lo trail.lo
tree.lo util/fs_skels.lo uuid.lo
../../subversion/libsvn_delta/libsvn_delta-1.la
../../subversion/libsvn_subr/libsvn_subr-1.la -L/<<NIX>>/apr-util-1.6.1/lib
-laprutil-1 -L/<<NIX>>/apr-1.7.0/lib -lapr-1 -ldb-5.3
../../subversion/libsvn_fs_util/libsvn_fs_util-1.la )
/<<NIX>>/binutils-2.38/bin/ld: cannot find -lsvn_delta-1: No such file or
directory
/<<NIX>>/binutils-2.38/bin/ld: cannot find -lsvn_fs_util-1: No such file or
directory
collect2: error: ld returned 1 exit status
libtool: error: error: relink 'libsvn_fs_base-1.la' with the above
command before installing it
make: *** [build-outputs.mk:1422: install-bdb-lib] Error 1
shuffle=1656015674
The failure as I understand it:
'install-bdb-lib' install target assumes that '-lsvn_delta-1' and
'-lsvn_fs_util-1'
are already installed into 'DESTDIR'. But they are not. 'libtool' fails to
relink
'libsvn_fs_base' against 'DESTDIR'.
I think the dependencies usually happen to be present if 'install-fsmod-lib'
target
was lucky to be executed first. But nothing in 'Makefile.in' or
'build-outputs.mk'
seems to have an equivalent of dependency like:
# hypothetical fix
install-bdb-lib : install-fsmod-lib
It looks like 'build.conf' does contain some build dependency information.
I also see special cases like fs-lib to handle some of install deps:
# manual
Makefile.in:SVN_FS_LIB_INSTALL_DEPS = @SVN_FS_LIB_INSTALL_DEPS@
# generated:
build-outputs.mk:install-ramod-lib: $(SVN_FS_LIB_INSTALL_DEPS)
Would it make sense to add 'install-bdb-lib : install-fsmod-lib' dependency
explicitly?
Thank you!
--
Sergei