[4.0] Use strip (instead of eu-strip) to support --strip-debug of *.so at build time
[platform/upstream/rpm.git] / lib / rpmte.h
index 68b5c7e..a66c1e9 100644 (file)
 #ifndef H_RPMTE
 #define H_RPMTE
 
-/** \ingroup rpmdep rpmtrans
+/** \ingroup rpmts rpmte
  * \file lib/rpmte.h
- * Structures used for a transactionElement.
- */
-
-typedef /*@abstract@*/ struct tsortInfo_s *            tsortInfo;
-
-typedef /*@abstract@*/ struct teIterator_s *           teIterator;
-
-/*@unchecked@*/
-/*@-exportlocal@*/
-extern int _te_debug;
-/*@=exportlocal@*/
-
-/** \ingroup rpmdep
- * Dependncy ordering information.
- */
-/*@-fielduse@*/        /* LCL: confused by union? */
-struct tsortInfo_s {
-    union {
-       int     count;
-       /*@exposed@*/ /*@dependent@*/ /*@null@*/
-       transactionElement suc;
-    } tsi_u;
-#define        tsi_count       tsi_u.count
-#define        tsi_suc         tsi_u.suc
-/*@owned@*/ /*@null@*/
-    struct tsortInfo_s * tsi_next;
-/*@exposed@*/ /*@dependent@*/ /*@null@*/
-    transactionElement tsi_chain;
-    int                tsi_reqx;
-    int                tsi_qcnt;
-};
-/*@=fielduse@*/
-
-/** \ingroup rpmdep
- */
-typedef enum rpmTransactionType_e {
-    TR_ADDED           = (1 << 0),     /*!< Package will be installed. */
-    TR_REMOVED         = (1 << 1)      /*!< Package will be removed. */
-} rpmTransactionType;
-
-/** \ingroup rpmdep
- * A single package instance to be installed/removed atomically.
- */
-struct transactionElement_s {
-    rpmTransactionType type;   /*!< Package disposition (installed/removed). */
-
-/*@refcounted@*/ /*@null@*/
-    Header h;                  /*!< Package header. */
-/*@only@*/
-    const char * NEVR;         /*!< Package name-version-release. */
-/*@owned@*/
-    const char * name;         /*!< Name: */
-/*@only@*/ /*@null@*/
-    char * epoch;
-/*@dependent@*/ /*@null@*/
-    char * version;            /*!< Version: */
-/*@dependent@*/ /*@null@*/
-    char * release;            /*!< Release: */
-/*@only@*/ /*@null@*/
-    const char * arch;         /*!< Architecture hint. */
-/*@only@*/ /*@null@*/
-    const char * os;           /*!< Operating system hint. */
-
-    transactionElement parent; /*!< Parent transaction element. */
-    int degree;                        /*!< No. of immediate children. */
-    int depth;                 /*!< Max. depth in dependency tree. */
-    int npreds;                        /*!< No. of predecessors. */
-    int tree;                  /*!< Tree index. */
-/*@owned@*/
-    tsortInfo tsi;             /*!< Dependency ordering chains. */
-
-/*@refcounted@*/ /*@null@*/
-    rpmDepSet this;            /*!< This package's provided NEVR. */
-/*@refcounted@*/ /*@null@*/
-    rpmDepSet provides;                /*!< Provides: dependencies. */
-/*@refcounted@*/ /*@null@*/
-    rpmDepSet requires;                /*!< Requires: dependencies. */
-/*@refcounted@*/ /*@null@*/
-    rpmDepSet conflicts;       /*!< Conflicts: dependencies. */
-/*@refcounted@*/ /*@null@*/
-    rpmDepSet obsoletes;       /*!< Obsoletes: dependencies. */
-/*@refcounted@*/ /*@null@*/
-    TFI_t fi;                  /*!< File information. */
-
-    uint_32 multiLib;          /*!< (TR_ADDED) MULTILIB */
-
-/*@exposed@*/ /*@dependent@*/ /*@null@*/
-    fnpyKey key;               /*!< (TR_ADDED) Retrieval key. */
-/*@owned@*/ /*@null@*/
-    rpmRelocation * relocs;    /*!< (TR_ADDED) Payload file relocations. */
-/*@refcounted@*/ /*@null@*/    
-    FD_t fd;                   /*!< (TR_ADDED) Payload file descriptor. */
-
-/*@-fielduse@*/        /* LCL: confused by union? */
-    union { 
-/*@exposed@*/ /*@dependent@*/ /*@null@*/
-       alKey addedKey;
-       struct {
-/*@exposed@*/ /*@dependent@*/ /*@null@*/
-           alKey dependsOnKey;
-           int dboffset;
-       } removed;
-    } u;
-/*@=fielduse@*/
-
-};
-
-/**
- * Iterator across transaction elements, forward on install, backward on erase.
- */
-struct teIterator_s {
-/*@refcounted@*/
-    rpmTransactionSet ts;      /*!< transaction set. */
-    int reverse;               /*!< reversed traversal? */
-    int ocsave;                        /*!< last returned iterator index. */
-    int oc;                    /*!< iterator index. */
-};
+ * Structures used for an "rpmte" transaction element.
+ */
+
+#include <rpm/rpmtypes.h>
+#include <rpm/argv.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/**
- * Destroy a transaction element.
+/** \ingroup rpmte
+ * Transaction element type.
+ */
+typedef enum rpmElementType_e {
+    TR_ADDED           = (1 << 0),     /*!< Package will be installed. */
+    TR_REMOVED         = (1 << 1)      /*!< Package will be removed. */
+} rpmElementType;
+
+typedef rpmFlags rpmElementTypes;
+
+/** \ingroup rpmte
+ * Retrieve header from transaction element.
  * @param te           transaction element
- * @return             NULL always
+ * @return             header (new reference)
  */
