rpm  5.2.1
Data Structures | Macros | Typedefs | Functions | Variables
rpmfc.c File Reference
#include "system.h"
#include <signal.h>
#include <rpmio.h>
#include <rpmiotypes.h>
#include <rpmlog.h>
#include <rpmurl.h>
#include <rpmmg.h>
#include <argv.h>
#include <mire.h>
#include <rpmtag.h>
#include <rpmbuild.h>
#include <rpmns.h>
#include <rpmfc.h>
#include <rpmds.h>
#include <rpmfi.h>
#include "debug.h"
Include dependency graph for rpmfc.c:

Go to the source code of this file.

Data Structures

struct  rpmfcApplyTbl_s
 
struct  DepMsg_s
 

Macros

#define _MIRE_INTERNAL
 
#define _RPMEVR_INTERNAL
 
#define _RPMNS_INTERNAL
 
#define _RPMFC_INTERNAL
 
#define _RPMDS_INTERNAL
 
#define _suffix(_s, _x)   (slen >= sizeof(_x) && !strcmp((_s)+slen-(sizeof(_x)-1), (_x)))
 

Typedefs

typedef struct rpmfcApplyTbl_srpmfcApplyTbl
 
typedef struct DepMsg_sDepMsg_t
 

Functions

static int rpmfcExpandAppend (ARGV_t *argvp, const ARGV_t av)
 
static rpmiob getOutputFrom (const char *dir, ARGV_t argv, const char *writePtr, size_t writeBytesLeft, int failNonZero)
 Return output from helper script.
 
int rpmfcExec (ARGV_t av, rpmiob iob_stdin, rpmiob *iob_stdoutp, int failnonzero)
 
static int rpmfcSaveArg (ARGV_t *argvp, const char *key)
 
static char * rpmfcFileDep (char *buf, size_t ix, rpmds ds)
 
static void * rpmfcExpandRegexps (const char *str, int *nmirep)
 
static int rpmfcMatchRegexps (void *mires, int nmire, const char *str, char deptype)
 
static void * rpmfcFreeRegexps (void *mires, int nmire)
 
static int rpmfcHelper (rpmfc fc, unsigned char deptype, const char *nsdep)
 Run per-interpreter dependency helper.
 
int rpmfcColoring (const char *fmstr)
 Return file color given file(1) string.
 
void rpmfcPrint (const char *msg, rpmfc fc, FILE *fp)
 Print results of file classification.
 
static int rpmfcSCRIPT (rpmfc fc)
 Extract script dependencies.
 
static int rpmfcMergePR (void *context, rpmds ds)
 Merge provides/requires dependencies into a rpmfc container.
 
static int rpmfcELF (rpmfc fc)
 Extract Elf dependencies.
 
rpmRC rpmfcApply (rpmfc fc)
 Build file/package dependency dictionary and mappings.
 
rpmRC rpmfcClassify (rpmfc fc, ARGV_t argv, rpmuint16_t *fmode)
 
static void printDeps (Header h)
 Print dependencies in a header.
 
static rpmRC rpmfcGenerateDependsHelper (const Spec spec, Package pkg, rpmfi fi)
 
static int rpmfcGenerateScriptletDeps (const Spec spec, Package pkg)
 
rpmRC rpmfcGenerateDepends (void *specp, void *pkgp)
 Generate package dependencies.
 
static void rpmfcFini (void *_fc)
 
static rpmfc rpmfcGetPool (rpmioPool pool)
 
rpmfc rpmfcNew (void)
 Create a file classifier.
 

Variables

static int _filter_values = 1
 
static int _filter_execs = 1
 
static struct rpmfcTokens_s rpmfcTokens []
 
static struct rpmfcApplyTbl_s rpmfcApplyTable []
 XXX Having two entries for rpmfcSCRIPT may be unnecessary duplication.
 
static struct DepMsg_s depMsgs []
 
static DepMsg_t DepMsgs = depMsgs
 
