OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Ralf S. Engelschall Root: /e/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-src Date: 09-Apr-2004 11:49:30 Branch: HEAD Handle: 2004040910492900 Modified files: openpkg-src/openpkg HISTORY openpkg.sh openpkg.spec Log: worked-off <prefix>/bin/openpkg frontend in order to provide better tool chain processing Summary: Revision Changes Path 1.158 +1 -0 openpkg-src/openpkg/HISTORY 1.7 +159 -108 openpkg-src/openpkg/openpkg.sh 1.313 +1 -1 openpkg-src/openpkg/openpkg.spec ____________________________________________________________________________ patch -p0 <<'@@ .' Index: openpkg-src/openpkg/HISTORY ============================================================================ $ cvs diff -u -r1.157 -r1.158 HISTORY --- openpkg-src/openpkg/HISTORY 8 Apr 2004 08:52:39 -0000 1.157 +++ openpkg-src/openpkg/HISTORY 9 Apr 2004 09:49:29 -0000 1.158 @@ -2,6 +2,7 @@ 2004 ==== +20040409 worked-off <prefix>/bin/openpkg frontend in order to provide better tool chain processing 20040408 fixed internal OPENPKG_TOOLS variable processing in <prefix>/bin/openpkg frontend 20040408 added workaround to BeeCrypt build to make sure /dev/audio and /dev/dsp are not used 20040407 upgraded to GNU shtool 2.0b2 @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/openpkg.sh ============================================================================ $ cvs diff -u -r1.6 -r1.7 openpkg.sh --- openpkg-src/openpkg/openpkg.sh 8 Apr 2004 08:52:39 -0000 1.6 +++ openpkg-src/openpkg/openpkg.sh 9 Apr 2004 09:49:29 -0000 1.7 @@ -30,26 +30,26 @@ ## command line parsing ## -# option defaults +# command line options defaults opt_prefix="" opt_tools="" opt_version=no opt_help=no -# iterate over argument line +# process command line options by iterating over arguments for opt do - case $opt in - -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;; + case "${opt}" in + -*=*) arg=`echo "${opt}" | sed 's/^[-_a-zA-Z0-9]*=//'` ;; *) arg='' ;; esac - case $opt in - -v|--version ) opt_version=yes ;; - -h|--help ) opt_help=yes ;; - --prefix=* ) opt_prefix="$arg" ;; - --tools=* ) opt_tools="$arg" ;; - -* ) echo "openpkg:ERROR: Invalid command-line option \"$opt\"." 1>&2 - echo "openpkg:ERROR: Run \"$0 --help\" for list of valid options" 1>&2; exit 1 ;; + case "${opt}" in + -v|--version ) opt_version=yes; shift ;; + -h|--help ) opt_help=yes; shift ;; + --prefix=* ) opt_prefix="${arg}"; shift ;; + --tools=* ) opt_tools="${arg}"; shift ;; + -* ) echo "openpkg:ERROR: Invalid command-line option \"${opt}\"." 1>&2 + echo "openpkg:ERROR: Run \"${0} --help\" for list of valid options" 1>&2; exit 1 ;; * ) break ;; esac done @@ -59,89 +59,88 @@ ## # determine path to OpenPKG instance -if [ ".$opt_prefix" != . ]; then - OPENPKG_PREFIX="$opt_prefix" -fi -if [ ".$OPENPKG_PREFIX" = . ]; then - OPENPKG_PREFIX="@l_prefix@" -fi -if [ ! -f "$OPENPKG_PREFIX/bin/openpkg" ]; then - echo "openpkg:ERROR: no OpenPKG instance found under \"$OPENPKG_PREFIX\"" 1>&2 +openpkg_prefix="@l_prefix@" +if [ ".${OPENPKG_PREFIX}" != . ]; then + openpkg_prefix="${OPENPKG_PREFIX}" +fi +if [ ".${opt_prefix}" != . ]; then + openpkg_prefix="${opt_prefix}" +fi +if [ -x "${openpkg_prefix}/bin/openpkg" -a -x "${openpkg_prefix}/libexec/openpkg/rpm" ]; then + # OpenPKG 2.0 and higher + true +elif [ -f "${openpkg_prefix}/bin/rpm" -a -x "${openpkg_prefix}/lib/openpkg/rpm" ]; then + # OpenPKG 1.x + echo "openpkg:ERROR: OpenPKG 1.x instance found under \"${openpkg_prefix}\" (not supported)" 1>&2 + exit 1 +else + echo "openpkg:ERROR: no OpenPKG instance found under \"${openpkg_prefix}\"" 1>&2 exit 1 fi # allow convenient all-in-one specification of OpenPKG Tool Chain locations -if [ ".$opt_tool" != . ]; then - OPENPKG_TOOLS="$opt_tools" +# (assuming the filesystem layout of an uninstalled OpenPKG Tool Chain) +openpkg_tools="${OPENPKG_TOOLS}" +openpkg_tools_cmdpath="${OPENPKG_TOOLS_CMDPATH}" +openpkg_tools_apipath="${OPENPKG_TOOLS_APIPATH}" +if [ ".${opt_tool}" != . ]; then + openpkg_tools="${opt_tools}" fi -if [ ".$OPENPKG_TOOLS" != . -a ".$OPENPKG_TOOLS_CMDPATH" = . ]; then - OPENPKG_TOOLS_CMDPATH="$OPENPKG_TOOLS/cmd:@" +if [ ".${openpkg_tools}" != . -a ".${openpkg_tools_cmdpath}" = . ]; then + openpkg_tools_cmdpath="${openpkg_tools}/cmd:@" fi -if [ ".$OPENPKG_TOOLS" != . -a ".$OPENPKG_TOOLS_APIPATH" = . ]; then - OPENPKG_TOOLS_APIPATH="$OPENPKG_TOOLS/api:@" +if [ ".${openpkg_tools}" != . -a ".${openpkg_tools_apipath}" = . ]; then + openpkg_tools_apipath="${openpkg_tools}/api:@" fi # determine path to OpenPKG Tool Chain commands -cmdpath="$OPENPKG_PREFIX/libexec/openpkg" -if [ -d "$OPENPKG_PREFIX/libexec/openpkg-tools" ]; then +cmdpath="${openpkg_prefix}/libexec/openpkg" +if [ -d "${openpkg_prefix}/libexec/openpkg-tools" ]; then # openpkg-tools package overrides - cmdpath="$OPENPKG_PREFIX/libexec/openpkg-tools:$cmdpath" + cmdpath="${openpkg_prefix}/libexec/openpkg-tools:${cmdpath}" fi -if [ ".$OPENPKG_TOOLS_CMDPATH" != . ]; then +if [ ".${openpkg_tools_cmdpath}" != . ]; then # user supplied path overrides - cmdpath=`echo "$OPENPKG_TOOLS_CMDPATH" | sed -e "s;@;$cmdpath;"` + cmdpath=`echo "${openpkg_tools_cmdpath}" | sed -e "s;@;${cmdpath};"` fi -OPENPKG_TOOLS_CMDPATH=`echo "$cmdpath" | sed -e 's/::/:/g' -e 's/^://' -e 's/:$//'` +openpkg_tools_cmdpath=`echo "${cmdpath}" | sed -e 's/::/:/g' -e 's/^://' -e 's/:$//'` # determine path to OpenPKG Tool Chain API apipath="" -if [ -d "$OPENPKG_PREFIX/lib/openpkg-tools" ]; then +if [ -d "${openpkg_prefix}/lib/openpkg-tools" ]; then # openpkg-tools package overrides - apipath="$OPENPKG_PREFIX/lib/openpkg-tools:$apipath" + apipath="${openpkg_prefix}/lib/openpkg-tools:${apipath}" fi -if [ ".$OPENPKG_TOOLS_APIPATH" != . ]; then +if [ ".${openpkg_tools_apipath}" != . ]; then # user supplied path overrides - apipath=`echo "$OPENPKG_TOOLS_APIPATH" | sed -e "s;@;$apipath;"` + apipath=`echo "${openpkg_tools_apipath}" | sed -e "s;@;${apipath};"` fi -OPENPKG_TOOLS_APIPATH=`echo "$apipath" | sed -e 's/::/:/g' -e 's/^://' -e 's/:$//'` - -# export variables into environment -export OPENPKG_PREFIX -export OPENPKG_TOOLS -export OPENPKG_TOOLS_CMDPATH -export OPENPKG_TOOLS_APIPATH +openpkg_tools_apipath=`echo "${apipath}" | sed -e 's/::/:/g' -e 's/^://' -e 's/:$//'` ## -## determine command details and execute command appropriately +## execute stand-alone option commands in advance ## -# command line sanity check -if [ $# -eq 0 ]; then - echo "openpkg:ERROR: Invalid command-line arguments." 1>&2 - echo "openpkg:ERROR: Run \"$0 --help\" for list of valid arguments." 1>&2 - exit 1 -fi - # implement stand-alone "--help" option -if [ ".$opt_help" = .yes ]; then - release=`$OPENPKG_PREFIX/libexec/openpkg/rpm --eval '%{l_openpkg_release}'` +if [ ".${opt_help}" = .yes ]; then + release=`${openpkg_prefix}/libexec/openpkg/rpm --eval '%{l_openpkg_release}'` echo "" - echo "This is $release <http://www.openpkg.org/>" + echo "This is ${release} <http://www.openpkg.org/>" echo "Cross-Platform Unix Software Packaging Facility" echo "" echo "Copyright (c) 2000-2004 The OpenPKG Project <http://www.openpkg.org/>" echo "Copyright (c) 2000-2004 Ralf S. Engelschall <[EMAIL PROTECTED]>" echo "Copyright (c) 2000-2004 Cable & Wireless <http://www.cw.com/>" echo "" - echo "The command \"@l_prefix@/bin/openpkg\" is the official command-line" + echo "The command \"${openpkg_prefix}/bin/openpkg\" is the official command-line" echo "execution frontend of the OpenPKG tool chain. Its usage is:" echo "" - echo " \$ @l_prefix@/bin/openpkg [<option> ...] \\" + echo " \$ ${openpkg_prefix}/bin/openpkg [<option> ...] \\" echo " <command> [<command-option> ...] [<command-argument> ...]" echo "" echo "where <option> is one of the following global options:" - echo " -p, --prefix sets the OpenPKG instance prefix (also: \$OPENPKG_PREFIX)" - echo " -t, --tools sets the OpenPKG tool chain prefix (also: \$OPENPKG_TOOLS)" + echo " -p, --prefix sets the OpenPKG instance prefix (also: \${OPENPKG_PREFIX})" + echo " -t, --tools sets the OpenPKG tool chain prefix (also: \${OPENPKG_TOOLS})" echo " -v, --version display OpenPKG version/release" echo " -h, --help display this usage help message" echo "" @@ -155,90 +154,142 @@ echo " lsync (provided by bootstrap package)" echo " man (provided by bootstrap package)" # install command intentionally left out in above display! + + # dynamically figure out add-on commands for cmd in rpm rpmbuild rpm2cpio rpm-config uuid rc lsync man install; do - id=`echo "$cmd" | sed -e 's/-/_/g'` - eval "__cmd_seen_$id=yes" + id=`echo "${cmd}" | sed -e 's/-/_/g'` + eval "__cmd_seen_${id}=yes" done - OIFS="$IFS"; IFS=":" - for dir in $OPENPKG_TOOLS_CMDPATH; do - IFS="$OIFS" - for cmd in `cd $dir 2>&1 && echo *`; do - cmd=`echo "$cmd" | sed -e 's/\.sh$//' -e 's/\.pl$//' -e 's;^;X;' -e 's;^X\([a-zA-Z][a-zA-Z0-9_-]*\)$;\1;' -e 's;^X.*$;;'` - if [ ".$cmd" != . ]; then - id=`echo "$cmd" | sed -e 's/-/_/g' -e 's/\.sh$//' -e 's/\.pl$//'` - eval "seen=\$__cmd_seen_$id" - if [ ".$seen" != .yes ]; then - echo "$cmd" | awk '{ printf(" %-15s (provided by addon package)\n", $0); }' + OIFS="${IFS}"; IFS=":" + for dir in ${openpkg_tools_cmdpath}; do + IFS="${OIFS}" + if [ ! -d ${dir} ]; then + continue + fi + for cmd in `cd ${dir} 2>/dev/null && echo *`; do + is_cmd=`echo "${cmd}" | sed -e 's/\.sh$//' -e 's/\.pl$//' \ + -e 's/^/X/' -e 's/^X\([a-z][a-zA-Z0-9_-]*\)$/\1/' -e 's/^X.*$//'` + if [ ".${is_cmd}" != . ]; then + if [ -f ${dir}/${cmd} ]; then + id=`echo "${cmd}" | sed -e 's/-/_/g' -e 's/\.sh$//' -e 's/\.pl$//'` + eval "seen=\$__cmd_seen_${id}" + if [ ".${seen}" != .yes ]; then + echo "${cmd}" | awk '{ printf(" %-15s (provided by add-on package)\n", $0); }' + fi fi fi done done - IFS="$OIFS" + IFS="${OIFS}" echo "" echo "where <command-option> and <command-argument> are <command> specific" - echo "options and arguments. Run \"@l_prefix@/bin/openpkg <command> --help\"" - echo "and \"@l_prefix@/bin/openpkg man <command>\" for more details." + echo "options and arguments. Run \"${openpkg_prefix}/bin/openpkg <command> --help\"" + echo "and \"${openpkg_prefix}/bin/openpkg man <command>\" for more details." echo "" exit 0 fi # implement stand-alone "--version" option -if [ ".$opt_version" = .yes ]; then - release=`$OPENPKG_PREFIX/libexec/openpkg/rpm --eval '%{l_openpkg_release}'` - version=`$OPENPKG_PREFIX/libexec/openpkg/rpm -q --qf '%{version}' openpkg` - echo "$release ($version)" +if [ ".${opt_version}" = .yes ]; then + release=`${openpkg_prefix}/libexec/openpkg/rpm --eval '%{l_openpkg_release}'` + version=`${openpkg_prefix}/libexec/openpkg/rpm -q --qf '%{version}' openpkg` + echo "${release} (${version})" exit 0 fi -# iterate over all command directories -cmd="$1" +## +## determine command details and execute command appropriately +## + +# command line sanity check +if [ ${#} -eq 0 ]; then + echo "openpkg:ERROR: Invalid command-line arguments." 1>&2 + echo "openpkg:ERROR: Run \"${openpkg_prefix}/bin/openpkg --help\" for list of valid arguments." 1>&2 + exit 1 +fi + +# search command by iterating over all command directories +cmd="${1}" shift cmd_path="" cmd_shell="" -OIFS="$IFS"; IFS=":" -for dir in $OPENPKG_TOOLS_CMDPATH; do - IFS="$OIFS" - if [ -x "$dir/$cmd" ]; then +cmd_stack="${OPENPKG_TOOLS_CMDSTACK}" +OIFS="${IFS}"; IFS=":" +for dir in ${openpkg_tools_cmdpath}; do + IFS="${OIFS}" + + # skip (currently) not existing directory + if [ ! -d ${dir} ]; then + continue + fi + + # check for various command implementations + if [ -x ${dir}/${cmd} ]; then # found executable stand-alone binary - cmd_path="$dir/$cmd" + cmd_path="${dir}/${cmd}" cmd_shell="" - break - elif [ -f "$dir/$cmd.sh" ]; then + elif [ -f ${dir}/${cmd}.sh ]; then # found non-executable Bourne-Shell script - cmd_path="$dir/$cmd.sh" - cmd_shell="$OPENPKG_PREFIX/lib/openpkg/bash" - break - elif [ -f "$dir/$cmd.pl" ]; then + cmd_path="${dir}/${cmd}.sh" + cmd_shell="${openpkg_prefix}/lib/openpkg/bash" + elif [ -f ${dir}/${cmd}.pl ]; then # found non-executable Perl script - cmd_path="$dir/$cmd.pl" - if [ -x "$OPENPKG_PREFIX/bin/perl" ]; then - cmd_shell="$OPENPKG_PREFIX/bin/perl" + cmd_path="${dir}/${cmd}.pl" + if [ -x ${openpkg_prefix}/bin/perl ]; then + cmd_shell="${openpkg_prefix}/bin/perl" else - cmd_shell=`$OPENPKG_PREFIX/lib/openpkg/shtool path -m perl 2>&1` - if [ ".$cmd_shell" = . ]; then - echo "openpkg:ERROR: No Perl interpreter found in \$PATH" 1>&2 + cmd_shell=`${openpkg_prefix}/lib/openpkg/shtool path -m perl 2>&1` + if [ ".${cmd_shell}" = . ]; then + echo "openpkg:ERROR: No Perl interpreter found in \${PATH}" 1>&2 exit 1 fi fi - # provide module include path(s) to API - OIFS="$IFS"; IFS=":" - for dir2 in $OPENPKG_TOOLS_APIPATH; do - IFS="$OIFS" - cmd_shell="$cmd_shell -I$dir2" + # provide Perl module include path(s) to API + OIFS="${IFS}"; IFS=":" + for dir2 in ${openpkg_tools_apipath}; do + IFS="${OIFS}" + if [ ! -d ${dir2} ]; then + continue + fi + cmd_shell="${cmd_shell} -I${dir2}" done - IFS="$OIFS" + IFS="${OIFS}" + else + # command not found, continue searching + continue + fi + + # check whether to use this found command or to continue searching + # for next command implementation in sequence (in order to support + # flexible nested command wrapping) + cmd_last=`echo "${cmd_stack}" | sed -e 's;:.*$;;'` + if [ ".${cmd_last}" = ".${cmd}" ]; then + # we were last command on stack, so pop us from call + # stack and continue searching for next implementation + cmd_stack=`echo "${cmd_stack}" | sed -e 's;^[^:][^:]*:*;;'` + continue + else + # last command on stack was different, so stop + # searching because we found the implementation break fi done -IFS="$OIFS" -if [ ".$cmd_path" = . ]; then - echo "openpkg:ERROR: No such command \"$cmd\" found in command path" 1>&2 - echo "openpkg:ERROR: ($OPENPKG_TOOLS_CMDPATH)." 1>&2 - echo "openpkg:ERROR: Set \$OPENPKG_TOOLS_CMDPATH appropriately." 1>&2 - echo "openpkg:ERROR: Run \"$0 --help\" for list of valid commands." 1>&2 +IFS="${OIFS}" + +# sanity check search result +if [ ".${cmd_path}" = . ]; then + echo "openpkg:ERROR: No such command \"${cmd}\" found in command path" 1>&2 + echo "openpkg:ERROR: (${openpkg_tools_cmdpath})." 1>&2 + echo "openpkg:ERROR: Set \${OPENPKG_TOOLS_CMDPATH} appropriately." 1>&2 + echo "openpkg:ERROR: Run \"${openpkg_prefix}/bin/openpkg --help\" for list of valid commands." 1>&2 exit 1 fi +# export essential run-time information to command +export OPENPKG_TOOLS_CMDPROG="${0}" +export OPENPKG_TOOLS_CMDNAME="${cmd}" +export OPENPKG_TOOLS_CMDSTACK=`echo "${OPENPKG_TOOLS_CMDSTACK}" | sed -e 's;^\(.\);:\1;' -e "s;^;${cmd};"` + # execute command -eval "exec $cmd_shell $cmd_path \${1+\"[EMAIL PROTECTED]"}" +eval "exec ${cmd_shell} ${cmd_path} \${1+\"[EMAIL PROTECTED]"}" @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/openpkg.spec ============================================================================ $ cvs diff -u -r1.312 -r1.313 openpkg.spec --- openpkg-src/openpkg/openpkg.spec 8 Apr 2004 08:52:39 -0000 1.312 +++ openpkg-src/openpkg/openpkg.spec 9 Apr 2004 09:49:29 -0000 1.313 @@ -39,7 +39,7 @@ # o any cc(1) # the package version/release -%define V_openpkg 20040408 +%define V_openpkg 20040409 # the used software versions %define V_rpm 4.2.1 @@ . ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List [EMAIL PROTECTED]