-/*@null@*/
-transactionElement teFree(/*@only@*/ /*@null@*/ transactionElement te)
-       /*@modifies te@*/;
-/**
- * Create a transaction element.
- * @param ts           transaction set
+Header rpmteHeader(rpmte te);
+
+/** \ingroup rpmte
+ * Save header into transaction element.
+ * @param te           transaction element
  * @param h            header
- * @param type         TR_ADDED/TR_REMOVED
- * @param key          (TR_ADDED) package retrieval key (e.g. file name)
- * @param relocs       (TR_ADDED) package file relocations
- * @param dboffset     (TR_REMOVED) rpmdb instance
- * @param pkgKey       associated added package (if any)
- * @return             new transaction element
- */
-/*@only@*/ /*@null@*/
-transactionElement teNew(const rpmTransactionSet ts, Header h,
-               rpmTransactionType type,
-               /*@exposed@*/ /*@dependent@*/ /*@null@*/ fnpyKey key,
-               /*@null@*/ rpmRelocation * relocs,
-               int dboffset,
-               /*@exposed@*/ /*@dependent@*/ /*@null@*/ alKey pkgKey)
-       /*@modifies ts, h @*/;
-
-/**
+ * @return             NULL always
+ */
+Header rpmteSetHeader(rpmte te, Header h);
+
+/** \ingroup rpmte
  * Retrieve type of transaction element.
  * @param te           transaction element
  * @return             type
  */