static struct DepMsg_s scriptMsgs []
 
static DepMsg_t ScriptMsgs = scriptMsgs
 
rpmioPool _rpmfcPool = NULL
 

Macro Definition Documentation

#define _MIRE_INTERNAL

Definition at line 11 of file rpmfc.c.

#define _RPMDS_INTERNAL

Definition at line 24 of file rpmfc.c.

#define _RPMEVR_INTERNAL

Definition at line 15 of file rpmfc.c.

#define _RPMFC_INTERNAL

Definition at line 21 of file rpmfc.c.

#define _RPMNS_INTERNAL

Definition at line 18 of file rpmfc.c.

#define _suffix (   _s,
  _x 
)    (slen >= sizeof(_x) && !strcmp((_s)+slen-(sizeof(_x)-1), (_x)))

Referenced by rpmfcClassify(), and rpmInitMacros().

Typedef Documentation

typedef struct DepMsg_s* DepMsg_t

Definition at line 1262 of file rpmfc.c.

typedef struct rpmfcApplyTbl_s * rpmfcApplyTbl

Function Documentation

static rpmiob getOutputFrom ( const char *  dir,
ARGV_t  argv,
const char *  writePtr,
size_t  writeBytesLeft,
int  failNonZero 
)
static

Return output from helper script.

Todo:
Use poll(2) rather than select(2), if available.
Parameters
dirdirectory to run in (or NULL)
argvprogram and arguments to run
writePtrbytes to feed to script on stdin (or NULL)
writeBytesLeftno. of bytes to feed to script on stdin
failNonZerois script failure an error?
Returns
buffered stdout from script, NULL on error

Definition at line 69 of file rpmfc.c.

References _, _free(), argvJoin(), Chdir(), D_, errno, EXIT_FAILURE, rpmiobAppend(), rpmiobFree(), rpmiobNew(), rpmlog(), RPMLOG_DEBUG, RPMLOG_ERR, and unsetenv().

Referenced by rpmfcExec().

static void printDeps ( Header  h)
static

Print dependencies in a header.

Parameters
hheader

Definition at line 1327 of file rpmfc.c.

References DepMsg_s::ftag, DepMsg_s::mask, DepMsg_s::msg, DepMsg_s::ntag, rpmdsDNEVR(), rpmdsFlags(), rpmdsFree(), rpmdsInit(), rpmdsNew(), rpmdsNext(), rpmlog(), RPMLOG_NOTICE, and DepMsg_s::xor.

Referenced by rpmfcGenerateDepends().

rpmRC rpmfcApply ( rpmfc  fc)

Build file/package dependency dictionary and mappings.

Parameters
fcfile classifier
Returns
RPMRC_OK on success

Definition at line 950 of file rpmfc.c.

References _, _filter_execs, argiAdd(), argiCount(), argvCount(), rpmfcApplyTbl_s::colormask, D_, rpmfcApplyTbl_s::func, mireRegexec(), rpmdsFind(), rpmdsFree(), rpmdsSingle(), RPMFC_PYTHON, rpmfcExpandRegexps(), rpmfcFreeRegexps(), rpmlog(), RPMLOG_DEBUG, RPMLOG_NOTICE, RPMRC_OK, RPMTAG_PROVIDENAME, and RPMTAG_REQUIRENAME.

Referenced by main(), and rpmfcGenerateDepends().

rpmRC rpmfcClassify ( rpmfc  fc,
ARGV_t  argv,
rpmuint16_t fmode 
)
int rpmfcColoring ( const char *  fmstr)

Return file color given file(1) string.

Parameters
fmstrfile(1) string
Returns
file color

Definition at line 633 of file rpmfc.c.

References RPMFC_BLACK, RPMFC_INCLUDE, and rpmfcTokens.

Referenced by rpmfcClassify().

static int rpmfcELF ( rpmfc  fc)
static

Extract Elf dependencies.

Parameters
fcfile classifier
Returns
0 on success

