Patch from 20021010.
authorjbj <devnull@localhost>
Thu, 10 Oct 2002 22:48:21 +0000 (22:48 +0000)
committerjbj <devnull@localhost>
Thu, 10 Oct 2002 22:48:21 +0000 (22:48 +0000)
CVS patchset: 5764
CVS date: 2002/10/10 22:48:21

xmlspec/Makefile
xmlspec/xml2rpm.c
xmlspec/xmlparse.c
xmlspec/xmlstruct.c
xmlspec/xmlstruct.h
xmlspec/xmlverify.c
xmlspec/xmlverify.h

index cad6f85..b0dff48 100644 (file)
@@ -7,7 +7,9 @@ LDFLAGS       =
 CFLAGS        = -O2 -Wall -Wpointer-arith -Wno-char-subscripts
 INCDIR        = -I. -I.. -I../build -I../lib -I../misc -I../popt -I../rpmdb -I../rpmio
 RPMDIR        = ..
-DESTDIR       = /usr/local
+
+prefix        = /usr
+DESTDIR       = 
 
 XMLBUILD      = rpmxmlbuild
 XMLBUILD_SRC  = rpmxmlbuild.c
@@ -21,6 +23,7 @@ XMLLIB_OBJ    = $(XMLLIB_SRC:.c=.o)
 LIBS          = $(XMLLIB) $(RPMDIR)/build/.libs/librpmbuild.a \
                $(RPMDIR)/lib/.libs/librpm.a $(RPMDIR)/rpmdb/.libs/librpmdb.a \
                $(RPMDIR)/rpmio/.libs/librpmio.a $(RPMDIR)/popt/.libs/libpopt.a \
+               $(RPMDIR)/libelf/lib/.libs/libelf.a \
                -lz -lexpat -lbz2
 LIBDIR        = -L. -L$(RPMDIR)/.libs -L/usr/lib
 
@@ -33,9 +36,9 @@ strip:
        $(STRIP) $(XMLBUILD)
 
 install:
-       @(cp $(XMLBUILD) $(DESTDIR)/bin)
-       @(cp $(XMLLIB) $(DESTDIR)/lib)
-       @(cp $(XMLLIB_H) $(DESTDIR)/include)
+       @(install -m 755 $(XMLBUILD) $(DESTDIR)$(prefix)/bin)
+       @(install -m 644 $(XMLLIB) $(DESTDIR)$(prefix)/lib)
+       @(install -m 644 $(XMLLIB_H) $(DESTDIR)$(prefix)/include/rpm)
 
 $(XMLLIB): $(XMLLIB_OBJ)
        $(AR) $(ARFLAGS) $(XMLLIB) $(XMLLIB_OBJ)
index 1a8490e..7e78201 100644 (file)
@@ -8,6 +8,10 @@
 #include "xml2rpm.h"
 #include "xmlstruct.h"
 
+#ifdef XML_DEBUG
+#include "header_internal.h"
+#endif
+
 // This is where our packaged scripts start (or the largest number
 // of the sources)
 int g_nMaxSourceNum = 511;
@@ -304,8 +308,14 @@ StringBuf scriptsToStringBuf(const t_structXMLScripts* pScripts,
                                createRPMSource(pScript->m_szScript, g_nMaxSourceNum+1,
                                                pSpec, RPMBUILD_ISSOURCE);
                        }
-                       if (pScript->m_szEntry)
-                               appendLineStringBuf(pSb, pScript->m_szEntry);
+                       if (pScript->m_szEntry) {
+                               // we do a newStrEx to make sure we expand all
+                               // macros, as is done in the case of the files
+                               // (done as part of the fileToStr call)
+                               newStrEx(pScript->m_szEntry, (char**)(&szTmp));
+                               appendLineStringBuf(pSb, szTmp);
+                               freeStr(&(szTmp));
+                       }
                        pScript = pScript->m_pNext;
                }
        }
@@ -335,6 +345,32 @@ void convertXMLScripts(const t_structXMLScripts* pScripts,
                               pScripts->m_szInterpreter, 1);
 }
 
