build/rpmfc.c File Reference

#include "system.h"
#include <signal.h>
#include <rpmbuild.h>
#include <argv.h>
#include <rpmfc.h>
#include <rpmds.h>
#include <rpmfi.h>
#include "debug.h"

Go to the source code of this file.

Data Structures

struct  rpmfcApplyTbl_s
struct  DepMsg_s

Defines

#define _RPMDS_INTERNAL

Typedefs

typedef rpmfcApplyTbl_srpmfcApplyTbl
typedef DepMsg_sDepMsg_t

Functions

static int rpmfcExpandAppend (ARGV_t *argvp, const ARGV_t av)
static StringBuf getOutputFrom (const char *dir, ARGV_t argv, const char *writePtr, int writeBytesLeft, int failNonZero)
 Return output from helper script.
int rpmfcExec (ARGV_t av, StringBuf sb_stdin, StringBuf *sb_stdoutp, int failnonzero)
 Return helper output.
static int rpmfcSaveArg (ARGV_t *argvp, const char *key)
static char * rpmfcFileDep (char *buf, int ix, rpmds ds)
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.
rpmfc rpmfcFree (rpmfc fc)
 Destroy a file classifier.
rpmfc rpmfcNew (void)
 Create a file classifier.
static int rpmfcSYMLINK (rpmfc fc)
 Ensure that symlinks for shared libs generate a dep on the shared lib.
static int rpmfcSCRIPT (rpmfc fc)
 Extract script dependencies.
static int rpmfcELF (rpmfc fc)
 Extract Elf dependencies.
int rpmfcApply (rpmfc fc)
 Build file/package dependency dictionary and mappings.
int rpmfcClassify (rpmfc fc, ARGV_t argv, int_16 *fmode)
static void printDeps (Header h)
static int rpmfcGenerateDependsHelper (const Spec spec, Package pkg, rpmfi fi)
int rpmfcGenerateDepends (const Spec spec, Package pkg)
 Generate package dependencies.

Variables

static struct rpmfcTokens_s rpmfcTokens []
static struct rpmfcApplyTbl_s rpmfcApplyTable []
static struct DepMsg_s depMsgs []
static DepMsg_t DepMsgs = depMsgs


Define Documentation

#define _RPMDS_INTERNAL

Definition at line 9 of file rpmfc.c.


Typedef Documentation

typedef struct DepMsg_s* DepMsg_t

Definition at line 1430 of file rpmfc.c.

typedef struct rpmfcApplyTbl_s * rpmfcApplyTbl


Function Documentation

static void printDeps ( Header  h  )  [static]

Definition at line 1500 of file rpmfc.c.

References DepMsgs, DepMsg_s::ftag, DepMsg_s::mask, DepMsg_s::msg, DepMsg_s::ntag, rpmdsDNEVR(), rpmdsFlags(), rpmdsFree(), rpmdsInit(), rpmdsNew(), rpmdsNext(), RPMMESS_NORMAL, rpmMessage, and DepMsg_s::xor.

Referenced by rpmfcGenerateDepends().

int rpmfcApply ( rpmfc  fc  ) 

Build file/package dependency dictionary and mappings.

Parameters:
fc file classifier
Returns:
0 on success

Definition at line 1200 of file rpmfc.c.

References argiAdd(), argiCount(), argvCount(), rpmfcApplyTbl_s::colormask, rpmfc_s::ddict, rpmfc_s::ddictx, rpmfc_s::fcolor, rpmfc_s::fddictn, rpmfc_s::fddictx, rpmfc_s::fn, rpmfcApplyTbl_s::func, rpmfc_s::ix, rpmfc_s::provides, rpmfc_s::requires, rpmdsFind(), rpmdsFree(), rpmdsSingle(), RPMFC_PYTHON, rpmfcApplyTable, RPMTAG_PROVIDENAME, RPMTAG_REQUIRENAME, rpmfc_s::skipProv, rpmfc_s::skipReq, and ARGI_s::vals.

