[Vm-dev] libcruft
Cyril Ferlicot D
cyril at ferlicot.me
Sun Apr 8 22:27:03 UTC 2018
Le 08/04/2018 à 10:47, Nicolas Cellier a écrit :
> So once again, compiling libssh2 on win64 is broken...
> This library is necessary for Pharo VM.
> For now it only works "thanks" (?) to the .thirdparty-cache we have on
> our build slaves.
>
> This situation prevents from integrating further work.
> https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/242
>
> Compiling unixy stuff for windows (mingw) target is tough.
> Esteban and I already wasted some hours on it.
> But it seems that last tentative did not succeed
> https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/57e68cef046c7309261d81d8ad1c45577562f16b
>
> IMO, we could as well use the prebuilt cygwin libraries, rather than
> trying to compile by ourselves. This would have some advantages:
> - remove the necessity for build cache
> - accelerate the build workers
> - be up-to-date security-wise
> - focus our scarce resource to more Smalltalk-related things
> - leverage the work of other teams
> with maybe this drawback:
> - do not completely manage the exact version of every VM component
>
Hi Nicolas,
You listed the pro to use a prebuilt cygwin libraries. Could you also
list the cons for people like me who do not know them?
I suppose that if it is not currently used there must be a reason.
Thank you in advance.
> Managing every VM component also means managing the exact configuration
> of the build workers (compiler version, libraries versions, etc...),
> which we do not anyway.
>
> In the meantime, if we want to fix the build, we have to understand why
> the link phase fails.
>
> CCLD libssh2.la <http://libssh2.la>
> /usr/lib/gcc/x86_64-w64-mingw32/6.4.0/../../../../x86_64-w64-mingw32/bin/ld:
> cannot find -link
>
> We never told to link ink, so what is going on?
> Here come autotools and his very brave libtool, or should I say libcruft.
> If you want to teach yourself "how to not program", then do you a favor:
>
> cd build.win64x64/pharo.cog.spur
> mvm -f
> cd build/third-party/libssh2-1.7.0
> less m4/lib-link.m4
>
> Scary! and it's just a tiny part of the overall cruft.
> It's clear that the production of artifacts in such conditions is
> already beyond the limits of human capabilities.
> An idea could be to teach bots to do it for us, but if we really teach
> them to produce such cruft, then I have no great hope that we'll live in
> a better world ;)
>
> Instead of this pathetic tentative of rule the universe imperative
> programming, in such case we could enter some prolog-like rules and let
> a bot do the inference for us, that may scale a bit longer...
>
> If I go into
> build.win64x64/pharo.cog.spur/build/third-party/libssh2-1.7.0 and
> inquire a bit, I see this:
>
> grep -r '\-link' . | less
>
> ./aclocal.m4:m4_include([m4/lib-link.m4])
> ./compile: linker_opts="-link$linker_opts"
> ./config.status:archive_cmds='$CC -o $lib $libobjs $compiler_flags
> `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
> ./configure: sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\
> -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols >
> $output_objdir/$soname.exp;
> ./configure: sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\
> -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
> ./configure: archive_cmds='$CC -o $lib $libobjs $compiler_flags
> `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
> ./docs/Makefile: $(top_srcdir)/m4/lib-ld.m4
> $(top_srcdir)/m4/lib-link.m4 \
> ./docs/Makefile.in: $(top_srcdir)/m4/lib-ld.m4
> $(top_srcdir)/m4/lib-link.m4 \
> ./example/Makefile: $(top_srcdir)/m4/lib-ld.m4
> $(top_srcdir)/m4/lib-link.m4 \
> ./example/Makefile.in: $(top_srcdir)/m4/lib-ld.m4
> $(top_srcdir)/m4/lib-link.m4 \
> ./libtool:archive_cmds="\$CC -o \$lib \$libobjs \$compiler_flags
> \\\`func_echo_all \\\"\$deplibs\\\" | \$SED 's/ -lc\$//'\\\` -link
> -dll~linknames="
> ./libtool: # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC
> link-time optimization
> ./libtool: -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
> ./ltmain.sh: # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC
> link-time optimization
> ./ltmain.sh: -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
> ./m4/lib-link.m4:# lib-link.m4 serial 13 (gettext-0.16.2)
> ./m4/libtool.m4: sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\
> -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols >
> $output_objdir/$soname.exp;
> ./m4/libtool.m4: sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\
> -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
> ./m4/libtool.m4: _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib
> $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/
> -lc$//'\''` -link -dll~linknames='
> ./m4/libtool.m4: $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\
> -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols >
> $output_objdir/$soname.exp;
> ./m4/libtool.m4: $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\
> -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
> ./m4/libtool.m4:*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS
> -fno-use-linker-plugin" ;;
> ./Makefile: $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
> ./Makefile: ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
> ./Makefile.in: $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
> ./Makefile.in: ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
> ./src/CMakeLists.txt: # Fall back to over-linking dependencies
> ./src/Makefile: $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
> ./src/Makefile.in: $(top_srcdir)/m4/lib-ld.m4
> $(top_srcdir)/m4/lib-link.m4 \
> ./tests/Makefile: $(top_srcdir)/m4/lib-ld.m4
> $(top_srcdir)/m4/lib-link.m4 \
> ./tests/Makefile.in: $(top_srcdir)/m4/lib-ld.m4
> $(top_srcdir)/m4/lib-link.m4 \
>
> Oh my, I don't even want to decipher that, it's obviously write-only.
> All I understand is that the autoshit could decide to insert a -link by
> itself and make our build fail at link phase in certain conditions...
> It remains to see what we recently introduce to trigger these conditions.
> How to debug this, I have no idea (insert prints here and there...).
> Good luck.
>
--
Cyril Ferlicot
https://ferlicot.fr
More information about the Vm-dev
mailing list