aboutsummaryrefslogtreecommitdiff
path: root/ports-mgmt/portmk/scripts/options.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ports-mgmt/portmk/scripts/options.sh')
-rw-r--r--ports-mgmt/portmk/scripts/options.sh293
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