This repository has been archived by the owner on Jun 5, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
build.sh
executable file
·143 lines (116 loc) · 3.99 KB
/
build.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/bin/bash
# build.sh -- builds JAR and XPI files for mozilla extensions
# by Nickolay Ponomarev <asqueella@gmail.com>
# (original version based on Nathan Yergler's build script)
# Most recent version is at <http://kb.mozillazine.org/Bash_build_script>
# This script assumes the following directory structure:
# ./
# chrome.manifest (optional - for newer extensions)
# install.rdf
# (other files listed in $ROOT_FILES)
#
# content/ |
# locale/ |} these can be named arbitrary and listed in $CHROME_PROVIDERS
# skin/ |
#
# defaults/ |
# components/ |} these must be listed in $ROOT_DIRS in order to be packaged
# ... |
#
# It uses a temporary directory ./build when building; don't use that!
# Script's output is:
# ./$APP_NAME.xpi
# ./$APP_NAME.jar (only if $KEEP_JAR=1)
# ./files -- the list of packaged files
#
# Note: It modifies chrome.manifest when packaging so that it points to
# chrome/$APP_NAME.jar!/*
# short-name, jar and xpi files name. Must be lowercase with no spaces
APP_NAME=gnomeintegration
# which chrome providers we have (space-separated list)
CHROME_PROVIDERS=""
# delete the jar / "files" when done? (1/0)
CLEAN_UP=1
# put these files in root of xpi (space separated list of leaf filenames)
ROOT_FILES="README.md CHANGELOG.md TO-DO.md"
# ...and these directories (space separated list)
ROOT_DIRS="content defaults locale skin"
# run this before building (bash command)
BEFORE_BUILD=
# ...and this after the build (bash command)
AFTER_BUILD=
if [ -z $APP_NAME ]; then
echo "You need to create build config file first!"
echo "Read comments at the beginning of this script for more info."
exit;
fi
ROOT_DIR=`pwd`
TMP_DIR=build
#uncomment to debug
#set -x
# remove any left-over files from previous build
rm -f $APP_NAME.jar $APP_NAME.xpi files
rm -rf $TMP_DIR
$BEFORE_BUILD
mkdir --parents --verbose $TMP_DIR/chrome
# generate the JAR file, excluding CVS and temporary files
JAR_FILE=$TMP_DIR/chrome/$APP_NAME.jar
echo "Generating $JAR_FILE..."
for CHROME_SUBDIR in $CHROME_PROVIDERS; do
find $CHROME_SUBDIR -path '*svn*' -prune -o -type f -print | grep -v \~ >> files
done
#zip -0 -r $JAR_FILE `cat files`
# The following statement should be used instead if you don't wish to use the JAR file
cp --verbose --parents `cat files` $TMP_DIR/chrome
# prepare components and defaults
echo "Copying various files to $TMP_DIR folder..."
for DIR in $ROOT_DIRS; do
mkdir $TMP_DIR/$DIR
FILES="`find $DIR -path '*svn*' -prune -o -type f -print | grep -v \~`"
echo $FILES >> files
cp --verbose --parents $FILES $TMP_DIR
done
# Copy other files to the root of future XPI.
for ROOT_FILE in $ROOT_FILES install.rdf chrome.manifest; do
cp --verbose $ROOT_FILE $TMP_DIR
if [ -f $ROOT_FILE ]; then
echo $ROOT_FILE >> files
fi
done
cd $TMP_DIR
if [ "x$CHROME_PROVIDERS" == "x" ]; then
rmdir chrome
else
if [ -f "chrome.manifest" ]; then
echo "Preprocessing chrome.manifest..."
# You think this is scary?
#s/^(content\s+\S*\s+)(\S*\/)$/\1jar:chrome\/$APP_NAME\.jar!\/\2/
#s/^(skin|locale)(\s+\S*\s+\S*\s+)(.*\/)$/\1\2jar:chrome\/$APP_NAME\.jar!\/\3/
#
# Then try this! (Same, but with characters escaped for bash :)
sed -i -r s/^\(content\\s+\\S*\\s+\)\(\\S*\\/\)$/\\1jar:chrome\\/$APP_NAME\\.jar!\\/\\2/ chrome.manifest
sed -i -r s/^\(skin\|locale\)\(\\s+\\S*\\s+\\S*\\s+\)\(.*\\/\)$/\\1\\2jar:chrome\\/$APP_NAME\\.jar!\\/\\3/ chrome.manifest
# (it simply adds jar:chrome/whatever.jar!/ at appropriate positions of chrome.manifest)
fi
fi
# generate the XPI file
echo "Generating $APP_NAME.xpi..."
zip -r ../$APP_NAME.xpi *
cd "$ROOT_DIR"
echo "Cleanup..."
if [ $CLEAN_UP = 0 ]; then
# save the jar file
mv $TMP_DIR/chrome/$APP_NAME.jar .
else
rm ./files
fi
# remove the working files
rm -rf $TMP_DIR
echo "Done!"
$AFTER_BUILD
# link this folder to current user profile extension dir
# and run this script with --run option to test changes
if [ "x$1" == "x--run" ]; then
killall thunderbird
/usr/bin/thunderbird
fi