# Copyright 2021-2022 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 . # Test GDB's early init file mechanism. standard_testfile # Compile the test executable. if {[build_executable "failed to build" $testfile $srcfile]} { return -1 } # Start gdb and ensure that the initial version string is styled in # STYLE, use MESSAGE as the name of the test. proc check_gdb_startup_version_string { style { message "" } } { if { $message == "" } { set message "check startup version string has style $style" } gdb_exit gdb_spawn set vers [style "GNU gdb.*" $style] gdb_test "" "^${vers}.*" $message } # Return a list containing two directory paths for newly created home # directories. # # The first directory is a HOME style home directory, it contains a # .gdbearlyinit file containing CONTENT. # # The second directory is an XDG_CONFIG_HOME style home directory, it # contains a sub-directory gdb/, inside which is a file gdbearlyinit # that also contains CONTENT. # # The PREFIX is used in both directory names and should be unique for # each call to this function. proc setup_home_directories { prefix content } { set home_dir [standard_output_file "${prefix}-home"] set xdg_home_dir [standard_output_file "${prefix}-xdg"] file mkdir $home_dir file mkdir "$xdg_home_dir/gdb" # Write the content into the HOME directory. set fd [open "$home_dir/.gdbearlyinit" w] puts $fd $content close $fd # Copy this from the HOME directory into the XDG_CONFIG_HOME # directory. file copy -force "$home_dir/.gdbearlyinit" "$xdg_home_dir/gdb/gdbearlyinit" return [list $home_dir $xdg_home_dir] } # Restart GDB and ensure that there's no license text, we should just # drop straight to the prompt. proc check_gdb_startups_up_quietly { message } { global gdb_prompt gdb_exit gdb_spawn gdb_test_multiple "" $message { -re "^$gdb_prompt $" { pass $gdb_test_name } } } save_vars { env(TERM) } { # We need an ANSI-capable terminal to get the output. setenv TERM ansi # Start GDB and confirm that the version string is styled. check_gdb_startup_version_string version # Create an empty directory we can use as HOME for some of the # tests below. When we set XDG_CONFIG_HOME we still need to point # HOME at something otherwise GDB complains that it doesn't know # where to create the index cache. set empty_home_dir [standard_output_file fake-empty-home] # Create two directories to use for the style setting test. set dirs [setup_home_directories "style" \ [multi_line_input \ "set style version foreground none" \ "set style version background none" \ "set style version intensity normal"]] set home_dir [lindex $dirs 0] set xdg_home_dir [lindex $dirs 1] # Now arrange to use the fake home directory early init file. save_vars { INTERNAL_GDBFLAGS env(HOME) env(XDG_CONFIG_HOME) } { set INTERNAL_GDBFLAGS [string map {"-nx" ""} $INTERNAL_GDBFLAGS] # Now test GDB when using the HOME directory. set env(HOME) $home_dir unset -nocomplain env(XDG_CONFIG_HOME) check_gdb_startup_version_string none \ "check version string is unstyled using HOME" # Now test using the XDG_CONFIG_HOME folder. We still need to # have a HOME directory set otherwise GDB will issue an error # about not knowing where to place the index cache. set env(XDG_CONFIG_HOME) $xdg_home_dir set env(HOME) $empty_home_dir check_gdb_startup_version_string none \ "check version string is unstyled using XDG_CONFIG_HOME" } # Create two directories to use for the quiet startup test. set dirs [setup_home_directories "quiet" "set startup-quietly on"] set home_dir [lindex $dirs 0] set xdg_home_dir [lindex $dirs 1] # Now arrange to use the fake home directory startup file. save_vars { INTERNAL_GDBFLAGS env(HOME) env(XDG_CONFIG_HOME) } { set INTERNAL_GDBFLAGS [string map {"-nx" ""} $INTERNAL_GDBFLAGS] # Now test GDB when using the HOME directory. set env(HOME) $home_dir unset -nocomplain env(XDG_CONFIG_HOME) check_gdb_startups_up_quietly \ "check GDB starts quietly using HOME" # Now test using the XDG_CONFIG_HOME folder. We still need to # have a HOME directory set otherwise GDB will issue an error # about not knowing where to place the index cache. set env(XDG_CONFIG_HOME) $xdg_home_dir set env(HOME) $empty_home_dir check_gdb_startups_up_quietly \ "check GDB starts quietly using XDG_CONFIG_HOME" } }