#!/bin/sh # # build a PostgreSQL module based on PGXS for give list of supported major # versions # # Author: Dimitri Fontaine set -e action="$1" srcdir="$2" target="$3" opt="$4" die() { echo "`basename $0`: error: $*" >&2 exit 1 } prepare_env() { version=$1 vtarget=`echo $target | sed -e "s:%v:$version:g"` pgc="/usr/lib/postgresql/$version/bin/pg_config" [ -e "$pgc" ] || die "$pgc does not exit" } configure() { prepare_env $1 confopts=`echo $opt | sed -e "s:%v:$version:g"` mkdir -p $vtarget ( echo "calling configure in $vtarget" && cd $vtarget && $srcdir/configure $confopts PG_CONFIG="$pgc" ) } build() { prepare_env $1 cflags="`$pgc --cflags` `echo $opt | sed -e "s:%v:$version:g"`" mkdir -p $vtarget # if a Makefile was created by configure, use it, else the top level Makefile [ -f $vtarget/Makefile ] || makefile="-f $srcdir/Makefile" make -C $vtarget $makefile CFLAGS="$cflags" PG_CONFIG="$pgc" VPATH="$srcdir" } install() { prepare_env $1 package=`echo $opt | sed -e "s:%v:$version:g"` mkdir -p $vtarget # if a Makefile was created by configure, use it, else the top level Makefile [ -f $vtarget/Makefile ] || makefile="-f $srcdir/Makefile" make -C $vtarget $makefile install DESTDIR="$srcdir/debian/$package" PG_CONFIG="$pgc" VPATH="$srcdir" } clean() { prepare_env $1 # if a Makefile was created by configure, use it, else the top level Makefile [ -f $vtarget/Makefile ] || makefile="-f $srcdir/Makefile" [ -d $vtarget ] && make -C $vtarget clean $makefile PG_CONFIG="$pgc" VPATH="$srcdir" rm -rf $vtarget } versions() { [ -e /usr/share/postgresql-common/supported-versions ] || die "/usr/share/postgresql-common/supported-versions not found" [ -e $srcdir/debian/pgversions ] || die "$srcdir/debian/pgversions not found" for v in `/usr/share/postgresql-common/supported-versions` do grep -q "^$v" $srcdir/debian/pgversions && echo $v done } [ "$srcdir" ] || die "syntax: pg_buildext ..." [ -d $srcdir ] || die "no such directory '$srcdir'" for v in `versions` do case "$action" in "supported-versions") echo $v ;; configure|build|install|clean) [ "$target" ] || die "syntax: pg_buildext $action ..." # be verbose? $action $v ;; *) die "unsupported $action." ;; esac done exit 0 # POD follows here =head1 NAME pg_buildext - Build and install a PostgreSQL extension =head1 SYNOPSIS B I I I I =head1 DESCRIPTION B is a script that will build a PostgreSQL extension in a C way. It supports the B, B, B, and B actions, and will choose to build for the intersection of versions known in C (versions supported by the package) and in C (versions supported in this release). =head1 OPTIONS =over 4 =item B One of B, B, B, or B. =item B Where to find the extension sources, including the C subdirectory. (Usually C<$(CURDIR)>.) =item B The target directory where to build the sources, it will get created for you if it does not exist. If the B contains a C<%v> sign, it will get replaced by the specific version of PostgreSQL being built against. (Usually C.) =item B C<%v> signs in B will get replaced as in B. =over 4 =item B Options to pass to the I script. (Most PostgreSQL extensions do not have a configure script.) =item B Custom C options to use for the build. =item B Package name to install for. Make will be called with DESTDIR="I/debian/I". =item B B does not take extra options. =back =back =head1 USAGE As B invokes B for the B, B, and B actions, invocations from C (which is a makefile) should be prefixed with B<+> so the sub-makes can talk with the make jobserver. =head1 EXAMPLE build-stamp: +pg_buildext configure $(CURDIR) build-%v "--libdir=/usr/lib/postgresql/%v/lib --datadir=/usr/share/postgresql-%v-plsh" +pg_buildext build $(CURDIR) build-%v install: build +pg_buildext install $(CURDIR) build-%v postgresql-%v-plsh clean: +pg_buildext clean $(CURDIR) build-%v =head1 AUTHOR Dimitri Fontaine Ldim@tapoueh.orgE>, with extensions by Christoph Berg Lmyon@debian.orgE>.