#! /bin/sh # Output the contents of a shell script with sourced files inlined. # Written by Gary V. Vaughan, 2012 # Copyright (C) 2012-2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # Source required external libraries: . `echo "$0" |${SED-sed} 's|[^/]*$||'`"funclib.sh" . `echo "$0" |${SED-sed} 's|[^/]*$||'`"options-parser" # Set a version string for *this* script. scriptversion=2014-01-03.01; # UTC # 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 . # Please report bugs or propose patches to bug-libtool@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Run 'build-aux/inline-source --help' for help with using this script # from the command line. # Recursively scan through a FILE passed on the command line, replacing # either of the following: # . "relative/file" # . `echo "$0" |edit`"relative/file" # with the contents of the referenced files. ## ---------------- ## ## Options parsing. ## ## ---------------- ## usage='$progpath [OPTION]... FILE' # Short help message in response to '-h'. usage_message='Options: --debug enable verbose shell tracing --version print version information and exit -h, --help print help message and exit ' long_help_message="\ Report bugs to General help using GNU software: ." func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## -------------------- ## ## Resource management. ## ## -------------------- ## # require_AWK # ----------- # Search for a "not hopeless" awk. require_AWK=func_require_AWK func_require_AWK () { $debug_cmd test -n "$AWK" || { # Find the first executable in the list. for _G_prog in gawk mawk nawk awk do require_AWK_IFS=$IFS IFS=${PATH_SEPARATOR-:} for _G_dir in $PATH do IFS=$require_AWK_IFS if test -f "$_G_dir/$_G_prog" && test -x "$_G_dir/$_G_prog" then AWK=$_G_dir/$_G_prog break 2 fi done IFS=$require_AWK_IFS done } test -n "$AWK" || func_fatal_error "\ Please install GNU Awk, or 'export AWK=/path/to/gnu/awk'." func_verbose "found '$AWK'." require_AWK=: } ## --------------- ## ## Core functions. ## ## --------------- ## # func_include LINE # ----------------- # Output the contents of file included by LINE. func_include () { $require_AWK test -f "$1" \ || func_fatal_error "file '$1' not found" _G_scriptdir=`echo "$1" |$SED 's|[^/]*$||'` test -n "$_G_scriptdir" || _G_scriptdir="./" $AWK ' BEGIN { magic = '${_RECURSE_MAGIC-0}'; } /^#!/ && magic == 0 { print $0; print "## DO NOT EDIT - This file generated from '$1'"; print "## by '$progname' v'$scriptversion'"; magic++; next; } /^\. ['\''"].*['\''"]$/ { file = substr ($2, 2, length ($2) -2); system (sprintf ("env _RECURSE_MAGIC=%d '$progpath' %s", magic, file)); next; } /^\. `echo [^`]*`['\''"][^'\''"]*['\''"]$/ { tail = substr ($0, match ($0, /`['\''"]/)); file = substr (tail, 3, length (tail) -3); system (sprintf ("env _RECURSE_MAGIC=%d '$progpath' '"$_G_scriptdir"'%s", magic, file)); next; } { print; } ' < "$1" } func_include "$1" exit 0 # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "20/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: