#!/bin/sh # $FreeBSD$ # # Usage: cd /usr/src/contrib/jemalloc # ./FREEBSD-upgrade [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 https://github.com/jemalloc/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=__ gmake dist ) } do_diff() { ( cd ${work} find . -name '*.orig' -delete find . -name '*.rej' -delete 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