mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-18 20:10:29 +01:00
Because the man page references some stuff that are dependant on the configure options, it is a good idea to update the man page accordingly, so the user will not be puzzled later. There is now a script which takes care of replacing '@var@' in the same way autoconf does, but also which can handle conditional '@def@' removal (for the case of feature dependant command line options). The man page for Window Maker is now processed this way so user will always see accurate information. Signed-off-by: Christophe CURIS <christophe.curis@free.fr>
168 lines
5.6 KiB
Bash
Executable File
168 lines
5.6 KiB
Bash
Executable File
#!/bin/sh
|
|
###########################################################################
|
|
#
|
|
# Window Maker window manager
|
|
#
|
|
# Copyright (c) 2015 Christophe CURIS
|
|
# Copyright (c) 2015 Window Maker Team
|
|
#
|
|
# 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 2 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, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
#
|
|
###########################################################################
|
|
#
|
|
# replace-ac-keywords.sh:
|
|
# generate text file from a template text file, processing @keywords@
|
|
# from configure's detected stuff
|
|
#
|
|
# This follows the principle similar to what Autoconf does for the files
|
|
# defined in AC_CONFIG_FILES; the reasons for this script are:
|
|
#
|
|
# - Autoconf recommends to only defined Makefiles in that macro and to
|
|
# process the rest (if possible) through a Make rule;
|
|
#
|
|
# - we also take the opportunity to get access to the AC_DEFINE stuff
|
|
# without needing to AC_SUBST them, which would grow unnecessarily the
|
|
# makefile;
|
|
#
|
|
# - contrary to Autoconf, we also give the possibility to completely
|
|
# remove lines from the template, where Autoconf only comments them (when
|
|
# using AM_CONDITIONAL for example)
|
|
#
|
|
###########################################################################
|
|
#
|
|
# Please note that this script is writen in sh+sed on purpose: this script
|
|
# is gonna be run on the machine of the person who is trying to compile
|
|
# WindowMaker, and as such we cannot be sure to find any scripting language
|
|
# in a known version and that works (python/ruby/tcl/perl/php/you-name-it).
|
|
#
|
|
# So for portability, we stick to the same sh+awk constraint as Autotools
|
|
# to limit the problem, see for example:
|
|
# http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Portable-Shell.html
|
|
#
|
|
###########################################################################
|
|
|
|
# Report an error on stderr and exit with status 2 to tell make that we could
|
|
# not do what we were asked
|
|
arg_error() {
|
|
echo "$0: $@" >&2
|
|
exit 2
|
|
}
|
|
|
|
# print help and exit with success status
|
|
print_help() {
|
|
echo "$0: convert a Texinfo file into a plain text file"
|
|
echo "Usage: $0 [options...] <template-file>"
|
|
echo "valid options are:"
|
|
echo " -Dkey=value : define 'key' to the value 'value'"
|
|
echo " --filter key : remove lines containing @key@ if it is undefined"
|
|
echo " --header file : C header file to parse for #define"
|
|
echo " -o file : name for the output file"
|
|
echo " --replace key : replace @key@ with its value"
|
|
exit 0
|
|
}
|
|
|
|
# Parse a C header file and add the defined lines to the list of known keys+values
|
|
# We explicitely excludes macros defined on multiple lines and macros with arguments
|
|
# Skip value defined to '0' to consider them as undefine
|
|
extract_vars_from_c_header ()
|
|
{
|
|
sed -n '/^#[ \t]*define[ \t][ \t]*[A-Za-z][A-Za-z_0-9]*[ \t].*[^\\]$/ {
|
|
s/^#[ \t]*define[ \t]*//
|
|
s/[ \t][ \t]*/=/
|
|
/=0$/d
|
|
p
|
|
}' "$1"
|
|
}
|
|
|
|
# Extract command line arguments
|
|
while [ $# -gt 0 ]; do
|
|
case $1 in
|
|
|
|
-D*)
|
|
echo "$1" | grep '^-D[a-zA-Z][a-z_A-Z0-9]*=' > /dev/null || arg_error "syntax error for '$1', expected -Dname=value"
|
|
var_defs="$var_defs
|
|
`echo "$1" | sed -e 's/^-D//' `"
|
|
;;
|
|
|
|
--filter)
|
|
shift
|
|
list_filters="$list_filters $1"
|
|
;;
|
|
|
|
--header)
|
|
shift
|
|
[ -r "$1" ] || arg_error "header file \"$1\" is not readable"
|
|
var_defs="$var_defs
|
|
`extract_vars_from_c_header "$1" `"
|
|
;;
|
|
|
|
-h|-help|--help) print_help ;;
|
|
|
|
-o)
|
|
shift
|
|
output_file="$1"
|
|
;;
|
|
|
|
--replace)
|
|
shift
|
|
list_replaces="$list_replaces $1"
|
|
;;
|
|
|
|
-*) arg_error "unknow option '$1'" ;;
|
|
|
|
*)
|
|
[ "x$input_file" = "x" ] || arg_error "only 1 input file can be specified, not \"$input_file\" and \"$1\""
|
|
input_file="$1"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# Check consistency of command-line
|
|
[ "x$input_file" != "x" ] || arg_error "no input template file given"
|
|
[ "x$output_file" != "x" ] || arg_error "no output file given"
|
|
|
|
[ "x$list_replaces$list_filters" != "x" ] || arg_error "no key to process from template"
|
|
|
|
###########################################################################
|
|
|
|
# Generate the SED commands to replace the requested keys
|
|
for key in $list_replaces
|
|
do
|
|
# if there are multiple possible values, keep the last
|
|
value=`echo "$var_defs" | grep "^$key=" | tail -1 `
|
|
[ "x$value" != "x" ] || arg_error "key \"$key\" does not have a value"
|
|
sed_cmd="$sed_cmd
|
|
s#@$key@#`echo "$value" | sed -e 's/^[^=]*=//' `#"
|
|
done
|
|
|
|
# Generate the SED commands to filter lines with the specified keys
|
|
for key in $list_filters
|
|
do
|
|
if echo "$var_defs" | grep "^$key=" > /dev/null ; then
|
|
sed_cmd="$sed_cmd
|
|
s#@$key@##
|
|
/@!$key@/d"
|
|
else
|
|
sed_cmd="$sed_cmd
|
|
s#@!$key@##
|
|
/@$key@/d"
|
|
fi
|
|
done
|
|
|
|
###########################################################################
|
|
|
|
sed -e "$sed_cmd" < "$input_file" > "$output_file"
|