Referenced by main(), and rpmfcGenerateDepends().

int rpmfcClassify ( rpmfc  fc,
ARGV_t  argv,
int_16 fmode 
)

Definition at line 1306 of file rpmfc.c.

References _, argiAdd(), argvAdd(), argvCount(), argvFree(), argvSearch(), rpmfc_s::brlen, rpmfc_s::cdict, errno, rpmfc_s::fcdictx, rpmfc_s::fcolor, rpmfc_s::fddictn, rpmfc_s::fddictx, rpmfc_s::fknown, rpmfc_s::fn, rpmfc_s::fwhite, rpmfc_s::ix, magicfile, rpmfc_s::nfiles, RPMERR_EXEC, rpmError, RPMFC_INCLUDE, RPMFC_WHITE, rpmfcColoring(), rpmfcSaveArg(), RPMMESS_DEBUG, rpmMessage, S_IFSOCK, and strerror.

Referenced by main(), and rpmfcGenerateDepends().

int rpmfcColoring ( const char *  fmstr  ) 

Return file color given file(1) string.

Parameters:
fmstr file(1) string
Returns:
file color

Definition at line 527 of file rpmfc.c.

References rpmfcTokens_s::colors, RPMFC_BLACK, RPMFC_INCLUDE, rpmfcTokens, and rpmfcTokens_s::token.

Referenced by rpmfcClassify().

static int rpmfcELF ( rpmfc  fc  )  [static]

Extract Elf dependencies.

Parameters:
fc file classifier
Returns:
0 on success

Definition at line 856 of file rpmfc.c.

References _free(), rpmfc_s::ddict, EI_CLASS, ELFCLASS64, ET_EXEC, rpmfc_s::fn, rpmfc_s::ix, rpmfc_s::provides, rpmfc_s::requires, rpmdsFree(), rpmdsMerge(), rpmdsSingle(), rpmExpandNumeric(), rpmfcFileDep(), rpmfcSaveArg(), RPMSENSE_FIND_PROVIDES, RPMSENSE_FIND_REQUIRES, RPMTAG_PROVIDENAME, RPMTAG_PROVIDES, RPMTAG_REQUIRENAME, rpmfc_s::skipProv, rpmfc_s::skipReq, stpcpy(), and xstrdup().

int rpmfcExec ( ARGV_t  av,
StringBuf  sb_stdin,
StringBuf sb_stdoutp,
int  failnonzero 
)

Return helper output.

Parameters:
av helper argv (with possible macros)
sb_stdin helper input
Return values:
*sb_stdoutp helper output
Parameters:
failnonzero IS non-zero helper exit status a failure?

Definition at line 206 of file rpmfc.c.

References _free(), argvAppend(), argvFree(), freeStringBuf(), getOutputFrom(), getStringBuf(), rpmExpand(), and rpmfcExpandAppend().

Referenced by checkFiles(), rpmfcGenerateDependsHelper(), and rpmfcHelper().

static int rpmfcExpandAppend ( ARGV_t argvp,
const ARGV_t  av 
) [static]

Definition at line 28 of file rpmfc.c.

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

Referenced by rpmfcExec().

static char* rpmfcFileDep ( char *  buf,
int  ix,
rpmds  ds 
) [static]

Definition at line 283 of file rpmfc.c.

References rpmdsEVR(), rpmdsFlags(), rpmdsN(), rpmdsTagN(), RPMTAG_PROVIDENAME, and RPMTAG_REQUIRENAME.

Referenced by rpmfcELF(), rpmfcHelper(), rpmfcSCRIPT(), and rpmfcSYMLINK().

rpmfc rpmfcFree ( rpmfc  fc  ) 

Destroy a file classifier.

Parameters:
fc file classifier
Returns:
NULL always

Definition at line 619 of file rpmfc.c.

