7
7
#
8
8
# SPDX-License-Identifier: GPL-3.0-or-later
9
9
10
+ # Set constant umask
11
+ umask 022
12
+
10
13
# Get a list of files
11
14
get_files () {
12
15
echo " ."
@@ -79,9 +82,11 @@ _grep() {
79
82
80
83
get_revision () {
81
84
local pkg=$1
85
+ local oldpwd=" ${PWD} "
82
86
cd " /external/repo"
83
87
# Get revision (n time this package has been built)
84
88
revision=$( (ls -1 " ${pkg} " * 2> /dev/null || true) | wc -l | sed ' s/ *//g' )
89
+ cd " ${oldpwd} "
85
90
}
86
91
87
92
# Installs binary packages from an earlier run
@@ -93,11 +98,6 @@ bin_preseed() {
93
98
if [ " ${UPDATE_CHECKSUMS} " = " True" ] || src_checksum " ${pkg} " $(( revision)) ; then
94
99
echo " ${pkg} : installing prebuilt package."
95
100
mv " ${pkg} _${revision} " * /external/repo || return 1
96
- if [[ " ${pkg} " == bash-* ]]; then
97
- # tar does not like overwriting running bash
98
- # shellcheck disable=SC2153
99
- rm -f " ${PREFIX} /bin/bash" " ${PREFIX} /bin/sh"
100
- fi
101
101
cd " /external/repo"
102
102
rm -f /tmp/filelist.txt
103
103
src_apply " ${pkg} " $(( revision))
@@ -108,6 +108,65 @@ bin_preseed() {
108
108
return 1
109
109
}
110
110
111
+ # Removes either an existing package or file
112
+ uninstall () {
113
+ local in_fs in_pkg symlinks
114
+ while [ $# -gt 0 ]; do
115
+ removing=" $1 "
116
+ case " ${removing} " in
117
+ /* )
118
+ # Removing a file
119
+ echo " removing file: ${removing} ."
120
+ rm -f " ${removing} "
121
+ ;;
122
+ * )
123
+ echo " ${removing} : uninstalling."
124
+ local oldpwd=" ${PWD} "
125
+ mkdir -p " /tmp/removing"
126
+ cd " /tmp/removing"
127
+ get_revision " ${removing} "
128
+ local filename=" /external/repo/${removing} _$(( revision- 1 )) .tar.bz2"
129
+ # Initial bzip2 built against meslibc has broken pipes
130
+ bzip2 -dc " ${filename} " | tar -xf -
131
+ # reverse to have files before directories
132
+ if command -v find > /dev/null 2>&1 ; then
133
+ find . | sort -r > ../filelist
134
+ else
135
+ get_files . | tac > ../filelist
136
+ fi
137
+ # shellcheck disable=SC2162
138
+ while read file; do
139
+ if [ -d " ${file} " ]; then
140
+ if [ -z " $( ls -A " /${file} " ) " ]; then
141
+ rmdir " /${file} "
142
+ fi
143
+ else
144
+ # in some cases we might be uninstalling a file that has already been overwritten
145
+ # in this case we don't want to remove it
146
+ in_fs=" $( sha256sum " ${file} " 2> /dev/null | cut -d' ' -f1) "
147
+ in_pkg=" $( sha256sum " /${file} " 2> /dev/null | cut -d' ' -f1) "
148
+ if [ " ${in_fs} " = " ${in_pkg} " ]; then
149
+ rm -f " /${file} "
150
+ fi
151
+ if [ -h " ${file} " ]; then
152
+ symlinks=" ${symlinks} ${file} "
153
+ fi
154
+ fi
155
+ done < ../filelist
156
+ rm -f ../filelist
157
+ for link in ${symlinks} ; do
158
+ if [ ! -e " /${link} " ]; then
159
+ rm -f " /${link} "
160
+ fi
161
+ done
162
+ cd " ${oldpwd} "
163
+ rm -rf " /tmp/removing"
164
+ ;;
165
+ esac
166
+ shift
167
+ done
168
+ }
169
+
111
170
# Common build steps
112
171
# Build function provides a few common stages with default implementation
113
172
# that can be overridden on per package basis in the build script.
@@ -169,6 +228,7 @@ build() {
169
228
call $build_stage
170
229
171
230
echo " ${pkg} : install to fakeroot."
231
+ mkdir -p " ${DESTDIR} "
172
232
build_stage=src_install
173
233
call $build_stage
174
234
@@ -185,7 +245,6 @@ build() {
185
245
echo " ${pkg} : cleaning up."
186
246
rm -rf " ${SRCDIR} /${pkg} /build"
187
247
rm -rf " ${DESTDIR} "
188
- mkdir -p " ${DESTDIR} "
189
248
190
249
echo " ${pkg} : installing package."
191
250
src_apply " ${pkg} " " ${revision} "
@@ -236,6 +295,7 @@ extract_file() {
236
295
* )
237
296
case " ${f} " in
238
297
* .tar* | * .tgz)
298
+ # shellcheck disable=SC2153
239
299
if test -e " ${PREFIX} /libexec/rmt" ; then
240
300
# Again, we want to split out into words.
241
301
# shellcheck disable=SC2086
@@ -410,6 +470,11 @@ src_apply() {
410
470
TAR_PREFIX=" /tmp/"
411
471
fi
412
472
473
+ # Bash does not like to be overwritten
474
+ if [[ " ${pkg} " == bash-* ]]; then
475
+ rm " ${PREFIX} /bin/bash"
476
+ fi
477
+
413
478
# Overwriting files is mega busted, so do it manually
414
479
# shellcheck disable=SC2162
415
480
if [ -e /tmp/filelist.txt ]; then
0 commit comments