Don't hard-code the input file name in gen_tabcomplete.pl's output.
authorTom Lane <[email protected]>
Thu, 10 Oct 2024 21:02:08 +0000 (17:02 -0400)
committerTom Lane <[email protected]>
Thu, 10 Oct 2024 21:02:08 +0000 (17:02 -0400)
Use $ARGV[0], that is the specified input file name, in #line
directives generated by gen_tabcomplete.pl.  This makes code
coverage reports work properly in the meson build system (where
the input file name will be a relative path).

Also fix up brain fade in the meson build rule for tab-complete.c:
we only need to write the input file name once not twice.

Jacob Champion (some cosmetic adjustments by me)

Discussion: https://postgr.es/m/CAOYmi+=+oWAoi8pqnH0MJQqsSn4ddzqDhqRQJvyiN2aJSWvw2w@mail.gmail.com

src/bin/psql/gen_tabcomplete.pl
src/bin/psql/meson.build

index 9e4c977cc578463013862e7d9c5fcc98b976bfd4..41ba7bbdd61c5556c0b3fcc7c3d1af0f6374eefd 100644 (file)
@@ -55,8 +55,9 @@ my $outfile = '';
 
 GetOptions('outfile=s' => \$outfile) or die "$0: wrong arguments";
 
-open my $infh, '<', $ARGV[0]
-  or die "$0: could not open input file '$ARGV[0]': $!\n";
+my $infile = $ARGV[0];
+open my $infh, '<', $infile
+  or die "$0: could not open input file '$infile': $!\n";
 
 my $outfh;
 if ($outfile)
@@ -91,7 +92,7 @@ printf $outfh <<EOM;
 
 #define SWITCH_CONVERSION_APPLIED
 
-#line 1 "tab-complete.in.c"
+#line 1 "${infile}"
 EOM
 
 # Scan input file until we find the data-replacement label line.
@@ -114,7 +115,7 @@ my $last_case_label = 0;
 # with the line numbering of the original, to simplify compiler error message
 # reading and debugging.
 my $next_line_no = $. + 1;
-$output_code .= "#line ${next_line_no} \"tab-complete.in.c\"\n";
+$output_code .= "#line ${next_line_no} \"${infile}\"\n";
 
 # Scan until we find the BEGIN GEN_TABCOMPLETE line.
 # Add the scanned code to $output_code verbatim.
@@ -131,7 +132,7 @@ $output_code .= "\t{\n";
 
 # Keep line numbering in sync.
 $next_line_no = $. + 1;
-$output_code .= "#line ${next_line_no} \"tab-complete.in.c\"\n";
+$output_code .= "#line ${next_line_no} \"${infile}\"\n";
 
 # Scan input file, collecting outer-level else-if conditions
 # to pass to process_else_if.
@@ -190,7 +191,7 @@ $output_code .= "\t}\n";
 
 # Keep line numbering in sync.
 $next_line_no = $. + 1;
-$output_code .= "#line ${next_line_no} \"tab-complete.in.c\"\n";
+$output_code .= "#line ${next_line_no} \"${infile}\"\n";
 
 # Scan the rest, adding it to $output_code verbatim.
 while (<$infh>)
@@ -245,7 +246,7 @@ sub process_else_if
        process_match($typ, $cs, $args, $else_if_lineno, $isfirst);
        $isfirst = 0;
        # approximate line positioning of AND'd condition
-       $output_code .= "#line ${end_lineno} \"tab-complete.in.c\"\n";
+       $output_code .= "#line ${end_lineno} \"${infile}\"\n";
        $output_code .= "\tif ($else_if_line\n";
    }
    elsif ($else_if_line =~
@@ -269,7 +270,7 @@ sub process_else_if
    if ($end_lineno != $else_if_lineno)
    {
        my $next_lineno = $end_lineno + 1;
-       $output_code .= "#line ${next_lineno} \"tab-complete.in.c\"\n";
+       $output_code .= "#line ${next_lineno} \"${infile}\"\n";
    }
 }
 
index b7c026c900bb4a50539b588942b10094d087eea0..cbc71f7e8adc5d1726120305823fb6ff9add0a54 100644 (file)
@@ -27,8 +27,8 @@ tabcomplete = custom_target('tabcomplete',
   input: 'tab-complete.in.c',
   output: 'tab-complete.c',
   command: [
-    perl, files('gen_tabcomplete.pl'), files('tab-complete.in.c'),
-    '--outfile', '@OUTPUT@', '@INPUT@',
+    perl, files('gen_tabcomplete.pl'), '@INPUT@',
+    '--outfile', '@OUTPUT@',
   ],
 )
 generated_sources += tabcomplete