299 lines
7.1 KiB
Bash
299 lines
7.1 KiB
Bash
#!/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
|
|
|
|
OPTIONS_DIR="${OPTIONS_FILE%/*}"
|
|
if [ ! -d "$OPTIONS_DIR" ] && ! $MKDIR "$OPTIONS_DIR"; then
|
|
echo ">> config: Can't create $OPTIONS_DIR." 2>&1
|
|
return 1
|
|
fi
|
|
|
|
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
|