Mass eviction of remaining internal helpers in librpmbuild API
authorPanu Matilainen <pmatilai@redhat.com>
Wed, 25 Aug 2010 12:41:09 +0000 (15:41 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Wed, 25 Aug 2010 12:41:09 +0000 (15:41 +0300)
- Yank everything qualifying as "internal helper function" into
  internal-only headers, loosely grouped as follows:
  1) Everything involving spec-manipulation goes into rpmbuild_internal.h
  2) All other miscellaneous helpers go into rpmbuild_misc.h
- This leaves us a rather minimal, and nearly useful API into librpmbuild:
  Users need to be able to parse a spec, query or build (parts of) it
  and free up the spec structure when done. This is what we have now,
  various still exposed structures not counting.

24 files changed:
build/Makefile.am
build/build.c
build/expression.c
build/files.c
build/misc.c
build/names.c
build/pack.c
build/parseBuildInstallClean.c
build/parseChangelog.c
build/parseDescription.c
build/parseFiles.c
build/parsePreamble.c
build/parsePrep.c
build/parseReqs.c
build/parseScript.c
build/parseSpec.c
build/reqprov.c
build/rpmbuild.h
build/rpmbuild_internal.h [new file with mode: 0644]
build/rpmbuild_misc.h [new file with mode: 0644]
build/rpmfc.c
build/rpmspec.h
build/spec.c
rpmbuild.c

index 1d1c841..36f3d63 100644 (file)
@@ -12,7 +12,8 @@ librpmbuild_la_SOURCES = \
        build.c expression.c files.c misc.c names.c pack.c \
        parseBuildInstallClean.c parseChangelog.c parseDescription.c \
        parseFiles.c parsePreamble.c parsePrep.c parseReqs.c parseScript.c \
-       parseSpec.c poptBT.c reqprov.c rpmfc.c spec.c fts.h fts.c
+       parseSpec.c poptBT.c reqprov.c rpmfc.c spec.c fts.h fts.c \
+       rpmbuild_internal.h rpmbuild_misc.h
 
 librpmbuild_la_LDFLAGS = -version-info 1:0:0
 librpmbuild_la_LIBADD = \
index fa62a39..64c4d6c 100644 (file)
@@ -8,9 +8,9 @@
 #include <errno.h>
 #include <sys/wait.h>
 
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
 #include <rpm/rpmfileutil.h>
+#include "build/rpmbuild_internal.h"
 
 #include "debug.h"
 
index d87f592..3452486 100644 (file)
@@ -13,9 +13,8 @@
 
 #include "system.h"
 
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
-
+#include "build/rpmbuild_internal.h"
 #include "debug.h"
 
 /* #define DEBUG_PARSER 1 */
index 5e317fb..6f8bd38 100644 (file)
@@ -14,7 +14,6 @@
 #include <sys/capability.h>
 #endif
 
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmpgp.h>
 #include <rpm/argv.h>
 #include <rpm/rpmfc.h>
@@ -26,6 +25,8 @@
 #include "build/fts.h"
 #include "lib/cpio.h"
 #include "lib/rpmfi_internal.h"        /* XXX fi->apath */
+#include "build/rpmbuild_internal.h"
+#include "build/rpmbuild_misc.h"
 
 #include "debug.h"
 #include <libgen.h>
index 25c4b51..d2d05ba 100644 (file)
@@ -4,7 +4,8 @@
 #include "system.h"
 
 #include <ctype.h>
-#include <rpm/rpmbuild.h>
+#include <stdlib.h>
+#include "build/rpmbuild_misc.h"
 #include "debug.h"
 
 uint32_t parseUnsignedNum(const char * line, uint32_t * res)
index 6dd78d4..838c1d5 100644 (file)
@@ -8,8 +8,9 @@
 #include <pwd.h>
 #include <grp.h>
 #include <netdb.h>
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
+#include <rpm/rpmstring.h>
+#include "build/rpmbuild_misc.h"
 #include "debug.h"
 
 #define UGIDMAX 1024
index 26d31fb..28630b7 100644 (file)
@@ -11,7 +11,6 @@
 
 #include <rpm/rpmlib.h>                        /* RPMSIGTAG*, rpmReadPackageFile */
 #include <rpm/rpmts.h>
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmfileutil.h>
 #include <rpm/rpmlog.h>
 
@@ -22,6 +21,8 @@
 #include "lib/rpmte_internal.h"                /* rpmfs */
 #include "lib/signature.h"
 #include "lib/rpmlead.h"
+#include "build/rpmbuild_internal.h"
+#include "build/rpmbuild_misc.h"
 
 #include "debug.h"
 
