| # Copyright (C) 2017-2020 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 3 of the License, 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 GCC; see the file COPYING3. If not see |
| # <http://www.gnu.org/licenses/>. |
| |
| load_lib libphobos-dg.exp |
| |
| # Immediately exit if target doesn't support shared. |
| if { ![is-effective-target shared] } { |
| return |
| } |
| |
| # If a testcase doesn't have special options, use these. |
| if ![info exists DEFAULT_CFLAGS] then { |
| set DEFAULT_CFLAGS "-g" |
| } |
| |
| # |
| # Build all shared libraries, used as dependencies for other tests. |
| # |
| |
| proc shared_library { source destfile options } { |
| global DEFAULT_DFLAGS |
| global all_libraries |
| |
| # Compiling with -fno-gnu-unique as tests call dlopen/dlclose multiple times on the same library. |
| lappend options "additional_flags=$DEFAULT_DFLAGS -fno-gnu-unique -fpic -shared -shared-libphobos" |
| |
| set comp_output [libphobos_target_compile "$source" "$destfile" "executable" $options] |
| if ![ string match "" $comp_output ] { |
| fail "libphobos.shared/[file tail $source]" |
| verbose -log $comp_output |
| return 1 |
| } |
| |
| lappend all_libraries $destfile |
| } |
| |
| # lib.so |
| shared_library "$srcdir/$subdir/lib.d" "lib.so" "" |
| |
| # liblinkdep.so |
| shared_library "$srcdir/$subdir/liblinkdep.d" "liblinkdep.so" \ |
| [list "additional_flags=-I$srcdir/$subdir lib.so"] |
| |
| # libloaddep.so |
| shared_library "$srcdir/$subdir/libloaddep.d" "libloaddep.so" "" |
| |
| # lib_13414.so |
| shared_library "$srcdir/$subdir/lib_13414.d" "lib_13414.so" "" |
| |
| # plugin.so |
| shared_library "$srcdir/$subdir/plugin.d" "plugin1.so" "" |
| shared_library "$srcdir/$subdir/plugin.d" "plugin2.so" "" |
| |
| # Initialize dg. |
| dg-init |
| |
| # Main loop. |
| dg-runtest "$srcdir/$subdir/link.d" "-I$srcdir/$subdir lib.so -shared-libphobos" \ |
| "$DEFAULT_DFLAGS" |
| |
| dg-runtest "$srcdir/$subdir/link_linkdep.d" \ |
| "-I$srcdir/$subdir liblinkdep.so lib.so -shared-libphobos" \ |
| "$DEFAULT_DFLAGS" |
| |
| dg-runtest "$srcdir/$subdir/link_loaddep.d" \ |
| "-I$srcdir/$subdir libloaddep.so -shared-libphobos" "$DEFAULT_DFLAGS" |
| |
| # dlopen() tests. |
| if [is-effective-target dlopen] { |
| dg-runtest "$srcdir/$subdir/load.d" "-shared-libphobos -ldl" "$DEFAULT_DFLAGS" |
| dg-runtest "$srcdir/$subdir/load_linkdep.d" "-shared-libphobos -ldl" "$DEFAULT_DFLAGS" |
| dg-runtest "$srcdir/$subdir/load_loaddep.d" "-shared-libphobos -ldl" "$DEFAULT_DFLAGS" |
| dg-runtest "$srcdir/$subdir/load_13414.d" "-shared-libphobos -ldl" "$DEFAULT_DFLAGS" |
| dg-runtest "$srcdir/$subdir/finalize.d" "-shared-libphobos -ldl" "$DEFAULT_DFLAGS" |
| } |
| |
| # C program link tests. |
| if { [is-effective-target dlopen] && [is-effective-target pthread] } { |
| dg-runtest "$srcdir/$subdir/linkD.c" "lib.so -ldl -pthread" "$DEFAULT_CFLAGS" |
| dg-runtest "$srcdir/$subdir/linkDR.c" "-shared-libphobos -ldl -pthread" "$DEFAULT_CFLAGS" |
| dg-runtest "$srcdir/$subdir/host.c" "-ldl -pthread" "$DEFAULT_CFLAGS" |
| |
| # Test requires a command line argument to be passed to the program. |
| set libphobos_run_args "${blddir}/src/.libs/libgphobos.${shlib_ext}" |
| dg-runtest "$srcdir/$subdir/loadDR.c" "-ldl -pthread -g" "$DEFAULT_CFLAGS" |
| set libphobos_run_args "" |
| } |
| |
| # All done. |
| dg-finish |
| |
| # Remove all libraries built before running tests. |
| foreach lib $all_libraries { |
| catch "file delete -force -- $lib" |
| } |