ports/116127: New port: ports-mgmt/lskobs - List supported knobs and options for a port
Charlie &
root at dargor.servebeer.com
Wed Sep 5 17:30:04 UTC 2007
>Number: 116127
>Category: ports
>Synopsis: New port: ports-mgmt/lskobs - List supported knobs and options for a port
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Sep 05 17:30:03 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator: Gabriel Linder
>Release: FreeBSD 6.2-STABLE i386
>Organization:
>Environment:
System: FreeBSD dargor.servebeer.com 6.2-STABLE FreeBSD 6.2-STABLE #0: Sat Sep 1 21:26:57 CEST 2007 root at dargor.servebeer.com:/usr/obj/usr/src/sys/SMP i386
>Description:
This is a tiny shell script that I wrote, which lists all knobs and options supported by a port and its dependencies, with color as an option (if CLICOLOR variable is set). I tested it with gnome2 metaport and portlint, everything seems ok. It requires portconf, from which I copied the Makefile to make this port.
>How-To-Repeat:
>Fix:
--- lsknobs begins here ---
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# lsknobs
# lsknobs/pkg-descr
# lsknobs/Makefile
# lsknobs/files
# lsknobs/files/pkg-message.in
# lsknobs/files/lsknobs.sh.in
#
echo c - lsknobs
mkdir -p lsknobs > /dev/null 2>&1
echo x - lsknobs/pkg-descr
sed 's/^X//' >lsknobs/pkg-descr << 'END-of-lsknobs/pkg-descr'
Xlsknobs is a simple sh(1) script designed to help configure
Xports knobs and options by listing them together with their
Xstatus (either enabled or not). It uses portconf for knobs.
END-of-lsknobs/pkg-descr
echo x - lsknobs/Makefile
sed 's/^X//' >lsknobs/Makefile << 'END-of-lsknobs/Makefile'
X# New ports collection makefile for: lsknobs
X# Date created: 5 Sep 2007
X# Whom: Gabriel Linder <linder.gabriel at gmail.com>
X#
X# $FreeBSD$
X#
X# This port is self contained in the files directory.
X#
X
XPORTNAME= lsknobs
XPORTVERSION= 1.0
XCATEGORIES= ports-mgmt
XMASTER_SITES= # none
XDISTFILES= # none
X
XMAINTAINER= linder.gabriel at gmail.com
XCOMMENT= Simple script to help configure ports knobs and options
X
XRUN_DEPENDS= ${LOCALBASE}/libexec/portconf:${PORTSDIR}/ports-mgmt/portconf
X
XNO_BUILD= yes
XSUB_FILES= pkg-message ${PORTNAME}.sh
X
XPLIST_FILES= sbin/${PORTNAME}
X
Xdo-fetch:
X @${DO_NADA}
X
Xdo-install:
X @${INSTALL_SCRIPT} ${WRKDIR}/${PORTNAME}.sh ${PREFIX}/sbin/${PORTNAME}
X @${CAT} ${PKGMESSAGE}
X
X.include <bsd.port.mk>
END-of-lsknobs/Makefile
echo c - lsknobs/files
mkdir -p lsknobs/files > /dev/null 2>&1
echo x - lsknobs/files/pkg-message.in
sed 's/^X//' >lsknobs/files/pkg-message.in << 'END-of-lsknobs/files/pkg-message.in'
XTypical use :
X
X 1) Choose a port
X# cd /usr/ports/editors/vim
X
X 2) Configure it, with its dependencies
X# lsknobs
X# make config-recursive
X (repeat these two steps until you agree with what is shown)
X
X 3) Install everything
X# make install clean
END-of-lsknobs/files/pkg-message.in
echo x - lsknobs/files/lsknobs.sh.in
sed 's/^X//' >lsknobs/files/lsknobs.sh.in << 'END-of-lsknobs/files/lsknobs.sh.in'
X#!/bin/sh
X#
X# Copyright (c) 2007, Gabriel Linder <linder.gabriel at gmail.com>
X# This work is based on a script written by Maxim Khitrov and posted
X# on FreeBSD Questions mailing list at Wed, 22 Aug 2007.
X#
X# Permission to use, copy, modify, and distribute this software for any
X# purpose with or without fee is hereby granted, provided that the above
X# copyright notice and this permission notice appear in all copies.
X#
X# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
X# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
X# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
X# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
X# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
X# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
X# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
X#
X
Xdir="`pwd`"
Xdir="`dirname $dir`"
Xdir="`dirname $dir`"
Xif [ "/usr/ports" != "$dir" ]
Xthen
X echo 1>&2 "This script must be run from a port directory !"
X exit 1
Xfi
X
Xif [ ! -z "$CLICOLOR" ] && [ -t 1 ]
Xthen
X NORMAL="\033[0;0m"
X BLACK="\033[1;30m"
X RED="\033[1;31m"
X GREEN="\033[1;32m"
X YELLOW="\033[1;33m"
X BLUE="\033[1;34m"
X MAGENTA="\033[1;35m"
X CYAN="\033[1;36m"
X WHITE="\033[1;37m"
Xelse
X NORMAL=""
X BLACK=""
X RED=""
X GREEN=""
X YELLOW=""
X BLUE=""
X MAGENTA=""
X CYAN=""
X WHITE=""
Xfi
X
Xprint_knob()
X{
X port="$1"
X knob="$2"
X if [ -z "`cd /usr/ports/$port && /usr/local/libexec/portconf | grep $knob`" ]
X then
X echo -e " $RED[KNOB]$NORMAL $WHITE$knob$NORMAL"
X else
X echo -e " $RED[KNOB]$NORMAL $MAGENTA(*)$NORMAL $BLACK$knob$NORMAL"
X fi
X}
X
Xprint_option()
X{
X port="$1"
X knob="$2"
X options="$3"
X pre="`echo $knob | cut -d _ -f 1`"
X if [ "$pre" = "WITH" ] || [ "$pre" = "WITHOUT" ]
X then
X opt="`echo $knob | sed s,${pre}_,,`"
X else
X opt="$knob"
X fi
X if [ -z "`echo $options | grep -Eho $opt=on`" ]
X then
X if [ -z "`echo $options | grep -Eho $opt=off`" ]
X then
X print_knob "$port" "$knob"
X else
X echo -e " $GREEN[OPTION]$NORMAL $WHITE$opt$NORMAL"
X fi
X else
X echo -e " $GREEN[OPTION]$NORMAL $MAGENTA(*)$NORMAL $BLACK$opt$NORMAL"
X fi
X}
X
Xports="`make missing` `pwd | sed s,/usr/ports/,,`"
Xfor port in $ports
Xdo
X knobs="`grep -Eho '(defined[:space:]*\([:space:]*.+[:space:]*\))|(^\.ifdef[:space:]*\([:space:]*.+[:space:]*\))|(^\.ifndef[:space:]*\([:space:]*.+[:space:]*\))' /usr/ports/$port/Makefile | sed -E 's,defined\(([^)]*)\),\1,g;s,\.ifdef\(([^)]*)\),\1,g;s,\.ifndef\(([^)]*)\),\1,g' | tr -d '&|!' | tr ' ' '\n' | grep -Eho '^[A-Z_0-9]+$' | sort | uniq`"
X if [ -z "$knobs" ]
X then
X continue
X fi
X echo "==> $port"
X options="`make showconfig | grep -Eho '^[:space:]*.+=(on|off)'`"
X for knob in $knobs
X do
X if [ -z "$options" ]
X then
X print_knob "$port" "$knob"
X else
X print_option "$port" "$knob" "$options"
X fi
X done
Xdone
END-of-lsknobs/files/lsknobs.sh.in
exit
--- lsknobs ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list