1 # Expect script
for direct linking from dll tests
3 # Free Software Foundation
, Inc.
5 # This file is part of the GNU Binutils.
7 # This
program is free software
; you can redistribute it and
/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation
; either version
3 of the License
, or
10 #
(at your option
) any later version.
12 # This
program is distributed in the hope that it will be useful
,
13 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License
for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this
program; if not
, write to the Free Software
19 # Foundation
, Inc.
, 51 Franklin Street
- Fifth Floor
, Boston
,
22 # Written by Pedro Alves
<pedro_alves@portugalmail.pt
>
27 # This test checks the
"direct linking to a dll" functionality.
29 # The test has
7 stages
:
31 #
1.
compile and link a test dll with
".dll" extension.
33 #
2.
compile and link a test dll with
".sl" (i.e. != ".dll") extension.
35 #
3.
compile and link a client application linking directly to the
".dll" dll built in 1.
36 # This should produce no errors.
38 #
4.
compile and link a client application linking directly to the
".sl" dll built in 2.
39 # This should produce no errors.
41 #
5.
compile and link a client application linking directly to a symlink into
42 # the
".dll" dll built in 1.
43 # This should produce no errors.
45 #
6.
compile and link a client application linking directly to a symlink into
46 # the
".sl" dll built in 1.
47 # This should produce no errors.
49 #
7. run the produced executables
51 # This test can only be run
on PE
/COFF platforms.
52 if { ![istarget
*-*-cygwin
*]
53 && ![istarget
*-*-mingw
*]
54 && ![istarget
*-*-pe
] } {
58 # No compiler
, no test.
59 if { [which $CC
] == 0 } {
60 untested
"Direct linking to dll test"
66 proc test_direct_link_dll
{} {
74 if ![ld_compile
"$CC $CFLAGS" $srcdir/$subdir/direct_dll.c $tmpdir/direct_dll.o ] {
75 fail
"compiling shared lib"
76 } elseif
![ld_simple_link
"$CC -shared" $tmpdir/direct_dll.dll "$tmpdir/direct_dll.o" ] {
77 fail
"linking shared lib (.dll)"
78 } elseif
![ld_simple_link
"$CC -shared" $tmpdir/direct_dll.sl "$tmpdir/direct_dll.o" ] {
79 fail
"linking shared lib (.sl)"
81 #
Compile and link the client
program.
82 if ![ld_compile
"$CC $CFLAGS" $srcdir/$subdir/direct_client.c $tmpdir/direct_client.o ] {
83 fail
"compiling client"
85 # Check linking directly to direct_dll.dll.
86 set msg
"linking client (.dll)"
87 if [ld_simple_link $CC $tmpdir
/direct_client_dll.exe
"$tmpdir/direct_client.o $tmpdir/direct_dll.dll" ] {
93 # Check linking directly to direct_dll.sl.
94 set msg
"linking client (.sl)"
95 if [ld_simple_link $CC $tmpdir
/direct_client_sl.exe
"$tmpdir/direct_client.o $tmpdir/direct_dll.sl" ] {
101 # Check dll direct linking through symlink to .dll.
102 # Create symbolic link.
103 catch
"exec ln -fs direct_dll.dll $tmpdir/libdirect_dll.dll.a" ln_catch
104 set msg
"linking client (symlink -> .dll)"
105 if [ld_simple_link $CC $tmpdir
/direct_client_symlink_dll.exe
"$tmpdir/direct_client.o $tmpdir/libdirect_dll.dll.a" ] {
111 # Check dll direct linking through symlink to .sl.
112 # Create symbolic link.
113 catch
"exec ln -fs direct_dll.sl $tmpdir/libdirect_sl.dll.a" ln_catch
114 set msg
"linking client (symlink -> .sl)"
115 if [ld_simple_link $CC $tmpdir
/direct_client_symlink_sl.exe
"$tmpdir/direct_client.o $tmpdir/libdirect_sl.dll.a" ] {
124 proc directdll_execute
{exe msg
} {
126 catch
"exec $exe" prog_output
127 if [string match $expected $prog_output
] then {
137 # This is as far as we can go with a cross
-compiler
138 if ![isnative
] then {
139 verbose
"Not running natively, so cannot execute binaries"
143 directdll_execute
"$tmpdir/direct_client_dll.exe" "running direct linked dll (.dll)"
144 directdll_execute
"$tmpdir/direct_client_sl.exe" "running direct linked dll (.sl)"
145 directdll_execute
"$tmpdir/direct_client_symlink_sl.exe" "running direct linked dll (symlink -> .sl)"
146 directdll_execute
"$tmpdir/direct_client_symlink_dll.exe" "running direct linked dll (symlink -> .dll)"