aboutsummaryrefslogtreecommitdiff
path: root/build.sh
blob: c548e753b01d72c445eb856d7557c9766ae383f8 (plain)
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
#!/bin/sh

# Copyright (C) 2021 jahoti <jahoti@tilde.team>
# Redistribution terms are gathered in the `copyright' file.

print_usage() {
    EXIT_STATUS=${1:-0}
    if [ "x$1" != x ]; then
	shift
	errcho "$@"
    fi
    
    echo "usage:  $0 [OPTION]... BROWSER"
    echo
    echo "long options can be provided either in the form"
    echo "'[OPTION](=[VALUE])' or '--[OPTION] (VALUE)'."
    echo "browsers:"
    echo "    -C, chromium:      build for Chromium and derivatives"
    echo "    -M, mozilla:       build for Firefox and derivatives"
    echo "options:"
    echo "    -b, build=[LOC]:   file/directory to use for building"
    echo "    -h, help:          print usage information and exit"
    echo "    -o, output=[LOC]:  output file/directory"
    echo "    -k, key=[LOC]:     the key to use in signing a CRX;"
    echo "                       builds a CRX instead of a ZIP"
    echo "    -s, safe:          don't delete existing directories;"
    echo "                       throw an error instead"
    echo "    -u, url=[URL]:     URL to check for updates"
    echo "    -z, zip:           pack the extension as a file"
    echo
    echo "environment variables (optional)"
    echo "    HAKETILO_ZIP:      command to use for generating ZIP files"
    echo "    HAKETILO_CHROMIUM: command to use for invoking Chromium"
    
    exit $EXIT_STATUS
}

. ./lib_build.sh

BROWSER=''
BUILDDIR=''
KEY=''
UPDATE_URL=''
MAKEZIP=0
FORCE=1

while [ "x$1" != x ]; do
    case "$1" in
	-C | --chromium | chromium) BROWSER=chromium;;
	-M | --mozilla | mozilla)    BROWSER=mozilla;;
	-b | --build)           BUILDDIR="$2"; shift;;
	build=*) BUILDDIR="$(echo "$1" | cut -c 7-)";;
	-h | --help | help)              print_usage;;
	-k | --key)                  KEY="$2"; shift;;
	key=*)        KEY="$(echo "$1" | cut -c 5-)";;
	-o | --output)            OUTPUT="$2"; shift;;
	output=*)  OUTPUT="$(echo "$1" | cut -c 8-)";;
	-s | --safe | safe)                  FORCE=0;;
	-u | --url)           UPDATE_URL="$2"; shift;;
	url=*) UPDATE_URL="$(echo "$1" | cut -c 5-)";;
	-z | --zip | zip_ext)              MAKEZIP=1;;
	*) print_usage 2 Unrecognized option "'$1'.";;
    esac
    shift
done

if [ "x$BROWSER" = x ]; then
    print_usage 1 No browser was specified.
elif [ "x$KEY" != x ]; then
    if [ $BROWSER != chromium ]; then
	print_usage 4 The "'key'" option applies only to builds 'for' Chromium.
    elif [ $MAKEZIP = 0 ]; then
	print_usage 4 The "'key'" option must be used in conjunction with the "'zip'" option.
    elif [ ! -e "$KEY" ]; then
	errcho "The specified key file '$KEY' does not exist."
	exit 5
    fi
    
    KEY="$(realpath "$KEY")"
fi

if [ "x$KEY" != x ]; then
    PACKDIR="${BUILDDIR:-build_$BROWSER}"
    BUILDDIR="$PACKDIR"/inner
    OUTPUT="${OUTPUT:-build.crx}"
    
    mkdir "$PACKDIR"
elif [ $MAKEZIP = 1 ]; then
    BUILDDIR="${BUILDDIR:-build_$BROWSER}"
    PACKDIR="$BUILDDIR"
    
    if [ "x$OUTPUT" = x ]; then
	case $BROWSER in
	    chromium)  OUTPUT=build.zip;;
	    mozilla)   OUTPUT=build.xpi;;
	esac
    fi
else
    if [ "x$BUILDDIR" = x ]; then
	BUILDDIR="${OUTPUT:-build_$BROWSER}"
    fi
    
    OUTPUT="${OUTPUT:-$BUILDDIR}"
fi

if [ -e "$BUILDDIR" ]; then
    if [ $FORCE = 0 ]; then
	errcho "Build directory '$BUILDDIR' exists."
	exit 3
    else
	rm -rf "$BUILDDIR"
    fi
fi

if [ -e "$OUTPUT" ]; then
    if [ $FORCE = 0 ]; then
	errcho "Output location '$OUTPUT' exists."
	exit 3
    else
	rm -rf "$BUILDDIR"
    fi
fi

mkdir "$BUILDDIR"
main
if [ $MAKEZIP = 1 ]; then
    make_zip
    mv "$PACKDIR"/build.zip "$OUTPUT"
    rm -rf "$PACKDIR"
elif [ "$BUILDDIR" != "$OUTPUT" ]; then
    mv "$BUILDDIR" "$OUTPUT"
fi