diff options
author | crees <crees@FreeBSD.org> | 2012-06-09 17:01:38 +0800 |
---|---|---|
committer | crees <crees@FreeBSD.org> | 2012-06-09 17:01:38 +0800 |
commit | 408cf7e785361ff5caaa64de48af4d0e40f04a8e (patch) | |
tree | 367ad2522a651b918aa512aa5056a519c7ee35ee /Tools/scripts | |
parent | 3d89a3b92eb7c9b710c00c69ed51f208ecacdc04 (diff) | |
download | freebsd-ports-gnome-408cf7e785361ff5caaa64de48af4d0e40f04a8e.tar.gz freebsd-ports-gnome-408cf7e785361ff5caaa64de48af4d0e40f04a8e.tar.zst freebsd-ports-gnome-408cf7e785361ff5caaa64de48af4d0e40f04a8e.zip |
Support conversion of make.conf-style files.
The script is very cautious, and may miss some; checking the results by hand
is absolutely vital.
Diffstat (limited to 'Tools/scripts')
-rwxr-xr-x | Tools/scripts/options2ng.sh | 112 |
1 files changed, 91 insertions, 21 deletions
diff --git a/Tools/scripts/options2ng.sh b/Tools/scripts/options2ng.sh index f3c7809f7c2c..e4886b2b01b1 100755 --- a/Tools/scripts/options2ng.sh +++ b/Tools/scripts/options2ng.sh @@ -5,26 +5,96 @@ # This script makes a backup of the ports OPTIONS database and then converts # all of the saved files to the new format. -PORT_DBDIR=$(make -C /usr/ports/shells/bash -V PORT_DBDIR) - -tar cfz $(mktemp /tmp/optionsbackup.tar.gz.XXX) $PORT_DBDIR - -for optionsfile in $PORT_DBDIR/*/options -do if grep -q ^WITH $optionsfile ; then - options_read= - echo "Converting $optionsfile" - tmpfile=$(mktemp /tmp/optionsconvert.XXXXXXX) || exit 1 - grep '^[#_]' $optionsfile > $tmpfile - for option in $(sed -ne 's/^WITH_\([^=]*\)=true/\1/p' < $optionsfile) - do echo "OPTIONS_FILE_SET+=$option" >> $tmpfile - options_read="${options_read} $option" +usage() +{ + <<EOF cat +Usage: + +$0 -p + +Converts the ports OPTIONS database from WITH_/WITHOUT_ format to +OPTIONS_FILE_SET format. A backup tar archive is created and left in /tmp. + +$0 -f [filename] + +Converts filename (in WITH_/WITHOUT_ format, for example make.conf) into +OPTIONS_SET format. + +XXX The output must be checked; the script attempts to avoid changes that +make no sense, but some may slip through. To avoid nonsensical conversions +(such as WITH_*_VER) only WITH_ variables that are set to "true" or "yes" +(case-insensitive, with or without quotes) will be converted. + +EOF +} + +args=$(getopt pf: $*) +if [ $? -ne 0 ]; then + usage; + exit 2 +fi + +set -- $args + +case "$1" in +-p) + PORT_DBDIR=$(make -C /usr/ports/shells/bash -V PORT_DBDIR) + + tar cfz $(mktemp /tmp/optionsbackup.tar.gz.XXX) $PORT_DBDIR + + for optionsfile in $PORT_DBDIR/*/options + do if grep -q ^WITH $optionsfile ; then + options_read= + echo "Converting $optionsfile" + tmpfile=$(mktemp /tmp/optionsconvert.XXXXXXX) || exit 1 + grep '^[#_]' $optionsfile > $tmpfile + for option in $(sed -ne 's/^WITH_\([^=]*\)=true/\1/p' < $optionsfile) + do echo "OPTIONS_FILE_SET+=$option" >> $tmpfile + options_read="${options_read} $option" + done + for option in $(sed -ne 's/^WITHOUT_\([^=]*\)=true/\1/p' < $optionsfile) + do echo "OPTIONS_FILE_UNSET+=$option" >> $tmpfile + options_read="${options_read} $option" + done + echo "_FILE_COMPLETE_OPTIONS_LIST=$options_read" >> $tmpfile + mv $tmpfile $optionsfile + chmod 644 $optionsfile + fi done - for option in $(sed -ne 's/^WITHOUT_\([^=]*\)=true/\1/p' < $optionsfile) - do echo "OPTIONS_FILE_UNSET+=$option" >> $tmpfile - options_read="${options_read} $option" + ;; +-f) + filename=$2 + if [ ! -f $filename ] + then echo $filename does not exist! + exit 2 + fi + + tmpfile=$(mktemp /tmp/makeconfconvert.XXXXXXX) || exit 1 + + IFS=' +' + for line in $(cat $filename) + do if $(echo $line | grep -Eq '(PKGNG|DEBUG)') + then echo $line >> $tmpfile + else echo $line | sed -E \ + -e 's,^WITH_([^=]*)=[ ]*.?[TtYy][RrEe][UuSs][Ee]?.?,OPTIONS_SET+= \1,' \ + -e 's,^WITHOUT_([^=]*)=[ ]*.?[TtYy][RrEe][UuSs][Ee]?.?,OPTIONS_UNSET+= \1,' \ + >> $tmpfile + fi done - echo "_FILE_COMPLETE_OPTIONS_LIST=$options_read" >> $tmpfile - mv $tmpfile $optionsfile - chmod 644 $optionsfile - fi -done + + diff -yW 80 $filename $tmpfile + + <<EOF cat + +The results are stored in $tmpfile; please check it for +sanity and copy it back over the original file (remember to keep a backup +copy of the original file!) + +EOF + + ;; +*) + usage + ;; +esac |