Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 2269bb274471fd2722517c2c0b740d7f > files > 236

rpm-devel-4.0.4-19mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>build/reqprov.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.17 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><h1>build/reqprov.c</h1><a href="reqprov_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 
00006 <span class="preprocessor">#include "<a class="code" href="system_8h.html">system.h</a>"</span>
00007 
00008 <span class="preprocessor">#include "<a class="code" href="rpmbuild_8h.html">rpmbuild.h</a>"</span>
00009 <span class="preprocessor">#include "<a class="code" href="debug_8h.html">debug.h</a>"</span>
00010 
<a name="l00011"></a><a class="code" href="group__rpmbuild.html#a42">00011</a> <span class="keywordtype">int</span> <a class="code" href="group__rpmbuild.html#a42">addReqProv</a>(<span class="comment">/*@unused@*/</span> <a class="code" href="structSpecStruct.html">Spec</a> spec, <a class="code" href="structheaderToken.html">Header</a> h,
00012                <a class="code" href="rpmlib_8h.html#a56">rpmsenseFlags</a> depFlags, <span class="keyword">const</span> <span class="keywordtype">char</span> *depName, <span class="keyword">const</span> <span class="keywordtype">char</span> *depEVR,
00013                 <span class="keywordtype">int</span> index)
00014 {
00015     <a class="code" href="rpmlib_8h.html#a69">HGE_t</a> hge = (HGE_t)headerGetEntryMinMemory;
00016     <a class="code" href="rpmlib_8h.html#a68">HFD_t</a> hfd = headerFreeData;
00017     <span class="keyword">const</span> <span class="keywordtype">char</span> ** names;
00018     <a class="code" href="group__header.html#a13">rpmTagType</a> dnt;
00019     <a class="code" href="rpmlib_8h.html#a53">rpmTag</a> nametag = 0;
00020     <a class="code" href="rpmlib_8h.html#a53">rpmTag</a> versiontag = 0;
00021     <a class="code" href="rpmlib_8h.html#a53">rpmTag</a> flagtag = 0;
00022     <a class="code" href="rpmlib_8h.html#a53">rpmTag</a> indextag = 0;
00023     <span class="keywordtype">int</span> len;
00024     <a class="code" href="rpmlib_8h.html#a56">rpmsenseFlags</a> extra = <a class="code" href="rpmlib_8h.html#a497a253">RPMSENSE_ANY</a>;
00025     <span class="keywordtype">int</span> xx;
00026     
00027     <span class="keywordflow">if</span> (depFlags &amp; <a class="code" href="rpmlib_8h.html#a497a258">RPMSENSE_PROVIDES</a>) {
00028         nametag = <a class="code" href="rpmlib_8h.html#a494a160">RPMTAG_PROVIDENAME</a>;
00029         versiontag = <a class="code" href="rpmlib_8h.html#a494a217">RPMTAG_PROVIDEVERSION</a>;
00030         flagtag = <a class="code" href="rpmlib_8h.html#a494a216">RPMTAG_PROVIDEFLAGS</a>;
00031         extra = depFlags &amp; <a class="code" href="rpmlib_8h.html#a497a269">RPMSENSE_FIND_PROVIDES</a>;
00032     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (depFlags &amp; <a class="code" href="rpmlib_8h.html#a497a261">RPMSENSE_OBSOLETES</a>) {
00033         nametag = <a class="code" href="rpmlib_8h.html#a494a194">RPMTAG_OBSOLETENAME</a>;
00034         versiontag = <a class="code" href="rpmlib_8h.html#a494a219">RPMTAG_OBSOLETEVERSION</a>;
00035         flagtag = <a class="code" href="rpmlib_8h.html#a494a218">RPMTAG_OBSOLETEFLAGS</a>;
00036     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (depFlags &amp; <a class="code" href="rpmlib_8h.html#a497a259">RPMSENSE_CONFLICTS</a>) {
00037         nametag = <a class="code" href="rpmlib_8h.html#a494a167">RPMTAG_CONFLICTNAME</a>;
00038         versiontag = <a class="code" href="rpmlib_8h.html#a494a168">RPMTAG_CONFLICTVERSION</a>;
00039         flagtag = <a class="code" href="rpmlib_8h.html#a494a166">RPMTAG_CONFLICTFLAGS</a>;
00040     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (depFlags &amp; <a class="code" href="rpmlib_8h.html#a497a260">RPMSENSE_PREREQ</a>) {
00041         nametag = <a class="code" href="rpmlib_8h.html#a494a162">RPMTAG_REQUIRENAME</a>;
00042         versiontag = <a class="code" href="rpmlib_8h.html#a494a163">RPMTAG_REQUIREVERSION</a>;
00043         flagtag = <a class="code" href="rpmlib_8h.html#a494a161">RPMTAG_REQUIREFLAGS</a>;
00044         extra = depFlags &amp; <a class="code" href="rpmlib_8h.html#a19">_ALL_REQUIRES_MASK</a>;
00045     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (depFlags &amp; <a class="code" href="rpmlib_8h.html#a17">RPMSENSE_TRIGGER</a>) {
00046         nametag = <a class="code" href="rpmlib_8h.html#a494a179">RPMTAG_TRIGGERNAME</a>;
00047         versiontag = <a class="code" href="rpmlib_8h.html#a494a180">RPMTAG_TRIGGERVERSION</a>;
00048         flagtag = <a class="code" href="rpmlib_8h.html#a494a181">RPMTAG_TRIGGERFLAGS</a>;
00049         indextag = <a class="code" href="rpmlib_8h.html#a494a182">RPMTAG_TRIGGERINDEX</a>;
00050         extra = depFlags &amp; <a class="code" href="rpmlib_8h.html#a17">RPMSENSE_TRIGGER</a>;
00051     } <span class="keywordflow">else</span> {
00052         nametag = <a class="code" href="rpmlib_8h.html#a494a162">RPMTAG_REQUIRENAME</a>;
00053         versiontag = <a class="code" href="rpmlib_8h.html#a494a163">RPMTAG_REQUIREVERSION</a>;
00054         flagtag = <a class="code" href="rpmlib_8h.html#a494a161">RPMTAG_REQUIREFLAGS</a>;
00055         extra = depFlags &amp; <a class="code" href="rpmlib_8h.html#a19">_ALL_REQUIRES_MASK</a>;
00056     }
00057 
00058     depFlags = (depFlags &amp; (<a class="code" href="rpmlib_8h.html#a16">RPMSENSE_SENSEMASK</a> | <a class="code" href="rpmlib_8h.html#a497a273">RPMSENSE_MULTILIB</a>)) | extra;
00059 
00060     <span class="comment">/*@-branchstate@*/</span>
00061     <span class="keywordflow">if</span> (depEVR == NULL)
00062         depEVR = <span class="stringliteral">""</span>;
00063     <span class="comment">/*@=branchstate@*/</span>
00064     
00065     <span class="comment">/* Check for duplicate dependencies. */</span>
00066     <span class="keywordflow">if</span> (hge(h, nametag, &amp;dnt, (<span class="keywordtype">void</span> **) &amp;names, &amp;len)) {
00067         <span class="keyword">const</span> <span class="keywordtype">char</span> ** versions = NULL;
00068         <a class="code" href="group__header.html#a13">rpmTagType</a> dvt = <a class="code" href="group__header.html#a93a73">RPM_STRING_ARRAY_TYPE</a>;
00069         <span class="keywordtype">int</span> *flags = NULL;
00070         <span class="keywordtype">int</span> *indexes = NULL;
00071         <span class="keywordtype">int</span> duplicate = 0;
00072 
00073         <span class="keywordflow">if</span> (flagtag) {
00074             xx = hge(h, versiontag, &amp;dvt, (<span class="keywordtype">void</span> **) &amp;versions, NULL);
00075             xx = hge(h, flagtag, NULL, (<span class="keywordtype">void</span> **) &amp;flags, NULL);
00076         }
00077         <span class="keywordflow">if</span> (indextag)
00078             xx = hge(h, indextag, NULL, (<span class="keywordtype">void</span> **) &amp;indexes, NULL);
00079 
00080         <span class="keywordflow">while</span> (len &gt; 0) {
00081             len--;
00082             <span class="keywordflow">if</span> (strcmp(names[len], depName))
00083                 <span class="keywordflow">continue</span>;
00084             <span class="keywordflow">if</span> (flagtag &amp;&amp; versions != NULL &amp;&amp;
00085                 (strcmp(versions[len], depEVR) ||
00086         ((flags[len] | <a class="code" href="rpmlib_8h.html#a497a273">RPMSENSE_MULTILIB</a>) != (depFlags | <a class="code" href="rpmlib_8h.html#a497a273">RPMSENSE_MULTILIB</a>))))
00087                 <span class="keywordflow">continue</span>;
00088             <span class="keywordflow">if</span> (indextag &amp;&amp; indexes != NULL &amp;&amp; indexes[len] != index)
00089                 <span class="keywordflow">continue</span>;
00090 
00091             <span class="comment">/* This is a duplicate dependency. */</span>
00092             duplicate = 1;
00093 
00094             <span class="keywordflow">if</span> (flagtag &amp;&amp; <a class="code" href="rpmlib_8h.html#a18">isDependsMULTILIB</a>(depFlags) &amp;&amp;
00095                 !<a class="code" href="rpmlib_8h.html#a18">isDependsMULTILIB</a>(flags[len]))
00096                     flags[len] |= <a class="code" href="rpmlib_8h.html#a497a273">RPMSENSE_MULTILIB</a>;
00097 
00098             <span class="keywordflow">break</span>;
00099         }
00100         names = hfd(names, dnt);
00101         versions = hfd(versions, dvt);
00102         <span class="keywordflow">if</span> (duplicate)
00103             <span class="keywordflow">return</span> 0;
00104     }
00105 
00106     <span class="comment">/* Add this dependency. */</span>
00107     xx = <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(h, nametag, <a class="code" href="group__header.html#a93a73">RPM_STRING_ARRAY_TYPE</a>, &amp;depName, 1);
00108     <span class="keywordflow">if</span> (flagtag) {
00109         xx = <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(h, versiontag,
00110                                <a class="code" href="group__header.html#a93a73">RPM_STRING_ARRAY_TYPE</a>, &amp;depEVR, 1);
00111         xx = <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(h, flagtag,
00112                                <a class="code" href="group__header.html#a93a70">RPM_INT32_TYPE</a>, &amp;depFlags, 1);
00113     }
00114     <span class="keywordflow">if</span> (indextag)
00115         xx = <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(h, indextag, <a class="code" href="group__header.html#a93a70">RPM_INT32_TYPE</a>, &amp;index, 1);
00116 
00117     <span class="keywordflow">return</span> 0;
00118 }
00119 
<a name="l00120"></a><a class="code" href="group__rpmbuild.html#a43">00120</a> <span class="keywordtype">int</span> <a class="code" href="group__rpmbuild.html#a43">rpmlibNeedsFeature</a>(<a class="code" href="structheaderToken.html">Header</a> h, <span class="keyword">const</span> <span class="keywordtype">char</span> * feature, <span class="keyword">const</span> <span class="keywordtype">char</span> * featureEVR)
00121 {
00122     <span class="keywordtype">char</span> * reqname = <a class="code" href="system_8h.html#a36">alloca</a>(<span class="keyword">sizeof</span>(<span class="stringliteral">"rpmlib()"</span>) + strlen(feature));
00123 
00124     (void) <a class="code" href="system_8h.html#a32">stpcpy</a>( <a class="code" href="system_8h.html#a32">stpcpy</a>( <a class="code" href="system_8h.html#a32">stpcpy</a>(reqname, <span class="stringliteral">"rpmlib("</span>), feature), <span class="stringliteral">")"</span>);
00125 
00126     <span class="comment">/* XXX 1st arg is unused */</span>
00127    <span class="keywordflow">return</span> <a class="code" href="group__rpmbuild.html#a42">addReqProv</a>(NULL, h, <a class="code" href="rpmlib_8h.html#a497a278">RPMSENSE_RPMLIB</a>|(<a class="code" href="rpmlib_8h.html#a497a255">RPMSENSE_LESS</a>|<a class="code" href="rpmlib_8h.html#a497a257">RPMSENSE_EQUAL</a>),
00128         reqname, featureEVR, 0);
00129 }
</pre></div><hr><address style="align: right;"><small>Generated on Thu Sep 12 22:14:55 2002 for rpm by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.17 </small></address>
</body>
</html>