📄 libstdc++.exp
字号:
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } { lappend options "libs=${gluefile}" lappend options "ldflags=${wrap_flags}" } set cxx_final $cxx set cxxlibglossflags [libgloss_link_flags] set cxx_final [concat $cxx_final $cxxlibglossflags] set cxx_final [concat $cxx_final $cxxflags] set cxx_final [concat $cxx_final $includes] # Flag setting based on type argument. if { $type == "executable" } { # Link the support objects into executables. set cxx_final [concat $cxx_final ${v3-test_objs}] } else { if { $type == "sharedlib" } { # Don't link in anything. set type "executable" } } lappend options "compiler=$cxx_final" return [target_compile $source $dest $type $options]}# Build the support objects linked in with the libstdc++ tests. In# addition, set v3-wchar_t, v3-threads, v3-test_objs, and v3-symver# appropriately.proc v3-build_support { } { global srcdir global v3-wchar_t global v3-threads global v3-test_objs global v3-symver global v3-sharedlib # Figure out whether or not the library supports certain features. set v3-wchar_t 0 set v3-threads 0 set v3-symver 0 set v3-test_objs "" set config_src "config.cc" set f [open $config_src "w"] puts $f "#include <bits/c++config.h>" puts $f "#include <bits/gthr.h>" close $f set preprocessed [v3_target_compile $config_src "" \ preprocess "additional_flags=-dN"] if { [string first "_GLIBCXX_USE_WCHAR_T" $preprocessed] != -1 } { verbose -log "wchar_t support detected" set v3-wchar_t 1 } if { [string first "_GLIBCXX_SYMVER" $preprocessed] != -1 } { verbose -log "symbol versioning support detected" set v3-symver 1 } if { [string first "__GTHREADS" $preprocessed] != -1 } { verbose -log "thread support detected" set v3-threads 1 } # Build the support objects. set source_files \ [list testsuite_abi.cc testsuite_allocator.cc testsuite_character.cc testsuite_hooks.cc ] foreach f $source_files { set object_file [file rootname $f].o # Compile with "-w" so that warnings issued by the compiler # do not prevent compilation. if { [v3_target_compile $srcdir/$f $object_file "object" \ [list "incdir=$srcdir" "additional_flags=-w"]] != "" } { error "could not compile $f" } append v3-test_objs "$object_file " } # Build the shared support objects. if { ${v3-sharedlib} == 1 } { set source_files \ [list testsuite_shared.cc] foreach f $source_files { set object_file [file rootname $f].so # Compile with "-w" so that warnings issued by the compiler # do not prevent compilation. if { [v3_target_compile $srcdir/$f $object_file "sharedlib" \ [list "incdir=$srcdir" "additional_flags=-w -shared -fPIC -DPIC"]] != "" } { error "could not compile $f" } } }}proc check_v3_target_sharedlib { } { global v3-sharedlib return ${v3-sharedlib}}proc check_v3_target_namedlocale { } { global et_namedlocale_saved global et_namedlocale_target_name global tool if { ![info exists et_namedlocale_target_name] } { set et_namedlocale_target_name "" } # If the target has changed since we set the cached value, clear it. set current_target [current_target_name] if { $current_target != $et_namedlocale_target_name } { verbose "check_v3_target_namedlocale: `$et_namedlocale_target_name'" 2 set et_namedlocale_target_name $current_target if [info exists et_namedlocale_saved] { verbose "check_v3_target_namedlocale: removing cached result" 2 unset et_namedlocale_saved } } if [info exists et_namedlocale_saved] { verbose "check_v3_target_namedlocale: using cached result" 2 } else { set et_namedlocale_saved 0 # Set up, compile, and execute a C++ test program that tries to use # all the required named locales. set src nlocale[pid].cc set exe nlocale[pid].x set f [open $src "w"] puts $f "#include <locale>" puts $f "using namespace std;" puts $f "int main ()" puts $f "{" puts $f " try" puts $f " {" puts $f " locale(\"\");" puts $f " locale(\"de_DE\");" puts $f " locale(\"de_DE.ISO-8859-15@euro\");" puts $f " locale(\"de_DE@euro\");" puts $f " locale(\"en_HK\");" puts $f " locale(\"en_PH\");" puts $f " locale(\"en_US\");" puts $f " locale(\"en_US.ISO-8859-1\");" puts $f " locale(\"en_US.ISO-8859-15\");" puts $f " locale(\"en_US.UTF-8\");" puts $f " locale(\"es_ES\");" puts $f " locale(\"es_MX\");" puts $f " locale(\"fr_FR\");" puts $f " locale(\"fr_FR@euro\");" puts $f " locale(\"is_IS\");" puts $f " locale(\"is_IS.UTF-8\");" puts $f " locale(\"it_IT\");" puts $f " locale(\"ja_JP.eucjp\");" puts $f " locale(\"se_NO.UTF-8\");" puts $f " locale(\"ta_IN\");" puts $f " locale(\"zh_TW\");" puts $f " return 0;" puts $f " }" puts $f " catch(...)" puts $f " {" puts $f " return 1;" puts $f " }" puts $f "}" close $f set lines [v3_target_compile $src $exe executable ""] file delete $src if [string match "" $lines] { # No error message, compilation succeeded. set result [${tool}_load "./$exe" "" ""] set status [lindex $result 0] remote_file build delete $exe verbose "check_v3_target_namedlocale: status is <$status>" 2 if { $status == "pass" } { set et_namedlocale_saved 1 } } else { verbose "check_v3_target_namedlocale: compilation failed" 2 } } return $et_namedlocale_saved}proc check_v3_target_cxa_atexit { } { global et_cxa_atexit global et_cxa_atexit_target_name global tool if { ![info exists et_cxa_atexit_target_name] } { set et_cxa_atexit_target_name "" } # If the target has changed since we set the cached value, clear it. set current_target [current_target_name] if { $current_target != $et_cxa_atexit_target_name } { verbose "check_v3_target_cxa_atexit: `$et_cxa_atexit_target_name'" 2 set et_cxa_atexit_target_name $current_target if [info exists et_cxa_atexit] { verbose "check_v3_target_cxa_atexit: removing cached result" 2 unset et_cxa_atexit } } if [info exists et_cxa_atexit] { verbose "check_v3_target_cxa_atexit: using cached result" 2 } else { set et_cxa_atexit 0 # Set up, compile, and execute a C++ test program that depends # on correct ordering of static object destructors. This is # indicative of the presence and use of __cxa_atexit. set src cxaatexit[pid].cc set exe cxaatexit[pid].x set f [open $src "w"] puts $f "#include <stdlib.h>" puts $f "static unsigned int count;" puts $f "struct X" puts $f "{" puts $f " X() { count = 1; }" puts $f " ~X()" puts $f " {" puts $f " if (count != 3)" puts $f " exit(1);" puts $f " count = 4;" puts $f " }" puts $f "};" puts $f "void f()" puts $f "{" puts $f " static X x;" puts $f "}" puts $f "struct Y" puts $f "{" puts $f " Y() { f(); count = 2; }" puts $f " ~Y()" puts $f " {" puts $f " if (count != 2)" puts $f " exit(1);" puts $f " count = 3;" puts $f " }" puts $f "};" puts $f "Y y;" puts $f "int main()" puts $f "{ return 0; }" close $f set lines [v3_target_compile $src $exe executable ""] file delete $src if [string match "" $lines] { # No error message, compilation succeeded. set result [${tool}_load "./$exe" "" ""] set status [lindex $result 0] remote_file build delete $exe verbose "check_v3_target_cxa_atexit: status is <$status>" 2 if { $status == "pass" } { set et_cxa_atexit 1 } } else { verbose "check_v3_target_cxa_atexit: compilation failed" 2 } } return $et_cxa_atexit}proc check_v3_target_debug_mode { } { global cxxflags global et_debug_mode global tool if { ![info exists et_debug_mode_target_name] } { set et_debug_mode_target_name "" } # If the target has changed since we set the cached value, clear it. set current_target [current_target_name] if { $current_target != $et_debug_mode_target_name } { verbose "check_v3_target_debug_mode: `$et_debug_mode_target_name'" 2 set et_debug_mode_target_name $current_target if [info exists et_debug_mode] { verbose "check_v3_target_debug_mode: removing cached result" 2 unset et_debug_mode } } if [info exists et_debug_mode] { verbose "check_v3_target_debug_mode: using cached result" 2 } else { set et_debug_mode 0 # Set up, compile, and execute a C++ test program that depends # on debug mode working. set src debug_mode[pid].cc set exe debug_mode[pid].exe set f [open $src "w"] puts $f "#include <string>" puts $f "using namespace std;" puts $f "int main()" puts $f "{ return 0; }" close $f set cxxflags_saved $cxxflags set cxxflags "$cxxflags -Werror -O0 -D_GLIBCXX_DEBUG" set lines [v3_target_compile $src $exe executable ""] set cxxflags $cxxflags_saved file delete $src if [string match "" $lines] { # No error message, compilation succeeded. set et_debug_mode 1 } } verbose "check_v3_target_debug_mode: $et_debug_mode" 2 return $et_debug_mode}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -