1 # convenience.at -- testing C convenience archives -*- Autotest -*-
3 # Copyright (C) 2005, 2007-2019, 2021-2024 Free Software Foundation,
5 # Written by Ralf Wildenhues, 2005
7 # This file is part of GNU Libtool.
9 # GNU Libtool is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU General Public License as
11 # published by the Free Software Foundation; either version 2 of
12 # the License, or (at your option) any later version.
14 # GNU Libtool is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with GNU Libtool; see the file COPYING. If not, a copy
21 # can be downloaded from http://www.gnu.org/licenses/gpl.html,
22 # or obtained by writing to the Free Software Foundation, Inc.,
23 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26 # Test that convenience archives work.
28 # - adding one or multiple convenience archives
29 # - with or without additional objects on the cmdline
31 AT_SETUP([C convenience archives])
32 AT_KEYWORDS([libtool])
36 int main(void) { return a1() != 1; }
39 extern int a1(void), a2(void);
40 int main(void) { return a1() + a2() != 3; }
43 extern int a1(void), a2(void), a3(void);
44 int main(void) { return a1() + a2() + a3() != 6; }
47 echo "int a$i(void) { return $i; }" > a$i.c
48 $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c main$i.c
49 $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c a$i.c
50 $LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba$i.la a$i.lo
52 AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba12.la liba1.la liba2.la -rpath /notexist],
53 [0],[ignore],[ignore])
54 AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba123.la a3.lo liba1.la liba2.la -rpath /notexist],
55 [0],[ignore],[ignore])
60 AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -static -o main_static$EXEEXT main$i.lo liba$conv.la],
61 [0],[ignore],[ignore])
62 AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o main$EXEEXT main$i.lo liba$conv.la],
63 [0],[ignore],[ignore])
64 LT_AT_EXEC_CHECK([./main_static])
65 LT_AT_EXEC_CHECK([./main])
70 AT_SETUP([C++ convenience archives])
72 AT_KEYWORDS([libtool])
76 int main(void) { return a1() != 1; }
79 extern int a1(void), a2(void);
80 int main(void) { return a1() + a2() != 3; }
83 extern int a1(void), a2(void), a3(void);
84 int main(void) { return a1() + a2() + a3() != 6; }
87 echo "int a$i(void) { return $i; }" > a$i.cpp
88 $LIBTOOL --tag=CXX --mode=compile $CXX $CXXFLAGS -c main$i.cpp
89 $LIBTOOL --tag=CXX --mode=compile $CXX $CXXFLAGS -c a$i.cpp
90 $LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o liba$i.la a$i.lo
92 AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o liba12.la liba1.la liba2.la -rpath /notexist],
93 [0],[ignore],[ignore])
94 AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o liba123.la a3.lo liba1.la liba2.la -rpath /notexist],
95 [0],[ignore],[ignore])
100 AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -static -o main_static$EXEEXT main$i.lo liba$conv.la],
101 [0],[ignore],[ignore])
102 AT_CHECK([$LIBTOOL --tag=CXX --mode=link $CXX $CXXFLAGS $LDFLAGS -o main$EXEEXT main$i.lo liba$conv.la],
103 [0],[ignore],[ignore])
104 LT_AT_EXEC_CHECK([./main_static])
105 LT_AT_EXEC_CHECK([./main])
110 AT_SETUP([F77 convenience archives])
112 AT_KEYWORDS([libtool])
148 $LIBTOOL --tag=F77 --mode=compile $F77 $FFLAGS -c main$i.f
149 $LIBTOOL --tag=F77 --mode=compile $F77 $FFLAGS -c a$i.f
150 $LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -o liba$i.la a$i.lo
152 AT_CHECK([$LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -o liba12.la liba1.la liba2.la -rpath /notexist],
153 [0],[ignore],[ignore])
154 AT_CHECK([$LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -o liba123.la a3.lo liba1.la liba2.la -rpath /notexist],
155 [0],[ignore],[ignore])
160 AT_CHECK([$LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -static -o main_static$EXEEXT main$i.lo liba$conv.la],
161 [0],[ignore],[ignore])
162 AT_CHECK([$LIBTOOL --tag=F77 --mode=link $F77 $FFLAGS $LDFLAGS -o main$EXEEXT main$i.lo liba$conv.la],
163 [0],[ignore],[ignore])
164 LT_AT_EXEC_CHECK([./main_static])
165 LT_AT_EXEC_CHECK([./main])
170 AT_SETUP([FC convenience archives])
172 AT_KEYWORDS([libtool])
208 $LIBTOOL --tag=FC --mode=compile $FC $FCFLAGS -c main$i.f
209 $LIBTOOL --tag=FC --mode=compile $FC $FCFLAGS -c a$i.f
210 $LIBTOOL --tag=FC --mode=link $FC $FCFLAGS $LDFLAGS -o liba$i.la a$i.lo
212 AT_CHECK([$LIBTOOL --tag=FC --mode=link $FC $FCFLAGS $LDFLAGS -o liba12.la liba1.la liba2.la -rpath /notexist],
213 [0],[ignore],[ignore])
214 AT_CHECK([$LIBTOOL --tag=FC --mode=link $FC $FCFLAGS $LDFLAGS -o liba123.la a3.lo liba1.la liba2.la -rpath /notexist],
215 [0],[ignore],[ignore])
220 AT_CHECK([$LIBTOOL --tag=FC --mode=link $FC $FCFLAGS $LDFLAGS -static -o main_static$EXEEXT main$i.lo liba$conv.la],
221 [0],[ignore],[ignore])
222 AT_CHECK([$LIBTOOL --tag=FC --mode=link $FC $FCFLAGS $LDFLAGS -o main$EXEEXT main$i.lo liba$conv.la],
223 [0],[ignore],[ignore])
224 LT_AT_EXEC_CHECK([./main_static])
225 LT_AT_EXEC_CHECK([./main])
230 AT_SETUP([Java convenience archives])
231 LT_AT_EXEC_TAG([GCJ])
232 AT_KEYWORDS([libtool])
236 public static void main(String[[]] argv) {
243 public static void main(String[[]] argv) {
244 A1 a1 = new A1(); A2 a2 = new A2();
250 public static void main(String[[]] argv) {
251 A1 a1 = new A1(); A2 a2 = new A2(); A3 a3 = new A3();
259 public A$i () { a = 0; }
263 # Workaround http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42143
264 # Some 4.3.x and 4.4.x releases of gcj insert a spurious dummy symbol
265 # into every object file when compiling directly from .java to .o, so
266 # we have to make .class files first, and then compile those to native
268 $GCJ $GCJFLAGS -C foo$i.java
269 $GCJ $GCJFLAGS -C A$i.java
271 $LIBTOOL --tag=GCJ --mode=compile $GCJ $GCJFLAGS -c foo$i.class
272 $LIBTOOL --tag=GCJ --mode=compile $GCJ $GCJFLAGS -c A$i.class
273 $LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS -o liba$i.la A$i.lo
275 AT_CHECK([$LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS -o liba12.la liba1.la liba2.la -rpath /notexist],
276 [0],[ignore],[ignore])
277 AT_CHECK([$LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS -o liba123.la A3.lo liba1.la liba2.la -rpath /notexist],
278 [0],[ignore],[ignore])
283 AT_CHECK([$LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS -static --main=foo$i -o main_static$EXEEXT foo$i.lo liba$conv.la],
284 [0],[ignore],[ignore])
285 AT_CHECK([$LIBTOOL --tag=GCJ --mode=link $GCJ $GCJFLAGS $LDFLAGS --main=foo$i -o main$EXEEXT foo$i.lo liba$conv.la],
286 [0],[ignore],[ignore])
287 LT_AT_EXEC_CHECK([./main_static])
288 LT_AT_EXEC_CHECK([./main])