Annotation of embedaddon/php/build/shtool, revision 1.1
1.1 ! misho 1: #!/bin/sh
! 2: ##
! 3: ## GNU shtool -- The GNU Portable Shell Tool
! 4: ## Copyright (c) 1994-2008 Ralf S. Engelschall <rse@engelschall.com>
! 5: ##
! 6: ## See http://www.gnu.org/software/shtool/ for more information.
! 7: ## See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
! 8: ##
! 9: ## Version: 2.0.8 (18-Jul-2008)
! 10: ## Contents: 5/19 available modules
! 11: ##
! 12:
! 13: ##
! 14: ## This program is free software; you can redistribute it and/or modify
! 15: ## it under the terms of the GNU General Public License as published by
! 16: ## the Free Software Foundation; either version 2 of the License, or
! 17: ## (at your option) any later version.
! 18: ##
! 19: ## This program is distributed in the hope that it will be useful,
! 20: ## but WITHOUT ANY WARRANTY; without even the implied warranty of
! 21: ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 22: ## General Public License for more details.
! 23: ##
! 24: ## You should have received a copy of the GNU General Public License
! 25: ## along with this program; if not, write to the Free Software
! 26: ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
! 27: ## USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
! 28: ##
! 29: ## NOTICE: Given that you include this file verbatim into your own
! 30: ## source tree, you are justified in saying that it remains separate
! 31: ## from your package, and that this way you are simply just using GNU
! 32: ## shtool. So, in this situation, there is no requirement that your
! 33: ## package itself is licensed under the GNU General Public License in
! 34: ## order to take advantage of GNU shtool.
! 35: ##
! 36:
! 37: ##
! 38: ## Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]
! 39: ##
! 40: ## Available commands:
! 41: ## echo Print string with optional construct expansion
! 42: ## install Install a program, script or datafile
! 43: ## mkdir Make one or more directories
! 44: ## platform Platform Identification Utility
! 45: ## path Deal with program paths
! 46: ##
! 47: ## Not available commands (because module was not built-in):
! 48: ## mdate Pretty-print modification time of a file or dir
! 49: ## table Pretty-print a field-separated list as a table
! 50: ## prop Display progress with a running propeller
! 51: ## move Move files with simultaneous substitution
! 52: ## mkln Make link with calculation of relative paths
! 53: ## mkshadow Make a shadow tree through symbolic links
! 54: ## fixperm Fix file permissions inside a source tree
! 55: ## rotate Logfile rotation
! 56: ## tarball Roll distribution tarballs
! 57: ## subst Apply sed(1) substitution operations
! 58: ## arx Extended archive command
! 59: ## slo Separate linker options by library class
! 60: ## scpp Sharing C Pre-Processor
! 61: ## version Maintain a version information file
! 62: ##
! 63:
! 64: # maximum Bourne-Shell compatibility
! 65: if [ ".$ZSH_VERSION" != . ] && (emulate sh) >/dev/null 2>&1; then
! 66: # reconfigure zsh(1)
! 67: emulate sh
! 68: NULLCMD=:
! 69: alias -g '${1+"$@"}'='"$@"'
! 70: elif [ ".$BASH_VERSION" != . ] && (set -o posix) >/dev/null 2>&1; then
! 71: # reconfigure bash(1)
! 72: set -o posix
! 73: fi
! 74:
! 75: # maximum independence of NLS nuisances
! 76: for var in \
! 77: LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
! 78: LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
! 79: LC_TELEPHONE LC_TIME
! 80: do
! 81: if (set +x; test -z "`(eval $var=C; export $var) 2>&1`"); then
! 82: eval $var=C; export $var
! 83: else
! 84: unset $var
! 85: fi
! 86: done
! 87:
! 88: # initial command line handling
! 89: if [ $# -eq 0 ]; then
! 90: echo "$0:Error: invalid command line" 1>&2
! 91: echo "$0:Hint: run \`$0 -h' for usage" 1>&2
! 92: exit 1
! 93: fi
! 94: if [ ".$1" = ".-h" ] || [ ".$1" = ".--help" ]; then
! 95: echo "This is GNU shtool, version 2.0.8 (18-Jul-2008)"
! 96: echo 'Copyright (c) 1994-2008 Ralf S. Engelschall <rse@engelschall.com>'
! 97: echo 'Report bugs to <bug-shtool@gnu.org>'
! 98: echo ''
! 99: echo 'Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]'
! 100: echo ''
! 101: echo 'Available global <options>:'
! 102: echo ' -v, --version display shtool version information'
! 103: echo ' -h, --help display shtool usage help page (this one)'
! 104: echo ' -d, --debug display shell trace information'
! 105: echo ' -r, --recreate recreate this shtool script via shtoolize'
! 106: echo ''
! 107: echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
! 108: echo ' echo [-n|--newline] [-e|--expand] [<string> ...]'
! 109: echo ' install [-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy]'
! 110: echo ' [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>]'
! 111: echo ' [-o|--owner <owner>] [-g|--group <group>] [-e|--exec'
! 112: echo ' <sed-cmd>] <file> [<file> ...] <path>'
! 113: echo ' mkdir [-t|--trace] [-f|--force] [-p|--parents] [-m|--mode'
! 114: echo ' <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir>'
! 115: echo ' [<dir> ...]'
! 116: echo ' platform [-F|--format <format>] [-S|--sep <string>] [-C|--conc'
! 117: echo ' <string>] [-L|--lower] [-U|--upper] [-v|--verbose]'
! 118: echo ' [-c|--concise] [-n|--no-newline] [-t|--type <type>]'
! 119: echo ' [-V|--version] [-h|--help]'
! 120: echo ' path [-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename]'
! 121: echo ' [-m|--magic] [-p|--path <path>] <str> [<str> ...]'
! 122: echo ''
! 123: echo 'Not available <cmd-name> (because module was not built-in):'
! 124: echo ' mdate [-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits]'
! 125: echo ' [-f|--field-sep <str>] [-o|--order <spec>] <path>'
! 126: echo ' table [-F|--field-sep <sep>] [-w|--width <width>] [-c|--columns'
! 127: echo ' <cols>] [-s|--strip <strip>] <str><sep><str>...'
! 128: echo ' prop [-p|--prefix <str>]'
! 129: echo ' move [-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve]'
! 130: echo ' <src-file> <dst-file>'
! 131: echo ' mkln [-t|--trace] [-f|--force] [-s|--symbolic] <src-path>'
! 132: echo ' [<src-path> ...] <dst-path>'
! 133: echo ' mkshadow [-v|--verbose] [-t|--trace] [-a|--all] <src-dir> <dst-dir>'
! 134: echo ' fixperm [-v|--verbose] [-t|--trace] <path> [<path> ...]'
! 135: echo ' rotate [-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files'
! 136: echo ' <count>] [-s|--size <size>] [-c|--copy] [-r|--remove]'
! 137: echo ' [-a|--archive-dir <dir>] [-z|--compress [<tool>:]<level>]'
! 138: echo ' [-b|--background] [-d|--delay] [-p|--pad <len>] [-m|--mode'
! 139: echo ' <mode>] [-o|--owner <owner>] [-g|--group <group>] [-M|--migrate'
! 140: echo ' <cmd>] [-P|--prolog <cmd>] [-E|--epilog <cmd>] <file> [...]'
! 141: echo ' tarball [-t|--trace] [-v|--verbose] [-o|--output <tarball>]'
! 142: echo ' [-c|--compress <prog>] [-d|--directory <dir>] [-u|--user'
! 143: echo ' <user>] [-g|--group <group>] [-e|--exclude <pattern>]'
! 144: echo ' <path> [<path> ...]'
! 145: echo ' subst [-v|--verbose] [-t|--trace] [-n|--nop] [-w|--warning]'
! 146: echo ' [-q|--quiet] [-s|--stealth] [-i|--interactive] [-b|--backup'
! 147: echo ' <ext>] [-e|--exec <cmd>] [-f|--file <cmd-file>] [<file>]'
! 148: echo ' [...]'
! 149: echo ' arx [-t|--trace] [-C|--command <cmd>] <op> <archive> [<file>'
! 150: echo ' ...]'
! 151: echo ' slo [-p|--prefix <str>] -- -L<dir> -l<lib> [-L<dir> -l<lib>'
! 152: echo ' ...]'
! 153: echo ' scpp [-v|--verbose] [-p|--preserve] [-f|--filter <filter>]'
! 154: echo ' [-o|--output <ofile>] [-t|--template <tfile>] [-M|--mark'
! 155: echo ' <mark>] [-D|--define <dname>] [-C|--class <cname>]'
! 156: echo ' <file> [<file> ...]'
! 157: echo ' version [-l|--language <lang>] [-n|--name <name>] [-p|--prefix'
! 158: echo ' <prefix>] [-s|--set <version>] [-e|--edit] [-i|--increase'
! 159: echo ' <knob>] [-d|--display <type>] <file>'
! 160: echo ''
! 161: exit 0
! 162: fi
! 163: if [ ".$1" = ".-v" ] || [ ".$1" = ".--version" ]; then
! 164: echo "GNU shtool 2.0.8 (18-Jul-2008)"
! 165: exit 0
! 166: fi
! 167: if [ ".$1" = ".-r" ] || [ ".$1" = ".--recreate" ]; then
! 168: shtoolize -obuild/shtool echo install mkdir platform path
! 169: exit 0
! 170: fi
! 171: if [ ".$1" = ".-d" ] || [ ".$1" = ".--debug" ]; then
! 172: shift
! 173: set -x
! 174: fi
! 175: name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`
! 176: case "$name" in
! 177: echo|install|mkdir|platform|path )
! 178: # implicit tool command selection
! 179: tool="$name"
! 180: ;;
! 181: * )
! 182: # explicit tool command selection
! 183: tool="$1"
! 184: shift
! 185: ;;
! 186: esac
! 187: arg_spec=""
! 188: opt_spec=""
! 189: gen_tmpfile=no
! 190:
! 191: ##
! 192: ## DISPATCH INTO SCRIPT PROLOG
! 193: ##
! 194:
! 195: case $tool in
! 196: echo )
! 197: str_tool="echo"
! 198: str_usage="[-n|--newline] [-e|--expand] [<string> ...]"
! 199: arg_spec="0+"
! 200: opt_spec="n.e."
! 201: opt_alias="n:newline,e:expand"
! 202: opt_n=no
! 203: opt_e=no
! 204: ;;
! 205: install )
! 206: str_tool="install"
! 207: str_usage="[-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] [-e|--exec <sed-cmd>] <file> [<file> ...] <path>"
! 208: arg_spec="1+"
! 209: opt_spec="v.t.d.c.C.s.m:o:g:e+"
! 210: opt_alias="v:verbose,t:trace,d:mkdir,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec"
! 211: opt_v=no
! 212: opt_t=no
! 213: opt_d=no
! 214: opt_c=no
! 215: opt_C=no
! 216: opt_s=no
! 217: opt_m="0755"
! 218: opt_o=""
! 219: opt_g=""
! 220: opt_e=""
! 221: ;;
! 222: mkdir )
! 223: str_tool="mkdir"
! 224: str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir> [<dir> ...]"
! 225: arg_spec="1+"
! 226: opt_spec="t.f.p.m:o:g:"
! 227: opt_alias="t:trace,f:force,p:parents,m:mode,o:owner,g:group"
! 228: opt_t=no
! 229: opt_f=no
! 230: opt_p=no
! 231: opt_m=""
! 232: opt_o=""
! 233: opt_g=""
! 234: ;;
! 235: platform )
! 236: str_tool="platform"
! 237: str_usage="[-F|--format <format>] [-S|--sep <string>] [-C|--conc <string>] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type <type>] [-V|--version] [-h|--help]"
! 238: arg_spec="0="
! 239: opt_spec="F:S:C:L.U.v.c.n.t:d.V.h."
! 240: opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,v:verbose,c:consise,t:type,n:no-newline,V:version,h:help"
! 241: opt_F="%{sp} (%{ap})"
! 242: opt_S=" "
! 243: opt_C="/"
! 244: opt_L=no
! 245: opt_U=no
! 246: opt_t=""
! 247: opt_v=no
! 248: opt_c=no
! 249: opt_n=no
! 250: opt_V=no
! 251: opt_h=no
! 252: ;;
! 253: path )
! 254: str_tool="path"
! 255: str_usage="[-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename] [-m|--magic] [-p|--path <path>] <str> [<str> ...]"
! 256: gen_tmpfile=yes
! 257: arg_spec="1+"
! 258: opt_spec="s.r.d.b.m.p:"
! 259: opt_alias="s:suppress,r:reverse,d:dirname,b:basename,m:magic,p:path"
! 260: opt_s=no
! 261: opt_r=no
! 262: opt_d=no
! 263: opt_b=no
! 264: opt_m=no
! 265: opt_p="$PATH"
! 266: ;;
! 267: -* )
! 268: echo "$0:Error: unknown option \`$tool'" 2>&1
! 269: echo "$0:Hint: run \`$0 -h' for usage" 2>&1
! 270: exit 1
! 271: ;;
! 272: * )
! 273: echo "$0:Error: unknown command \`$tool'" 2>&1
! 274: echo "$0:Hint: run \`$0 -h' for usage" 2>&1
! 275: exit 1
! 276: ;;
! 277: esac
! 278:
! 279: ##
! 280: ## COMMON UTILITY CODE
! 281: ##
! 282:
! 283: # commonly used ASCII values
! 284: ASC_TAB=" "
! 285: ASC_NL="
! 286: "
! 287:
! 288: # determine name of tool
! 289: if [ ".$tool" != . ]; then
! 290: # used inside shtool script
! 291: toolcmd="$0 $tool"
! 292: toolcmdhelp="shtool $tool"
! 293: msgprefix="shtool:$tool"
! 294: else
! 295: # used as standalone script
! 296: toolcmd="$0"
! 297: toolcmdhelp="sh $0"
! 298: msgprefix="$str_tool"
! 299: fi
! 300:
! 301: # parse argument specification string
! 302: eval `echo $arg_spec |\
! 303: sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
! 304:
! 305: # parse option specification string
! 306: eval `echo h.$opt_spec |\
! 307: sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
! 308:
! 309: # parse option alias string
! 310: eval `echo h:help,$opt_alias |\
! 311: sed -e 's/-/_/g' -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'`
! 312:
! 313: # interate over argument line
! 314: opt_PREV=''
! 315: while [ $# -gt 0 ]; do
! 316: # special option stops processing
! 317: if [ ".$1" = ".--" ]; then
! 318: shift
! 319: break
! 320: fi
! 321:
! 322: # determine option and argument
! 323: opt_ARG_OK=no
! 324: if [ ".$opt_PREV" != . ]; then
! 325: # merge previous seen option with argument
! 326: opt_OPT="$opt_PREV"
! 327: opt_ARG="$1"
! 328: opt_ARG_OK=yes
! 329: opt_PREV=''
! 330: else
! 331: # split argument into option and argument
! 332: case "$1" in
! 333: --[a-zA-Z0-9]*=*)
! 334: eval `echo "x$1" |\
! 335: sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'`
! 336: opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'`
! 337: eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
! 338: ;;
! 339: --[a-zA-Z0-9]*)
! 340: opt_OPT=`echo "x$1" | cut -c4-`
! 341: opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'`
! 342: eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}"
! 343: opt_ARG=''
! 344: ;;
! 345: -[a-zA-Z0-9]*)
! 346: eval `echo "x$1" |\
! 347: sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \
! 348: -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
! 349: ;;
! 350: -[a-zA-Z0-9])
! 351: opt_OPT=`echo "x$1" | cut -c3-`
! 352: opt_ARG=''
! 353: ;;
! 354: *)
! 355: break
! 356: ;;
! 357: esac
! 358: fi
! 359:
! 360: # eat up option
! 361: shift
! 362:
! 363: # determine whether option needs an argument
! 364: eval "opt_MODE=\$opt_MODE_${opt_OPT}"
! 365: if [ ".$opt_ARG" = . ] && [ ".$opt_ARG_OK" != .yes ]; then
! 366: if [ ".$opt_MODE" = ".:" ] || [ ".$opt_MODE" = ".+" ]; then
! 367: opt_PREV="$opt_OPT"
! 368: continue
! 369: fi
! 370: fi
! 371:
! 372: # process option
! 373: case $opt_MODE in
! 374: '.' )
! 375: # boolean option
! 376: eval "opt_${opt_OPT}=yes"
! 377: ;;
! 378: ':' )
! 379: # option with argument (multiple occurances override)
! 380: eval "opt_${opt_OPT}=\"\$opt_ARG\""
! 381: ;;
! 382: '+' )
! 383: # option with argument (multiple occurances append)
! 384: eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\""
! 385: ;;
! 386: * )
! 387: echo "$msgprefix:Error: unknown option: \`$opt_OPT'" 1>&2
! 388: echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
! 389: exit 1
! 390: ;;
! 391: esac
! 392: done
! 393: if [ ".$opt_PREV" != . ]; then
! 394: echo "$msgprefix:Error: missing argument to option \`$opt_PREV'" 1>&2
! 395: echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
! 396: exit 1
! 397: fi
! 398:
! 399: # process help option
! 400: if [ ".$opt_h" = .yes ]; then
! 401: echo "Usage: $toolcmdhelp $str_usage"
! 402: exit 0
! 403: fi
! 404:
! 405: # complain about incorrect number of arguments
! 406: case $arg_MODE in
! 407: '=' )
! 408: if [ $# -ne $arg_NUMS ]; then
! 409: echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
! 410: echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2
! 411: exit 1
! 412: fi
! 413: ;;
! 414: '+' )
! 415: if [ $# -lt $arg_NUMS ]; then
! 416: echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
! 417: echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2
! 418: exit 1
! 419: fi
! 420: ;;
! 421: esac
! 422:
! 423: # establish a temporary file on request
! 424: if [ ".$gen_tmpfile" = .yes ]; then
! 425: # create (explicitly) secure temporary directory
! 426: if [ ".$TMPDIR" != . ]; then
! 427: tmpdir="$TMPDIR"
! 428: elif [ ".$TEMPDIR" != . ]; then
! 429: tmpdir="$TEMPDIR"
! 430: else
! 431: tmpdir="/tmp"
! 432: fi
! 433: tmpdir="$tmpdir/.shtool.$$"
! 434: ( umask 077
! 435: rm -rf "$tmpdir" >/dev/null 2>&1 || true
! 436: mkdir "$tmpdir" >/dev/null 2>&1
! 437: if [ $? -ne 0 ]; then
! 438: echo "$msgprefix:Error: failed to create temporary directory \`$tmpdir'" 1>&2
! 439: exit 1
! 440: fi
! 441: )
! 442:
! 443: # create (implicitly) secure temporary file
! 444: tmpfile="$tmpdir/shtool.tmp"
! 445: touch "$tmpfile"
! 446: fi
! 447:
! 448: # utility function: map string to lower case
! 449: util_lower () {
! 450: echo "$1" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'
! 451: }
! 452:
! 453: # utility function: map string to upper case
! 454: util_upper () {
! 455: echo "$1" | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
! 456: }
! 457:
! 458: # cleanup procedure
! 459: shtool_exit () {
! 460: rc="$1"
! 461: if [ ".$gen_tmpfile" = .yes ]; then
! 462: rm -rf "$tmpdir" >/dev/null 2>&1 || true
! 463: fi
! 464: exit $rc
! 465: }
! 466:
! 467: ##
! 468: ## DISPATCH INTO SCRIPT BODY
! 469: ##
! 470:
! 471: case $tool in
! 472:
! 473: echo )
! 474: ##
! 475: ## echo -- Print string with optional construct expansion
! 476: ## Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
! 477: ##
! 478:
! 479: text="$*"
! 480:
! 481: # check for broken escape sequence expansion
! 482: seo=''
! 483: bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'`
! 484: if [ ".$bytes" != .3 ]; then
! 485: bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'`
! 486: if [ ".$bytes" = .3 ]; then
! 487: seo='-E'
! 488: fi
! 489: fi
! 490:
! 491: # check for existing -n option (to suppress newline)
! 492: minusn=''
! 493: bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'`
! 494: if [ ".$bytes" = .3 ]; then
! 495: minusn='-n'
! 496: fi
! 497:
! 498: # determine terminal bold sequence
! 499: term_bold=''
! 500: term_norm=''
! 501: if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[Bb]'`" != . ]; then
! 502: case $TERM in
! 503: # for the most important terminal types we directly know the sequences
! 504: xterm|xterm*|vt220|vt220*)
! 505: term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
! 506: term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
! 507: ;;
! 508: vt100|vt100*|cygwin)
! 509: term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
! 510: term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
! 511: ;;
! 512: # for all others, we try to use a possibly existing `tput' or `tcout' utility
! 513: * )
! 514: paths=`echo $PATH | sed -e 's/:/ /g'`
! 515: for tool in tput tcout; do
! 516: for dir in $paths; do
! 517: if [ -r "$dir/$tool" ]; then
! 518: for seq in bold md smso; do # 'smso' is last
! 519: bold="`$dir/$tool $seq 2>/dev/null`"
! 520: if [ ".$bold" != . ]; then
! 521: term_bold="$bold"
! 522: break
! 523: fi
! 524: done
! 525: if [ ".$term_bold" != . ]; then
! 526: for seq in sgr0 me rmso init reset; do # 'reset' is last
! 527: norm="`$dir/$tool $seq 2>/dev/null`"
! 528: if [ ".$norm" != . ]; then
! 529: term_norm="$norm"
! 530: break
! 531: fi
! 532: done
! 533: fi
! 534: break
! 535: fi
! 536: done
! 537: if [ ".$term_bold" != . ] && [ ".$term_norm" != . ]; then
! 538: break;
! 539: fi
! 540: done
! 541: ;;
! 542: esac
! 543: if [ ".$term_bold" = . ] || [ ".$term_norm" = . ]; then
! 544: echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
! 545: term_bold=''
! 546: term_norm=''
! 547: fi
! 548: fi
! 549:
! 550: # determine user name
! 551: username=''
! 552: if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[uUgG]'`" != . ]; then
! 553: username="`(id -un) 2>/dev/null`"
! 554: if [ ".$username" = . ]; then
! 555: str="`(id) 2>/dev/null`"
! 556: if [ ".`echo $str | grep '^uid[ ]*=[ ]*[0-9]*('`" != . ]; then
! 557: username=`echo $str | sed -e 's/^uid[ ]*=[ ]*[0-9]*(//' -e 's/).*$//'`
! 558: fi
! 559: if [ ".$username" = . ]; then
! 560: username="$LOGNAME"
! 561: if [ ".$username" = . ]; then
! 562: username="$USER"
! 563: if [ ".$username" = . ]; then
! 564: username="`(whoami) 2>/dev/null |\
! 565: awk '{ printf("%s", $1); }'`"
! 566: if [ ".$username" = . ]; then
! 567: username="`(who am i) 2>/dev/null |\
! 568: awk '{ printf("%s", $1); }'`"
! 569: if [ ".$username" = . ]; then
! 570: username='unknown'
! 571: fi
! 572: fi
! 573: fi
! 574: fi
! 575: fi
! 576: fi
! 577: fi
! 578:
! 579: # determine user id
! 580: userid=''
! 581: if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%U'`" != . ]; then
! 582: userid="`(id -u) 2>/dev/null`"
! 583: if [ ".$userid" = . ]; then
! 584: userid="`(id -u ${username}) 2>/dev/null`"
! 585: if [ ".$userid" = . ]; then
! 586: str="`(id) 2>/dev/null`"
! 587: if [ ".`echo $str | grep '^uid[ ]*=[ ]*[0-9]*('`" != . ]; then
! 588: userid=`echo $str | sed -e 's/^uid[ ]*=[ ]*//' -e 's/(.*$//'`
! 589: fi
! 590: if [ ".$userid" = . ]; then
! 591: userid=`(getent passwd ${username}) 2>/dev/null | \
! 592: sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
! 593: if [ ".$userid" = . ]; then
! 594: userid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
! 595: sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
! 596: if [ ".$userid" = . ]; then
! 597: userid=`(ypmatch "${username}" passwd; nismatch "${username}" passwd) 2>/dev/null | \
! 598: sed -e 'q' | sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
! 599: if [ ".$userid" = . ]; then
! 600: userid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \
! 601: sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
! 602: if [ ".$userid" = . ]; then
! 603: userid='?'
! 604: fi
! 605: fi
! 606: fi
! 607: fi
! 608: fi
! 609: fi
! 610: fi
! 611: fi
! 612:
! 613: # determine (primary) group id
! 614: groupid=''
! 615: if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[gG]'`" != . ]; then
! 616: groupid="`(id -g ${username}) 2>/dev/null`"
! 617: if [ ".$groupid" = . ]; then
! 618: str="`(id) 2>/dev/null`"
! 619: if [ ".`echo $str | grep 'gid[ ]*=[ ]*[0-9]*('`" != . ]; then
! 620: groupid=`echo $str | sed -e 's/^.*gid[ ]*=[ ]*//' -e 's/(.*$//'`
! 621: fi
! 622: if [ ".$groupid" = . ]; then
! 623: groupid=`(getent passwd ${username}) 2>/dev/null | \
! 624: sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
! 625: if [ ".$groupid" = . ]; then
! 626: groupid=`grep "^${username}:" /etc/passwd 2>/dev/null | \
! 627: sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
! 628: if [ ".$groupid" = . ]; then
! 629: groupid=`(ypmatch "${username}" passwd; nismatch "${username}" passwd) 2>/dev/null | \
! 630: sed -e 'q' | sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
! 631: if [ ".$groupid" = . ]; then
! 632: groupid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \
! 633: sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
! 634: if [ ".$groupid" = . ]; then
! 635: groupid='?'
! 636: fi
! 637: fi
! 638: fi
! 639: fi
! 640: fi
! 641: fi
! 642: fi
! 643:
! 644: # determine (primary) group name
! 645: groupname=''
! 646: if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%g'`" != . ]; then
! 647: groupname="`(id -gn ${username}) 2>/dev/null`"
! 648: if [ ".$groupname" = . ]; then
! 649: str="`(id) 2>/dev/null`"
! 650: if [ ".`echo $str | grep 'gid[ ]*=[ ]*[0-9]*('`" != . ]; then
! 651: groupname=`echo $str | sed -e 's/^.*gid[ ]*=[ ]*[0-9]*(//' -e 's/).*$//'`
! 652: fi
! 653: if [ ".$groupname" = . ]; then
! 654: groupname=`(getent group) 2>/dev/null | \
! 655: grep "^[^:]*:[^:]*:${groupid}:" | \
! 656: sed -e 's/:.*$//'`
! 657: if [ ".$groupname" = . ]; then
! 658: groupname=`grep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \
! 659: sed -e 's/:.*$//'`
! 660: if [ ".$groupname" = . ]; then
! 661: groupname=`(ypcat group; niscat group) 2>/dev/null | \
! 662: sed -e 'q' | grep "^[^:]*:[^:]*:${groupid}:" | \
! 663: sed -e 's/:.*$//'`
! 664: if [ ".$groupname" = . ]; then
! 665: groupname=`(nidump group .) 2>/dev/null | \
! 666: grep "^[^:]*:[^:]*:${groupid}:" | \
! 667: sed -e 's/:.*$//'`
! 668: if [ ".$groupname" = . ]; then
! 669: groupname='?'
! 670: fi
! 671: fi
! 672: fi
! 673: fi
! 674: fi
! 675: fi
! 676: fi
! 677:
! 678: # determine host and domain name
! 679: hostname=''
! 680: domainname=''
! 681: if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%h'`" != . ]; then
! 682: hostname="`(uname -n) 2>/dev/null |\
! 683: awk '{ printf("%s", $1); }'`"
! 684: if [ ".$hostname" = . ]; then
! 685: hostname="`(hostname) 2>/dev/null |\
! 686: awk '{ printf("%s", $1); }'`"
! 687: if [ ".$hostname" = . ]; then
! 688: hostname='unknown'
! 689: fi
! 690: fi
! 691: case $hostname in
! 692: *.* )
! 693: domainname=".`echo $hostname | cut -d. -f2-`"
! 694: hostname="`echo $hostname | cut -d. -f1`"
! 695: ;;
! 696: esac
! 697: fi
! 698: if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%d'`" != . ]; then
! 699: if [ ".$domainname" = . ]; then
! 700: if [ -f /etc/resolv.conf ]; then
! 701: domainname="`grep '^[ ]*domain' /etc/resolv.conf | sed -e 'q' |\
! 702: sed -e 's/.*domain//' \
! 703: -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \
! 704: -e 's/^\.//' -e 's/^/./' |\
! 705: awk '{ printf("%s", $1); }'`"
! 706: if [ ".$domainname" = . ]; then
! 707: domainname="`grep '^[ ]*search' /etc/resolv.conf | sed -e 'q' |\
! 708: sed -e 's/.*search//' \
! 709: -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \
! 710: -e 's/ .*//' -e 's/ .*//' \
! 711: -e 's/^\.//' -e 's/^/./' |\
! 712: awk '{ printf("%s", $1); }'`"
! 713: fi
! 714: fi
! 715: fi
! 716: fi
! 717:
! 718: # determine current time
! 719: time_day=''
! 720: time_month=''
! 721: time_year=''
! 722: time_monthname=''
! 723: if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[DMYm]'`" != . ]; then
! 724: time_day=`date '+%d'`
! 725: time_month=`date '+%m'`
! 726: time_year=`date '+%Y' 2>/dev/null`
! 727: if [ ".$time_year" = . ]; then
! 728: time_year=`date '+%y'`
! 729: case $time_year in
! 730: [5-9][0-9]) time_year="19$time_year" ;;
! 731: [0-4][0-9]) time_year="20$time_year" ;;
! 732: esac
! 733: fi
! 734: case $time_month in
! 735: 1|01) time_monthname='Jan' ;;
! 736: 2|02) time_monthname='Feb' ;;
! 737: 3|03) time_monthname='Mar' ;;
! 738: 4|04) time_monthname='Apr' ;;
! 739: 5|05) time_monthname='May' ;;
! 740: 6|06) time_monthname='Jun' ;;
! 741: 7|07) time_monthname='Jul' ;;
! 742: 8|08) time_monthname='Aug' ;;
! 743: 9|09) time_monthname='Sep' ;;
! 744: 10) time_monthname='Oct' ;;
! 745: 11) time_monthname='Nov' ;;
! 746: 12) time_monthname='Dec' ;;
! 747: esac
! 748: fi
! 749:
! 750: # expand special ``%x'' constructs
! 751: if [ ".$opt_e" = .yes ]; then
! 752: text=`echo $seo "$text" |\
! 753: sed -e "s/%B/${term_bold}/g" \
! 754: -e "s/%b/${term_norm}/g" \
! 755: -e "s/%u/${username}/g" \
! 756: -e "s/%U/${userid}/g" \
! 757: -e "s/%g/${groupname}/g" \
! 758: -e "s/%G/${groupid}/g" \
! 759: -e "s/%h/${hostname}/g" \
! 760: -e "s/%d/${domainname}/g" \
! 761: -e "s/%D/${time_day}/g" \
! 762: -e "s/%M/${time_month}/g" \
! 763: -e "s/%Y/${time_year}/g" \
! 764: -e "s/%m/${time_monthname}/g" 2>/dev/null`
! 765: fi
! 766:
! 767: # create output
! 768: if [ .$opt_n = .no ]; then
! 769: echo $seo "$text"
! 770: else
! 771: # the harder part: echo -n is best, because
! 772: # awk may complain about some \xx sequences.
! 773: if [ ".$minusn" != . ]; then
! 774: echo $seo $minusn "$text"
! 775: else
! 776: echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
! 777: fi
! 778: fi
! 779:
! 780: shtool_exit 0
! 781: ;;
! 782:
! 783: install )
! 784: ##
! 785: ## install -- Install a program, script or datafile
! 786: ## Copyright (c) 1997-2008 Ralf S. Engelschall <rse@engelschall.com>
! 787: ##
! 788:
! 789: # special case: "shtool install -d <dir> [...]" internally
! 790: # maps to "shtool mkdir -f -p -m 755 <dir> [...]"
! 791: if [ "$opt_d" = yes ]; then
! 792: cmd="$0 mkdir -f -p -m 755"
! 793: if [ ".$opt_o" != . ]; then
! 794: cmd="$cmd -o '$opt_o'"
! 795: fi
! 796: if [ ".$opt_g" != . ]; then
! 797: cmd="$cmd -g '$opt_g'"
! 798: fi
! 799: if [ ".$opt_v" = .yes ]; then
! 800: cmd="$cmd -v"
! 801: fi
! 802: if [ ".$opt_t" = .yes ]; then
! 803: cmd="$cmd -t"
! 804: fi
! 805: for dir in "$@"; do
! 806: eval "$cmd $dir" || shtool_exit $?
! 807: done
! 808: shtool_exit 0
! 809: fi
! 810:
! 811: # determine source(s) and destination
! 812: argc=$#
! 813: srcs=""
! 814: while [ $# -gt 1 ]; do
! 815: srcs="$srcs $1"
! 816: shift
! 817: done
! 818: dstpath="$1"
! 819:
! 820: # type check for destination
! 821: dstisdir=0
! 822: if [ -d $dstpath ]; then
! 823: dstpath=`echo "$dstpath" | sed -e 's:/$::'`
! 824: dstisdir=1
! 825: fi
! 826:
! 827: # consistency check for destination
! 828: if [ $argc -gt 2 ] && [ $dstisdir = 0 ]; then
! 829: echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
! 830: shtool_exit 1
! 831: fi
! 832:
! 833: # iterate over all source(s)
! 834: for src in $srcs; do
! 835: dst=$dstpath
! 836:
! 837: # if destination is a directory, append the input filename
! 838: if [ $dstisdir = 1 ]; then
! 839: dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
! 840: dst="$dst/$dstfile"
! 841: fi
! 842:
! 843: # check for correct arguments
! 844: if [ ".$src" = ".$dst" ]; then
! 845: echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
! 846: continue
! 847: fi
! 848: if [ -d "$src" ]; then
! 849: echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
! 850: continue
! 851: fi
! 852:
! 853: # make a temp file name in the destination directory
! 854: dsttmp=`echo $dst |\
! 855: sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
! 856: -e "s;\$;/#INST@$$#;"`
! 857:
! 858: # verbosity
! 859: if [ ".$opt_v" = .yes ]; then
! 860: echo "$src -> $dst" 1>&2
! 861: fi
! 862:
! 863: # copy or move the file name to the temp name
! 864: # (because we might be not allowed to change the source)
! 865: if [ ".$opt_C" = .yes ]; then
! 866: opt_c=yes
! 867: fi
! 868: if [ ".$opt_c" = .yes ]; then
! 869: if [ ".$opt_t" = .yes ]; then
! 870: echo "cp $src $dsttmp" 1>&2
! 871: fi
! 872: cp "$src" "$dsttmp" || shtool_exit $?
! 873: else
! 874: if [ ".$opt_t" = .yes ]; then
! 875: echo "mv $src $dsttmp" 1>&2
! 876: fi
! 877: mv "$src" "$dsttmp" || shtool_exit $?
! 878: fi
! 879:
! 880: # adjust the target file
! 881: if [ ".$opt_e" != . ]; then
! 882: sed='sed'
! 883: OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_e; IFS="$OIFS"
! 884: for e
! 885: do
! 886: sed="$sed -e '$e'"
! 887: done
! 888: cp "$dsttmp" "$dsttmp.old"
! 889: chmod u+w $dsttmp
! 890: eval "$sed <$dsttmp.old >$dsttmp" || shtool_exit $?
! 891: rm -f $dsttmp.old
! 892: fi
! 893: if [ ".$opt_s" = .yes ]; then
! 894: if [ ".$opt_t" = .yes ]; then
! 895: echo "strip $dsttmp" 1>&2
! 896: fi
! 897: strip $dsttmp || shtool_exit $?
! 898: fi
! 899: if [ ".$opt_o" != . ]; then
! 900: if [ ".$opt_t" = .yes ]; then
! 901: echo "chown $opt_o $dsttmp" 1>&2
! 902: fi
! 903: chown $opt_o $dsttmp || shtool_exit $?
! 904: fi
! 905: if [ ".$opt_g" != . ]; then
! 906: if [ ".$opt_t" = .yes ]; then
! 907: echo "chgrp $opt_g $dsttmp" 1>&2
! 908: fi
! 909: chgrp $opt_g $dsttmp || shtool_exit $?
! 910: fi
! 911: if [ ".$opt_m" != ".-" ]; then
! 912: if [ ".$opt_t" = .yes ]; then
! 913: echo "chmod $opt_m $dsttmp" 1>&2
! 914: fi
! 915: chmod $opt_m $dsttmp || shtool_exit $?
! 916: fi
! 917:
! 918: # determine whether to do a quick install
! 919: # (has to be done _after_ the strip was already done)
! 920: quick=no
! 921: if [ ".$opt_C" = .yes ]; then
! 922: if [ -r $dst ]; then
! 923: if cmp -s "$src" "$dst"; then
! 924: quick=yes
! 925: fi
! 926: fi
! 927: fi
! 928:
! 929: # finally, install the file to the real destination
! 930: if [ $quick = yes ]; then
! 931: if [ ".$opt_t" = .yes ]; then
! 932: echo "rm -f $dsttmp" 1>&2
! 933: fi
! 934: rm -f $dsttmp
! 935: else
! 936: if [ ".$opt_t" = .yes ]; then
! 937: echo "rm -f $dst && mv $dsttmp $dst" 1>&2
! 938: fi
! 939: rm -f $dst && mv $dsttmp $dst
! 940: fi
! 941: done
! 942:
! 943: shtool_exit 0
! 944: ;;
! 945:
! 946: mkdir )
! 947: ##
! 948: ## mkdir -- Make one or more directories
! 949: ## Copyright (c) 1996-2008 Ralf S. Engelschall <rse@engelschall.com>
! 950: ##
! 951:
! 952: errstatus=0
! 953: for p in ${1+"$@"}; do
! 954: # if the directory already exists...
! 955: if [ -d "$p" ]; then
! 956: if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
! 957: echo "$msgprefix:Error: directory already exists: $p" 1>&2
! 958: errstatus=1
! 959: break
! 960: else
! 961: continue
! 962: fi
! 963: fi
! 964: # if the directory has to be created...
! 965: if [ ".$opt_p" = .no ]; then
! 966: if [ ".$opt_t" = .yes ]; then
! 967: echo "mkdir $p" 1>&2
! 968: fi
! 969: mkdir $p || errstatus=$?
! 970: if [ ".$opt_o" != . ]; then
! 971: if [ ".$opt_t" = .yes ]; then
! 972: echo "chown $opt_o $p" 1>&2
! 973: fi
! 974: chown $opt_o $p || errstatus=$?
! 975: fi
! 976: if [ ".$opt_g" != . ]; then
! 977: if [ ".$opt_t" = .yes ]; then
! 978: echo "chgrp $opt_g $p" 1>&2
! 979: fi
! 980: chgrp $opt_g $p || errstatus=$?
! 981: fi
! 982: if [ ".$opt_m" != . ]; then
! 983: if [ ".$opt_t" = .yes ]; then
! 984: echo "chmod $opt_m $p" 1>&2
! 985: fi
! 986: chmod $opt_m $p || errstatus=$?
! 987: fi
! 988: else
! 989: # the smart situation
! 990: set fnord `echo ":$p" |\
! 991: sed -e 's/^:\//%/' \
! 992: -e 's/^://' \
! 993: -e 's/\// /g' \
! 994: -e 's/^%/\//'`
! 995: shift
! 996: pathcomp=''
! 997: for d in ${1+"$@"}; do
! 998: pathcomp="$pathcomp$d"
! 999: case "$pathcomp" in
! 1000: -* ) pathcomp="./$pathcomp" ;;
! 1001: esac
! 1002: if [ ! -d "$pathcomp" ]; then
! 1003: if [ ".$opt_t" = .yes ]; then
! 1004: echo "mkdir $pathcomp" 1>&2
! 1005: fi
! 1006: mkdir $pathcomp || errstatus=$?
! 1007: if [ ".$opt_o" != . ]; then
! 1008: if [ ".$opt_t" = .yes ]; then
! 1009: echo "chown $opt_o $pathcomp" 1>&2
! 1010: fi
! 1011: chown $opt_o $pathcomp || errstatus=$?
! 1012: fi
! 1013: if [ ".$opt_g" != . ]; then
! 1014: if [ ".$opt_t" = .yes ]; then
! 1015: echo "chgrp $opt_g $pathcomp" 1>&2
! 1016: fi
! 1017: chgrp $opt_g $pathcomp || errstatus=$?
! 1018: fi
! 1019: if [ ".$opt_m" != . ]; then
! 1020: if [ ".$opt_t" = .yes ]; then
! 1021: echo "chmod $opt_m $pathcomp" 1>&2
! 1022: fi
! 1023: chmod $opt_m $pathcomp || errstatus=$?
! 1024: fi
! 1025: fi
! 1026: pathcomp="$pathcomp/"
! 1027: done
! 1028: fi
! 1029: done
! 1030:
! 1031: shtool_exit $errstatus
! 1032: ;;
! 1033:
! 1034: platform )
! 1035: ##
! 1036: ## platform -- Platform Identification Utility
! 1037: ## Copyright (c) 2003-2008 Ralf S. Engelschall <rse@engelschall.com>
! 1038: ##
! 1039:
! 1040: # option post-processing
! 1041: if [ ".$opt_t" != . ]; then
! 1042: case "$opt_t" in
! 1043: binary )
! 1044: # binary package id (OpenPKG RPM)
! 1045: opt_F="%<ap>-%<sp>"
! 1046: opt_L=yes
! 1047: opt_S=""
! 1048: opt_C="+"
! 1049: ;;
! 1050: build )
! 1051: # build time checking (OpenPKG RPM)
! 1052: opt_F="%<at>-%<st>"
! 1053: opt_L=yes
! 1054: opt_S=""
! 1055: opt_C="+"
! 1056: ;;
! 1057: gnu )
! 1058: # GNU config.guess style <arch>-<vendor>-<os><osversion>
! 1059: opt_F="%<at>-unknown-%<st>"
! 1060: opt_L=yes
! 1061: opt_S=""
! 1062: opt_C="+"
! 1063: ;;
! 1064: web )
! 1065: # non-whitespace HTTP Server-header id
! 1066: opt_F="%<sp>-%<ap>"
! 1067: opt_S="/"
! 1068: opt_C="+"
! 1069: ;;
! 1070: summary)
! 1071: # human readable verbose summary information
! 1072: opt_F="Class: %[sc] (%[ac])\\nProduct: %[sp] (%[ap])\\nTechnology: %[st] (%[at])"
! 1073: opt_S=" "
! 1074: opt_C="/"
! 1075: ;;
! 1076: all-in-one )
! 1077: # full-table all-in-one information
! 1078: opt_F=""
! 1079: opt_F="${opt_F}concise architecture class: %<ac>\\n"
! 1080: opt_F="${opt_F}regular architecture class: %{ac}\\n"
! 1081: opt_F="${opt_F}verbose architecture class: %[ac]\\n"
! 1082: opt_F="${opt_F}concise architecture product: %<ap>\\n"
! 1083: opt_F="${opt_F}regular architecture product: %{ap}\\n"
! 1084: opt_F="${opt_F}verbose architecture product: %[ap]\\n"
! 1085: opt_F="${opt_F}concise architecture technology: %<at>\\n"
! 1086: opt_F="${opt_F}regular architecture technology: %{at}\\n"
! 1087: opt_F="${opt_F}verbose architecture technology: %[at]\\n"
! 1088: opt_F="${opt_F}concise system class: %<sc>\\n"
! 1089: opt_F="${opt_F}regular system class: %{sc}\\n"
! 1090: opt_F="${opt_F}verbose system class: %[sc]\\n"
! 1091: opt_F="${opt_F}concise system product: %<sp>\\n"
! 1092: opt_F="${opt_F}regular system product: %{sp}\\n"
! 1093: opt_F="${opt_F}verbose system product: %[sp]\\n"
! 1094: opt_F="${opt_F}concise system technology: %<st>\\n"
! 1095: opt_F="${opt_F}regular system technology: %{st}\\n"
! 1096: opt_F="${opt_F}verbose system technology: %[st]"
! 1097: ;;
! 1098: * )
! 1099: echo "$msgprefix:Error: invalid type \`$opt_t'" 1>&2
! 1100: exit 1
! 1101: ;;
! 1102: esac
! 1103: fi
! 1104:
! 1105: # assemble initial platform information
! 1106: UNAME_MACHINE=`(uname -m) 2>/dev/null` ||\
! 1107: UNAME_MACHINE=`(uname -p) 2>/dev/null` ||\
! 1108: UNAME_MACHINE='unknown'
! 1109: UNAME_SYSTEM=`(uname -s) 2>/dev/null` ||\
! 1110: UNAME_SYSTEM='unknown'
! 1111: UNAME_RELEASE=`(uname -r) 2>/dev/null` ||\
! 1112: UNAME_RELEASE=`(uname -v) 2>/dev/null` ||\
! 1113: UNAME_RELEASE='unknown'
! 1114:
! 1115: UNAME="${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}"
! 1116:
! 1117: AC=""; AP=""; AT=""
! 1118: SC=""; SP=""; ST=""
! 1119:
! 1120: # dispatch into platform specific sections
! 1121: case "${UNAME}" in
! 1122:
! 1123: # FreeBSD
! 1124: *:FreeBSD:* )
! 1125: # determine architecture
! 1126: AC="${UNAME_MACHINE}"
! 1127: case "${AC}" in
! 1128: i386 ) AC="iX86" ;;
! 1129: esac
! 1130: AP="${AC}"
! 1131: AT="${AP}"
! 1132: if [ ".${AT}" = ".iX86" ]; then
! 1133: case "`(/sbin/sysctl -n hw.model) 2>&1`" in
! 1134: *"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;;
! 1135: *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;;
! 1136: *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;;
! 1137: esac
! 1138: fi
! 1139: # determine system
! 1140: r=`echo "${UNAME_RELEASE}" |\
! 1141: sed -e 's;[()];;' -e 's/\(-.*\)$/[\1]/'`
! 1142: ST="FreeBSD ${r}"
! 1143: SP="${ST}"
! 1144: case "${r}" in
! 1145: 1.* ) SC="4.3BSD" ;;
! 1146: * ) SC="4.4BSD" ;;
! 1147: esac
! 1148: ;;
! 1149:
! 1150: # NetBSD
! 1151: *:NetBSD:* )
! 1152: # determine architecture
! 1153: AT="${UNAME_MACHINE}"
! 1154: AP="${AT}"
! 1155: case "${AP}" in
! 1156: i[3-6]86 ) AP="iX86" ;;
! 1157: esac
! 1158: AC="${AP}"
! 1159: # determine system
! 1160: r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'`
! 1161: ST="NetBSD ${r}"
! 1162: SP="${ST}"
! 1163: case "${r}" in
! 1164: 0.* ) SC="4.3BSD" ;;
! 1165: * ) SC="4.4BSD" ;;
! 1166: esac
! 1167: ;;
! 1168:
! 1169: # OpenBSD
! 1170: *:OpenBSD:* )
! 1171: # determine architecture
! 1172: AT="${UNAME_MACHINE}"
! 1173: AP="${AT}"
! 1174: case "${AP}" in
! 1175: i[3-6]86 ) AP="iX86" ;;
! 1176: esac
! 1177: AC="${AP}"
! 1178: # determine system
! 1179: r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'`
! 1180: ST="OpenBSD ${r}"
! 1181: SP="${ST}"
! 1182: SC="4.4BSD"
! 1183: ;;
! 1184:
! 1185: # DragonFly BSD
! 1186: *:DragonFly:* )
! 1187: # determine architecture
! 1188: AT="${UNAME_MACHINE}"
! 1189: AP="${AT}"
! 1190: case "${AP}" in
! 1191: i[3-6]86 ) AP="iX86" ;;
! 1192: esac
! 1193: AC="${AP}"
! 1194: # determine system
! 1195: r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'`
! 1196: ST="DragonFly ${r}"
! 1197: SP="${ST}"
! 1198: SC="4.4BSD"
! 1199: ;;
! 1200:
! 1201: # GNU/Linux
! 1202: *:Linux:* )
! 1203: # determine architecture
! 1204: AT="${UNAME_MACHINE}"
! 1205: case "${AT}" in
! 1206: ia64 ) AT="IA64" ;;
! 1207: x86_64 ) AT='AMD64' ;;
! 1208: parisc ) AT="HPPA32" ;;
! 1209: parisc64 ) AT="HPPA64" ;;
! 1210: esac
! 1211: AP="${AT}"
! 1212: case "${AP}" in
! 1213: i[3-6]86 ) AP='iX86' ;;
! 1214: esac
! 1215: AC="${AP}"
! 1216: # determine system
! 1217: v_kern=`echo "${UNAME_RELEASE}" |\
! 1218: sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
! 1219: v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\
! 1220: env -i sort -n | sed -n -e '$p' | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null`
! 1221: ST="GNU/<Linux >${v_libc}/<${v_kern}>"
! 1222: if [ -f /etc/lsb-release ]; then
! 1223: eval `( . /etc/lsb-release
! 1224: echo "SC=\"LSB${LSB_VERSION}\""
! 1225: if [ ".${DISTRIB_ID}" != . -a ".${DISTRIB_RELEASE}" != . ]; then
! 1226: echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\""
! 1227: fi
! 1228: ) 2>/dev/null`
! 1229: fi
! 1230: if [ ".$SP" = . ]; then
! 1231: for tagfile in x \
! 1232: `cd /etc && \
! 1233: /bin/ls *[_-]release *[_-]version 2>/dev/null | env -i sort | \
! 1234: sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
! 1235: echo redhat-release lsb-release`
! 1236: do
! 1237: [ ".${tagfile}" = .x ] && continue
! 1238: [ ! -f "/etc/${tagfile}" ] && continue
! 1239: n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'`
! 1240: v=`(grep VERSION /etc/${tagfile}; cat /etc/${tagfile}) | grep '[0-9]' | sed -e 'q' |\
! 1241: sed -e 's/^/#/' \
! 1242: -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
! 1243: -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
! 1244: -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
! 1245: -e 's/^#.*$//'`
! 1246: case "`util_lower ${n}`" in
! 1247: redhat )
! 1248: if [ ".`egrep '(Red Hat Enterprise Linux|CentOS)' /etc/${tagfile}`" != . ]; then
! 1249: n="<R>ed <H>at <E>nterprise <L>inux"
! 1250: else
! 1251: n="<R>ed <H>at <L>inux"
! 1252: fi
! 1253: ;;
! 1254: debian ) n="Debian[ GNU/Linux]" ;;
! 1255: ubuntu ) n="Ubuntu[ GNU/Linux]" ;;
! 1256: fedora ) n="<Fedora> Core[ GNU/Linux]" ;;
! 1257: suse ) n="[Novell ]SUSE[ Linux]" ;;
! 1258: mandrake*|mandriva ) n="Mandriva[ Linux]" ;;
! 1259: gentoo ) n="Gentoo[ GNU/Linux]" ;;
! 1260: slackware ) n="Slackware[ Linux]" ;;
! 1261: turbolinux ) n="TurboLinux" ;;
! 1262: unitedlinux ) n="UnitedLinux" ;;
! 1263: * ) n="${n}[ GNU/Linux]" ;;
! 1264: esac
! 1265: case "$n" in
! 1266: *"<"*">"* ) SP="$n <$v>" ;;
! 1267: * ) SP="$n $v" ;;
! 1268: esac
! 1269: break
! 1270: done
! 1271: fi
! 1272: [ ".$SP" = . ] && SP="${ST}"
! 1273: [ ".$SC" = . ] && SC="LSB"
! 1274: ;;
! 1275:
! 1276: # Sun Solaris
! 1277: *:SunOS:* )
! 1278: # determine architecture
! 1279: AT="${UNAME_MACHINE}"
! 1280: case "${AT}" in
! 1281: i86pc )
! 1282: AT="iX86"
! 1283: case "`(/bin/isainfo -k) 2>&1`" in
! 1284: amd64 ) AT="AMD64" ;;
! 1285: esac
! 1286: ;;
! 1287: esac
! 1288: AP="${AT}"
! 1289: case "${AP}" in
! 1290: sun4[cdm] ) AP="SPARC32" ;;
! 1291: sun4[uv] ) AP="SPARC64" ;;
! 1292: sun4* ) AP="SPARC" ;;
! 1293: esac
! 1294: AC="${AP}"
! 1295: case "${AC}" in
! 1296: SPARC* ) AC="SPARC" ;;
! 1297: esac
! 1298: # determine system
! 1299: ST="[Sun ]SunOS ${UNAME_RELEASE}"
! 1300: v=`echo "${UNAME_RELEASE}" |\
! 1301: sed -e 's;^4\.;1.;' \
! 1302: -e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \
! 1303: -e 's;^5\.\([0-9][0-9]*\).*;\1;'`
! 1304: SP="[Sun ]Solaris $v"
! 1305: case "${UNAME_RELEASE}" in
! 1306: 4.* ) SC="4.3BSD" ;;
! 1307: 5.* ) SC="SVR4" ;;
! 1308: esac
! 1309: ;;
! 1310:
! 1311: # SCO UnixWare
! 1312: *:UnixWare:* )
! 1313: # determine architecture
! 1314: AT="${UNAME_MACHINE}"
! 1315: case "${AT}" in
! 1316: i[3-6]86 | ix86at ) AT="iX86" ;;
! 1317: esac
! 1318: AP="${AT}"
! 1319: # determine system
! 1320: v=`/sbin/uname -v`
! 1321: ST="[SCO ]UnixWare ${v}"
! 1322: SP="${ST}"
! 1323: SC="SVR${UNAME_RELEASE}"
! 1324: ;;
! 1325:
! 1326: # QNX
! 1327: *:QNX:* )
! 1328: # determine architecture
! 1329: AT="${UNAME_MACHINE}"
! 1330: case "${AT}" in
! 1331: x86pc ) AT="iX86" ;;
! 1332: esac
! 1333: AP="${AT}"
! 1334: # determine system
! 1335: v="${UNAME_RELEASE}"
! 1336: ST="QNX[ Neutrino RTOS] ${v}"
! 1337: v=`echo "${v}" | sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1;'`
! 1338: SP="QNX[ Neutrino RTOS] ${v}"
! 1339: SC="QNX"
! 1340: ;;
! 1341:
! 1342: # SGI IRIX
! 1343: *:IRIX*:* )
! 1344: # determine architecture
! 1345: AT="${UNAME_MACHINE}"
! 1346: AP="${AT}"
! 1347: case "${AP}:${UNAME_SYSTEM}" in
! 1348: IP*:IRIX64 ) AP="MIPS64" ;;
! 1349: IP*:* ) AP="MIPS" ;;
! 1350: esac
! 1351: AC="${AP}"
! 1352: # determine system
! 1353: v=`(/bin/uname -R || /bin/uname -r) 2>/dev/null | sed -e 's;[0-9.]* ;;'`
! 1354: ST="[SGI ]IRIX ${v}"
! 1355: v="${UNAME_RELEASE}"
! 1356: SP="[SGI ]IRIX ${v}"
! 1357: SC="4.2BSD/SVR3"
! 1358: ;;
! 1359:
! 1360: # HP HP-UX
! 1361: *:HP-UX:* )
! 1362: # determine architecture
! 1363: AT="${UNAME_MACHINE}"
! 1364: case "${AT}" in
! 1365: ia64 ) AT="IA64" ;;
! 1366: 9000/[34]?? ) AT=M68K ;;
! 1367: 9000/[678][0-9][0-9])
! 1368: sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
! 1369: sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
! 1370: case "${sc_cpu_version}" in
! 1371: 523 ) AT="HPPA1.0" ;;
! 1372: 528 ) AT="HPPA1.1" ;;
! 1373: 532 ) AT="HPPA2.0"
! 1374: case "${sc_kernel_bits}" in
! 1375: 32 ) AT="${AT}n" ;;
! 1376: 64 ) AT="${AT}w" ;;
! 1377: esac
! 1378: ;;
! 1379: esac
! 1380: ;;
! 1381: esac
! 1382: AP="${AT}"
! 1383: case "${AP}" in
! 1384: HPPA* ) AP="HPPA" ;;
! 1385: esac
! 1386: AC="${AP}"
! 1387: # determine system
! 1388: v=`echo "${UNAME_RELEASE}" | sed -e 's;^[^0-9]*;;'`
! 1389: ST="[HP ]<HP>-<UX ${v}>"
! 1390: SP="${ST}"
! 1391: case "${v}" in
! 1392: 10.* ) SC="SVR4.2" ;;
! 1393: [7-9]* ) SC="SVR4" ;;
! 1394: esac
! 1395: ;;
! 1396:
! 1397: # HP Tru64 (OSF1)
! 1398: *:OSF1:* )
! 1399: # determine architecture
! 1400: AP="${UNAME_MACHINE}"
! 1401: case "${AP}" in
! 1402: alpha ) AP="Alpha" ;;
! 1403: esac
! 1404: alpha_type=`(/usr/sbin/psrinfo -v) 2>/dev/null |\
! 1405: sed -n -e 's/^.*The alpha \([^ ][^ ]*\).*processor.*$/\1/p' | sed -e 'q'`
! 1406: AT="${AP}${alpha_type}"
! 1407: AC="${AP}"
! 1408: # determine system
! 1409: v=`echo "${UNAME_RELEASE}" | sed -e 's;^[VTX];;'`
! 1410: ST="[HP ]Tru64 ${v}"
! 1411: SP="${ST}"
! 1412: SC="OSF1"
! 1413: ;;
! 1414:
! 1415: # IBM AIX
! 1416: *:AIX:* )
! 1417: # determine architecture
! 1418: cpu_arch=RS6000
! 1419: if [ -x /usr/sbin/lsdev -a -x /usr/sbin/lsattr ]; then
! 1420: cpu_id=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
! 1421: if [ ".`/usr/sbin/lsattr -El ${cpu_id} | grep -i powerpc`" != . ]; then
! 1422: cpu_arch=PPC
! 1423: fi
! 1424: elif [ -d /QOpenSys ]; then
! 1425: # IBM i5/OS (aka OS/400) with PASE (Portable Application Solutions Environment)
! 1426: cpu_arch=PPC
! 1427: fi
! 1428: if [ -x /usr/bin/oslevel ]; then
! 1429: os_level=`/usr/bin/oslevel`
! 1430: else
! 1431: os_level="`uname -v`.`uname -r`"
! 1432: fi
! 1433: os_level=`echo "${os_level}" |\
! 1434: sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\)\(.*\)$;<\1>\2[\3];' \
! 1435: -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(.*\)$;<\1>\2;'`
! 1436: AT="${cpu_arch}"
! 1437: AP="${AT}"
! 1438: AC="${AP}"
! 1439: # determine system
! 1440: ST="[IBM ]<AIX >${os_level}"
! 1441: SP="${ST}"
! 1442: case "${os_level}" in
! 1443: [12]* ) SC="SVR2" ;;
! 1444: * ) SC="SVR4" ;;
! 1445: esac
! 1446: ;;
! 1447:
! 1448: # Apple Mac OS X (Darwin)
! 1449: *:Darwin:* )
! 1450: # determine architecture
! 1451: AT="`uname -p`"
! 1452: case "${AT}" in
! 1453: powerpc ) AT="PPC" ;;
! 1454: esac
! 1455: AP="${AT}"
! 1456: case "${AP}" in
! 1457: i?86 ) AP="iX86" ;;
! 1458: esac
! 1459: AC="${AP}"
! 1460: # determine system
! 1461: unset v1; unset v2; unset v3
! 1462: eval `echo "${UNAME_RELEASE}" |\
! 1463: sed -e 's/^/#/' \
! 1464: -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \
! 1465: -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \
! 1466: -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \
! 1467: -e 's/^#.*$/v1="0"/'`
! 1468: ST="[Apple ]<${UNAME_SYSTEM} ${v1}>${v2+.$v2}${v3+[.$v3]}"
! 1469: SP="$ST"
! 1470: v="`(sw_vers) 2>/dev/null | grep 'ProductVersion:' | sed -e 's/^ProductVersion:[^0-9]*\([0-9][0-9.]*\).*$/\1/'`"
! 1471: if [ ".$v" = . ]; then
! 1472: for name in System Server; do
! 1473: if [ -f /System/Library/CoreServices/${name}Version.plist ]; then
! 1474: v=`(defaults read "/System/Library/CoreServices/${name}Version" "ProductVersion") 2>/dev/null`
! 1475: [ ".$v" != . ] && break
! 1476: fi
! 1477: done
! 1478: fi
! 1479: if [ ".$v" != . ]; then
! 1480: unset v1; unset v2; unset v3
! 1481: eval `echo "${v}" |\
! 1482: sed -e 's/^/#/' \
! 1483: -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \
! 1484: -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \
! 1485: -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \
! 1486: -e 's/^#.*$/v1="0"/'`
! 1487: SP="[Apple ]Mac OS X ${v1}${v2+.$v2}${v3+[.$v3]}"
! 1488: fi
! 1489: SC="4.4BSD/Mach3.0"
! 1490: ;;
! 1491:
! 1492: # Windows/Cygwin
! 1493: *:CYGWIN*:* )
! 1494: # determine architecture
! 1495: AT="`uname -m`"
! 1496: AP="${AT}"
! 1497: case "${AP}" in
! 1498: i?86 ) AP="iX86" ;;
! 1499: esac
! 1500: AC="${AP}"
! 1501: # determine system
! 1502: unset v1; unset v2; unset v3
! 1503: eval `echo "${UNAME_RELEASE}" |\
! 1504: sed -e 's/^/#/' \
! 1505: -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \
! 1506: -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \
! 1507: -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \
! 1508: -e 's/^#.*$/v1="0"/'`
! 1509: ST="Cygwin ${v1}${v2+.$v2}${v3+[.$v3]}"
! 1510: SP="$ST"
! 1511: SC="Windows"
! 1512: v=`echo "${UNAME_SYSTEM}" | sed -e 's/^CYGWIN_NT-//' |\
! 1513: sed -e 's/^/#/' -e 's/^#\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' -e 's/^#.*$//'`
! 1514: case "$v" in
! 1515: 4.0 ) SC="$SC[ NT]" ;;
! 1516: 5.0 ) SC="$SC[ 2000]" ;;
! 1517: 5.1 ) SC="$SC[ XP]" ;;
! 1518: 6.0 ) SC="$SC[ Vista]" ;;
! 1519: esac
! 1520: ;;
! 1521:
! 1522: # TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO
! 1523: # *:XXX:* )
! 1524: # ...
! 1525: # ;;
! 1526:
! 1527: # ...A STILL UNKNOWN PLATFORM...
! 1528: * )
! 1529: AT=`echo "${UNAME_MACHINE}" | sed -e "s; ;${opt_C};g"`
! 1530: AP="${AT}"
! 1531: AC="${AP}"
! 1532: v=`echo "${UNAME_RELEASE}" |\
! 1533: sed -e 's/^/#/' \
! 1534: -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
! 1535: -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
! 1536: -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
! 1537: -e 's/^#.*$/?/'`
! 1538: ST="${UNAME_SYSTEM} ${v}"
! 1539: SP="${ST}"
! 1540: SC="${SP}"
! 1541: ;;
! 1542:
! 1543: esac
! 1544:
! 1545: # provide fallback values
! 1546: [ ".$AT" = . ] && AT="${AP:-${AC}}"
! 1547: [ ".$AP" = . ] && AP="${AT:-${AC}}"
! 1548: [ ".$AC" = . ] && AC="${AP:-${AT}}"
! 1549: [ ".$ST" = . ] && ST="${SP:-${SC}}"
! 1550: [ ".$SP" = . ] && SP="${ST:-${SC}}"
! 1551: [ ".$SC" = . ] && SC="${SP:-${ST}}"
! 1552:
! 1553: # support explicit enforced verbose/concise output
! 1554: if [ ".$opt_v" = .yes ]; then
! 1555: opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%[\1]/g'`
! 1556: elif [ ".$opt_c" = .yes ]; then
! 1557: opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%<\1>/g'`
! 1558: fi
! 1559:
! 1560: # provide verbose and concise variants
! 1561: AC_V=""; AC_N=""; AC_C=""
! 1562: AP_V=""; AP_N=""; AP_C=""
! 1563: AT_V=""; AT_N=""; AT_C=""
! 1564: SC_V=""; SC_N=""; SC_C=""
! 1565: SP_V=""; SP_N=""; SP_C=""
! 1566: ST_V=""; ST_N=""; ST_C=""
! 1567: for var_lc in at ap ac st sp sc; do
! 1568: case "$opt_F" in
! 1569: *"%[${val_lc}]"* | *"%{${val_lc}}"* | *"%${val_lc}"* | *"%<${val_lc}>"* )
! 1570: var_uc=`util_upper "$var_lc"`
! 1571: eval "val=\"\$${var_uc}\""
! 1572: val_V=""; val_N=""; val_C=""
! 1573: case "$opt_F" in
! 1574: *"%[${var_lc}]"* )
! 1575: val_V=`echo ":$val" | \
! 1576: sed -e 's/^://' \
! 1577: -e 's;\[\([^]]*\)\];\1;g' \
! 1578: -e 's;<\([^>]*\)>;\1;g' \
! 1579: -e "s; ;§§;g" \
! 1580: -e "s;/;%%;g" \
! 1581: -e "s;§§;${opt_S};g" \
! 1582: -e "s;%%;${opt_C};g"`
! 1583: eval "${var_uc}_V=\"\${val_V}\""
! 1584: ;;
! 1585: esac
! 1586: case "$opt_F" in
! 1587: *"%{${var_lc}}"* | *"%${var_lc}"* )
! 1588: val_N=`echo ":$val" | \
! 1589: sed -e 's/^://' \
! 1590: -e 's;\[\([^]]*\)\];;g' \
! 1591: -e 's;<\([^>]*\)>;\1;g' \
! 1592: -e "s; ;§§;g" \
! 1593: -e "s;/;%%;g" \
! 1594: -e "s;§§;${opt_S};g" \
! 1595: -e "s;%%;${opt_C};g"`
! 1596: eval "${var_uc}_N=\"\${val_N}\""
! 1597: ;;
! 1598: esac
! 1599: case "$opt_F" in
! 1600: *"%<${var_lc}>"* )
! 1601: val_C=`echo ":$val" | \
! 1602: sed -e 's/^://' \
! 1603: -e 's;\[\([^]]*\)\];;g' \
! 1604: -e 's;[^<]*<\([^>]*\)>[^<]*;\1;g' \
! 1605: -e "s; ;§§;g" \
! 1606: -e "s;/;%%;g" \
! 1607: -e "s;§§;${opt_S};g" \
! 1608: -e "s;%%;${opt_C};g"`
! 1609: eval "${var_uc}_C=\"\${val_C}\""
! 1610: ;;
! 1611: esac
! 1612: ;;
! 1613: esac
! 1614: done
! 1615:
! 1616: # create output string
! 1617: output=`echo ":$opt_F" |\
! 1618: sed -e "s/^://" \
! 1619: -e "s;%\\[ac\\];${AC_V};g" \
! 1620: -e "s;%{ac};${AC_N};g" \
! 1621: -e "s;%ac;${AC_N};g" \
! 1622: -e "s;%<ac>;${AC_C};g" \
! 1623: -e "s;%\\[ap\\];${AP_V};g" \
! 1624: -e "s;%{ap};${AP_N};g" \
! 1625: -e "s;%ap;${AP_N};g" \
! 1626: -e "s;%<ap>;${AP_C};g" \
! 1627: -e "s;%\\[at\\];${AT_V};g" \
! 1628: -e "s;%{at};${AT_N};g" \
! 1629: -e "s;%at;${AT_N};g" \
! 1630: -e "s;%<at>;${AT_C};g" \
! 1631: -e "s;%\\[sc\\];${SC_V};g" \
! 1632: -e "s;%{sc};${SC_N};g" \
! 1633: -e "s;%sc;${SC_N};g" \
! 1634: -e "s;%<sc>;${SC_C};g" \
! 1635: -e "s;%\\[sp\\];${SP_V};g" \
! 1636: -e "s;%{sp};${SP_N};g" \
! 1637: -e "s;%sp;${SP_N};g" \
! 1638: -e "s;%<sp>;${SP_C};g" \
! 1639: -e "s;%\\[st\\];${ST_V};g" \
! 1640: -e "s;%{st};${ST_N};g" \
! 1641: -e "s;%st;${ST_N};g" \
! 1642: -e "s;%<st>;${ST_C};g" \
! 1643: -e 's/\\\\n/^/g' |\
! 1644: tr '^' '\012'`
! 1645:
! 1646: # support lower/upper-case mapping
! 1647: if [ ".$opt_L" = .yes ]; then
! 1648: output=`util_lower "$output"`
! 1649: elif [ ".$opt_U" = .yes ]; then
! 1650: output=`util_upper "$output"`
! 1651: fi
! 1652:
! 1653: # display output string
! 1654: if [ ".$opt_n" = .yes ]; then
! 1655: echo . | awk '{ printf("%s", output); }' output="$output"
! 1656: else
! 1657: echo "$output"
! 1658: fi
! 1659:
! 1660: shtool_exit 0
! 1661: ;;
! 1662:
! 1663: path )
! 1664: ##
! 1665: ## path -- Deal with program paths
! 1666: ## Copyright (c) 1998-2008 Ralf S. Engelschall <rse@engelschall.com>
! 1667: ##
! 1668:
! 1669: namelist="$*"
! 1670:
! 1671: # check whether the test command supports the -x option
! 1672: if [ -x /bin/sh ] 2>/dev/null; then
! 1673: minusx="-x"
! 1674: else
! 1675: minusx="-r"
! 1676: fi
! 1677:
! 1678: # split path string
! 1679: paths="`echo $opt_p |\
! 1680: sed -e 's/^:/.:/' \
! 1681: -e 's/::/:.:/g' \
! 1682: -e 's/:$/:./' \
! 1683: -e 's/:/ /g'`"
! 1684:
! 1685: # SPECIAL REQUEST
! 1686: # translate forward to reverse path
! 1687: if [ ".$opt_r" = .yes ]; then
! 1688: if [ "x$namelist" = "x." ]; then
! 1689: rp='.'
! 1690: else
! 1691: rp=''
! 1692: for pe in `IFS="$IFS/"; echo $namelist`; do
! 1693: rp="../$rp"
! 1694: done
! 1695: fi
! 1696: echo $rp | sed -e 's:/$::'
! 1697: shtool_exit 0
! 1698: fi
! 1699:
! 1700: # SPECIAL REQUEST
! 1701: # strip out directory or base name
! 1702: if [ ".$opt_d" = .yes ]; then
! 1703: echo "$namelist" |\
! 1704: sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'
! 1705: shtool_exit 0
! 1706: fi
! 1707: if [ ".$opt_b" = .yes ]; then
! 1708: echo "$namelist" |\
! 1709: sed -e 's;.*/\([^/]*\)$;\1;'
! 1710: shtool_exit 0
! 1711: fi
! 1712:
! 1713: # MAGIC SITUATION
! 1714: # Perl Interpreter (perl)
! 1715: if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then
! 1716: rm -f $tmpfile >/dev/null 2>&1
! 1717: touch $tmpfile
! 1718: found=0
! 1719: pc=99
! 1720: for dir in $paths; do
! 1721: dir=`echo $dir | sed -e 's;/*$;;'`
! 1722: nc=99
! 1723: for name in perl perl5 miniperl; do
! 1724: if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then
! 1725: perl="$dir/$name"
! 1726: pv=`$perl -e 'printf("%.3f", $]);'`
! 1727: echo "$pv:$pc:$nc:$perl" >>$tmpfile
! 1728: found=1
! 1729: fi
! 1730: nc=`expr $nc - 1`
! 1731: done
! 1732: pc=`expr $pc - 1`
! 1733: done
! 1734: if [ $found = 1 ]; then
! 1735: perl="`cat $tmpfile | sort -r -u | sed -e 'q' | cut -d: -f4`"
! 1736: rm -f $tmpfile >/dev/null 2>&1
! 1737: echo "$perl"
! 1738: shtool_exit 0
! 1739: fi
! 1740: rm -f $tmpfile >/dev/null 2>&1
! 1741: shtool_exit 1
! 1742: fi
! 1743:
! 1744: # MAGIC SITUATION
! 1745: # C pre-processor (cpp)
! 1746: if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then
! 1747: echo >$tmpfile.c "#include <assert.h>"
! 1748: echo >>$tmpfile.c "Syntax Error"
! 1749: # 1. try the standard cc -E approach
! 1750: cpp="${CC-cc} -E"
! 1751: (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
! 1752: my_error=`grep -v '^ *+' $tmpfile.out`
! 1753: if [ ".$my_error" != . ]; then
! 1754: # 2. try the cc -E approach and GCC's -traditional-ccp option
! 1755: cpp="${CC-cc} -E -traditional-cpp"
! 1756: (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
! 1757: my_error=`grep -v '^ *+' $tmpfile.out`
! 1758: if [ ".$my_error" != . ]; then
! 1759: # 3. try a standalone cpp command in path and lib dirs
! 1760: for path in $paths /lib /usr/lib /usr/local/lib; do
! 1761: path=`echo $path | sed -e 's;/*$;;'`
! 1762: if [ $minusx "$path/cpp" ] && [ ! -d "$path/cpp" ]; then
! 1763: cpp="$path/cpp"
! 1764: break
! 1765: fi
! 1766: done
! 1767: if [ ".$cpp" != . ]; then
! 1768: (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
! 1769: my_error=`grep -v '^ *+' $tmpfile.out`
! 1770: if [ ".$my_error" != . ]; then
! 1771: # ok, we gave up...
! 1772: cpp=''
! 1773: fi
! 1774: fi
! 1775: fi
! 1776: fi
! 1777: rm -f $tmpfile >/dev/null 2>&1
! 1778: rm -f $tmpfile.c $tmpfile.out >/dev/null 2>&1
! 1779: if [ ".$cpp" != . ]; then
! 1780: echo "$cpp"
! 1781: shtool_exit 0
! 1782: fi
! 1783: shtool_exit 1
! 1784: fi
! 1785:
! 1786: # STANDARD SITUATION
! 1787: # iterate over names
! 1788: for name in $namelist; do
! 1789: # iterate over paths
! 1790: for path in $paths; do
! 1791: path=`echo $path | sed -e 's;/*$;;'`
! 1792: if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
! 1793: if [ ".$opt_s" != .yes ]; then
! 1794: echo "$path/$name"
! 1795: fi
! 1796: shtool_exit 0
! 1797: fi
! 1798: done
! 1799: done
! 1800:
! 1801: shtool_exit 1
! 1802: ;;
! 1803:
! 1804: esac
! 1805:
! 1806: shtool_exit 0
! 1807:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>