diff options
Diffstat (limited to 'gcc-4.8.1/libstdc++-v3/testsuite/lib/libstdc++.exp')
-rw-r--r-- | gcc-4.8.1/libstdc++-v3/testsuite/lib/libstdc++.exp | 1799 |
1 files changed, 0 insertions, 1799 deletions
diff --git a/gcc-4.8.1/libstdc++-v3/testsuite/lib/libstdc++.exp b/gcc-4.8.1/libstdc++-v3/testsuite/lib/libstdc++.exp deleted file mode 100644 index 5d0a2ff70..000000000 --- a/gcc-4.8.1/libstdc++-v3/testsuite/lib/libstdc++.exp +++ /dev/null @@ -1,1799 +0,0 @@ -# libstdc++ "tool init file" for DejaGNU - -# Copyright (C) 2001-2013 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 this program; see the file COPYING3. If not see -# <http://www.gnu.org/licenses/>. - - -# Define callbacks and load other libraries. This file is loaded relatively -# early, and before any other file we write ourselves. "load_lib" will -# find anything in the DejaGNU installation tree, or in our lib directory. -# "load_gcc_lib" will search the core compiler's .exp collection instead. -# -# The naming rule is that dg.exp looks for "tool-" and runtest.exp looks -# for "tool_" when finding callbacks. Utility routines we define for -# our callbacks begin with "v3-". -# -# libstdc++_* callbacks we don't define, but could: -# ..._option_help prints additional --help output -# ..._option_proc (--foo) process our own options -# ..._init (normal.exp) called once per test file -# ..._finish bracketing function for libstdc++_init -# ...-dg-prune removing output text, see top of system dg.exp -# -# Useful hook: if ${hostname}_init exists, it will be called, almost -# the last thing before testing begins. This can be defined in, e.g., -# ~/.dejagnurc or $DEJAGNU. - -proc load_gcc_lib { filename } { - global srcdir - load_file $srcdir/../../gcc/testsuite/lib/$filename -} - -# system routines -load_lib dg.exp -load_lib libgloss.exp -# compiler routines, then ours -load_gcc_lib target-supports.exp -load_gcc_lib target-supports-dg.exp -load_lib prune.exp -load_lib dg-options.exp -load_gcc_lib scanasm.exp -load_gcc_lib target-libpath.exp -load_gcc_lib timeout.exp -load_gcc_lib timeout-dg.exp -load_gcc_lib wrapper.exp - -# Useful for debugging. Pass the name of a variable and the verbosity -# threshold (number of -v's on the command line). -proc v3track { var n } { - upvar $var val - verbose "++ $var is $val" $n -} - -# Called by v3-init below. "Static" to this file. -proc v3-copy-files {srcfiles} { - foreach f $srcfiles { - if { [catch { set symlink [file readlink $f] } x] } then { - remote_download target $f - } else { - if { [regexp "^/" "$symlink"] } then { - remote_download target $symlink - } else { - set dirname [file dirname $f] - remote_download target $dirname/$symlink - } - } - } -} - -# Called once, during runtest.exp setup. -proc libstdc++_init { testfile } { - global env - global v3-sharedlib v3-libgomp - global srcdir blddir objdir tool_root_dir - global cc cxx cxxflags cxxpchflags cxxldflags - global includes - global gluefile wrap_flags - global ld_library_path - global target_triplet - global flags_file - global tool_timeout - global DEFAULT_CXXFLAGS - global STATIC_LIBCXXFLAGS - - # We set LC_ALL and LANG to C so that we get the same error - # messages as expected. - setenv LC_ALL C - setenv LANG C - - # Many hosts now default to a non-ASCII C locale, however, so - # they can set a charset encoding here if they need. - if { [ishost "*-*-cygwin*"] } { - setenv LC_ALL C.ASCII - setenv LANG C.ASCII - } - - set blddir [lookfor_file [get_multilibs] libstdc++-v3] - set flags_file "${blddir}/scripts/testsuite_flags" - set shlib_ext [get_shlib_extension] - v3track flags_file 2 - - # If a test doesn't have special options, use DEFAULT_CXXFLAGS. - # Use this variable if the behavior - # 1) only applies to libstdc++ testing - # 2) might need to be negated - # In particular, some tests have to be run without precompiled - # headers, or without assertions. - - if ![info exists DEFAULT_CXXFLAGS] then { - set DEFAULT_CXXFLAGS "" - # Host specific goo here. - if { [string match "powerpc-*-darwin*" $target_triplet] } { - append DEFAULT_CXXFLAGS " -multiply_defined suppress" - } - } - v3track DEFAULT_CXXFLAGS 2 - - # By default, we assume we want to run program images. - global dg-do-what-default - set dg-do-what-default run - - # Copy any required data files. - v3-copy-files [glob -nocomplain "$srcdir/data/*.tst"] - v3-copy-files [glob -nocomplain "$srcdir/data/*.txt"] - - set ld_library_path_tmp "" - - # Locate libgcc.a so we don't need to account for different values of - # SHLIB_EXT on different platforms - set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a] - if {$gccdir != ""} { - set gccdir [file dirname $gccdir] - append ld_library_path_tmp ":${gccdir}" - } - v3track gccdir 3 - - # Locate libgomp. This is only required for parallel mode. - set v3-libgomp 0 - set libgompdir [lookfor_file $blddir/../libgomp .libs/libgomp.$shlib_ext] - if {$libgompdir != ""} { - set v3-libgomp 1 - set libgompdir [file dirname $libgompdir] - append ld_library_path_tmp ":${libgompdir}" - verbose -log "libgomp support detected" - } - v3track libgompdir 3 - - # Locate libstdc++ shared library. (ie libstdc++.so.) - set v3-sharedlib 0 - set sharedlibdir [lookfor_file $blddir src/.libs/libstdc++.$shlib_ext] - if {$sharedlibdir != ""} { - if { [string match "*-*-linux*" $target_triplet] && [isnative] } { - set v3-sharedlib 1 - verbose -log "shared library support detected" - } - } - v3track v3-sharedlib 3 - - set STATIC_LIBCXXFLAGS "" - set staticlibdir [lookfor_file $blddir src/.libs/libstdc++.a] - if {$staticlibdir != ""} { - set staticlibdir [file dirname $staticlibdir] - # Some targets use libstdc++.a%s in their specs, so they need a - # -B option for uninstalled testing. - set STATIC_LIBCXXFLAGS " -B${staticlibdir} " - } - - # Compute what needs to be added to the existing LD_LIBRARY_PATH. - if {$gccdir != ""} { - set compiler ${gccdir}/xg++ - set ld_library_path ${ld_library_path_tmp} - append ld_library_path ":${blddir}/src/.libs" - - if { [is_remote host] == 0 && [which $compiler] != 0 } { - foreach i "[exec $compiler --print-multi-lib]" { - set mldir "" - regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir - set mldir [string trimright $mldir "\;@"] - if { "$mldir" == "." } { - continue - } - if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } { - append ld_library_path ":${gccdir}/${mldir}" - } - } - } - - set_ld_library_path_env_vars - if [info exists env(LD_LIBRARY_PATH)] { - verbose -log "LD_LIBRARY_PATH = $env(LD_LIBRARY_PATH)" - } - } else { - set compiler [transform "g++"] - } - - # Set the default timeout for v3 tests. - set tool_timeout 600 - - # Default settings. - set cxx [transform "g++"] - set cxxflags "-D_GLIBCXX_ASSERT -fmessage-length=0" - set cxxpchflags "" - set cxxldflags "" - set cc [transform "gcc"] - # Locate testsuite_hooks.h and other testsuite headers. - set includes "-I${srcdir}/util" - # Adapt the defaults for special circumstances. - if [is_remote host] { - # A remote host does not, in general, have access to the - # $srcdir so we copy the testsuite headers into the current - # directory, and then add that to the search path. - foreach src [glob "${srcdir}/util/*.h" \ - "${srcdir}/util/*.cc" \ - "${srcdir}/util/*.tcc" \ - "${srcdir}/util/*.hpp" \ - "${srcdir}/util/*/*.h" \ - "${srcdir}/util/*/*.cc" \ - "${srcdir}/util/*/*.tcc" \ - "${srcdir}/util/*/*.hpp" \ - "${srcdir}/util/*/*/*.h" \ - "${srcdir}/util/*/*/*.cc" \ - "${srcdir}/util/*/*/*.tcc" \ - "${srcdir}/util/*/*/*.hpp" \ - "${srcdir}/util/*/*/*/*.h" \ - "${srcdir}/util/*/*/*/*.cc" \ - "${srcdir}/util/*/*/*/*.tcc" \ - "${srcdir}/util/*/*/*/*.hpp" \ - "${srcdir}/util/*/*/*/*/*.h" \ - "${srcdir}/util/*/*/*/*/*.cc" \ - "${srcdir}/util/*/*/*/*/*.tcc" \ - "${srcdir}/util/*/*/*/*/*.hpp" ] { - # Remove everything up to "util/..." - set dst [string range $src [string length "${srcdir}/"] end] - # Create the directory containing the file. - set dir [file dirname $dst] - remote_exec host "mkdir" [list "-p" "$dir"] - # Download the file. - set result [remote_download host $src $dst] - if { $result == "" } { - verbose -log "Unable to download ${srcdir}/${src} to host." - return "untested" - } - } - set includes "-Iutil" - } elseif { [file exists $flags_file] } { - # If we find a testsuite_flags file, we're testing in the build dir. - set cxx [exec sh $flags_file --build-cxx] - set cxxflags [exec sh $flags_file --cxxflags] - set cxxpchflags [exec sh $flags_file --cxxpchflags] - set cxxldflags [exec sh $flags_file --cxxldflags] - set cc [exec sh $flags_file --build-cc] - set includes [exec sh $flags_file --build-includes] - } - append cxxflags " " - append cxxflags [getenv CXXFLAGS] - v3track cxxflags 2 - - # Always use MO files built by this test harness. - set cxxflags "$cxxflags -DLOCALEDIR=\".\"" - set ccflags "$cxxflags -DLOCALEDIR=\".\"" - - # If a PCH file is available, use it. We must delay performing - # this check until $cxx and such have been initialized because we - # perform a test compilation. (Ideally, gcc --print-file-name would - # list PCH files, but it does not.) - if { $cxxpchflags != "" } { - set src "config[pid].cc" - set f [open $src "w"] - puts $f "int main () {}" - close $f - - # Fixme: "additional_flags=$cxxpchflags" fails, but would be - # useful as then the requested variant of the pre-build PCH - # files could be tested to see if it works. - set lines [v3_target_compile $src "config[pid].o" object \ - "additional_flags=-include additional_flags=bits/stdc++.h"] - if { $lines != "" } { - verbose -log "Requested PCH file: $cxxpchflags" - verbose -log "is not working, and will not be used." - set cxxpchflags "" - } - file delete $src - } - v3track cxxpchflags 2 - - global PCH_CXXFLAGS - if ![info exists PCH_CXXFLAGS] then { - set PCH_CXXFLAGS $cxxpchflags - v3track PCH_CXXFLAGS 2 - } - - libstdc++_maybe_build_wrapper "${objdir}/testglue.o" "-fexceptions" -} - -# Callback for cleanup routines. -proc libstdc++_exit { } { - global gluefile; - - if [info exists gluefile] { - file_on_build delete $gluefile; - unset gluefile; - } -} - -# Callback from system dg-test. -proc libstdc++-dg-test { prog do_what extra_tool_flags } { - # Set up the compiler flags, based on what we're going to do. - switch $do_what { - "preprocess" { - set compile_type "preprocess" - set output_file "[file rootname [file tail $prog]].i" - } - "compile" { - set compile_type "assembly" - set output_file "[file rootname [file tail $prog]].s" - } - "assemble" { - set compile_type "object" - set output_file "[file rootname [file tail $prog]].o" - } - "link" { - set compile_type "executable" - set output_file "./[file rootname [file tail $prog]].exe" - } - "run" { - set compile_type "executable" - # FIXME: "./" is to cope with "." not being in $PATH. - # Should this be handled elsewhere? - # YES. - set output_file "./[file rootname [file tail $prog]].exe" - # This is the only place where we care if an executable was - # created or not. If it was, dg.exp will try to run it. - catch { remote_file build delete $output_file } - } - default { - perror "$do_what: not a valid dg-do keyword" - return "" - } - } - - # Short-circut a bunch of complicated goo here for the special - # case of compiling a test file as a "C" file, not as C++. Why? So - # -nostdc++ doesn't trip us up. So all the extra object files - # don't trip us up. So automatically linking in libstdc++ doesn't - # happen. So CXXFLAGS don't error. - set select_compile "v3_target_compile" - set options "" - if { $extra_tool_flags != "" } { - verbose -log "extra_tool_flags are:" - verbose -log $extra_tool_flags - if { [string first "-x c" $extra_tool_flags ] != -1 } { - verbose -log "compiling and executing as C, not C++" - set edit_tool_flags $extra_tool_flags - regsub -all ".x c" $edit_tool_flags "" edit_tool_flags - lappend options "additional_flags=$edit_tool_flags" - set select_compile "v3_target_compile_as_c" - } else { - lappend options "additional_flags=$extra_tool_flags" - } - } - - # There is a libstdc++_compile made for us by default (via the tool- - # and-target file), but the defaults are lacking in goodness. - set comp_output [$select_compile "$prog" "$output_file" "$compile_type" $options]; - - return [list $comp_output $output_file] -} - -# Override the DejaGnu dg-test in order to clear flags after a test, as -# is done for compiler tests in gcc-dg.exp. - -if { [info procs saved-dg-test] == [list] } { - rename dg-test saved-dg-test - - proc dg-test { args } { - global additional_prunes - global errorInfo - global testname_with_flags - - if { [ catch { eval saved-dg-test $args } errmsg ] } { - set saved_info $errorInfo - set additional_prunes "" - if [info exists testname_with_flags] { - unset testname_with_flags - } - unset_timeout_vars - error $errmsg $saved_info - } - set additional_prunes "" - unset_timeout_vars - if [info exists testname_with_flags] { - unset testname_with_flags - } - } -} - -# True if the library supports wchar_t. -set v3-wchar_t 0 - -# True if the library supports threads. -set v3-threads 0 - -# True if the library supports symbol versioning. -set v3-symver 0 - -# Called from libstdc++-dg-test above. Calls back into system's -# target_compile to actually do the work. -proc v3_target_compile { source dest type options } { - global gluefile - global wrap_flags - global cxx - global cxxflags - global cxxldflags - global includes - global STATIC_LIBCXXFLAGS - - 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 $STATIC_LIBCXXFLAGS] - 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. - lappend options "additional_flags=./libtestc++.a $cxxldflags" - } else { - if { $type == "sharedlib" } { - # Don't link in anything. - set type "executable" - } - } - - lappend options "compiler=$cxx_final" - lappend options "timeout=[timeout_value]" - - return [target_compile $source $dest $type $options] -} - - -# Called from libstdc++-dg-test above, but only for "C" compilation. -# Calls back into system's target_compile to actually do the work. -proc v3_target_compile_as_c { source dest type options } { - global gluefile - global wrap_flags - global includes - global flags_file - global blddir - global cc - global cxxflags - global STATIC_LIBCXXFLAGS - - if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } { - lappend options "libs=${gluefile}" - lappend options "ldflags=${wrap_flags}" - } - - set tname [target_info name] - set cc_final $cc - set cxxlibglossflags [libgloss_link_flags] - set cc_final [concat $cc_final $cxxlibglossflags] - set cc_final [concat $cc_final $STATIC_LIBCXXFLAGS] - set cc_final [concat $cc_final $cxxflags] - set cc_final [concat $cc_final $includes] - regsub -all {\s[-]nostdinc[+][+]} $cc_final "" cc_final - - # This is needed for "C" tests, as this type of test may need the - # C++ includes. And if we're not testing in the build directory, - # the includes variable is not likely to include the necessary - # info. - if { ![file exists $flags_file] } { - # ??? We need a --print-include-dirs option to GCC, so that - # we can avoid these hacks. The heuristics here will not - # work with non-standard --with-includedir= options. - set version [remote_exec host ${cc} -dumpversion] - # Remove the trailing newline from the output. - set version [string trimright [lindex $version 1]] - set machine [remote_exec host ${cc} -dumpmachine] - set machine [string trimright [lindex $machine 1]] - set comp_base_dir [remote_exec host ${cc} --print-prog-name=cc1] - set comp_base_dir [lindex $comp_base_dir 1] - set comp_base_dir [file dirname [file dirname [file dirname [file dirname [file dirname $comp_base_dir]]]]] - # For a cross compiler, the header files will be located in a - # machine-specific subdirectory. - set crossbase "${comp_base_dir}/${machine}/include/c++/${version}" - set crosstarget "${crossbase}/${machine}" - set cc_final [concat $cc_final "-I$crossbase -I$crosstarget"] - # For a native compiler, the header files will be located at - # the top level. - set includesbase "${comp_base_dir}/include/c++/${version}" - set includestarget "${includesbase}/${machine}" - set cc_final [concat $cc_final "-I$includesbase -I$includestarget"] - - set libdir "-L${comp_base_dir}/lib" - } else { - set libdir "-L${blddir}/libsupc++/.libs" - set libdir [concat $libdir "-L${blddir}/src/.libs"] - } - - set cc_final [concat $cc_final "$libdir"] - - lappend options "compiler=$cc_final" - lappend options "timeout=[timeout_value]" - - 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, and v3-symver appropriately. -proc v3-build_support { } { - global env - global srcdir - global v3-wchar_t - global v3-threads - 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 libtest_objs "" - - set config_src "config.cc" - set config_out "config.ii" - set f [open $config_src "w"] - puts $f "#include <bits/c++config.h>" - puts $f "#include <bits/gthr.h>" - close $f - v3_target_compile $config_src $config_out preprocess "additional_flags=-dN" - set file [open $config_out r] - set preprocessed [read $file] - close $file - 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 - } - - # Try to build the MO files that are used by some of the locale - # tests. If we can't build them, that's OK; it just means that - # those tests will fail. - foreach lang [list "fr" "de"] { - catch { - file mkdir "$lang/LC_MESSAGES" - remote_exec "build" "msgfmt" "-o $lang/LC_MESSAGES/libstdc++.mo $srcdir/../po/$lang.po" - if [is_remote host] { - remote_exec "host" "mkdir" "-p $lang/LC_MESSAGES" - remote_download "host" "$lang/LC_MESSAGES/libstdc++.mo" "$lang/LC_MESSAGES/libstdc++.mo" - } - } - } - - # Build the support objects. - set source_files [list testsuite_abi.cc testsuite_allocator.cc \ - testsuite_character.cc testsuite_hooks.cc \ - io/verified_cmd_line_input.cc \ - io/prog_bar.cc performance/time/elapsed_timer.cc ] - foreach f $source_files { - set obj [file rootname $f].o - set object_file [file tail $obj] - # Compile with "-w" so that warnings issued by the compiler - # do not prevent compilation. - if { [v3_target_compile $srcdir/util/$f $object_file "object" \ - [list "incdir=$srcdir" "additional_flags=-w"]] - != "" } { - error "could not compile $f" - } - append libtest_objs "$object_file " - } - - # Collect into libtestc++.a - if [info exists env(AR)] { - set ar $env(AR) - } else { - set ar [transform "ar"] - } - set arargs "-rc ./libtestc++.a ${libtest_objs}" - verbose -log "$ar $arargs" - set result [lindex [remote_exec host "$ar" "$arargs"] 0] - verbose "link result is $result" - if { $result == 0 } { - if [info exists env(RANLIB)] { - set ranlib $env(RANLIB) - } else { - set ranlib [transform "ranlib"] - } - set ranlibargs "./libtestc++.a" - verbose -log "$ranlib $ranlibargs" - set result [lindex [remote_exec host "$ranlib" "$ranlibargs"] 0] - if { $result != 0 } { - error "could not link libtestc++.a" - } - } - - # Build any shared objects needed for regression testing. - 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/util/$f $object_file "sharedlib" \ - [list "incdir=$srcdir" "additional_flags=-w -shared -fPIC -DPIC"]] - != "" } { - error "could not compile $f" - } - } - } -} - -proc check_v3_target_fileio { } { - global et_fileio_saved - global et_fileio_target_name - global tool - global srcdir - - if { ![info exists et_fileio_target_name] } { - set et_fileio_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_fileio_target_name } { - verbose "check_v3_target_fileio: `$et_fileio_target_name'" 2 - set et_fileio_target_name $current_target - if [info exists et_fileio_saved] { - verbose "check_v3_target_fileio: removing cached result" 2 - unset et_fileio_saved - } - } - - if [info exists et_fileio_saved] { - verbose "check_v3_target_fileio: using cached result" 2 - } else { - set et_fileio_saved 0 - - # Set up, compile, and execute a C++ test program that tries to use - # the file functions - set src fileio[pid].cc - set exe fileio[pid].x - set testfile "cin_unget-1.txt" - v3-copy-files "$srcdir/data/$testfile" - - set f [open $src "w"] - puts $f "#include <sys/types.h>" - puts $f "#include <sys/stat.h>" - puts $f "#include <fcntl.h>" - puts $f "#include <unistd.h>" - puts $f "#include <errno.h>" - puts $f "#include <string.h>" - puts $f "using namespace std;" - puts $f "int main ()" - puts $f "{" - puts $f " int fd = open (\"$testfile\", O_RDONLY);" - puts $f " int ret = 0;" - puts $f " char buf\[10\];" - puts $f " if (fd == -1)" - puts $f " ret = 1;" - puts $f " else" - puts $f " {" - puts $f " if (lseek (fd, -1, SEEK_CUR) != -1 || errno != EINVAL)" - puts $f " ret = 1;" - puts $f " errno = 0;" - puts $f " if (lseek (fd, 0, SEEK_CUR) != 0" - puts $f " || read (fd, buf, 4) != 4" - puts $f " || memcmp (buf, \"1234\", 4) != 0" - puts $f " || lseek (fd, -2, SEEK_CUR) != 2" - puts $f " || read (fd, buf, 2) != 2" - puts $f " || memcmp (buf, \"34\", 2) != 0)" - puts $f " ret = 1;" - puts $f " close (fd);" - puts $f " }" - puts $f " return ret;" - 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_fileio: status is <$status>" 2 - - if { $status == "pass" } { - set et_fileio_saved 1 - } - } else { - verbose "check_v3_target_fileio: compilation failed" 2 - } - } - return $et_fileio_saved -} - -# Eventually we want C90/C99 determining and switching from this. -proc check_v3_target_c_std { } { - global et_c_std_saved - global et_c_std_target_name - global tool - - if { ![info exists et_c_std_target_name] } { - set et_c_std_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_c_std_target_name } { - verbose "check_v3_target_c_std: `$et_c_std_target_name'" 2 - set et_c_std_target_name $current_target - if [info exists et_c_std_saved] { - verbose "check_v3_target_c_std: removing cached result" 2 - unset et_c_std_saved - } - } - - if [info exists et_c_std_saved] { - verbose "check_v3_target_c_std: using cached result" 2 - } else { - set et_c_std_saved 0 - - # Set up, compile, and execute a C++ test program that tries to use - # C99 functionality. - # For math bits, could use check_effective_target_c99_math. - set src fileio[pid].cc - set exe fileio[pid].x - - set f [open $src "w"] - puts $f "#include <tr1/cmath>" - puts $f "#include <cstdlib>" - puts $f "int main ()" - puts $f "{" - puts $f " float f = 45.55;" - puts $f " int i = std::tr1::isnan(f);" - puts $f " " - puts $f " using std::wctomb;" - puts $f " return i;" - 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_c_std: status is <$status>" 2 - - if { $status == "pass" } { - set et_c_std_saved 1 - } - } else { - verbose "check_v3_target_c_std: compilation failed" 2 - } - } - return $et_c_std_saved -} - -proc check_v3_target_sharedlib { } { - global v3-sharedlib - return ${v3-sharedlib} -} - -proc check_v3_target_time { } { - global et_time_saved - global et_time_target_name - global tool - - if { ![info exists et_time_target_name] } { - set et_time_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_time_target_name } { - verbose "check_v3_target_time: `$et_time_target_name'" 2 - set et_time_target_name $current_target - if [info exists et_time_saved] { - verbose "check_v3_target_time: removing cached result" 2 - unset et_time_saved - } - } - - if [info exists et_time_saved] { - verbose "check_v3_target_time: using cached result" 2 - } else { - set et_time_saved 0 - - # Set up and compile a C++ test program that tries to use - # the time function - set src time[pid].cc - - set f [open $src "w"] - puts $f "#include <time.h>" - puts $f "using namespace std;" - puts $f "int main ()" - puts $f "{" - puts $f " time (0);" - puts $f "}" - close $f - - set lines [v3_target_compile $src /dev/null executable ""] - file delete $src - - if [string match "" $lines] { - # No error message, compilation succeeded. - verbose "check_v3_target_time: compilation succeeded" 2 - set et_time_saved 1 - } else { - verbose "check_v3_target_time: compilation failed" 2 - } - } - return $et_time_saved -} - -proc check_v3_target_namedlocale { args } { - global et_namedlocale - global tool - - set et_namedlocale 0 - - # Set up, compile, and execute a C++ test program that tries to use - # the required named locale. - set exe nlocale[pid].x - - if ![file exists ./$exe] { - set src nlocale[pid].cc - - set f [open $src "w"] - puts $f "#include <locale>" - puts $f "#include <cstdio>" - puts $f "using namespace std;" - puts $f "int main (int argc, char** argv)" - puts $f "{" - puts $f " try" - puts $f " {" - puts $f " locale(*(argv + 1));" - puts $f " return 0;" - puts $f " }" - puts $f " catch(...)" - puts $f " {" - puts $f " printf(\"locale '%s' not supported\\n\", *(argv + 1));" - 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] { - verbose "check_v3_target_namedlocale: compilation failed" 2 - return $et_namedlocale - } - # else No error message, compilation succeeded. - } - - set result [${tool}_load "./$exe" "$args" ""] - set status [lindex $result 0] - - verbose "check_v3_target_namedlocale <$args>: status is <$status>" 2 - - if { $status == "pass" } { - set et_namedlocale 1 - } - return $et_namedlocale -} - -proc check_v3_target_debug_mode { } { - 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 and preprocess a C++ test program that depends - # on debug mode activated. - set src debug_mode[pid].cc - - set f [open $src "w"] - puts $f "#ifndef _GLIBCXX_DEBUG" - puts $f "# error No debug mode" - puts $f "#endif" - close $f - - set lines [v3_target_compile $src /dev/null preprocess ""] - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_debug_mode 1 - } - } - verbose "check_v3_target_debug_mode: $et_debug_mode" 2 - return $et_debug_mode -} - -proc check_v3_target_profile_mode { } { - global et_profile_mode - global tool - - if { ![info exists et_profile_mode_target_name] } { - set et_profile_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_profile_mode_target_name } { - verbose "check_v3_target_profile_mode: `$et_profile_mode_target_name'" 2 - set et_profile_mode_target_name $current_target - if [info exists et_profile_mode] { - verbose "check_v3_target_profile_mode: removing cached result" 2 - unset et_profile_mode - } - } - - if [info exists et_profile_mode] { - verbose "check_v3_target_profile_mode: using cached result" 2 - } else { - set et_profile_mode 0 - - # Set up and preprocess a C++ test program that depends - # on profile mode activated. - set src profile_mode[pid].cc - - set f [open $src "w"] - puts $f "#ifndef _GLIBCXX_PROFILE" - puts $f "# error No profile mode" - puts $f "#endif" - close $f - - set lines [v3_target_compile $src /dev/null preprocess ""] - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_profile_mode 1 - } - } - verbose "check_v3_target_profile_mode: $et_profile_mode" 2 - return $et_profile_mode -} - -proc check_v3_target_normal_mode { } { - global et_normal_mode - global tool - - if { ![info exists et_normal_mode_target_name] } { - set et_normal_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_normal_mode_target_name } { - verbose "check_v3_target_normal_mode: `$et_normal_mode_target_name'" 2 - set et_normal_mode_target_name $current_target - if [info exists et_normal_mode] { - verbose "check_v3_target_normal_mode: removing cached result" 2 - unset et_normal_mode - } - } - - if [info exists et_normal_mode] { - verbose "check_v3_target_normal_mode: using cached result" 2 - } else { - set et_normal_mode 0 - - # Set up and compile a C++ test program that depends - # on normal mode activated. - set src normal_mode[pid].cc - - set f [open $src "w"] - puts $f "#if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PROFILE) || defined(_GLIBCXX_PARALLEL)" - puts $f "# error No normal mode" - puts $f "#endif" - close $f - - set lines [v3_target_compile $src /dev/null preprocess ""] - file delete $src - - if [string match "" $lines] { - # No error message, compilation succeeded. - set et_normal_mode 1 - } - } - verbose "check_v3_target_normal_mode: $et_normal_mode" 2 - return $et_normal_mode -} - -proc check_v3_target_parallel_mode { } { - global cxxflags - global v3-libgomp - global et_parallel_mode - - global tool - - if { ![info exists et_parallel_mode_target_name] } { - set et_parallel_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_parallel_mode_target_name } { - verbose "check_v3_target_parallel_mode: `$et_parallel_mode_target_name'" 2 - set et_parallel_mode_target_name $current_target - if [info exists et_parallel_mode] { - verbose "check_v3_target_parallel_mode: removing cached result" 2 - unset et_parallel_mode - } - } - - if [info exists et_parallel_mode] { - verbose "check_v3_target_parallel_mode: using cached result" 2 - } else { - set et_parallel_mode 0 - - # If 'make check-parallel' is running the test succeeds. - if { ${v3-libgomp} == 1 && [regexp "libgomp" $cxxflags] } { - set et_parallel_mode 1 - } - } - verbose "check_v3_target_parallel_mode: $et_parallel_mode" 2 - return $et_parallel_mode -} - -proc check_v3_target_cstdint { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_cstdint - - global tool - - if { ![info exists et_cstdint_target_name] } { - set et_cstdint_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_cstdint_target_name } { - verbose "check_v3_target_cstdint: `$et_cstdint_target_name'" 2 - set et_cstdint_target_name $current_target - if [info exists et_cstdint] { - verbose "check_v3_target_cstdint: removing cached result" 2 - unset et_cstdint - } - } - - if [info exists et_cstdint] { - verbose "check_v3_target_cstdint: using cached result" 2 - } else { - set et_cstdint 0 - - # Set up and preprocess a C++0x test program that depends - # on the C99 stdint facilities to be available. - set src cstdint[pid].cc - - set f [open $src "w"] - puts $f "#include <tr1/cstdint>" - puts $f "#ifndef _GLIBCXX_USE_C99_STDINT_TR1" - puts $f "# error No C99 stdint" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocess succeeded. - set et_cstdint 1 - } else { - verbose "check_v3_target_cstdint: compilation failed" 2 - } - } - verbose "check_v3_target_cstdint: $et_cstdint" 2 - return $et_cstdint -} - -proc check_v3_target_cmath { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_c99_math - - global tool - - if { ![info exists et_c99_math_target_name] } { - set et_c99_math_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_c99_math_target_name } { - verbose "check_v3_target_c99_math: `$et_c99_math_target_name'" 2 - set et_c99_math_target_name $current_target - if [info exists et_c99_math] { - verbose "check_v3_target_c99_math: removing cached result" 2 - unset et_c99_math - } - } - - if [info exists et_c99_math] { - verbose "check_v3_target_c99_math: using cached result" 2 - } else { - set et_c99_math 0 - - # Set up and preprocess a C++0x test program that depends - # on the C99 math facilities to be available. - set src c99_math[pid].cc - - set f [open $src "w"] - puts $f "#include <tr1/cmath>" - puts $f "#ifndef _GLIBCXX_USE_C99_MATH_TR1" - puts $f "# error No C99 math" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocess succeeded. - set et_c99_math 1 - } else { - verbose "check_v3_target_c99_math: compilation failed" 2 - } - } - verbose "check_v3_target_c99_math: $et_c99_math" 2 - return $et_c99_math -} - -proc check_v3_target_atomic_builtins { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_atomic_builtins - - global tool - - if { ![info exists et_atomic_builtins_target_name] } { - set et_atomic_builtins_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_atomic_builtins_target_name } { - verbose "check_v3_target_atomic_builtins: `$et_atomic_builtins_target_name'" 2 - set et_atomic_builtins_target_name $current_target - if [info exists et_atomic_builtins] { - verbose "check_v3_target_atomic_builtins: removing cached result" 2 - unset et_atomic_builtins - } - } - - if [info exists et_atomic_builtins] { - verbose "check_v3_target_atomic_builtins: using cached result" 2 - } else { - set et_atomic_builtins 0 - - # Set up and preprocess a C++0x test program that depends - # on the atomic builtin facilities to be available. - set src atomic_builtins[pid].cc - - set f [open $src "w"] - puts $f "#if __GCC_ATOMIC_BOOL_LOCK_FREE < 2" - puts $f "# error No atomic bool" - puts $f "#endif" - puts $f "#if __GCC_ATOMIC_INT_LOCK_FREE < 2" - puts $f "# error No atomic int" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror -std=gnu++0x" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocess succeeded. - set et_atomic_builtins 1 - } else { - verbose "check_v3_target_atomic_builtins: compilation failed" 2 - } - } - verbose "check_v3_target_atomic_builtins: $et_atomic_builtins" 2 - return $et_atomic_builtins -} - -proc check_v3_target_gthreads { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_gthreads - - global tool - - if { ![info exists et_gthreads_target_name] } { - set et_gthreads_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_gthreads_target_name } { - verbose "check_v3_target_gthreads: `$et_gthreads_target_name'" 2 - set et_gthreads_target_name $current_target - if [info exists et_gthreads] { - verbose "check_v3_target_gthreads: removing cached result" 2 - unset et_gthreads - } - } - - if [info exists et_gthreads] { - verbose "check_v3_target_gthreads: using cached result" 2 - } else { - set et_gthreads 0 - - # Set up and preprocess a C++0x test program that depends - # on the gthreads facilities to be available. - set src gthreads[pid].cc - - set f [open $src "w"] - puts $f "#include <bits/c++config.h>" - puts $f "#ifndef _GLIBCXX_HAS_GTHREADS" - puts $f "# error No gthread" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_gthreads 1 - } else { - verbose "check_v3_target_gthreads: compilation failed" 2 - } - } - verbose "check_v3_target_gthreads: $et_gthreads" 2 - return $et_gthreads -} - -proc check_v3_target_gthreads_timed { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_gthreads_timed - - global tool - - if { ![info exists et_gthreads_timed_target_name] } { - set et_gthreads_timed_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_gthreads_timed_target_name } { - verbose "check_v3_target_gthreads_timed: `$et_gthreads_timed_target_name'" 2 - set et_gthreads_timed_target_name $current_target - if [info exists et_gthreads_timed] { - verbose "check_v3_target_gthreads_timed: removing cached result" 2 - unset et_gthreads_timed - } - } - - if [info exists et_gthreads_timed] { - verbose "check_v3_target_gthreads_timed: using cached result" 2 - } else { - set et_gthreads_timed 0 - - # Set up and preprocess a C++0x test program that depends - # on the gthreads timed mutex facilities to be available. - set src gthreads_timed[pid].cc - - set f [open $src "w"] - puts $f "#include <bits/c++config.h>" - puts $f "#ifndef _GLIBCXX_HAS_GTHREADS" - puts $f "# error No gthread" - puts $f "#endif" - puts $f "#if !_GTHREAD_USE_MUTEX_TIMEDLOCK" - puts $f "# error No gthread timed mutexes" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_gthreads_timed 1 - } else { - verbose "check_v3_target_gthreads_timed: compilation failed" 2 - } - } - verbose "check_v3_target_gthreads_timed: $et_gthreads_timed" 2 - return $et_gthreads_timed -} - - -proc check_v3_target_sleep { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_sleep - - global tool - - if { ![info exists et_sleep_target_name] } { - set et_sleep_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_sleep_target_name } { - verbose "check_v3_target_sleep: `$et_sleep_target_name'" 2 - set et_sleep_target_name $current_target - if [info exists et_sleep] { - verbose "check_v3_target_sleep: removing cached result" 2 - unset et_sleep - } - } - - if [info exists et_sleep] { - verbose "check_v3_target_sleep: using cached result" 2 - } else { - set et_sleep 0 - - # Set up and preprocess a C++11 test program that depends - # on the sleep facilities to be available. - set src sleep[pid].cc - - set f [open $src "w"] - puts $f "#include <bits/c++config.h>" - puts $f "#ifndef _GLIBCXX_USE_NANOSLEEP" - puts $f "# ifndef _GLIBCXX_HAVE_SLEEP" - puts $f "# error No nanosleep or sleep" - puts $f "# endif" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_sleep 1 - } else { - verbose "check_v3_target_sleep: compilation failed" 2 - } - } - verbose "check_v3_target_sleep: $et_sleep" 2 - return $et_sleep -} - -proc check_v3_target_sched_yield { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_sched_yield - - global tool - - if { ![info exists et_sched_yield_target_name] } { - set et_sched_yield_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_sched_yield_target_name } { - verbose "check_v3_target_sched_yield: `$et_sched_yield_target_name'" 2 - set et_sched_yield_target_name $current_target - if [info exists et_sched_yield] { - verbose "check_v3_target_sched_yield: removing cached result" 2 - unset et_sched_yield - } - } - - if [info exists et_sched_yield] { - verbose "check_v3_target_sched_yield: using cached result" 2 - } else { - set et_sched_yield 0 - - # Set up and preprocess a C++0x test program that depends - # on the sched_yield facility to be available. - set src sched_yield[pid].cc - - set f [open $src "w"] - puts $f "#include <bits/c++config.h>" - puts $f "#ifndef _GLIBCXX_USE_SCHED_YIELD" - puts $f "# error No sched yield" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_sched_yield 1 - } else { - verbose "check_v3_target_sched_yield: compilation failed" 2 - } - } - verbose "check_v3_target_sched_yield: $et_sched_yield" 2 - return $et_sched_yield -} - -proc check_v3_target_string_conversions { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_string_conversions - - global tool - - if { ![info exists et_string_conversions_target_name] } { - set et_string_conversions_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_string_conversions_target_name } { - verbose "check_v3_target_string_conversions: `$et_string_conversions_target_name'" 2 - set et_string_conversions_target_name $current_target - if [info exists et_string_conversions] { - verbose "check_v3_target_string_conversions: removing cached result" 2 - unset et_string_conversions - } - } - - if [info exists et_string_conversions] { - verbose "check_v3_target_string_conversions: using cached result" 2 - } else { - set et_string_conversions 0 - - # Set up and preprocess a C++0x test program that depends - # on the string_conversions facilities to be available. - set src string_conversions[pid].cc - - set f [open $src "w"] - puts $f "#include <bits/c++config.h>" - puts $f "#if !defined(_GLIBCXX_USE_C99) || defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)" - puts $f "# error No string conversions" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_string_conversions 1 - } else { - verbose "check_v3_target_string_conversions: compilation failed" 2 - } - } - verbose "check_v3_target_string_conversions: $et_string_conversions" 2 - return $et_string_conversions -} - -proc check_v3_target_swprintf { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_swprintf - - global tool - - if { ![info exists et_swprintf_target_name] } { - set et_swprintf_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_swprintf_target_name } { - verbose "check_v3_target_swprintf: `$et_swprintf_target_name'" 2 - set et_swprintf_target_name $current_target - if [info exists et_swprintf] { - verbose "check_v3_target_swprintf: removing cached result" 2 - unset et_swprintf - } - } - - if [info exists et_swprintf] { - verbose "check_v3_target_swprintf: using cached result" 2 - } else { - set et_swprintf 0 - - # Set up and preprocess a C++0x test program that depends - # on a standard swprintf function to be available. - set src swprintf[pid].cc - - set f [open $src "w"] - puts $f "#include <bits/c++config.h>" - puts $f "#if defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)" - puts $f "# error No swprintf" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_swprintf 1 - } else { - verbose "check_v3_target_swprintf: compilation failed" 2 - } - } - verbose "check_v3_target_swprintf: $et_swprintf" 2 - return $et_swprintf -} - -proc check_v3_target_binary_io { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_binary_io - - global tool - - if { ![info exists et_binary_io_target_name] } { - set et_binary_io_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_binary_io_target_name } { - verbose "check_v3_target_binary_io: `$et_binary_io_target_name'" 2 - set et_binary_io_target_name $current_target - if [info exists et_binary_io] { - verbose "check_v3_target_binary_io: removing cached result" 2 - unset et_binary_io - } - } - - if [info exists et_binary_io] { - verbose "check_v3_target_binary_io: using cached result" 2 - } else { - set et_binary_io 0 - - # Set up and preprocess a C++0x test program that depends - # on text and binary I/O being the same. - set src binary_io[pid].cc - - set f [open $src "w"] - puts $f "#include <bits/c++config.h>" - puts $f "#if defined(_GLIBCXX_HAVE_DOS_BASED_FILESYSTEM)" - puts $f "# error No binary io" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_binary_io 1 - } else { - verbose "check_v3_target_binary_io: compilation failed" 2 - } - } - verbose "check_v3_target_binary_io: $et_binary_io" 2 - return $et_binary_io -} - -proc check_v3_target_nprocs { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_nprocs - - global tool - - if { ![info exists et_nprocs_target_name] } { - set et_nprocs_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_nprocs_target_name } { - verbose "check_v3_target_nprocs: `$et_nprocs_target_name'" 2 - set et_nprocs_target_name $current_target - if [info exists et_nprocs] { - verbose "check_v3_target_nprocs: removing cached result" 2 - unset et_nprocs - } - } - - if [info exists et_nprocs] { - verbose "check_v3_target_nprocs: using cached result" 2 - } else { - set et_nprocs 0 - - # Set up and preprocess a C++0x test program that depends - # on either get_nprocs or sysconf to be available. - set src nprocs[pid].cc - - set f [open $src "w"] - puts $f "#include <bits/c++config.h>" - puts $f "#if defined(_GLIBCXX_USE_GET_NPROCS)" - puts $f "#elif defined(_GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP)" - puts $f "#elif defined(_GLIBCXX_USE_SYSCTL_HW_NCPU)" - puts $f "#elif defined(_GLIBCXX_USE_SC_NPROCESSORS_ONLN)" - puts $f "#elif defined(_GLIBCXX_USE_SC_NPROC_ONLN)" - puts $f "#else" - puts $f "# error hardware_concurrency not implemented" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocess succeeded. - set et_nprocs 1 - } else { - verbose "check_v3_target_nprocs: compilation failed" 2 - } - } - verbose "check_v3_target_nprocs: $et_nprocs" 2 - return $et_nprocs -} - -proc check_v3_target_static_libstdcxx { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_static_libstdcxx - - global tool - - if [info exists et_static_libstdcxx] { - verbose "check_v3_target_static_libstdcxx: using cached result" 2 - } else { - set et_static_libstdcxx 0 - - # Set up and link a C++0x test program that depends - # on static linking - set src static-maybe[pid].cc - - set f [open $src "w"] - puts $f "#include <iostream>" - puts $f "int main() {" - puts $f "int i(415);" - puts $f "std::cout<< i << std::endl;" - puts $f "return 0; }" - puts $f "" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -static-libstdc++" - - set lines [v3_target_compile $src /dev/null executable ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, link succeeded. - set et_static_libstdcxx 1 - } else { - verbose "check_v3_target_static_libstdcxx: compilation failed" 2 - } - } - verbose "check_v3_target_static_libstdcxx: $et_static_libstdcxx" 2 - return $et_static_libstdcxx -} - -proc check_v3_target_little_endian { } { - global cxxflags - global DEFAULT_CXXFLAGS - global et_little_endian - - global tool - - if { ![info exists et_little_endian_target_name] } { - set et_little_endian_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_little_endian_target_name } { - verbose "check_v3_target_little_endian: `$et_little_endian_target_name'" 2 - set et_little_endian_target_name $current_target - if [info exists et_little_endian] { - verbose "check_v3_target_little_endian: removing cached result" 2 - unset et_little_endian - } - } - - if [info exists et_little_endian] { - verbose "check_v3_target_little_endian: using cached result" 2 - } else { - set et_little_endian 0 - - set src little_endian[pid].cc - - set f [open $src "w"] - puts $f "#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__" - puts $f "# error Not little endian" - puts $f "#endif" - close $f - - set cxxflags_saved $cxxflags - set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror" - - set lines [v3_target_compile $src /dev/null preprocess ""] - set cxxflags $cxxflags_saved - file delete $src - - if [string match "" $lines] { - # No error message, preprocessing succeeded. - set et_little_endian 1 - } else { - verbose "check_v3_target_little_endian: compilation failed" 2 - } - } - verbose "check_v3_target_little_endian: $et_little_endian" 2 - return $et_little_endian -} - -set additional_prunes "" |