# This testcase is part of GDB, the GNU debugger.

# Copyright 2022-2025 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.  If not, see <http://www.gnu.org/licenses/>.

# Compile a source file using different ways of passing the path to the
# compiler.  Then, verify that we can print a macro defined in that file.

standard_testfile

# If the host is remote, source files are uploaded to the host and compiled
# there, but without the directory structure we expect, making the test
# pointless.  Skip the test in that case.
require {!is_remote host}

# Copy the source file at these locations in the output directory ($out):
#
#   $out/cwd/macro-source-path.c
#   $out/other/macro-source-path.c
#
# Set the current working directory to $out/cwd, so that we can test compiling
# using relative paths.

set out_dir [standard_output_file ""]
file mkdir $out_dir/cwd
file mkdir $out_dir/other
file copy -force $srcdir/$subdir/$srcfile $out_dir/cwd
file copy -force $srcdir/$subdir/$srcfile $out_dir/other

# Run one test.
#
# SRC is the path to the source file, to be passed to the compiler as-is.
# NAME is the name of the test.

proc test { src name } {
    with_test_prefix $name {
	set binfile $::out_dir/$name

	if { [gdb_compile $src $binfile executable {debug macros additional_flags=-DONE=1}] != "" } {
	    fail "could not compile"
	    return
	}

	clean_restart $binfile

	if { ![runto_main] } {
	    return
	}

	# Print the macro that is defined on the command-line.
	gdb_test "print ONE" " = 1"

	# Print the macro that is defined in the main file.
	gdb_test "print TWO" " = 2"
    }
}

# When adding a test here, please consider adding an equivalent case to the test
# of the same name in gdb.dwarf2.

with_cwd "$out_dir/cwd" {
    test $testfile.c filename
    test ./$testfile.c dot-filename
    test ../cwd/$testfile.c dot-dot-filename
    test [file normalize $testfile.c] absolute-cwd
    test ../other/$testfile.c dot-dot-other
    test [file normalize ../other/$testfile.c] absolute-other
}
