michael@13: ## michael@13: ## rpmmacros -- OpenPKG RPM Macros michael@13: ## Copyright (c) 2000-2007 OpenPKG Foundation e.V. michael@13: ## Copyright (c) 2000-2007 Ralf S. Engelschall michael@13: ## michael@13: ## Permission to use, copy, modify, and distribute this software for michael@13: ## any purpose with or without fee is hereby granted, provided that michael@13: ## the above copyright notice and this permission notice appear in all michael@13: ## copies. michael@13: ## michael@13: ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED michael@13: ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF michael@13: ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. michael@13: ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR michael@13: ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, michael@13: ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT michael@13: ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF michael@13: ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND michael@13: ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, michael@13: ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT michael@13: ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF michael@13: ## SUCH DAMAGE. michael@13: ## michael@13: ## The purpose of this macro set is to override the default michael@13: ## macros in the OpenPKG RPM installation for the @l_prefix@ hierarchy. michael@13: ## michael@13: michael@13: # the OpenPKG release identification (for the current package or as a fallback for the bootstrap package) michael@13: %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: michael@13: # the OpenPKG OIDs (root is officially registered at IANA) michael@13: %l_openpkg_oid 1.3.6.1.4.1.18749 michael@13: %l_openpkg_oid_bootstrap %{l_openpkg_oid}.4.1 michael@13: %l_openpkg_oid_instance %{l_openpkg_oid_bootstrap}.1 michael@13: %l_openpkg_oid_platform %{l_openpkg_oid_bootstrap}.2 michael@13: %l_openpkg_oid_tagfmtopt %{l_openpkg_oid_bootstrap}.3 michael@13: michael@13: # the OpenPKG package tagging michael@13: %l_tag_fmt @TAG@ michael@13: %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: %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: %l_tag_fmt_opt %(uuid_ns="`%{l_uuid} -v3 ns:OID %{l_openpkg_oid_tagfmtopt}`"; %{l_uuid} -v3 $uuid_ns '%{?_options}') michael@13: %l_tag_fmt_uuid %(%{l_uuid} -v1) michael@13: %l_tag_fmt_time %(date '+%%Y%%m%%d%%H%%M%%S') michael@13: %l_tag_fmt_user %(%{l_shtool} echo -e '%%u') michael@13: %l_tag_fmt_host %(%{l_shtool} echo -e '%%h%%d') michael@13: %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: %l_tag %(echo "%{l_tag_gen}" | sed -e 's;-;;g') michael@13: michael@13: # the OpenPKG instance location (backward compatibility only) michael@13: %l_location %{l_tag} michael@13: michael@13: # standard RPM host platform identification michael@13: # (defaults via "shtool platform" and uname(3); used internally) michael@13: #%_host_cpu ...USE INTERNAL DEFAULT... michael@13: #%_host_vendor ...USE INTERNAL DEFAULT... michael@13: #%_host_os ...USE INTERNAL DEFAULT... michael@13: %_host_alias %{nil} michael@13: %_host %{_host_cpu}-%{_host_os} michael@13: michael@13: # standard RPM build platform identification michael@13: # (defaults via %{_host*} macros; not used internally AFAIK) michael@13: %_build_cpu %{_host_cpu} michael@13: %_build_vendor %{_host_vendor} michael@13: %_build_os %{_host_os} michael@13: %_build_alias %{_host_alias} michael@13: %_build %{_host} michael@13: michael@13: # standard RPM target platform identification michael@13: # (defaults via %{_host*} macros; used internally for %ifarch/%ifnarch) michael@13: %_target_cpu %{_host_cpu} michael@13: %_target_vendor %{_host_vendor} michael@13: %_target_os %{_host_os} michael@13: %_target_alias %{_host_alias} michael@13: %_target %{_host} michael@13: michael@13: # legacy RPM platform macros michael@13: # (defaults via config.guess/config.sub under RPM build-time) michael@13: %_arch %{_host_cpu} michael@13: %_vendor %{_host_vendor} michael@13: %_os %{_host_os} michael@13: michael@13: # legacy RPM platform macros michael@13: # (defaults via various other macros; partly used internally) michael@13: %_build_arch %{_arch} michael@13: %_target_platform %{_target_cpu}-%{_target_vendor}-%{_target_os} michael@13: %_gnu %{nil} michael@13: michael@13: # official OpenPKG host platform identification michael@13: %l_host_arch %{_host_cpu} michael@13: %l_host_vendor %{_host_vendor} michael@13: %l_host_os %{_host_os} michael@13: %l_host %{_host_cpu}-%{_host_os} michael@13: michael@13: # new OpenPKG platform identification michael@13: %l_platform(cptF:) %(if [ ".%{?-F}" != . ]; then fmt="%{-F*}"; else T="%{?-c:c}%{?-p:p}%{?-t:t}"; [ ".$T" = . ] && T="p"; fmt="%%-%%"; fi; %{l_shtool} platform -n -L -S "" -C "+" -F "$fmt") michael@13: michael@13: # old OpenPKG platform identification michael@13: %l_target %{l_platform -t} michael@13: michael@13: # the *S*uper-user user/group name/id pair michael@13: %l_susr @SUSR@ michael@13: %l_sgrp @SGRP@ michael@13: %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: %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: michael@13: # the *M*anagement user/group name/id pair michael@13: %l_musr @MUSR@ michael@13: %l_mgrp @MGRP@ michael@13: %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: %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: michael@13: # the *R*restricted user/group name/id pair michael@13: %l_rusr @RUSR@ michael@13: %l_rgrp @RGRP@ michael@13: %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: %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: michael@13: # the *N*on-privileged user/group name/id pair michael@13: %l_nusr @NUSR@ michael@13: %l_ngrp @NGRP@ michael@13: %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: %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: michael@13: # backward compatibility (openpkg < 20020204) michael@13: %l_fsusr %{l_musr} michael@13: %l_fsgrp %{l_mgrp} michael@13: %l_npuid %{l_nuid} michael@13: %l_npgid %{l_ngid} michael@13: michael@13: # define the installation hierarchy (used parts) michael@13: %l_prefix @l_prefix@ michael@13: %l_prefix_static @l_prefix_static@ michael@13: michael@13: # define the installation hierarchy (unused parts) michael@13: %l_exec_prefix %{l_prefix} michael@13: %l_bindir %{l_prefix}/bin michael@13: %l_sbindir %{l_prefix}/sbin michael@13: %l_libexecdir %{l_prefix}/libexec michael@13: %l_datadir %{l_prefix}/share michael@13: %l_sysconfdir %{l_prefix}/etc michael@13: %l_sharedstatedir %{l_prefix}/com michael@13: %l_localstatedir %{l_prefix}/var michael@13: %l_libdir %{l_prefix}/lib michael@13: %l_includedir %{l_prefix}/include michael@13: %l_infodir %{l_prefix}/info michael@13: %l_mandir %{l_prefix}/man michael@13: %l_docdir %{l_prefix}/doc michael@13: michael@13: # provide killer macro "%{l_value -s|-b|-c (l_xxx ...|-a|-A)}" which michael@13: # expands to the values of previous l_xxx variables in this file. With michael@13: # option "-s" it expands into a chain of "-e 's;;;g'" michael@13: # constructs for used with Stream Editor sed(1), with option "-b" it michael@13: # expands into a chain of "='';" constructs for use with michael@13: # Bourne-Shell sh(1), with option "-c" it expands into a chain of "set michael@13: # = '';" constructs for use with C-Shell csh(1). But michael@13: # be careful, currently (for expansion speed reasons) is not michael@13: # escaped, so make sure the values of the above macros do not contain michael@13: # ";" for "-s" and ";" for "-b" and "-c". You can either specify one michael@13: # or more names of variables to expand or use "-a" for mostly all michael@13: # variables and "-A" for really all variables. michael@13: %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: michael@13: # local version of the empty macro michael@13: %l_nil %{nil} michael@13: michael@13: # override the internal RPM hierarchy variables michael@13: %_usr %{nil} michael@13: %_var %{nil} michael@13: %_usrsrc %{nil} michael@13: %_topdir %{nil} michael@13: %_dbpath %{l_prefix}/RPM/DB michael@13: %_builddir %{l_prefix}/RPM/TMP michael@13: %_tmppath %{l_prefix}/RPM/TMP michael@13: %_sourcedir %{l_prefix}/RPM/SRC/%{name} michael@13: %_specdir %{l_prefix}/RPM/SRC/%{name} michael@13: %_rpmdir %{l_prefix}/RPM/PKG michael@13: %_srcrpmdir %{l_prefix}/RPM/PKG michael@13: %_repackage_dir %{l_prefix}/RPM/PKG michael@13: %_cache_dbpath %{l_prefix}/RPM/PKG michael@13: %_solve_dbpath %{l_prefix}/RPM/PKG michael@13: %_solve_pkgsdir %{l_prefix}/RPM/PKG michael@13: %_defaultdocdir %{l_docdir} michael@13: michael@13: # complement the %{SOURCE} and %{PATCH} with %{SOURCE } and %{PATCH } michael@13: %SOURCE() %(f="%1"; if [ -f "%{_specdir}/$f" ]; then echo "%{_specdir}/$f"; else echo "%{_sourcedir}/$f"; fi) michael@13: %PATCH() %(f="%1"; if [ -f "%{_specdir}/$f" ]; then echo "%{_specdir}/$f"; else echo "%{_sourcedir}/$f"; fi) michael@13: michael@13: # override RPM's absolute tool paths with relative ones michael@13: # (because if you upgrade RPM it would hard-code tools in own hierarchy, too) michael@13: %__awk awk michael@13: %__bzip2 %{_bzip2bin} michael@13: %__cat cat michael@13: %__chgrp chgrp michael@13: %__chmod chmod michael@13: %__chown chown michael@13: %__cp cp michael@13: %__cpio cpio michael@13: %__grep grep michael@13: %__gzip %{_gzipbin} michael@13: %__id id michael@13: %__install install michael@13: %__ln_s ln -s michael@13: %__make make michael@13: %__mkdir mkdir michael@13: %__mkdir_p %{l_shtool} mkdir -p michael@13: %__mv mv michael@13: %__patch %{_patchbin} michael@13: %__perl perl michael@13: %__pgp %{_pgpbin} michael@13: %__rm rm michael@13: %__rsh rsh michael@13: %__sed sed michael@13: %__ssh ssh michael@13: %__tar %{_tarbin} michael@13: %__unzip %{_unzipbin} michael@13: michael@13: # override some more RPM macros where the default value is not acceptable michael@13: %_dependency_whiteout %{nil} michael@13: %__debug_install_post %{nil} michael@13: %_unpackaged_files_terminate_build 0 michael@13: michael@303: # override automatic dependency generation michael@303: %_use_internal_dependency_generator 0 michael@303: %__find_provides %{nil} michael@303: %__find_requires %{nil} michael@303: %__find_prereq %{nil} michael@303: %__perl_provides %{nil} michael@303: %__perl_requires %{nil} michael@303: michael@13: # provide fixed paths to tools (standard) michael@13: %_gzipbin %{l_prefix}/lib/openpkg/gzip michael@13: %_bzip2bin %{l_prefix}/lib/openpkg/bzip2 michael@13: %_patchbin %{l_prefix}/lib/openpkg/patch michael@13: %_tarbin %{l_prefix}/lib/openpkg/tar michael@13: %_unzipbin %{l_prefix}/lib/openpkg/unzip michael@13: michael@13: # provide path to platform identification file michael@13: %__platform %{l_prefix}/etc/openpkg/platform michael@13: michael@13: # provide fixed paths to tools (additional) michael@13: %l_rc %{l_prefix}/etc/rc michael@13: %l_rpm %{l_prefix}/libexec/openpkg/rpm michael@13: %l_rpm2cpio %{l_prefix}/libexec/openpkg/rpm2cpio michael@13: %l_rpm_config %{l_prefix}/libexec/openpkg/rpm-config michael@13: %l_lsync %{l_prefix}/libexec/openpkg/lsync michael@13: %l_rpmtool %{l_prefix}/lib/openpkg/rpmtool michael@13: %l_shtool %{l_prefix}/lib/openpkg/shtool michael@13: %l_curl %{l_prefix}/lib/openpkg/curl michael@13: %l_bash %{l_prefix}/lib/openpkg/bash michael@13: %l_uuid %{l_prefix}/lib/openpkg/uuid michael@13: michael@13: # provide smart paths to tools michael@13: %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: %l_gzip %{l_tool_locate gzip gzip} michael@13: %l_bzip2 %{l_tool_locate bzip2 bzip2} michael@13: %l_tar %{l_tool_locate tar tar} michael@13: %l_make %{l_tool_locate make make} michael@13: %l_cc %{l_tool_locate cc cc} michael@13: %l_ar %{l_tool_locate ar ar} michael@13: %l_ld %{l_tool_locate ld ld} michael@13: %l_as %{l_tool_locate as as} michael@13: %l_strip %{l_tool_locate strip strip} michael@13: %l_cxx %{l_tool_locate cxx c++} michael@13: %l_patch %{l_tool_locate patch patch} michael@13: %l_sed %{l_tool_locate sed sed} michael@13: %l_grep %{l_tool_locate grep grep} michael@13: %l_awk %{l_tool_locate awk awk} michael@13: %l_autoconf %{l_tool_locate autoconf autoconf} michael@13: %l_automake %{l_tool_locate automake automake} michael@13: %l_libtool %{l_tool_locate libtool libtool} michael@13: %l_flex %{l_tool_locate flex flex} michael@13: %l_bison %{l_tool_locate bison bison} michael@13: %l_perl %{l_tool_locate perl perl} michael@13: %l_miniperl %{l_tool_locate miniperl miniperl} michael@13: %l_openssl %{l_tool_locate openssl openssl} michael@13: %l_xmkmf %{l_tool_locate xmkmf xmkmf} michael@13: %l_vcheck %{l_tool_locate vcheck vcheck} michael@13: michael@13: # tool options michael@13: %l_mflags(O) %(%{l_sane_env}; %{l_rpmtool} mflags %{-O:-O} "%{l_make}") michael@13: %l_cflags(O) %(%{l_sane_env}; %{l_rpmtool} cflags %{-O:-O} "%{l_cc}") michael@13: %l_cxxflags(O) %(%{l_sane_env}; %{l_rpmtool} cflags %{-O:-O} "%{l_cxx}") michael@13: %l_cppflags(i) %(%{l_sane_env}; %{l_rpmtool} cppflags -p%{l_prefix} %{-i:-i} -- %*) michael@13: %l_ldflags() %(%{l_sane_env}; %{l_rpmtool} ldflags -p%{l_prefix} -- %*) michael@13: michael@13: # OSSP fake syslog library michael@13: %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: %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: michael@13: # determine the current username michael@13: %l_whoami %((id -un) 2>/dev/null || (whoami) 2>/dev/null || (who am i | cut "-d " -f1) 2>/dev/null || echo $LOGNAME) michael@13: michael@13: # macros for dynamically generating a %files list michael@13: %l_files_defattr '%%defattr(-,%{l_musr},%{l_mgrp})' michael@13: %l_files_all '%{l_prefix}' michael@13: %l_files_noshared '%%not %%dir {%{l_prefix},%{l_prefix}/*,%{l_prefix}/etc/rc.d,%{l_prefix}/man/*}' michael@13: %l_files_std() %l_files_defattr %l_files_all %l_files_noshared michael@13: michael@13: # path to local build root michael@13: %l_buildroot %{_tmppath}/%{name}-%{version}-root michael@13: michael@13: # path to local temporary location michael@13: %l_tmpdir() %{_tmppath} michael@13: %l_tmpfile() %{l_tmpdir}/%{name}-%{version}-%{release}-tmp%{?1:-%1} michael@13: michael@13: # executable path for %post/%pre michael@13: %_install_script_path %{l_prefix}/bin:%{l_prefix}/sbin:/bin:/sbin:/usr/bin:/usr/sbin michael@13: michael@13: # names of RPM files michael@13: %l_srcrpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.src.rpm michael@13: %l_binrpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}-%%{OS}-%{l_tag}.rpm michael@13: michael@13: # override the name scheme for RPM files michael@13: %_rpmfilename %{l_binrpmfilename} michael@13: %_build_name_fmt %{l_binrpmfilename} michael@13: %_repackage_name_fmt %{l_binrpmfilename} michael@13: %_solve_name_fmt %{_solve_pkgsdir}/%{l_binrpmfilename} michael@13: michael@13: # override the payload compression for the CPIO parts of an RPM michael@13: # (we use the equivalent of "bzip2 -9") michael@13: %_source_payload w9.bzdio michael@13: %_binary_payload w9.bzdio michael@13: michael@13: # package signature type is OpenPGP via GnuPG michael@13: %__gpg %{l_prefix}/bin/gpg michael@13: %_signature gpg michael@13: %__vsflags 1 michael@13: michael@13: # two macro-processor add-ons (should be part of forthcoming RPM releases) michael@13: %ifdef() %if %{expand:%%{?%{1}:1}%%{!?%{1}:0}} michael@13: %ifndef() %if %{expand:%%{?%{1}:0}%%{!?%{1}:1}} michael@13: michael@13: # macro for package option configuration michael@13: %option() %{expand:%%{!?%{1}:%%global %*}} %{expand:%%global _options %{?_options:%{_options}:}%{1}=%%%{1}} \ michael@13: Provides: %{name}::%{1} = %(echo '%{expand:%%{%{1}}}' | sed -e 's;%%;%%%%;g' -e 's; ;%%20;g' -e 's; ;%%09;g') michael@13: michael@13: # macros for NoSource/NoPatch (distribution restriction) integrity handling michael@13: %NoSource() %(if [ ".%{?restriction}" != ".no" ]; then echo "NoSource: %1"; fi)%{expand:%%global _restricted %{?_restricted:%{_restricted}} %%{SOURCEURL%1}} michael@13: %NoPatch() %(if [ ".%{?restriction}" != ".no" ]; then echo "NoPatch: %1"; fi)%{expand:%%global _restricted %{?_restricted:%{_restricted}} %%{PATCHURL%1}} michael@13: %integrity() %{l_check_nosource} michael@13: michael@13: # macros for checking build environment michael@13: %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: %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: %prep %%prep\ michael@13: %{l_check_nosource} \ michael@13: %{l_check_class} \ michael@13: %{nil} michael@13: michael@13: # macro-processor add-on for testing external conditions michael@13: %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: michael@13: # default list of vendor source fetching locations michael@13: %l_fetch_mirror_0 - michael@13: %l_fetch_mirror_1 - michael@13: %l_fetch_mirror_2 - michael@13: %l_fetch_mirror_3 - michael@13: %l_fetch_mirror_4 - michael@13: %l_fetch_mirror_5 - michael@13: %l_fetch_mirror_6 - michael@13: %l_fetch_mirror_7 - michael@13: %l_fetch_mirror_8 - michael@13: %l_fetch_mirror_9 - michael@13: %l_fetch_backup_0 - michael@13: %l_fetch_backup_1 - michael@13: %l_fetch_backup_2 - michael@13: %l_fetch_backup_3 - michael@13: %l_fetch_backup_4 - michael@13: %l_fetch_backup_5 - michael@13: %l_fetch_backup_6 - michael@13: %l_fetch_backup_7 - michael@13: %l_fetch_backup_8 - michael@13: %l_fetch_backup_9 ftp://ftp.openpkg.org/sources/DST/%{name}/ michael@13: michael@13: # sane build environment setup michael@13: %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: %l_build_ldlp %{l_prefix}/lib:@l_build_ldlp@ michael@13: %l_build_ulim @l_build_ulim@ michael@13: %l_build_shell_cmd %{l_prefix}/lib/openpkg/bash michael@13: %l_build_shell_opt --norc --noprofile --posix michael@13: michael@13: # sane build environment for manual usage in macros (currently just $PATH) michael@13: %l_sane_env PATH="%{l_build_path}"; export PATH; LD_LIBRARY_PATH="%{l_build_ldlp}"; export LD_LIBRARY_PATH michael@13: michael@13: # sane build environment for %prep/%build/%install michael@13: %_buildshell env -i %{l_build_shell_cmd} %{l_build_shell_opt} michael@13: %___build_pre \ michael@13: HOME="%{l_prefix}"\ michael@13: SHELL="%{l_build_shell_cmd}"\ michael@13: TERM="%(echo $TERM)"\ michael@13: TMPDIR="%{_tmppath}"\ michael@13: USER="%(echo $USER)"\ michael@13: LOGNAME="%(echo $LOGNAME)"\ michael@13: PATH="%{l_build_path}"\ michael@13: LD_LIBRARY_PATH="%{l_build_ldlp}"\ michael@13: export HOME SHELL TMPDIR USER LOGNAME PATH LD_LIBRARY_PATH\ michael@13: RPM_SOURCE_DIR=\"%{u2p:%{_sourcedir}}\"\ michael@13: RPM_BUILD_DIR=\"%{u2p:%{_builddir}}\"\ michael@13: RPM_OPT_FLAGS=\"%{optflags}\"\ michael@13: RPM_ARCH=\"%{l_host_arch}\"\ michael@13: RPM_OS=\"%{l_host_os}\"\ michael@13: RPM_DOC_DIR=\"%{_docdir}\"\ michael@13: RPM_PACKAGE_NAME=\"%{name}\"\ michael@13: RPM_PACKAGE_VERSION=\"%{version}\"\ michael@13: RPM_PACKAGE_RELEASE=\"%{release}\"\ michael@13: export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS RPM_DOC_DIR\ michael@13: export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\ michael@13: %{?buildroot:RPM_BUILD_ROOT=\"%{u2p:%{buildroot}}\"\ michael@13: export RPM_BUILD_ROOT}\ michael@13: %{l_build_ulim}\ michael@13: umask 022\ michael@13: %{verbose:set -x}%{!verbose:exec >/dev/null}\ michael@13: cd %{u2p:%{_builddir}} michael@13: michael@13: # special %track section support michael@13: %__spec_track_template VCFILE="%{_tmppath}/%{name}-%{version}-%{release}.vc"\ michael@13: rm -f $VCFILE\ michael@13: set -o noclobber\ michael@13: sed -e 's;^ *#.*$;;' -e 's;^ ;;' >$VCFILE <<'EOF'\ michael@13: %{nil} michael@13: %__spec_track_post EOF\ michael@13: if [ ".%{?___track_dump}" = .yes ]; then\ michael@13: cat $VCFILE\ michael@13: else\ michael@13: if [ ! -f "%{l_vcheck}" ]; then\ michael@13: echo "rpm:ERROR: Vendor source tracking functionality currently not available because"\ michael@13: echo "rpm:ERROR: URL tracking tool vcheck(1) not found under \\"%{l_vcheck}\\"."\ michael@13: echo "rpm:ERROR: You have to install the OpenPKG \\"vcheck\\" package first or set"\ michael@13: echo "rpm:ERROR: the RPM macro \\"%%{l_vcheck}\\" to the path of your vcheck(1) tool."\ michael@13: exit 0\ michael@13: fi\ michael@13: ( echo "config = {"\ michael@13: echo "}"\ michael@13: ) >>$VCFILE\ michael@13: %{l_vcheck} -v -f $VCFILE || true\ michael@13: fi\ michael@13: rm -f $VCFILE\ michael@13: %{nil} michael@13: