openpkg/rpmmacros

Fri, 09 Jan 2009 00:45:56 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 09 Jan 2009 00:45:56 +0100
changeset 52
d42d557c7a5a
child 303
2bd9bf3f6f03
permissions
-rw-r--r--

Import package vendor original specs for necessary manipulations.

michael@13 1 ##
michael@13 2 ## rpmmacros -- OpenPKG RPM Macros
michael@13 3 ## Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/>
michael@13 4 ## Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/>
michael@13 5 ##
michael@13 6 ## Permission to use, copy, modify, and distribute this software for
michael@13 7 ## any purpose with or without fee is hereby granted, provided that
michael@13 8 ## the above copyright notice and this permission notice appear in all
michael@13 9 ## copies.
michael@13 10 ##
michael@13 11 ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
michael@13 12 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
michael@13 13 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
michael@13 14 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
michael@13 15 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
michael@13 16 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
michael@13 17 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
michael@13 18 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
michael@13 19 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
michael@13 20 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
michael@13 21 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
michael@13 22 ## SUCH DAMAGE.
michael@13 23 ##
michael@13 24 ## The purpose of this macro set is to override the default
michael@13 25 ## macros in the OpenPKG RPM installation for the @l_prefix@ hierarchy.
michael@13 26 ##
michael@13 27
michael@13 28 # the OpenPKG release identification (for the current package or as a fallback for the bootstrap package)
michael@13 29 %l_openpkg_release(F:) %(%{l_prefix}/libexec/openpkg/release --release="%{?release}%{!?release:%(%{l_rpm} -q --qf '%{release}' openpkg)}" %{?-F:-F "%{-F*}"}%{!?-F:-F "OpenPKG-%%t"})
michael@13 30
michael@13 31 # the OpenPKG OIDs (root is officially registered at IANA)
michael@13 32 %l_openpkg_oid 1.3.6.1.4.1.18749
michael@13 33 %l_openpkg_oid_bootstrap %{l_openpkg_oid}.4.1
michael@13 34 %l_openpkg_oid_instance %{l_openpkg_oid_bootstrap}.1
michael@13 35 %l_openpkg_oid_platform %{l_openpkg_oid_bootstrap}.2
michael@13 36 %l_openpkg_oid_tagfmtopt %{l_openpkg_oid_bootstrap}.3
michael@13 37
michael@13 38 # the OpenPKG package tagging
michael@13 39 %l_tag_fmt @TAG@
michael@13 40 %l_tag_fmt_compat %(prefix="%{l_prefix_static}"; if [ ".`expr $prefix : '/[^/][^/]*$'`" != .0 ]; then loc=`echo $prefix | cut -c2-4`; else loc=`echo $prefix | sed -e 's;/\\(.\\)[^/]*;\\1;g' | cut -c1-3`; fi; echo $loc)
michael@13 41 %l_tag_fmt_loc %(echo "%{l_prefix_static}" | sed -e 's;^/\\([^/]\\)[^/]*/\\([^/]\\)[^/]*/\\([^/]\\).*;\\1\\2\\3;' -e 's;^/\\([^/]\\)[^/]*/\\([^/][^/]\\).*;\\1\\2;' -e 's;^/\\([^/][^/]\\)[^/]*/\\([^/]\\).*;\\1\\2;' -e 's;^/\\([^/]\\)[^/]*/\\([^/]\\).*;\\1\\2;' -e 's;^/\\([^/][^/][^/]\\).*;\\1;' -e 's;^/\\([^/][^/]\\).*;\\1;' -e 's;^/\\([^/]\\).*;\\1;')
michael@13 42 %l_tag_fmt_opt %(uuid_ns="`%{l_uuid} -v3 ns:OID %{l_openpkg_oid_tagfmtopt}`"; %{l_uuid} -v3 $uuid_ns '%{?_options}')
michael@13 43 %l_tag_fmt_uuid %(%{l_uuid} -v1)
michael@13 44 %l_tag_fmt_time %(date '+%%Y%%m%%d%%H%%M%%S')
michael@13 45 %l_tag_fmt_user %(%{l_shtool} echo -e '%%u')
michael@13 46 %l_tag_fmt_host %(%{l_shtool} echo -e '%%h%%d')
michael@13 47 %l_tag_gen %{expand:%(echo '%{l_tag_fmt}' | sed -e 's/<\\([a-zA-Z][_a-zA-Z0-9]*\\)>/%%{l_tag_fmt_\\1}/g')}
michael@13 48 %l_tag %(echo "%{l_tag_gen}" | sed -e 's;-;;g')
michael@13 49
michael@13 50 # the OpenPKG instance location (backward compatibility only)
michael@13 51 %l_location %{l_tag}
michael@13 52
michael@13 53 # standard RPM host platform identification
michael@13 54 # (defaults via "shtool platform" and uname(3); used internally)
michael@13 55 #%_host_cpu ...USE INTERNAL DEFAULT...
michael@13 56 #%_host_vendor ...USE INTERNAL DEFAULT...
michael@13 57 #%_host_os ...USE INTERNAL DEFAULT...
michael@13 58 %_host_alias %{nil}
michael@13 59 %_host %{_host_cpu}-%{_host_os}
michael@13 60
michael@13 61 # standard RPM build platform identification
michael@13 62 # (defaults via %{_host*} macros; not used internally AFAIK)
michael@13 63 %_build_cpu %{_host_cpu}
michael@13 64 %_build_vendor %{_host_vendor}
michael@13 65 %_build_os %{_host_os}
michael@13 66 %_build_alias %{_host_alias}
michael@13 67 %_build %{_host}
michael@13 68
michael@13 69 # standard RPM target platform identification
michael@13 70 # (defaults via %{_host*} macros; used internally for %ifarch/%ifnarch)
michael@13 71 %_target_cpu %{_host_cpu}
michael@13 72 %_target_vendor %{_host_vendor}
michael@13 73 %_target_os %{_host_os}
michael@13 74 %_target_alias %{_host_alias}
michael@13 75 %_target %{_host}
michael@13 76
michael@13 77 # legacy RPM platform macros
michael@13 78 # (defaults via config.guess/config.sub under RPM build-time)
michael@13 79 %_arch %{_host_cpu}
michael@13 80 %_vendor %{_host_vendor}
michael@13 81 %_os %{_host_os}
michael@13 82
michael@13 83 # legacy RPM platform macros
michael@13 84 # (defaults via various other macros; partly used internally)
michael@13 85 %_build_arch %{_arch}
michael@13 86 %_target_platform %{_target_cpu}-%{_target_vendor}-%{_target_os}
michael@13 87 %_gnu %{nil}
michael@13 88
michael@13 89 # official OpenPKG host platform identification
michael@13 90 %l_host_arch %{_host_cpu}
michael@13 91 %l_host_vendor %{_host_vendor}
michael@13 92 %l_host_os %{_host_os}
michael@13 93 %l_host %{_host_cpu}-%{_host_os}
michael@13 94
michael@13 95 # new OpenPKG platform identification
michael@13 96 %l_platform(cptF:) %(if [ ".%{?-F}" != . ]; then fmt="%{-F*}"; else T="%{?-c:c}%{?-p:p}%{?-t:t}"; [ ".$T" = . ] && T="p"; fmt="%%<a$T>-%%<s$T>"; fi; %{l_shtool} platform -n -L -S "" -C "+" -F "$fmt")
michael@13 97
michael@13 98 # old OpenPKG platform identification
michael@13 99 %l_target %{l_platform -t}
michael@13 100
michael@13 101 # the *S*uper-user user/group name/id pair
michael@13 102 %l_susr @SUSR@
michael@13 103 %l_sgrp @SGRP@
michael@13 104 %l_suid %((getent passwd "%{l_susr}"; grep "^%{l_susr}:" /etc/passwd; ypmatch "%{l_susr}" passwd; nismatch "%{l_susr}" passwd; nidump passwd . | grep "^%{l_susr}:") 2>/dev/null | sed -e 'q' | awk -F: '{ print $3; }')
michael@13 105 %l_sgid %((getent group "%{l_sgrp}"; grep "^%{l_sgrp}:" /etc/group; ypmatch "%{l_sgrp}" group; nismatch "%{l_sgrp}" group; nidump group . | grep "^%{l_susr}:") 2>/dev/null | sed -e 'q' | awk -F: '{ print $3; }')
michael@13 106
michael@13 107 # the *M*anagement user/group name/id pair
michael@13 108 %l_musr @MUSR@
michael@13 109 %l_mgrp @MGRP@
michael@13 110 %l_muid %((getent passwd "%{l_musr}"; grep "^%{l_musr}:" /etc/passwd; ypmatch "%{l_musr}" passwd; nismatch "%{l_musr}" passwd; nidump passwd . | grep "^%{l_musr}:") 2>/dev/null | sed -e 'q' | awk -F: '{ print $3; }')
michael@13 111 %l_mgid %((getent group "%{l_mgrp}"; grep "^%{l_mgrp}:" /etc/group; ypmatch "%{l_mgrp}" group; nismatch "%{l_mgrp}" group; nidump group . | grep "^%{l_musr}:") 2>/dev/null | sed -e 'q' | awk -F: '{ print $3; }')
michael@13 112
michael@13 113 # the *R*restricted user/group name/id pair
michael@13 114 %l_rusr @RUSR@
michael@13 115 %l_rgrp @RGRP@
michael@13 116 %l_ruid %((getent passwd "%{l_rusr}"; grep "^%{l_rusr}:" /etc/passwd; ypmatch "%{l_rusr}" passwd; nismatch "%{l_rusr}" passwd; nidump passwd . | grep "^%{l_rusr}:") 2>/dev/null | sed -e 'q' | awk -F: '{ print $3; }')
michael@13 117 %l_rgid %((getent group "%{l_rgrp}"; grep "^%{l_rgrp}:" /etc/group; ypmatch "%{l_rgrp}" group; nismatch "%{l_rgrp}" group; nidump group . | grep "^%{l_rusr}:") 2>/dev/null | sed -e 'q' | awk -F: '{ print $3; }')
michael@13 118
michael@13 119 # the *N*on-privileged user/group name/id pair
michael@13 120 %l_nusr @NUSR@
michael@13 121 %l_ngrp @NGRP@
michael@13 122 %l_nuid %((getent passwd "%{l_nusr}"; grep "^%{l_nusr}:" /etc/passwd; ypmatch "%{l_nusr}" passwd; nismatch "%{l_nusr}" passwd; nidump passwd . | grep "^%{l_nusr}:") 2>/dev/null | sed -e 'q' | awk -F: '{ print $3; }')
michael@13 123 %l_ngid %((getent group "%{l_ngrp}"; grep "^%{l_ngrp}:" /etc/group; ypmatch "%{l_ngrp}" group; nismatch "%{l_ngrp}" group; nidump group . | grep "^%{l_nusr}:") 2>/dev/null | sed -e 'q' | awk -F: '{ print $3; }')
michael@13 124
michael@13 125 # backward compatibility (openpkg < 20020204)
michael@13 126 %l_fsusr %{l_musr}
michael@13 127 %l_fsgrp %{l_mgrp}
michael@13 128 %l_npuid %{l_nuid}
michael@13 129 %l_npgid %{l_ngid}
michael@13 130
michael@13 131 # define the installation hierarchy (used parts)
michael@13 132 %l_prefix @l_prefix@
michael@13 133 %l_prefix_static @l_prefix_static@
michael@13 134
michael@13 135 # define the installation hierarchy (unused parts)
michael@13 136 %l_exec_prefix %{l_prefix}
michael@13 137 %l_bindir %{l_prefix}/bin
michael@13 138 %l_sbindir %{l_prefix}/sbin
michael@13 139 %l_libexecdir %{l_prefix}/libexec
michael@13 140 %l_datadir %{l_prefix}/share
michael@13 141 %l_sysconfdir %{l_prefix}/etc
michael@13 142 %l_sharedstatedir %{l_prefix}/com
michael@13 143 %l_localstatedir %{l_prefix}/var
michael@13 144 %l_libdir %{l_prefix}/lib
michael@13 145 %l_includedir %{l_prefix}/include
michael@13 146 %l_infodir %{l_prefix}/info
michael@13 147 %l_mandir %{l_prefix}/man
michael@13 148 %l_docdir %{l_prefix}/doc
michael@13 149
michael@13 150 # provide killer macro "%{l_value -s|-b|-c (l_xxx ...|-a|-A)}" which
michael@13 151 # expands to the values of previous l_xxx variables in this file. With
michael@13 152 # option "-s" it expands into a chain of "-e 's;<name>;<value>;g'"
michael@13 153 # constructs for used with Stream Editor sed(1), with option "-b" it
michael@13 154 # expands into a chain of "<name>='<value>';" constructs for use with
michael@13 155 # Bourne-Shell sh(1), with option "-c" it expands into a chain of "set
michael@13 156 # <name> = '<value>';" constructs for use with C-Shell csh(1). But
michael@13 157 # be careful, <value> currently (for expansion speed reasons) is not
michael@13 158 # escaped, so make sure the values of the above macros do not contain
michael@13 159 # ";" for "-s" and ";" for "-b" and "-c". You can either specify one
michael@13 160 # or more names of variables to expand or use "-a" for mostly all
michael@13 161 # variables and "-A" for really all variables.
michael@13 162 %l_value(sbcaA) %{expand:%(l=""; for x in `if [ ".%*" != . ]; then echo "%* "; else p=""; if [ ".%{-a:yes}" = .yes ]; then p="^%%l_(prefix|[smrn](usr|grp|uid|gid))"; elif [ ".%{-A:yes}" = .yes ]; then p="^%%l_"; fi; if [ ".$p" != . ]; then egrep "$p" %{l_prefix}/etc/openpkg/rpmmacros | sed -e '/^%%l_value/,$d' -e 's;^%%\\(l_[a-z1-9_]*\\).*;\\1;'; fi; fi`; do e=""; if [ ".%{-s:yes}" = .yes ]; then e="-e 's;@$x@;%%{$x};g'"; elif [ ".%{-b:yes}" = .yes ]; then e="$x='%%{$x}';"; elif [ ".%{-c:yes}" = .yes ]; then e="set $x = '%%{$x}';"; else e="%%{$x}"; fi; if [ ".$l" = . ]; then l="$e"; else l="$l $e"; fi; done; echo "$l")}
michael@13 163
michael@13 164 # local version of the empty macro
michael@13 165 %l_nil %{nil}
michael@13 166
michael@13 167 # override the internal RPM hierarchy variables
michael@13 168 %_usr %{nil}
michael@13 169 %_var %{nil}
michael@13 170 %_usrsrc %{nil}
michael@13 171 %_topdir %{nil}
michael@13 172 %_dbpath %{l_prefix}/RPM/DB
michael@13 173 %_builddir %{l_prefix}/RPM/TMP
michael@13 174 %_tmppath %{l_prefix}/RPM/TMP
michael@13 175 %_sourcedir %{l_prefix}/RPM/SRC/%{name}
michael@13 176 %_specdir %{l_prefix}/RPM/SRC/%{name}
michael@13 177 %_rpmdir %{l_prefix}/RPM/PKG
michael@13 178 %_srcrpmdir %{l_prefix}/RPM/PKG
michael@13 179 %_repackage_dir %{l_prefix}/RPM/PKG
michael@13 180 %_cache_dbpath %{l_prefix}/RPM/PKG
michael@13 181 %_solve_dbpath %{l_prefix}/RPM/PKG
michael@13 182 %_solve_pkgsdir %{l_prefix}/RPM/PKG
michael@13 183 %_defaultdocdir %{l_docdir}
michael@13 184
michael@13 185 # complement the %{SOURCE<n>} and %{PATCH<n>} with %{SOURCE <file>} and %{PATCH <file>}
michael@13 186 %SOURCE() %(f="%1"; if [ -f "%{_specdir}/$f" ]; then echo "%{_specdir}/$f"; else echo "%{_sourcedir}/$f"; fi)
michael@13 187 %PATCH() %(f="%1"; if [ -f "%{_specdir}/$f" ]; then echo "%{_specdir}/$f"; else echo "%{_sourcedir}/$f"; fi)
michael@13 188
michael@13 189 # override RPM's absolute tool paths with relative ones
michael@13 190 # (because if you upgrade RPM it would hard-code tools in own hierarchy, too)
michael@13 191 %__awk awk
michael@13 192 %__bzip2 %{_bzip2bin}
michael@13 193 %__cat cat
michael@13 194 %__chgrp chgrp
michael@13 195 %__chmod chmod
michael@13 196 %__chown chown
michael@13 197 %__cp cp
michael@13 198 %__cpio cpio
michael@13 199 %__grep grep
michael@13 200 %__gzip %{_gzipbin}
michael@13 201 %__id id
michael@13 202 %__install install
michael@13 203 %__ln_s ln -s
michael@13 204 %__make make
michael@13 205 %__mkdir mkdir
michael@13 206 %__mkdir_p %{l_shtool} mkdir -p
michael@13 207 %__mv mv
michael@13 208 %__patch %{_patchbin}
michael@13 209 %__perl perl
michael@13 210 %__pgp %{_pgpbin}
michael@13 211 %__rm rm
michael@13 212 %__rsh rsh
michael@13 213 %__sed sed
michael@13 214 %__ssh ssh
michael@13 215 %__tar %{_tarbin}
michael@13 216 %__unzip %{_unzipbin}
michael@13 217
michael@13 218 # override some more RPM macros where the default value is not acceptable
michael@13 219 %_dependency_whiteout %{nil}
michael@13 220 %__debug_install_post %{nil}
michael@13 221 %_unpackaged_files_terminate_build 0
michael@13 222
michael@13 223 # provide fixed paths to tools (standard)
michael@13 224 %_gzipbin %{l_prefix}/lib/openpkg/gzip
michael@13 225 %_bzip2bin %{l_prefix}/lib/openpkg/bzip2
michael@13 226 %_patchbin %{l_prefix}/lib/openpkg/patch
michael@13 227 %_tarbin %{l_prefix}/lib/openpkg/tar
michael@13 228 %_unzipbin %{l_prefix}/lib/openpkg/unzip
michael@13 229
michael@13 230 # provide path to platform identification file
michael@13 231 %__platform %{l_prefix}/etc/openpkg/platform
michael@13 232
michael@13 233 # provide fixed paths to tools (additional)
michael@13 234 %l_rc %{l_prefix}/etc/rc
michael@13 235 %l_rpm %{l_prefix}/libexec/openpkg/rpm
michael@13 236 %l_rpm2cpio %{l_prefix}/libexec/openpkg/rpm2cpio
michael@13 237 %l_rpm_config %{l_prefix}/libexec/openpkg/rpm-config
michael@13 238 %l_lsync %{l_prefix}/libexec/openpkg/lsync
michael@13 239 %l_rpmtool %{l_prefix}/lib/openpkg/rpmtool
michael@13 240 %l_shtool %{l_prefix}/lib/openpkg/shtool
michael@13 241 %l_curl %{l_prefix}/lib/openpkg/curl
michael@13 242 %l_bash %{l_prefix}/lib/openpkg/bash
michael@13 243 %l_uuid %{l_prefix}/lib/openpkg/uuid
michael@13 244
michael@13 245 # provide smart paths to tools
michael@13 246 %l_tool_locate() %(if [ ".%{expand:%%{?use_%1}}" != . ]; then tool="%{expand:%%{use_%1}}"; elif [ -f "%{l_prefix}/bin/%2" ]; then tool="%{l_prefix}/bin/%2"; elif [ -f "%{l_prefix}/lib/openpkg/%2" ]; then tool="%{l_prefix}/lib/openpkg/%2"; else tool="%2"; fi; echo $tool)
michael@13 247 %l_gzip %{l_tool_locate gzip gzip}
michael@13 248 %l_bzip2 %{l_tool_locate bzip2 bzip2}
michael@13 249 %l_tar %{l_tool_locate tar tar}
michael@13 250 %l_make %{l_tool_locate make make}
michael@13 251 %l_cc %{l_tool_locate cc cc}
michael@13 252 %l_ar %{l_tool_locate ar ar}
michael@13 253 %l_ld %{l_tool_locate ld ld}
michael@13 254 %l_as %{l_tool_locate as as}
michael@13 255 %l_strip %{l_tool_locate strip strip}
michael@13 256 %l_cxx %{l_tool_locate cxx c++}
michael@13 257 %l_patch %{l_tool_locate patch patch}
michael@13 258 %l_sed %{l_tool_locate sed sed}
michael@13 259 %l_grep %{l_tool_locate grep grep}
michael@13 260 %l_awk %{l_tool_locate awk awk}
michael@13 261 %l_autoconf %{l_tool_locate autoconf autoconf}
michael@13 262 %l_automake %{l_tool_locate automake automake}
michael@13 263 %l_libtool %{l_tool_locate libtool libtool}
michael@13 264 %l_flex %{l_tool_locate flex flex}
michael@13 265 %l_bison %{l_tool_locate bison bison}
michael@13 266 %l_perl %{l_tool_locate perl perl}
michael@13 267 %l_miniperl %{l_tool_locate miniperl miniperl}
michael@13 268 %l_openssl %{l_tool_locate openssl openssl}
michael@13 269 %l_xmkmf %{l_tool_locate xmkmf xmkmf}
michael@13 270 %l_vcheck %{l_tool_locate vcheck vcheck}
michael@13 271
michael@13 272 # tool options
michael@13 273 %l_mflags(O) %(%{l_sane_env}; %{l_rpmtool} mflags %{-O:-O} "%{l_make}")
michael@13 274 %l_cflags(O) %(%{l_sane_env}; %{l_rpmtool} cflags %{-O:-O} "%{l_cc}")
michael@13 275 %l_cxxflags(O) %(%{l_sane_env}; %{l_rpmtool} cflags %{-O:-O} "%{l_cxx}")
michael@13 276 %l_cppflags(i) %(%{l_sane_env}; %{l_rpmtool} cppflags -p%{l_prefix} %{-i:-i} -- %*)
michael@13 277 %l_ldflags() %(%{l_sane_env}; %{l_rpmtool} ldflags -p%{l_prefix} -- %*)
michael@13 278
michael@13 279 # OSSP fake syslog library
michael@13 280 %l_fsl_ldflags() %(if [ ".%{with_fsl}" = ".yes" ]; then flags=`(%{l_prefix}/bin/fsl-config --all --ldflags) 2>/dev/null`; else flags=''; fi; echo $flags)
michael@13 281 %l_fsl_libs() %(if [ ".%{with_fsl}" = ".yes" ]; then flags=`(%{l_prefix}/bin/fsl-config --all --libs ) 2>/dev/null`; else flags=''; fi; echo $flags)
michael@13 282
michael@13 283 # determine the current username
michael@13 284 %l_whoami %((id -un) 2>/dev/null || (whoami) 2>/dev/null || (who am i | cut "-d " -f1) 2>/dev/null || echo $LOGNAME)
michael@13 285
michael@13 286 # macros for dynamically generating a %files list
michael@13 287 %l_files_defattr '%%defattr(-,%{l_musr},%{l_mgrp})'
michael@13 288 %l_files_all '%{l_prefix}'
michael@13 289 %l_files_noshared '%%not %%dir {%{l_prefix},%{l_prefix}/*,%{l_prefix}/etc/rc.d,%{l_prefix}/man/*}'
michael@13 290 %l_files_std() %l_files_defattr %l_files_all %l_files_noshared
michael@13 291
michael@13 292 # path to local build root
michael@13 293 %l_buildroot %{_tmppath}/%{name}-%{version}-root
michael@13 294
michael@13 295 # path to local temporary location
michael@13 296 %l_tmpdir() %{_tmppath}
michael@13 297 %l_tmpfile() %{l_tmpdir}/%{name}-%{version}-%{release}-tmp%{?1:-%1}
michael@13 298
michael@13 299 # executable path for %post/%pre
michael@13 300 %_install_script_path %{l_prefix}/bin:%{l_prefix}/sbin:/bin:/sbin:/usr/bin:/usr/sbin
michael@13 301
michael@13 302 # names of RPM files
michael@13 303 %l_srcrpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.src.rpm
michael@13 304 %l_binrpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}-%%{OS}-%{l_tag}.rpm
michael@13 305
michael@13 306 # override the name scheme for RPM files
michael@13 307 %_rpmfilename %{l_binrpmfilename}
michael@13 308 %_build_name_fmt %{l_binrpmfilename}
michael@13 309 %_repackage_name_fmt %{l_binrpmfilename}
michael@13 310 %_solve_name_fmt %{_solve_pkgsdir}/%{l_binrpmfilename}
michael@13 311
michael@13 312 # override the payload compression for the CPIO parts of an RPM
michael@13 313 # (we use the equivalent of "bzip2 -9")
michael@13 314 %_source_payload w9.bzdio
michael@13 315 %_binary_payload w9.bzdio
michael@13 316
michael@13 317 # package signature type is OpenPGP via GnuPG
michael@13 318 %__gpg %{l_prefix}/bin/gpg
michael@13 319 %_signature gpg
michael@13 320 %__vsflags 1
michael@13 321
michael@13 322 # two macro-processor add-ons (should be part of forthcoming RPM releases)
michael@13 323 %ifdef() %if %{expand:%%{?%{1}:1}%%{!?%{1}:0}}
michael@13 324 %ifndef() %if %{expand:%%{?%{1}:0}%%{!?%{1}:1}}
michael@13 325
michael@13 326 # macro for package option configuration
michael@13 327 %option() %{expand:%%{!?%{1}:%%global %*}} %{expand:%%global _options %{?_options:%{_options}:}%{1}=%%%{1}} \
michael@13 328 Provides: %{name}::%{1} = %(echo '%{expand:%%{%{1}}}' | sed -e 's;%%;%%%%;g' -e 's; ;%%20;g' -e 's; ;%%09;g')
michael@13 329
michael@13 330 # macros for NoSource/NoPatch (distribution restriction) integrity handling
michael@13 331 %NoSource() %(if [ ".%{?restriction}" != ".no" ]; then echo "NoSource: %1"; fi)%{expand:%%global _restricted %{?_restricted:%{_restricted}} %%{SOURCEURL%1}}
michael@13 332 %NoPatch() %(if [ ".%{?restriction}" != ".no" ]; then echo "NoPatch: %1"; fi)%{expand:%%global _restricted %{?_restricted:%{_restricted}} %%{PATCHURL%1}}
michael@13 333 %integrity() %{l_check_nosource}
michael@13 334
michael@13 335 # macros for checking build environment
michael@13 336 %l_check_nosource() %(%{l_sane_env}; checkok=1; checkinfo=`echo "Sorry, this OpenPKG package contains a DISTRIBUTION RESTRICTED source file."; echo "Before you can proceed building this package, fetch missing files MANUALLY:"`; for url in . %{?_restricted}; do [ ".$url" = .. ] && continue; eval `echo "$url" | sed -e 's!^\\(.*\\)::/\\([^/][^/]*\\)$!;url=\\"\\1\\"; file=\\"\\2\\"!' -e 's!^\\([^:;][^:]*://.*/\\)\\([^/][^/]*\\)$!;url=\\"\\1\\"; file=\\"\\2\\"!' -e 's:^\\([^;].*\\)$:;url="(unknown location) "; file="\\1":' -e 's:^;::'`; if [ ! -f "%{_specdir}/$file" ] && [ ! -f "%{_sourcedir}/$file" ]; then checkok=0; checkinfo=`echo "${checkinfo}"; echo ""; echo "from ${url}"; echo "file ${file}"; echo "here %{_sourcedir}/$file"`; fi; done; if [ $checkok -ne 1 ]; then echo "set +x"; echo "$checkinfo" | %{l_rpmtool} msg -b -t error | sed -e 's;^;echo ";' -e 's;$;";'; echo "exit 1"; fi)
michael@13 337 %l_check_class() %(%{l_sane_env}; class=`echo "@:%{?class}:%{?distribution}" | sed -e 's;^@:\\([^:][^:]*\\):.*$;\\1;' -e 's;^@:.*\\[\\(.*\\)\\].*$;\\1;' -e 's;^@:.*$;JUNK;'`; %{l_rpmtool} check-class "$class")
michael@13 338 %prep %%prep\
michael@13 339 %{l_check_nosource} \
michael@13 340 %{l_check_class} \
michael@13 341 %{nil}
michael@13 342
michael@13 343 # macro-processor add-on for testing external conditions
michael@13 344 %l_test(pfd) %(if [ ".%{?-p:yes}" = .yes ]; then %{l_rpm} -q %1 >/dev/null 2>&1; rc=$?; elif [ ".%{?-f:yes}" = .yes ]; then test -f %1; rc=$?; elif [ ".%{?-d:yes}" = .yes ]; then test -d %1; rc=$?; fi; if [ ".$rc" = .0 ]; then echo "yes"; else echo "no"; fi)
michael@13 345
michael@13 346 # default list of vendor source fetching locations
michael@13 347 %l_fetch_mirror_0 -
michael@13 348 %l_fetch_mirror_1 -
michael@13 349 %l_fetch_mirror_2 -
michael@13 350 %l_fetch_mirror_3 -
michael@13 351 %l_fetch_mirror_4 -
michael@13 352 %l_fetch_mirror_5 -
michael@13 353 %l_fetch_mirror_6 -
michael@13 354 %l_fetch_mirror_7 -
michael@13 355 %l_fetch_mirror_8 -
michael@13 356 %l_fetch_mirror_9 -
michael@13 357 %l_fetch_backup_0 -
michael@13 358 %l_fetch_backup_1 -
michael@13 359 %l_fetch_backup_2 -
michael@13 360 %l_fetch_backup_3 -
michael@13 361 %l_fetch_backup_4 -
michael@13 362 %l_fetch_backup_5 -
michael@13 363 %l_fetch_backup_6 -
michael@13 364 %l_fetch_backup_7 -
michael@13 365 %l_fetch_backup_8 -
michael@13 366 %l_fetch_backup_9 ftp://ftp.openpkg.org/sources/DST/%{name}/
michael@13 367
michael@13 368 # sane build environment setup
michael@13 369 %l_build_path %(if [ -d %{l_prefix}/lib/openpkg/override ]; then echo "%{l_prefix}/lib/openpkg/override:"; fi)%{l_prefix}/bin:%{l_prefix}/sbin:@l_build_path@%(if [ -d %{l_prefix}/lib/openpkg/fallback ]; then echo ":%{l_prefix}/lib/openpkg/fallback"; fi)
michael@13 370 %l_build_ldlp %{l_prefix}/lib:@l_build_ldlp@
michael@13 371 %l_build_ulim @l_build_ulim@
michael@13 372 %l_build_shell_cmd %{l_prefix}/lib/openpkg/bash
michael@13 373 %l_build_shell_opt --norc --noprofile --posix
michael@13 374
michael@13 375 # sane build environment for manual usage in macros (currently just $PATH)
michael@13 376 %l_sane_env PATH="%{l_build_path}"; export PATH; LD_LIBRARY_PATH="%{l_build_ldlp}"; export LD_LIBRARY_PATH
michael@13 377
michael@13 378 # sane build environment for %prep/%build/%install
michael@13 379 %_buildshell env -i %{l_build_shell_cmd} %{l_build_shell_opt}
michael@13 380 %___build_pre \
michael@13 381 HOME="%{l_prefix}"\
michael@13 382 SHELL="%{l_build_shell_cmd}"\
michael@13 383 TERM="%(echo $TERM)"\
michael@13 384 TMPDIR="%{_tmppath}"\
michael@13 385 USER="%(echo $USER)"\
michael@13 386 LOGNAME="%(echo $LOGNAME)"\
michael@13 387 PATH="%{l_build_path}"\
michael@13 388 LD_LIBRARY_PATH="%{l_build_ldlp}"\
michael@13 389 export HOME SHELL TMPDIR USER LOGNAME PATH LD_LIBRARY_PATH\
michael@13 390 RPM_SOURCE_DIR=\"%{u2p:%{_sourcedir}}\"\
michael@13 391 RPM_BUILD_DIR=\"%{u2p:%{_builddir}}\"\
michael@13 392 RPM_OPT_FLAGS=\"%{optflags}\"\
michael@13 393 RPM_ARCH=\"%{l_host_arch}\"\
michael@13 394 RPM_OS=\"%{l_host_os}\"\
michael@13 395 RPM_DOC_DIR=\"%{_docdir}\"\
michael@13 396 RPM_PACKAGE_NAME=\"%{name}\"\
michael@13 397 RPM_PACKAGE_VERSION=\"%{version}\"\
michael@13 398 RPM_PACKAGE_RELEASE=\"%{release}\"\
michael@13 399 export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS RPM_DOC_DIR\
michael@13 400 export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\
michael@13 401 %{?buildroot:RPM_BUILD_ROOT=\"%{u2p:%{buildroot}}\"\
michael@13 402 export RPM_BUILD_ROOT}\
michael@13 403 %{l_build_ulim}\
michael@13 404 umask 022\
michael@13 405 %{verbose:set -x}%{!verbose:exec >/dev/null}\
michael@13 406 cd %{u2p:%{_builddir}}
michael@13 407
michael@13 408 # special %track section support
michael@13 409 %__spec_track_template VCFILE="%{_tmppath}/%{name}-%{version}-%{release}.vc"\
michael@13 410 rm -f $VCFILE\
michael@13 411 set -o noclobber\
michael@13 412 sed -e 's;^ *#.*$;;' -e 's;^ ;;' >$VCFILE <<'EOF'\
michael@13 413 %{nil}
michael@13 414 %__spec_track_post EOF\
michael@13 415 if [ ".%{?___track_dump}" = .yes ]; then\
michael@13 416 cat $VCFILE\
michael@13 417 else\
michael@13 418 if [ ! -f "%{l_vcheck}" ]; then\
michael@13 419 echo "rpm:ERROR: Vendor source tracking functionality currently not available because"\
michael@13 420 echo "rpm:ERROR: URL tracking tool vcheck(1) not found under \\"%{l_vcheck}\\"."\
michael@13 421 echo "rpm:ERROR: You have to install the OpenPKG \\"vcheck\\" package first or set"\
michael@13 422 echo "rpm:ERROR: the RPM macro \\"%%{l_vcheck}\\" to the path of your vcheck(1) tool."\
michael@13 423 exit 0\
michael@13 424 fi\
michael@13 425 ( echo "config = {"\
michael@13 426 echo "}"\
michael@13 427 ) >>$VCFILE\
michael@13 428 %{l_vcheck} -v -f $VCFILE || true\
michael@13 429 fi\
michael@13 430 rm -f $VCFILE\
michael@13 431 %{nil}
michael@13 432

mercurial