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} 63256823Sjasone git clone https://github.com/jemalloc/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. 75286911Sjasone ./autogen.sh --enable-cc-silence --enable-xmalloc --enable-utrace \ 76286911Sjasone --with-xslroot=/usr/local/share/xsl/docbook --with-private-namespace=__ \ 77286911Sjasone --with-lg-page-sizes=12,13,14,16 78234370Sjasone gmake dist 79234370Sjasone ) 80234370Sjasone} 81234370Sjasone 82234370Sjasonedo_diff() { 83286866Sjasone ( 84286866Sjasone cd ${work} 85286866Sjasone find . -name '*.orig' -delete 86286866Sjasone find . -name '*.rej' -delete 87286866Sjasone git add -A 88286866Sjasone git diff --cached 89286866Sjasone ) > FREEBSD-diffs 90234370Sjasone} 91234370Sjasone 92234370Sjasonecommand=$1 93234370Sjasoneshift 94234370Sjasonecase "${command}" in 95234370Sjasone merge-changes) # Merge local changes that were made since the previous import. 96234370Sjasone rev=`cat VERSION |tr 'g' ' ' |awk '{print $2}'` 97234370Sjasone # Extract code corresponding to most recent import. 98234370Sjasone do_extract ${rev} 99234370Sjasone # Compute local differences to the upstream+patches and apply them. 100234370Sjasone ( 101234370Sjasone cd .. 102234370Sjasone diff -ru -X ${src}/FREEBSD-Xlist ${workname} jemalloc > ${changes} || true 103234370Sjasone ) 104234370Sjasone ( 105234370Sjasone cd ${work} 106234370Sjasone patch -p1 < ${changes} 107234370Sjasone find . -name '*.orig' -delete 108234370Sjasone ) 109234370Sjasone # Update diff. 110234370Sjasone do_diff 111234370Sjasone ;; 112234370Sjasone extract) # Extract upstream sources, apply patches, copy to contrib/jemalloc. 113234370Sjasone rev=$1 114234370Sjasone do_extract ${rev} 115234370Sjasone # Delete existing files so that cruft doesn't silently remain. 116234370Sjasone rm -rf ChangeLog COPYING VERSION doc include src 117234370Sjasone # Copy files over. 118234370Sjasone tar cf - -C ${work} -X FREEBSD-Xlist . |tar xvf - 119234370Sjasone ;; 120234370Sjasone rediff) # Regenerate diffs based on working tree. 121234370Sjasone do_diff 122234370Sjasone ;; 123234370Sjasone clean) # Remove working tree and temporary files. 124234370Sjasone rm -rf ${work} ${changes} 125234370Sjasone ;; 126234370Sjasone *) 127234370Sjasone echo "Unsupported command: \"${command}\"" >&2 128234370Sjasone exit 1 129234370Sjasone ;; 130234370Sjasoneesac 131