libtool/tests/stresstest.at
Peter Ekberg 072341693e * libltdl/config/ltmain.m4sh (func_generate_dlsyms):
Fix escape expression to actually escape relevant
characters from the following grep. Fix Cygwin and
MinGW to use the filtered symbol list when exporting
from self, and not the symbol filter.
* tests/stresstest.at: Export w8, not w8$
2005-09-13 07:28:14 +00:00

207 lines
4.6 KiB
Plaintext

# Hand crafted tests for GNU Libtool. -*- Autotest -*-
# Copyright 2005 Free Software Foundation, Inc.
# This program 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, or (at your option)
# any later version.
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
# Test various flag and option combinations.
# Test linkage against objects in various sections.
# Note: This test is experimental, and might be too strict for some systems.
AT_BANNER([Libtool stress test.])
AT_SETUP([Link option thorough search test])
eval `$LIBTOOL --config | $EGREP '^(CC|objdir)='`
mkdir sub sub2 sub3 2>/dev/null
AT_DATA(a.c,
[[/* all kinds of data items */
int v1;
static int v2;
int v3 = 0;
int v4 = 1;
const int v5 = 0;
const int v6 = 1;
const char* v7 = "\01foo";
const char v8[] = "\01bar";
int v9(void) { return 1; }
int (*v10) (void);
int (*v11) (void) = v9;
int (*const v12) (void) = v9;
typedef struct { int arr[1000]; } large;
large v13;
large v14 = { { 0 } };
large v15 = { { 1 } };
]])
AT_DATA(asyms,
[[v1
v3
v4
v5
v6
v7
v8
v9
v10
v11
v12
v13
v14
v15
]])
AT_DATA(b.c,
[[int b = 42;
int b3 = 1;
int ab = 1;
]])
AT_DATA(main.c,
[[extern int v1;
extern int v3, v4;
extern const int v5, v6;
extern const char* v7;
extern const char v8[];
extern int v9(void);
extern int (*v10) (void);
extern int (*v11) (void);
extern int (*const v12) (void);
typedef struct { int arr[1000]; } large;
extern large v13, v14, v15;
int main(void)
{
char s = v7[0] + v8[0];
return s + v1 + v3 + v4 + v5 + v6 + v9() + v11() + v12()
+ v13.arr[0] + v14.arr[0] + v15.arr[0]
- 8;
}
]])
AT_DATA(dlself.c,
[[extern int v1;
extern int v3, v4;
extern const int v5, v6;
extern const char* v7;
extern const char v8[];
extern int v9(void);
extern int (*v10) (void);
extern int (*v11) (void);
extern int (*const v12) (void);
typedef struct { int arr[1000]; } large;
extern large v13, v14, v15;
extern int w1;
extern int w3, w4;
extern const int w5, w6;
extern const char* w7;
extern const char w8[];
extern int w9(void);
extern int (*w10) (void);
extern int (*w11) (void);
extern int (*const w12) (void);
extern large w13, w14, w15;
int main(void)
{
char s = v7[0] + v8[0] + w7[0] + w8[0];
return s + v1 + v3 + v4 + v5 + v6 + v9() + v11() + v12()
+ v13.arr[0] + v14.arr[0] + v15.arr[0]
+ w1 + w3 + w4 + w5 + w6 + w9() + w11() + w12()
+ w13.arr[0] + w14.arr[0] + w15.arr[0]
- 16;
}
int w1;
static int w2;
int w3 = 0;
int w4 = 1;
const int w5 = 0;
const int w6 = 1;
const char* w7 = "\01foo";
const char w8[] = "\01bar";
int w9(void) { return 1; }
int (*w10) (void);
int (*w11) (void) = w9;
int (*const w12) (void) = w9;
large w13;
large w14 = { { 0 } };
large w15 = { { 1 } };
]])
AT_DATA(dlselfsyms,
[[w1
w3
w4
w5
w6
w7
w8
w9
w10
w11
w12
w13
w14
w15
]])
AT_CHECK([$LIBTOOL --mode=compile $CC $CFLAGS -c a.c -o sub/a.lo],[0],[ignore],[ignore])
AT_CHECK([$LIBTOOL --mode=compile $CC $CFLAGS -c b.c -o sub/b.lo],[0],[ignore],[ignore])
AT_CHECK([$LIBTOOL --mode=compile $CC $CFLAGS -c main.c],[0],[ignore],[ignore])
AT_CHECK([$LIBTOOL --mode=compile $CC $CFLAGS -c dlself.c -o sub3/dlself.lo],[0],[ignore],[ignore])
case $host_os in
cygwin* | mingw* | pw32*) undef_opts=-no-undefined ;;
*) undef_opts='"" -no-undefined' ;;
esac
for l1 in $undef_opts
do
for l2 in '' '-export-symbols-regex v.*' '-export-symbols asyms'
do
for l3 in '' '-rpath /nonexistent'
do
linkargs="$l1 $l2 $l3"
for rel in '' ./ `pwd`/
do
AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o "$rel"sub2/liba.la "$rel"sub/a.lo $linkargs],
[0],[ignore],[ignore])
for st in '' '-static'
do
AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS $st -o "$rel"main "$rel"main.lo "$rel"sub2/liba.la],
[0],[ignore],[ignore])
LT_AT_EXEC_CHECK([./main],[0])
for l10 in '' '-export-symbols dlselfsyms'
do
AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS $st -o "$rel"sub3/dlself "$rel"sub3/dlself.lo "$rel"sub2/liba.la sub/b.lo -dlopen self $l10],
[0],[ignore],[ignore])
LT_AT_EXEC_CHECK([./sub3/dlself],[0])
done
done
done
done
done
done
AT_CLEANUP