index d81bd07..5eb8fe6 100644 (file)
@@ -4,8 +4,8 @@
  */
 #include "system.h"
 
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
+#include "build/rpmbuild_internal.h"
 #include "debug.h"
 
 
index 6723922..b727b90 100644 (file)
@@ -6,8 +6,8 @@
 #include "system.h"
 
 #include <rpm/header.h>
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
+#include "build/rpmbuild_internal.h"
 #include "debug.h"
 
 #define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; }
index 5b9242d..41f8c6a 100644 (file)
@@ -6,8 +6,8 @@
 #include "system.h"
 
 #include <rpm/header.h>
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
+#include "build/rpmbuild_internal.h"
 #include "debug.h"
 
 extern int noLang;
index 8cde0cb..3cdc576 100644 (file)
@@ -5,9 +5,9 @@
 
 #include "system.h"
 
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
 #include <rpm/rpmfileutil.h>
+#include "build/rpmbuild_internal.h"
 #include "debug.h"
 
 int parseFiles(rpmSpec spec)
index 1de8016..6a923a9 100644 (file)
@@ -8,10 +8,11 @@
 #include <ctype.h>
 
 #include <rpm/header.h>
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
 #include <rpm/rpmfileutil.h>
 #include "rpmio/rpmlua.h"
+#include "build/rpmbuild_internal.h"
+#include "build/rpmbuild_misc.h"
 #include "debug.h"
 
 #define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; }
index 394c162..f7849cc 100644 (file)
@@ -8,9 +8,10 @@
 #include <errno.h>
 
 #include <rpm/header.h>
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
 #include <rpm/rpmfileutil.h>
+#include "build/rpmbuild_internal.h"
+#include "build/rpmbuild_misc.h"
 #include "debug.h"
 
 /**
index 014db78..06ad8d9 100644 (file)
@@ -7,8 +7,9 @@
 
 #include <ctype.h>
 #include <rpm/rpmtypes.h>
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
+#include "build/rpmbuild_internal.h"
+#include "build/rpmbuild_misc.h"
 #include "debug.h"
 
 /**
index 0368fc5..483250c 100644 (file)
@@ -6,11 +6,12 @@
 #include "system.h"
 
 #include <rpm/header.h>
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmlog.h>
 
 #include "rpmio/rpmlua.h"
 #include "lib/rpmscript.h"     /* script flags */
+#include "build/rpmbuild_internal.h"
+#include "build/rpmbuild_misc.h"
 
 #include "debug.h"
 
index 9488eed..bcb8d2a 100644 (file)
@@ -9,11 +9,12 @@
 
 #include <rpm/rpmtypes.h>
 #include <rpm/rpmlib.h>                /* RPM_MACHTABLE & related */
-#include <rpm/rpmbuild.h>
 #include <rpm/rpmds.h>
 #include <rpm/rpmts.h>
 #include <rpm/rpmlog.h>
 #include <rpm/rpmfileutil.h>
+#include "build/rpmbuild_internal.h"
+#include "build/rpmbuild_misc.h"
 #include "debug.h"
 
 #define SKIPSPACE(s) { while (*(s) && risspace(*(s))) (s)++; }
index a0d1c87..9ecdd31 100644 (file)
@@ -6,7 +6,8 @@
 #include "system.h"
 
 #include <rpm/header.h>
