125 lines
3.1 KiB
Bash
Executable File
125 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# $FreeBSD$
|
|
#
|
|
# Usage: cd /usr/src/contrib/jemalloc
|
|
# ./FREEBSD-upgrade <command> [args]
|
|
#
|
|
# At least the following ports are required when importing jemalloc:
|
|
# - devel/autoconf
|
|
# - devel/git
|
|
# - devel/gmake
|
|
# - textproc/docbook-xsl
|
|
# - textproc/libxslt
|
|
#
|
|
# The normal workflow for importing a new release is:
|
|
#
|
|
# cd /usr/src/contrib/jemalloc
|
|
#
|
|
# Merge local changes that were made since the previous import:
|
|
#
|
|
# ./FREEBSD-upgrade merge-changes
|
|
# ./FREEBSD-upgrade rediff
|
|
#
|
|
# Extract latest jemalloc release.
|
|
#
|
|
# ./FREEBSD-upgrade extract
|
|
#
|
|
# Fix patch conflicts as necessary, then regenerate diffs to update line
|
|
# offsets:
|
|
#
|
|
# ./FREEBSD-upgrade rediff
|
|
# ./FREEBSD-upgrade extract
|
|
#
|
|
# Do multiple buildworld/installworld rounds. If problems arise and patches
|
|
# are needed, edit the code in ${work} as necessary, then:
|
|
#
|
|
# ./FREEBSD-upgrade rediff
|
|
# ./FREEBSD-upgrade extract
|
|
#
|
|
# The rediff/extract order is important because rediff saves the local
|
|
# changes, then extract blows away the work tree and re-creates it with the
|
|
# diffs applied.
|
|
#
|
|
# Finally, to clean up:
|
|
#
|
|
# ./FREEBSD-upgrade clean
|
|
|
|
set -e
|
|
|
|
if [ ! -x "FREEBSD-upgrade" ] ; then
|
|
echo "Run from within src/contrib/jemalloc/" >&2
|
|
exit 1
|
|
fi
|
|
|
|
src=`pwd`
|
|
workname="jemalloc.git"
|
|
work="${src}/../${workname}" # merge-changes expects ${workname} in "..".
|
|
changes="${src}/FREEBSD-changes"
|
|
|
|
do_extract() {
|
|
local rev=$1
|
|
# Clone.
|
|
rm -rf ${work}
|
|
git clone git://canonware.com/jemalloc.git ${work}
|
|
(
|
|
cd ${work}
|
|
if [ "x${rev}" != "x" ] ; then
|
|
# Use optional rev argument to check out a revision other than HEAD on
|
|
# master.
|
|
git checkout ${rev}
|
|
fi
|
|
# Apply diffs before generating files.
|
|
patch -p1 < "${src}/FREEBSD-diffs"
|
|
find . -name '*.orig' -delete
|
|
# Generate various files.
|
|
./autogen.sh --enable-cc-silence --enable-dss --enable-xmalloc \
|
|
--enable-utrace --with-xslroot=/usr/local/share/xsl/docbook \
|
|
--with-private-namespace=__jemalloc_
|
|
gmake dist
|
|
)
|
|
}
|
|
|
|
do_diff() {
|
|
(cd ${work}; git add -A; git diff --cached) > FREEBSD-diffs
|
|
}
|
|
|
|
command=$1
|
|
shift
|
|
case "${command}" in
|
|
merge-changes) # Merge local changes that were made since the previous import.
|
|
rev=`cat VERSION |tr 'g' ' ' |awk '{print $2}'`
|
|
# Extract code corresponding to most recent import.
|
|
do_extract ${rev}
|
|
# Compute local differences to the upstream+patches and apply them.
|
|
(
|
|
cd ..
|
|
diff -ru -X ${src}/FREEBSD-Xlist ${workname} jemalloc > ${changes} || true
|
|
)
|
|
(
|
|
cd ${work}
|
|
patch -p1 < ${changes}
|
|
find . -name '*.orig' -delete
|
|
)
|
|
# Update diff.
|
|
do_diff
|
|
;;
|
|
extract) # Extract upstream sources, apply patches, copy to contrib/jemalloc.
|
|
rev=$1
|
|
do_extract ${rev}
|
|
# Delete existing files so that cruft doesn't silently remain.
|
|
rm -rf ChangeLog COPYING VERSION doc include src
|
|
# Copy files over.
|
|
tar cf - -C ${work} -X FREEBSD-Xlist . |tar xvf -
|
|
;;
|
|
rediff) # Regenerate diffs based on working tree.
|
|
do_diff
|
|
;;
|
|
clean) # Remove working tree and temporary files.
|
|
rm -rf ${work} ${changes}
|
|
;;
|
|
*)
|
|
echo "Unsupported command: \"${command}\"" >&2
|
|
exit 1
|
|
;;
|
|
esac
|