Definition at line 918 of file rpmfc.c.

References rpmdsELF(), RPMELF_FLAG_SKIPPROVIDES, RPMELF_FLAG_SKIPREQUIRES, and rpmfcMergePR().

int rpmfcExec ( ARGV_t  av,
rpmiob  iob_stdin,
rpmiob iob_stdoutp,
int  failnonzero 
)
static int rpmfcExpandAppend ( ARGV_t argvp,
const ARGV_t  av 
)
static

Definition at line 40 of file rpmfc.c.

References argvCount(), rpmExpand(), and xrealloc().

Referenced by rpmfcExec().

static void* rpmfcExpandRegexps ( const char *  str,
int *  nmirep 
)
static

Definition at line 330 of file rpmfc.c.

References _, _free(), mireAppend(), mireFree(), rpmExpand(), rpmlog(), RPMLOG_NOTICE, and RPMMIRE_REGEX.

Referenced by rpmfcApply().

static char* rpmfcFileDep ( char *  buf,
size_t  ix,
rpmds  ds 
)
static
static void rpmfcFini ( void *  _fc)
static

Definition at line 1817 of file rpmfc.c.

References argiFree(), argvFree(), rpmdsFree(), and rpmiobFree().

Referenced by rpmfcGetPool().

static void* rpmfcFreeRegexps ( void *  mires,
int  nmire 
)
static

Definition at line 390 of file rpmfc.c.

References mireFreeAll().

Referenced by rpmfcApply().

rpmRC rpmfcGenerateDepends ( void *  specp,
void *  pkgp 
)
static rpmRC rpmfcGenerateDependsHelper ( const Spec  spec,
Package  pkg,
rpmfi  fi 
)
static
static int rpmfcGenerateScriptletDeps ( const Spec  spec,
Package  pkg 
)
static
static rpmfc rpmfcGetPool ( rpmioPool  pool)
static

Definition at line 1846 of file rpmfc.c.

References _rpmfc_debug, _rpmfcPool, rpmfcFini(), rpmioGetPool(), and rpmioNewPool().

Referenced by rpmfcNew().

static int rpmfcHelper ( rpmfc  fc,
unsigned char  deptype,
const char *  nsdep 
)
static

Run per-interpreter dependency helper.

Parameters
fcfile classifier
deptype'P' == Provides:, 'R' == Requires:, helper
nsdepclass name for interpreter (e.g. "perl")
Returns
0 on success

Definition at line 406 of file rpmfc.c.

References _filter_values, argvCount(), argvFree(), argvSplit(), rpmdsFree(), rpmdsMerge(), rpmdsSingle(), rpmfcExec(), rpmfcFileDep(), rpmfcMatchRegexps(), rpmfcSaveArg(), rpmiobAppend(), rpmiobFree(), rpmiobNew(), rpmiobStr(), RPMSENSE_EQUAL, RPMSENSE_GREATER, RPMSENSE_LESS, RPMTAG_PROVIDENAME, RPMTAG_REQUIRENAME, and snprintf().

Referenced by rpmfcSCRIPT().

static int rpmfcMatchRegexps ( void *  mires,
int  nmire,
const char *  str,
char  deptype 
)
static

Definition at line 371 of file rpmfc.c.

References _, D_, mireRegexec(), rpmlog(), RPMLOG_DEBUG, and RPMLOG_NOTICE.

Referenced by rpmfcHelper(), rpmfcMergePR(), and rpmfcSCRIPT().

static int rpmfcMergePR ( void *  context,
rpmds  ds 
)
static

Merge provides/requires dependencies into a rpmfc container.

Parameters
contextmerge dependency set(s) container
dsdependency set to merge
Returns
0 on success

Definition at line 869 of file rpmfc.c.

References _filter_values, _rpmfc_debug, rpmdsMerge(), rpmdsTagN(), rpmfcFileDep(), rpmfcMatchRegexps(), rpmfcSaveArg(), RPMTAG_PROVIDENAME, RPMTAG_REQUIRENAME, and tagName().

