This repository has been archived by the owner on May 13, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathpatch.sh
executable file
·134 lines (113 loc) · 4.91 KB
/
patch.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
#!/bin/bash5
set -e -x
fail() {
echo "!!! Error occcurred while patching, aborting!" >&2
exit 1
}
patch_qt() {
for pkg in "$@"; do
[[ $pkg != *qt5-* ]] && continue
[[ $pkg == qt5-base ]] && continue
if grep -q _orig_pkgname $pkg/PKGBUILD; then
echo "$pkg was already rewritten?"
exit 1
fi
# Adjust package names
sed -i 's|^pkgname=.*|&-debug\n_orig_pkgname=${pkgname/-debug/}|' $pkg/PKGBUILD
sed -i '/^_pkgfqn=/s/pkgname/_orig_pkgname/g' $pkg/PKGBUILD
# update conflicts/replaces for qt5-webkit-ng
sed -i 's/conflicts=(qt5-webkit-ng)/conflicts=(qt5-webkit-ng qt5-webkit-ng-debug)/' $pkg/PKGBUILD
sed -i 's/replaces=(qt5-webkit-ng)/replaces=(qt5-webkit-ng qt5-webkit-ng-debug)/' $pkg/PKGBUILD
# add conflicts-entry for non-debug package
if grep -q '^conflicts=' $pkg/PKGBUILD; then
sed -i 's|^conflicts=(\(.*\))|conflicts=(\1 '\'$pkg\'')|' $pkg/PKGBUILD
else
grep -q '^depends=' $pkg/PKGBUILD || fail
sed -i '/^depends=/iconflicts=('\'$pkg\'')' $pkg/PKGBUILD
fi
# add provides-entry for non-debug package
if grep -q provides $pkg/PKGBUILD; then
sed -i 's/provides=(\(.*\))/provides=("'$pkg'=$pkgver" \1)/' $pkg/PKGBUILD
else
grep -q '^depends=' $pkg/PKGBUILD || fail
sed -i '/^depends=/iprovides=("'$pkg'=$pkgver")' $pkg/PKGBUILD
fi
# add debug options
sed -i '/^provides=/aoptions=("debug" "!strip")' $pkg/PKGBUILD
grep -q options $pkg/PKGBUILD || fail
done
}
patch_qt_base() {
if grep -q _orig_pkgbase qt5-base/PKGBUILD; then
echo "qt5-base was already rewritten?"
exit 1
fi
# add debug switch
sed -i 's/-reduce-relocations/& \\\n -force-debug-info/' qt5-base/PKGBUILD
grep -q -- -force-debug-info qt5-base/PKGBUILD || fail
# adjust package names
sed -i '/^pkgname=.*/s/\([ )]\)/-debug&/g' qt5-base/PKGBUILD
sed -i 's/\${pkgbase/${_orig_pkgbase/g' qt5-base/PKGBUILD
sed -i 's|^pkgbase=.*|&-debug\n_orig_pkgbase=${pkgbase/-debug/}|' qt5-base/PKGBUILD
# add provides/conflicts/options sections to package functions
line1=' provides=("qt5-base=$pkgver")'
line2=' conflicts+=("qt5-base")'
line3=' options=("debug" "!strip")'
sed -i "/^package_qt5-base/a\\$line1\\n$line2\\n$line3" qt5-base/PKGBUILD
sed -i 's/package_qt5-base/&-debug/' qt5-base/PKGBUILD
grep -q package_qt5-base-debug qt5-base/PKGBUILD || fail
grep -q "$line1" qt5-base/PKGBUILD || fail
grep -q "$line2" qt5-base/PKGBUILD || fail
grep -q "$line3" qt5-base/PKGBUILD || fail
line1=' provides=("qt5-xcb-private-headers=$pkgver")'
line2=' conflicts+=("qt5-xcb-private-headers")'
sed -i "/^package_qt5-xcb-private-headers/a\\$line1\\n$line2\\n$line3" qt5-base/PKGBUILD
sed -i 's/package_qt5-xcb-private-headers/&-debug/' qt5-base/PKGBUILD
grep -q package_qt5-xcb-private-headers-debug qt5-base/PKGBUILD || fail
grep -q "$line1" qt5-base/PKGBUILD || fail
grep -q "$line2" qt5-base/PKGBUILD || fail
}
patch_pyqt() {
pkg=$1
# replace all pyqt5 references
sed -i "s/\\($pkg[a-z0-9-]*\\)/\\1-debug/g" $pkg/PKGBUILD
sed -i 's/-debug\.so/\.so/g' $pkg/PKGBUILD
sed -i 's/-debug\.patch/\.patch/g' $pkg/PKGBUILD
# add debug options
sed -i '/^license=/aoptions=("debug" "!strip")' $pkg/PKGBUILD
grep -q '^options' $pkg/PKGBUILD || fail
# fix up sip name
sed -i "s/\\(python-sip-$pkg\\|python-$pkg-sip\\)-debug/\\1/g" $pkg/PKGBUILD
grep -qF python-sip-$pkg-debug $pkg/PKGBUILD && fail
grep -qF python-$pkg-sip-debug $pkg/PKGBUILD && fail
line=" conflicts=(\"python-$pkg\")"
sed -i "/^package_python-$pkg-debug/a\\$line" $pkg/PKGBUILD
grep -q "$line" $pkg/PKGBUILD || fail
# add provides-entry for non-debug package
if grep -q provides $pkg/PKGBUILD; then
sed -i 's/provides=(\(.*\))/provides=("'python-$pkg'=$pkgver" \1)/' $pkg/PKGBUILD
else
grep -q '^depends=' $pkg/PKGBUILD || fail
sed -i '/^depends=/i\provides=("'python-$pkg'=$pkgver")' $pkg/PKGBUILD
fi
grep -q 'provides=("python-' $pkg/PKGBUILD || fail
# add debug switch
if [[ $pkg == pyqt5 ]]; then
sed -i 's|--confirm-license \\|&\n --debug \\|' $pkg/PKGBUILD
grep -q -- --debug $pkg/PKGBUILD || fail
fi
# fix up stuff
if [[ $pkg == pyqt5-webengine ]]; then
grep -q -- software/pyqtwebengine-debug/intro $pkg/PKGBUILD && fail
sed -i 's/(python-pyqt5-webengine-debug)-debug/(python-pyqt5-webengine-debug)/' $pkg/PKGBUILD
fi
}
if (( $# == 0 )); then
packages=(qt5-* pyqt5 pyqt5-webengine)
else
packages="$@"
fi
patch_qt "${packages[@]}"
[[ "${packages[@]}" == *qt5-base* ]] && patch_qt_base
[[ "${packages[@]}" == *pyqt5* ]] && patch_pyqt pyqt5
[[ "${packages[@]}" == *pyqt5-webengine* ]] && patch_pyqt pyqt5-webengine