+void handleProvObsConf(Header pHeader, t_structXMLRequire* pReqs, rpmsenseFlags fSense)
+{
+       t_structXMLRequire* pReq = NULL;
+       int nFlags = 0;
+       int i = 0;
+       int nIndex = 0;
+
+       pReq = pReqs;
+       while (pReq) {
+               if (pReq->m_szName) {
+                       nFlags = 0;
+                       if (pReq->m_szCompare && pReq->m_szVersion) {
+                               for (i = 0; sReqComp[i].m_szCmp; i++) {
+                                       if (!strcasecmp(sReqComp[i].m_szCmp,
+                                           pReq->m_szCompare)) {
+                                               nFlags = (sReqComp[i].m_rpmCmp | RPMSENSE_ANY) & ~RPMSENSE_SENSEMASK;
+                                       }
+                               }
+                       }
+                       addReqProv(NULL, pHeader, fSense | nFlags,
+                                  pReq->m_szName, pReq->m_szVersion, nIndex++);
+               }
+               pReq = pReq->m_pNext;
+       }
+}
+
 void convertXMLPackage(const t_structXMLPackage* pXMLPkg,
                       const t_structXMLSpec* pXMLSpec,
                       Spec pSpec)
@@ -364,6 +400,11 @@ void convertXMLPackage(const t_structXMLPackage* pXMLPkg,
        _free(szArch);
        _free(szOs);
 
+       // do the provides, obsoletes, conflicts
+       handleProvObsConf(pPkg->header, pXMLPkg->m_pProvides, RPMSENSE_PROVIDES);
+       handleProvObsConf(pPkg->header, pXMLPkg->m_pObsoletes, RPMSENSE_OBSOLETES);
+       handleProvObsConf(pPkg->header, pXMLPkg->m_pConflicts, RPMSENSE_CONFLICTS);
+
        if (pXMLPkg->m_szName)
                headerAddOrAppendEntry(pPkg->header, RPMTAG_NAME,
                                       RPM_STRING_TYPE, pXMLPkg->m_szName, 1);
@@ -514,7 +555,7 @@ Spec toRPMStruct(const t_structXMLSpec* pXMLSpec)
        pSpec->build = scriptsToStringBuf(pXMLSpec->m_pBuild, pSpec);
        pSpec->install = scriptsToStringBuf(pXMLSpec->m_pInstall, pSpec);
        pSpec->clean = scriptsToStringBuf(pXMLSpec->m_pClean, pSpec);
-       
+
        convertXMLPackage(pXMLSpec->m_pPackages, pXMLSpec, pSpec);
 
        initSourceHeader(pSpec);
index 5ff6aae..00d32ed 100644 (file)
@@ -43,7 +43,15 @@ void handleXMLStartLevel1(t_structXMLParse* pParse)
                        addXMLMacro(pParse->m_pAttrs, &(pSpec->m_pMacros));
                        break;
                case TAGVAL_SOURCE:
-                       addXMLSource(pParse->m_pAttrs, &(pSpec->m_pSources));
+                       if (pSpec->m_pSources)
+                               addXMLSource(pParse->m_pAttrs, &(pSpec->m_pSources));
+                       else {
+                               if ((addXMLSource(pParse->m_pAttrs, &(pSpec->m_pSources))) &&
+                                   (pSpec->m_pSources->m_szDirectory)) {
+                                       newStr(pSpec->m_pSources->m_szDirectory,
+                                              (char**)&(pSpec->m_szBuildSubdir));
+                               }
+                       }
                        break;
                case TAGVAL_PATCH:
                        addXMLSource(pParse->m_pAttrs, &(pSpec->m_pPatches));
@@ -178,6 +186,12 @@ void handleXMLStartLevel2(t_structXMLParse* pParse)
                                        appendStringBuf(pSb, szTmp);
                                        appendStringBuf(pSb, pSource->m_szName);
                                }