References _free(), argiFree(), argvFree(), rpmfc_s::cdict, rpmfc_s::ddict, rpmfc_s::ddictx, rpmfc_s::fcdictx, rpmfc_s::fcolor, rpmfc_s::fddictn, rpmfc_s::fddictx, rpmfc_s::fn, freeStringBuf(), rpmfc_s::provides, rpmfc_s::requires, rpmdsFree(), rpmfc_s::sb_java, rpmfc_s::sb_perl, and rpmfc_s::sb_python.

Referenced by main(), and rpmfcGenerateDepends().

int rpmfcGenerateDepends ( const Spec  spec,
Package  pkg 
)

Generate package dependencies.

Parameters:
spec spec file control
pkg package control
Returns:
0 on success

Definition at line 1624 of file rpmfc.c.

References _free(), _rpmfc_debug, argiCount(), argiData(), argvCount(), argvData(), argvFree(), Package_s::autoProv, Package_s::autoReq, rpmfc_s::brlen, Spec_s::buildRootURL, rpmfc_s::cdict, Package_s::cpioList, rpmfc_s::ddictx, Package_s::ds, rpmfc_s::fcdictx, rpmfc_s::fcolor, rpmfc_s::fddictn, rpmfc_s::fddictx, rpmfc_s::fknown, Package_s::header, headerAddEntry(), headerRemoveEntry(), DepMsg_s::msg, rpmfc_s::nfiles, printDeps(), rpmfc_s::provides, rpmfc_s::requires, RPM_INT32_TYPE, RPM_STRING_ARRAY_TYPE, rpmdsCount(), rpmdsEVR(), rpmdsFree(), rpmdsMerge(), rpmdsN(), rpmdsNew(), rpmdsSingle(), rpmExpandNumeric(), rpmfcApply(), rpmfcClassify(), rpmfcFree(), rpmfcGenerateDependsHelper(), rpmfcNew(), rpmfcPrint(), rpmfiFC(), rpmfiFFlags(), rpmfiFMode(), rpmfiFN(), rpmfiInit(), RPMFILE_CONFIG, rpmfiNext(), RPMSENSE_CONFIG, RPMSENSE_EQUAL, RPMTAG_CLASSDICT, RPMTAG_DEPENDSDICT, RPMTAG_FILECLASS, RPMTAG_FILECOLORS, RPMTAG_FILEDEPENDSN, RPMTAG_FILEDEPENDSX, RPMTAG_PROVIDEFLAGS, RPMTAG_PROVIDENAME, RPMTAG_PROVIDEVERSION, RPMTAG_REQUIREFLAGS, RPMTAG_REQUIRENAME, RPMTAG_REQUIREVERSION, rpmfc_s::skipProv, rpmfc_s::skipReq, rpmfc_s::tracked, xcalloc(), and xstrdup().

Referenced by processBinaryFiles().

static int rpmfcGenerateDependsHelper ( const Spec  spec,
Package  pkg,
rpmfi  fi 
) [static]

Definition at line 1546 of file rpmfc.c.

References _, _free(), appendLineStringBuf, DepMsg_s::argv, Package_s::autoProv, Package_s::autoReq, DepMsgs, freeStringBuf(), DepMsg_s::ftag, getStringBuf(), DepMsg_s::msg, newStringBuf(), DepMsg_s::ntag, parseRCPOT(), RPMERR_EXEC, rpmError, rpmExpand(), rpmfcExec(), rpmfiFN(), rpmfiInit(), rpmfiNext(), RPMMESS_NORMAL, rpmMessage, RPMSENSE_FIND_PROVIDES, RPMSENSE_FIND_REQUIRES, RPMTAG_PROVIDEFLAGS, and RPMTAG_REQUIREFLAGS.

Referenced by rpmfcGenerateDepends().

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

Run per-interpreter dependency helper.

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

Definition at line 316 of file rpmfc.c.

