-
Notifications
You must be signed in to change notification settings - Fork 18
/
suse_macros.in
317 lines (277 loc) · 11.9 KB
/
suse_macros.in
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
# need to keep this around for a while
%suse_check %{nil}
# directories
%_infodir %{_prefix}/share/info
%_mandir %{_prefix}/share/man
%_sysconfdir /etc
%_localstatedir /var
%_defaultdocdir %{_usr}/share/doc/packages
%_fillupdir %{_usr}/share/fillup-templates
%_distconfdir %{_usr}/etc
%_firmwaredir %{_usr}/lib/firmware
# package build macros
%make_install make install DESTDIR="%{?buildroot}"
%makeinstall make DESTDIR="%{?buildroot:%{buildroot}}" install
%insserv_prereq insserv sed
%fillup_prereq fillup /usr/bin/mkdir /usr/bin/touch
# to be removed. deprecated since 11/2019 boo#1152105
# I can't just not define it, as otherwise all specs using it break: [ 25s] error: line 27: Empty tag: Requires(post):
%install_info_prereq /bin/sh
%suseconfig_fonts_prereq perl aaa_base
# this script calls all scripts in /usr/lib/rpm/brp-suse.d
%__os_install_post \
/usr/lib/rpm/brp-compress \
/usr/lib/rpm/brp-suse \
%{nil}
%restart_on_update() %{expand::%%service_del_postun %{?**}}
%stop_on_removal() %{expand:%%service_del_preun %{?**}}
# macro: %configure_kernel_source
#
#
%configure_kernel_source() \
if test -d /usr/src/linux ; then \
pushd /usr/src/linux \
test -f .config || cp arch/%_arch/defconfig.default .config \
yes "" | make oldconfig \
make dep \
popd \
fi \
%nil
%is_plus %(if test -f /.buildenv ; then source /.buildenv ; if [[ "$BUILD_BASENAME" == *+kde ]] ; then echo 1 ; else echo 0 ; fi ; else echo 0 ; fi)
%set_permissions(f:) \
if [ -x /usr/bin/chkstat ]; then \
/usr/bin/chkstat -n --set --system %{**} || : \
fi \
%nil
%verify_permissions(e:f:) \
/usr/bin/chkstat -n --warn --system %{**} 1>&2 \
%nil
%suse_update_libdir() \
if [ %_lib != lib ]; then \
for file in %{?*} ; do \
[ ! -e $file ] && echo "Error: $file does not exist!" && exit -1 \
[ -e $file.nolib64 ] && echo "Error: $file.nolib64 already exists!" && exit -1 \
cp $file $file.nolib64 \
echo "patching $file" \
sed -e "s,/lib\\\>,/%_lib,g" $file.nolib64 | sed -e "s,/%_lib/cpp,/lib/cpp,; s,/usr/%_lib/perl,/usr/lib/perl, ; s,/%_lib\\([\$-]\\),/lib\\1,g" > $file \
diff -u $file.nolib64 $file \
rm -f $file.nolib64 \
done; \
fi ; \
# macro: fillup_and_insserv
# do the fillup and insserv calls for postinstall
# options:
# -n (use first argument as name for fillup template filenames
# instead of package name)
# -f (skip fillup parts)
# -i (skip insserv parts)
# -y (default start-variable value to yes)
# Used only if X-UnitedLinux-Default-Enabled is not specified
# in the init script
# -Y (force_yes: always activate, discard setting before update)
# arguments:
# [if "-n" first argument as package name]
# Pairs of:
# main script name
# and
# name of (old) START variable (unless -s is given)
#
# template for variables into /etc/sysconfig/package:
# /usr/share/fillup-templates/sysconfig.package
%fillup_and_insserv(finpsyY) \
%{-p:echo "-p option for fillup_and_insserv no longer supported (ever only used on SL8.0)"; exit 1;} \
%{-s:echo "STARTVAR for fillup_and_insserv no longer supported (rc.config is gone since SL8.0)"; exit 1;} \
test -n "$FIRST_ARG" || FIRST_ARG=$1 \
%{-Y:FORCE_YES=1}%{!-Y:FORCE_YES=0} \
set -- %{?*} \
%{-n:PNAME=$1 ; shift }%{!-n:PNAME=%{name}} \
INSSRV_ARRAY="" \
while [ ${#*} -gt 0 ] ; do \
SCRIPTNAME=$1 \
shift \
SV_B='^### BEGIN INIT INFO' \
SV_E='^### END INIT INFO' \
SV_KW=Default-Enabled \
SV_VALUE=`sed -n -e "/$SV_B/,/$SV_E/{/^# [^[:space:]]*$SV_KW:[[:space:]]*\\([^[:space:]]*\\).*/s//\\1/p;}" < /etc/init.d/$SCRIPTNAME` \
test "$FORCE_YES" = "1" && SV_VALUE="yes" \
test -n "$SV_VALUE" || SV_VALUE=%{-y:"yes"}%{!-y:"no"} \
INSSRV_ARRAY="$INSSRV_ARRAY $SCRIPTNAME $SV_VALUE" \
done \
%{!-f: %{do_real_fillup}} \
%{!-i: %{add_start_if_needed $INSSRV_ARRAY } } \
%nil
# do_real_fillup: internal macro
# this part really calls fillup for the appropriate files
#
%do_real_fillup() \
SYSC_TEMPLATE=%{_fillupdir}/sysconfig.$PNAME \
# If template not in new %{_fillupdir}, fallback to old TEMPLATE_DIR \
if [ ! -f $SYSC_TEMPLATE ] ; then \
TEMPLATE_DIR=/var/adm/fillup-templates \
SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME \
fi \
SD_NAME="" \
%{sysc_fillup}
# add_start_if_needed: internally used by fillup_and_insserv
%add_start_if_needed() \
set -- %{?*} \
while [ ${#*} -gt 0 ] ; do \
SCRIPTNAME=$1 \
SV_VALUE=$2 \
shift 2 \
test -n "$SCRIPTNAME" -a -n "$SV_VALUE" || { echo "SCRIPTNAME or SV_VALUE unknown"; exit 1;} \
if test "$FIRST_ARG" = "1" -a "$SV_VALUE" = "no" ; then \
/sbin/insserv ${YAST_IS_RUNNING:+-f} -r /etc/init.d/$SCRIPTNAME \
elif test "$FIRST_ARG" = "1" -o "$FORCE_YES" = "1" ; then \
/sbin/insserv ${YAST_IS_RUNNING:+-f} /etc/init.d/$SCRIPTNAME \
fi \
done
# macro: insserv_cleanup
%insserv_cleanup() \
/sbin/insserv /etc/init.d
# macro: fillup_only
# do the fillup for sysconfig files
# template naming convention:
# .../fillup-templates/sysconfig.$NAME1[-$NAME2]
# NAME1: the name of the sysconfig-file
# NAME2: if needed (if more packages fill the
# same sysconfig file) the package name
# options:
# -n set sysconfig name manually
# -a use package name as $NAME2
# -s use second arg as package-name
# -d use a subdirectory of sysconfig
# (last arg as directory name)
%fillup_only(dans) \
%{-n:PNAME=%{1}}%{!-n:PNAME=%{name}} \
%{-s:SUBPNAME=-%{2}}%{!-s:SUBPNAME=%{-a:-%{name}}} \
SYSC_TEMPLATE=%{_fillupdir}/sysconfig.$PNAME$SUBPNAME \
# If template not in new %{_fillupdir}, fallback to old TEMPLATE_DIR \
if [ ! -f $SYSC_TEMPLATE ] ; then \
TEMPLATE_DIR=/var/adm/fillup-templates \
SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME \
fi \
SD_NAME="" \
%{-d:%{-s:SD_NAME=%{3}/}%{!-s:SD_NAME=%{2}/}} \
%{sysc_fillup} \
%nil
# internal only: sysc_fillup
%sysc_fillup() \
if [ -x /bin/fillup ] ; then \
if [ -f $SYSC_TEMPLATE ] ; then \
echo "Updating /etc/sysconfig/$SD_NAME$PNAME ..." \
mkdir -p /etc/sysconfig/$SD_NAME \
touch /etc/sysconfig/$SD_NAME$PNAME \
/bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE \
fi \
else \
echo "ERROR: fillup not found. This should not happen. Please compare" \
echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" \
echo "update by hand." \
fi
# macro: rename_sysconfig_variable
# as the name says, rename a variable in the file given with -f
%rename_sysconfig_variable(f:) \
%{!-f:echo "missing argument for rename_sysconfig_variable"; exit 1; }%{-f:FILE=%{-f*}} \
if [ -f $FILE ] ; then \
sed -i -e "s/^%{1}=/%{2}=/" $FILE \
fi
# macro: remove_and_set
# remove variables from sysconfig.$NAME
# (both if existant) and set them in the environment
# for further handling in postinstall
# options: -n set package name
# -y default to yes if not found (otherwise no)
%remove_and_set(n:y) \
%{-n:PNAME=%{-n*}}%{!-n:PNAME=%{name}} \
DEF_VAL=%{-y:"yes"}%{!-y:"no"} \
DEL_TEMPL=%{_fillupdir}/$PNAME.del \
rm -f $DEL_TEMPL \
for var in %{?*} ; do \
printf "#\\n%s=%s\\n" "$var" "$DEF_VAL" >> $DEL_TEMPL \
done \
if [ -f /etc/sysconfig/$PNAME ] ; then \
/bin/fillup -q -t -r -i -d "=" /etc/sysconfig/$PNAME $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ \
test -f /etc/sysconfig/$PNAME.new && mv /etc/sysconfig/$PNAME.new /etc/sysconfig/$PNAME \
fi \
for i in $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ ; do \
if [ -f $i ] ; then \
. $i \
rm -f $i \
fi \
done
%insserv_force_if_yast() \
/sbin/insserv ${YAST_IS_RUNNING:+-f} %{?*}
%run_ldconfig /sbin/ldconfig
# to be removed. deprecated since 11/2019 boo#1152105
%install_info(:-:) \
: # install_info deprecated in favor of file triggers
# to be removed. deprecated since 11/2019 boo#1152105
%install_info_delete(:-:) \
: # install_info_delete deprecated in favor of file triggers
# find-supplements.ksyms parses this macro directly out of the spec file:
%supplements_kernel_module() \
%{expand:%(if ! rpm -q kernel-syms > /dev/null; then echo "%fail Please add the kernel-syms package to BuildRequires"; fi)}
%suse_version @suse_version@
%sles_version @sles_version@
%ul_version @ul_version@
%is_opensuse @is_opensuse@
%sle_version @sle_version@
%do_profiling 1
%cflags_profile_generate -fprofile-update=atomic -fprofile-generate
%cflags_profile_feedback -fprofile-use
%suse_install_update_message() \
install -D -m 644 %1 %buildroot/var/adm/update-messages/%{name}-%{version}-%{release}-%(basename %1).txt \
%nil
%suse_install_update_script() \
install -D -m 755 %1 %buildroot/var/adm/update-scripts/%{name}-%{version}-%{release}-%(basename %1).txt \
%nil
# Template for lang sub-package.
%lang_package(n:r:) \
%package %{-n:-n %{-n*}-}lang \
Summary: Translations for package %{-n:%{-n*}}%{!-n:%{name}} \
Group: System/Localization \
%{-n:Requires: %{-n*} = %{version}} \
%{!-n:%{!-r:Requires: %{name} = %{version}}} \
%{-r:Requires: %{-r*}} \
Provides: %{-n:%{-n*}}%{!-n:%{name}}-lang-all = %{version} \
BuildArch: noarch \
%description %{-n:-n %{-n*}-}lang \
Provides translations for the \"%{-n:%{-n*}}%{!-n:%{name}}\" package.
# package version comparison macros
# compare two versions, returns -1, 0, 1, ~~~
%rpm_vercmp() %{lua:print(rpm.expand('%1') == '~~~' and '~~~' or rpm.vercmp(rpm.expand('%1'), rpm.expand('%2')))}
# expand to the installed version of a package/provides
%pkg_version() %(LC_ALL=C rpm -q --whatprovides --qf "%%{version}" "%1" | sed -e "s/^no package provides .*/~~~/")
# compare the installed version to a value. returns -1, 0, 1, ~~~
%pkg_version_cmp() %{expand:%{expand:%%%%{rpm_vercmp %%{pkg_version %1} %%2}}}
# convenience/readability
%pkg_vcmp() (%{expand:%%{pkg_version_cmp %1 %3}} %2 0)
# to be removed when added to the javapackages-tools package
%_jvmjardir %{_libdir}/jvm-exports
# to be removed when no longer needed
%py_ver %(python -c "import sys; v=sys.version_info[:2]; print '%%d.%%d'%%v" 2>/dev/null || echo PYTHON-NOT-FOUND)
%py_prefix %(python -c "import sys; print sys.prefix" 2>/dev/null || echo PYTHON-NOT-FOUND)
%py_libdir %{py_prefix}/%{_lib}/python%{py_ver}
%py_incdir %{py_prefix}/include/python%{py_ver}
%py_sitedir %{py_libdir}/site-packages
# dropped from rpm package
%requires_eq() %{expand:%(t=$(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not"); test -n "$t" || echo "%%{error: %%%%{requires_eq %*} does not resolve}"; echo $t)}
%requires_ge() %{expand:%(t=$(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} >= %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not"); test -n "$t" || echo "%%{error: %%%%{requires_eq %*} does not resolve}"; echo $t)}
%__perl /usr/bin/perl
# we use the macro as one can easily override it and thus disable LTO for a particular package
%_lto_cflags -flto=auto
# avoid overwriting files that didn't actually change on disk
%_minimize_writes 1
# SUSE expects bash for building
%_buildshell /usr/bin/bash
# Expands to shell code to seot the compiler/linker environment
# variables CFLAGS, CXXFLAGS, FFLAGS, FCFLAGS, LDFLAGS if they have
# not been set already.
%set_build_flags \
CONFIG_SHELL="${CONFIG_SHELL:-/usr/bin/bash}" ; export CONFIG_SHELL ; \
CFLAGS="${CFLAGS:-%{?build_cflags}}" ; export CFLAGS ; \
CXXFLAGS="${CXXFLAGS:-%{?build_cxxflags}}" ; export CXXFLAGS ; \
FFLAGS="${FFLAGS:-%{?build_fflags}}" ; export FFLAGS ; \
FCFLAGS="${FCFLAGS:-%{?build_fflags}}" ; export FCFLAGS ; \
LDFLAGS="${LDFLAGS:-%{?build_ldflags}}" ; export LDFLAGS