+                               else if (!strcasecmp(szTmp, "tgz")) {
+                                       szTmp = NULL;
+                                       newStrEx("%{_gzipbin} -dc ", &szTmp);
+                                       appendStringBuf(pSb, szTmp);
+                                       appendStringBuf(pSb, pSource->m_szName);
+                               }
                                else if (!strcasecmp(szTmp, "zip")) {
                                        szTmp = NULL;
                                        newStrEx("%{_unzipbin} ", &szTmp);
@@ -265,8 +279,8 @@ void handleXMLStartLevel2(t_structXMLParse* pParse)
                                        appendStringBuf(pSb, pSource->m_szName);
                                }
                                freeStr(&szTmp);
-                               szTmp = malloc(strlen(" > patch -p1234567890 -s ")+strlen(pSource->m_szName)+1);
-                               sprintf(szTmp, " | patch -p%d -s", nLevel);
+                               szTmp = malloc(strlen(" > patch -pN1234567890 -s ")+strlen(pSource->m_szName)+1);
+                               sprintf(szTmp, " | patch -Np%d -s", nLevel);
                                appendStringBuf(pSb, szTmp);
                                appendLineStringBuf(pSb, "");
                                appendLineStringBuf(pSb, "STATUS=$?");
@@ -290,6 +304,9 @@ void handleXMLStartLevel2(t_structXMLParse* pParse)
                case TAGVAL_SUMMARY:
                case TAGVAL_DESCRIPTION:
                case TAGVAL_REQUIRES:
+               case TAGVAL_PROVIDES:
+               case TAGVAL_OBSOLETES:
+               case TAGVAL_CONFLICTS:
                        // we don't need to do anything
                        break;
                default:
@@ -315,6 +332,18 @@ void handleXMLStartLevel3(t_structXMLParse* pParse)
                        pPkg = getLastXMLPackage(pSpec->m_pPackages);
                        addXMLRequire(pParse->m_pAttrs, &(pPkg->m_pRequires));
                        break;
+               case TAGVAL_PROVIDE:
+                       pPkg = getLastXMLPackage(pSpec->m_pPackages);
+                       addXMLRequire(pParse->m_pAttrs, &(pPkg->m_pProvides));
+                       break;
+               case TAGVAL_OBSOLETE:
+                       pPkg = getLastXMLPackage(pSpec->m_pPackages);
+                       addXMLRequire(pParse->m_pAttrs, &(pPkg->m_pObsoletes));
+                       break;
+               case TAGVAL_CONFLICT:
+                       pPkg = getLastXMLPackage(pSpec->m_pPackages);
+                       addXMLRequire(pParse->m_pAttrs, &(pPkg->m_pConflicts));
+                       break;
                case TAGVAL_CHANGE:
                        pChanges = getLastXMLChanges(pSpec->m_pChangelog);
                        addXMLChange(pParse->m_pAttrs, &(pChanges->m_pChanges));
