|
|
#!/bin/bash
# --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: lib/sde-config/pkgsel2awk.sh # Copyright (C) 2006 - 2007 The OpenSDE Project # Copyright (C) 2004 - 2006 The T2 SDE Project # Copyright (C) 1998 - 2003 Clifford Wolf # # More information can be found in the files COPYING and README. # # 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; version 2 of the License. A copy of the # GNU General Public License can be found in the file COPYING. # --- SDE-COPYRIGHT-NOTE-END ---
# Convert a pkg selection rule into awk format #
# Example: # pkgsel X python # Result: ( / [^/]*\/python / ) { $1="X"; } # pkgsel "O perl/*" # Result: ( / perl\/[^/]* / ) { $1="O"; } # pkgsel_parse < config/${config}/pkgsel # Result: creates pkgsel.awk output # pkgsel include file # Result: continues processing file specified pkgsel_pattern() { local pattern= xpattern= local address=
for xpattern; do pattern="${xpattern#\!}" [ "$pattern" = "$xpattern" ]; neg=$? [ "${pattern}" = "${pattern//\//}" ] && pattern="*/$pattern" pattern="$( echo "$pattern" | sed \
-e 's,[^a-zA-Z0-9_/\*+\-\[\]],,g' \
-e 's,[/\.\+],\\\\&,g' \
-e 's,\*,[^/]*,g' )"
[ -z "$address" ] || address="$address &&"
if [ $neg -eq 0 ]; then address="$address( \$5 ~ \"^${pattern}\$\" )" else address="$address( \$5 !~ \"^${pattern}\$\" )" fi done echo "$address" }
pkgsel_parse() { local action patterlist local address first others
sed -e '/^#/d;' -e '/^[ \t]*$/d;' "$@" | while read action patternlist ; do case "$action" in [xX]) action='$1="X"' ;; [oO]) action='$1="O"' ;; -) action='next' ;; =) action='$1=def' ;; include) pkgsel_parse $patternlist continue ;; *) echo '{ exit; }' continue ;; esac
address=$( pkgsel_pattern "$patternlist" )
echo "{ if ( $address ) { $action; } }" done }
cat <<EOF { def=\$1 ; repo=\$4 ; pkg=\$5 ; \$5 = \$4 "/" \$5 ; \$4 = "placeholder" ; } EOF
pkgsel_parse "$@"
cat <<EOF { \$4=repo ; \$5=pkg ; print ; } EOF
|