ubuntu-buildroot/output/build/host-gawk-5.2.0/pc/GenMakefileTst.awk

145 lines
2.9 KiB
Awk

#!/usr/bin/gawk -f
# This program generates pc/Makefile.tst
# Skip the first part of Makefile.in
/Get rid of core files/ { process = 1 }
! process { next }
# Skip stuff that PC doesn't need
/^CMP =/, /^\.PRECIOUS/ { next }
# Process the bits in Makefile.in we need to generate the tests properly
# Tests that fail on MinGW
/^EXPECTED_FAIL_MINGW *=/,/[^\\]$/ {
print
gsub(/(^EXPECTED_FAIL_MINGW *=|\\$)/,"")
for (i = 1; i <= NF; i++)
mingw[$i]
next
}
# Tests that need a different cmp program
/^NEED_TESTOUTCMP *=/,/[^\\]$/ {
print
gsub(/(^NEED_TESTOUTCMP *=|\\$)/,"")
for (i = 1; i <= NF; i++)
testoutcmp[$i]
next
}
# Start of a target
! in_recipe && /^[[:alpha:]_][-[:alnum:]_]*:/ {
in_recipe = 1
start_new_recipe()
next
}
# Empty targets, one after the other
in_recipe && /^[[:alpha:]_][-[:alnum:]_]*:/ {
print_recipe()
start_new_recipe()
next
}
# Collect recipe lines
in_recipe && /^\t/ {
recipe_lines[++line] = substitutions(name, $0)
next
}
# End of collected recipe, print it out
in_recipe && /(^[^\t])|(^$)/ {
in_recipe = 0
print_recipe()
print
next
}
# Default is to print input lines
process { print }
# substitutions --- replace *nix values with what's needed on Windows
function substitutions(test, string)
{
# locales
gsub(/en_US.UTF-8/, "ENU_USA.1252", string)
gsub(/fr_FR.UTF-8/, "FRA_FRA.1252", string)
gsub(/ja_JP.UTF-8/, "JPN_JPN.932", string)
gsub(/el_GR.iso88597/, "ell_GRC.1253", string)
gsub(/ru_RU.UTF-8/, "RUS_RUS.1251", string)
# command for `ls'
gsub(/@-ls/, "@-$(LS)", string)
# MSYS needs "/" to be doubled
gsub(/-F\//, "-F$(SLASH)", string)
gsub(/=@\//, "=@$(SLASH)", string)
if (string ~ /\$\(CMP\)/ && test in testoutcmp) {
gsub(/\$\(CMP\)/, "$(TESTOUTCMP)", string)
delete testoutcmp[test]
}
return string
}
# print_recipe --- print out the recipe
function print_recipe( i, start)
{
print recipe_lines[1] # target:
if (line == 1)
return
# First line if it's @echo $@
if (recipe_lines[2] ~ /\t@echo [$]@/) {
start = 3
print recipe_lines[2]
} else
start = 2
# print the right warning
if (name in mingw) {
print "\t@echo Expect $@ to fail with MinGW."
}
# find first line from the end that starts with @
# make sure it starts with @-
for (i = line; i >= start; i--) {
if (recipe_lines[i] !~ /^\t@/)
continue
if (recipe_lines[i] ~ /^\t@-/)
break
else if (recipe_lines[i] ~ /^\t@/) {
recipe_lines[i] = "\t@-" substr(recipe_lines[i], 3)
break
}
}
# Print all the lines but the last
for (i = start; i <= line; i++)
print recipe_lines[i]
}
# start_new_recipe --- start collecting data from scratch
function start_new_recipe()
{
# get the name of the target
# use match(), not gensub(), so that this script is fully portable
match($0, /^[[:alpha:]_][-[:alnum:]_]*:/)
name = substr($0, RSTART, RLENGTH - 1) # leave out the colon
delete recipe_lines
line = 0
recipe_lines[++line] = $0
}