newapkbuild.in 3.79 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 56 57 58
	if [ -z "$source" ] && [ -n "$sourceforge" ]; then
		source="http://downloads.sourceforge.net/$pn/$pn-$pv.tar.gz"
	fi

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

	# copy init.d scripts if requested
65 66 67 68 69
	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
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 132 133 134 135
		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__
136
	fi
Natanael Copa's avatar
Natanael Copa committed
137 138 139 140 141 142 143 144 145
	cat >>APKBUILD<<__EOF__
	make || return 1
}

__EOF__

	# create package() function
	cat >>APKBUILD<<__EOF__
package() {
146
	cd "\$_builddir"
Natanael Copa's avatar
Natanael Copa committed
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
	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__
162 163 164 165
}

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

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

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