]> git.donarmstrong.com Git - dactyl.git/blob - common/make_jar.sh
Import r6923 from upstream hg supporting Firefox up to 22.0a1
[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 mungeliterals=$(cat <<'!'
41     local $/;
42     $_ = <>;
43     s{(?<!function )\bliteral\(/\*(.*?)\*/\)}{
44         my $s = $1;
45         $s =~ s/[\\']/\\$&/g;
46         $s =~ s/\n/\\n\\$&/g;
47         "/* Preprocessors FTW. */ '$s'";
48     }ges;
49     print;
50 !
51 )
52
53 mungeliterals() {
54     if which perl >/dev/null 2>&1
55     then perl -e "$mungeliterals"
56     else cat
57     fi
58 }
59
60 getfiles() {
61     filter="\.($(echo $1 | tr ' ' '|'))$"; shift
62     find "$@" -not -path '*\.hg*' 2>/dev/null | grep -E "$filter" || true
63 }
64 copytext() {
65     mungeliterals <"$1" |
66     sed -e "s,@VERSION@,$VERSION,g" \
67         -e "s,@DATE@,$BUILD_DATE,g" \
68         >"$2"
69     cmp -s -- "$1" "$2" ||
70     ( echo "modified: $1"; diff -u -- "$1" "$2" | grep '^[-+][^-+]' )
71 }
72
73 [ -f "$jar" ] && rm -f "$jar"
74 case "$jar" in
75     /*) ;;
76     *)
77         [ -d "$jar" ] && rm -rf "$jar"
78         jar="$top/$jar";;
79 esac
80
81 for base in $bases
82 do
83     (
84         set -e
85         cd $base
86         [ ${jar##*.} != xpi ] && stage="$stage/${base##*/}"
87         for dir in $dirs
88         do
89             for f in $(getfiles "$bin" "$dir")
90             do
91                 mkdir -p "$stage/${f%/*}"
92                 cp -- "$f" "$stage/$f"
93             done
94             for f in $(getfiles "$text" "$dir")
95             do
96                 mkdir -p "$stage/${f%/*}"
97                 copytext "$f" "$stage/$f"
98             done
99         done
100         for f in $files
101         do
102             if [ -f "$f" ]
103             then
104                 case "$f" in
105                 *.js|*.jsm|*.css|*.dtd|*.xml|*.xul|*.html|*.xhtml|*.xsl|*.properties|*.json)
106                     copytext "$f" "$stage/$f";;
107                 *)
108                     cp -- "$f" "$stage/$f";;
109                 esac
110             fi
111         done
112         true
113     ) || exit 1
114 done
115
116 (
117     set -e;
118     cd "$stage";
119     case "$jar" in
120     (*/) if [ "$stage" != "$jar" ]; then mv -- * "$jar"; fi;;
121     (*)  zip -9r "$jar" -- *;;
122     esac
123 ) || exit 1
124
125 [ "$stage" != "$jar" ] && rm -rf "$stage"
126 true
127
128 # vim:se ft=sh sts=4 sw=4 et: