Doxygen annotations for config files.
authorjbj <devnull@localhost>
Tue, 10 Apr 2001 12:36:45 +0000 (12:36 +0000)
committerjbj <devnull@localhost>
Tue, 10 Apr 2001 12:36:45 +0000 (12:36 +0000)
Doxygen annotations for rpmdep section.
Add manifests for install modes.

CVS patchset: 4675
CVS date: 2001/04/10 12:36:45

27 files changed:
Doxyfile.in
build/buildio.h
lib/depends.h
lib/fprint.h
lib/fsm.c
lib/fsm.h
lib/hash.h
lib/manifest.c [new file with mode: 0644]
lib/manifest.h [new file with mode: 0644]
lib/md5.h
lib/misc.h
lib/oldrpmdb.h
lib/psm.c
lib/psm.h
lib/query.c
lib/rpmdb.h
lib/rpminstall.c
lib/rpmlead.h
lib/rpmlib.h
lib/stringbuf.h
macros.in
po/rpm.pot
python/hash.h
rpmio/rpmerr.h
rpmio/rpmlog.h
rpmpopt.in
rpmrc.in

index 69b98ff..7ab2489 100644 (file)
@@ -14,7 +14,7 @@
 #---------------------------------------------------------------------------
 
 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
-# by quotes) that should identify the project. 
+# by quotes) that should identify the project.
 
 PROJECT_NAME           = @PACKAGE@
 
@@ -36,25 +36,25 @@ OUTPUT_DIRECTORY       = @WITH_APIDOCS_TARGET@
 # information to generate all constant output in the proper language. 
 # The default language is English, other supported languages are: 
 # Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, 
-# Korean, Hungarian, Norwegian, Spanish, Romanian, Russian, Croatian,
-# Polish, Portuguese and Slovene.
+# Korean, Hungarian, Norwegian, Spanish, Romanian, Russian, Croatian, 
+# Polish, Portuguese, Brazilian and Slovene.
 
 OUTPUT_LANGUAGE        = English
 
 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
 # documentation are documented, even if no documentation was available. 
 # Private class members and static file members will be hidden unless 
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 
 EXTRACT_ALL            = YES
 
 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
-# will be included in the documentation. 
+# will be included in the documentation.
 
 EXTRACT_PRIVATE        = NO
 
 # If the EXTRACT_STATIC tag is set to YES all static members of a file 
-# will be included in the documentation. 
+# will be included in the documentation.
 
 EXTRACT_STATIC         = YES
 
@@ -62,40 +62,40 @@ EXTRACT_STATIC         = YES
 # undocumented members of documented classes, files or namespaces. 
 # If set to NO (the default) these members will be included in the 
 # various overviews, but no documentation section is generated. 
-# This option has no effect if EXTRACT_ALL is enabled. 
+# This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_MEMBERS     = NO
 
 # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
 # undocumented classes that are normally visible in the class hierarchy. 
 # If set to NO (the default) these class will be included in the various 
-# overviews. This option has no effect if EXTRACT_ALL is enabled. 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_CLASSES     = NO
 
 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
 # include brief member descriptions after the members that are listed in 
 # the file and class documentation (similar to JavaDoc). 
-# Set to NO to disable this. 
+# Set to NO to disable this.
 
 BRIEF_MEMBER_DESC      = YES
 
 # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
 # the brief description of a member or function before the detailed description. 
 # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed. 
+# brief descriptions will be completely suppressed.
 
 REPEAT_BRIEF           = YES
 
 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
 # Doxygen will generate a detailed section even if there is only a brief 
-# description. 
+# description.
 
 ALWAYS_DETAILED_SEC    = NO
 
 # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
 # path before files name in the file list and in the header files. If set 
-# to NO the shortest path that makes the file name unique will be used. 
+# to NO the shortest path that makes the file name unique will be used.
 
 FULL_PATH_NAMES        = YES
 
@@ -109,29 +109,29 @@ STRIP_FROM_PATH        = @TOP_SOURCEDIR@/
 # The INTERNAL_DOCS tag determines if documentation 
 # that is typed after a \internal command is included. If the tag is set 
 # to NO (the default) then the documentation will be excluded. 
-# Set it to YES to include the internal documentation. 
+# Set it to YES to include the internal documentation.
 
 INTERNAL_DOCS          = YES
 
 # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
 # generate a class diagram (in Html and LaTeX) for classes with base or 
-# super classes. Setting the tag to NO turns the diagrams off. 
+# super classes. Setting the tag to NO turns the diagrams off.
 
 CLASS_DIAGRAMS         = YES
 
 # If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources. 
+# be generated. Documented entities will be cross-referenced with these sources.
 
 SOURCE_BROWSER         = YES
 
 # Setting the INLINE_SOURCES tag to YES will include the body 
-# of functions and classes directly in the documentation. 
+# of functions and classes directly in the documentation.
 
 INLINE_SOURCES         = NO
 
 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
 # doxygen to hide any special comment blocks from generated source code 
-# fragments. Normal C and C++ comments will always remain visible. 
+# fragments. Normal C and C++ comments will always remain visible.
 
 STRIP_CODE_COMMENTS    = YES
 
@@ -143,47 +143,53 @@ STRIP_CODE_COMMENTS    = YES
 
 CASE_SENSE_NAMES       = YES
 
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+#SHORT_NAMES            = NO
+
 # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
 # will show members with their full class and namespace scopes in the 
-# documentation. If set to YES the scope will be hidden. 
+# documentation. If set to YES the scope will be hidden.
 
 HIDE_SCOPE_NAMES       = NO
 
 # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
 # will generate a verbatim copy of the header file for each class for 
-# which an include is specified. Set to NO to disable this. 
+# which an include is specified. Set to NO to disable this.
 
 VERBATIM_HEADERS       = YES
 
 # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
 # will put list of the files that are included by a file in the documentation 