@@ -544,32 +573,26 @@ void dataXMLCB(void* pData,
               int nLen)
 {
        t_structXMLParse* pParse = NULL;
+       char* szVal = NULL;
        char* szTmp = NULL;
-       char* szTmpValue = NULL;
-       char* szPos = NULL;
 
        if ((pParse = (t_structXMLParse*)pData)) {
-               szTmp = malloc(nLen+2);
-               szTmp[nLen] = '\0';
-               snprintf(szTmp, nLen+1, "%s", szValue);
-               szPos = szTmp;
-               while ((*szPos == ' ') ||
-                      (*szPos == '\t') ||
-                      (*szPos == '\r') ||
-                      (*szPos == '\n'))
-                       szPos++;
-
-               if (strlen(szPos)) {
+               szVal = malloc(nLen+2);
+               szVal[nLen] = '\0';
+               snprintf(szVal, nLen+1, "%s", szValue);
+               if (strlen(szVal)) {
+                       while ((szTmp = strchr(szVal, '\t')))
+                               *szTmp = ' ';
                        if (pParse->m_szValue) {
-                               szTmpValue = malloc(strlen(szPos)+strlen(pParse->m_szValue)+1);
-                               sprintf(szTmpValue, "%s%s", pParse->m_szValue, szPos);
-                               newStr(szTmpValue, &(pParse->m_szValue));
-                               free(szTmpValue);
+                               szTmp = malloc(strlen(szVal)+strlen(pParse->m_szValue)+1);
+                               sprintf(szTmp, "%s%s", pParse->m_szValue, szVal);
+                               newStr(szTmp, &(pParse->m_szValue));
+                               free(szTmp);
                        }
                        else
-                               newStr(szPos, &(pParse->m_szValue));
+                               newStr(szVal, &(pParse->m_szValue));
                }
-               free(szTmp);
+               free(szVal);
        }
 }
 
index 154cacb..0292f41 100644 (file)
@@ -97,7 +97,7 @@ t_structXMLAttr* getXMLAttr(const char* szName,
 {
        while (pAttr && (strcasecmp(szName, pAttr->m_szName) != 0))
                pAttr = pAttr->m_pNext;
-               
+
        return pAttr;
 }
 
@@ -236,7 +236,7 @@ t_structXMLSource* newXMLSource(const t_structXMLAttr* pAttrs)
                        attrSetInt(pAttr, "size", &(pSource->m_nSize));
                        attrSetStr(pAttr, "md5", &(pSource->m_szMD5));
                        attrSetStr(pAttr, "directory", &(pSource->m_szDirectory));
-                       attrSetInt(pAttr, "number", &(pSource->m_nNum));
+                       attrSetInt(pAttr, "id", &(pSource->m_nNum));
                } while ((pAttr = pAttr->m_pNext));
        }
 
