mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-07 16:06:09 +00:00
206 lines
5.6 KiB
Bash
Executable File
206 lines
5.6 KiB
Bash
Executable File
#!/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
|