# Copyright (C) 2012-2021 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/>.

#
# gdc support library routines
#

load_lib prune.exp
load_lib gcc-defs.exp
load_lib timeout.exp
load_lib target-libpath.exp

#
# GDC_UNDER_TEST is the compiler under test.
#

set gdc_compile_options ""


#
# gdc_version -- extract and print the version number of the compiler
#

proc gdc_version { } {
    global GDC_UNDER_TEST

    gdc_init

    # ignore any arguments after the command
    set compiler [lindex $GDC_UNDER_TEST 0]

    # verify that the compiler exists
    if { [is_remote host] || [which $compiler] != 0 } then {
	set tmp [remote_exec host "$compiler -v"]
	set status [lindex $tmp 0]
	set output [lindex $tmp 1]
	regexp " version \[^\n\r\]*" $output version
	if { $status == 0 && [info exists version] } then {
	    if [is_remote host] {
		clone_output "$compiler $version\n"
	    } else {
		clone_output "[which $compiler] $version\n"
	    }
	} else {
	    clone_output "Couldn't determine version of [which $compiler]\n"
	}
    } else {
	# compiler does not exist (this should have already been detected)
	warning "$compiler does not exist"
    }
}

#
# gdc_include_flags -- include flags for the gcc tree structure
#

proc gdc_include_flags { paths } {
    global srcdir
    global GDC_INCLUDE_CXX_FLAGS
    global TESTING_IN_BUILD_TREE

    set flags ""

    if { [is_remote host] || ![info exists TESTING_IN_BUILD_TREE] } {
	return "${flags}"
    }

    if [info exists GDC_INCLUDE_CXX_FLAGS] {
	set include_cxx_flags $GDC_INCLUDE_CXX_FLAGS
    } else {
	set include_cxx_flags 0
    }

    set gccpath ${paths}

    if { $gccpath != "" } {
	if [file exists "${gccpath}/libphobos/libdruntime"] {
	    append flags "-I${gccpath}/libphobos/libdruntime "
	}
    }
    append flags "-I${srcdir}/../../libphobos/libdruntime "
    append flags "-I${srcdir}/../../libphobos/src "

    # For the tests that mix C++ and D, need to know where headers are located.
    if $include_cxx_flags {
	set odir [lookfor_file ${gccpath} libstdc++-v3]
	if { ${odir} != "" && [file exists ${odir}/scripts/testsuite_flags] } {
	    set cxxflags [exec sh ${odir}/scripts/testsuite_flags --build-includes]
	    set idx [lsearch $cxxflags "-nostdinc++"]
	    append flags [lreplace $cxxflags $idx $idx]
	}
    }

    return "$flags"
}

#
# gdc_link_flags -- linker flags for the gcc tree structure
#

proc gdc_link_flags { paths } {
    global srcdir
    global ld_library_path
    global GDC_UNDER_TEST
    global GDC_INCLUDE_CXX_FLAGS
    global shlib_ext
    global SHARED_OPTION

    set gccpath ${paths}
    set libio_dir ""
    set flags ""
    set ld_library_path "."
    set shlib_ext [get_shlib_extension]
    set SHARED_OPTION ""
    verbose "shared lib extension: $shlib_ext"

    if [info exists GDC_INCLUDE_CXX_FLAGS] {
	set include_cxx_flags $GDC_INCLUDE_CXX_FLAGS
    } else {
	set include_cxx_flags 0
    }

    if { $gccpath != "" } {
	# Path to libgphobos.spec.
	append flags "-B${gccpath}/libphobos/src "
	# Path to drtbegin.o/drtend.o.
	if { [file exists "${gccpath}/libphobos/libdruntime/gcc/drtbegin.o"] } {
	    append flags "-B${gccpath}/libphobos/libdruntime/gcc "
	}

	if { [file exists "${gccpath}/libphobos/src/.libs/libgphobos.a"] \
	     || [file exists "${gccpath}/libphobos/src/.libs/libgphobos.${shlib_ext}"] } {
	    append flags "-L${gccpath}/libphobos/src/.libs "
	    append ld_library_path ":${gccpath}/libphobos/src/.libs"
	}
	# Static linking is default. If only the shared lib is available adjust
	# flags to always use it. If both are available, set SHARED_OPTION which
	# will be added to PERMUTE_ARGS
	if { [file exists "${gccpath}/libphobos/src/.libs/libgphobos.${shlib_ext}"] } {
	    if { [file exists "${gccpath}/libphobos/src/.libs/libgphobos.a"] } {
		set SHARED_OPTION "-shared-libphobos"
	    } else {
		append flags "-shared-libphobos "
	    }
	}
	if [file exists "${gccpath}/libiberty/libiberty.a"] {
	    append flags "-L${gccpath}/libiberty "
	}
	# For the tests that mix C++ and D, need to know where library is located.
	if $include_cxx_flags {
	    if { [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] \
		 || [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] } {
		append flags "-L${gccpath}/libstdc++-v3/src/.libs "
		append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
	    }
	}
	append ld_library_path [gcc-set-multilib-library-path $GDC_UNDER_TEST]
    } else {
	global tool_root_dir

	set libphobos [lookfor_file ${tool_root_dir} libgphobos]
	if { $libphobos != "" } {
	    append flags "-B${libphobos} -L${libphobos} "
	    append ld_library_path ":${libphobos}"
	}
	set libiberty [lookfor_file ${tool_root_dir} libiberty]
	if { $libiberty != "" } {
	    append flags "-L${libiberty} "
	}
	if $include_cxx_flags {
	    set libstdcpp [lookfor_file ${tool_root_dir} libstdc++]
	    if { $libstdcpp != "" } {
		append flags "-L${libstdcpp} "
		append ld_library_path ":${libstdcpp}"
	    }
	}
    }

    set_ld_library_path_env_vars

    return "$flags"
}

