]> git.donarmstrong.com Git - dactyl.git/blob - common/make_jar.sh
Initial import of 1.0~b6
[dactyl.git] / common / make_jar.sh
1 #!/bin/sh
2 set -e
3
4 fromrepo=
5 if [ "$1" = -r ]; then shift; fromrepo=1; fi
6
7 top=$(pwd)
8 jar=$1
9 bases=$2
10 dirs=$3
11 text=$4
12 bin=$5
13 shift 5;
14 files="$@"
15 HG=${HG:-hg}
16
17 stage="$top/${jar%.*}"
18 mkdir -p "$stage"
19
20 sed=$(which sed)
21 if [ "xoo" = x$(echo foo | sed -E 's/f(o)/\1/' 2>/dev/null) ]
22 then sed() { $sed -E "$@"; }
23 else sed() { $sed -r "$@"; }
24 fi
25
26 if test -n "$fromrepo" && $HG root >/dev/null 2>&1
27 then
28     root="$($HG root)"
29     which cygpath >/dev/null 2>&1 && root=$(cygpath $root)
30
31     mf="$($HG --config ui.debug=false --config ui.verbose=false manifest)"
32     find=$(which find)
33     find() {
34         echo "$mf" | sed -n "s!$(pwd | sed "s!$root/?!!")/?!!p" |
35             grep "^$1"
36         exit 1
37     }
38 fi
39
40 getfiles() {
41     filter="\.($(echo $1 | tr ' ' '|'))$"; shift
42     find "$@" -not -path '*\.hg*' 2>/dev/null | grep -E "$filter" || true
43 }
44 copytext() {
45     sed -e "s,@VERSION@,$VERSION,g" \
46         -e "s,@DATE@,$BUILD_DATE,g" \
47         <"$1" >"$2"
48     cmp -s -- "$1" "$2" ||
49     ( echo "modified: $1"; diff -u -- "$1" "$2" | grep '^[-+][^-+]' )
50 }
51
52 [ -f "$jar" ] && rm -f "$jar"
53 case "$jar" in
54     /*) ;;
55     *)
56         [ -d "$jar" ] && rm -rf "$jar"
57         jar="$top/$jar";;
58 esac
59
60 for base in $bases
61 do
62     (
63         set -e
64         cd $base
65         [ ${jar##*.} != xpi ] && stage="$stage/${base##*/}"
66         for dir in $dirs
67         do
68             for f in $(getfiles "$bin" "$dir")
69             do
70                 mkdir -p "$stage/${f%/*}"
71                 cp -- $f "$stage/$f"
72             done
73             for f in $(getfiles "$text" "$dir")
74             do
75                 mkdir -p "$stage/${f%/*}"
76                 copytext "$f" "$stage/$f"
77             done
78         done
79         for f in $files
80         do
81             [ -f "$f" ] && copytext "$f" "$stage/$f"
82         done
83         true
84     ) || exit 1
85 done
86
87 (
88     set -e;
89     cd "$stage";
90     case "$jar" in
91     (*/) if [ "$stage" != "$jar" ]; then mv -- * "$jar"; fi;;
92     (*)  zip -9r "$jar" -- *;;
93     esac
94 ) || exit 1
95
96 [ "$stage" != "$jar" ] && rm -rf "$stage"
97 true
98
99 # vim:se ft=sh sts=4 sw=4 et: