prior to 3.0.0 release) as contrib/jemalloc, and integrate it into libc. The code being imported by this commit diverged from lib/libc/stdlib/malloc.c in March 2010, which means that a portion of the jemalloc 1.0.0 ChangeLog entries are relevant, as are the entries for all subsequent releases.
123 lines
3.1 KiB
Bash
Executable File
123 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
|
|
#
|
|
# 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
|