-rpmTransactionType teGetType(transactionElement te)
-       /*@*/;
+rpmElementType rpmteType(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Retrieve name string of transaction element.
  * @param te           transaction element
  * @return             name string
  */
-/*@observer@*/
-const char * teGetN(transactionElement te)
-       /*@*/;
+const char * rpmteN(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Retrieve epoch string of transaction element.
  * @param te           transaction element
  * @return             epoch string
  */
-/*@observer@*/ /*@null@*/
-const char * teGetE(transactionElement te)
-       /*@*/;
+const char * rpmteE(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Retrieve version string of transaction element.
  * @param te           transaction element
  * @return             version string
  */
-/*@observer@*/ /*@null@*/
-const char * teGetV(transactionElement te)
-       /*@*/;
+const char * rpmteV(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Retrieve release string of transaction element.
  * @param te           transaction element
  * @return             release string
  */
-/*@observer@*/ /*@null@*/
-const char * teGetR(transactionElement te)
-       /*@*/;
+const char * rpmteR(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Retrieve arch string of transaction element.
  * @param te           transaction element
  * @return             arch string
  */
-/*@observer@*/ /*@null@*/
-const char * teGetA(transactionElement te)
-       /*@*/;
+const char * rpmteA(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Retrieve os string of transaction element.
  * @param te           transaction element
  * @return             os string
  */
-/*@observer@*/ /*@null@*/
-const char * teGetO(transactionElement te)
-       /*@*/;
-
-/**
- * Retrieve multlib flags of transaction element.
- * @param te           transaction element
- * @return             multilib flags
- */
-int teGetMultiLib(transactionElement te)
-       /*@*/;
-
-/**
- * Set multlib flags of transaction element.
- * @param te           transaction element
- * @param nmultiLib    new multilib flags
- * @return             previous multilib flags
- */
-int teSetMultiLib(transactionElement te, int nmultiLib)
-       /*@modifies te @*/;
+const char * rpmteO(rpmte te);
 
-/**
- * Retrieve tsort tree depth of transaction element.
+/** \ingroup rpmte
+ * Retrieve isSource attribute of transaction element.
  * @param te           transaction element
- * @return             depth
+ * @return             isSource attribute
  */
-int teGetDepth(transactionElement te)
-       /*@*/;
+int rpmteIsSource(rpmte te);
 
-/**
- * Set tsort tree depth of transaction element.
+/** \ingroup rpmte
+ * Retrieve color bits of transaction element.
  * @param te           transaction element
- * @param ndepth       new depth
- * @return             previous depth
+ * @return             color bits
  */
-int teSetDepth(transactionElement te, int ndepth)
-       /*@modifies te @*/;
+rpm_color_t rpmteColor(rpmte te);
 
-/**
- * Retrieve tsort no. of predecessors of transaction element.
+/** \ingroup rpmte
+ * Set color bits of transaction element.
  * @param te           transaction element
- * @return             no. of predecessors
+ * @param color                new color bits
+ * @return             previous color bits
  */
-int teGetNpreds(transactionElement te)
-       /*@*/;
+rpm_color_t rpmteSetColor(rpmte te, rpm_color_t color);
 
-/**
- * Set tsort no. of predecessors of transaction element.
+/** \ingroup rpmte
+ * Retrieve last instance installed to the database.
  * @param te           transaction element
- * @param npreds       new no. of predecessors
- * @return             previous no. of predecessors
+ * @return             last install instance.
  */
-int teSetNpreds(transactionElement te, int npreds)
-       /*@modifies te @*/;
+unsigned int rpmteDBInstance(rpmte te);
 
-/**
- * Retrieve tree index of transaction element.
+/** \ingroup rpmte
+ * Set last instance installed to the database.
  * @param te           transaction element
- * @return             tree index
+ * @param instance     Database instance of last install element.
+ * @return             last install instance.
  */
-int teGetTree(transactionElement te)
-       /*@*/;
+void rpmteSetDBInstance(rpmte te, unsigned int instance);
 
-/**
- * Set tree index of transaction element.
+/** \ingroup rpmte
+ * Retrieve size in bytes of package file.
+ * @todo Signature header is estimated at 256b.
  * @param te           transaction element
- * @param ntree                new tree index
- * @return             previous tree index
+ * @return             size in bytes of package file.
  */
-int teSetTree(transactionElement te, int ntree)
-       /*@modifies te @*/;
+rpm_loff_t rpmtePkgFileSize(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Retrieve parent transaction element.
  * @param te           transaction element
  * @return             parent transaction element
  */
-/*@observer@*/ /*@unused@*/
-transactionElement teGetParent(transactionElement te)
-       /*@*/;
+rpmte rpmteParent(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Set parent transaction element.
  * @param te           transaction element
  * @param pte          new parent transaction element
  * @return             previous parent transaction element
  */
-transactionElement teSetParent(transactionElement te, transactionElement pte)
-       /*@modifies te @*/;
+rpmte rpmteSetParent(rpmte te, rpmte pte);
 
-/**
- * Retrieve number of children of transaction element.
+/** \ingroup rpmte
+ * Return problem set info of transaction element.
  * @param te           transaction element
- * @return             tree index
+ * @return             problem set (or NULL if none)
  */
-int teGetDegree(transactionElement te)
-       /*@*/;
+rpmps rpmteProblems(rpmte te);
 
-/**
- * Set number of children of transaction element.
+/** \ingroup rpmte
+ * Destroy problem set info of transaction element.
  * @param te           transaction element
- * @param ndegree      new number of children
- * @return             previous number of children
  */
-int teSetDegree(transactionElement te, int ndegree)
-       /*@modifies te @*/;
+void rpmteCleanProblems(rpmte te);
 
-/**
- * Retrieve tsort info for transaction element.
- * @param te           transaction element
- * @return             tsort info
- */
-tsortInfo teGetTSI(transactionElement te)
-       /*@*/;
-
-/**
- * Destroy tsort info of transaction element.
- * @param te           transaction element
- */
-void teFreeTSI(transactionElement te)
-       /*@modifies te @*/;
-
-/**
- * Initialize tsort info of transaction element.
- * @param te           transaction element
- */
-void teNewTSI(transactionElement te)
-       /*@modifies te @*/;
-
-/**
+/** \ingroup rpmte
  * Destroy dependency set info of transaction element.
  * @param te           transaction element
  */
-/*@unused@*/
-void teCleanDS(transactionElement te)
-       /*@modifies te @*/;
+void rpmteCleanDS(rpmte te);
 
-/**
- * Retrieve pkgKey of TR_ADDED transaction element.
+/** \ingroup rpmte
+ * Set dependent element of TR_REMOVED transaction element.
  * @param te           transaction element
- * @return             pkgKey
+ * @param depends       dependent transaction element
  */
-/*@exposed@*/ /*@dependent@*/ /*@null@*/
-alKey teGetAddedKey(transactionElement te)
-       /*@*/;
+void rpmteSetDependsOn(rpmte te, rpmte depends);
 
-/**
- * Set pkgKey of TR_ADDED transaction element.
+/** \ingroup rpmte
+ * Retrieve dependent element of TR_REMOVED transaction element.
  * @param te           transaction element
- * @param npkgKey      new pkgKey
- * @return             previous pkgKey
+ * @return             dependent transaction element
  */
-/*@exposed@*/ /*@dependent@*/ /*@null@*/
-alKey teSetAddedKey(transactionElement te,
-               /*@exposed@*/ /*@dependent@*/ /*@null@*/ alKey npkgKey)
-       /*@modifies te @*/;
+rpmte rpmteDependsOn(rpmte te);
 
-/**
- * Retrieve dependent pkgKey of TR_REMOVED transaction element.
+/** \ingroup rpmte
+ * Retrieve rpmdb instance of TR_REMOVED transaction element.
  * @param te           transaction element
- * @return             dependent pkgKey
+ * @return             rpmdb instance
  */
-/*@exposed@*/ /*@dependent@*/ /*@null@*/
-alKey teGetDependsOnKey(transactionElement te)
-       /*@*/;
+int rpmteDBOffset(rpmte te);
 
-/**
- * Retrieve rpmdb instance of TR_REMOVED transaction element.
+/** \ingroup rpmte
+ * Retrieve [epoch:]version-release string from transaction element.
  * @param te           transaction element
- * @return             rpmdb instance
+ * @return             [epoch:]version-release string
  */
-int teGetDBOffset(transactionElement te)
-       /*@*/;
+const char * rpmteEVR(rpmte te);
 
-/**
- * Retrieve name-version-release string from transaction element.
+/** \ingroup rpmte
+ * Retrieve name-[epoch:]version-release string from transaction element.
  * @param te           transaction element
- * @return             name-version-release string
+ * @return             name-[epoch:]version-release string
  */
-/*@observer@*/
-const char * teGetNEVR(transactionElement te)
-       /*@*/;
+const char * rpmteNEVR(rpmte te);
 
-/**
- * Retrieve file handle from transaction element.
+/** \ingroup rpmte
+ * Retrieve name-[epoch:]version-release.arch string from transaction element.
  * @param te           transaction element
- * @return             file handle
+ * @return             name-[epoch:]version-release.arch string
  */
-FD_t teGetFd(transactionElement te)
-       /*@*/;
+const char * rpmteNEVRA(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Retrieve key from transaction element.
  * @param te           transaction element
  * @return             key
  */
-/*@exposed@*/
-fnpyKey teGetKey(transactionElement te)
-       /*@*/;
+fnpyKey rpmteKey(rpmte te);
+
+/** \ingroup rpmte
+ * Return failure status of transaction element.
+ * If the element itself failed, this is 1, larger count means one of
+ * it's parents failed.
+ * @param te           transaction element
+ * @return             number of failures for this transaction element
+ */
+int rpmteFailed(rpmte te);
 
-/**
+/** \ingroup rpmte
  * Retrieve dependency tag set from transaction element.
  * @param te           transaction element
  * @param tag          dependency tag
  * @return             dependency tag set
  */
-rpmDepSet teGetDS(transactionElement te, rpmTag tag)
-       /*@*/;
+rpmds rpmteDS(rpmte te, rpmTagVal tag);
 
-/**
+/** \ingroup rpmte
  * Retrieve file info tag set from transaction element.
  * @param te           transaction element
- * @param tag          file info tag
  * @return             file info tag set
  */
-TFI_t teGetFI(transactionElement te, rpmTag tag)
-       /*@*/;
+rpmfi rpmteFI(rpmte te);
 
-/**
- * Return transaction element index.
- * @param tei          transaction element iterator
- * @return             transaction element index
+/** \ingroup rpmte
+ * Retrieve list of collections
+ * @param te           transaction element
+ * @return             list of collections
  */
-int teiGetOc(teIterator tei)
-       /*@*/;
+ARGV_const_t rpmteCollections(rpmte te);
 
-/**
- * Destroy transaction element iterator.
- * @param tei          transaction element iterator
- * @return             NULL always
+/** \ingroup rpmte
+ * Determine a transaction element is part of a collection
+ * @param te           transaction element
+ * @param collname     collection name
+ * @return             1 if collname is part of a collection, 0 if not
  */
-/*@unused@*/ /*@null@*/
-teIterator teFreeIterator(/*@only@*//*@null@*/ teIterator tei)
-       /*@*/;
+int rpmteHasCollection(rpmte te, const char * collname);
 
-/**
- * Destroy transaction element iterator.
- * @param tei          transaction element iterator
- * @param fn
- * @param ln
- * @return             NULL always
- */
-/*@null@*/
-teIterator XteFreeIterator(/*@only@*//*@null@*/ teIterator tei,
-               const char * fn, unsigned int ln)
-       /*@*/;
-#define        teFreeIterator(_tei)    XteFreeIterator(_tei, __FILE__, __LINE__)
-
-/**
- * Create transaction element iterator.
- * @param ts           transaction set
- * @return             transaction element iterator
- */
-/*@unused@*/ /*@only@*/
-teIterator teInitIterator(rpmTransactionSet ts)
-       /*@modifies ts @*/;
-
-/**
- * Create transaction element iterator.
- * @param ts           transaction set
- * @param fn
- * @param ln
- * @return             transaction element iterator
- */
-/*@unused@*/ /*@only@*/
-teIterator XteInitIterator(rpmTransactionSet ts,
-               const char * fn, unsigned int ln)
-       /*@modifies ts @*/;
-#define        teInitIterator(_ts)     XteInitIterator(_ts, __FILE__, __LINE__)
-
-/**
- * Return next transaction element
- * @param tei          transaction element iterator
- * @return             transaction element, NULL on termination
- */
-/*@dependent@*/ /*@null@*/
-transactionElement teNextIterator(teIterator tei)
-       /*@modifies tei @*/;
-
-/**
- * Return next transaction element of type.
- * @param tei          transaction element iterator
- * @param type         transaction element type selector
- * @return             next transaction element of type, NULL on termination
- */
-/*@dependent@*/ /*@null@*/
-transactionElement teNext(teIterator tei, rpmTransactionType type)
-        /*@modifies tei @*/;
 
 #ifdef __cplusplus
 }