1234370Sjasone#!/bin/sh 2234370Sjasone# $FreeBSD$ 3234370Sjasone# 4234370Sjasone# Usage: cd /usr/src/contrib/jemalloc 5234370Sjasone# ./FREEBSD-upgrade <command> [args] 6234370Sjasone# 7234370Sjasone# At least the following ports are required when importing jemalloc: 8234370Sjasone# - devel/autoconf 9234370Sjasone# - devel/git 10234370Sjasone# - devel/gmake 11234370Sjasone# - textproc/docbook-xsl 12245869Sjasone# - textproc/libxslt 13234370Sjasone# 14234370Sjasone# The normal workflow for importing a new release is: 15234370Sjasone# 16234370Sjasone# cd /usr/src/contrib/jemalloc 17234370Sjasone# 18234370Sjasone# Merge local changes that were made since the previous import: 19234370Sjasone# 20234370Sjasone# ./FREEBSD-upgrade merge-changes 21234370Sjasone# ./FREEBSD-upgrade rediff 22234370Sjasone# 23234370Sjasone# Extract latest jemalloc release. 24234370Sjasone# 25234370Sjasone# ./FREEBSD-upgrade extract 26234370Sjasone# 27234370Sjasone# Fix patch conflicts as necessary, then regenerate diffs to update line 28234370Sjasone# offsets: 29234370Sjasone# 30234370Sjasone# ./FREEBSD-upgrade rediff 31234370Sjasone# ./FREEBSD-upgrade extract 32234370Sjasone# 33234370Sjasone# Do multiple buildworld/installworld rounds. If problems arise and patches 34234370Sjasone# are needed, edit the code in ${work} as necessary, then: 35234370Sjasone# 36234370Sjasone# ./FREEBSD-upgrade rediff 37234370Sjasone# ./FREEBSD-upgrade extract 38234370Sjasone# 39234370Sjasone# The rediff/extract order is important because rediff saves the local 40234370Sjasone# changes, then extract blows away the work tree and re-creates it with the 41234370Sjasone# diffs applied. 42234370Sjasone# 43234370Sjasone# Finally, to clean up: 44234370Sjasone# 45234370Sjasone# ./FREEBSD-upgrade clean 46234370Sjasone 47234370Sjasoneset -e 48234370Sjasone 49234370Sjasoneif [ ! -x "FREEBSD-upgrade" ] ; then 50234370Sjasone echo "Run from within src/contrib/jemalloc/" >&2 51234370Sjasone exit 1 52234370Sjasonefi 53234370Sjasone 54234370Sjasonesrc=`pwd` 55234370Sjasoneworkname="jemalloc.git" 56234370Sjasonework="${src}/../${workname}" # merge-changes expects ${workname} in "..". 57234370Sjasonechanges="${src}/FREEBSD-changes" 58234370Sjasone 59234370Sjasonedo_extract() { 60234370Sjasone local rev=$1 61234370Sjasone # Clone. 62234370Sjasone rm -rf ${work} 63234370Sjasone git clone git://canonware.com/jemalloc.git ${work} 64234370Sjasone ( 65234370Sjasone cd ${work} 66234370Sjasone if [ "x${rev}" != "x" ] ; then 67234370Sjasone # Use optional rev argument to check out a revision other than HEAD on 68234370Sjasone # master. 69234370Sjasone git checkout ${rev} 70234370Sjasone fi 71234370Sjasone # Apply diffs before generating files. 72234370Sjasone patch -p1 < "${src}/FREEBSD-diffs" 73234370Sjasone find . -name '*.orig' -delete 74234370Sjasone # Generate various files. 75234370Sjasone ./autogen.sh --enable-cc-silence --enable-dss --enable-xmalloc \ 76234543Sjasone --enable-utrace --with-xslroot=/usr/local/share/xsl/docbook \ 77234543Sjasone --with-private-namespace=__jemalloc_ 78234370Sjasone gmake dist 79234370Sjasone ) 80234370Sjasone} 81234370Sjasone 82234370Sjasonedo_diff() { 83234370Sjasone (cd ${work}; git add -A; git diff --cached) > FREEBSD-diffs 84234370Sjasone} 85234370Sjasone 86234370Sjasonecommand=$1 87234370Sjasoneshift 88234370Sjasonecase "${command}" in 89234370Sjasone merge-changes) # Merge local changes that were made since the previous import. 90234370Sjasone rev=`cat VERSION |tr 'g' ' ' |awk '{print $2}'` 91234370Sjasone # Extract code corresponding to most recent import. 92234370Sjasone do_extract ${rev} 93234370Sjasone # Compute local differences to the upstream+patches and apply them. 94234370Sjasone ( 95234370Sjasone cd .. 96234370Sjasone diff -ru -X ${src}/FREEBSD-Xlist ${workname} jemalloc > ${changes} || true 97234370Sjasone ) 98234370Sjasone ( 99234370Sjasone cd ${work} 100234370Sjasone patch -p1 < ${changes} 101234370Sjasone find . -name '*.orig' -delete 102234370Sjasone ) 103234370Sjasone # Update diff. 104234370Sjasone do_diff 105234370Sjasone ;; 106234370Sjasone extract) # Extract upstream sources, apply patches, copy to contrib/jemalloc. 107234370Sjasone rev=$1 108234370Sjasone do_extract ${rev} 109234370Sjasone # Delete existing files so that cruft doesn't silently remain. 110234370Sjasone rm -rf ChangeLog COPYING VERSION doc include src 111234370Sjasone # Copy files over. 112234370Sjasone tar cf - -C ${work} -X FREEBSD-Xlist . |tar xvf - 113234370Sjasone ;; 114234370Sjasone rediff) # Regenerate diffs based on working tree. 115234370Sjasone do_diff 116234370Sjasone ;; 117234370Sjasone clean) # Remove working tree and temporary files. 118234370Sjasone rm -rf ${work} ${changes} 119234370Sjasone ;; 120234370Sjasone *) 121234370Sjasone echo "Unsupported command: \"${command}\"" >&2 122234370Sjasone exit 1 123234370Sjasone ;; 124234370Sjasoneesac 125