#
# gdc_init -- called at the start of each subdir of tests
#

proc gdc_init { args } {
    global gdc_initialized
    global base_dir
    global tmpdir
    global libdir
    global gluefile wrap_flags
    global TOOL_EXECUTABLE
    global GDC_UNDER_TEST
    global TESTING_IN_BUILD_TREE
    global gcc_warning_prefix
    global gcc_error_prefix

    # 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

    if ![info exists GDC_UNDER_TEST] then {
	if [info exists TOOL_EXECUTABLE] {
	    set GDC_UNDER_TEST $TOOL_EXECUTABLE
	} else {
	    if { [is_remote host] || ! [info exists TESTING_IN_BUILD_TREE] } {
		set GDC_UNDER_TEST [transform gdc]
	    } else {
		set GDC_UNDER_TEST [findfile $base_dir/../../gdc "$base_dir/../../gdc -B$base_dir/../../" [findfile $base_dir/gdc "$base_dir/gdc -B$base_dir/" [transform gdc]]]
	    }
	}
    }

    if ![is_remote host] {
	if { [which $GDC_UNDER_TEST] == 0 } then {
	    perror "GDC_UNDER_TEST ($GDC_UNDER_TEST) does not exist"
	    exit 1
	}
    }
    if ![info exists tmpdir] {
	set tmpdir "/tmp"
    }

    if [info exists gluefile] {
	unset gluefile
    }

    gdc_maybe_build_wrapper "${tmpdir}/d-testglue.o"

    set gcc_warning_prefix "warning:"
    set gcc_error_prefix "(fatal )?error:"

    verbose "gdc is initialized" 3
}

#
# gdc_target_compile -- compile a source file
#

proc gdc_target_compile { source dest type options } {
    global tmpdir
    global gluefile wrap_flags
    global GDC_UNDER_TEST
    global TOOL_OPTIONS
    global TEST_ALWAYS_FLAGS

    if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
	lappend options "libs=${gluefile}"
	lappend options "ldflags=${wrap_flags}"
    }

    set always_dflags ""

    # TEST_ALWAYS_FLAGS are flags that should be passed to every
    # compilation.  They are passed first to allow individual
    # tests to override them.
    if [info exists TEST_ALWAYS_FLAGS] {
	lappend always_dflags "additional_flags=$TEST_ALWAYS_FLAGS"
    }

    if ![is_remote host] {
	if [info exists TOOL_OPTIONS] {
	    lappend always_dflags "additional_flags=[gdc_include_flags [get_multilibs ${TOOL_OPTIONS}] ]"
	    lappend always_dflags "ldflags=[gdc_link_flags [get_multilibs ${TOOL_OPTIONS}] ]"
	} else {
	    lappend always_dflags "additional_flags=[gdc_include_flags [get_multilibs] ]"
	    lappend always_dflags "ldflags=[gdc_link_flags [get_multilibs] ]"
	}
    }

    if [info exists TOOL_OPTIONS] {
	lappend always_dflags "additional_flags=$TOOL_OPTIONS"
    }

    verbose "always_dflags set to: $always_dflags"

    lappend options "timeout=[timeout_value]"
    lappend options "compiler=$GDC_UNDER_TEST"

    set options [concat "$always_dflags" $options]
    set options [dg-additional-files-options $options $source]
    return [target_compile $source $dest $type $options]
}
