diff options
Diffstat (limited to 'ports-mgmt/portmk/scripts/options.sh')
-rw-r--r-- | ports-mgmt/portmk/scripts/options.sh | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/ports-mgmt/portmk/scripts/options.sh b/ports-mgmt/portmk/scripts/options.sh new file mode 100644 index 000000000000..b8aa38349e8f --- /dev/null +++ b/ports-mgmt/portmk/scripts/options.sh @@ -0,0 +1,293 @@ +#!/bin/sh -e +# +# Copyright (c) 2004 Oliver Eikemeier. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright notice +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the author nor the names of its contributors may be +# used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# $FreeBSD$ +# +# MAINTAINER= eik@FreeBSD.org +# +# These variables are referenced and must be exported from the Makefile: +# +# CURDIR +# OBJDIR +# MASTERDIR +# OPTIONS_MASTER +# OPTIONS_OVERRIDE +# OPTIONS_FILE +# OPTIONS_CMD +# PKGNAME +# + +# utilities + +LOCALBASE="${LOCALBASE:-/usr/local}" + +AWK=/usr/bin/awk +CAT=/bin/cat +CHMOD=/bin/chmod +CP=/bin/cp +CUT=/usr/bin/cut +DIALOG=/usr/bin/dialog +EXPR=/bin/expr +FETCH=/usr/bin/fetch +GREP=/usr/bin/grep +LS=/bin/ls +MKDIR='/bin/mkdir -p' +MKTEMP=/usr/bin/mktemp +MV=/bin/mv +REALPATH=/bin/realpath +RM=/bin/rm +SED=/usr/bin/sed +SETENV=/usr/bin/env +SORT=/usr/bin/sort +TR=/usr/bin/tr +WC=/usr/bin/wc + +# global constants + +### utility functions ### + +### +# do_create generates default options for a master (or override) options files +### + +do_create() +{ + local rc + + if [ -n "$OPTIONS_OVERRIDE" ]; then + OVERRIDEFILE="$OPTIONS_DEFAULT" + elif [ "$CURDIR" != `$REALPATH "$MASTERDIR"` ]; then + if [ -f "$CURDIR/options" ]; then + OVERRIDEFILE="$CURDIR/options" + elif [ -n "$PKGNAMESUFFIX" -a -f "$MASTERDIR/options.${PKGNAMESUFFIX#-}" ]; then + OVERRIDEFILE="$MASTERDIR/options.${PKGNAMESUFFIX#-}" + else + OVERRIDEFILE= + fi + else + OVERRIDEFILE= + fi + + if [ -n "$OPTIONS_MASTER" ]; then + MASTERFILE="$OPTIONS_MASTER" + elif [ -f "$MASTERDIR/options" ]; then + MASTERFILE="$MASTERDIR/options" + else + echo ">> makeconfig: Can't find $MASTERDIR/options" >&2 + return 1 + fi + + if [ -n "$OVERRIDEFILE" ]; then + SRCFILE="$OVERRIDEFILE" + else + SRCFILE="$MASTERFILE" + fi + + if ! TMP_OPTIONS=`$MKTEMP -q "$SRCFILE.XXXXXX"`; then + echo ">> makeconfig: Can't create temporary options file" + return 1 + fi + + $SED -e '/^##/,$d' "$SRCFILE" > "$TMP_OPTIONS" + + echo "## AUTOMATICALLY GENERATED FILE - DO NOT CHANGE ANYTHING BELOW THIS LINE ##" >> "$TMP_OPTIONS" + echo "# use \`make config' to edit the local configuration" >> "$TMP_OPTIONS" + echo "# use \`make makeconfig' to edit the defaults (MAINTAINER only)" >> "$TMP_OPTIONS" + echo >> "$TMP_OPTIONS" + + if $OPTIONS_CMD -p "default" -M "$MASTERFILE" -O "$OVERRIDEFILE" -o >> "$TMP_OPTIONS"; then + $MV -f "$TMP_OPTIONS" "$SRCFILE" + $CHMOD a+r "$SRCFILE" + else + $RM -f "$TMP_OPTIONS" + fi + + return $rc +} + +### +# do_delete removes a saved configuration +### + +do_delete() +{ + local rc + + $RM -f "$OPTIONS_FILE" + + return $rc +} + +### +# do_edit edits a custom configuration +### + +do_edit() +{ + local rc + + if [ -n "$OPTIONS_OVERRIDE" ]; then + OVERRIDE="$OPTIONS_DEFAULT" + elif [ "$CURDIR" != `$REALPATH "$MASTERDIR"` ]; then + if [ -f "$CURDIR/options" ]; then + OVERRIDE="$CURDIR/options" + elif [ -n "$PKGNAMESUFFIX" -a -f "$MASTERDIR/options.${PKGNAMESUFFIX#-}" ]; then + OVERRIDE="$MASTERDIR/options.${PKGNAMESUFFIX#-}" + else + OVERRIDE= + fi + else + OVERRIDE= + fi + + if [ -n "$OPTIONS_MASTER" ]; then + MASTER="$OPTIONS_MASTER" + elif [ -f "$MASTERDIR/options" ]; then + MASTER="$MASTERDIR/options" + else + echo ">> makeconfig: Can't find $MASTERDIR/options" >&2 + return 1 + fi + + TMP_OPTIONS=`$MKTEMP -t options` + + $OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -e > "$TMP_OPTIONS" + + ${EDITOR:-/usr/bin/vi} "$TMP_OPTIONS" + + TMP_OPTIONS_FILE=`$MKTEMP -q "$OPTIONS_FILE.XXXXXX"` + echo "## AUTOMATICALLY GENERATED FILE - DO NOT EDIT ##" > "$TMP_OPTIONS_FILE" + $OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -t "$TMP_OPTIONS" -o >> "$TMP_OPTIONS_FILE" + $RM -f "$TMP_OPTIONS" + + $MV -f "$TMP_OPTIONS_FILE" "$OPTIONS_FILE" + $CHMOD a+r "$OPTIONS_FILE" + + return $rc +} + +### +# do_graphical displays a menu to generate a custom configuration +### + +do_graphical() +{ + local rc + + if [ -n "$OPTIONS_OVERRIDE" ]; then + OVERRIDE="$OPTIONS_DEFAULT" + elif [ "$CURDIR" != `$REALPATH "$MASTERDIR"` ]; then + if [ -f "$CURDIR/options" ]; then + OVERRIDE="$CURDIR/options" + elif [ -n "$PKGNAMESUFFIX" -a -f "$MASTERDIR/options.${PKGNAMESUFFIX#-}" ]; then + OVERRIDE="$MASTERDIR/options.${PKGNAMESUFFIX#-}" + else + OVERRIDE= + fi + else + OVERRIDE= + fi + + if [ -n "$OPTIONS_MASTER" ]; then + MASTER="$OPTIONS_MASTER" + elif [ -f "$MASTERDIR/options" ]; then + MASTER="$MASTERDIR/options" + else + echo ">> makeconfig: Can't find $MASTERDIR/options" >&2 + return 1 + fi + + TMP_OPTIONS=`$MKTEMP -t options` + + DIALOGRC=`$OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -d` + + /bin/sh -c "$DIALOG --checklist \"Options for $PKGNAME\" 21 70 15 $DIALOGRC 2>\"$TMP_OPTIONS\"" + + #TMP_OPTIONS_FILE=`$MKTEMP -q "$OPTIONS_FILE.XXXXXX"` + #echo "## AUTOMATICALLY GENERATED FILE - DO NOT EDIT ##" > "$TMP_OPTIONS_FILE" + #$OPTIONS_CMD -p "$PKGNAME" -M "$MASTER" -O "$OVERRIDE" -g "$OPTIONS_FILE" -t "$TMP_OPTIONS" -o >> "$TMP_OPTIONS_FILE" + $CAT "$TMP_OPTIONS" + + $RM -f "$TMP_OPTIONS" + #$MV -f "$TMP_OPTIONS_FILE" "$OPTIONS_FILE" + + return $rc +} + +### +# do_list lists the current configuration +### + +do_list() +{ + local rc + + return $rc +} + +### +# main +### + +opt_create=false +opt_delete=false +opt_edit=false +opt_graphical=false +opt_list=false + +while getopts "cdegl" opt; do + case "$opt" in + c) opt_create=true;; + d) opt_delete=true;; + e) opt_edit=true;; + g) opt_graphical=true;; + l) opt_list=true;; + ?) echo "Usage: $0 -cdegl"; exit 1;; + esac +done + +shift $(($OPTIND-1)) + +$opt_create && + { do_create || exit 1; } + +$opt_delete && + { do_delete || exit 1; } + +$opt_edit && + { do_edit || exit 1; } + +$opt_graphical && + { do_graphical || exit 1; } + +$opt_list && + { do_list || exit 1; } + +exit 0 |