<!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> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> <a class="qindex" href="pages.html">Related Pages</a> </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 & <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 & <a class="code" href="rpmlib_8h.html#a497a269">RPMSENSE_FIND_PROVIDES</a>; 00032 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (depFlags & <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 & <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 & <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 & <a class="code" href="rpmlib_8h.html#a19">_ALL_REQUIRES_MASK</a>; 00045 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (depFlags & <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 & <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 & <a class="code" href="rpmlib_8h.html#a19">_ALL_REQUIRES_MASK</a>; 00056 } 00057 00058 depFlags = (depFlags & (<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, &dnt, (<span class="keywordtype">void</span> **) &names, &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, &dvt, (<span class="keywordtype">void</span> **) &versions, NULL); 00075 xx = hge(h, flagtag, NULL, (<span class="keywordtype">void</span> **) &flags, NULL); 00076 } 00077 <span class="keywordflow">if</span> (indextag) 00078 xx = hge(h, indextag, NULL, (<span class="keywordtype">void</span> **) &indexes, NULL); 00079 00080 <span class="keywordflow">while</span> (len > 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 && versions != NULL && 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 && indexes != NULL && 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 && <a class="code" href="rpmlib_8h.html#a18">isDependsMULTILIB</a>(depFlags) && 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>, &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>, &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>, &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>, &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>