--- /dev/null
+#!/bin/sh
+# This is useful for debugging
+#set -x
+
+#### CHECKS
+if [ ! -f common-src/amanda.h ]; then
+ echo "Error: 'buildpkg' must be run from the root of an otherwise unused amanda source"
+ echo " directory." >&2
+ exit 1
+fi
+
+if [ ! -f configure ]; then
+ echo "Error: The source directory has not been autogen'd -- please download a source"
+ echo " distribution tarball or run ./autogen. You will need autoconf, automake,"
+ echo " and libtool to run autogen (but not to compile from a distribution tarball)."
+ exit 1
+fi
+
+# Until we get package revisioning in community.
+[ -f "PKG_REV" ] || echo "1" > PKG_REV
+
+pkg_root=packaging/sun-pkg
+get_version() {
+ # Get our version using substitute.pl
+ echo "%%VERSION%%" > ${pkg_root}/version.src
+ /opt/csw/bin/perl packaging/common/substitute.pl ${pkg_root}/version.src ${pkg_root}/version || exit 1
+ VERSION=`cat ${pkg_root}/version`
+ rm ${pkg_root}/version.src ${pkg_root}/version || exit 1
+}
+
+do_substitution() {
+ file_list="client/pkginfo \
+ client/preinstall \
+ client/postinstall \
+ client/postremove \
+ server/pkginfo \
+ server/preinstall \
+ server/postinstall \
+ server/postremove"
+ for file in ${file_list}; do
+ /opt/csw/bin/perl packaging/common/substitute.pl \
+ ${pkg_root}/${file}.src \
+ ${pkg_root}/${file} || exit 1
+ done
+ chmod ug+x ${pkg_root}/*/pre* ${pkg_root}/*/post*
+}
+
+do_build() {
+ # Run for each server and client package. .pkg files don't get whacked.
+ # $1 must be "client" or "server"
+ [ x"$1" = x"client" ] || [ x"$1" = x"server" ] || \
+ { echo "client or server not given" && exit 1; }
+ rm -rf ${INSTALL_DEST} ${PKG_DEST}
+ mkdir ${INSTALL_DEST} ${PKG_DEST} || exit 1
+ make distclean
+ echo "Running configure.."
+ CONF="$CONF \
+ STAR=/opt/csw/bin/star \
+ GNUTAR=/opt/csw/bin/gtar \
+ --quiet \
+ --with-user=amandabackup \
+ --with-group=disk \
+ --prefix=/${PREFIX} \
+ --exec-prefix=/${PREFIX} \
+ --sbindir=/${PREFIX}/sbin \
+ --sysconfdir=/${ETCDIR} \
+ --with-amandates=/${ETCDIR}/amandates \
+ --mandir=/${PREFIX}/share/man \
+ --with-amlibexecdir=/${amlibdir}/amanda \
+ --with-amperldir=/${amlibdir}/amanda/perl \
+ --localstatedir=/${LOCALSTATEDIR} \
+ --with-amdatadir=/${AMSTATEDIR} \
+ --with-gnutar-listdir=/${AMSTATEDIR}/gnutar-lists \
+ --with-index-server=localhost \
+ --with-tape-server=localhost \
+ --with-fqdn \
+ --with-bsd-security \
+ --with-bsdtcp-security \
+ --with-bsdudp-security \
+ --with-udpportrange=800,840 \
+ --with-tcpportrange=11000,11040 \
+ --with-low-tcpportrange=800,840 \
+ --with-ssh-security \
+ --with-debugging=/${DBGDIR} \
+ --with-assertions \
+ --with-readline \
+ --disable-installperms \
+ --disable-syntax-checks \
+ --disable-static"
+
+ # PKG_CONFIG_PATH was exported, so is in the environment.
+ ./configure CFLAGS="${CFLAGS}" \
+ CPPFLAGS="${CPPFLAGS}" \
+ LDFLAGS="${LDFLAGS}" \
+ GLIB_CFLAGS="${GLIB_CFLAGS}" \
+ GLIB_LIBS="${GLIB_LIBS}" \
+ GLIB_GENMARSHAL=glib-genmarshal \
+ GOBJECT_QUERY=gobject-query \
+ GLIB_MKENUMS=glib-mkenums \
+ ${CONF} || exit 1
+
+ echo "Building.."
+
+ # rpcgen should be run natively on solaris, linux generated XDR stubs
+ # are not compatible. Specially when being compiled in 64 bit mode.
+ # Ideally this should be part of Make.
+
+ (cd ndmp-src;rpcgen ndmp0.x;rpcgen ndmp2.x;rpcgen ndmp3.x;rpcgen ndmp4.x; rpcgen ndmp9.x)
+
+ make || exit 1
+ make DESTDIR=${INSTALL_DEST} install || exit 1
+
+ # the gnulib makefiles create $amlibdir/charset.alias in hopes of "merging"
+ # it with a similar file from other applications. This doesn't work with
+ # DESTDIR, and anyway Amanda doesn't need this kind of fanciness because it
+ # doesn't really use gettext. So we just kill the file. See bug 10955 for
+ # more detail.
+ rm -f ${INSTALL_DEST}/${amlibdir}/charset.alias
+
+ echo "Amanda Enterprise Edition - version ${VERSION}" > ${INSTALL_DEST}/${PREFIX}/amanda-release || exit 1
+}
+
+do_package() {
+ # First parameter is the subpkg, in all lower case.
+ subpkg=${1}
+ gnu_triplet=`/bin/sh ${src_dir}/config/config.guess`
+ # Some but not all solaris packages have arch-plat-os dependent depend
+ # files.
+ if [ -f ${src_dir}/${pkg_root}/${subpkg}/depend-${gnu_triplet} ]; then
+ # Move the arch-plat-os specific depend file to "depend"
+ mv ${src_dir}/${pkg_root}/${subpkg}/depend-${gnu_triplet} \
+ ${src_dir}/${pkg_root}/${subpkg}/depend || exit 1
+ # Delete extra depend-${gnu_triplet} files
+ rm ${src_dir}/${pkg_root}/${subpkg}/depend-*
+ fi
+ cp ${src_dir}/${pkg_root}/${subpkg}/* ${PKG_DEST} || exit 1
+ cd ${INSTALL_DEST} || exit 1
+
+ # amanda does not create /etc/amanda
+ mkdir -p ${AMSTATEDIR} || exit 1
+ mkdir -p ${ETCDIR}/amanda || exit 1
+
+ # Add the contents of 'pkgproto' along with all installed files to
+ # 'prototype'. pkgproto will generate file list for provided base
+ # directories including the base dir. Including base dir in the pkg should
+ # be avoided as the pkg installation will try to alter the base directory
+ # permissions and ownership per pkg settings if included.
+ cat "${PKG_DEST}/pkgproto" \
+ >> ${PKG_DEST}/prototype || exit 1
+ pkgproto $PREFIX >> ${PKG_DEST}/prototype || exit 1
+
+ # Using --disable-installperms creates installperms.sh, which this bit of
+ # perl will merge into the prototype. Note that this perl script is
+ # perl-5.4 compatible
+ cat > "${src_dir}/process_proto" <<'EOF'
+# make a hash from installperms
+open(INSTPERM, "<" . shift @ARGV) or die("open installperms.sh: $!");
+my %installperms = map {
+ my ($u, $g, $m, $fn) = ($_ =~ /^installperm "([^:"]+)(?:([^:"]+))?" "([^"]*)" "(.*)"/);
+ $fn =~ s{^/}{}; # pkgproto has files without the leading slash
+ ($fn, [ $u, $g, $m ]);
+} <INSTPERM>;
+# set user/group/mode from installperms, defaulting to amandabackup:disk
+open(PROTO, "<" . shift @ARGV) or die("open proto: $!");
+for my $line (<PROTO>) {
+ if ($line !~ /^[df]/) {
+ print $line;
+ next;
+ }
+ my ($type, $class, $file, $mode, $user, $group) = split(/ /, $line);
+ # default to amandabackup:disk, without changing mode
+ ($user, $group) = ( "amandabackup", "disk" );
+ if (exists $installperms{$file}) {
+ ($u, $g, $m) = @{$installperms{$file}};
+ $user = $u if $u;
+ $group = $g if $g;
+ $mode = $m if $m;
+ }
+ print "$type $class $file $mode $user $group\n";
+}
+EOF
+
+ perl "${src_dir}/process_proto" \
+ "${src_dir}/installperms.sh" \
+ "${PKG_DEST}/prototype" \
+ > "${PKG_DEST}/prototype~" || exit 1
+ mv "${PKG_DEST}/prototype~" "${PKG_DEST}/prototype"
+
+ # Look for installed files in ${INSTALL_DEST}, send package to ${PKG_DEST}
+ pkgmk -r ${INSTALL_DEST} -o -f ${PKG_DEST}/prototype -d ${PKG_DEST} \
+ || exit 1
+ # pkgtrans puts the package back in our src_dir, where I would expected
+ # it, and "translates" it into a .pkg file at the same time.
+
+ pkgtrans -s ${PKG_DEST} ${src_dir}/AMANamanda-${subpkg}-${VERSION}-${gnu_triplet}.pkg<<EOF
+
+EOF
+ cd ${src_dir} || exit 1
+
+}
+
+src_dir=`pwd`
+
+get_version
+do_substitution
+
+PKG_TMP=`pwd`/pkg_${VERSION}; export PKG_TMP
+INSTALL_DEST=${PKG_TMP}/install; export INSTALL_DEST
+PKG_DEST=${PKG_TMP}/pkg; export PKG_DEST
+
+# Explanation of solaris paths:
+# /opt/SUNWspro/*: Sun compiler, NOT USED FOR PACKAGING.
+# /opt/csw/*: blastwave.
+# /usr/ccs/*: sun compilation tools (ld, lex, yacc)
+# /usr/sfw/*: SunFreeware, sometimes. (solaris 10)
+# /usr/local/*: SunFreeware, othertimes. (solaris 8)
+
+# Not Absolute! Remember to prefix a "/" except in pkgproto.
+# sparc or intel
+arch=`uname -p`
+# 5.8 or 5.10
+os_rel=`uname -r`
+
+rm -rf ${PKG_TMP}
+mkdir ${PKG_TMP} || exit 1
+
+PATH=/opt/csw/bin:/usr/bin:/usr/sbin:/usr/ccs/bin;export PATH
+# Compile 32bit because csw perl is 32bit and native is too old.
+CFLAGS="-O2 -pipe -m32"; export CFLAGS
+CPPFLAGS="-I/opt/csw/include"; export CPPFLAGS
+PREFIX=opt/amanda; export PREFIX # Not absolute. Pkgprot needs this.
+amlibdir=${PREFIX}/lib # Not absolute
+LOCALSTATEDIR=var; export LOCALSTATEDIR
+AMSTATEDIR=${LOCALSTATEDIR}/lib/amanda; export AMSTATEDIR
+ETCDIR=etc; export ETCDIR
+DBGDIR=${LOCALSTATEDIR}/log; export DBGDIR
+# Each client and server and platform combination gets different compile options
+if [ "x${1}" = "xclient" -o "x${1}" = "x" ]; then
+ CC=/usr/sfw/bin/gcc
+ # Variables with spaces must be entered on the configure line separate from
+ # CONF to maintain quoting.
+ LDFLAGS="-L/usr/lib -R/usr/lib \
+ -L/opt/csw/lib -R/opt/csw/lib \
+ -Wl,-z,ignore"; export LDFLAGS
+ PKG_CONFIG_PATH="/usr/lib/pkgconfig"; export PKG_CONFIG_PATH
+ if [ "x$arch" = "xsparc" -a "x$os_rel" = "x5.10" ]; then
+ # Use explicit flags for GLIB, because pkgconfig provides flags
+ # for SunStudio compiler (not compatible with gcc).
+ GLIB_CFLAGS="-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include"; export GLIB_CFLAGS
+ GLIB_LIBS="-lglib-2.0 -lgobject-2.0 -lgthread-2.0"; export GLIB_LIBS
+ elif [ "x$arch" = "xi386" -a "x$os_rel" = "x5.10" ]; then
+ GLIB_CFLAGS="-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include"; export GLIB_CFLAGS
+ elif [ "x$arch" = "xsparc" -a "x$os_rel" = "x5.8" ]; then
+ # CSW glib2.0 flags for gcc. CSW compiles with Sunstudio, so some
+ # flags may not work
+ GLIB_CFLAGS="-I/opt/csw/include/glib-2.0 -I/opt/csw/lib/glib-2.0/include"; export GLIB_CFLAGS
+ GLIB_LIBS="-lglib-2.0 -lintl -lgobject-2.0 -lgthread-2.0"; export GLIB_LIBS
+ CC="/usr/local/bin/gcc"
+ fi
+ CONF="--with-amlibdir=/${amlibdir} \
+ --without-server \
+ --disable-s3-device \
+ CC=$CC \
+ PERL=/opt/csw/bin/perl"; export CONF
+
+ do_build "client"
+ do_package "client"
+fi
+
+if [ "x${1}" = "xserver" -o "x${1}" = "x" ]; then
+ LDFLAGS="-L/usr/lib -R/usr/lib \
+ -L/opt/csw/lib -R/opt/csw/lib \
+ -L/usr/sfw/lib \
+ -Wl,-z,ignore"; export LDFLAGS
+ PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib/pkgconfig:/opt/csw/lib/pkgconfig"; export PKG_CONFIG_PATH
+ if [ "x$arch" = "xsparc" -a "x$os_rel" = "x5.10" ]; then
+ # Use explicit flags for GLIB, because pkgconfig provides flags
+ # for SunStudio compiler (not compatible with gcc).
+ GLIB_CFLAGS="-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include"; export GLIB_CFLAGS
+ GLIB_LIBS="-lglib-2.0 -lgobject-2.0 -lgthread-2.0"; export GLIB_LIBS
+ elif [ "x$arch" = "xi386" -a "x$os_rel" = "x5.10" ]; then
+ GLIB_CFLAGS="-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include"; export GLIB_CFLAGS
+ GLIB_LIBS="-lglib-2.0 -lgobject-2.0 -lgthread-2.0"; export GLIB_LIBS
+ elif [ "x$arch" = "xsparc" -a "x$os_rel" = "x5.8" ]; then
+ msg="We don't support server on Solaris 5.8."
+ # if we were run with no arguments, then this is not an error, just a warning
+ if [ "x${1}" = "x" ]; then
+ echo "Note: $msg"
+ exit 0
+ else
+ echo "Error: $msg"
+ exit 1
+ fi
+ fi
+ CONF="--with-amlibdir=/${amlibdir} \
+ --enable-s3-device \
+ CC=/usr/sfw/bin/gcc \
+ PERL=/opt/csw/bin/perl \
+ MTX=/opt/csw/sbin/mtx" ; export CONF
+
+ do_build "server"
+ do_package "server"
+fi