Main Page   Modules   Data Structures   File List   Data Fields   Globals   Related Pages  

build/files.c File Reference

The post-build, pre-packaging file tree walk to assemble the package manifest. More...

#include "system.h"
#include <regex.h>
#include <signal.h>
#include <rpmio_internal.h>
#include <rpmbuild.h>
#include "cpio.h"
#include "rpmfi.h"
#include "rpmte.h"
#include "buildio.h"
#include "myftw.h"
#include "legacy.h"
#include "misc.h"
#include "debug.h"

Go to the source code of this file.

Data Structures

struct  AttrRec_s
struct  DepMsg_t
struct  FileList_s
 Package file tree walk data. More...

struct  FileListRec_s
struct  VFA

Defines

#define MYALLPERMS   07777
#define _RPMFI_INTERNAL
#define _RPMTE_INTERNAL
#define SKIPWHITE(_x)   {while(*(_x) && (xisspace(*_x) || *(_x) == ',')) (_x)++;}
#define SKIPNONWHITE(_x)   {while(*(_x) &&!(xisspace(*_x) || *(_x) == ',')) (_x)++;}
#define MAXDOCDIR   1024
#define fl_dev   fl_st.st_dev
#define fl_ino   fl_st.st_ino
#define fl_mode   fl_st.st_mode
#define fl_nlink   fl_st.st_nlink
#define fl_uid   fl_st.st_uid
#define fl_gid   fl_st.st_gid
#define fl_rdev   fl_st.st_rdev
#define fl_size   fl_st.st_size
#define fl_mtime   fl_st.st_mtime
#define isAttrDefault(_ars)   ((_ars)[0] == '-' && (_ars)[1] == '\0')

Typedefs

typedef enum specdFlags_e specdFlags
typedef FileListRec_sFileListRec
typedef AttrRec_sAttrRec
typedef FileList_sFileList
 Package file tree walk data. More...

typedef VFA VFA_t

Enumerations

enum  specdFlags_e {
  SPECD_DEFFILEMODE = (1 << 0), SPECD_DEFDIRMODE = (1 << 1), SPECD_DEFUID = (1 << 2), SPECD_DEFGID = (1 << 3),
  SPECD_DEFVERIFY = (1 << 4), SPECD_FILEMODE = (1 << 8), SPECD_DIRMODE = (1 << 9), SPECD_UID = (1 << 10),
  SPECD_GID = (1 << 11), SPECD_VERIFY = (1 << 12)
}

Functions

void nullAttrRec (AttrRec ar)
void freeAttrRec (AttrRec ar)
void dupAttrRec (const AttrRec oar, AttrRec nar)
char * strtokWithQuotes (char *s, char *delim)
void timeCheck (int tc, Header h)
int parseForVerify (char *buf, FileList fl)
 Parse verify and defverify from file manifest. More...

int parseForDev (char *buf, FileList fl)
 Parse dev from file manifest. More...

int parseForAttr (char *buf, FileList fl)
 Parse attr and defattr from file manifest. More...

int parseForConfig (char *buf, FileList fl)
 Parse config from file manifest. More...

int langCmp (const void *ap, const void *bp)
int parseForLang (char *buf, FileList fl)
 Parse lang from file manifest. More...

