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]