aboutsummaryrefslogtreecommitdiff
path: root/solaris/build_solaris_package
diff options
context:
space:
mode:
Diffstat (limited to 'solaris/build_solaris_package')
-rwxr-xr-xsolaris/build_solaris_package205
1 files changed, 205 insertions, 0 deletions
diff --git a/solaris/build_solaris_package b/solaris/build_solaris_package
new file mode 100755
index 000000000..78396c423
--- /dev/null
+++ b/solaris/build_solaris_package
@@ -0,0 +1,205 @@
+#!/usr/bin/ksh
+#
+# Builds a Solaris IPS package called "valgrind" from the source
+# directory. The Valgrind and VEX revisions are taken from that
+# source directory and written to solaris/valgrind.p5m IPS manifest.
+#
+# Requires the following packages to be installed on Solaris 11:
+# - data/xml-common (install first before any docbook ones!)
+# - data/docbook/docbook-style-xsl
+# - data/docbook/docbook-dtds
+# - developer/build/autoconf
+# - developer/build/automake-111
+# - developer/debug/gdb
+# - developer/gnu-binutils
+# - developer/versioning/mercurial
+# - system/header
+# - and the latest developer/gcc package.
+#
+# Requires a pre-established IPS repository.
+# For example to create a file-based repository, do:
+# - pkgrepo create $repo_uri
+# - pkgrepo set -s $repo_uri publisher/prefix=valgrind
+#
+
+TMPDIR=/var/tmp/valgrind-build
+SRCDIR=$TMPDIR/sources
+INSTALLDIR=$TMPDIR/install
+IPS_MANIFEST=solaris/valgrind.p5m
+
+usage() {
+ echo "Usage:"
+ echo "build_solaris_package -p source_dir -s repo_uri [-r lint_repo_uri]"
+ echo "\t-p source_dir contains working copy of the Valgrind sources"
+ echo "\t-s repo_uri publishes to the repository located at the given URI"
+ echo "\t or file system path"
+ echo "\t-r lint_repo_uri location of lint reference repository"
+}
+
+fail() {
+ msg=$1
+
+ echo "\n$msg"
+ echo "Additional information could be found in directory $TMPDIR."
+ exit 1
+}
+
+remove_dirs() {
+ rm -rf $TMPDIR
+}
+
+create_dirs() {
+ mkdir -p $TMPDIR
+ (( $? != 0 )) && fail "Failed to create directory $TMPDIR."
+
+ mkdir -p $INSTALLDIR
+ (( $? != 0 )) && fail "Failed to create directory $INSTALLDIR."
+}
+
+export_sources() {
+ printf "Exporting sources... "
+ svn export --quiet --ignore-externals $source_directory $SRCDIR \
+ 2> $TMPDIR/svn-export-valgrind.log.stderr
+ (( $? != 0 )) && fail "Failed to export working copy from $source_directory."
+ svn export --quiet --ignore-externals $source_directory/VEX $SRCDIR/VEX \
+ 2> $TMPDIR/svn-export-vex.log.stderr
+ (( $? != 0 )) && fail "Failed to export working copy from $source_directory/VEX."
+ printf "done.\n"
+}
+
+modify_ips_manifest() {
+ valgrind_rev=$( svn info $source_directory | grep Revision | sed -e 's/Revision: //' )
+ vex_rev=$( svn info $source_directory/VEX | grep Revision | sed -e 's/Revision: //' )
+
+ [[ -z $valgrind_rev ]] && fail "Failed to find Valgrind revision."
+ [[ -z $vex_rev ]] && fail "Failed to find VEX revision."
+
+ echo "Valgrind revision: $valgrind_rev, VEX revision $vex_rev."
+
+ sed -i -e "s/VVVVV-XXXX/${valgrind_rev}-${vex_rev}/" $SRCDIR/$IPS_MANIFEST
+}
+
+run_autogen() {
+ printf "Creating autotools support files... "
+ ./autogen.sh > $TMPDIR/autogen.log.stdout 2> $TMPDIR/autogen.log.stderr
+ (( $? != 0 )) && fail "Failed to generate autotools support files."
+ printf "done.\n"
+}
+
+run_configure() {
+ printf "Running configure... "
+ ./configure CC='gcc -m64' CXX='g++ -m64' --prefix=/usr > $TMPDIR/configure.log
+ (( $? != 0 )) && fail "Failed to run configure."
+ printf "done.\n"
+}
+
+run_make_docs() {
+ printf "Making docs... "
+ make --directory=docs html-docs > $TMPDIR/make-docs.log.stdout 2> $TMPDIR/make-docs.log.stderr
+ (( $? != 0 )) && fail "Failed to make html-docs."
+ printf "done.\n"
+}
+
+run_make_man_pages() {
+ printf "Making man pages... "
+ make --directory=docs man-pages > $TMPDIR/make-man-pages.log.stdout 2> $TMPDIR/make-man-pages.log.stderr
+ (( $? != 0 )) && fail "Failed to make man-pages."
+ printf "done.\n"
+}
+
+run_make() {
+ printf "Running make... "
+ make --quiet > $TMPDIR/make.log
+ (( $? != 0 )) && fail "Failed to run make."
+ printf "done.\n"
+}
+
+run_make_install() {
+ printf "Running 'make install'... "
+ make --quiet install DESTDIR=$INSTALLDIR > $TMPDIR/make-install.log
+ (( $? != 0 )) && fail "Failed to run 'make install'."
+
+ cp AUTHORS COPYING* NEWS NEWS.old README* $INSTALLDIR/usr/share/doc/valgrind
+ (( $? != 0 )) && fail "Failed to copy additional files to $INSTALLDIR."
+
+ printf "done.\n"
+}
+
+run_pkglint() {
+ printf "Running pkglint... "
+ pkglint -c $TMPDIR/lint-cache -r $lint_repo_uri $SRCDIR/$IPS_MANIFEST > $TMPDIR/pkglint.log
+ (( $? != 0 )) && fail "pkglint failed."
+ printf "done.\n"
+}
+
+publish_package() {
+ printf "Publishing package... "
+ pkgsend publish -s $repo_uri -d $INSTALLDIR $SRCDIR/solaris/valgrind.p5m > $TMPDIR/pkgsend.log
+ (( $? != 0 )) && fail "Failed to publish the package."
+ printf "done.\n"
+}
+
+while getopts "p:r:s:" args; do
+ case $args in
+ p)
+ source_directory=$OPTARG
+ ;;
+ r)
+ lint_repo_uri=$OPTARG
+ ;;
+ s)
+ repo_uri=$OPTARG
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+if [[ -z $source_directory ]]; then
+ echo "No source directory specified.\n"
+ usage
+ exit 1
+fi
+
+if [[ -z $repo_uri ]]; then
+ echo "No repo_uri specified.\n"
+ usage
+ exit 1
+fi
+
+# Determine the lint repo_uri to use from the current 'solaris' one
+# if not specified explicitly.
+if [[ -z $lint_repo_uri ]]; then
+ publisher=$( pkg publisher | grep solaris | tr -s ' ' )
+ if [[ $publisher == *sticky* ]]; then
+ lint_repo_uri=$( echo "$publisher" | cut -d ' ' -f 6 )
+ else
+ lint_repo_uri=$( echo "$publisher" | cut -d ' ' -f 5 )
+ fi
+ [[ -z $lint_repo_uri ]] && fail "Failed to determine solaris IPS publisher."
+ echo "lint_repo_uri determined as $lint_repo_uri"
+fi
+
+
+remove_dirs
+create_dirs
+cd $TMPDIR
+
+export_sources
+modify_ips_manifest
+cd $SRCDIR
+run_autogen
+run_configure
+run_make_docs
+run_make_man_pages
+run_make
+run_make_install
+
+cd $TMPDIR
+run_pkglint
+publish_package
+
+remove_dirs
+return 0