int parseForRegexLang (const char *fileName, char **lang)
int parseForRegexMultiLib (const char *fileName)
int parseForSimple (Spec spec, Package pkg, char *buf, FileList fl, const char **fileName)
 Parse simple attributes (e.g. More...

int compareFileListRecs (const void *ap, const void *bp)
int isDoc (FileList fl, const char *fileName)
 Test if file is located in a docdir. More...

int checkHardLinks (FileList fl)
 Verify that file attributes scope over hardlinks correctly. More...

void genCpioListAndHeader (FileList fl, rpmfi *cpioList, Header h, int isSrc)
 Add file entries to header. More...

FileListRec freeFileList (FileListRec fileList, int count)
int addFile (FileList fl, const char *diskURL, struct stat *statp)
 Add a file to the package manifest. More...

int processBinaryFile (Package pkg, FileList fl, const char *fileURL)
 Add a file to a binary package. More...

int processPackageFiles (Spec spec, Package pkg, int installSpecialDoc, int test)
void initSourceHeader (Spec spec)
int processSourceFiles (Spec spec)
StringBuf getOutputFrom (char *dir, char *argv[], const char *writePtr, int writeBytesLeft, int failNonZero)
int generateDepends (Spec spec, Package pkg, rpmfi cpioList, int multiLib)
void printDepMsg (DepMsg_t *dm, int count, const char **names, const char **versions, int *flags)
void printDeps (Header h)
int checkFiles (StringBuf fileList, int fileListLen)
 Check packaged file list against what's in the build root. More...

int processBinaryFiles (Spec spec, int installSpecialDoc, int test)

Variables

int multiLib = 0
StringBuf check_fileList = NULL
int check_fileListLen = 0
VFA_t verifyAttrs []
VFA_t virtualFileAttributes []
DepMsg_t depMsgs []


Detailed Description

The post-build, pre-packaging file tree walk to assemble the package manifest.

Definition in file files.c.


Define Documentation

#define _RPMFI_INTERNAL
 

Definition at line 19 of file files.c.

#define _RPMTE_INTERNAL
 

Definition at line 22 of file files.c.

#define fl_dev   fl_st.st_dev
 

Definition at line 63 of file files.c.

#define fl_gid   fl_st.st_gid
 

Definition at line 68 of file files.c.

#define fl_ino   fl_st.st_ino
 

Definition at line 64 of file files.c.

#define fl_mode   fl_st.st_mode
 

Definition at line 65 of file files.c.

#define fl_mtime   fl_st.st_mtime
 

Definition at line 71 of file files.c.

#define fl_nlink   fl_st.st_nlink
 

Definition at line 66 of file files.c.

#define fl_rdev   fl_st.st_rdev
 

Definition at line 69 of file files.c.

#define fl_size   fl_st.st_size
 

Definition at line 70 of file files.c.

#define fl_uid   fl_st.st_uid
 

Definition at line 67 of file files.c.

#define isAttrDefault _ars       ((_ars)[0] == '-' && (_ars)[1] == '\0')
 

Definition at line 415 of file files.c.

Referenced by parseForAttr.

#define MAXDOCDIR   1024
 

Definition at line 41 of file files.c.

Referenced by parseForSimple.

#define MYALLPERMS   07777
 

Definition at line 9 of file files.c.

Referenced by parseForAttr.

#define SKIPNONWHITE _x       {while(*(_x) &&!(xisspace(*_x) || *(_x) == ',')) (_x)++;}
 

Definition at line 39 of file files.c.

Referenced by parseForAttr, parseForConfig, parseForDev, parseForLang, parseForVerify, parseNoSource, and parseRCPOT.

#define SKIPWHITE _x       {while(*(_x) && (xisspace(*_x) || *(_x) == ',')) (_x)++;}
 

Definition at line 38 of file files.c.

Referenced by parseForAttr, parseForConfig, parseForDev, parseForLang, parseForVerify, parseNoSource, and parseRCPOT.


Typedef Documentation

typedef struct AttrRec_s * AttrRec
 

typedef struct FileList_s * FileList
 

Package file tree walk data.

typedef struct FileListRec_s * FileListRec
 

typedef enum specdFlags_e specdFlags
 

Referenced by parseForAttr, and parseForVerify.

typedef struct VFA VFA_t
 


Enumeration Type Documentation

enum specdFlags_e
 

Enumeration values:
SPECD_DEFFILEMODE 
SPECD_DEFDIRMODE 
SPECD_DEFUID 
SPECD_DEFGID 
SPECD_DEFVERIFY 
SPECD_FILEMODE 
SPECD_DIRMODE 
SPECD_UID 
SPECD_GID 
SPECD_VERIFY 

Definition at line 45 of file files.c.


Function Documentation

int addFile FileList    fl,
const char *    diskURL,
struct stat *    statp
[static]
 

Add a file to the package manifest.

Parameters:
fl  package file tree walk data
diskURL  path to file
statp  file stat (possibly NULL)
Returns:
0 on success

Definition at line 1514 of file files.c.

References _, addFile, appendStringBuf, check_fileListLen, FileListRec_s::diskURL, FileListRec_s::fileURL, FileListRec_s::fl_st, FileListRec_s::flags, getGname, getGnameS, getUname, getUnameS, FileListRec_s::gname, FileListRec_s::langs, Lstat, multiLib, myftw, myftwFunc, parseForRegexLang, parseForRegexMultiLib, RPMFILE_MULTILIB_MASK, FileListRec_s::specdFlags, FileListRec_s::uname, urlPath, FileListRec_s::verifyFlags, xmalloc, xrealloc, and xstrdup.

Referenced by addFile, and processBinaryFile.

int checkFiles StringBuf    fileList,
int    fileListLen
[static]
 

Check packaged file list against what's in the build root.

Parameters:
fileList  packaged file list
fileListLen  no. of packaged files
Returns:
-1 if skipped, 0 on OK, 1 on error

Definition at line 2753 of file files.c.

References _, _free, freeStringBuf, getOutputFrom, getStringBuf, poptParseArgvString, rpmExpand, and rpmExpandNumeric.

Referenced by processBinaryFiles.

int checkHardLinks FileList    fl [static]
 

Verify that file attributes scope over hardlinks correctly.

If partial hardlink sets are possible, then add tracking dependency.

Parameters:
fl  package file tree walk data
Returns:
1 if partial hardlink sets can exist, 0 otherwise.

Definition at line 1098 of file files.c.

Referenced by processPackageFiles.

int compareFileListRecs const void *    ap,
const void *    bp
[static]
 

Definition at line 1067 of file files.c.

Referenced by genCpioListAndHeader.

void dupAttrRec const AttrRec    oar,
AttrRec    nar
[static]
 

Definition at line 174 of file files.c.

References freeAttrRec, and xstrdup.

Referenced by parseForAttr, and processPackageFiles.

void freeAttrRec AttrRec    ar [static]
 

Definition at line 160 of file files.c.

References _free.

Referenced by dupAttrRec, and processPackageFiles.

FileListRec freeFileList FileListRec    fileList,
int    count
[static]
 

Definition at line 1492 of file files.c.

References _free, and FileListRec_s::diskURL.

Referenced by processPackageFiles, and processSourceFiles.

void genCpioListAndHeader FileList    fl,
rpmfi   cpioList,
Header    h,
int    isSrc
[static]
 

Add file entries to header.

Todo:
Should directories have doc/config attributes? (#14531)

Remove RPMTAG_OLDFILENAMES, add dirname/basename instead.

Parameters:
fl  package file tree walk data
cpioList 
h 
isSrc 

Definition at line 1135 of file files.c.

References _, _free, compareFileListRecs, compressFilelist, CPIO_FOLLOW_SYMLINKS, CPIO_MAP_GID, CPIO_MAP_MODE, CPIO_MAP_PATH, CPIO_MAP_TYPE, CPIO_MAP_UID, CPIO_MULTILIB, FileListRec_s::diskURL, domd5, expandFilelist, FA_COPYOUT, FA_SKIP, FileListRec_s::fileURL, FileListRec_s::flags, getGidS, getUidS, FileListRec_s::gname, headerAddEntry, headerAddOrAppendEntry, isDoc, FileListRec_s::langs, Readlink, RPM_INT16_TYPE, RPM_INT32_TYPE, RPM_STRING_ARRAY_TYPE, rpmExpandNumeric, rpmfi, RPMFILE_CONFIG, RPMFILE_DOC, RPMFILE_EXCLUDE, RPMFILE_GHOST, RPMFILE_MULTILIB_MASK, RPMFILE_MULTILIB_SHIFT, rpmlibNeedsFeature, RPMTAG_BASENAMES, RPMTAG_FILEDEVICES, RPMTAG_FILEFLAGS, RPMTAG_FILEGROUPNAME, RPMTAG_FILEINODES, RPMTAG_FILELANGS, RPMTAG_FILELINKTOS, RPMTAG_FILEMD5S, RPMTAG_FILEMODES, RPMTAG_FILEMTIMES, RPMTAG_FILERDEVS, RPMTAG_FILESIZES, RPMTAG_FILEUSERNAME, RPMTAG_FILEVERIFYFLAGS, RPMTAG_MULTILIBS, RPMTAG_OLDFILENAMES, RPMTAG_SIZE, rpmts, S_ISLNK, SPECD_DEFDIRMODE, SPECD_DEFFILEMODE, SPECD_DEFGID, SPECD_DEFUID, SPECD_DEFVERIFY, SPECD_DIRMODE, SPECD_FILEMODE, SPECD_GID, SPECD_UID, SPECD_VERIFY, FileListRec_s::specdFlags, stpcpy, TR_ADDED, uint_16, uint_32, FileListRec_s::uname, urlPath, FileListRec_s::verifyFlags, xcalloc, and xmalloc.

Referenced by processPackageFiles, and processSourceFiles.

int generateDepends Spec    spec,
Package    pkg,
rpmfi    cpioList,
int    multiLib
[static]
 

Definition at line 2500 of file files.c.

References _, _free, appendLineStringBuf, appendStringBuf, DepMsg_t::argv, CPIO_MULTILIB, freeStringBuf, DepMsg_t::ftag, getOutputFrom, getStringBuf, DepMsg_t::msg, multiLib, newStringBuf, DepMsg_t::ntag, parseRCPOT, poptParseArgvString, rpmExpand, rpmfi, RPMSENSE_FIND_PROVIDES, RPMSENSE_FIND_REQUIRES, RPMSENSE_MULTILIB, RPMTAG_PROVIDEFLAGS, RPMTAG_REQUIREFLAGS, xcalloc, xrealloc, and xstrdup.

Referenced by processBinaryFiles.

StringBuf getOutputFrom char *    dir,
char *    argv[],
const char *    writePtr,
int    writeBytesLeft,
int    failNonZero
[static]
 

Definition at line 2300 of file files.c.

References _, appendStringBuf, errno, EXIT_FAILURE, newStringBuf, strerror, and unsetenv.

Referenced by checkFiles, and generateDepends.

int isDoc FileList    fl,
const char *    fileName
[static]
 

Test if file is located in a docdir.

Bug:
Use of strstr(3) might result in false positives.
Parameters:
fl  package file tree walk data
fileName  file path
Returns:
1 if doc file, 0 if not

Definition at line 1081 of file files.c.

Referenced by genCpioListAndHeader.

int langCmp const void *    ap,
const void *    bp
[static]
 

Definition at line 720 of file files.c.

Referenced by parseForLang.

void nullAttrRec AttrRec    ar [static]
 

Definition at line 148 of file files.c.

Referenced by parseForAttr, and processPackageFiles.

int parseForAttr char *    buf,
FileList    fl
[static]
 

Parse attr and defattr from file manifest.

Parameters:
buf 
fl  package file tree walk data
Returns:
0 on success

Definition at line 526 of file files.c.

References _, alloca, dupAttrRec, isAttrDefault, MYALLPERMS, nullAttrRec, SKIPNONWHITE, SKIPSPACE, SKIPWHITE, SPECD_DIRMODE, SPECD_FILEMODE, SPECD_GID, SPECD_UID, and specdFlags.

Referenced by processPackageFiles.

int parseForConfig char *    buf,
FileList    fl
[static]
 

Parse config from file manifest.

Parameters:
buf 
fl  package file tree walk data
Returns:
0 on success

Definition at line 659 of file files.c.

References _, alloca, RPMFILE_CONFIG, RPMFILE_MISSINGOK, RPMFILE_NOREPLACE, SKIPNONWHITE, SKIPSPACE, and SKIPWHITE.

Referenced by processPackageFiles.

int parseForDev char *    buf,
FileList    fl
[static]
 

Parse dev from file manifest.

Parameters:
buf 
fl  package file tree walk data
Returns:
0 on success

Definition at line 424 of file files.c.

References _, alloca, SKIPNONWHITE, SKIPSPACE, SKIPWHITE, and xisdigit.

Referenced by processPackageFiles.

int parseForLang char *    buf,
FileList    fl
[static]
 

Parse lang from file manifest.

Parameters:
buf 
fl  package file tree walk data
Returns:
0 on success

Definition at line 735 of file files.c.

References _, alloca, langCmp, SKIPNONWHITE, SKIPSPACE, SKIPWHITE, xmalloc, and xrealloc.

Referenced by processPackageFiles.

int parseForRegexLang const char *    fileName,
char **    lang
[static]
 

Definition at line 826 of file files.c.

References _free, and rpmExpand.

Referenced by addFile.

int parseForRegexMultiLib const char *    fileName [static]
 

Definition at line 872 of file files.c.

References _free, and rpmExpand.

Referenced by addFile.

int parseForSimple Spec    spec,
Package    pkg,
char *    buf,
FileList    fl,
const char **    fileName
[static]
 

Parse simple attributes (e.g.

dir) from file manifest.

Parameters:
spec 
pkg 
buf 
fl  package file tree walk data
Return values:
fileName 
Returns:
0 on success

Definition at line 938 of file files.c.

References _, _free, appendLineStringBuf, appendStringBuf, VFA::attribute, VFA::flag, headerNVR, MAXDOCDIR, MKDIR_P, multiLib, newStringBuf, RPMFILE_DOC, rpmGetPath, strtokWithQuotes, and xstrdup.

Referenced by processPackageFiles.

int parseForVerify char *    buf,
FileList    fl
[static]
 

Parse verify and defverify from file manifest.

Parameters:
buf 
fl  package file tree walk data
Returns:
0 on success

Definition at line 326 of file files.c.

References _, alloca, VFA::attribute, VFA::flag, SKIPNONWHITE, SKIPSPACE, SKIPWHITE, SPECD_VERIFY, and specdFlags.

Referenced by processPackageFiles.

void printDepMsg DepMsg_t   dm,
int    count,
const char **    names,
const char **    versions,
int *    flags
[static]
 

Definition at line 2650 of file files.c.

References isDependsMULTILIB, RPMSENSE_EQUAL, RPMSENSE_GREATER, RPMSENSE_LESS, and RPMSENSE_SENSEMASK.

Referenced by printDeps.

void printDeps Header    h [static]
 

Definition at line 2692 of file files.c.

References DepMsg_t::ftag, HFD_t, HGE_t, DepMsg_t::msg, DepMsg_t::ntag, printDepMsg, rpmTagType, and DepMsg_t::vtag.

Referenced by processBinaryFiles.

int processBinaryFile Package    pkg,
FileList    fl,
const char *    fileURL
[static]
 

Add a file to a binary package.

Parameters:
pkg 
fl  package file tree walk data
fileURL 
Returns:
0 on success

Definition at line 1746 of file files.c.

References _, _free, addFile, myGlobPatternP, rpmGenPath, rpmGlob, and urlPath.

Referenced by processPackageFiles.

int processPackageFiles Spec    spec,
Package    pkg,
int    installSpecialDoc,
int    test
[static]
 

Definition at line 1822 of file files.c.

References _, _free, appendStringBuf, FileList_s::buildRootURL, checkHardLinks, FileList_s::cur_ar, FileList_s::currentFlags, FileList_s::currentLangs, FileList_s::currentSpecdFlags, FileList_s::currentVerifyFlags, FileList_s::def_ar, FileList_s::defSpecdFlags, FileList_s::defVerifyFlags, FileList_s::devmajor, FileList_s::devminor, FileList_s::devtype, FileList_s::docDirCount, FileList_s::docDirs, doScript, dupAttrRec, expandMacros, Fclose, fdGetFp, Ferror, FileList_s::fileCount, FileList_s::fileList, FileList_s::fileListRecsAlloced, FileList_s::fileListRecsUsed, Fopen, freeAttrRec, freeFileList, freeSplitString, Fstrerror, genCpioListAndHeader, getStringBuf, handleComments, HGE_t, FileList_s::inFtw, FileList_s::isDir, FileList_s::isSpecialDoc, multiLib, FileList_s::nLangs, FileList_s::noGlob, nullAttrRec, parseForAttr, parseForConfig, parseForDev, parseForLang, parseForSimple, parseForVerify, FileList_s::passedSpecialDoc, FileList_s::prefix, processBinaryFile, FileList_s::processingFailed, RPMBUILD_STRINGBUF, rpmExpandNumeric, rpmfi, RPMFILE_MULTILIB, rpmGenPath, rpmGetPath, rpmlibNeedsFeature, RPMTAG_DEFAULTPREFIX, SKIPSPACE, splitString, timeCheck, FileList_s::totalFileSize, and xstrdup.

Referenced by processBinaryFiles.

char* strtokWithQuotes char *    s,
char *    delim
[static]
 

Definition at line 227 of file files.c.

Referenced by parseForSimple.

void timeCheck int    tc,
Header    h
[static]
 

Definition at line 271 of file files.c.

References _, HFD_t, HGE_t, RPMTAG_FILEMTIMES, RPMTAG_OLDFILENAMES, and rpmTagType.

Referenced by processPackageFiles.


Variable Documentation

StringBuf check_fileList = NULL [static]
 

Definition at line 101 of file files.c.

int check_fileListLen = 0 [static]
 

Definition at line 103 of file files.c.

Referenced by addFile, and processBinaryFiles.

DepMsg_t depMsgs[]
 

Definition at line 2456 of file files.c.

int multiLib = 0 [static]
 

Definition at line 97 of file files.c.

Referenced by addFile, generateDepends, parseForSimple, and processPackageFiles.

VFA_t verifyAttrs[]
 

Initial value:

 {
    { "md5",    RPMVERIFY_MD5 },
    { "size",   RPMVERIFY_FILESIZE },
    { "link",   RPMVERIFY_LINKTO },
    { "user",   RPMVERIFY_USER },
    { "group",  RPMVERIFY_GROUP },
    { "mtime",  RPMVERIFY_MTIME },
    { "mode",   RPMVERIFY_MODE },
    { "rdev",   RPMVERIFY_RDEV },
    { NULL, 0 }
}

Definition at line 306 of file files.c.

VFA_t virtualFileAttributes[]
 

Initial value:

 {
        { "%dir",       0 },    
        { "%doc",       RPMFILE_DOC },
        { "%ghost",     RPMFILE_GHOST },
        { "%exclude",   RPMFILE_EXCLUDE },
        { "%readme",    RPMFILE_README },
        { "%license",   RPMFILE_LICENSE },
        { "%multilib",  0 },









        { NULL, 0 }
}

Definition at line 907 of file files.c.


Generated on Tue Sep 17 15:56:48 2002 for rpm by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002