-#include <rpm/rpmbuild.h>
+#include <rpm/rpmstring.h>
+#include "build/rpmbuild_misc.h"
 #include "debug.h"
 
 static int isNewDep(Header h, rpmTag nametag,
index 21ea0de..84491a3 100644 (file)
@@ -8,11 +8,6 @@
 
 #include <rpm/rpmcli.h>
 #include <rpm/rpmds.h>
-
-/* and it shouldn't need these :-( */
-#include <rpm/rpmstring.h>
-
-/* but this will be needed */
 #include <rpm/rpmspec.h>
 
 #ifdef __cplusplus
@@ -38,290 +33,6 @@ typedef enum rpmBuildFlags_e {
     RPMBUILD_RMSPEC    = (1 << 11)     /*!< Remove spec file. */
 } rpmBuildFlags;
 
-#define PART_SUBNAME  0
-#define PART_NAME     1
-
-/** \ingroup rpmbuild
- * rpmSpec file parser states.
- */
-/** \ingroup rpmbuild 
- *  * Spec file parser states. 
- *   */ 
-#define PART_BASE       0 
-typedef enum rpmParseState_e { 
-    PART_ERROR          =  -1, /*!< */ 
-    PART_NONE           =  0+PART_BASE, /*!< */ 
-    /* leave room for RPMRC_NOTFOUND returns. */ 
-    PART_PREAMBLE       = 11+PART_BASE, /*!< */ 
-    PART_PREP           = 12+PART_BASE, /*!< */ 
-    PART_BUILD          = 13+PART_BASE, /*!< */ 
-    PART_INSTALL        = 14+PART_BASE, /*!< */ 
-    PART_CHECK          = 15+PART_BASE, /*!< */ 
-    PART_CLEAN          = 16+PART_BASE, /*!< */ 
-    PART_FILES          = 17+PART_BASE, /*!< */ 
-    PART_PRE            = 18+PART_BASE, /*!< */ 
-    PART_POST           = 19+PART_BASE, /*!< */ 
-    PART_PREUN          = 20+PART_BASE, /*!< */ 
-    PART_POSTUN         = 21+PART_BASE, /*!< */ 
-    PART_PRETRANS       = 22+PART_BASE, /*!< */ 
-    PART_POSTTRANS      = 23+PART_BASE, /*!< */ 
-    PART_DESCRIPTION    = 24+PART_BASE, /*!< */ 
-    PART_CHANGELOG      = 25+PART_BASE, /*!< */ 
-    PART_TRIGGERIN      = 26+PART_BASE, /*!< */ 
-    PART_TRIGGERUN      = 27+PART_BASE, /*!< */ 
-    PART_VERIFYSCRIPT   = 28+PART_BASE, /*!< */ 
-    PART_BUILDARCHITECTURES= 29+PART_BASE,/*!< */ 
-    PART_TRIGGERPOSTUN  = 30+PART_BASE, /*!< */ 
-    PART_TRIGGERPREIN   = 31+PART_BASE, /*!< */ 
-    PART_LAST           = 32+PART_BASE  /*!< */ 
-} rpmParseState; 
-
-
-#define STRIP_NOTHING             0
-#define STRIP_TRAILINGSPACE (1 << 0)
-#define STRIP_COMMENTS      (1 << 1)
-
-/** \ingroup rpmbuild
- * Destroy uid/gid caches.
- */
-void freeNames(void);
-
-/** \ingroup rpmbuild
- * Return cached user name from user id.
- * @todo Implement using hash.
- * @param uid          user id
- * @return             cached user name
- */
-const char * getUname(uid_t uid);
-
-/** \ingroup rpmbuild
- * Return cached user name.
- * @todo Implement using hash.
- * @param uname                user name
- * @return             cached user name
- */
-const char * getUnameS(const char * uname);
-
-/** \ingroup rpmbuild
- * Return cached user id.
- * @todo Implement using hash.
- * @param uname                user name
- * @return             cached uid
- */
-uid_t getUidS(const char * uname);
-
-/** \ingroup rpmbuild
- * Return cached group name from group id.
- * @todo Implement using hash.
- * @param gid          group id
- * @return             cached group name
- */
-const char * getGname(gid_t gid);
-
-/** \ingroup rpmbuild
- * Return cached group name.
- * @todo Implement using hash.
- * @param gname                group name
- * @return             cached group name
- */
-const char * getGnameS(const char * gname);
-
-/** \ingroup rpmbuild
- * Return cached group id.
- * @todo Implement using hash.
- * @param gname                group name
- * @return             cached gid
- */
-gid_t getGidS(const char * gname);
-
-/** \ingroup rpmbuild
- * Read next line from spec file.
- * @param spec         spec file control structure
- * @param strip                truncate comments?
- * @return             0 on success, 1 on EOF, <0 on error
- */
-int readLine(rpmSpec spec, int strip);
-
-/** \ingroup rpmbuild
- * Stop reading from spec file, freeing resources.
- * @param spec         spec file control structure
- */
-void closeSpec(rpmSpec spec);
-
-/** \ingroup rpmbuild
- * Truncate comment lines.
- * @param s            skip white space, truncate line at '#'
- */
-void handleComments(char * s);
-
-/** \ingroup rpmbuild
- * Check line for section separator, return next parser state.
- * @param              line from spec file
- * @return             next parser state
- */
-rpmParseState isPart(const char * line)        ;
-
-/** \ingroup rpmbuild
- * Parse an unsigned number.
- * @param              line from spec file
- * @retval res         pointer to uint32_t
- * @return             0 on success, 1 on failure
- */
-uint32_t parseUnsignedNum(const char * line, uint32_t * res);
-
-/** \ingroup rpmbuild
- * Parse %%build/%%install/%%clean section(s) of a spec file.
- * @param spec         spec file control structure
- * @param parsePart    current rpmParseState
- * @return             >= 0 next rpmParseState, < 0 on error
- */
-int parseBuildInstallClean(rpmSpec spec, rpmParseState parsePart);
-
-/** \ingroup rpmbuild
- * Parse %%changelog section of a spec file.
- * @param spec         spec file control structure
- * @return             >= 0 next rpmParseState, < 0 on error
- */
-int parseChangelog(rpmSpec spec);
-
-/** \ingroup rpmbuild
- * Parse %%description section of a spec file.
- * @param spec         spec file control structure
- * @return             >= 0 next rpmParseState, < 0 on error
- */
-int parseDescription(rpmSpec spec);
-
-/** \ingroup rpmbuild
- * Parse %%files section of a spec file.
- * @param spec         spec file control structure
- * @return             >= 0 next rpmParseState, < 0 on error
- */
-int parseFiles(rpmSpec spec);
-
-/** \ingroup rpmbuild
- * Parse tags from preamble of a spec file.
- * @param spec         spec file control structure
- * @param initialPackage
- * @return             >= 0 next rpmParseState, < 0 on error
- */
-int parsePreamble(rpmSpec spec, int initialPackage);
-
-/** \ingroup rpmbuild
- * Parse %%prep section of a spec file.
- * @param spec         spec file control structure
- * @return             >= 0 next rpmParseState, < 0 on error
- */
-int parsePrep(rpmSpec spec);
-
-/** \ingroup rpmbuild
- * Check for inappropriate characters. All alphanums are considered sane.
- * @param spec          spec
- * @param field         string to check
- * @param fsize         size of string to check
- * @param whitelist     string of permitted characters
- * @return              RPMRC_OK if OK
- */
-rpmRC rpmCharCheck(rpmSpec spec, char *field, size_t fsize, const char *whitelist);
-
-/** \ingroup rpmbuild
- * Parse dependency relations from spec file and/or autogenerated output buffer.
- * @param spec         spec file control structure
- * @param pkg          package control structure
- * @param field                text to parse (e.g. "foo < 0:1.2-3, bar = 5:6.7")
- * @param tagN         tag, identifies type of dependency
- * @param index                (0 always)
- * @param tagflags     dependency flags already known from context
- * @return             RPMRC_OK on success, RPMRC_FAIL on failure
- */
-rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char * field, rpmTag tagN,
-               int index, rpmsenseFlags tagflags);
-
-/** \ingroup rpmbuild
- * Parse %%pre et al scriptlets from a spec file.
- * @param spec         spec file control structure
- * @param parsePart    current rpmParseState
- * @return             >= 0 next rpmParseState, < 0 on error
- */
-int parseScript(rpmSpec spec, int parsePart);
-
-/** \ingroup rpmbuild
- * Evaluate boolean expression.
- * @param spec         spec file control structure
- * @param expr         expression to parse
- * @return
- */
-int parseExpressionBoolean(rpmSpec spec, const char * expr);
-
-/** \ingroup rpmbuild
- * Run a build script, assembled from spec file scriptlet section.
- *
- * @param spec         spec file control structure
- * @param what         type of script
- * @param name         name of scriptlet section
- * @param sb           lines that compose script body
- * @param test         don't execute scripts or package if testing
- * @return             RPMRC_OK on success
- */
-rpmRC doScript(rpmSpec spec, rpmBuildFlags what, const char * name,
-               StringBuf sb, int test);
-
-/** \ingroup rpmbuild
- * Find sub-package control structure by name.
- * @param spec         spec file control structure
- * @param name         (sub-)package name
- * @param flag         if PART_SUBNAME, then 1st package name is prepended
- * @retval pkg         package control structure
- * @return             0 on success, 1 on failure
- */
-rpmRC lookupPackage(rpmSpec spec, const char * name, int flag,
-               Package * pkg);
-
-/** \ingroup rpmbuild
- * Create and initialize package control structure.
- * @param spec         spec file control structure
- * @return             package control structure
- */
-Package newPackage(rpmSpec spec);
-
-/** \ingroup rpmbuild
- * Add dependency to header, filtering duplicates.
- * @param h            header
- * @param tagN         tag, identifies type of dependency
- * @param N            (e.g. Requires: foo < 0:1.2-3, "foo")
- * @param EVR          (e.g. Requires: foo < 0:1.2-3, "0:1.2-3")
- * @param Flags                (e.g. Requires: foo < 0:1.2-3, both "Requires:" and "<")
- * @param index                (0 always)
- * @return             0 on success, 1 on error
- */
-int addReqProv(Header h, rpmTag tagN,
-               const char * N, const char * EVR, rpmsenseFlags Flags,
-               uint32_t index);
-
-/** \ingroup rpmbuild
- * Add rpmlib feature dependency.
- * @param h            header
- * @param feature      rpm feature name (i.e. "rpmlib(Foo)" for feature Foo)
- * @param featureEVR   rpm feature epoch/version/release
- * @return             0 always
- */
-int rpmlibNeedsFeature(Header h, const char * feature, const char * featureEVR);
-
-/** \ingroup rpmbuild
- * Post-build processing for binary package(s).
- * @param spec         spec file control structure
- * @param installSpecialDoc
- * @param test         don't execute scripts or package if testing
- * @return             0 on success
- */
-int processBinaryFiles(rpmSpec spec, int installSpecialDoc, int test);
-
-/** \ingroup rpmbuild
- * Post-build processing for source package.
- * @param spec         spec file control structure
- * @return             0 on success
- */
-int processSourceFiles(rpmSpec spec);
-
 /** \ingroup rpmbuild
  * Parse spec file into spec control structure.
  * @param ts           transaction set (spec file control in ts->spec)
@@ -353,20 +64,6 @@ int parseSpec(rpmts ts, const char * specFile,
  */
 rpmRC buildSpec(rpmts ts, rpmSpec spec, int what, int test);
 
