#!/bin/sh # # Script to generate a new APKBUILD # Copyright (c) 2009 Natanael Copa # # Distributed under GPL-2 # # Depends on: busybox utilities, fakeroot, # version=@VERSION@ sysconfdir=@sysconfdir@ datadir=@datadir@ prog=${0##*/} # Source $PACKAGER for i in $sysconfdir/abuild.conf $HOME/.abuild/abuild.conf; do if [ -f "$i" ]; then . $i fi done error() { echo "$@" >&2 } is_url() { case "$1" in http://*|https://*|ftp://*) return 0;; esac return 1 } # Build sections build_make() { cat >>APKBUILD<<__EOF__ make || return 1 __EOF__ } build_autotools() { cat >>APKBUILD<<__EOF__ ./configure --prefix=/usr \\ --sysconfdir=/etc \\ --mandir=/usr/share/man \\ --infodir=/usr/share/info \\ --localstatedir=/var \\ || return 1 make || return 1 __EOF__ } build_perl() { cat >>APKBUILD<<__EOF__ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1 make || return 1 __EOF__ } build_python() { cat >>APKBUILD<<__EOF__ python setup.py build || return 1 __EOF__ } # Package sections package_make() { cat >>APKBUILD<<__EOF__ make DESTDIR="\$pkgdir" install || return 1 rm -f "\$pkgdir"/usr/lib/*.la __EOF__ } package_autotools() { package_make } package_perl() { cat >>APKBUILD<<__EOF__ make DESTDIR="\$pkgdir" install || return 1 find "\$pkgdir" \\( -name perllocal.pod -o -name .packlist \\) -delete __EOF__ } package_python() { cat >>APKBUILD<<__EOF__ python setup.py install --prefix=/usr --root="\$pkgdir" || return 1 __EOF__ } # Create new aport from templates newaport() { local newname="${1##*/}" local pn=${newname%-[0-9]*} local pv local source= is_url "$1" && source="$1" if [ "$pn" != "$newname" ]; then pv=${newname#$pn-} pv=${pv%.t*} #strip .tar.gz .tgz .tar.bz2 etc fi if [ -z "$pkgname" ]; then pkgname=$pn fi if [ -e "$pkgname"/APKBUILD ] && [ -z "$force" ]; then error "$pkgname/APKBUILD already exist" return 1 fi mkdir -p "$pkgname" cd "$pkgname" if [ -z "$source" ] && [ -n "$sourceforge" ]; then source="http://downloads.sourceforge.net/$pn/$pn-$pv.tar.gz" fi if [ -z "$depends" ] &&[ "$buildtype" = "python" ]; then depends="python" fi if [ -z "$makedepends" ] &&[ "$buildtype" = "python" ]; then makedepends="python-dev" else makedepends="\$depends_dev" fi # Replace pkgver in $source if [ -n "$source" ]; then source=$(echo "$source" | sed "s/$pv/\$pkgver/g") fi # Copy init.d scripts if requested if [ -n "$cpinitd" ]; then cp "$datadir"/sample.initd $pkgname.initd cp "$datadir"/sample.confd $pkgname.confd cp "$datadir"/sample.pre-install $pkgname.pre-install cp "$datadir"/sample.post-install $pkgname.post-install install="\$pkgname.pre-install \$pkgname.post-install" source="$source $pkgname.initd $pkgname.confd " fi # Generate header with standard variables cat >APKBUILD<<__EOF__ # Contributor:${PACKAGER:+" "}${PACKAGER} # Maintainer:${MAINTAINER:+" "}${MAINTAINER} pkgname=$pkgname pkgver=$pv pkgrel=0 pkgdesc="$pkgdesc" url="$url" arch="all" license="$license" depends="$depends" depends_dev="" makedepends="$makedepends" install="$install" subpackages="\$pkgname-dev \$pkgname-doc" source="$source" __EOF__ abuild -f fetch unpack # Figure out the _builddir for i in src/*; do if [ -d "$i" ]; then sdir=$i _builddir=$(echo ${i#*/} | sed "s/$pv/\$pkgver/g") _builddir="\"\$srcdir\"/$_builddir" fi done echo "_builddir=$_builddir" >> APKBUILD # Check if its autotools if [ -z "$buildtype" ]; then if [ -x "$sdir"/configure ]; then buildtype="autotools" elif [ -r "$sdir"/Makefile.PL ] || [ "${pn#perl-}" != "$pn" ]; then buildtype="perl" elif [ -r "$sdir"/waf ]; then buildtype="waf" elif [ -d "$sdir"/cmake ]; then buildtype="cmake" elif [ -r "$sdir"/Makefile ]; then buildtype="make" elif [ -r "$sdir"/setup.py ]; then buildtype="python" fi fi # Create the prepare() template cat >>APKBUILD<<__EOF__ prepare() { local i cd "\$_builddir" for i in \$source; do case \$i in *.patch) msg \$i; patch -p1 -i "\$srcdir"/\$i || return 1;; esac done } __EOF__ # Create build() function cat >>APKBUILD<<__EOF__ build() { cd "\$_builddir" __EOF__ case "$buildtype" in make) build_make;; autotools) build_autotools;; perl) build_perl;; python) build_python;; esac cat >>APKBUILD<<__EOF__ } __EOF__ # Create package() function cat >>APKBUILD<<__EOF__ package() { cd "\$_builddir" __EOF__ case "$buildtype" in make) package_make;; autotools) package_autotools;; perl) package_perl;; python) package_python;; esac if [ -n "$cpinitd" ]; then cat >>APKBUILD<<__EOF__ install -m755 -D "\$srcdir"/\$pkgname.initd \\ "\$pkgdir"/etc/init.d/\$pkgname || return 1 install -m644 -D "\$srcdir"/\$pkgname.confd \\ "\$pkgdir"/etc/conf.d/\$pkgname || return 1 __EOF__ fi cat >>APKBUILD<<__EOF__ } __EOF__ abuild -f checksum } usage() { echo "$prog $version" echo "usage: $prog [-cfh] [-d DESC] [-l LICENSE] [-n NAME] [-u URL] PKGNAME[-PKGVER]|SRCURL" echo "Options:" echo " -a Create autotools (use ./configure ...)" echo " -c Copy a sample init.d, conf.d, and install script to new directory" echo " -d Set package description (pkgdesc) to DESC" echo " -f Force even if directory already exist" echo " -h Show this help" echo " -l Set package license to LICENSE" echo " -n Set package name to NAME" echo " -p Create perl package (Assume Makefile.PL is there)" echo " -y Create python package (Assume setup.py is there)" echo " -u Set package URL" echo " -s Use sourceforge source URL" echo "" exit 0 } while getopts "acd:fhl:n:pyu:s" opt; do case $opt in 'a') buildtype="autotools";; 'c') cpinitd=1;; 'd') pkgdesc="$OPTARG";; 'f') force=1;; 'h') usage;; 'l') license="$OPTARG";; 'n') pkgname="$OPTARG";; 'p') buildtype="perl";; 'y') buildtype="python";; 'u') url="$OPTARG";; 's') sourceforge=1;; esac done shift $(( $OPTIND - 1 )) while [ $# -gt 0 ]; do newaport $1 || exit 1 shift done