-# of that file. 
+# of that file.
 
 SHOW_INCLUDE_FILES     = YES
 
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments  will behave just like the Qt-style comments (thus requiring an
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments  will behave just like the Qt-style comments (thus requiring an 
 # explict @brief command for a brief description.
 
 JAVADOC_AUTOBRIEF      = YES
 
 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
 # member inherits the documentation from any documented member that it 
-# reimplements. 
+# reimplements.
 
 INHERIT_DOCS           = YES
 
 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
-# is inserted in the documentation for inline members. 
+# is inserted in the documentation for inline members.
 
 INLINE_INFO            = YES
 
 # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
 # will sort the (detailed) documentation of file and class members 
 # alphabetically by member name. If set to NO the members will appear in 
-# declaration order. 
+# declaration order.
 
 SORT_MEMBER_DOCS       = YES
 
@@ -195,12 +201,12 @@ SORT_MEMBER_DOCS       = YES
 DISTRIBUTE_GROUP_DOC   = NO
 
 # The TAB_SIZE tag can be used to set the number of spaces in a tab. 
-# Doxygen uses this value to replace tabs by spaces in code fragments. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
 
 TAB_SIZE               = 8
 
-# The ENABLE_SECTIONS tag can be used to enable conditional 
-# documentation sections, marked by \if sectionname ... \endif. 
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
 
 ENABLED_SECTIONS       = 
 
@@ -227,7 +233,7 @@ GENERATE_BUGLIST       = YES
 # For example adding "sideeffect=\par Side Effects:\n" will allow you to 
 # put the command \sideeffect (or @sideeffect) in the documentation, which 
 # will result in a user defined paragraph with heading "Side Effects:". 
-# You can put \n's in the value part of an alias to insert newlines. 
+# You can put \n's in the value part of an alias to insert newlines.
 
 ALIASES                = 
 
@@ -237,20 +243,20 @@ ALIASES                =
 # here it will be hidden. Use a value of 0 to hide initializers completely. 
 # The appearance of the initializer of individual variables and defines in the 
 # documentation can be controlled using \showinitializer or \hideinitializer 
-# command in the documentation regardless of this setting. 
+# command in the documentation regardless of this setting.
 
 MAX_INITIALIZER_LINES  = 30
 
 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
 # only. Doxygen will then generate output that is more tailored for C. 
 # For instance some of the names that are used will be different. The list 
-# of all members will be omitted, etc. 
+# of all members will be omitted, etc.
 
 OPTIMIZE_OUTPUT_FOR_C  = YES
 
 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
 # at the bottom of the documentation of classes and structs. If set to YES the 
-# list will mention the files that were used to generate the documentation. 
+# list will mention the files that were used to generate the documentation.
 
 SHOW_USED_FILES        = YES
 
@@ -259,32 +265,32 @@ SHOW_USED_FILES        = YES
 #---------------------------------------------------------------------------
 
 # The QUIET tag can be used to turn on/off the messages that are generated 
-# by doxygen. Possible values are YES and NO. If left blank NO is used. 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
 
 QUIET                  = NO
 
 # The WARNINGS tag can be used to turn on/off the warning messages that are 
 # generated by doxygen. Possible values are YES and NO. If left blank 
-# NO is used. 
+# NO is used.
 
 WARNINGS               = YES
 
 # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
 # for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
-# automatically be disabled. 
+# automatically be disabled.
 
 WARN_IF_UNDOCUMENTED   = YES
 
 # The WARN_FORMAT tag determines the format of the warning messages that 
 # doxygen can produce. The string should contain the $file, $line, and $text 
 # tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text. 
+# warning originated and the warning text.
 
 WARN_FORMAT            = "$file:$line: $text"
 
 # The WARN_LOGFILE tag can be used to specify a file to which warning 
 # and error messages should be written. If left blank the output is written 
-# to stderr. 
+# to stderr.
 
 WARN_LOGFILE           = 
 
@@ -295,15 +301,18 @@ WARN_LOGFILE           =
 # The INPUT tag can be used to specify the files and/or directories that contain 
 # documented source files. You may enter file names like "myfile.cpp" or 
 # directories like "/usr/src/myproject". Separate the files or directories 
-# with spaces. 
+# with spaces.
 
 INPUT                  = \
        ./Doxyheader \
-       ./macros \
        ./build.c \
        ./build.h \
        ./config.h \
+       ./debug.h \
+       ./macros \
        ./rpmqv.c \
+       ./rpmpopt-@VERSION@ \
+       ./rpmrc \
        ./rpm2cpio.c \
        ./system.h \
        ./build/build.c \
@@ -422,6 +431,7 @@ INPUT                  = \
        ./popt/poptint.h \
        ./popt/poptparse.c \
        ./python/hash.c \
+       ./python/hash.h \
        ./python/rpmmodule.c \
        ./python/upgrade.c \
        ./python/upgrade.h \
@@ -438,44 +448,44 @@ INPUT                  = \
 # If the value of the INPUT tag contains directories, you can use the 
 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 # and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included. 
+# blank all files are included.
 
 FILE_PATTERNS          = *.c *.h
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 # should be searched for input files as well. Possible values are YES and NO. 
-# If left blank NO is used. 
+# If left blank NO is used.
 
 RECURSIVE              = NO
 
 # The EXCLUDE tag can be used to specify files and/or directories that should 
 # excluded from the INPUT source files. This way you can easily exclude a 
-# subdirectory from a directory tree whose root is specified with the INPUT tag. 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
 
 EXCLUDE                = 
 
 # If the value of the INPUT tag contains directories, you can use the 
 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories. 
+# certain files from those directories.
 
 EXCLUDE_PATTERNS       = 
 
 # The EXAMPLE_PATH tag can be used to specify one or more files or 
 # directories that contain example code fragments that are included (see 
-# the \include command). 
+# the \include command).
 
 EXAMPLE_PATH           = @TOP_SOURCEDIR@/doc/manual
 
 # If the value of the EXAMPLE_PATH tag contains directories, you can use the 
 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 # and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included. 
+# blank all files are included.
 
 EXAMPLE_PATTERNS       = 
 
 # The IMAGE_PATH tag can be used to specify one or more files or 
 # directories that contain image that are included in the documentation (see 
-# the \image command). 
+# the \image command).
 
 IMAGE_PATH             = 
 
@@ -484,13 +494,13 @@ IMAGE_PATH             =
 # by executing (via popen()) the command <filter> <input-file>, where <filter> 
 # is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
 # input file. Doxygen will then use the output that the filter program writes 
-# to standard output. 
+# to standard output.
 
 INPUT_FILTER           = 
 
 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
 # INPUT_FILTER) will be used to filter the input files when producing source 
-# files to browse. 
+# files to browse.
 
 FILTER_SOURCE_FILES    = NO
 
@@ -500,20 +510,20 @@ FILTER_SOURCE_FILES    = NO
 
 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
 # of all compounds will be generated. Enable this if the project 
-# contains a lot of classes, structs, unions or interfaces. 
+# contains a lot of classes, structs, unions or interfaces.
 
 ALPHABETICAL_INDEX     = NO
 
 # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
 # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
-# in which this list will be split (can be a number in the range [1..20]) 
+# in which this list will be split (can be a number in the range [1..20])
 
 COLS_IN_ALPHA_INDEX    = 5
 
 # In case all classes in a project start with a common prefix, all 
 # classes will be put under the same header in the alphabetical index. 
 # The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
-# should be ignored while generating the index headers. 
+# should be ignored while generating the index headers.
 
 IGNORE_PREFIX          = 
 
@@ -522,13 +532,13 @@ IGNORE_PREFIX          =
 #---------------------------------------------------------------------------
 
 # If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
-# generate HTML output. 
+# generate HTML output.
 
 GENERATE_HTML          = YES
 
 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `html' will be used as the default path. 
+# put in front of it. If left blank `html' will be used as the default path.
 
 HTML_OUTPUT            = html
 
@@ -547,20 +557,20 @@ HTML_FOOTER            =
 # The HTML_STYLESHEET tag can be used to specify a user defined cascading 
 # style sheet that is used by each HTML page. It can be used to 
 # fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet 
+# will generate a default style sheet
 
 HTML_STYLESHEET        = 
 
 # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
 # files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used. 
+# NO a bullet list will be used.
 
 HTML_ALIGN_MEMBERS     = YES
 
 # If the GENERATE_HTMLHELP tag is set to YES, additional index files 
 # will be generated that can be used as input for tools like the 
 # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
-# of the generated HTML documentation. 
+# of the generated HTML documentation.
 
 GENERATE_HTMLHELP      = NO
 
@@ -577,18 +587,18 @@ GENERATE_CHI           = NO
 BINARY_TOC             = NO
 
 # The TOC_EXPAND flag can be set YES to add extra items for group members 
-# to the contents of the Html help documentation and to the tree view. 
+# to the contents of the Html help documentation and to the tree view.
 
 TOC_EXPAND             = NO
 
 # The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
 # top of each HTML page. The value NO (the default) enables the index and 
-# the value YES disables it. 
+# the value YES disables it.
 
 DISABLE_INDEX          = NO
 
 # This tag can be used to set the number of enum values (range [1..20]) 
-# that doxygen will group on one line in the generated HTML documentation. 
+# that doxygen will group on one line in the generated HTML documentation.
 
 ENUM_VALUES_PER_LINE   = 4
 
@@ -596,13 +606,13 @@ ENUM_VALUES_PER_LINE   = 4
 # generated containing a tree-like index structure (just like the one that 
 # is generated for HTML Help). For this to work a browser that supports 
 # JavaScript and frames is required (for instance Netscape 4.0+ 
-# or Internet explorer 4.0+). 
+# or Internet explorer 4.0+).
 
 GENERATE_TREEVIEW      = NO
 
 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
 # used to set the initial width (in pixels) of the frame in which the tree 
-# is shown. 
+# is shown.
 
 TREEVIEW_WIDTH         = 250
 
@@ -611,57 +621,57 @@ TREEVIEW_WIDTH         = 250
 #---------------------------------------------------------------------------
 
 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
-# generate Latex output. 
+# generate Latex output.
 
 GENERATE_LATEX         = NO
 
 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `latex' will be used as the default path. 
+# put in front of it. If left blank `latex' will be used as the default path.
 
 LATEX_OUTPUT           = latex
 
 # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
 # LaTeX documents. This may be useful for small projects and may help to 
-# save some trees in general. 
+# save some trees in general.
 
 COMPACT_LATEX          = NO
 
 # The PAPER_TYPE tag can be used to set the paper type that is used 
 # by the printer. Possible values are: a4, a4wide, letter, legal and 
-# executive. If left blank a4wide will be used. 
+# executive. If left blank a4wide will be used.
 
 PAPER_TYPE             = letter
 
 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
-# packages that should be included in the LaTeX output. 
+# packages that should be included in the LaTeX output.
 
 EXTRA_PACKAGES         = 
 
 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
 # the generated latex document. The header should contain everything until 
 # the first chapter. If it is left blank doxygen will generate a 
-# standard header. Notice: only use this tag if you know what you are doing! 
+# standard header. Notice: only use this tag if you know what you are doing!
 
 LATEX_HEADER           = 
 
 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
 # is prepared for conversion to pdf (using ps2pdf). The pdf file will 
 # contain links (just like the HTML output) instead of page references 
-# This makes the output suitable for online browsing using a pdf viewer. 
+# This makes the output suitable for online browsing using a pdf viewer.
 
 PDF_HYPERLINKS         = NO
 
 # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
 # plain latex in the generated Makefile. Set this option to YES to get a 
-# higher quality PDF documentation. 
+# higher quality PDF documentation.
 
 USE_PDFLATEX           = NO
 
 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
 # command to the generated LaTeX files. This will instruct LaTeX to keep 
 # running if errors occur, instead of asking the user for help. 
-# This option is also used when generating formulas in HTML. 
+# This option is also used when generating formulas in HTML.
 
 LATEX_BATCHMODE        = NO
 
@@ -677,13 +687,13 @@ GENERATE_RTF           = NO
 
 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `rtf' will be used as the default path. 
+# put in front of it. If left blank `rtf' will be used as the default path.
 
 RTF_OUTPUT             = rtf
 
 # If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
 # RTF documents. This may be useful for small projects and may help to 
-# save some trees in general. 
+# save some trees in general.
 
 COMPACT_RTF            = NO
 
@@ -692,33 +702,38 @@ COMPACT_RTF            = NO
 # contain links (just like the HTML output) instead of page references. 
 # This makes the output suitable for online browsing using a WORD or other. 
 # programs which support those fields. 
-# Note: wordpad (write) and others do not support links. 
+# Note: wordpad (write) and others do not support links.
 
 RTF_HYPERLINKS         = NO
 
 # Load stylesheet definitions from file. Syntax is similar to doxygen's 
 # config file, i.e. a series of assigments. You only have to provide 
-# replacements, missing definitions are set to their default value. 
+# replacements, missing definitions are set to their default value.
 
 RTF_STYLESHEET_FILE    = 
 
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+#+RTF_EXTENSIONS_FILE    =
+
 #---------------------------------------------------------------------------
 # configuration options related to the man page output
 #---------------------------------------------------------------------------
 
 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
-# generate man pages 
+# generate man pages
 
 GENERATE_MAN           = YES
 
 # The MAN_OUTPUT tag is used to specify where the man pages will be put. 
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `man' will be used as the default path. 
+# put in front of it. If left blank `man' will be used as the default path.
 
 MAN_OUTPUT             = man
 
 # The MAN_EXTENSION tag determines the extension that is added to 
-# the generated man pages (default is the subroutine's section .3) 
+# the generated man pages (default is the subroutine's section .3)
 
 MAN_EXTENSION          = .3
 
@@ -728,38 +743,38 @@ MAN_EXTENSION          = .3
 
 # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
 # evaluate all C-preprocessor directives found in the sources and include 
-# files. 
+# files.
 
 ENABLE_PREPROCESSING   = YES
 
 # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
 # names in the source code. If set to NO (the default) only conditional 
 # compilation will be performed. Macro expansion can be done in a controlled 
-# way by setting EXPAND_ONLY_PREDEF to YES. 
+# way by setting EXPAND_ONLY_PREDEF to YES.
 
 MACRO_EXPANSION        = YES
 
 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
 # then the macro expansion is limited to the macros specified with the 
-# PREDEFINED and EXPAND_AS_PREDEFINED tags. 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
 
 EXPAND_ONLY_PREDEF     = NO
 
 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
-# in the INCLUDE_PATH (see below) will be search if a #include is found. 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
 
 SEARCH_INCLUDES        = YES
 
 # The INCLUDE_PATH tag can be used to specify one or more directories that 
 # contain include files that are not input files but should be processed by 
-# the preprocessor. 
+# the preprocessor.
 
 INCLUDE_PATH           = 
 
 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
 # patterns (like *.h and *.hpp) to filter out the header-files in the 
 # directories. If left blank, the patterns specified with FILE_PATTERNS will 
-# be used. 
+# be used.
 
 INCLUDE_FILE_PATTERNS  = 
 
@@ -767,14 +782,14 @@ INCLUDE_FILE_PATTERNS  =
 # are defined before the preprocessor is started (similar to the -D option of 
 # gcc). The argument of the tag is a list of macros of the form: name 
 # or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed. 
+# omitted =1 is assumed.
 
 PREDEFINED             = 
 
 # If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then 
 # this tag can be used to specify a list of macro names that should be expanded. 
 # The macro definition that is found in the sources will be used. 
-# Use the PREDEFINED tag if you want to use a different macro definition. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
 
 EXPAND_AS_DEFINED      = 
 
@@ -782,23 +797,23 @@ EXPAND_AS_DEFINED      =
 # Configuration::addtions related to external references   
 #---------------------------------------------------------------------------
 
-# The TAGFILES tag can be used to specify one or more tagfiles. 
+# The TAGFILES tag can be used to specify one or more tagfiles.
 
-TAGFILES               = 
+TAGFILES               =
 
 # When a file name is specified after GENERATE_TAGFILE, doxygen will create 
-# a tag file that is based on the input files it reads. 
+# a tag file that is based on the input files it reads.
 
-GENERATE_TAGFILE       = 
+GENERATE_TAGFILE       = Doxytags
 
 # If the ALLEXTERNALS tag is set to YES all external classes will be listed 
 # in the class index. If set to NO only the inherited external classes 
-# will be listed. 
+# will be listed.
 
 ALLEXTERNALS           = NO
 
 # The PERL_PATH should be the absolute path and name of the perl script 
-# interpreter (i.e. the result of `which perl'). 
+# interpreter (i.e. the result of `which perl').
 
 PERL_PATH              = /usr/bin/perl
 
@@ -809,7 +824,7 @@ PERL_PATH              = /usr/bin/perl
 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
 # available from the path. This tool is part of Graphviz, a graph visualization 
 # toolkit from AT&T and Lucent Bell Labs. The other options in this section 
-# have no effect if this option is set to NO (the default) 
+# have no effect if this option is set to NO (the default)
 
 HAVE_DOT               = NO
 
@@ -823,30 +838,30 @@ CLASS_GRAPH            = YES
 # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
 # will generate a graph for each documented class showing the direct and 
 # indirect implementation dependencies (inheritance, containment, and 
-# class references variables) of the class with other documented classes. 
+# class references variables) of the class with other documented classes.
 
 COLLABORATION_GRAPH    = YES
 
 # If the ENABLE_PREPROCESSING, INCLUDE_GRAPH, and HAVE_DOT tags are set to 
 # YES then doxygen will generate a graph for each documented file showing 
 # the direct and indirect include dependencies of the file with other 
-# documented files. 
+# documented files.
 
 INCLUDE_GRAPH          = YES
 
 # If the ENABLE_PREPROCESSING, INCLUDED_BY_GRAPH, and HAVE_DOT tags are set to 
 # YES then doxygen will generate a graph for each documented header file showing 
-# the documented files that directly or indirectly include this file 
+# the documented files that directly or indirectly include this file
 
 INCLUDED_BY_GRAPH      = YES
 
 # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
-# will graphical hierarchy of all classes instead of a textual one. 
+# will graphical hierarchy of all classes instead of a textual one.
 
 GRAPHICAL_HIERARCHY    = YES
 
 # The tag DOT_PATH can be used to specify the path where the dot tool can be 
-# found. If left blank, it is assumed the dot tool can be found on the path. 
+# found. If left blank, it is assumed the dot tool can be found on the path.
 
 DOT_PATH               = 
 
@@ -854,7 +869,7 @@ DOT_PATH               =
 # (in pixels) of the graphs generated by dot. If a graph becomes larger than 
 # this value, doxygen will try to truncate the graph, so that it fits within 
 # the specified constraint. Beware that most browsers cannot cope with very 
-# large images. 
+# large images.
 
 MAX_DOT_GRAPH_WIDTH    = 1024
 
@@ -862,19 +877,19 @@ MAX_DOT_GRAPH_WIDTH    = 1024
 # (in pixels) of the graphs generated by dot. If a graph becomes larger than 
 # this value, doxygen will try to truncate the graph, so that it fits within 
 # the specified constraint. Beware that most browsers cannot cope with very 
-# large images. 
+# large images.
 
 MAX_DOT_GRAPH_HEIGHT   = 1024
 
 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
 # generate a legend page explaining the meaning of the various boxes and 
-# arrows in the dot generated graphs. 
+# arrows in the dot generated graphs.
 
 GENERATE_LEGEND        = YES
 
 # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
 # remove the intermedate dot files that are used to generate 
-# the various graphs. 
+# the various graphs.
 
 DOT_CLEANUP            = YES
 
@@ -883,41 +898,41 @@ DOT_CLEANUP            = YES
 #---------------------------------------------------------------------------
 
 # The SEARCHENGINE tag specifies whether or not a search engine should be 
-# used. If set to NO the values of all tags below this one will be ignored. 
+# used. If set to NO the values of all tags below this one will be ignored.
 
 SEARCHENGINE           = NO
 
 # The CGI_NAME tag should be the name of the CGI script that 
 # starts the search engine (doxysearch) with the correct parameters. 
-# A script with this name will be generated by doxygen. 
+# A script with this name will be generated by doxygen.
 
 CGI_NAME               = search.cgi
 
 # The CGI_URL tag should be the absolute URL to the directory where the 
 # cgi binaries are located. See the documentation of your http daemon for 
-# details. 
+# details.
 
 CGI_URL                = 
 
 # The DOC_URL tag should be the absolute URL to the directory where the 
 # documentation is located. If left blank the absolute path to the 
-# documentation, with file:// prepended to it, will be used. 
+# documentation, with file:// prepended to it, will be used.
 
 DOC_URL                = 
 
 # The DOC_ABSPATH tag should be the absolute path to the directory where the 
 # documentation is located. If left blank the directory on the local machine 
-# will be used. 
+# will be used.
 
 DOC_ABSPATH            = 
 
 # The BIN_ABSPATH tag must point to the directory where the doxysearch binary 
-# is installed. 
+# is installed.
 
 BIN_ABSPATH            = /usr/local/bin/
 
 # The EXT_DOC_PATHS tag can be used to specify one or more paths to 
 # documentation generated for other projects. This allows doxysearch to search 
-# the documentation for these projects as well. 
+# the documentation for these projects as well.
 
 EXT_DOC_PATHS          = 
index dd80378..2f67ff0 100644 (file)
@@ -3,7 +3,9 @@
 
 /** \ingroup rpmbuild
  * \file build/buildio.h
- *  XXX this information will move elsewhere eventually
+ * Routines to read and write packages.
+ * @deprecated this information will move elsewhere eventually.
+ * @todo Eliminate, merge into rpmlib.
  */
 
 #include "psm.h"
index 8786c1c..e5f5e79 100644 (file)
@@ -1,13 +1,14 @@
 #ifndef H_DEPENDS
 #define H_DEPENDS
 
-/** \file lib/depends.h
- *
+/** \ingroup rpmdep rpmtrans
+ * \file lib/depends.h
+ * Structures used for dependency checking.
  */
 
 #include <header.h>
 
-/**
+/** \ingroup rpmdep
  * Dependncy ordering information.
  */
 struct tsortInfo {
@@ -23,7 +24,7 @@ struct tsortInfo {
     int                tsi_qcnt;
 } ;
 
-/**
+/** \ingroup rpmdep
  * Info about a single package to be installed.
  */
 struct availablePackage {
@@ -49,7 +50,7 @@ struct availablePackage {
 /*@null@*/ FD_t fd;
 } ;
 
-/**
+/** \ingroup rpmdep
  * A single available item (e.g. a Provides: dependency).
  */
 struct availableIndexEntry {
@@ -61,7 +62,7 @@ struct availableIndexEntry {
     } type;                            /*!< Type of available item. */
 } ;
 
-/**
+/** \ingroup rpmdep
  * Index of all available items.
  */
 struct availableIndex {
@@ -69,7 +70,7 @@ struct availableIndex {
     int size;                          /*!< No. of available items. */
 } ;
 
-/**
+/** \ingroup rpmdep
  * A file to be installed/removed.
  */
 struct fileIndexEntry {
@@ -78,7 +79,7 @@ struct fileIndexEntry {
 /*@dependent@*/ const char * baseName; /*!< File basename. */
 } ;
 
-/**
+/** \ingroup rpmdep
  * A directory to be installed/removed.
  */
 struct dirInfo {
@@ -88,7 +89,7 @@ struct dirInfo {
     int numFiles;                      /*!< No. files in directory. */
 } ;
 
-/**
+/** \ingroup rpmdep
  * Set of available packages, items, and directories.
  */
 struct availableList {
@@ -101,7 +102,7 @@ struct availableList {
 /*@owned@*/ struct dirInfo * dirs;     /*!< Set of directories. */
 } ;
 
-/**
+/** \ingroup rpmdep
  * A single package instance to be installed/removed atomically.
  */
 struct transactionElement {
@@ -118,7 +119,7 @@ struct transactionElement {
     } u;
 } ;
 
-/**
+/** \ingroup rpmdep
  * The set of packages to be installed/removed atomically.
  */
 struct rpmTransactionSet_s {
@@ -151,7 +152,7 @@ struct rpmTransactionSet_s {
     int id;                    /*!< Transaction id. */
 } ;
 
-/**
+/** \ingroup rpmdep
  * Problems encountered while checking dependencies.
  */
 struct problemsSet {
@@ -165,7 +166,7 @@ extern "C" {
 #endif
 
 /* XXX lib/scriptlet.c */
-/**
+/** \ingroup rpmdep
  * Compare package name-version-release from header with dependency, looking
  * for overlap.
  * @deprecated Remove from API when obsoletes is correctly eliminated.
index 26de6d8..baa6e11 100644 (file)
@@ -1,7 +1,8 @@
 #ifndef H_FINGERPRINT
 #define H_FINGERPRINT
 
-/** \file lib/fprint.h
+/** \ingroup rpmtrans
+ * \file lib/fprint.h
  * Identify a file name path by a unique "finger print".
  */
 
index 0983a8e..4357cc9 100644 (file)
--- a/lib/fsm.c
+++ b/lib/fsm.c
@@ -1,6 +1,6 @@
 /** \ingroup payload
  * \file lib/fsm.c
- *  Handle payloads within rpm packages.
+ * File state machine to handle a payload from a package.
  */
 
 #include "system.h"
index e8e1b0f..34b82cb 100644 (file)
--- a/lib/fsm.h
+++ b/lib/fsm.h
@@ -1,7 +1,9 @@
 #ifndef H_FSM
 #define H_FSM
 
-/** \file lib/fsm.h
+/** \ingroup payload
+ * \file lib/fsm.h
+ * File state machine to handle a payload within an rpm package.
  */
 
 #include <rpmlib.h>
index 0cd98e0..48ff9ca 100644 (file)
@@ -1,7 +1,8 @@
 #ifndef H_HASH
 #define H_HASH
 
-/** \file lib/hash.h
+/**
+ * \file lib/hash.h
  * Hash table implemenation.
  */
 
diff --git a/lib/manifest.c b/lib/manifest.c
new file mode 100644 (file)
index 0000000..30345cf
--- /dev/null
@@ -0,0 +1,162 @@
+/** \ingroup rpmcli
+ * \file lib/manifest.c
+ */
+
+#include "system.h"
+
+#include <rpmio_internal.h>
+#include "stringbuf.h"
+#include "manifest.h"
+#include "misc.h"
+#include "debug.h"
+
+/*@access StringBuf @*/
+
+/**
+ * Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
+ * @param this         memory to free
+ * @retval             NULL always
+ */
+static /*@null@*/ void * _free(/*@only@*/ /*@null@*/ const void * this) {
+    if (this)   free((void *)this);
+    return NULL;
+}
+
+char * rpmPermsString(int mode)
+{
+    char *perms = xstrdup("----------");
+   
+    if (S_ISDIR(mode)) 
+       perms[0] = 'd';
+    else if (S_ISLNK(mode))
+       perms[0] = 'l';
+    else if (S_ISFIFO(mode)) 
+       perms[0] = 'p';
+    else if (S_ISSOCK(mode)) 
+       perms[0] = 's';
+    else if (S_ISCHR(mode))
+       perms[0] = 'c';
+    else if (S_ISBLK(mode))
+       perms[0] = 'b';
+
+    /*@-unrecog@*/
+    if (mode & S_IRUSR) perms[1] = 'r';
+    if (mode & S_IWUSR) perms[2] = 'w';
+    if (mode & S_IXUSR) perms[3] = 'x';
+    if (mode & S_IRGRP) perms[4] = 'r';
+    if (mode & S_IWGRP) perms[5] = 'w';
+    if (mode & S_IXGRP) perms[6] = 'x';
+
+    if (mode & S_IROTH) perms[7] = 'r';
+    if (mode & S_IWOTH) perms[8] = 'w';
+    if (mode & S_IXOTH) perms[9] = 'x';
+
+    if (mode & S_ISUID)
+       perms[3] = ((mode & S_IXUSR) ? 's' : 'S'); 
+
+    if (mode & S_ISGID)
+       perms[6] = ((mode & S_IXGRP) ? 's' : 'S'); 
+
+    if (mode & S_ISVTX)
+       perms[9] = ((mode & S_IXOTH) ? 't' : 'T');
+    /*@=unrecog@*/
+
+    return perms;
+}
+
+/**@todo Infinite loops through manifest files exist, operator error for now. */
+int rpmReadPackageManifest(FD_t fd, int * argcPtr, const char *** argvPtr)
+{
+    StringBuf sb = newStringBuf();
+    char * s, *se;
+    int ac = 0;
+    const char ** av = NULL;
+    int argc = (argcPtr ? *argcPtr : 0);
+    const char ** argv = (argvPtr ? *argvPtr : NULL);
+    int rc = 0;
+    int i;
+
+    while (1) {
+       char line[BUFSIZ];
+
+       /* Read next line. */
+       s = fgets(line, sizeof(line) - 1, fdGetFp(fd));
+       if (s == NULL) {
+           /* XXX Ferror check needed */
+           break;
+       }
+
+       /* Skip comments. */
+       if ((se = strchr(s, '#')) != NULL) *se = '\0';
+
+       /* Trim white space. */
+       se = s + strlen(s);
+       while (se > s && (se[-1] == '\n' || se[-1] == '\r'))
+           *(--se) = '\0';
+       while (*s && strchr(" \f\n\r\t\v", *s) != NULL)
+           s++;
+       if (*s == '\0') continue;
+
+       /* Insure that file contains only ASCII */
+       if (*s < 32) {
+           rc = 1;
+           goto exit;
+       }
+
+       /* Concatenate next line in buffer. */
+       *se++ = ' ';
+       *se = '\0';
+       appendStringBuf(sb, s);
+    }
+
+    if (s == NULL)             /* XXX always true */
+       s = getStringBuf(sb);
+
+    if (!(s && *s)) {
+       rc = 1;
+       goto exit;
+    }
+
+    /* Glob manifest items. */
+    rc = rpmGlob(s, &ac, &av);
+    if (rc) goto exit;
+
+    /* Find 1st existing unprocessed arg. */
+    for (i = 0; i < argc; i++)
+       if (argv && argv[i]) break;
+
+    /* Concatenate existing unprocessed args after manifest contents. */
+    if (argv && i < argc) {
+       int nac = ac + (argc - i);
+       const char ** nav = xcalloc((nac + 1), sizeof(*nav));
+
+       if (ac)
+           memcpy(nav, av, ac * sizeof(*nav));
+       if ((argc - i) > 0)
+           memcpy(nav + ac, argv + i, (argc - i) * sizeof(*nav));
+       nav[nac] = NULL;
+
+       *argvPtr = argv = _free(argv);
+       av = _free(av);
+       av = nav;
+       ac = nac;
+    }
+
+    /* Save new argc/argv list. */
+    if (argvPtr) {
+       *argvPtr = _free(*argvPtr);
+       *argvPtr = av;
+    }
+    if (argcPtr)
+       *argcPtr = ac;
+
+exit:
+    if (argvPtr == NULL || (rc != 0 && av)) {
+       for (i = 0; i < ac; i++)
+           av[i] = _free(av[i]);
+       av = _free(av);
+    }
+    freeStringBuf(sb);
+    return rc;
+}
diff --git a/lib/manifest.h b/lib/manifest.h
new file mode 100644 (file)
index 0000000..15371a8
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef H_MANIFEST
+#define H_MANIFEST
+
+/**
+ * \file lib/manifest.h
+ * Routines to expand a manifest containing glob expressions into an argv list.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Return ls(1)-like formatted mode string.
+ * @param mode         file mode
+ * @return             (malloc'd) formatted mode string
+ */
+char * rpmPermsString(int mode);
+
+/**
+ * Read manifest, glob items, and append to existing args.
+ * @param fd                   manifest file handle
+ * @retval argcPtr             no. of args
+ * @retval argvPtr             args themselves
+ */
+int rpmReadPackageManifest(FD_t fd, int * argcPtr, const char *** argvPtr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_MANIFEST */
index 8415c77..bfa2e64 100644 (file)
--- a/lib/md5.h
+++ b/lib/md5.h
@@ -1,7 +1,8 @@
 #ifndef MD5_H
 #define MD5_H
 
-/** \file lib/md5.h
+/**
+ * \file lib/md5.h
  * @todo Eliminate, use rpmio version instead.
  */
 
index f481edb..8f443f0 100644 (file)
@@ -1,7 +1,8 @@
 #ifndef H_MISC
 #define H_MISC
 
-/** \file lib/misc.h
+/**
+ * \file lib/misc.h
  *
  */
 
index cce86cb..5eb925a 100644 (file)
@@ -1,7 +1,8 @@
 #ifndef _H_OLDRPMDB
 #define _H_OLDRPMDB
 
-/** \file lib/oldrpmdb.h
+/**
+ * \file lib/oldrpmdb.h
  *
  */
 
index 2b55fbb..5825465 100644 (file)
--- a/lib/psm.c
+++ b/lib/psm.c
@@ -1,5 +1,6 @@
 /** \ingroup rpmtrans payload
  * \file lib/psm.c
+ * Package state machine to handle a package from a transaction set.
  */
 
 #include "system.h"
index f39c18f..d04c365 100644 (file)
--- a/lib/psm.h
+++ b/lib/psm.h
@@ -1,7 +1,9 @@
 #ifndef H_PSM
 #define H_PSM
 
-/** \file lib/psm.h
+/** \ingroup rpmtrans payload
+ * \file lib/psm.h
+ * Package state machine to handle a package from a transaction set.
  */
 
 #include <rpmlib.h>
index d94e550..cf3b414 100644 (file)
@@ -542,7 +542,7 @@ restart:
 
            /* Try to read a package manifest. */
            fd = Fopen(fileURL, "r.fpio");
-           if (Ferror(fd)) {
+           if (fd == NULL || Ferror(fd)) {
                rpmError(RPMERR_OPEN, _("open of %s failed: %s\n"), fileURL,
                        Fstrerror(fd));
                if (fd) Fclose(fd);
@@ -553,8 +553,8 @@ restart:
            /* Read list of packages from manifest. */
            retcode = rpmReadPackageManifest(fd, &ac, &av);
            if (retcode) {
-               rpmError(RPMERR_QUERY, _("%s: Fread failed: %s\n"), fileURL,
-                       Fstrerror(fd));
+               rpmError(RPMERR_MANIFEST, _("%s: read manifest failed: %s\n"),
+                       fileURL, Fstrerror(fd));
                retcode = 1;
            }
            Fclose(fd);
index 9954bc4..9beead9 100644 (file)
@@ -3,7 +3,7 @@
 
 /** \ingroup rpmdb dbi db1 db3
  * \file lib/rpmdb.h
- * Access RPM indices using Berkeley db[123] interface.
+ * Access RPM indices using Berkeley DB interface(s).
  */
 
 #include <rpmlib.h>
index 7d881b0..351b3d9 100644 (file)
@@ -8,6 +8,7 @@
 #include <rpmmacro.h>
 #include <rpmurl.h>
 
+#include "manifest.h"
 #include "misc.h"
 #include "debug.h"
 
@@ -87,8 +88,8 @@ static void printHash(const unsigned long amount, const unsigned long total)
 
 /**
  */
-static void * showProgress(const void * arg, const rpmCallbackType what, 
-                          const unsigned long amount, 
+static void * showProgress(const void * arg, const rpmCallbackType what,
+                          const unsigned long amount,
                           const unsigned long total,
                           const void * pkgKey, void * data)
 {
@@ -130,7 +131,7 @@ static void * showProgress(const void * arg, const rpmCallbackType what,
 #endif
            fflush(stdout);
        } else {
-           s = headerSprintf(h, "%{NAME}-%{VERSION}-%{RELEASE}", 
+           s = headerSprintf(h, "%{NAME}-%{VERSION}-%{RELEASE}",
                                  rpmTagTable, rpmHeaderFormats, NULL);
            fprintf(stdout, "%s\n", s);
            fflush(stdout);
@@ -185,266 +186,297 @@ static void * showProgress(const void * arg, const rpmCallbackType what,
 
 /** @todo Generalize --freshen policies. */
 int rpmInstall(const char * rootdir, const char ** fileArgv,
-               rpmtransFlags transFlags, 
+               rpmtransFlags transFlags,
                rpmInstallInterfaceFlags interfaceFlags,
-               rpmprobFilterFlags probFilter, 
+               rpmprobFilterFlags probFilter,
                rpmRelocation * relocations)
 {
+    rpmTransactionSet ts = NULL;
+    int notifyFlags = interfaceFlags | (rpmIsVerbose() ? INSTALL_LABEL : 0 );
     rpmdb db = NULL;
-    FD_t fd;
-    int i;
-    int mode, rc, major;
     const char ** pkgURL = NULL;
-    const char ** tmppkgURL = NULL;
-    const char ** fileURL;
-    int numPkgs;
-    int numTmpPkgs = 0, numRPMS = 0, numSRPMS = 0;
+    char * pkgState = NULL;
+    const char ** fnp;
+    const char * fileURL = NULL;
+    int numPkgs = 0;
+    int numRPMS = 0;
+    int numSRPMS = 0;
     int numFailed = 0;
-    Header h;
-    int isSource;
-    rpmTransactionSet ts = NULL;
-    int numConflicts;
     int stopInstall = 0;
-    int notifyFlags = interfaceFlags | (rpmIsVerbose() ? INSTALL_LABEL : 0 );
     int dbIsOpen = 0;
-    const char ** sourceURL;
-    rpmRelocation * defaultReloc;
-
-    if (transFlags & RPMTRANS_FLAG_TEST) 
-       mode = O_RDONLY;
-    else
-       mode = O_RDWR | O_CREAT;        /* XXX can't O_EXCL */
+    rpmRelocation * defaultReloc = relocations;
+    const char ** sourceURL = NULL;
+    int prevx;
+    int pkgx;
+    const char ** argv = NULL;
+    int argc = 0;
+    const char ** av = NULL;
+    int ac = 0;
+    Header h;
+    FD_t fd;
+    int rc;
+    int i;
 
-    for (defaultReloc = relocations; defaultReloc && defaultReloc->oldPath;
-        defaultReloc++);
+    while (defaultReloc && defaultReloc->oldPath)
+       defaultReloc++;
     if (defaultReloc && !defaultReloc->newPath) defaultReloc = NULL;
 
-    rpmMessage(RPMMESS_DEBUG, _("counting packages to install\n"));
-    for (fileURL = fileArgv, numPkgs = 0; *fileURL; fileURL++, numPkgs++)
-       ;
-
-    rpmMessage(RPMMESS_DEBUG, _("found %d packages\n"), numPkgs);
+    /* Build fully globbed list of arguments in argv[argc]. */
+    for (fnp = fileArgv; *fnp; fnp++) {
+       av = _free(av);
+       ac = 0;
+       rc = rpmGlob(*fnp, &ac, &av);
+       if (rc || ac == 0) continue;
 
-    pkgURL = xcalloc( (numPkgs + 1), sizeof(*pkgURL) );
-    tmppkgURL = xcalloc( (numPkgs + 1), sizeof(*tmppkgURL) );
+       if (argc == 0)
+           argv = xmalloc((argc+2) * sizeof(*argv));
+       else
+           argv = xrealloc(argv, (argc+2) * sizeof(*argv));
+       memcpy(argv+argc, av, ac * sizeof(*av));
+       argc += ac;
+       argv[argc] = NULL;
+    }
+    av = _free(av);
+
+    numPkgs = 0;
+    prevx = 0;
+    pkgx = 0;
+
+restart:
+    /* Allocate sufficient storage for next set of args. */
+    if (pkgx >= numPkgs) {
+       numPkgs = pkgx + argc;
+       pkgURL = (pkgURL == NULL)
+           ? xmalloc( (numPkgs + 1) * sizeof(*pkgURL))
+           : xrealloc(pkgURL, (numPkgs + 1) * sizeof(*pkgURL));
+       memset(pkgURL + pkgx, 0, ((argc + 1) * sizeof(*pkgURL)));
+       pkgState = (pkgState == NULL)
+           ? xmalloc( (numPkgs + 1) * sizeof(*pkgState))
+           : xrealloc(pkgState, (numPkgs + 1) * sizeof(*pkgState));
+       memset(pkgState + pkgx, 0, ((argc + 1) * sizeof(*pkgState)));
+    }
 
-    rpmMessage(RPMMESS_DEBUG, _("looking for packages to download\n"));
-    for (fileURL = fileArgv, i = 0; *fileURL; fileURL++) {
+    /* Retrieve next set of args, cache on local storage. */
+    for (i = 0; i < argc; i++) {
+       fileURL = _free(fileURL);
+       fileURL = argv[i];
+       argv[i] = NULL;
 
-       switch (urlIsURL(*fileURL)) {
+       switch (urlIsURL(fileURL)) {
        case URL_IS_FTP:
        case URL_IS_HTTP:
-       {   int myrc;
-           int j;
-           const char *tfn;
-           int argc = 0;
-           const char ** argv = NULL;
-
-           myrc = rpmGlob(*fileURL, &argc, &argv);
-           if (myrc) {
-               rpmMessage(RPMMESS_ERROR, 
-                       _("skipping %s - rpmGlob failed(%d)\n"),
-                       *fileURL, myrc);
-               numFailed++;
-               pkgURL[i] = NULL;
-               break;
-           }
-           if (argc > 1) {
-               numPkgs += argc - 1;
-               pkgURL = xrealloc(pkgURL, (numPkgs + 1) * sizeof(*pkgURL));
-               tmppkgURL = xrealloc(tmppkgURL, (numPkgs + 1) * sizeof(*tmppkgURL));
-           }
-
-           for (j = 0; j < argc; j++) {
-
-               if (rpmIsVerbose())
-                   fprintf(stdout, _("Retrieving %s\n"), argv[j]);
+       {   const char *tfn;
 
-               {   char tfnbuf[64];
-                   strcpy(tfnbuf, "rpm-xfer.XXXXXX");
-                   /*@-unrecog@*/ mktemp(tfnbuf) /*@=unrecog@*/;
-                   tfn = rpmGenPath(rootdir, "%{_tmppath}/", tfnbuf);
-               }
+           if (rpmIsVerbose())
+               fprintf(stdout, _("Retrieving %s\n"), fileURL);
 
-               /* XXX undefined %{name}/%{version}/%{release} here */
-               /* XXX %{_tmpdir} does not exist */
-               rpmMessage(RPMMESS_DEBUG, _(" ... as %s\n"), tfn);
-               myrc = urlGetFile(argv[j], tfn);
-               if (myrc < 0) {
-                   rpmMessage(RPMMESS_ERROR, 
-                       _("skipping %s - transfer failed - %s\n"), 
-                       argv[j], ftpStrerror(myrc));
-                   numFailed++;
-                   pkgURL[i] = NULL;
-                   tfn = _free(tfn);
-               } else {
-                   tmppkgURL[numTmpPkgs++] = pkgURL[i++] = tfn;
-               }
+           {   char tfnbuf[64];
+               strcpy(tfnbuf, "rpm-xfer.XXXXXX");
+               /*@-unrecog@*/ mktemp(tfnbuf) /*@=unrecog@*/;
+               tfn = rpmGenPath(rootdir, "%{_tmppath}/", tfnbuf);
            }
-           if (argv) {
-               for (j = 0; j < argc; j++)
-                   argv[j] = _free(argv[j]);
-               argv = _free(argv);
+
+           /* XXX undefined %{name}/%{version}/%{release} here */
+           /* XXX %{_tmpdir} does not exist */
+           rpmMessage(RPMMESS_DEBUG, _(" ... as %s\n"), tfn);
+           rc = urlGetFile(fileURL, tfn);
+           if (rc < 0) {
+               rpmMessage(RPMMESS_ERROR,
+                       _("skipping %s - transfer failed - %s\n"),
+                       fileURL, ftpStrerror(rc));
+               numFailed++;
+               pkgURL[pkgx] = NULL;
+               tfn = _free(tfn);
+               break;
            }
+           pkgState[pkgx] = 1;
+           pkgURL[pkgx] = tfn;
+           pkgx++;
        }   break;
        case URL_IS_PATH:
        default:
-           pkgURL[i++] = *fileURL;
+           pkgURL[pkgx] = fileURL;
+           fileURL = NULL;
+           pkgx++;
            break;
        }
     }
-    pkgURL[i] = NULL;
-    tmppkgURL[numTmpPkgs] = NULL;
-
-    sourceURL = alloca(sizeof(*sourceURL) * i);
+    fileURL = _free(fileURL);
 
-    rpmMessage(RPMMESS_DEBUG, _("retrieved %d packages\n"), numTmpPkgs);
+    if (numFailed) goto exit;
 
-    if (numFailed) goto errxit;
-
-    /**
-     * Build up the transaction set. As a special case, v1 source packages
-     * are installed right here, only because they don't have headers and
-     * would create all sorts of confusion later.
-     */
-    for (fileURL = pkgURL; *fileURL; fileURL++) {
+    /* Continue processing file arguments, building transaction set. */
+    for (fnp = pkgURL+prevx; *fnp; fnp++, prevx++) {
        const char * fileName;
        rpmRC rpmrc;
+       int isSource;
+
+       rpmMessage(RPMMESS_DEBUG, "============== %s\n", *fnp);
+       (void) urlPath(*fnp, &fileName);
 
-       (void) urlPath(*fileURL, &fileName);
-       fd = Fopen(*fileURL, "r.ufdio");
+       /* Try to read the header from a package file. */
+       fd = Fopen(*fnp, "r.ufdio");
        if (fd == NULL || Ferror(fd)) {
-           rpmMessage(RPMMESS_ERROR, _("cannot open file %s: %s\n"),
-                               *fileURL, Fstrerror(fd));
+           rpmError(RPMERR_OPEN, _("open of %s failed: %s\n"), *fnp,
+                       Fstrerror(fd));
            if (fd) Fclose(fd);
-           numFailed++;
-           pkgURL[i] = NULL;
+           numFailed++; *fnp = NULL;
            continue;
        }
 
-       rpmrc = rpmReadPackageHeader(fd, &h, &isSource, &major, NULL);
+       rpmrc = rpmReadPackageHeader(fd, &h, &isSource, NULL, NULL);
+       Fclose(fd);
 
-       switch (rpmrc) {
-       case RPMRC_BADMAGIC:
-           Fclose(fd);
-           rpmMessage(RPMMESS_ERROR, 
-                       _("%s does not appear to be a RPM package\n"), 
-                       *fileURL);
-           numFailed++;
-           pkgURL[i] = NULL;
-           break;
-       case RPMRC_FAIL:
-       case RPMRC_SHORTREAD:
-       default:
-           rpmMessage(RPMMESS_ERROR, _("%s cannot be installed\n"), *fileURL);
-           numFailed++;
-           pkgURL[i] = NULL;
-           break;
-       case RPMRC_BADSIZE:
-       case RPMRC_OK:
-           if (isSource) {
-               sourceURL[numSRPMS++] = fileName;
-               Fclose(fd);
-           } else {
-               if (!dbIsOpen) {
-                   if (rpmdbOpen(rootdir, &db, mode, 0644)) {
-                       const char *dn;
-                       dn = rpmGetPath( (rootdir ? rootdir : ""), 
+       if (rpmrc == RPMRC_FAIL || rpmrc == RPMRC_SHORTREAD) {
+           numFailed++; *fnp = NULL;
+           continue;
+       }
+       if ((rpmrc == RPMRC_OK || rpmrc == RPMRC_BADSIZE) && isSource) {
+           rpmMessage(RPMMESS_DEBUG, "\tadded source rpm[%d]\n", numSRPMS);
+               sourceURL = (sourceURL == NULL)
+                   ? xmalloc( (numSRPMS + 2) * sizeof(*sourceURL))
+                   : xrealloc(sourceURL, (numSRPMS + 2) * sizeof(*sourceURL));
+           sourceURL[numSRPMS++] = *fnp;
+           *fnp = NULL;
+           continue;
+       }
+       if (rpmrc == RPMRC_OK || rpmrc == RPMRC_BADSIZE) {
+           if (!dbIsOpen) {
+               int mode = (transFlags & RPMTRANS_FLAG_TEST)
+                               ? O_RDONLY : (O_RDWR | O_CREAT);
+
+               if (rpmdbOpen(rootdir, &db, mode, 0644)) {
+                   const char *dn;
+                   dn = rpmGetPath( (rootdir ? rootdir : ""),
                                        "%{_dbpath}", NULL);
-                       rpmMessage(RPMMESS_ERROR, 
+                   rpmMessage(RPMMESS_ERROR,
                                _("cannot open Packages database in %s\n"), dn);
-                       dn = _free(dn);
-                       numFailed++;
-                       pkgURL[i] = NULL;
-                       break;
-                   }
-                   ts = rpmtransCreateSet(db, rootdir);
-                   dbIsOpen = 1;
+                   dn = _free(dn);
+                   numFailed++; *fnp = NULL;
+                   break;
                }
+               ts = rpmtransCreateSet(db, rootdir);
+               dbIsOpen = 1;
+           }
 
-               if (defaultReloc) {
-                   const char ** paths;
-                   int c;
+           if (defaultReloc) {
+               const char ** paths;
+               int pft;
+               int c;
 
-                   if (headerGetEntry(h, RPMTAG_PREFIXES, NULL,
+               if (headerGetEntry(h, RPMTAG_PREFIXES, &pft,
                                       (void **) &paths, &c) && (c == 1)) {
-                       defaultReloc->oldPath = xstrdup(paths[0]);
-                       paths = _free(paths);
-                   } else {
-                       const char * name;
-                       headerNVR(h, &name, NULL, NULL);
-                       rpmMessage(RPMMESS_ERROR, 
+                   defaultReloc->oldPath = xstrdup(paths[0]);
+                   paths = headerFreeData(paths, pft);
+               } else {
+                   const char * name;
+                   headerNVR(h, &name, NULL, NULL);
+                   rpmMessage(RPMMESS_ERROR,
                               _("package %s is not relocateable\n"), name);
-
-                       goto errxit;
-                       /*@notreached@*/
-                   }
+                   numFailed++;
+                   goto exit;
+                   /*@notreached@*/
                }
+           }
 
-               /* On --freshen, verify package is installed and newer */
-               if (interfaceFlags & INSTALL_FRESHEN) {
-                   rpmdbMatchIterator mi;
-                   const char * name;
-                   Header oldH;
-                   int count;
-
-                   headerNVR(h, &name, NULL, NULL);
-                   mi = rpmdbInitIterator(db, RPMTAG_NAME, name, 0);
-                   count = rpmdbGetIteratorCount(mi);
-                   while ((oldH = rpmdbNextIterator(mi)) != NULL) {
-                       if (rpmVersionCompare(oldH, h) < 0)
-                           continue;
-                       /* same or newer package already installed */
-                       count = 0;
-                       break;
-                   }
-                   rpmdbFreeIterator(mi);
-                   if (count == 0) {
-                       headerFree(h);
-                       Fclose(fd);
-                       break;  /* XXX out of switch */
-                   }
-                   /* Package is newer than those currently installed. */
+           /* On --freshen, verify package is installed and newer */
+           if (interfaceFlags & INSTALL_FRESHEN) {
+               rpmdbMatchIterator mi;
+               const char * name;
+               Header oldH;
+               int count;
+
+               headerNVR(h, &name, NULL, NULL);
+               mi = rpmdbInitIterator(db, RPMTAG_NAME, name, 0);
+               count = rpmdbGetIteratorCount(mi);
+               while ((oldH = rpmdbNextIterator(mi)) != NULL) {
+                   if (rpmVersionCompare(oldH, h) < 0)
+                       continue;
+                   /* same or newer package already installed */
+                   count = 0;
+                   break;
+               }
+               rpmdbFreeIterator(mi);
+               if (count == 0) {
+                   headerFree(h);
+                   continue;
+                   break;      /* XXX out of switch */
                }
+               /* Package is newer than those currently installed. */
+           }
 
-               rc = rpmtransAddPackage(ts, h, NULL, fileName,
+           rc = rpmtransAddPackage(ts, h, NULL, fileName,
                               (interfaceFlags & INSTALL_UPGRADE) != 0,
                               relocations);
+           headerFree(h);      /* XXX reference held by transaction set */
+           if (defaultReloc)
+               defaultReloc->oldPath = _free(defaultReloc->oldPath);
 
-               headerFree(h);  /* XXX reference held by transaction set */
-               Fclose(fd);
-
-               switch(rc) {
-               case 0:
-                       break;
-               case 1:
-                       rpmMessage(RPMMESS_ERROR, 
-                           _("error reading from file %s\n"), *fileURL);
-                       goto errxit;
-                       /*@notreached@*/ break;
-               case 2:
-                       rpmMessage(RPMMESS_ERROR, 
+           switch(rc) {
+           case 0:
+               rpmMessage(RPMMESS_DEBUG, "\tadded binary rpm[%d]\n", numRPMS);
+               break;
+           case 1:
+               rpmMessage(RPMMESS_ERROR,
+                           _("error reading from file %s\n"), *fnp);
+               numFailed++;
+               goto exit;
+               /*@notreached@*/ break;
+           case 2:
+               rpmMessage(RPMMESS_ERROR,
                            _("file %s requires a newer version of RPM\n"),
-                           *fileURL);
-                       goto errxit;
-                       /*@notreached@*/ break;
-               }
+                           *fnp);
+               numFailed++;
+               goto exit;
+               /*@notreached@*/ break;
+           }
 
-               defaultReloc->oldPath = _free(defaultReloc->oldPath);
+           numRPMS++;
+           continue;
+       }
 
-               numRPMS++;
-           }
+       if (rpmrc != RPMRC_BADMAGIC) {
+           rpmMessage(RPMMESS_ERROR, _("%s cannot be installed\n"), *fnp);
+           numFailed++; *fnp = NULL;
            break;
        }
+
+       /* Try to read a package manifest. */
+       fd = Fopen(*fnp, "r.fpio");
+       if (fd == NULL || Ferror(fd)) {
+           rpmError(RPMERR_OPEN, _("open of %s failed: %s\n"), *fnp,
+                       Fstrerror(fd));
+           if (fd) Fclose(fd);
+           numFailed++; *fnp = NULL;
+           break;
+       }
+
+       /* Read list of packages from manifest. */
+       rc = rpmReadPackageManifest(fd, &argc, &argv);
+       if (rc)
+           rpmError(RPMERR_MANIFEST, _("%s: read manifest failed: %s\n"),
+                       fileURL, Fstrerror(fd));
+       Fclose(fd);
+
+       /* If successful, restart the query loop. */
+       if (rc == 0) {
+           prevx++;
+           goto restart;
+       }
+
+       numFailed++; *fnp = NULL;
+       break;
     }
 
-    rpmMessage(RPMMESS_DEBUG, _("found %d source and %d binary packages\n"), 
+    rpmMessage(RPMMESS_DEBUG, _("found %d source and %d binary packages\n"),
                numSRPMS, numRPMS);
 
-    if (numFailed) goto errxit;
+    if (numFailed) goto exit;
 
     if (numRPMS && !(interfaceFlags & INSTALL_NODEPS)) {
        struct rpmDependencyConflict * conflicts;
+       int numConflicts;
+
        if (rpmdepCheck(ts, &conflicts, &numConflicts)) {
            numFailed = numPkgs;
            stopInstall = 1;
@@ -473,7 +505,7 @@ int rpmInstall(const char * rootdir, const char ** fileArgv,
        packagesTotal = numRPMS;
 #endif
        rpmMessage(RPMMESS_DEBUG, _("installing binary packages\n"));
-       rc = rpmRunTransactions(ts, showProgress, (void *) ((long)notifyFlags), 
+       rc = rpmRunTransactions(ts, showProgress, (void *) ((long)notifyFlags),
                                    NULL, &probs, transFlags, probFilter);
 
        if (rc < 0) {
@@ -486,13 +518,11 @@ int rpmInstall(const char * rootdir, const char ** fileArgv,
        if (probs) rpmProblemSetFree(probs);
     }
 
-    if (numRPMS && ts) rpmtransFree(ts);
-
     if (numSRPMS && !stopInstall) {
        for (i = 0; i < numSRPMS; i++) {
            fd = Fopen(sourceURL[i], "r.ufdio");
            if (fd == NULL || Ferror(fd)) {
-               rpmMessage(RPMMESS_ERROR, _("cannot open file %s: %s\n"), 
+               rpmMessage(RPMMESS_ERROR, _("cannot open file %s: %s\n"),
                           sourceURL[i], Fstrerror(fd));
                if (fd) Fclose(fd);
                continue;
@@ -508,33 +538,21 @@ int rpmInstall(const char * rootdir, const char ** fileArgv,
        }
     }
 
-    for (i = 0; i < numTmpPkgs; i++) {
-       Unlink(tmppkgURL[i]);
-       tmppkgURL[i] = _free(tmppkgURL[i]);
+exit:
+    if (ts) rpmtransFree(ts);
+    for (i = 0; i < numPkgs; i++) {
+       if (pkgState[i] == 1)
+           Unlink(pkgURL[i]);
+       pkgURL[i] = _free(pkgURL[i]);
     }
-    tmppkgURL = _free(tmppkgURL);
+    pkgState = _free(pkgState);
     pkgURL = _free(pkgURL);
-
-    /* FIXME how do we close our various fd's? */
-
     if (dbIsOpen) rpmdbClose(db);
-
     return numFailed;
-
-errxit:
-    if (numRPMS && ts) rpmtransFree(ts);
-    if (tmppkgURL) {
-       for (i = 0; i < numTmpPkgs; i++)
-           tmppkgURL[i] = _free(tmppkgURL[i]);
-       tmppkgURL = _free(tmppkgURL);
-    }
-    pkgURL = _free(pkgURL);
-    if (dbIsOpen) rpmdbClose(db);
-    return numPkgs;
 }
 
 int rpmErase(const char * rootdir, const char ** argv,
-               rpmtransFlags transFlags, 
+               rpmtransFlags transFlags,
                rpmEraseInterfaceFlags interfaceFlags)
 {
     rpmdb db;
@@ -549,7 +567,7 @@ int rpmErase(const char * rootdir, const char ** argv,
     int numPackages = 0;
     rpmProblemSet probs;
 
-    if (transFlags & RPMTRANS_FLAG_TEST) 
+    if (transFlags & RPMTRANS_FLAG_TEST)
        mode = O_RDONLY;
     else
        mode = O_RDWR | O_EXCL;
index c04312e..4ed9d62 100644 (file)
@@ -3,7 +3,7 @@
 
 /** \ingroup lead
  * \file lib/rpmlead.h
- *
+ * Routines to read and write an rpm lead structure for a a package.
  */
 
 #include <rpmlib.h>
index db3d711..53c160f 100644 (file)
@@ -1,8 +1,8 @@
 #ifndef H_RPMLIB
 #define        H_RPMLIB
 
-/** \file lib/rpmlib.h
- * \ingroup rpmcli rpmrc rpmdep rpmtrans rpmdb lead signature header payload dbi
+/** \ingroup rpmcli rpmrc rpmdep rpmtrans rpmdb lead signature header payload dbi
+ * \file lib/rpmlib.h
  *
  */
 
index 95474cb..cc48fac 100644 (file)
@@ -5,21 +5,44 @@
  *
  */
 
+/**
+ */
 typedef /*@abstract@*/ struct StringBufRec *StringBuf;
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+/**
+ */
 /*@only@*/ StringBuf newStringBuf(void);
+
+/**
+ */
 void freeStringBuf( /*@only@*/ StringBuf sb);
+
+/**
+ */
 void truncStringBuf(StringBuf sb);
+
+/**
+ */
 /*@observer@*/ char *getStringBuf(StringBuf sb);
+
+/**
+ */
 void stripTrailingBlanksStringBuf(StringBuf sb);
 
+/**
+ */
 #define appendStringBuf(sb, s)     appendStringBufAux(sb, s, 0)
+
+/**
+ */
 #define appendLineStringBuf(sb, s) appendStringBufAux(sb, s, 1)
 
+/**
+ */
 void appendStringBufAux(StringBuf sb, const char *s, int nl);
 
 #ifdef __cplusplus
index b6b786e..9411a5c 100644 (file)
--- a/macros.in
+++ b/macros.in
@@ -1,7 +1,7 @@
-#/*! \page mconfig Current default macro definitions
+#/*! \page config_macros Default configuration: /usr/lib/rpm/macros
 # \verbatim
 #
-# $Id: macros.in,v 1.73 2001/03/17 19:55:09 jbj Exp $
+# $Id: macros.in,v 1.74 2001/04/10 12:36:45 jbj Exp $
 #
 # This is a global RPM configuration file. All changes made here will
 # be lost when the rpm package is upgraded. Any per-system configuration
index e03991b..d3f4955 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-03-23 10:10-0500\n"
+"POT-Creation-Date: 2001-04-04 13:52-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1861,7 +1861,7 @@ msgstr ""
 msgid "Could not open %s: %s\n"
 msgstr ""
 
-#: build/pack.c:489 lib/psm.c:1447
+#: build/pack.c:489 lib/psm.c:1448
 #, c-format
 msgid "Unable to write package: %s\n"
 msgstr ""
@@ -1891,7 +1891,7 @@ msgstr ""
 msgid "Unable to write payload to %s: %s\n"
 msgstr ""
 
-#: build/pack.c:571 lib/psm.c:1683
+#: build/pack.c:571 lib/psm.c:1684
 #, c-format
 msgid "Wrote: %s\n"
 msgstr ""
@@ -2487,7 +2487,7 @@ msgid ""
 msgstr ""
 
 #: lib/formats.c:28 lib/formats.c:54 lib/formats.c:83 lib/formats.c:124
-#: lib/header.c:2597 lib/header.c:2614 lib/header.c:2634
+#: lib/header.c:2625 lib/header.c:2642 lib/header.c:2662
 msgid "(not a number)"
 msgstr ""
 
@@ -2529,32 +2529,32 @@ msgstr ""
 msgid "%9d %s\n"
 msgstr ""
 
-#: lib/fsm.c:1041
+#: lib/fsm.c:1040
 #, c-format
 msgid "%s directory created with perms %04o.\n"
 msgstr ""
 
-#: lib/fsm.c:1343 lib/fsm.c:1460
+#: lib/fsm.c:1342 lib/fsm.c:1459
 #, c-format
 msgid "%s saved as %s\n"
 msgstr ""
 
-#: lib/fsm.c:1485
+#: lib/fsm.c:1484
 #, c-format
 msgid "%s rmdir of %s failed: Directory not empty\n"
 msgstr ""
 
-#: lib/fsm.c:1490
+#: lib/fsm.c:1489
 #, c-format
 msgid "%s rmdir of %s failed: %s\n"
 msgstr ""
 
-#: lib/fsm.c:1499
+#: lib/fsm.c:1498
 #, c-format
 msgid "%s unlink of %s failed: %s\n"
 msgstr ""
 
-#: lib/fsm.c:1516
+#: lib/fsm.c:1515
 #, c-format
 msgid "%s created as %s\n"
 msgstr ""
@@ -2564,92 +2564,92 @@ msgstr ""
 msgid "dataLength() RPM_STRING_TYPE count must be 1.\n"
 msgstr ""
 
-#: lib/header.c:207 lib/header.c:1082 lib/psm.c:377
+#: lib/header.c:207 lib/header.c:1110 lib/psm.c:378
 #, c-format
 msgid "Data type %d not supported\n"
 msgstr ""
 
-#: lib/header.c:1505
+#: lib/header.c:1533
 #, c-format
 msgid "Bad count for headerAddEntry(): %d\n"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:1950
+#: lib/header.c:1978
 #, c-format
 msgid "missing { after %"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:1980
+#: lib/header.c:2008
 msgid "missing } after %{"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:1994
+#: lib/header.c:2022
 msgid "empty tag format"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2006
+#: lib/header.c:2034
 msgid "empty tag name"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2023
+#: lib/header.c:2051
 msgid "unknown tag"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2050
+#: lib/header.c:2078
 msgid "] expected at end of array"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2068
+#: lib/header.c:2096
 msgid "unexpected ]"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2072
+#: lib/header.c:2100
 msgid "unexpected }"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2132
+#: lib/header.c:2160
 msgid "? expected in expression"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2141
+#: lib/header.c:2169
 msgid "{ expected after ? in expression"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2154 lib/header.c:2195
+#: lib/header.c:2182 lib/header.c:2223
 msgid "} expected in expression"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2164
+#: lib/header.c:2192
 msgid ": expected following ? subexpression"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2180
+#: lib/header.c:2208
 msgid "{ expected after : in expression"
 msgstr ""
 
 #. @-observertrans@
-#: lib/header.c:2205
+#: lib/header.c:2233
 msgid "| expected at end of expression"
 msgstr ""
 
-#: lib/header.c:2376
+#: lib/header.c:2404
 msgid "(unknown type)"
 msgstr ""
 
-#: lib/misc.c:328 lib/misc.c:333 lib/misc.c:339
+#: lib/misc.c:338 lib/misc.c:343 lib/misc.c:349
 #, c-format
 msgid "error creating temporary file %s\n"
 msgstr ""
@@ -2932,64 +2932,64 @@ msgstr ""
 msgid "unknown error %d encountered while manipulating package %s"
 msgstr ""
 
-#: lib/psm.c:564
+#: lib/psm.c:565
 #, c-format
 msgid "cannot create %s %s\n"
 msgstr ""
 
-#: lib/psm.c:570
+#: lib/psm.c:571
 #, c-format
 msgid "cannot write to %s\n"
 msgstr ""
 
-#: lib/psm.c:604
+#: lib/psm.c:605
 msgid "source package expected, binary found\n"
 msgstr ""
 
-#: lib/psm.c:706
+#: lib/psm.c:707
 msgid "source package contains no .spec file\n"
 msgstr ""
 
-#: lib/psm.c:954
+#: lib/psm.c:955
 #, c-format
 msgid "execution of %s scriptlet from %s-%s-%s failed, waitpid returned %s\n"
 msgstr ""
 
-#: lib/psm.c:961
+#: lib/psm.c:962
 #, c-format
 msgid "execution of %s scriptlet from %s-%s-%s failed, exit status %d\n"
 msgstr ""
 
-#: lib/psm.c:1265
+#: lib/psm.c:1266
 #, c-format
 msgid "%s: %s-%s-%s has %d files, test = %d\n"
 msgstr ""
 
-#: lib/psm.c:1378
+#: lib/psm.c:1379
 #, c-format
 msgid "%s: %s scriptlet failed (%d), skipping %s-%s-%s\n"
 msgstr ""
 
-#: lib/psm.c:1484
+#: lib/psm.c:1485
 #, c-format
 msgid "user %s does not exist - using root\n"
 msgstr ""
 
-#: lib/psm.c:1493
+#: lib/psm.c:1494
 #, c-format
 msgid "group %s does not exist - using root\n"
 msgstr ""
 
-#: lib/psm.c:1522
+#: lib/psm.c:1523
 #, c-format
 msgid "unpacking of archive failed%s%s: %s\n"
 msgstr ""
 
-#: lib/psm.c:1523
+#: lib/psm.c:1524
 msgid " on file "
 msgstr ""
 
-#: lib/psm.c:1774
+#: lib/psm.c:1775
 #, c-format
 msgid "%s: running %s script(s) (if any)\n"
 msgstr ""
@@ -3037,7 +3037,7 @@ msgstr ""
 msgid "can't query %s: %s\n"
 msgstr ""
 
-#: lib/query.c:514 lib/query.c:546
+#: lib/query.c:514 lib/query.c:546 lib/rpminstall.c:320 lib/rpminstall.c:447
 #, c-format
 msgid "open of %s failed: %s\n"
 msgstr ""
@@ -3051,9 +3051,9 @@ msgstr ""
 msgid "old format source packages cannot be queried\n"
 msgstr ""
 
-#: lib/query.c:556 lib/rpmchecksig.c:87
+#: lib/query.c:556 lib/rpminstall.c:457
 #, c-format
-msgid "%s: Fread failed: %s\n"
+msgid "%s: read manifest failed: %s\n"
 msgstr ""
 
 #: lib/query.c:599
@@ -3110,7 +3110,7 @@ msgstr ""
 msgid "record %d could not be read\n"
 msgstr ""
 
-#: lib/query.c:744 lib/rpminstall.c:566
+#: lib/query.c:744 lib/rpminstall.c:591
 #, c-format
 msgid "package %s is not installed\n"
 msgstr ""
@@ -3129,6 +3129,11 @@ msgstr ""
 msgid "%s: Fwrite failed: %s\n"
 msgstr ""
 
+#: lib/rpmchecksig.c:87
+#, c-format
+msgid "%s: Fread failed: %s\n"
+msgstr ""
+
 #: lib/rpmchecksig.c:121 lib/rpmchecksig.c:253
 #, c-format
 msgid "%s: readLead failed\n"
@@ -3341,122 +3346,94 @@ msgstr ""
 msgid "failed to remove directory %s: %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:149
+#: lib/rpminstall.c:162
 msgid "Preparing..."
 msgstr ""
 
-#: lib/rpminstall.c:151
+#: lib/rpminstall.c:164
 msgid "Preparing packages for installation..."
 msgstr ""
 
-#: lib/rpminstall.c:210
-msgid "counting packages to install\n"
-msgstr ""
-
-#: lib/rpminstall.c:214
-#, c-format
-msgid "found %d packages\n"
-msgstr ""
-
-#: lib/rpminstall.c:219
-msgid "looking for packages to download\n"
-msgstr ""
-
-#: lib/rpminstall.c:234
-#, c-format
-msgid "skipping %s - rpmGlob failed(%d)\n"
-msgstr ""
-
-#: lib/rpminstall.c:249
+#: lib/rpminstall.c:271
 #, c-format
 msgid "Retrieving %s\n"
 msgstr ""
 
 #. XXX undefined %{name}/%{version}/%{release} here
 #. XXX %{_tmpdir} does not exist
-#: lib/rpminstall.c:259
+#: lib/rpminstall.c:281
 #, c-format
 msgid " ... as %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:263
+#: lib/rpminstall.c:285
 #, c-format
 msgid "skipping %s - transfer failed - %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:290
-#, c-format
-msgid "retrieved %d packages\n"
-msgstr ""
-
-#: lib/rpminstall.c:306 lib/rpminstall.c:487
-#, c-format
-msgid "cannot open file %s: %s\n"
-msgstr ""
-
-#: lib/rpminstall.c:320
-#, c-format
-msgid "%s does not appear to be a RPM package\n"
-msgstr ""
-
-#: lib/rpminstall.c:328 lib/rpminstall.c:634
-#, c-format
-msgid "%s cannot be installed\n"
-msgstr ""
-
-#: lib/rpminstall.c:344
+#: lib/rpminstall.c:353
 #, c-format
 msgid "cannot open Packages database in %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:366
+#: lib/rpminstall.c:375
 #, c-format
 msgid "package %s is not relocateable\n"
 msgstr ""
 
-#: lib/rpminstall.c:411
+#: lib/rpminstall.c:421
 #, c-format
 msgid "error reading from file %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:416
+#: lib/rpminstall.c:427
 #, c-format
 msgid "file %s requires a newer version of RPM\n"
 msgstr ""
 
-#: lib/rpminstall.c:433
+#: lib/rpminstall.c:439 lib/rpminstall.c:659
+#, c-format
+msgid "%s cannot be installed\n"
+msgstr ""
+
+#: lib/rpminstall.c:471
 #, c-format
 msgid "found %d source and %d binary packages\n"
 msgstr ""
 
-#: lib/rpminstall.c:446
+#: lib/rpminstall.c:486
 msgid "failed dependencies:\n"
 msgstr ""
 
-#: lib/rpminstall.c:467
+#: lib/rpminstall.c:507
 msgid "installing binary packages\n"
 msgstr ""
 
-#: lib/rpminstall.c:553
+#: lib/rpminstall.c:525
+#, c-format
+msgid "cannot open file %s: %s\n"
+msgstr ""
+
+#: lib/rpminstall.c:578
 #, c-format
 msgid "cannot open %s/packages.rpm\n"
 msgstr ""
 
-#: lib/rpminstall.c:569
+#: lib/rpminstall.c:594
 #, c-format
 msgid "\"%s\" specifies multiple packages\n"
 msgstr ""
 
-#: lib/rpminstall.c:592
+#: lib/rpminstall.c:617
 msgid "removing these packages would break dependencies:\n"
 msgstr ""
 
-#: lib/rpminstall.c:621
+#: lib/rpminstall.c:646
 #, c-format
 msgid "cannot open %s: %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:627
+#: lib/rpminstall.c:652
 #, c-format
 msgid "Installing %s\n"
 msgstr ""
@@ -3679,48 +3656,48 @@ msgstr ""
 msgid "You must set \"%%_pgp_name\" in your macro file\n"
 msgstr ""
 
-#: lib/transaction.c:404
+#: lib/transaction.c:420
 msgid "========== relocations\n"
 msgstr ""
 
-#: lib/transaction.c:407
+#: lib/transaction.c:423
 #, c-format
 msgid "%5d exclude  %s\n"
 msgstr ""
 
-#: lib/transaction.c:410
+#: lib/transaction.c:426
 #, c-format
 msgid "%5d relocate %s -> %s\n"
 msgstr ""
 
-#: lib/transaction.c:484
+#: lib/transaction.c:495
 #, c-format
 msgid "excluding multilib path %s%s\n"
 msgstr ""
 
-#: lib/transaction.c:533
+#: lib/transaction.c:557
 #, c-format
 msgid "excluding %s %s\n"
 msgstr ""
 
-#: lib/transaction.c:540
+#: lib/transaction.c:567
 #, c-format
 msgid "relocating %s to %s\n"
 msgstr ""
 
-#: lib/transaction.c:612
+#: lib/transaction.c:642
 #, c-format
 msgid "relocating directory %s to %s\n"
 msgstr ""
 
-#: lib/transaction.c:617
+#: lib/transaction.c:771
 #, c-format
-msgid "excluding directory %s\n"
+msgid "%s skipped due to missingok flag\n"
 msgstr ""
 
-#: lib/transaction.c:741
+#: lib/transaction.c:1359
 #, c-format
-msgid "%s skipped due to missingok flag\n"
+msgid "excluding directory %s\n"
 msgstr ""
 
 #: lib/verify.c:61
@@ -3731,20 +3708,20 @@ msgstr ""
 msgid "do not execute %verifyscript (if any)"
 msgstr ""
 
-#: lib/verify.c:253
+#: lib/verify.c:257
 msgid "package lacks both user name and id lists (this should never happen)\n"
 msgstr ""
 
-#: lib/verify.c:271
+#: lib/verify.c:275
 msgid "package lacks both group name and id lists (this should never happen)\n"
 msgstr ""
 
-#: lib/verify.c:344
+#: lib/verify.c:348
 #, c-format
 msgid "missing    %s"
 msgstr ""
 
-#: lib/verify.c:425
+#: lib/verify.c:429
 #, c-format
 msgid "Unsatisfied dependencies for %s-%s-%s: "
 msgstr ""
index 954ad3b..714cc46 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef H_HASH
 #define H_HASH
 
+/** \ingroup python
+ * \file python/hash.h 
+ */
+
 struct hash_table;
 typedef struct hash_table * hashTable;
 
index 8eda49f..57b47e3 100644 (file)
@@ -78,16 +78,17 @@ typedef enum rpmerrCode_e {
     RPMERR_QFMT                = _em(125), /*!< */
     RPMERR_DBCONFIG    = _em(126), /*!< */
     RPMERR_DBERR       = _em(127), /*!< */
-    RPMERR_BADPACKAGE  = _em(128), /*!< */
-    RPMERR_FREELIST    = _em(129), /*!< */
-    RPMERR_DATATYPE    = _em(130), /*!< */
+    RPMERR_BADPACKAGE  = _em(128), /*!< getNextHeader: %s */
+    RPMERR_FREELIST    = _em(129), /*!< free list corrupt (%u)- please ... */
+    RPMERR_DATATYPE    = _em(130), /*!< Data type %d not supported */
     RPMERR_BUILDROOT   = _em(131), /*!< */
-    RPMERR_MAKETEMP    = _em(132), /*!< */
-    RPMERR_FWRITE      = _em(133), /*!< */
-    RPMERR_FREAD       = _em(134), /*!< */
-    RPMERR_READLEAD    = _em(135), /*!< */
-    RPMERR_WRITELEAD   = _em(136), /*!< */
+    RPMERR_MAKETEMP    = _em(132), /*!< makeTempFile failed */
+    RPMERR_FWRITE      = _em(133), /*!< %s: Fwrite failed: %s */
+    RPMERR_FREAD       = _em(134), /*!< %s: Fread failed: %s */
+    RPMERR_READLEAD    = _em(135), /*!< %s: readLead failed */
+    RPMERR_WRITELEAD   = _em(136), /*!< %s: writeLead failed: %s */
     RPMERR_QUERYINFO   = _en(137), /*!< */
+    RPMERR_MANIFEST    = _en(138), /*!< %s: read manifest failed: %s */
 
     RPMERR_BADSIGTYPE  = _em(200), /*!< Unknown signature type */
     RPMERR_SIGGEN      = _em(201), /*!< Error generating signature */
index bbf568e..b259c35 100644 (file)
@@ -4,7 +4,7 @@
 /** \ingroup rpmio
  * \file rpmio/rpmlog.h
  * Yet Another syslog(3) API clone.
- * Used by rpm to unify rpmError() and rpmMessage().
+ * Used to unify rpmError() and rpmMessage() interfaces in rpm.
  */
 
 #include <stdarg.h>
index f42308b..3473598 100644 (file)
@@ -1,3 +1,5 @@
+#/*! \page config_rpmpopt Default configuration: /usr/lib/rpm/rpmpopt-@VERSION@
+# \verbatim
 #
 # This file *should not be modified*. Local customizations
 # belong in /etc/popt, not here. This file will be replaced
@@ -279,3 +281,6 @@ rpmv        alias --ftpport         --define '_ftpport !#:+'
 rpmv   alias --ftpproxy        --define '_ftpproxy !#:+'
 rpmv   alias --httpport        --define '_httpport !#:+'
 rpmv   alias --httpproxy       --define '_httpproxy !#:+'
+
+# \endverbatim
+#*/
index c89af95..fbe17a4 100644 (file)
--- a/rpmrc.in
+++ b/rpmrc.in
@@ -1,4 +1,7 @@
-# $Id: rpmrc.in,v 2.34 2001/02/27 21:30:27 jbj Exp $
+#/*! \page config_rpmrc Default configuration: /usr/lib/rpm/rpmrc
+# \verbatim
+#
+# $Id: rpmrc.in,v 2.35 2001/04/10 12:36:45 jbj Exp $
 #
 # This is a global RPM configuration file. All changes made here will
 # be lost when the rpm package is upgraded. Any per-system configuration
@@ -294,3 +297,5 @@ buildarch_compat: s390: noarch
 
 macrofiles:    @RPMCONFIGDIR@/macros:@RPMCONFIGDIR@/%{_target}/macros:@SYSCONFIGDIR@/macros.specspo:@SYSCONFIGDIR@/macros.db1:@SYSCONFIGDIR@/macros:@SYSCONFIGDIR@/%{_target}/macros:~/.rpmmacros
 
+# \endverbatim
+#*/