-/** \ingroup rpmbuild
- * Generate binary package(s).
- * @param spec         spec file control structure
- * @return             RPMRC_OK on success
- */
-rpmRC packageBinaries(rpmSpec spec);
-
-/** \ingroup rpmbuild
- * Generate source package.
- * @param spec         spec file control structure
- * @return             RPMRC_OK on success
- */
-rpmRC packageSources(rpmSpec spec);
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/build/rpmbuild_internal.h b/build/rpmbuild_internal.h
new file mode 100644 (file)
index 0000000..7b47a5e
--- /dev/null
@@ -0,0 +1,248 @@
+#ifndef _RPMBUILD_INTERNAL_H
+#define _RPMBUILD_INTERNAL_H
+
+#include <rpm/rpmbuild.h>
+#include <rpm/rpmutil.h>
+
+#define PART_SUBNAME  0
+#define PART_NAME     1
+
+/** \ingroup rpmbuild
+ * rpmSpec file parser states.
+ */
+#define PART_BASE       0 
+typedef enum rpmParseState_e { 
+    PART_ERROR          =  -1, /*!< */ 
+    PART_NONE           =  0+PART_BASE, /*!< */ 
+    /* leave room for RPMRC_NOTFOUND returns. */ 
+    PART_PREAMBLE       = 11+PART_BASE, /*!< */ 
+    PART_PREP           = 12+PART_BASE, /*!< */ 
+    PART_BUILD          = 13+PART_BASE, /*!< */ 
+    PART_INSTALL        = 14+PART_BASE, /*!< */ 
+    PART_CHECK          = 15+PART_BASE, /*!< */ 
+    PART_CLEAN          = 16+PART_BASE, /*!< */ 
+    PART_FILES          = 17+PART_BASE, /*!< */ 
+    PART_PRE            = 18+PART_BASE, /*!< */ 
+    PART_POST           = 19+PART_BASE, /*!< */ 
+    PART_PREUN          = 20+PART_BASE, /*!< */ 
+    PART_POSTUN         = 21+PART_BASE, /*!< */ 
+    PART_PRETRANS       = 22+PART_BASE, /*!< */ 
+    PART_POSTTRANS      = 23+PART_BASE, /*!< */ 
+    PART_DESCRIPTION    = 24+PART_BASE, /*!< */ 
+    PART_CHANGELOG      = 25+PART_BASE, /*!< */ 
+    PART_TRIGGERIN      = 26+PART_BASE, /*!< */ 
+    PART_TRIGGERUN      = 27+PART_BASE, /*!< */ 
+    PART_VERIFYSCRIPT   = 28+PART_BASE, /*!< */ 
+    PART_BUILDARCHITECTURES= 29+PART_BASE,/*!< */ 
+    PART_TRIGGERPOSTUN  = 30+PART_BASE, /*!< */ 
+    PART_TRIGGERPREIN   = 31+PART_BASE, /*!< */ 
+    PART_LAST           = 32+PART_BASE  /*!< */ 
+} rpmParseState; 
+
+
+#define STRIP_NOTHING             0
+#define STRIP_TRAILINGSPACE (1 << 0)
+#define STRIP_COMMENTS      (1 << 1)
+
+/** \ingroup rpmbuild
+ * Create and initialize rpmSpec structure.
+ * @return spec                spec file control structure
+ */
+RPM_GNUC_INTERNAL
+rpmSpec newSpec(void);
+
+/** \ingroup rpmbuild
+ * Stop reading from spec file, freeing resources.
+ * @param spec         spec file control structure
+ */
+RPM_GNUC_INTERNAL
+void closeSpec(rpmSpec spec);
+
+/** \ingroup rpmbuild
+ * Read next line from spec file.
+ * @param spec         spec file control structure
+ * @param strip                truncate comments?
+ * @return             0 on success, 1 on EOF, <0 on error
+ */
+RPM_GNUC_INTERNAL
+int readLine(rpmSpec spec, int strip);
+
+/** \ingroup rpmbuild
+ * Check line for section separator, return next parser state.
+ * @param              line from spec file
+ * @return             next parser state
+ */
+RPM_GNUC_INTERNAL
+rpmParseState isPart(const char * line)        ;
+
+/** \ingroup rpmbuild
+ * Parse %%build/%%install/%%clean section(s) of a spec file.
+ * @param spec         spec file control structure
+ * @param parsePart    current rpmParseState
+ * @return             >= 0 next rpmParseState, < 0 on error
+ */
+RPM_GNUC_INTERNAL
+int parseBuildInstallClean(rpmSpec spec, rpmParseState parsePart);
+
+/** \ingroup rpmbuild
+ * Parse %%changelog section of a spec file.
+ * @param spec         spec file control structure
+ * @return             >= 0 next rpmParseState, < 0 on error
+ */
+RPM_GNUC_INTERNAL
+int parseChangelog(rpmSpec spec);
+
+/** \ingroup rpmbuild
+ * Parse %%description section of a spec file.
+ * @param spec         spec file control structure
+ * @return             >= 0 next rpmParseState, < 0 on error
+ */
+RPM_GNUC_INTERNAL
+int parseDescription(rpmSpec spec);
+
+/** \ingroup rpmbuild
+ * Parse %%files section of a spec file.
+ * @param spec         spec file control structure
+ * @return             >= 0 next rpmParseState, < 0 on error
+ */
+RPM_GNUC_INTERNAL
+int parseFiles(rpmSpec spec);
+
+/** \ingroup rpmbuild
+ * Parse tags from preamble of a spec file.
+ * @param spec         spec file control structure
+ * @param initialPackage
+ * @return             >= 0 next rpmParseState, < 0 on error
+ */
+RPM_GNUC_INTERNAL
+int parsePreamble(rpmSpec spec, int initialPackage);
+
+/** \ingroup rpmbuild
+ * Parse %%prep section of a spec file.
+ * @param spec         spec file control structure
+ * @return             >= 0 next rpmParseState, < 0 on error
+ */
+RPM_GNUC_INTERNAL
+int parsePrep(rpmSpec spec);
+
+/** \ingroup rpmbuild
+ * Parse %%pre et al scriptlets from a spec file.
+ * @param spec         spec file control structure
+ * @param parsePart    current rpmParseState
+ * @return             >= 0 next rpmParseState, < 0 on error
+ */
+RPM_GNUC_INTERNAL
+int parseScript(rpmSpec spec, int parsePart);
+
+/** \ingroup rpmbuild
+ * Check for inappropriate characters. All alphanums are considered sane.
+ * @param spec          spec
+ * @param field         string to check
+ * @param fsize         size of string to check
+ * @param whitelist     string of permitted characters
+ * @return              RPMRC_OK if OK
+ */
+RPM_GNUC_INTERNAL
+rpmRC rpmCharCheck(rpmSpec spec, char *field, size_t fsize, const char *whitelist);
+
+/** \ingroup rpmbuild
+ * stashSt.
+ * @param spec         spec file control structure
+ * @param h            header
+ * @param tag          tag
+ * @param lang         locale
+ */
+spectag stashSt(rpmSpec spec, Header h, rpmTag tag, const char * lang);
+
+/** \ingroup rpmbuild
+ * Parse dependency relations from spec file and/or autogenerated output buffer.
+ * @param spec         spec file control structure
+ * @param pkg          package control structure
+ * @param field                text to parse (e.g. "foo < 0:1.2-3, bar = 5:6.7")
+ * @param tagN         tag, identifies type of dependency
+ * @param index                (0 always)
+ * @param tagflags     dependency flags already known from context
+ * @return             RPMRC_OK on success, RPMRC_FAIL on failure
+ */
+RPM_GNUC_INTERNAL
+rpmRC parseRCPOT(rpmSpec spec, Package pkg, const char * field, rpmTag tagN,
+               int index, rpmsenseFlags tagflags);
+
+/** \ingroup rpmbuild
+ * Evaluate boolean expression.
+ * @param spec         spec file control structure
+ * @param expr         expression to parse
+ * @return
+ */
+RPM_GNUC_INTERNAL
+int parseExpressionBoolean(rpmSpec spec, const char * expr);
+
+/** \ingroup rpmbuild
+ * Run a build script, assembled from spec file scriptlet section.
+ *
+ * @param spec         spec file control structure
+ * @param what         type of script
+ * @param name         name of scriptlet section
+ * @param sb           lines that compose script body
+ * @param test         don't execute scripts or package if testing
+ * @return             RPMRC_OK on success
+ */
+RPM_GNUC_INTERNAL
+rpmRC doScript(rpmSpec spec, rpmBuildFlags what, const char * name,
+               StringBuf sb, int test);
+
+/** \ingroup rpmbuild
+ * Find sub-package control structure by name.
+ * @param spec         spec file control structure
+ * @param name         (sub-)package name
+ * @param flag         if PART_SUBNAME, then 1st package name is prepended
+ * @retval pkg         package control structure
+ * @return             0 on success, 1 on failure
+ */
+RPM_GNUC_INTERNAL
+rpmRC lookupPackage(rpmSpec spec, const char * name, int flag,
+               Package * pkg);
+
+/** \ingroup rpmbuild
+ * Create and initialize package control structure.
+ * @param spec         spec file control structure
+ * @return             package control structure
+ */
+RPM_GNUC_INTERNAL
+Package newPackage(rpmSpec spec);
+
+/** \ingroup rpmbuild
+ * Post-build processing for binary package(s).
+ * @param spec         spec file control structure
+ * @param installSpecialDoc
+ * @param test         don't execute scripts or package if testing
+ * @return             0 on success
+ */
+RPM_GNUC_INTERNAL
+int processBinaryFiles(rpmSpec spec, int installSpecialDoc, int test);
+
+/** \ingroup rpmbuild
+ * Post-build processing for source package.
+ * @param spec         spec file control structure
+ * @return             0 on success
+ */
+RPM_GNUC_INTERNAL
+int processSourceFiles(rpmSpec spec);
+
+/** \ingroup rpmbuild
+ * Generate binary package(s).
+ * @param spec         spec file control structure
+ * @return             RPMRC_OK on success
+ */
+RPM_GNUC_INTERNAL
+rpmRC packageBinaries(rpmSpec spec);
+
+/** \ingroup rpmbuild
+ * Generate source package.
+ * @param spec         spec file control structure
+ * @return             RPMRC_OK on success
+ */
+RPM_GNUC_INTERNAL
+rpmRC packageSources(rpmSpec spec);
+
+#endif /* _RPMBUILD_INTERNAL_H */
diff --git a/build/rpmbuild_misc.h b/build/rpmbuild_misc.h
new file mode 100644 (file)
index 0000000..dae216a
--- /dev/null
@@ -0,0 +1,110 @@
+#ifndef _RPMBUILD_MISC_H
+#define _RPMBUILD_MISC_H
+
+#include <sys/types.h>
+#include <rpm/rpmtypes.h>
+#include <rpm/rpmds.h>
+
+/** \ingroup rpmbuild
+ * Destroy uid/gid caches.
+ * @todo Get this out of the ABI
+ */
+/* RPM_GNUC_INTERNAL XXX should be internal too but rpmbuild "needs" for now */
+void freeNames(void);
+
+/** \ingroup rpmbuild
+ * Return cached user name from user id.
+ * @todo Implement using hash.
+ * @param uid          user id
+ * @return             cached user name
+ */
+RPM_GNUC_INTERNAL
+const char * getUname(uid_t uid);
+
+/** \ingroup rpmbuild
+ * Return cached user name.
+ * @todo Implement using hash.
+ * @param uname                user name
+ * @return             cached user name
+ */
+RPM_GNUC_INTERNAL
+const char * getUnameS(const char * uname);
+
+/** \ingroup rpmbuild
+ * Return cached user id.
+ * @todo Implement using hash.
+ * @param uname                user name
+ * @return             cached uid
+ */
+RPM_GNUC_INTERNAL
+uid_t getUidS(const char * uname);
+
+/** \ingroup rpmbuild
+ * Return cached group name from group id.
+ * @todo Implement using hash.
+ * @param gid          group id
+ * @return             cached group name
+ */
+RPM_GNUC_INTERNAL
+const char * getGname(gid_t gid);
+
+/** \ingroup rpmbuild
+ * Return cached group name.
+ * @todo Implement using hash.
+ * @param gname                group name
+ * @return             cached group name
+ */
+RPM_GNUC_INTERNAL
+const char * getGnameS(const char * gname);
+
+/** \ingroup rpmbuild
+ * Return cached group id.
+ * @todo Implement using hash.
+ * @param gname                group name
+ * @return             cached gid
+ */
+RPM_GNUC_INTERNAL
+gid_t getGidS(const char * gname);
+
+/** \ingroup rpmbuild
+ * Truncate comment lines.
+ * @param s            skip white space, truncate line at '#'
+ */
+RPM_GNUC_INTERNAL
+void handleComments(char * s);
+
+/** \ingroup rpmbuild
+ * Parse an unsigned number.
+ * @param              line from spec file
+ * @retval res         pointer to uint32_t
+ * @return             0 on success, 1 on failure
+ */
+RPM_GNUC_INTERNAL
+uint32_t parseUnsignedNum(const char * line, uint32_t * res);
+
+/** \ingroup rpmbuild
+ * Add dependency to header, filtering duplicates.
+ * @param h            header
+ * @param tagN         tag, identifies type of dependency
+ * @param N            (e.g. Requires: foo < 0:1.2-3, "foo")
+ * @param EVR          (e.g. Requires: foo < 0:1.2-3, "0:1.2-3")
+ * @param Flags                (e.g. Requires: foo < 0:1.2-3, both "Requires:" and "<")
+ * @param index                (0 always)
+ * @return             0 on success, 1 on error
+ */
+RPM_GNUC_INTERNAL
+int addReqProv(Header h, rpmTag tagN,
+               const char * N, const char * EVR, rpmsenseFlags Flags,
+               uint32_t index);
+
+/** \ingroup rpmbuild
+ * Add rpmlib feature dependency.
+ * @param h            header
+ * @param feature      rpm feature name (i.e. "rpmlib(Foo)" for feature Foo)
+ * @param featureEVR   rpm feature epoch/version/release
+ * @return             0 always
+ */
+RPM_GNUC_INTERNAL
+int rpmlibNeedsFeature(Header h, const char * feature, const char * featureEVR);
+
+#endif /* _RPMBUILD_MISC_H */
index 4fd32e3..645a25f 100644 (file)
@@ -8,15 +8,15 @@
 #include <regex.h>
 
 #include <rpm/header.h>
