1
- #! /bin/bash
1
+ #! /usr/ bin/env bash
2
2
3
- DEFAULT_DOCKCROSS_IMAGE=dockcross/android-arm
3
+ DEFAULT_DOCKCROSS_IMAGE=dockcross/android-arm:20230116-670f7f7
4
4
5
5
# ------------------------------------------------------------------------------
6
6
# Helpers
7
7
#
8
8
err () {
9
- echo -e >&2 ERROR: $@ \\ n
9
+ echo -e >&2 " ERROR: $* \n "
10
10
}
11
11
12
12
die () {
13
- err $@
13
+ err " $* "
14
14
exit 1
15
15
}
16
16
@@ -22,28 +22,39 @@ has() {
22
22
type -t $kind :$name | grep -q function
23
23
}
24
24
25
+ # If OCI_EXE is not already set, search for a container executor (OCI stands for "Open Container Initiative")
26
+ if [ -z " $OCI_EXE " ]; then
27
+ if which podman > /dev/null 2> /dev/null; then
28
+ OCI_EXE=podman
29
+ elif which docker > /dev/null 2> /dev/null; then
30
+ OCI_EXE=docker
31
+ else
32
+ die " Cannot find a container executor. Search for docker and podman."
33
+ fi
34
+ fi
35
+
25
36
# ------------------------------------------------------------------------------
26
37
# Command handlers
27
38
#
28
39
command:update-image () {
29
- docker pull $FINAL_IMAGE
40
+ $OCI_EXE pull $FINAL_IMAGE
30
41
}
31
42
32
43
help:update-image () {
33
- echo Pull the latest $FINAL_IMAGE .
44
+ echo " Pull the latest $FINAL_IMAGE ."
34
45
}
35
46
36
47
command:update-script () {
37
- if cmp -s <( docker run $FINAL_IMAGE ) $0 ; then
38
- echo $0 is up to date
48
+ if cmp -s <( $OCI_EXE run --rm $FINAL_IMAGE ) $0 ; then
49
+ echo " $0 is up to date"
39
50
else
40
- echo -n Updating $0 ' ... '
41
- docker run $FINAL_IMAGE > $0 && echo ok
51
+ echo -n " Updating $0 ... "
52
+ $OCI_EXE run --rm $FINAL_IMAGE > $0 && echo ok
42
53
fi
43
54
}
44
55
45
- help:update-image () {
46
- echo Update $0 from $FINAL_IMAGE .
56
+ help:update-script () {
57
+ echo " Update $0 from $FINAL_IMAGE ."
47
58
}
48
59
49
60
command:update () {
@@ -52,7 +63,7 @@ command:update() {
52
63
}
53
64
54
65
help:update () {
55
- echo Pull the latest $FINAL_IMAGE , and then update $0 from that.
66
+ echo " Pull the latest $FINAL_IMAGE , and then update $0 from that."
56
67
}
57
68
58
69
command:help () {
@@ -98,6 +109,7 @@ while [[ $# != 0 ]]; do
98
109
case $1 in
99
110
100
111
--)
112
+ shift
101
113
break
102
114
;;
103
115
171
183
# Set the docker run extra args (if any)
172
184
FINAL_ARGS=${ARG_ARGS-${DOCKCROSS_ARGS} }
173
185
174
- # If we are not running via boot2docker
175
- if [ -z $DOCKER_HOST ]; then
176
- USER_IDS=" -e BUILDER_UID=$( id -u ) -e BUILDER_GID=$( id -g ) -e BUILDER_USER=$( id -un ) -e BUILDER_GROUP=$( id -gn ) "
186
+ # Bash on Ubuntu on Windows
187
+ UBUNTU_ON_WINDOWS=$( [ -e /proc/version ] && grep -l Microsoft /proc/version || echo " " )
188
+ # MSYS, Git Bash, etc.
189
+ MSYS=$( [ -e /proc/version ] && grep -l MINGW /proc/version || echo " " )
190
+ # CYGWIN
191
+ CYGWIN=$( [ -e /proc/version ] && grep -l CYGWIN /proc/version || echo " " )
192
+
193
+ if [ -z " $UBUNTU_ON_WINDOWS " -a -z " $MSYS " -a " $OCI_EXE " != " podman" ]; then
194
+ USER_IDS=(-e BUILDER_UID=" $( id -u ) " -e BUILDER_GID=" $( id -g ) " -e BUILDER_USER=" $( id -un ) " -e BUILDER_GROUP=" $( id -gn ) " )
195
+ fi
196
+
197
+ # Change the PWD when working in Docker on Windows
198
+ if [ -n " $UBUNTU_ON_WINDOWS " ]; then
199
+ WSL_ROOT=" /mnt/"
200
+ CFG_FILE=/etc/wsl.conf
201
+ if [ -f " $CFG_FILE " ]; then
202
+ CFG_CONTENT=$( cat $CFG_FILE | sed -r ' /[^=]+=[^=]+/!d' | sed -r ' s/\s+=\s/=/g' )
203
+ eval " $CFG_CONTENT "
204
+ if [ -n " $root " ]; then
205
+ WSL_ROOT=$root
206
+ fi
207
+ fi
208
+ HOST_PWD=` pwd -P`
209
+ HOST_PWD=${HOST_PWD/ $WSL_ROOT // }
210
+ elif [ -n " $MSYS " ]; then
211
+ HOST_PWD=$PWD
212
+ HOST_PWD=${HOST_PWD/ \/ / }
213
+ HOST_PWD=${HOST_PWD/ \/ /: \/ }
214
+ elif [ -n " $CYGWIN " ]; then
215
+ for f in pwd readlink cygpath ; do
216
+ test -n " $( type " ${f} " ) " || { echo >&2 " Missing functionality (${f} ) (in cygwin)." ; exit 1 ; } ;
217
+ done ;
218
+ HOST_PWD=" $( cygpath -w " $( readlink -f " $( pwd ; ) " ; ) " ; ) " ;
219
+ else
220
+ HOST_PWD=$PWD
221
+ [ -L $HOST_PWD ] && HOST_PWD=$( readlink $HOST_PWD )
222
+ fi
223
+
224
+ # Mount Additional Volumes
225
+ if [ -z " $SSH_DIR " ]; then
226
+ SSH_DIR=" $HOME /.ssh"
227
+ fi
228
+
229
+ HOST_VOLUMES=
230
+ if [ -e " $SSH_DIR " -a -z " $MSYS " ]; then
231
+ if test -n " ${CYGWIN} " ; then
232
+ HOST_VOLUMES+=" -v $( cygpath -w ${SSH_DIR} ; ) :/home/$( id -un) /.ssh" ;
233
+ else
234
+ HOST_VOLUMES+=" -v $SSH_DIR :/home/$( id -un) /.ssh" ;
235
+ fi ;
177
236
fi
178
237
179
238
# ------------------------------------------------------------------------------
180
239
# Now, finally, run the command in a container
181
240
#
182
- docker run --rm \
183
- -v $PWD :/work \
184
- $USER_IDS \
241
+ TTY_ARGS=
242
+ tty -s && [ -z " $MSYS " ] && TTY_ARGS=-ti
243
+ CONTAINER_NAME=dockcross_$RANDOM
244
+ $OCI_EXE run $TTY_ARGS --name $CONTAINER_NAME \
245
+ --platform linux/amd64 \
246
+ -v " $HOST_PWD " :/work \
247
+ $HOST_VOLUMES \
248
+ " ${USER_IDS[@]} " \
185
249
$FINAL_ARGS \
186
250
$FINAL_IMAGE " $@ "
251
+ run_exit_code=$?
252
+
253
+ # Attempt to delete container
254
+ rm_output=$( $OCI_EXE rm -f $CONTAINER_NAME 2>&1 )
255
+ rm_exit_code=$?
256
+ if [[ $rm_exit_code != 0 ]]; then
257
+ if [[ " $CIRCLECI " == " true" ]] && [[ $rm_output == * " Driver btrfs failed to remove" * ]]; then
258
+ : # Ignore error because of https://circleci.com/docs/docker-btrfs-error/
259
+ else
260
+ echo " $rm_output "
261
+ exit $rm_exit_code
262
+ fi
263
+ fi
264
+
265
+ exit $run_exit_code
187
266
188
267
# ###############################################################################
189
268
#
190
269
# This image is not intended to be run manually.
191
270
#
192
271
# To create a dockcross helper script for the
193
- # dockcross/linux-armv7 image, run:
272
+ # dockcross/android-arm:20230116-670f7f7 image, run:
194
273
#
195
- # docker run --rm dockcross/linux-armv7 > dockcross-linux-armv7
196
- # chmod +x dockcross-linux-armv7
274
+ # docker run --rm dockcross/android-arm:20230116-670f7f7 > dockcross-android-arm-20230116-670f7f7
275
+ # chmod +x dockcross-android-arm-20230116-670f7f7
197
276
#
198
277
# You may then wish to move the dockcross script to your PATH.
199
278
#
0 commit comments