References appendLineStringBuf, argvCount(), argvFree(), argvSplit(), rpmfc_s::ddict, rpmfc_s::fn, freeStringBuf(), getStringBuf(), rpmfc_s::ix, newStringBuf(), rpmfc_s::provides, rpmfc_s::requires, rpmdsFree(), rpmdsMerge(), rpmdsSingle(), rpmfcExec(), rpmfcFileDep(), rpmfcSaveArg(), RPMSENSE_EQUAL, RPMSENSE_FIND_PROVIDES, RPMSENSE_FIND_REQUIRES, RPMSENSE_GREATER, RPMSENSE_LESS, RPMSENSE_RPMLIB, RPMTAG_PROVIDENAME, RPMTAG_REQUIRENAME, rpmfc_s::skipProv, rpmfc_s::skipReq, snprintf(), and rpmfc_s::tracked.

Referenced by rpmfcSCRIPT().

rpmfc rpmfcNew ( void   ) 

Create a file classifier.

Returns:
new file classifier

Definition at line 643 of file rpmfc.c.

References xcalloc().

Referenced by main(), and rpmfcGenerateDepends().

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

Print results of file classification.

Todo:
Remove debugging routine.
Parameters:
msg message prefix (NULL for none)
fc file classifier
fp output file handle (NULL for stderr)

Definition at line 542 of file rpmfc.c.

References rpmfc_s::cdict, rpmfc_s::ddictx, rpmfc_s::fcdictx, rpmfc_s::fcolor, rpmfc_s::fddictn, rpmfc_s::fddictx, rpmfc_s::fn, rpmfc_s::nfiles, rpmfc_s::provides, rpmfc_s::requires, rpmdsCount(), rpmdsDNEVR(), rpmdsNext(), rpmdsSetIx(), RPMFC_BLACK, and ARGI_s::vals.

Referenced by main(), and rpmfcGenerateDepends().

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

Definition at line 270 of file rpmfc.c.

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

Referenced by rpmfcClassify(), rpmfcELF(), rpmfcHelper(), rpmfcSCRIPT(), and rpmfcSYMLINK().

static int rpmfcSCRIPT ( rpmfc  fc  )  [static]

Extract script dependencies.

Parameters:
fc file classifier
Returns:
0 on success

Definition at line 753 of file rpmfc.c.

References rpmfc_s::ddict, rpmfc_s::fcolor, rpmfc_s::fn, rpmfc_s::ix, rpmfc_s::requires, rpmdsFree(), rpmdsMerge(), rpmdsSingle(), RPMFC_MODULE, RPMFC_MONO, RPMFC_PERL, RPMFC_PYTHON, rpmfcFileDep(), rpmfcHelper(), rpmfcSaveArg(), RPMSENSE_FIND_REQUIRES, RPMTAG_REQUIRENAME, and ARGI_s::vals.

static int rpmfcSYMLINK ( rpmfc  fc  )  [static]

Ensure that symlinks for shared libs generate a dep on the shared lib.

Parameters:
fc file classifier
Returns:
0 on success

Definition at line 654 of file rpmfc.c.

References rpmfc_s::ddict, EI_CLASS, ELFCLASS64, rpmfc_s::fn, rpmfc_s::ix, PT_DYNAMIC, rpmfc_s::requires, rpmdsFree(), rpmdsMerge(), rpmdsSingle(), rpmfcFileDep(), rpmfcSaveArg(), RPMSENSE_FIND_REQUIRES, RPMTAG_REQUIRENAME, S_ISLNK, rpmfc_s::skipReq, and stpcpy().


Variable Documentation

DepMsg_t DepMsgs = depMsgs [static]

Definition at line 1496 of file rpmfc.c.

Referenced by printDeps(), and rpmfcGenerateDependsHelper().

struct DepMsg_s depMsgs[] [static]

Definition at line 1449 of file rpmfc.c.

struct rpmfcApplyTbl_s rpmfcApplyTable[] [static]

Initial value:

Definition at line 1191 of file rpmfc.c.

Referenced by rpmfcApply().

struct rpmfcTokens_s rpmfcTokens[] [static]

Definition at line 436 of file rpmfc.c.

Referenced by rpmfcColoring().


Generated on Fri Oct 12 08:44:55 2007 for rpm by  doxygen 1.5.2