(unknown)
Ileana Dumitrescu <[email protected]> Fri, 2 Jan 2026 13:12:51 -0500 (EST)
| Newsgroups | gmane.comp.gnu.libtool.cvs |
|---|---|
| Message-ID | <[email protected]> |
branch: master commit 3eb06f0b5a3d79140f473afce55b7108cd5886c9 Author: Ileana Dumitrescu <[email protected]> AuthorDate: Wed Dec 3 18:57:53 2025 +0200 Add testing for slimcc compiler New compiler support testing for Slimcc, which is based on existing link order testing. See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=79216 --- Makefile.am | 1 + tests/slimcc.at | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) diff --git a/Makefile.am b/Makefile.am index ccca7dcb..21fb56d5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -679,6 +679,7 @@ TESTSUITE_AT = tests/testsuite.at \ tests/inherited_flags.at \ tests/link-order.at \ tests/link-order2.at \ + tests/slimcc.at \ tests/fail.at \ tests/shlibpath.at \ tests/runpath-in-lalib.at \ diff --git a/tests/slimcc.at b/tests/slimcc.at new file mode 100644 index 00000000..968c19bd --- /dev/null +++ b/tests/slimcc.at @@ -0,0 +1,101 @@ +# slimcc.at - Link order check for the slimcc compiler -*- Autotest -*- +# +# Copyright (C) 2025 Free Software Foundation, Inc. +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool. If not, see <https://www.gnu.org/licenses/>. +#### + + +AT_SETUP([Link order slimcc test]) +AT_KEYWORDS([slimcc]) +eval `$LIBTOOL --config | $EGREP '^(hardcode_direct|hardcode_direct_absolute|shrext_cmds)='` +LDFLAGS="$LDFLAGS -no-undefined" + +module=no +eval shared_ext=\"$shrext_cmds\" + +AT_CHECK([$LIBTOOL --config | $EGREP '^CC=slimcc' || exit 77], 1) + +prefix_old=`pwd`/old +prefix_new=`pwd`/new +mkdir src $prefix_old $prefix_new $prefix_old/lib $prefix_new/lib + +AT_DATA(src/c.c, +[[int c = 1; +]]) + +$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c src/c.c -o src/c.lo +$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o src/libcee.la src/c.lo -rpath $prefix_old/lib +$LIBTOOL --mode=install cp src/libcee.la $prefix_old/lib/libcee.la + +for i in old new; do + rm -rf src + mkdir src + + cat >src/a_$i.c <<EOF +extern int c; +extern int b_$i(); +int a_$i() { return c + b_$i(); } +EOF + + cat >src/b_$i.c <<EOF +extern int c; +int b_$i() { return 1 + c; } +EOF + + prefix=`eval echo \\$prefix_$i` + $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c src/a_$i.c -o src/a.lo + $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c src/b_$i.c -o src/b.lo + $LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o src/libb.la src/b.lo \ + -L$prefix_old/lib -lcee -rpath $prefix/lib + $LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o src/liba.la src/a.lo \ + src/libb.la -L$prefix_old/lib -lcee -rpath $prefix/lib + $LIBTOOL --mode=install cp src/libb.la $prefix/lib/libb.la + AT_CHECK([$LIBTOOL --mode=install cp src/liba.la $prefix/lib/liba.la], + [0], [stdout], [stderr]) +done + +$LIBTOOL --mode=clean rm -f src/libb.la +$LIBTOOL --mode=clean rm -f src/liba.la + +# Do not error if we do not relink (e.g. static-only systems) +case $hardcode_direct$hardcode_direct_absolute in +yesno) + AT_CHECK([if $EGREP relinking stderr; then + $EGREP " .*/new/lib/libb$shared_ext .*/old/lib/libcee$shared_ext" stdout + else :; fi], [0], [ignore], [], [echo "wrong link order"]) + ;; +*) + AT_CHECK([if $EGREP relinking stderr; then + $EGREP " -L.*/new/lib -lb -L.*/old/lib -lcee" stdout + else :; fi], [0], [ignore], [], [echo "wrong link order"]) + ;; +esac + +for i in old new; do + cat >src/main_$i.c <<EOF +extern int a_$i(); +int main(void) { return a_$i() != 3; } +EOF + + prefix=`eval echo \\$prefix_$i` + $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c src/main_$i.c -o src/main_$i.lo + AT_CHECK($LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o src/main_$i$EXEEXT src/main_$i.lo -L$prefix/lib -la, + [0], [ignore], [ignore]) + LT_AT_EXEC_CHECK([src/main_$i]) +done + +AT_CLEANUP