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