summaryrefslogtreecommitdiffstats
path: root/contrib/jemalloc/FREEBSD-upgrade
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/jemalloc/FREEBSD-upgrade')
-rwxr-xr-xcontrib/jemalloc/FREEBSD-upgrade122
1 files changed, 122 insertions, 0 deletions
diff --git a/contrib/jemalloc/FREEBSD-upgrade b/contrib/jemalloc/FREEBSD-upgrade
new file mode 100755
index 0000000..0f48ffe
--- /dev/null
+++ b/contrib/jemalloc/FREEBSD-upgrade
@@ -0,0 +1,122 @@
+#!/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
+#
+# 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
+ 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
OpenPOWER on IntegriCloud