@@ -365,6 +365,8 @@ t_structXMLScript* newXMLScript(const t_structXMLAttr* pAttrs)
 
        if ((pScript = malloc(sizeof(t_structXMLScript)))) {
                pScript->m_szInterpreter = NULL;
+               pScript->m_szArch = NULL;
+               pScript->m_szOS = NULL;
                pScript->m_szScript = NULL;
                pScript->m_szEntry = NULL;
                pScript->m_pNext = NULL;
@@ -373,6 +375,10 @@ t_structXMLScript* newXMLScript(const t_structXMLAttr* pAttrs)
                        do {
                                attrSetStr(pAttr, "interpreter",
                                           &(pScript->m_szInterpreter));
+                               attrSetStr(pAttr, "arch",
+                                          &(pScript->m_szArch));
+                               attrSetStr(pAttr, "os",
+                                          &(pScript->m_szOS));
                                attrSetStr(pAttr, "script",
                                           &(pScript->m_szScript));
                        } while ((pAttr = pAttr->m_pNext));
@@ -386,6 +392,8 @@ int freeXMLScript(t_structXMLScript** ppScript)
 {
        if (*ppScript) {
                freeStr(&((*ppScript)->m_szInterpreter));
+               freeStr(&((*ppScript)->m_szArch));
+               freeStr(&((*ppScript)->m_szOS));
                freeStr(&((*ppScript)->m_szScript));
                freeStr(&((*ppScript)->m_szEntry));
                freeXMLScript(&((*ppScript)->m_pNext));
@@ -485,6 +493,59 @@ int freeXMLFiles(t_structXMLFiles** ppFiles)
        return 0;
 }
 
+t_structI18NStr* newI18NStr(const t_structXMLAttr* pAttrs)
+{
+       t_structI18NStr* pStr = NULL;
+       t_structXMLAttr* pAttr = NULL;
+
+       if ((pStr = malloc(sizeof(t_structI18NStr)))) {
+               pStr->m_szLang = NULL;
+               pStr->m_szText = NULL;
+               pStr->m_pNext = NULL;
+
+               pAttr = (t_structXMLAttr*)pAttrs;
+               do {
+                       attrSetStr(pAttr, "lang", &(pStr->m_szLang));
+               } while ((pAttr = pAttr->m_pNext));
+       }
+
+       return pStr;
+}
+
+int freeI18NStr(t_structI18NStr** ppStr)
+{
+       if (*ppStr) {
+               freeStr(&((*ppStr)->m_szLang));
+               freeStr(&((*ppStr)->m_szText));
+               freeI18NStr(&((*ppStr)->m_pNext));
+               free(*ppStr);
+       }
+       *ppStr = NULL;
+
+       return 0;
+}
+
+t_structI18NStr* addI18NStr(const t_structXMLAttr* pAttrs,
+                           t_structI18NStr** ppStr)
+{
+       t_structI18NStr* pStr = NULL;
+
+       if ((pStr = getLastI18NStr(*ppStr)))
+               pStr = (pStr->m_pNext = newI18NStr(pAttrs));
+       else
+               pStr = (*ppStr = newI18NStr(pAttrs));
+
+       return pStr;
+}
+
+t_structI18NStr* getLastI18NStr(t_structI18NStr* pStr)
+{
+       while (pStr && (pStr->m_pNext))
+               pStr = pStr->m_pNext;
+
+       return pStr;
+}
+
 t_structXMLPackage* newXMLPackage(const t_structXMLAttr* pAttrs)
 {
        t_structXMLPackage* pPackage = NULL;
@@ -492,6 +553,7 @@ t_structXMLPackage* newXMLPackage(const t_structXMLAttr* pAttrs)
 
        if ((pPackage = malloc(sizeof(t_structXMLPackage)))) {
                pPackage->m_szName = NULL;
+               pPackage->m_szVersion = NULL;
                pPackage->m_szGroup = NULL;
                pPackage->m_szSummary = NULL;
                pPackage->m_szDescription = NULL;
@@ -507,15 +569,21 @@ t_structXMLPackage* newXMLPackage(const t_structXMLAttr* pAttrs)
                pPackage->m_pRequires = NULL;
                pPackage->m_pSuggests = NULL;
                pPackage->m_pObsoletes = NULL;
+               pPackage->m_pConflicts = NULL;
                pPackage->m_pProvides = NULL;
                pPackage->m_pNext = NULL;
 
                pAttr = (t_structXMLAttr*)pAttrs;
                do {
                        attrSetStr(pAttr, "name", &(pPackage->m_szName));
+                       attrSetStr(pAttr, "version", &(pPackage->m_szVersion));
                        attrSetStr(pAttr, "group", &(pPackage->m_szGroup));
                        attrSetBool(pAttr, "autorequire", &(pPackage->m_nAutoRequire));
+                       attrSetBool(pAttr, "autoreq", &(pPackage->m_nAutoRequire));
                        attrSetBool(pAttr, "autoprovide", &(pPackage->m_nAutoProvide));
+                       attrSetBool(pAttr, "autoprov", &(pPackage->m_nAutoProvide));
+                       attrSetBool(pAttr, "autoreqprov", &(pPackage->m_nAutoProvide));
+                       attrSetBool(pAttr, "autoreqprov", &(pPackage->m_nAutoRequire));
                        attrSetBool(pAttr, "autosuggest", &(pPackage->m_nAutoSuggest));
                } while ((pAttr = pAttr->m_pNext));
        }
@@ -527,6 +595,7 @@ int freeXMLPackage(t_structXMLPackage** ppPackage)
 {
        if (*ppPackage) {
                freeStr(&((*ppPackage)->m_szName));
+               freeStr(&((*ppPackage)->m_szVersion));
                freeStr(&((*ppPackage)->m_szGroup));
                freeStr(&((*ppPackage)->m_szSummary));
                freeStr(&((*ppPackage)->m_szDescription));
@@ -539,6 +608,7 @@ int freeXMLPackage(t_structXMLPackage** ppPackage)
                freeXMLRequire(&((*ppPackage)->m_pRequires));
                freeXMLRequire(&((*ppPackage)->m_pSuggests));
                freeXMLRequire(&((*ppPackage)->m_pObsoletes));
+               freeXMLRequire(&((*ppPackage)->m_pConflicts));
                freeXMLRequire(&((*ppPackage)->m_pProvides));
                freeXMLPackage(&((*ppPackage)->m_pNext));
                free(*ppPackage);
index 6b8e62a..7802615 100644 (file)
@@ -52,6 +52,8 @@ typedef struct structXMLRequire
 typedef struct structXMLScript
 {
        char*                   m_szInterpreter;
+       char*                   m_szArch;
+       char*                   m_szOS;
        char*                   m_szScript;
        char*                   m_szEntry;
        struct structXMLScript* m_pNext;
@@ -71,9 +73,17 @@ typedef struct structXMLFiles
        char* m_szGID;
 } t_structXMLFiles;
 
+typedef struct structI18NStr
+{
+       char*                 m_szLang;
+       char*                 m_szText;
+       struct structI18NStr* m_pNext;
+} t_structI18NStr;
+
 typedef struct structXMLPackage
 {
        char*                    m_szName;
+       char*                    m_szVersion;
        char*                    m_szGroup;
        char*                    m_szSummary;
        char*                    m_szDescription;
@@ -89,6 +99,7 @@ typedef struct structXMLPackage
        struct structXMLRequire* m_pRequires;
        struct structXMLRequire* m_pSuggests;
        struct structXMLRequire* m_pObsoletes;
+       struct structXMLRequire* m_pConflicts;
        struct structXMLRequire* m_pProvides;
        struct structXMLPackage* m_pNext;
 } t_structXMLPackage;
@@ -201,6 +212,12 @@ int freeXMLScripts(t_structXMLScripts** ppScripts);
 t_structXMLFiles* newXMLFiles(const t_structXMLAttr* pAttrs);
 int freeXMLFiles(t_structXMLFiles** ppFiles);
 
+t_structI18NStr* newI18NStr(const t_structXMLAttr* pAttrs);
+int freeI18NStr(t_structI18NStr** ppStr);
+t_structI18NStr* addI18NStr(const t_structXMLAttr* pAttrs,
+                           t_structI18NStr** ppStr);
+t_structI18NStr* getLastI18NStr(t_structI18NStr* pStr);
+
 t_structXMLPackage* newXMLPackage(const t_structXMLAttr* pAttrs);
 int freeXMLPackage(t_structXMLPackage** ppPackage);
 t_structXMLPackage* addXMLPackage(const t_structXMLAttr* pAttrs,
index 718a0cf..f04d31b 100644 (file)
@@ -58,7 +58,7 @@ t_structXMLTags g_pXMLTags[] =
                        {"size",           ATTRTYPE_NUMERIC, 0},
                        {"md5",            ATTRTYPE_MD5,     0},
                        {"path",           ATTRTYPE_ANY,     0},
-                       {"number",         ATTRTYPE_NUMERIC, 0},
+                       {"id",             ATTRTYPE_NUMERIC, 0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
        },
@@ -89,7 +89,7 @@ t_structXMLTags g_pXMLTags[] =
                        {"size",           ATTRTYPE_NUMERIC, 0},
                        {"md5",            ATTRTYPE_MD5,     0},
                        {"path",           ATTRTYPE_ANY,     0},
-                       {"number",         ATTRTYPE_NUMERIC, 0},
+                       {"id",             ATTRTYPE_NUMERIC, 0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
        },
@@ -165,6 +165,7 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"name",           ATTRTYPE_ANY,     0},
+                       {"version",        ATTRTYPE_ANY,     0},
                        {"group",          ATTRTYPE_ANY,     1},
                        {"autoreqprov",    ATTRTYPE_BOOL,    0},
                        {"autoprov",       ATTRTYPE_BOOL,    0},
@@ -219,6 +220,7 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"name",           ATTRTYPE_ANY,     1},
+                       {"version",        ATTRTYPE_ANY,     0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
        },
@@ -243,6 +245,34 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"name",           ATTRTYPE_ANY,     1},
+                       {"version",        ATTRTYPE_ANY,     0},
+                       {"cmp",            ATTRTYPE_CMP,     0},
+                       {NULL,             ATTRTYPE_ANY,     1}
+               }
+       },
+       {
+               "conflicts", TAGVAL_CONFLICTS, 2,
+               {
+                       TAGVAL_SPEC,
+                       TAGVAL_PACKAGE,
+                       TAGVAL_LAST
+               },
+               {
+                       {NULL,             ATTRTYPE_ANY,     1}
+               }
+       },
+       {
+               "conflict", TAGVAL_CONFLICT, 3,
+               {
+                       TAGVAL_SPEC,
+                       TAGVAL_PACKAGE,
+                       TAGVAL_CONFLICTS,
+                       TAGVAL_LAST
+               },
+               {
+                       {"name",           ATTRTYPE_ANY,     1},
+                       {"version",        ATTRTYPE_ANY,     0},
+                       {"cmp",            ATTRTYPE_CMP,     0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
        },
@@ -280,6 +310,7 @@ t_structXMLTags g_pXMLTags[] =
                        TAGVAL_LAST
                },
                {
+                       {"lang",           ATTRTYPE_ANY,     0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
        },
@@ -291,6 +322,7 @@ t_structXMLTags g_pXMLTags[] =
                        TAGVAL_LAST
                },
                {
+                       {"lang",           ATTRTYPE_ANY,     0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
        },
@@ -317,6 +349,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"interpreter",    ATTRTYPE_ANY,     0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"script",         ATTRTYPE_SCRIPT,  0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
@@ -344,6 +378,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"interpreter",    ATTRTYPE_ANY,     0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"script",         ATTRTYPE_SCRIPT,  0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
@@ -371,6 +407,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"interpreter",    ATTRTYPE_ANY,     0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"script",         ATTRTYPE_SCRIPT,  0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
@@ -398,11 +436,14 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"interpreter",    ATTRTYPE_ANY,     0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"script",         ATTRTYPE_SCRIPT,  0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
        },
-       {"verify", TAGVAL_VERIFY, 2,
+       {
+               "verify", TAGVAL_VERIFY, 2,
                {
                        TAGVAL_SPEC,
                        TAGVAL_PACKAGE,
@@ -424,6 +465,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"interpreter",    ATTRTYPE_ANY,     0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"script",         ATTRTYPE_SCRIPT,  0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
@@ -463,6 +506,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"interpreter",    ATTRTYPE_ANY,     0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"script",         ATTRTYPE_SCRIPT,  0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
@@ -476,6 +521,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"source",         ATTRTYPE_NUMERIC, 0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"path",           ATTRTYPE_ANY,     0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
@@ -489,6 +536,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"patch",          ATTRTYPE_NUMERIC, 0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"level",          ATTRTYPE_NUMERIC, 0},
                        {"path",           ATTRTYPE_ANY,     0},
                        {NULL,             ATTRTYPE_ANY,     1}
@@ -515,6 +564,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"interpreter",    ATTRTYPE_ANY,     0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"script",         ATTRTYPE_SCRIPT,  0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
@@ -540,6 +591,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"interpreter",    ATTRTYPE_ANY,     0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"script",         ATTRTYPE_SCRIPT,  0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
@@ -565,6 +618,8 @@ t_structXMLTags g_pXMLTags[] =
                },
                {
                        {"interpreter",    ATTRTYPE_ANY,     0},
+                       {"arch",           ATTRTYPE_ANY,     0},
+                       {"os",             ATTRTYPE_ANY,     0},
                        {"script",         ATTRTYPE_SCRIPT,  0},
                        {NULL,             ATTRTYPE_ANY,     1}
                }
index 0eba1e2..d1eff3d 100644 (file)
@@ -22,6 +22,8 @@ typedef enum enumXMLTagVals
        TAGVAL_REQUIRE,
        TAGVAL_OBSOLETES,
        TAGVAL_OBSOLETE,
+       TAGVAL_CONFLICTS,
+       TAGVAL_CONFLICT,
        TAGVAL_SUGGESTS,
        TAGVAL_SUGGEST,
        TAGVAL_SUMMARY,