Referenced by rpmfcELF().

rpmfc rpmfcNew ( void  )

Create a file classifier.

Returns
new file classifier

Definition at line 1860 of file rpmfc.c.

References rpmfcGetPool(), and rpmfcLink().

Referenced by main(), and rpmfcGenerateDepends().

void rpmfcPrint ( const char *  msg,
rpmfc  fc,
FILE *  fp 
)

Print results of file classification.

Todo:
Remove debugging routine.
Parameters
msgmessage prefix (NULL for none)
fcfile classifier
fpoutput file handle (NULL for stderr)

Definition at line 648 of file rpmfc.c.

References rpmdsCount(), rpmdsDNEVR(), rpmdsNext(), rpmdsSetIx(), and RPMFC_BLACK.

Referenced by main(), and rpmfcGenerateDepends().

static int rpmfcSaveArg ( ARGV_t argvp,
const char *  key 
)
static

Definition at line 285 of file rpmfc.c.

References argvAdd(), argvSearch(), and argvSort().

Referenced by rpmfcClassify(), rpmfcHelper(), rpmfcMergePR(), and rpmfcSCRIPT().

static int rpmfcSCRIPT ( rpmfc  fc)
static

Extract script dependencies.

Parameters
fcfile classifier
Returns
0 on success

Definition at line 730 of file rpmfc.c.

References _filter_values, rpmdsFree(), rpmdsMerge(), rpmdsSingle(), RPMFC_BOURNE, RPMFC_LIBTOOL, RPMFC_MODULE, RPMFC_MONO, RPMFC_PERL, RPMFC_PHP, RPMFC_PKGCONFIG, RPMFC_PYTHON, rpmfcFileDep(), rpmfcHelper(), rpmfcMatchRegexps(), rpmfcSaveArg(), and RPMTAG_REQUIRENAME.

Variable Documentation

int _filter_execs = 1
static

Definition at line 36 of file rpmfc.c.

Referenced by rpmfcApply().

int _filter_values = 1
static

Definition at line 34 of file rpmfc.c.

Referenced by rpmfcHelper(), rpmfcMergePR(), and rpmfcSCRIPT().

rpmioPool _rpmfcPool = NULL

Definition at line 1844 of file rpmfc.c.

Referenced by rpmfcGetPool().

struct DepMsg_s depMsgs[]
static

Definition at line 1282 of file rpmfc.c.

DepMsg_t DepMsgs = depMsgs
static

Definition at line 1321 of file rpmfc.c.

struct rpmfcApplyTbl_s rpmfcApplyTable[]
static
Initial value:

XXX Having two entries for rpmfcSCRIPT may be unnecessary duplication.

Definition at line 943 of file rpmfc.c.

struct rpmfcTokens_s rpmfcTokens[]
static

Definition at line 533 of file rpmfc.c.

Referenced by rpmfcColoring().

struct DepMsg_s scriptMsgs[]
static
Initial value:
= {
{ "Requires(pre)", { "%{?__scriptlet_requires}", NULL, NULL, NULL },
RPMSENSE_SCRIPT_PRE, 0 },
{ "Requires(post)", { "%{?__scriptlet_requires}", NULL, NULL, NULL },
RPMSENSE_SCRIPT_POST, 0 },
{ "Requires(preun)", { "%{?__scriptlet_requires}", NULL, NULL, NULL },
RPMSENSE_SCRIPT_PREUN, 0 },
{ "Requires(postun)", { "%{?__scriptlet_requires}", NULL, NULL, NULL },
RPMSENSE_SCRIPT_POSTUN, 0 },
{ NULL, { NULL, NULL, NULL, NULL }, 0, 0, 0, 0, 0 }
}

Definition at line 1458 of file rpmfc.c.

DepMsg_t ScriptMsgs = scriptMsgs
static

Definition at line 1476 of file rpmfc.c.