newapkbuild.in 3.61 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/bin/sh

# script to generate a new APKBUILD
# Copyright (c) 2009 Natanael Copa <natanael.copa@gmail.com>
#
# Distributed under GPL-2
#
# Depends on: busybox utilities, fakeroot, 
#

version=@VERSION@
sysconfdir=@sysconfdir@
datadir=@datadir@

prog=${0##*/}

17
# source $PACKAGER
Natanael Copa's avatar
Natanael Copa committed
18
for i in $sysconfdir/abuild.conf $HOME/.abuild/abuild.conf; do
19 20 21 22 23
	if [ -f "$i" ]; then
		. $i
	fi
done

24 25 26 27
error() {
	echo "$@" >&2
}

28 29 30 31
is_url() {
	case "$1" in
	http://*|ftp://*) return 0;;
	esac
32
	return 1
33 34 35
}

	
36 37
# create new aport from templates
newaport() {
38
	local newname="${1##*/}"
39 40
	local pn=${newname%-[0-9]*}
	local pv
41 42 43
	local source=
	is_url "$1" && source="$1"

44 45
	if [ "$pn" != "$newname" ]; then
		pv=${newname#$pn-}
46
		pv=${pv%.t*} #strip .tar.gz .tgz .tar.bz2 etc
47 48 49 50 51 52 53
	fi
	if [ -e "$pn"/APKBUILD ] && [ -z "$force" ]; then
		error "$pn/APKBUILD already exist"
		return 1
	fi
	mkdir -p "$pn"
	cd "$pn"
Natanael Copa's avatar
Natanael Copa committed
54 55

	# replace pkgver in $source
56
	if [ -n "$source" ]; then
57
		source=$(echo "$source" | sed "s/$pv/\$pkgver/g")
58
	fi
Natanael Copa's avatar
Natanael Copa committed
59 60

	# copy init.d scripts if requested
61 62 63 64 65
	if [ -n "$cpinitd" ]; then
		cp "$datadir"/sample.initd $pn.initd
		cp "$datadir"/sample.confd $pn.confd
		cp "$datadir"/sample.pre-install $pn.pre-install
		cp "$datadir"/sample.post-install $pn.post-install
Natanael Copa's avatar
Natanael Copa committed
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
		install="\$pkgname.pre-install \$pkgname.post-install"
		source="$source
	$pn.initd
	$pn.confd
	"
	fi

	# generate header with standard variables
	cat >APKBUILD<<__EOF__
# Contributor:${PACKAGER:+" "}${PACKAGER}
# Maintainer:${MAINTAINER:+" "}${MAINTAINER}
pkgname=$pn
pkgver=$pv
pkgrel=0
pkgdesc="$pkgdesc"
url="$url"
arch="all"
license="$license"
depends=
depends_dev=
makedepends="\$depends_dev"
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

	# 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()
	cat >>APKBUILD<<__EOF__
build() {
	cd "\$_builddir"
__EOF__
	if [ -x "$sdir"/configure ]; then
		cat >>APKBUILD<<__EOF__
	./configure --prefix=/usr \\
		--sysconfdir=/etc \\
		--mandir=/usr/share/man \\
		--infodir=/usr/share/info \\
		--localstatedir=/var \\
		|| return 1
__EOF__
132
	fi
Natanael Copa's avatar
Natanael Copa committed
133 134 135 136 137 138 139 140 141
	cat >>APKBUILD<<__EOF__
	make || return 1
}

__EOF__

	# create package() function
	cat >>APKBUILD<<__EOF__
package() {
142
	cd "\$_builddir"
Natanael Copa's avatar
Natanael Copa committed
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
	make DESTDIR="\$pkgdir" install || return 1
__EOF__
	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__
158 159 160 161
}

usage() {
	echo "$prog $version"
Natanael Copa's avatar
Natanael Copa committed
162
	echo "usage: $prog [-cfh] [-d DESC] [-l LICENSE] [-u URL] PKGNAME[-PKGVER]"
163 164
	echo "Options:"
	echo " -c  Copy a sample init.d, conf.d and install script to new directory"
Natanael Copa's avatar
Natanael Copa committed
165
	echo " -d  Set package description (pkgdesc) to DESC"
166 167
	echo " -f  Force even if directory already exist"
	echo " -h  Show this help"
Natanael Copa's avatar
Natanael Copa committed
168 169
	echo " -l  Set package license to LICENSE"
	echo " -u  Set package URL"
170 171 172 173
	echo ""
	exit 0
}

Natanael Copa's avatar
Natanael Copa committed
174
while getopts "cd:fhl:u:" opt; do
175 176
	case $opt in
		'c') cpinitd=1;;
Natanael Copa's avatar
Natanael Copa committed
177
		'd') pkgdesc="$OPTARG";;
178 179
		'f') force=1;;
		'h') usage;;
Natanael Copa's avatar
Natanael Copa committed
180 181
		'l') license="$OPTARG";;
		'u') url="$OPTARG";;
182 183 184 185 186 187 188 189 190
	esac
done
shift $(( $OPTIND - 1 ))

while [ $# -gt 0 ]; do 
	newaport $1 || exit 1
	shift
done