-#include <rpm/rpmbuild.h>
 #include <rpm/argv.h>
 #include <rpm/rpmfc.h>
 #include <rpm/rpmlog.h>
 #include <rpm/rpmfileutil.h>
-
 #include <rpm/rpmds.h>
 #include <rpm/rpmfi.h>
 
+#include "build/rpmbuild_internal.h"
+
 #include "debug.h"
 
 typedef struct rpmfcAttr_s {
index 6d6e638..f77b077 100644 (file)
@@ -165,12 +165,6 @@ struct Package_s {
 };
 
 /** \ingroup rpmbuild
- * Create and initialize rpmSpec structure.
- * @return spec                spec file control structure
- */
-rpmSpec newSpec(void);
-
-/** \ingroup rpmbuild
  * Destroy Spec structure.
  * @param spec         spec file control structure
  * @return             NULL always
@@ -186,15 +180,6 @@ rpmSpec freeSpec(rpmSpec spec);
  */
 int rpmspecQuery(rpmts ts, QVA_t qva, const char * arg);
 
-/** \ingroup rpmbuild
- * stashSt.
- * @param spec         spec file control structure
- * @param h            header
- * @param tag          tag
- * @param lang         locale
- */
-spectag stashSt(rpmSpec spec, Header h, rpmTag tag, const char * lang);
-
 #ifdef __cplusplus
 }
 #endif
index 84d1c84..9fe7ddb 100644 (file)
@@ -11,9 +11,9 @@
 #include <rpm/rpmts.h>
 #include <rpm/rpmlog.h>
 #include <rpm/rpmfileutil.h>
-#include <rpm/rpmbuild.h>
 
 #include "rpmio/rpmlua.h"
+#include "build/rpmbuild_internal.h"
 
 #include "debug.h"
 
index 8fdf5a6..e58ed3f 100644 (file)
@@ -14,6 +14,7 @@ const char *__progname;
 #include <rpm/rpmps.h>
 #include <rpm/rpmts.h>
 #include "lib/signature.h"
+#include "build/rpmbuild_misc.h"       /* XXX freeNames() */
 #include "cliutils.h"
 
 #include "debug.h"