#!/bin/sh # # pt - port maintainer/committer's helper # # should be used from port's directory, may be used from plain user # # usually used with single argument, just as make: # # pt [extract|patch|configure|make|install|clean] or, shorter: # pt [e|p|co|m|i|c] # # note that `pt clean' removes installed port (prefix/) as well as work/ # # pt init - makes skeleton for a new port # pt plist - generates plist out of installed port (i.e. after `pt i') # pt lint - runs portlint # # BUGS: # - Doesn't use mtree, so some ports will not install due to # incomplete directory hierarchy under prefix/, so you'll have to # make missing directories (mkdir -p prefix/...) before install # - Plist generation is good enough for most cases I've encountered, # but still generated plist should be carefully checked # WORK=work PORT1=`basename $PWD` if [ -e Makefile ]; then PORT2=`grep "^PORTNAME=" Makefile | awk '{print $NF}'` else PORT2="$PORT1" fi if [ "x$PREFIX" = "x" ]; then PREFIX="`pwd`/prefix" elif ! echo "$PREFIX" | grep ^/ >/dev/null; then PREFIX="`pwd`/$PREFIX" fi MAKEARGS="BATCH=1 WRKDIRPREFIX= DISTDIR=/usr/distfiles PREFIX=$PREFIX NO_MTREE=1 NO_PKG_REGISTER=1 INSTALL_AS_USER=1 CONFLICTS=1" #MAKEARGS="WRKDIRPREFIX= DISTDIR=/usr/distfiles PREFIX=$PREFIX NO_PKG_REGISTER=1 INSTALL_AS_USER=1" case "$1" in f|fetch) rm -f distinfo sudo make $MAKEARGS fetch make $MAKEARGS makesum ;; m|make) nice -n 10 make $MAKEARGS ;; rm|remake) rm -f work/.configure_done* work/.build_done* 2>/dev/null nice -n 10 make $MAKEARGS ;; e|extract) nice -n 10 make $MAKEARGS extract ;; p|patch) nice -n 10 make $MAKEARGS patch ;; co|configure) nice -n 10 make $MAKEARGS configure ;; i|install) mkdir -p prefix/bin mkdir -p prefix/etc mkdir -p prefix/include mkdir -p prefix/lib mkdir -p prefix/libexec mkdir -p prefix/share/pixmaps for i in 1 2 3 4 5 6 7 8 9; do mkdir -p prefix/man/man$i done nice -n 10 make $MAKEARGS install ;; test|check|regression-test) nice -n 10 make $MAKEARGS $1 ;; ri|reinstall) rm -rf $PREFIX rm -f $WORK/.build_done* rm -f $WORK/.install_done* pt i ;; c|clean) mv $PREFIX $PREFIX.xx 2>/dev/null mv $WORK $WORK.xx 2>/dev/null rm -rf $PREFIX.xx $WORK.xx ;; plist|dplist) nodocs=DOCSDIR if [ "$1" = "dplist" ]; then nodocs=sOmEtHiNgNoNeXiStInG fi ( find $PREFIX -mindepth 1 -type f -o -type l | sort | sed -e "s|${PREFIX}/||" | sed -e "s|lib/python[0-9]\.[0-9]/site-packages|%%PYTHON_SITELIBDIR%%|" | sed -e "s|lib/perl5/site_perl/[0-9]\.[0-9][0-9]*\.[0-9]|%%SITE_PERL%%|" | sed -e "/SITE_PERL/ s|mach|%%PERL_ARCH%%|" | sed -e "s|share/${PORT1}|%%DATADIR%%|" | sed -e "s|share/${PORT2}|%%DATADIR%%|" | sed -e "s|share/doc/${PORT1}|%%DOCSDIR%%|" | sed -e "s|share/doc/${PORT2}|%%DOCSDIR%%|" | grep -v "\.egg-info$" | grep -v "$nodocs" | grep -v "share/examples/${PORT1}" | grep -v "share/examples/${PORT2}" | grep -v "man/man" | cat; find $PREFIX -mindepth 1 -type d | sort -r | sed -e "s|${PREFIX}/||" | sed -e "s|lib/python[0-9]\.[0-9]/site-packages|%%PYTHON_SITELIBDIR%%|" | sed -e "s|lib/perl5/site_perl/[0-9]\.[0-9][0-9]*\.[0-9]|%%SITE_PERL%%|" | sed -e "/SITE_PERL/ s|mach|%%PERL_ARCH%%|" | sed -e "s|share/${PORT1}|%%DATADIR%%|" | sed -e "s|share/${PORT2}|%%DATADIR%%|" | sed -e "s|share/doc/${PORT1}|%%DOCSDIR%%|" | sed -e "s|share/doc/${PORT2}|%%DOCSDIR%%|" | grep -vE '^(bin|sbin|share|lib|libexec|etc|include|lib/python[0-9]\.[0-9]|include|%%PYTHON_SITELIBDIR%%)$' | awk '{print "@dirrm "$0}' ) | grep -v ' share/pixmaps' | grep -v ' libdata' | sed -e '/ share\/applications/ s|dirrm|&try|' | sed -e '/ share\/icons/ s|dirrm|&try|' | sed -e '/ share\/mime/ s|dirrm|&try|' | grep -v "$nodocs" | grep -v "share/examples/${PORT1}" | grep -v "share/examples/${PORT2}" | grep -v "share/doc$" | grep -v "share/examples$" | grep -v " man$" | grep -v 'man/man' | tee pkg-plist # share/pixmaps should not be in pkg-plist, while # share/applications should be dirrmtried ;; init) portname=`basename $PWD` cat >Makefile <<_END # New ports collection makefile for: $portname # Date created: `date "+%d %b %Y"` # Whom: Dmitry Marakasov # # \$FreeBSD$ # PORTNAME= $portname PORTVERSION= 0.0.0 CATEGORIES= #games MASTER_SITES= SF #DISTNAME= \${PORTNAME}-\${PORTVERSION}-src MAINTAINER= amdmi3@FreeBSD.org COMMENT= Empty comment #USE_BZIP2= yes #GNU_CONFIGURE= yes #USE_GMAKE= yes #USE_SDL= sdl mixer image ttf #USE_GL= gl glu #MAKE_JOBS_SAFE= yes #CONFIGURE_ENV= LDFLAGS="-L\${LOCALBASE}/lib" CPPFLAGS="-I\${LOCALBASE}/include" #WRKSRC= \${WRKDIR}/\${PORTNAME}-\${PORTVERSION} #PORTDOCS= README #OPTIONS= OPT1 "Desc1" on #.include #post-patch: # @\${REINPLACE_CMD} -e 's|SDL/|SDL11/|' \${WRKSRC}/src/ #.if !defined(NOPORTDOCS) #post-install: # \${MKDIR} \${DOCSDIR} #.for f in \${PORTDOCS} # \${INSTALL_DATA} \${WRKSRC}/\${f} \${DOCSDIR} #.endfor #.endif #.include .include _END (echo; echo "WWW: http://$portname.sourceforge.net/" )>> pkg-descr touch pkg-plist ;; lint) portlint -A ;; *) nice -n 10 make $MAKEARGS $1 ;; esac