18eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#!/usr/bin/ksh 28eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# 38b0d32acad8351a454c09b3149189fb331c64dfairaisr# Builds a Solaris IPS package called "valgrind" from the source 48b0d32acad8351a454c09b3149189fb331c64dfairaisr# directory. The Valgrind and VEX revisions are taken from that 58b0d32acad8351a454c09b3149189fb331c64dfairaisr# source directory and written to solaris/valgrind.p5m IPS manifest. 68eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# 78eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# Requires the following packages to be installed on Solaris 11: 88eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - data/xml-common (install first before any docbook ones!) 98eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - data/docbook/docbook-style-xsl 108eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - data/docbook/docbook-dtds 118eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - developer/build/autoconf 128eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - developer/build/automake-111 138eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - developer/debug/gdb 148eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - developer/gnu-binutils 158eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - developer/versioning/mercurial 168eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - system/header 178eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - and the latest developer/gcc package. 188eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# 198eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# Requires a pre-established IPS repository. 208eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# For example to create a file-based repository, do: 218eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - pkgrepo create $repo_uri 228eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# - pkgrepo set -s $repo_uri publisher/prefix=valgrind 238eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# 248eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 258b0d32acad8351a454c09b3149189fb331c64dfairaisrTMPDIR=/var/tmp/valgrind-build 268eb8bab992e3998c33770b0cdb16059a8b918a06sewardjSRCDIR=$TMPDIR/sources 278eb8bab992e3998c33770b0cdb16059a8b918a06sewardjINSTALLDIR=$TMPDIR/install 288eb8bab992e3998c33770b0cdb16059a8b918a06sewardjIPS_MANIFEST=solaris/valgrind.p5m 298eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 308eb8bab992e3998c33770b0cdb16059a8b918a06sewardjusage() { 318eb8bab992e3998c33770b0cdb16059a8b918a06sewardj echo "Usage:" 328b0d32acad8351a454c09b3149189fb331c64dfairaisr echo "build_solaris_package -p source_dir -s repo_uri [-r lint_repo_uri]" 338b0d32acad8351a454c09b3149189fb331c64dfairaisr echo "\t-p source_dir contains working copy of the Valgrind sources" 348eb8bab992e3998c33770b0cdb16059a8b918a06sewardj echo "\t-s repo_uri publishes to the repository located at the given URI" 358eb8bab992e3998c33770b0cdb16059a8b918a06sewardj echo "\t or file system path" 368eb8bab992e3998c33770b0cdb16059a8b918a06sewardj echo "\t-r lint_repo_uri location of lint reference repository" 378eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 388eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 398eb8bab992e3998c33770b0cdb16059a8b918a06sewardjfail() { 408eb8bab992e3998c33770b0cdb16059a8b918a06sewardj msg=$1 418eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 428eb8bab992e3998c33770b0cdb16059a8b918a06sewardj echo "\n$msg" 438b0d32acad8351a454c09b3149189fb331c64dfairaisr echo "Additional information could be found in directory $TMPDIR." 448eb8bab992e3998c33770b0cdb16059a8b918a06sewardj exit 1 458eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 468eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 478eb8bab992e3998c33770b0cdb16059a8b918a06sewardjremove_dirs() { 488eb8bab992e3998c33770b0cdb16059a8b918a06sewardj rm -rf $TMPDIR 498eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 508eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 518eb8bab992e3998c33770b0cdb16059a8b918a06sewardjcreate_dirs() { 528eb8bab992e3998c33770b0cdb16059a8b918a06sewardj mkdir -p $TMPDIR 538b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to create directory $TMPDIR." 548eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 558eb8bab992e3998c33770b0cdb16059a8b918a06sewardj mkdir -p $INSTALLDIR 568b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to create directory $INSTALLDIR." 578eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 588eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 598b0d32acad8351a454c09b3149189fb331c64dfairaisrexport_sources() { 608b0d32acad8351a454c09b3149189fb331c64dfairaisr printf "Exporting sources... " 618b0d32acad8351a454c09b3149189fb331c64dfairaisr svn export --quiet --ignore-externals $source_directory $SRCDIR \ 628b0d32acad8351a454c09b3149189fb331c64dfairaisr 2> $TMPDIR/svn-export-valgrind.log.stderr 638b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to export working copy from $source_directory." 648b0d32acad8351a454c09b3149189fb331c64dfairaisr svn export --quiet --ignore-externals $source_directory/VEX $SRCDIR/VEX \ 658b0d32acad8351a454c09b3149189fb331c64dfairaisr 2> $TMPDIR/svn-export-vex.log.stderr 668b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to export working copy from $source_directory/VEX." 678eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "done.\n" 688eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 698eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 708b0d32acad8351a454c09b3149189fb331c64dfairaisrmodify_ips_manifest() { 718b0d32acad8351a454c09b3149189fb331c64dfairaisr valgrind_rev=$( svn info $source_directory | grep Revision | sed -e 's/Revision: //' ) 728b0d32acad8351a454c09b3149189fb331c64dfairaisr vex_rev=$( svn info $source_directory/VEX | grep Revision | sed -e 's/Revision: //' ) 738eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 748b0d32acad8351a454c09b3149189fb331c64dfairaisr [[ -z $valgrind_rev ]] && fail "Failed to find Valgrind revision." 758b0d32acad8351a454c09b3149189fb331c64dfairaisr [[ -z $vex_rev ]] && fail "Failed to find VEX revision." 768b0d32acad8351a454c09b3149189fb331c64dfairaisr 778b0d32acad8351a454c09b3149189fb331c64dfairaisr echo "Valgrind revision: $valgrind_rev, VEX revision $vex_rev." 788b0d32acad8351a454c09b3149189fb331c64dfairaisr 798b0d32acad8351a454c09b3149189fb331c64dfairaisr sed -i -e "s/VVVVV-XXXX/${valgrind_rev}-${vex_rev}/" $SRCDIR/$IPS_MANIFEST 808eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 818eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 828eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_autogen() { 838eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "Creating autotools support files... " 848eb8bab992e3998c33770b0cdb16059a8b918a06sewardj ./autogen.sh > $TMPDIR/autogen.log.stdout 2> $TMPDIR/autogen.log.stderr 858b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to generate autotools support files." 868eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "done.\n" 878eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 888eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 898eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_configure() { 908eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "Running configure... " 918eb8bab992e3998c33770b0cdb16059a8b918a06sewardj ./configure CC='gcc -m64' CXX='g++ -m64' --prefix=/usr > $TMPDIR/configure.log 928b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to run configure." 938eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "done.\n" 948eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 958eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 968eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_make_docs() { 978eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "Making docs... " 988eb8bab992e3998c33770b0cdb16059a8b918a06sewardj make --directory=docs html-docs > $TMPDIR/make-docs.log.stdout 2> $TMPDIR/make-docs.log.stderr 998b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to make html-docs." 1008eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "done.\n" 1018eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 1028eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1038eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_make_man_pages() { 1048eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "Making man pages... " 1058eb8bab992e3998c33770b0cdb16059a8b918a06sewardj make --directory=docs man-pages > $TMPDIR/make-man-pages.log.stdout 2> $TMPDIR/make-man-pages.log.stderr 1068b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to make man-pages." 1078eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "done.\n" 1088eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 1098eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1108eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_make() { 1118eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "Running make... " 1128eb8bab992e3998c33770b0cdb16059a8b918a06sewardj make --quiet > $TMPDIR/make.log 1138b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to run make." 1148eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "done.\n" 1158eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 1168eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1178eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_make_install() { 1188eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "Running 'make install'... " 1198eb8bab992e3998c33770b0cdb16059a8b918a06sewardj make --quiet install DESTDIR=$INSTALLDIR > $TMPDIR/make-install.log 1208b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to run 'make install'." 1218eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1228eb8bab992e3998c33770b0cdb16059a8b918a06sewardj cp AUTHORS COPYING* NEWS NEWS.old README* $INSTALLDIR/usr/share/doc/valgrind 1238b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to copy additional files to $INSTALLDIR." 1248eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1258eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "done.\n" 1268eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 1278eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1288eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_pkglint() { 1298eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "Running pkglint... " 1308eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pkglint -c $TMPDIR/lint-cache -r $lint_repo_uri $SRCDIR/$IPS_MANIFEST > $TMPDIR/pkglint.log 1318b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "pkglint failed." 1328eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "done.\n" 1338eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 1348eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1358eb8bab992e3998c33770b0cdb16059a8b918a06sewardjpublish_package() { 1368eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "Publishing package... " 1378eb8bab992e3998c33770b0cdb16059a8b918a06sewardj pkgsend publish -s $repo_uri -d $INSTALLDIR $SRCDIR/solaris/valgrind.p5m > $TMPDIR/pkgsend.log 1388b0d32acad8351a454c09b3149189fb331c64dfairaisr (( $? != 0 )) && fail "Failed to publish the package." 1398eb8bab992e3998c33770b0cdb16059a8b918a06sewardj printf "done.\n" 1408eb8bab992e3998c33770b0cdb16059a8b918a06sewardj} 1418eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1428b0d32acad8351a454c09b3149189fb331c64dfairaisrwhile getopts "p:r:s:" args; do 1438eb8bab992e3998c33770b0cdb16059a8b918a06sewardj case $args in 1448b0d32acad8351a454c09b3149189fb331c64dfairaisr p) 1458b0d32acad8351a454c09b3149189fb331c64dfairaisr source_directory=$OPTARG 1468eb8bab992e3998c33770b0cdb16059a8b918a06sewardj ;; 1478eb8bab992e3998c33770b0cdb16059a8b918a06sewardj r) 1488eb8bab992e3998c33770b0cdb16059a8b918a06sewardj lint_repo_uri=$OPTARG 1498eb8bab992e3998c33770b0cdb16059a8b918a06sewardj ;; 1508b0d32acad8351a454c09b3149189fb331c64dfairaisr s) 1518b0d32acad8351a454c09b3149189fb331c64dfairaisr repo_uri=$OPTARG 1528b0d32acad8351a454c09b3149189fb331c64dfairaisr ;; 1538eb8bab992e3998c33770b0cdb16059a8b918a06sewardj *) 1548eb8bab992e3998c33770b0cdb16059a8b918a06sewardj usage 1558eb8bab992e3998c33770b0cdb16059a8b918a06sewardj exit 1 1568eb8bab992e3998c33770b0cdb16059a8b918a06sewardj ;; 1578eb8bab992e3998c33770b0cdb16059a8b918a06sewardj esac 1588eb8bab992e3998c33770b0cdb16059a8b918a06sewardjdone 1598eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1608b0d32acad8351a454c09b3149189fb331c64dfairaisrif [[ -z $source_directory ]]; then 1618b0d32acad8351a454c09b3149189fb331c64dfairaisr echo "No source directory specified.\n" 1628b0d32acad8351a454c09b3149189fb331c64dfairaisr usage 1638b0d32acad8351a454c09b3149189fb331c64dfairaisr exit 1 1648b0d32acad8351a454c09b3149189fb331c64dfairaisrfi 1658b0d32acad8351a454c09b3149189fb331c64dfairaisr 1668eb8bab992e3998c33770b0cdb16059a8b918a06sewardjif [[ -z $repo_uri ]]; then 1678eb8bab992e3998c33770b0cdb16059a8b918a06sewardj echo "No repo_uri specified.\n" 1688eb8bab992e3998c33770b0cdb16059a8b918a06sewardj usage 1698eb8bab992e3998c33770b0cdb16059a8b918a06sewardj exit 1 1708eb8bab992e3998c33770b0cdb16059a8b918a06sewardjfi 1718eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1728eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# Determine the lint repo_uri to use from the current 'solaris' one 1738eb8bab992e3998c33770b0cdb16059a8b918a06sewardj# if not specified explicitly. 1748eb8bab992e3998c33770b0cdb16059a8b918a06sewardjif [[ -z $lint_repo_uri ]]; then 1758eb8bab992e3998c33770b0cdb16059a8b918a06sewardj publisher=$( pkg publisher | grep solaris | tr -s ' ' ) 1768eb8bab992e3998c33770b0cdb16059a8b918a06sewardj if [[ $publisher == *sticky* ]]; then 1778eb8bab992e3998c33770b0cdb16059a8b918a06sewardj lint_repo_uri=$( echo "$publisher" | cut -d ' ' -f 6 ) 1788eb8bab992e3998c33770b0cdb16059a8b918a06sewardj else 1798eb8bab992e3998c33770b0cdb16059a8b918a06sewardj lint_repo_uri=$( echo "$publisher" | cut -d ' ' -f 5 ) 1808eb8bab992e3998c33770b0cdb16059a8b918a06sewardj fi 1818b0d32acad8351a454c09b3149189fb331c64dfairaisr [[ -z $lint_repo_uri ]] && fail "Failed to determine solaris IPS publisher." 1828eb8bab992e3998c33770b0cdb16059a8b918a06sewardj echo "lint_repo_uri determined as $lint_repo_uri" 1838eb8bab992e3998c33770b0cdb16059a8b918a06sewardjfi 1848eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1858eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1868eb8bab992e3998c33770b0cdb16059a8b918a06sewardjremove_dirs 1878eb8bab992e3998c33770b0cdb16059a8b918a06sewardjcreate_dirs 1888eb8bab992e3998c33770b0cdb16059a8b918a06sewardjcd $TMPDIR 1898eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 1908b0d32acad8351a454c09b3149189fb331c64dfairaisrexport_sources 1918b0d32acad8351a454c09b3149189fb331c64dfairaisrmodify_ips_manifest 1928eb8bab992e3998c33770b0cdb16059a8b918a06sewardjcd $SRCDIR 1938eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_autogen 1948eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_configure 1958eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_make_docs 1968eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_make_man_pages 1978eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_make 1988eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_make_install 1998eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2008eb8bab992e3998c33770b0cdb16059a8b918a06sewardjcd $TMPDIR 2018eb8bab992e3998c33770b0cdb16059a8b918a06sewardjrun_pkglint 2028eb8bab992e3998c33770b0cdb16059a8b918a06sewardjpublish_package 2038eb8bab992e3998c33770b0cdb16059a8b918a06sewardj 2048eb8bab992e3998c33770b0cdb16059a8b918a06sewardjremove_dirs 2058eb8bab992e3998c33770b0cdb16059a8b918a06sewardjreturn 0 206