Merge remote-tracking branch 'origin/tizen_7.0_base' into tizen_base submit/tizen_base/20230427.141030
authorbiao716.wang <biao716.wang@samsung.com>
Thu, 27 Apr 2023 06:26:54 +0000 (15:26 +0900)
committerbiao716.wang <biao716.wang@samsung.com>
Thu, 27 Apr 2023 06:26:54 +0000 (15:26 +0900)
Change-Id: Ib0394ae94b21938a4ec886877b481d8254515c2f

build/files.c
build/parseFiles.c
build/parsePreamble.c
lib/rpmtag.h

index 67268d4..c641528 100644 (file)
@@ -130,6 +130,9 @@ typedef struct AttrRec_s {
 /* list of files */
 static StringBuf check_fileList = NULL;
 
+/*backup of maindb->fileList*/
+ARGV_t maindb_fileList_bakup = NULL;
+
 typedef struct FileEntry_s {
     rpmfileAttrs attrFlags;
     specfFlags specdFlags;
@@ -2934,8 +2937,11 @@ static void filterDebuginfoPackage(rpmSpec spec, Package pkg,
        /* we have collected some files. Now put them in a debuginfo
          * package. If this is not the main package, clone the main
          * debuginfo package */
-       if (pkg == spec->packages)
+       if (pkg == spec->packages) {
            maindbg->fileList = files;
+            /*free maindb_fileList_bakup and set to NULL*/
+            maindb_fileList_bakup = argvFree(maindb_fileList_bakup);
+       }
        else {
            Package dbg = cloneDebuginfoPackage(spec, pkg, maindbg);
            dbg->fileList = files;
@@ -2943,6 +2949,14 @@ static void filterDebuginfoPackage(rpmSpec spec, Package pkg,
            addPackageDeps(dbg, dbgsrc ? dbgsrc : maindbg,
                           RPMTAG_RECOMMENDNAME);
        }
+    } else {
+       /*To allow generate debuginfo package which is written in spec file,  even there is no .debug files*/
+        if (pkg == spec->packages && headerGetString(maindbg->header,RPMTAG_MULTIFILELIST)) {
+            rpmlog(RPMLOG_WARNING, "user rewrite %%file debuginfo to pack something\n");
+            maindbg->fileList = maindb_fileList_bakup;
+            maindb_fileList_bakup = NULL;
+            headerDel(maindbg->header,RPMTAG_MULTIFILELIST);
+       }
     }
 }
 
@@ -3075,8 +3089,10 @@ rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
                *pp = maindbg;
            }
            /* delete unsplit file list, we will re-add files back later */
+           /*backup maindb fileList before free*/
+           maindb_fileList_bakup = maindbg->fileList;
            maindbg->fileFile = argvFree(maindbg->fileFile);
-           maindbg->fileList = argvFree(maindbg->fileList);
+           maindbg->fileList = NULL;
            if (rpmExpandNumeric("%{?_unique_debug_names}"))
                uniquearch = rpmExpand("-%{VERSION}-%{RELEASE}.%{_arch}", NULL);
        }
index 5ccc945..29fd637 100644 (file)
@@ -72,6 +72,11 @@ int parseFiles(rpmSpec spec)
     if (pkg->fileList != NULL) {
        rpmlog(RPMLOG_WARNING, _("line %d: multiple %%files for package '%s'\n"),
               spec->lineNum, rpmstrPoolStr(pkg->pool, pkg->name));
+       if (0 == strncmp(name, "debuginfo", 9))
+       {
+           char* multifilelist_flag = "1";
+            headerPutString(pkg->header, RPMTAG_MULTIFILELIST, multifilelist_flag);
+       }
        pkg->fileList = argvFree(pkg->fileList);
     }
 
index 96bf9c0..70c528a 100644 (file)
@@ -702,8 +702,9 @@ int addLangTag(rpmSpec spec, Header h, rpmTagVal tag,
 
     if (haveLangTag(h, tag, lang)) {
        /* Turn this into an error eventually */
-       rpmlog(RPMLOG_WARNING, _("line %d: second %s\n"),
+       rpmlog(RPMLOG_WARNING, _("line %d: second %s, please remove it\n"),
                spec->lineNum, rpmTagGetName(tag));
+       return 0;
     }
 
     if (!*lang) {
@@ -1126,6 +1127,30 @@ int parsePreamble(rpmSpec spec, int initialPackage)
        //    goto exit;
        
        if (!lookupPackage(spec, name, flag, NULL)) {
+               //exist %package debuginfo, need to ignore it, because there has been
+               //debuginfo package created by %debug_package macro.
+               if (0 == strncmp(name, "debuginfo", 9))
+               {
+                       rpmlog(RPMLOG_WARNING, _("debuginfo package has been in spec file, Don't write again this %s"), spec->line);
+                       if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) {
+                               nextPart = PART_NONE;
+                       } else if (rc < 0) {
+                               free(name);
+                               goto exit;
+                       } else {
+                               while (! (nextPart = isPart(spec->line))) {
+                                       if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) {
+                                               nextPart = PART_NONE;
+                                               break;
+                                       }
+                                       if (rc) {
+                                               free(name);
+                                               goto exit;
+                                       }
+                               }
+                       }
+                       res = nextPart;
+               }
            free(name);
            goto exit;
        }
index 276df7a..4491aa9 100644 (file)
@@ -269,8 +269,9 @@ typedef enum rpmTag_e {
     RPMTAG_BUILDOBSOLETES      = 1194, /* internal (unimplemented) */
     RPMTAG_DBINSTANCE          = 1195, /* i extension */
     RPMTAG_NVRA                        = 1196, /* s extension */
+    RPMTAG_MULTIFILELIST        = 1197, /* s */
 
-    /* tags 1997-4999 reserved */
+    /* tags 1998-4999 reserved */
     RPMTAG_FILENAMES           = 5000, /* s[] extension */
     RPMTAG_FILEPROVIDE         = 5001, /* s[] extension */
     RPMTAG_FILEREQUIRE         = 5002, /* s[] extension */
@@ -368,10 +369,10 @@ typedef enum rpmTag_e {
     RPMTAG_FILESIGNATURELENGTH  = 5091, /* i */
     RPMTAG_PAYLOADDIGEST       = 5092, /* s[] */
     RPMTAG_PAYLOADDIGESTALGO   = 5093, /* i */
-       /* Skip numbers which might be used in new RPM versions */
-       RPMTAG_BUILDINFO                        = 7000, /* s[] information about build */
+    /* Skip numbers which might be used in new RPM versions */
+    RPMTAG_BUILDINFO                   = 7000, /* s[] information about build */
 
-    RPMTAG_FIRSTFREE_TAG       /*!< internal */
+    RPMTAG_FIRSTFREE_TAG,      /*!< internal */
 } rpmTag;
 
 #define        RPMTAG_EXTERNAL_TAG             1000000