# Copyright (C) 2017-2024 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 # . 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" }