Rip out rpmrc configuration.
authorjbj <devnull@localhost>
Sun, 27 Aug 2000 19:43:51 +0000 (19:43 +0000)
committerjbj <devnull@localhost>
Sun, 27 Aug 2000 19:43:51 +0000 (19:43 +0000)
CVS patchset: 4134
CVS date: 2000/08/27 19:43:51

Doxyfile.in
Doxyheader [new file with mode: 0644]
INSTALL
Makefile.am
acconfig.h
build.c
configure.in
lib/rpmrc.c
po/rpm.pot
rpm.spec
scripts/Makefile.in

index e6589d4..bc99b28 100644 (file)
-# Doxyfile 1.0.0
+# Doxyfile 1.2.1
 
 # This file describes the settings to be used by doxygen for a project
 #
 # All text after a hash (#) is considered a comment and will be ignored
 # The format is:
 #       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
 # Values that contain spaces should be placed between quotes (" ")
 
 #---------------------------------------------------------------------------
 # General configuration options
 #---------------------------------------------------------------------------
 
-# The PROJECT_NAME tag is a single word (or a sequence of word surrounded
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
 # by quotes) that should identify the project. 
 
-PROJECT_NAME         = @PACKAGE@
+PROJECT_NAME           = @PACKAGE@
 
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER       = @VERSION@
+PROJECT_NUMBER         = @VERSION@
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
 # If a relative path is entered, it will be relative to the location 
 # where doxygen was started. If left blank the current directory will be used.
 
-OUTPUT_DIRECTORY     = doxygen
+OUTPUT_DIRECTORY       = doxygen
 
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# 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 and Japanese
+# Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, 
+# Spanish, Russian, Croatian, Polish, and Portuguese.
 
-OUTPUT_LANGUAGE      = English
+OUTPUT_LANGUAGE        = English
 
-# 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.
+# 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 
 
-QUIET                = NO
+EXTRACT_ALL            = YES
 
-# 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.
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation. 
 
-WARNINGS             = YES
+EXTRACT_PRIVATE        = YES
 
-# 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.
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation. 
 
-DISABLE_INDEX        = NO
+EXTRACT_STATIC         = YES
 
-# If the EXTRACT_ALL tag is set to YES all classes and functions will be
-# included in the documentation, even if no documentation was available.
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# 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. 
 
-EXTRACT_ALL          = YES
+HIDE_UNDOC_MEMBERS     = NO
 
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
+# 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. 
 
-EXTRACT_PRIVATE      = NO
+HIDE_UNDOC_CLASSES     = NO
 
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members inside documented classes or files.
+# 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. 
 
-HIDE_UNDOC_MEMBERS   = NO
+BRIEF_MEMBER_DESC      = YES
 
-# If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all
-# undocumented classes.
+# 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. 
 
-HIDE_UNDOC_CLASSES   = NO
+REPEAT_BRIEF           = YES
 
-# 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.
+# 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. 
 
-BRIEF_MEMBER_DESC    = YES
+ALWAYS_DETAILED_SEC    = NO
 
-# 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.
+# 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. 
 
-REPEAT_BRIEF         = YES
+FULL_PATH_NAMES        = YES
 
-# If the ALWAYS_DETAILS_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.
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. It is allowed to use relative paths in the argument list.
 
-ALWAYS_DETAILED_SEC  = NO
+STRIP_FROM_PATH        = @TOP_SOURCEDIR@/
 
-# 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.
+# 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. 
 
-FULL_PATH_NAMES      = YES
+INTERNAL_DOCS          = NO
 
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path.
+# 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. 
 
-STRIP_FROM_PATH      = @TOP_SOURCEDIR@/
+CLASS_DIAGRAMS         = YES
 
-# 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.
+# 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. 
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# 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. 
+
+STRIP_CODE_COMMENTS    = YES
 
-INTERNAL_DOCS        = NO
+# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen 
+# will only generate file names in lower case letters. If set to 
+# YES upper case letters are also allowed. This is useful if you have 
+# classes or files whose names only differ in case and if your file system 
+# supports case sensitive file names. 
 
-# 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.
+CASE_SENSE_NAMES       = YES
 
-CLASS_DIAGRAMS       = YES
+# 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. 
 
-# 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.
+HIDE_SCOPE_NAMES       = NO
 
-SOURCE_BROWSER       = YES
+# 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. 
 
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
+VERBATIM_HEADERS       = YES
 
-INLINE_SOURCES       = NO
+# 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. 
 
-# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen
-# will only generate file names in lower case letters. If set to
-# YES upper case letters are also allowed. This is useful if you have
-# classes or files whose names only differ in case and if your file system
-# supports case sensitive file names.
+SHOW_INCLUDE_FILES     = YES
 
-CASE_SENSE_NAMES     = NO
+# If the JAVADOC_AUTOBRIEF tag is set to YES (the default) 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-style will 
+# behave just like the Qt-style comments. 
 
-# 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.
+JAVADOC_AUTOBRIEF      = YES
 
-VERBATIM_HEADERS     = 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. 
 
-# If the JAVADOC_AUTOBRIEF tag is set to YES (the default) 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-style will
-# behave just like the Qt-style comments.
+INHERIT_DOCS           = YES
 
-JAVADOC_AUTOBRIEF    = YES
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members. 
 
-# 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.
+INLINE_INFO            = YES
 
-INHERIT_DOCS         = 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. 
 
-# if the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
+SORT_MEMBER_DOCS       = YES
 
-INLINE_INFO          = YES
+# 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. 
 
-# 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.
+TAB_SIZE               = 8
 
-TAB_SIZE             = 8
+# The ENABLE_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif. 
+
+ENABLED_SECTIONS       = 
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# 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. 
+
+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. 
+
+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. 
+
+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. 
+
+WARN_FORMAT            = "$file:$line: $text"
 
 #---------------------------------------------------------------------------
 # configuration options related to the input files
@@ -174,9 +242,10 @@ TAB_SIZE             = 8
 # 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                = \
+INPUT                  = \
+       ./Doxyheader \
        ./build.c \
        ./build.h \
        ./config.h \
@@ -208,6 +277,7 @@ INPUT                = \
        ./lib/cpio.c \
        ./lib/cpio.h \
        ./lib/db1.c \
+       ./lib/db2.c \
        ./lib/db3.c \
        ./lib/depends.c \
        ./lib/depends.h \
@@ -233,7 +303,6 @@ INPUT                = \
        ./lib/poptQV.c \
        ./lib/problems.c \
        ./lib/query.c \
-       ./lib/rpm_malloc.h \
        ./lib/rpmchecksig.c \
        ./lib/rpmdb.c \
        ./lib/rpmdb.h \
@@ -259,6 +328,7 @@ INPUT                = \
        ./rpmio/rpmerr.h \
        ./rpmio/rpmio.c \
        ./rpmio/rpmio.h \
+       ./rpmio/rpmio_internal.h \
        ./rpmio/rpmio_api.c \
        ./rpmio/rpmmacro.h \
        ./rpmio/rpmmalloc.c \
@@ -293,286 +363,443 @@ 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
+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.
+# 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. 
 
-RECURSIVE            = NO
+RECURSIVE              = NO
 
-# The EXCLUDE tag can be used to specify files and/or directories that should
+# 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              =
+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.
+# 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. 
 
-EXCLUDE_PATTERNS     =
+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         =
+EXAMPLE_PATH           = @TOP_SOURCEDIR@/doc/manual
 
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# 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     =
+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           =
+IMAGE_PATH             = 
 
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
 # invoke to filter for each input file. Doxygen will invoke the filter program 
-# 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.
+# 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. 
 
-INPUT_FILTER         =
+INPUT_FILTER           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# 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. 
+
+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]) 
+
+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. 
+
+IGNORE_PREFIX          = 
 
 #---------------------------------------------------------------------------
 # configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output
 
-GENERATE_HTML        = YES
+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.
+# 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. 
 
-HTML_OUTPUT          =
+HTML_OUTPUT            = html
 
 # The HTML_HEADER tag can be used to specify a personal HTML header for 
 # each generated HTML page. If it is left blank doxygen will generate a 
 # standard header.
 
-HTML_HEADER          =
+HTML_HEADER            = 
 
 # The HTML_FOOTER tag can be used to specify a personal HTML footer for 
 # each generated HTML page. If it is left blank doxygen will generate a 
 # standard footer.
 
-HTML_FOOTER          =
+HTML_FOOTER            = 
 
-# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# 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
-
-HTML_STYLESHEET      =
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet 
 
-# 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.
+HTML_STYLESHEET        = 
 
-HTML_ALIGN_MEMBERS   = YES
+# 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. 
 
-# 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.
+HTML_ALIGN_MEMBERS     = YES
 
-GENERATE_HTMLHELP    = NO
+# 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. 
 
-# 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.
+GENERATE_HTMLHELP      = NO
 
-ALPHABETICAL_INDEX   = 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. 
 
-# 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])
-
-COLS_IN_ALPHA_INDEX  = 5
+DISABLE_INDEX          = NO
 
 #---------------------------------------------------------------------------
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output. 
 
-GENERATE_LATEX       = NO
+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.
+# 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. 
 
-LATEX_OUTPUT         =
+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.
+# 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. 
 
-COMPACT_LATEX        = NO
+COMPACT_LATEX          = NO
 
-# The PAPER_TYPE tag can be used to set the paper type that is used
+# 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           = a4wide
+PAPER_TYPE             = a4wide
 
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output. 
 
-EXTRA_PACKAGES       =
+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 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. 
+
+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. 
 
-LATEX_HEADER         =
+USE_PDFLATEX           = NO
 
-# 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.
+# 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. 
 
-PDF_HYPERLINKS       = NO
+LATEX_BATCHMODE        = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimised for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+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. 
+
+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. 
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# 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. 
+
+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. 
+
+RTF_STYLESHEET_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
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages 
 
-GENERATE_MAN         = YES
+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.
+# 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. 
 
-MAN_OUTPUT           =
+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 MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3) 
 
-MAN_EXTENSION        = .3
+MAN_EXTENSION          = .3
 
 #---------------------------------------------------------------------------
-# Configuration options related to the preprocessor 
+# configuration options related to the XML output
 #---------------------------------------------------------------------------
 
-# 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.
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation. Warning: This feature 
+# is still experimental and very incomplete.
+
+GENERATE_XML           = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
 
-ENABLE_PREPROCESSING = YES
+# 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. 
 
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+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.
+# compilation will be performed. Macro expansion can be done in a controlled 
+# 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. 
+
+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. 
 
-MACRO_EXPANSION      = YES
+SEARCH_INCLUDES        = YES
 
-# 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.
+# 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. 
 
-SEARCH_INCLUDES      = YES
+INCLUDE_PATH           = 
 
-# 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.
+# 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. 
 
-INCLUDE_PATH         =
+INCLUDE_FILE_PATTERNS  = 
 
-# The PREDEFINED tag can be used to specify one or more macro names that
-# 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
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# 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           =
+PREDEFINED             = 
 
-# 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 tag.
+# 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. 
 
-EXPAND_ONLY_PREDEF   = NO
+EXPAND_AS_DEFINED      = 
 
 #---------------------------------------------------------------------------
-# Configuration options related to external references 
+# Configuration::addtions related to external references   
 #---------------------------------------------------------------------------
 
 # 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. 
+
+GENERATE_TAGFILE       = 
+
+# 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. 
+
+ALLEXTERNALS           = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl'). 
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# 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_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+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. 
+
+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. 
+
+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 
+
+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. 
+
+GRAPHICAL_HIERARCHY    = YES
 
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
+# 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. 
 
-GENERATE_TAGFILE     =
+DOT_PATH               = 
 
-# 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.
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (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. 
 
-ALLEXTERNALS         = NO
+MAX_DOT_GRAPH_WIDTH    = 1024
 
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (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. 
 
-PERL_PATH            = /usr/bin/perl
+MAX_DOT_GRAPH_HEIGHT   = 1024
 
 #---------------------------------------------------------------------------
-# Configuration options related to the search engine 
+# Configuration::addtions related to the search engine   
 #---------------------------------------------------------------------------
 
 # 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
+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.
+# 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. 
 
-CGI_NAME             = search.cgi
+CGI_NAME               = search.cgi
 
-# The CGI_URL tag should be the absolute URL to the directory where the
+# 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              =
+CGI_URL                = 
 
-# The DOC_URL tag should be the absolute URL to the directory where the
+# 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              =
+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.
+# 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. 
 
-DOC_ABSPATH          =
+DOC_ABSPATH            = 
 
-# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
-# is installed.
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary 
+# is installed. 
 
-BIN_ABSPATH          = /usr/local/bin/
+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.
+# documentation generated for other projects. This allows doxysearch to search 
+# the documentation for these projects as well. 
 
-EXT_DOC_PATHS        =
+EXT_DOC_PATHS          = 
diff --git a/Doxyheader b/Doxyheader
new file mode 100644 (file)
index 0000000..2f476c4
--- /dev/null
@@ -0,0 +1,34 @@
+/*! \mainpage RPM API Documentation.
+ */
+/** \defgroup  rpmcli  RPMCLI.
+ */
+/** \defgroup  rpmbuild        RPMBUILD.
+ */
+/** \defgroup  rpmrc   RPMRC.
+ */
+/** \defgroup  rpmdep  RPMDEP.
+ */
+/** \defgroup  rpmtrans        RPMTRANS.
+ */
+/** \defgroup  rpmdb   RPMDB.
+ */
+/** \defgroup  lead    LEAD.
+ */
+/** \defgroup  signature       SIGNATURE.
+ */
+/** \defgroup  header  HEADER.
+ */
+/** \defgroup  payload PAYLOAD.
+ */
+/** \defgroup  dbi     DBI.
+ */
+/** \defgroup  db1     DB1.
+ */
+/** \defgroup  db2     DB2.
+ */
+/** \defgroup  db3     DB3.
+ */
+/** \defgroup  rpmio   RPMIO.
+ */
+/** \defgroup  popt    POPT.
+ */
diff --git a/INSTALL b/INSTALL
index 71f6d76..539cfbc 100644 (file)
--- a/INSTALL
+++ b/INSTALL
-
-
 To build RPM you will need several other packages:
 --------------------------------------------------
 
+The zlib library for compression support. You might also need/want
+the zip executable for java jar dependency analysis. All available from
+    ftp://ftp.freesoftware.com/pub/infozip/zlib/
 
-The zlib library for compression support available from
-       http://www.cdrom.com/pub/infozip/zlib/
-
-The berkeley db library db.1.85, or db.2* (currently the latest is
-db-2.6.4) with compatibility mode for db.1.85 defined.  The developers
-of RPM did not upgrade RPM to use the current version of libdb because
-they are uncomfortable with changes in the softwares license.  Now db2
-has a special exception license within glibc-2.1 so whatever license
-discomfort there is/was is quickly becoming moot.  The remaining issue
-is that the db_185 compatibility does not work in glibc-2.1.  This is
-available from
-       http://www.sleepycat.com/download.html.
-
-The instructions for building db-2.6.4:
-
-       cd build_unix 
-       ../dist/configure --enable-compat185
-       make
-       make install
+The Berkeley db1 and db3 libraries. These are available from
+    http://www.sleepycat.com.
 
+Minimal instructions for building db3 are (see a Red Hat dbN package
+spac file for more conmplete details)
+    cd build_unix 
+    ../dist/configure --enable-compat185
+    make
+    make install
 
 It may be desired to install bzip2 and gzip so that RPM can use these
 formats.  Gzip, is necessary to build packages that contain compressed
 tar balls, these are quite common on the Internet.
 These are availible from
-       http://www.digistar.com/bzip2/index.html
-       http://www.gnu.org/
-
-If National Language Support (NLS) is desired 
-you will need gnu gettext available from
-       http://www.gnu.org/
-
-If you need support of RPM 1.x databases, which are in an old RPM
-format. You will need the GNU db library gdbm to build the rpmconvert
-binary. This is availible from :
-       http://www.gnu.org/
+    http://www.digistar.com/bzip2/index.html
+    http://sources.redhat.com/bzip2/
 
 For best results you should compile with GCC and GNU Make.  Users have
-reported difficulty with other build tools.  available from
-       http://www.gnu.org/
+reported difficulty with other build tools (any patches to lift these
+dependencies are welcome). Both GCC and GNU Make available from 
+    http://www.gnu.org/
+
+If National Language Support (NLS) is desired you will need gnu
+gettext (currently this is required to build rpm but we hope to 
+lift this requirement soon), available from 
+    http://www.gnu.org/
+
+If you are going to hack the sources (or compile from anonymous cvs
+retrevial) you will need most of the GNU development tools including:
+autoconf, automake, gettext, libtool, makeinfo, perl, GNU m4, GNU tar
+available from 
+    http://www.gnu.org/
+
+If you plan on using cryptographic signatures you will need a version
+of GPG.
+
+Since Red Hat 6.1 uses gnupg for signing packages, previous releases were
+signed with pgp-2.6.3. Pgp5 can be used instead of pgp-2.6.3 signatures iff
+RSA signature's are used.
+
+These can be downloaded (for US citizens) from:
+    http://web.mit.edu/network/pgp.html
+    http://www.gnu.org/
+    http://www.pgpi.com/
+
+Note: rpm-4.0 on Red Hat 7.0 is currently using
+    zlib-1.1.3
+    db1-1.85
+    db3-3.1.14
+    bzip2-1.0.1
+    gnupg-1.0.2
+You may use the tarballs within those packagese, and examine the patches and
+spec files for details about how to build the libraries needed by rpm.
 
 
 To compile RPM:
 --------------
 
-If your libraries are in a standard place you will need to change
-the configure environment.
+RPM uses a small shell script to run: libtool, autoconf,
+automake. This step should not be necessary if you are running a
+released version of rpm, however if you have gotten the rpm sources
+using anonymous CVS or via anonymous FTP, you should probably regenerate
+intermediate files by re-running the autogen.sh script.
+
+The autogen.sh script checks that the required tools are installed.
+While other versions of the tools may be used, the script checks for
+the same version of the tools that was used at the time the tarball
+was produced. Edit the top of the script to change version numbers if you wish.
+
+The autogen.sh script also runs configure for you and passes the command line
+arguments to configure.  To run it without configure type:
+
+    ./autogen.sh --noconfigure
+
+If your libraries are not in a standard place you will need to change
+configures environment.  These options can be passed directly to
+configure or to autogen.sh which will pass them through to configure.
 
 Here is an example:
-       LIBS='-L/opt/libz/ -L/opt/BerkeleyDB/lib/' \
-       CPPFLAGS='-I/opt/libz/ -I/opt/BerkeleyDB/include' \
-       export LIBS CPPFLAGS
-       ./configure
+    LIBS='-L/opt/libz/ -L/opt/BerkeleyDB/lib/' \
+    CPPFLAGS='-I/opt/libz/ -I/opt/BerkeleyDB/include' \
+    ./configure
+
+If you have build tools stored in non standard places you should check
+the resulting Makefile to be sure that the tools you wish to use have
+been correctly identified.  The configure script will modify your path
+before looking for the build tools and it may find versions of these
+tools that you do not want.  It uses the following search path
+
+    MYPATH="/bin:/usr/bin:/usr/local/bin:$PATH:/opt/gnu/bin"
 
 now build the system with:
 
-       make
+    make
+
+and then install with:
+
+    make install
+
+If you wish to make a tarfile of the binaries so that you may easily
+install on machines with OS package managers other then rpm (ed note:
+what about putting gzip and bzip2 in the tar, modifying the
+/etc/rpmrc?):
+
+    make tar
 
-if you wish to make a tarfile of the binaries so that you may easily
-install on other machines (ed note: what about putting gzip and bzip2
-in the tar, modifying the /etc/rpmrc?):
+when installing. If you do install from a tarball, you will need to do
+something like
 
-       make tar
+    mkdir /var/lib/rpm
+    rpm --initdb
 
-when installing do not forget to init the database (rpm --initdb)
+to initialize your rpm database.
 
+Finally, if you wish to prepare an rpm source tar ball, you should do
+
+    make dist
+
+To package RPM:
+--------------
+
+After RPM has been installed you can run rpm to build an rpm package.
+Edit the rpm.spec file to mirror any special steps you needed to
+follow to make rpm compile and change the specfile to match your
+taste.  You will need to put the rpm source tar file into the
+redhat/SOURCES directory and we suggest putting the specfile in the
+redhat/SPECS directory, then run rpm -ba rpm.spec.  You will end up
+with two rpms which can be found in redhat/RPMS and redhat/SRPMS.
+
+If you are going to install rpm on machines with OS package managers
+other then rpm, you may choose to install the base rpm package via a
+cpio instead of a tar file.  Instead of running "make tar" during the
+build process, as discribed above, use the base rpm packages to create
+a cpio.  After the rpms have been created run rpm2cpio on the base rpm
+package, this will give you a cpio package which can then use to
+install rpm on a new system.
+
+    rpm2cpio rpm-4.0-1.solaris2.6-sparc.rpm > rpm-4.0-1.solaris2.6-sparc.cpio
 
 
 Non Linux Configuration Issues:
@@ -94,25 +167,31 @@ will depend on exactly how you bootstrap RPM onto your system and what
 parts of the sytem you put into packages as well as on the specific OS
 you are using.
 
-You should satisfy dependencies for all shells and interpreters. A
-reasonable list of OS installed shells can be generated with:
+The script vpkg-provides.sh can be used to generate a package which
+will satisfy the dependencies on your system.  To run it you will need
+to create a specfile header for this empty package and run the progam
+with:
 
-   cat /etc/shells
+    --spec_header '/path/to/os-base-header.spec
 
-You should satisfy dependencies for all system libraries. For each of
-the system library directories you should run 
+and if you wish to ensure that some directories are not traversed you
+can use the option: 
 
-   echo * | find-provides.sh
+    --ignore_dirs 'egrep|pattern|of|paths|to|ignore
 
-(On Linux a list of system library directories can be found in
-/etc/ld.so.conf, other OS require an experienced system administrator
-to know where the libraries are.)
+By default the generated rpm will include a %verifyscript to verify
+checksum of all files traversed has not changed.  This additional
+check can be surpressed with:
 
+    --no_verify
 
-You may add as many "provides: " lines as you like to /etc/rpmrc/ but
-they can not be continued.  Each line is limited to 8K bytes. Here is
-a example (truncated) of the provides lines used by one user of
-Digital Unix.
+The result of running the script will be a specfile which will create
+a package continging all the dependencies found on the system.  There
+will be one provides line for each depednecy. The package will contain
+none of the actual OS library files as it is assumed they are already
+on your system and managed by other means.  Here is a example
+(truncated) of the provides lines used by one user of Digital Unix. (I
+have put several provides on the same line for brevity)
 
 provides: /bin/sh /usr/bin/ksh /usr/bin/csh 
 provides: libc.so.osf.1 libm.so.osf.1 libcurses.so.xpg4 libdb.so.osf.1
@@ -121,28 +200,35 @@ provides: libdnet_stub.so.osf.1 libsecurity.so.osf.1 libpthread.so.osf.1
 provides: libexc.so.osf.1 libmach.so.osf.1 libdps.so libdpstk.so 
 
 
+The script vpkg-provides2.sh is underdevelopment as a more advanced
+version of vpkg-provides.sh which is aware of many different unix
+vendor packaging schemes.  It will create one "dependency package" for
+each unix package your OS vendor installed.
+
 
 rpmfilename:
 -----------
 
 If you plan on packaging for more then one OS you may want to edit
-/etc/rpmrc and change the line which has rpmfilename to something
-which include both the %{OS} and %{ARCH}.  This will cause the name of
-the generated rpm files to the operating system name as well as the
-architecture which the rpm runs under.  The line to change looks like:
+/etc/macros or /usr/lib/rpm/macros and change the line which has
+rpmfilename to something which include both the %{_target_os} and
+%{_target_cpu}.  This will cause the name of the generated rpm files
+to the operating system name as well as the architecture which the rpm
+runs under.  The line to change looks like:
 
-> rpmfilename:    %{ARCH}/%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm
+%_rpmfilename           %%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
 
-you may wish to include both the %{OS} and %{ARCH} in the final base
-name, so that it's easier to distinguish between what package is
-appropriate for a particular arch-os-version combo.  We suggest
+you may wish to include both the %{_target_os} and %{_target_cpu} in
+the final base name, so that it's easier to distinguish between what
+package is appropriate for a particular arch-os-version combo.  We
+suggest:
 
-> rpmfilename:    %{ARCH}/%{NAME}-%{VERSION}-%{RELEASE}.%{OS}-%{ARCH}.rpm
+%_rpmfilename           %%{_target_platform/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{_target_platform}.rpm
 
-There is no %{OS_VERSION} tag, so if you need to also distinguish between
-RPMs for certain versions of the OS, you can hard-code the version in
-the rpmrc on the build machine, so that .rpm files are generated with
-the version as part of the filename.
+There is no %{_target_os_version} tag, so if you need to also
+distinguish between RPMs for certain versions of the OS, you can
+hard-code the version in the rpmrc on the build machine, so that .rpm
+files are generated with the version as part of the filename.
 
 For example when one user builds RPMs for Digital Unix 4.0b and 4.0d,
 optimization is important and he will build one set of RPMs for the
@@ -154,10 +240,49 @@ on the particular build machine.
 The "rpmfilename: "tag on one machine (Digital Unix 4.0d, EV56 PWS 433)
 looks like:
 
-rpmfilename: %{OS}/4.0d/%{ARCH}/%{NAME}-%{VERSION}-%{RELEASE}.%{OS}-%{ARCH}-ev56.rpm
+rpmfilename: %{_target_os}/4.0d/%{_target_cpu}/%{name}-%{version}-%{release}.%{_target_os}-%{_target_cpu}ev56.rpm
 
 For package `foo-1.1', at build time that would translate into:
 
-       osf1/4.0d/alpha/foo-1.1-1.osf1-alphaev56.rpm
+    osf1/4.0d/alpha/foo-1.1-1.osf1-alphaev56.rpm
+
+The hyphen between the %{_target_cpu} and ev56 is left out for compatibility
+with GNU Config.guess and because `alphaev56' looks more "normal" to
+people with an alpha than alpha-ev56 for someone on an Intel Pentium
+Pro would want `i586pro' over `i586-pro', but it does make parsing
+this filename by other programs a bit more difficult.
+
+
+GPG/PGP/PGP5
+------------
+
+To use the signing features of rpm, you will need to configure certain
+rpm macros.
+
+Here's what I use for gpg:
+
+    /etc/rpm/macros for per-system (or ~/.rpmmacros for per-user) configuration
+       %_signature     gpg
+       %_gpg_name      Jeff Johnson (ARS N3NPQ) <jbj@redhat.com>
+       %_gpg_path      /home/devel/jbj/.gnupg
+
+Here's what I use for pgp2.6:
+
+    /etc/rpm/macros for per-system (or ~/.rpmmacros for per-user) configuration
+       %_signature     pgp
+       %_pgpbin        /usr/bin/pgp
+       %_pgp_name      Jeff Johnson <jbj@redhat.com>
+       %_pgp_path      /home/jbj/.pgp
+
+In order to use pgp5, you will need to change:
+
+       %_signature     pgp5
+       %_pgpbin        /path/to/pgp5/binary
+       %_pgp_path      /path/to/pgp5/keyring
 
+(Note: Only one of pgp and pgp5 may be used because of name conflicts.)
 
+You may also need Red Hat GPG/PGP public keys. These can be found in the
+rpm source tarball, in /usr/doc/rpm*, or form http://www.redhat.com. In
+order to verify a package signed by Red Hat you will need to import these
+keys onto you key ring. See the GPG/PGP documentation for how to do this.
index c27c515..af87d3b 100644 (file)
@@ -51,31 +51,31 @@ rpm_LDFLAGS =               @LDFLAGS_STATIC@ $(myLDFLAGS)
 rpm_LDADD =            $(myLDADD) @LIBMISC@
 
 rpmb_SOURCES =         build.c
-rpmb_LDFLAGS =         $(myLDFLAGS)
+rpmb_LDFLAGS =         @LDFLAGS_STATIC@ $(myLDFLAGS)
 rpmb_LDADD =           rpmb.o $(myLDADD)
 rpmb.o:        rpmqv.c
        $(COMPILE) -DIAM_RPMBT -o $@ -c $<
 
 rpmdb_SOURCES =
-rpmdb_LDFLAGS =                $(myLDFLAGS)
+rpmdb_LDFLAGS =                @LDFLAGS_STATIC@ $(myLDFLAGS)
 rpmdb_LDADD =          rpmdb.o $(myLDADD)
 rpmdb.o:       rpmqv.c
        $(COMPILE) -DIAM_RPMDB -o $@ -c $<
 
 rpmi_SOURCES =
-rpmi_LDFLAGS =         $(myLDFLAGS)
+rpmi_LDFLAGS =         @LDFLAGS_STATIC@ $(myLDFLAGS)
 rpmi_LDADD =           rpmi.o $(myLDADD)
 rpmi.o:        rpmqv.c
        $(COMPILE) -DIAM_RPMEIU -o $@ -c $<
 
 rpmk_SOURCES =
-rpmk_LDFLAGS =         $(myLDFLAGS)
+rpmk_LDFLAGS =         @LDFLAGS_STATIC@ $(myLDFLAGS)
 rpmk_LDADD =           rpmk.o $(myLDADD)
 rpmk.o:        rpmqv.c
        $(COMPILE) -DIAM_RPMK -o $@ -c $<
 
 rpmq_SOURCES =
-rpmq_LDFLAGS =         $(myLDFLAGS)
+rpmq_LDFLAGS =         @LDFLAGS_STATIC@ $(myLDFLAGS)
 rpmq_LDADD =           rpmq.o $(myLDADD)
 rpmq.o:        rpmqv.c
        $(COMPILE) -DIAM_RPMQV -o $@ -c $<
index 32e92af..6dac639 100644 (file)
 /* Full path to rpmpopt configuration file (usually /usr/lib/rpm/rpmpopt) */
 #undef LIBRPMALIAS_FILENAME
 
-/* Full path to rpmrc configuration file (usually /usr/lib/rpm/rpmrc) */
-#undef LIBRPMRC_FILENAME
-
-/* Full path to macros configuration file (usually /usr/lib/rpm/macros) */
+/* Colon separated paths of macro files to read. */
 #undef MACROFILES
 
 /* statfs in <sys/statvfs.h> (for solaris 2.6+ systems) */
diff --git a/build.c b/build.c
index b2ffdda..bce60d4 100644 (file)
--- a/build.c
+++ b/build.c
@@ -99,8 +99,6 @@ static int buildForTarget(const char *arg, struct rpmBuildArguments *ba,
     Spec spec = NULL;
     int rc;
 
-    rpmSetTables(RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS);
-
     if (ba->buildRootOverride)
        buildRootURL = rpmGenPath(NULL, ba->buildRootOverride, NULL);
 
index f0daa96..5c02e17 100644 (file)
@@ -911,12 +911,15 @@ AC_SUBST(LIBDIR)
 RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
 AC_DEFINE_UNQUOTED(RPMCONFIGDIR, "$RPMCONFIGDIR")
 AC_SUBST(RPMCONFIGDIR)
+
 SYSCONFIGDIR="`echo /etc/rpm`"
 AC_DEFINE_UNQUOTED(SYSCONFIGDIR, "$SYSCONFIGDIR")
 AC_SUBST(SYSCONFIGDIR)
-LIBRPMRC_FILENAME="${RPMCONFIGDIR}/rpmrc"
-AC_DEFINE_UNQUOTED(LIBRPMRC_FILENAME, "$LIBRPMRC_FILENAME")
-AC_SUBST(LIBRPMRC_FILENAME)
+
+MACROFILES="${RPMCONFIGDIR}/macros:${RPMCONFIGDIR}/%{_target}/macros:${SYSCONFIGDIR}/macros:${SYSCONFIGDIR}/macros.specspo:${SYSCONFIGDIR}/%{_target}/macros:~/.rpmmacros"
+AC_DEFINE_UNQUOTED(MACROFILES, "$MACROFILES")
+AC_SUBST(MACROFILES)
+
 LIBRPMALIAS_FILENAME="${RPMCONFIGDIR}/rpmpopt-${VERSION}"
 AC_DEFINE_UNQUOTED(LIBRPMALIAS_FILENAME, "$LIBRPMALIAS_FILENAME")
 AC_SUBST(LIBRPMALIAS_FILENAME)
@@ -926,9 +929,6 @@ AC_SUBST(FINDREQUIRES)
 FINDPROVIDES="${RPMCONFIGDIR}/find-provides"
 AC_DEFINE_UNQUOTED(FINDPROVIDES, "$FINDPROVIDES")
 AC_SUBST(FINDPROVIDES)
-MACROFILES="${RPMCONFIGDIR}/macros"
-AC_DEFINE_UNQUOTED(MACROFILES, "$MACROFILES")
-AC_SUBST(MACROFILES)
 TOP_SOURCEDIR="`pwd`"
 AC_DEFINE_UNQUOTED(TOP_SOURCEDIR, "$TOP_SOURCEDIR")
 AC_SUBST(TOP_SOURCEDIR)
index 7d1dc7d..086bb96 100644 (file)
-#include "system.h"
-
-#include <stdarg.h>
-
-#if HAVE_SYS_SYSTEMCFG_H
-#include <sys/systemcfg.h>
-#else
-#define __power_pc() 0
-#endif
-
-#include <rpmlib.h>
-#include <rpmmacro.h>
-
-#include "misc.h"
-
-static const char *defrcfiles = LIBRPMRC_FILENAME ":/etc/rpmrc:~/.rpmrc";
-
-typedef /*@owned@*/ const char * cptr_t;
-
-struct machCacheEntry {
-    const char * name;
-    int count;
-    cptr_t * equivs;
-    int visited;
-};
-
-struct machCache {
-    struct machCacheEntry * cache;
-    int size;
-};
-
-struct machEquivInfo {
-    const char * name;
-    int score;
-};
-
-struct machEquivTable {
-    int count;
-    struct machEquivInfo * list;
-};
-
-struct rpmvarValue {
-    const char * value;
-    /* eventually, this arch will be replaced with a generic condition */
-    const char * arch;
-    struct rpmvarValue * next;
-};
-
-struct rpmOption {
-    const char * name;
-    int var;
-    int archSpecific, required, macroize, localize;
-    struct rpmOptionValue * value;
-};
-
-struct defaultEntry {
-/*@owned@*/ const char * name;
-/*@owned@*/ const char * defName;
-};
-
-struct canonEntry {
-/*@owned@*/ const char * name;
-/*@owned@*/ const char * short_name;
-    short num;
-};
-
-/* tags are 'key'canon, 'key'translate, 'key'compat
- *
- * for giggles, 'key'_canon, 'key'_compat, and 'key'_canon will also work
+/** \ingroup rpmrc
+ * \file lib/rpmrc.c
  */
-struct tableType {
-    const char * const key;
-    const int hasCanon;
-    const int hasTranslate;
-    struct machEquivTable equiv;
-    struct machCache cache;
-    struct defaultEntry * defaults;
-    struct canonEntry * canons;
-    int defaultsLength;
-    int canonsLength;
-};
-
-/*@-fullinitblock@*/
-static struct tableType tables[RPM_MACHTABLE_COUNT] = {
-    { "arch", 1, 0 },
-    { "os", 1, 0 },
-    { "buildarch", 0, 1 },
-    { "buildos", 0, 1 }
-};
 
-/* this *must* be kept in alphabetical order */
-/* The order of the flags is archSpecific, required, macroize, localize */
+#include "system.h"
 
-static struct rpmOption optionTable[] = {
-    { "include",               RPMVAR_INCLUDE,                 0, 1,   0, 2 },
-    { "macrofiles",            RPMVAR_MACROFILES,              0, 0,   0, 1 },
-    { "optflags",              RPMVAR_OPTFLAGS,                1, 0,   1, 0 },
-    { "provides",               RPMVAR_PROVIDES,                0, 0,  0, 0 },
+#include "rpmlib.h"
+#include "rpmmacro.h"
+
+static struct _arch_canon {
+    const char *ac_arch;
+    int                ac_num;
+} actbl[] = {
+    { "i386",          1 },
+    { "alpha",         2 },
+    { "sparc",         3 },
+    { "mipseb",                4 },
+    { "ppc",           5 },
+    { "m68k",          6 },
+    { "IP",            7 },
+    { "rs6000",                8 },
+    { "ia64",          9 },
+    { "sparc64",       10 },
+    { "mipsel",                11 },
+    { "armv4l",                12 },
+    { "m68kmint",      13 },
+    { "s390",          14 },
+    { NULL,    0 }
 };
-/*@=fullinitblock@*/
-static int optionTableSize = sizeof(optionTable) / sizeof(*optionTable);
-
-#define OS     0
-#define ARCH   1
-
-static cptr_t current[2];
-static int currTables[2] = { RPM_MACHTABLE_INSTOS, RPM_MACHTABLE_INSTARCH };
-static struct rpmvarValue values[RPMVAR_NUM];
-static int defaultsInitialized = 0;
-
-/* prototypes */
-static int doReadRC( /*@killref@*/ FD_t fd, const char * urlfn);
-static void rpmSetVarArch(int var, const char * val, const char * arch);
-static void rebuildCompatTables(int type, const char *name);
-
-static int optionCompare(const void * a, const void * b) {
-    return strcasecmp(((struct rpmOption *) a)->name,
-                     ((struct rpmOption *) b)->name);
-}
-
-static void rpmRebuildTargetVars(const char **target, const char ** canontarget);
-
-static /*@observer@*/ struct machCacheEntry *
-machCacheFindEntry(struct machCache * cache, const char * key)
-{
-    int i;
-
-    for (i = 0; i < cache->size; i++)
-       if (!strcmp(cache->cache[i].name, key)) return cache->cache + i;
-
-    return NULL;
-}
-
-static int machCompatCacheAdd(char * name, const char * fn, int linenum,
-                               struct machCache * cache)
-{
-    char * chptr, * equivs;
-    int delEntry = 0;
-    int i;
-    struct machCacheEntry * entry = NULL;
 
-    while (*name && isspace(*name)) name++;
-
-    chptr = name;
-    while (*chptr && *chptr != ':') chptr++;
-    if (!*chptr) {
-       rpmError(RPMERR_RPMRC, _("missing second ':' at %s:%d"), fn, linenum);
-       return 1;
-    } else if (chptr == name) {
-       rpmError(RPMERR_RPMRC, _("missing architecture name at %s:%d"), fn,
-                            linenum);
-       return 1;
-    }
-
-    while (*chptr == ':' || isspace(*chptr)) chptr--;
-    *(++chptr) = '\0';
-    equivs = chptr + 1;
-    while (*equivs && isspace(*equivs)) equivs++;
-    if (!*equivs) {
-       delEntry = 1;
-    }
-
-    if (cache->size) {
-       entry = machCacheFindEntry(cache, name);
-       if (entry) {
-           for (i = 0; i < entry->count; i++)
-               xfree(entry->equivs[i]);
-           xfree(entry->equivs);
-           entry->equivs = NULL;
-           entry->count = 0;
-       }
-    }
-
-    if (!entry) {
-       cache->cache = xrealloc(cache->cache,
-                              (cache->size + 1) * sizeof(*cache->cache));
-       entry = cache->cache + cache->size++;
-       entry->name = xstrdup(name);
-       entry->count = 0;
-       entry->visited = 0;
-    }
-
-    if (delEntry) return 0;
-
-    while ((chptr = strtok(equivs, " ")) != NULL) {
-       equivs = NULL;
-       if (chptr[0] == '\0')   /* does strtok() return "" ever?? */
-           continue;
-       if (entry->count)
-           entry->equivs = xrealloc(entry->equivs, sizeof(*entry->equivs)
-                                       * (entry->count + 1));
-       else
-           entry->equivs = xmalloc(sizeof(*entry->equivs));
-
-       entry->equivs[entry->count] = xstrdup(chptr);
-       entry->count++;
-    }
+static struct _os_canon {
+    const char *oc_os;
+    int                oc_num;
+} octbl[] = {
+    { "linux",         1 },    /* XXX was Linux */
+    { "irix",          2 },
+    { "solaris2",      3 },    /* XXX was solaris */
+    { "sunos",         4 },
+    { "aix",           5 },
+    { "hpux",          6 },    /* XXX was HP-UX */
+    { "osf1",          7 },
+    { "freebsd",       8 },
+    { "sco",           9 },    /* XXX was SCO_SV */
+    { "irix",          10 },   /* XXX was IRIX64 */
+    { "nextstep",      11 },
+    { "bsdi",          12 },   /* XXX was BSD_OS */
+    { "machten",       13 },
+    { "cygwin",                14 },   /* XXX was cygwin32_NT */
+    { "cygwin",                15 },   /* XXX was cygwin32_95 */
+    { "sysv4.2uw",     16 },   /* XXX was UNIX_SV (unixware) */
+    { "mint",          17 },   /* XXX was MiNT */
+    { "openedition",   18 },   /* XXX was OS/390 */
+    { "openedition",   19 },   /* XXX was VM/ESA */
+    { "linux",         20 },   /* XXX was Linux/390 */
+    { NULL,            0 }
+};
 
-    return 0;
-}
+static const char *macrofiles = MACROFILES;
 
-static /*@observer@*/ struct machEquivInfo *
-       machEquivSearch(const struct machEquivTable * table, const char * name)
+#ifndef        DYING
+const char *rpmGetVar(int var)
 {
-    int i;
-
-/*
- * XXX The strcasecmp below is necessary so the old (rpm < 2.90) style
- * XXX os-from-uname (e.g. "Linux") is compatible with the new
- * XXX os-from-platform (e.g "linux" from "sparc-*-linux").
- * XXX A copy of this string is embedded in headers and is
- * XXX used by rpmInstallPackage->{os,arch}Okay->rpmMachineScore->.
- * XXX to verify correct arch/os from headers.
- */
-    for (i = 0; i < table->count; i++)
-       if (!strcasecmp(table->list[i].name, name))
-           return table->list + i;
-
     return NULL;
 }
 
-static void machAddEquiv(struct machEquivTable * table, const char * name,
-                          int distance)
-{
-    struct machEquivInfo * equiv;
-
-    equiv = machEquivSearch(table, name);
-    if (!equiv) {
-       if (table->count)
-           table->list = xrealloc(table->list, (table->count + 1)
-                                   * sizeof(*table->list));
-       else
-           table->list = xmalloc(sizeof(*table->list));
-
-       table->list[table->count].name = xstrdup(name);
-       table->list[table->count++].score = distance;
-    }
-}
-
-static void machCacheEntryVisit(struct machCache * cache,
-                                 struct machEquivTable * table,
-                                 const char * name,
-                                 int distance)
+void rpmGetArchInfo(const char ** name, int * num)
 {
-    struct machCacheEntry * entry;
-    int i;
-
-    entry = machCacheFindEntry(cache, name);
-    if (!entry || entry->visited) return;
-
-    entry->visited = 1;
-
-    for (i = 0; i < entry->count; i++) {
-       machAddEquiv(table, entry->equivs[i], distance);
-    }
-
-    for (i = 0; i < entry->count; i++) {
-       machCacheEntryVisit(cache, table, entry->equivs[i], distance + 1);
-    }
+fprintf(stderr, "*** rpmGetArchInfo(%p,%p)\n", name, num);
+    if (name)
+       *name = rpmExpand("%{_target_cpu}", NULL);
 }
 
-static void machFindEquivs(struct machCache * cache,
-                            struct machEquivTable * table,
-                            const char * key)
+void rpmGetOsInfo(const char ** name, int * num)
 {
-    int i;
-
-    for (i = 0; i < cache->size; i++)
-       cache->cache[i].visited = 0;
-
-    while (table->count > 0) {
-       xfree(table->list[--table->count].name);
-       table->list[table->count].name = NULL;
-    }
-    table->count = 0;
-    if (table->list) xfree(table->list);
-    table->list = NULL;
-
-    /*
-     * We have a general graph built using strings instead of pointers.
-     * Yuck. We have to start at a point at traverse it, remembering how
-     * far away everything is.
-     */
-    machAddEquiv(table, key, 1);
-    machCacheEntryVisit(cache, table, key, 2);
+fprintf(stderr, "*** rpmGetOsInfo(%p,%p)\n", name, num);
+    if (name)
+       *name = rpmExpand("%{_target_os}", NULL);
 }
 
-static int addCanon(struct canonEntry ** table, int * tableLen, char * line,
-                   const char * fn, int lineNum)
-{
-    struct canonEntry *t;
-    char *s, *s1;
-    const char * tname;
-    const char * tshort_name;
-    int tnum;
-
-    if (! *tableLen) {
-       *tableLen = 2;
-       *table = xmalloc(2 * sizeof(struct canonEntry));
-    } else {
-       (*tableLen) += 2;
-       *table = xrealloc(*table, sizeof(struct canonEntry) * (*tableLen));
-    }
-    t = & ((*table)[*tableLen - 2]);
-
-    tname = strtok(line, ": \t");
-    tshort_name = strtok(NULL, " \t");
-    s = strtok(NULL, " \t");
-    if (! (tname && tshort_name && s)) {
-       rpmError(RPMERR_RPMRC, _("Incomplete data line at %s:%d"), fn, lineNum);
-       return RPMERR_RPMRC;
-    }
-    if (strtok(NULL, " \t")) {
-       rpmError(RPMERR_RPMRC, _("Too many args in data line at %s:%d"),
-             fn, lineNum);
-       return RPMERR_RPMRC;
-    }
-
-    tnum = strtoul(s, &s1, 10);
-    if ((*s1) || (s1 == s) || (tnum == ULONG_MAX)) {
-       rpmError(RPMERR_RPMRC, _("Bad arch/os number: %s (%s:%d)"), s,
-             fn, lineNum);
-       return(RPMERR_RPMRC);
-    }
-
-    t[0].name = xstrdup(tname);
-    t[0].short_name = xstrdup(tshort_name);
-    t[0].num = tnum;
-
-    /* From A B C entry */
-    /* Add  B B C entry */
-    t[1].name = xstrdup(tshort_name);
-    t[1].short_name = xstrdup(tshort_name);
-    t[1].num = tnum;
-
-    return 0;
-}
-
-static int addDefault(struct defaultEntry **table, int *tableLen, char *line,
-                       const char *fn, int lineNum)
-{
-    struct defaultEntry *t;
-
-    if (! *tableLen) {
-       *tableLen = 1;
-       *table = xmalloc(sizeof(struct defaultEntry));
-    } else {
-       (*tableLen)++;
-       *table = xrealloc(*table, sizeof(struct defaultEntry) * (*tableLen));
-    }
-    t = & ((*table)[*tableLen - 1]);
-
-    t->name = strtok(line, ": \t");
-    t->defName = strtok(NULL, " \t");
-    if (! (t->name && t->defName)) {
-       rpmError(RPMERR_RPMRC, _("Incomplete default line at %s:%d"),
-                fn, lineNum);
-       return RPMERR_RPMRC;
-    }
-    if (strtok(NULL, " \t")) {
-       rpmError(RPMERR_RPMRC, _("Too many args in default line at %s:%d"),
-             fn, lineNum);
-       return RPMERR_RPMRC;
-    }
-
-    t->name = xstrdup(t->name);
-    t->defName = xstrdup(t->defName);
-
-    return 0;
-}
-
-static /*@null@*/ const struct canonEntry *lookupInCanonTable(const char *name,
-       const struct canonEntry *table, int tableLen)
+void rpmGetMachine(const char **arch, const char **os)
 {
-    while (tableLen) {
-       tableLen--;
-       if (!strcmp(name, table[tableLen].name)) {
-           return &(table[tableLen]);
-       }
-    }
-
-    return NULL;
 }
 
-static /*@observer@*/ const char * lookupInDefaultTable(const char *name,
-               const struct defaultEntry *table, int tableLen)
+void rpmSetMachine(const char * arch, const char * os)
 {
-    while (tableLen) {
-       tableLen--;
-       if (!strcmp(name, table[tableLen].name)) {
-           return table[tableLen].defName;
-       }
-    }
-
-    return name;
 }
+#endif
 
-int rpmReadConfigFiles(const char * file, const char * target)
+int rpmMachineScore(int type, const char * name)
 {
-
-    /* Preset target macros */
-    rpmRebuildTargetVars(&target, NULL);
-
-    /* Read the files */
-    if (rpmReadRC(file)) return -1;
-
-    /* Reset target macros */
-    rpmRebuildTargetVars(&target, NULL);
-
-    /* Finally set target platform */
-    {  const char *cpu = rpmExpand("%{_target_cpu}", NULL);
-       const char *os = rpmExpand("%{_target_os}", NULL);
-       rpmSetMachine(cpu, os);
-       xfree(cpu);
-       xfree(os);
-    }
-
     return 0;
 }
 
-static void setVarDefault(int var, const char *macroname, const char *val, const char *body)
-{
-    if (var >= 0) {    /* XXX Dying ... */
-       if (rpmGetVar(var)) return;
-       rpmSetVar(var, val);
-    }
-    if (body == NULL)
-       body = val;
-    addMacro(NULL, macroname, NULL, body, RMIL_DEFAULT);
-}
-
-static void setPathDefault(int var, const char *macroname, const char *subdir)
-{
-
-    if (var >= 0) {    /* XXX Dying ... */
-       const char * topdir;
-       char * fn;
-
-       if (rpmGetVar(var)) return;
-
-       topdir = rpmGetPath("%{_topdir}", NULL);
-
-       fn = alloca(strlen(topdir) + strlen(subdir) + 2);
-       strcpy(fn, topdir);
-       if (fn[strlen(topdir) - 1] != '/')
-           strcat(fn, "/");
-       strcat(fn, subdir);
-
-       rpmSetVar(var, fn);
-       if (topdir)     xfree(topdir);
-    }
-
-    if (macroname != NULL) {
-#define        _TOPDIRMACRO    "%{_topdir}/"
-       char *body = alloca(sizeof(_TOPDIRMACRO) + strlen(subdir));
-       strcpy(body, _TOPDIRMACRO);
-       strcat(body, subdir);
-       addMacro(NULL, macroname, NULL, body, RMIL_DEFAULT);
-#undef _TOPDIRMACRO
-    }
-}
-
-static const char *prescriptenviron = "\n\
-RPM_SOURCE_DIR=\"%{_sourcedir}\"\n\
-RPM_BUILD_DIR=\"%{_builddir}\"\n\
-RPM_OPT_FLAGS=\"%{optflags}\"\n\
-RPM_ARCH=\"%{_arch}\"\n\
-RPM_OS=\"%{_os}\"\n\
-export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS\n\
-RPM_DOC_DIR=\"%{_docdir}\"\n\
-export RPM_DOC_DIR\n\
-RPM_PACKAGE_NAME=\"%{name}\"\n\
-RPM_PACKAGE_VERSION=\"%{version}\"\n\
-RPM_PACKAGE_RELEASE=\"%{release}\"\n\
-export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\n\
-%{?buildroot:RPM_BUILD_ROOT=\"%{buildroot}\"\n\
-export RPM_BUILD_ROOT\n}\
-";
-
-static void setDefaults(void) {
-
-    addMacro(NULL, "_usr", NULL, "/usr", RMIL_DEFAULT);
-    addMacro(NULL, "_var", NULL, "/var", RMIL_DEFAULT);
-
-    addMacro(NULL, "_preScriptEnvironment",NULL, prescriptenviron,RMIL_DEFAULT);
-
-    setVarDefault(-1,                  "_topdir",
-               "/usr/src/redhat",      "%{_usr}/src/redhat");
-    setVarDefault(-1,                  "_tmppath",
-               "/var/tmp",             "%{_var}/tmp");
-    setVarDefault(-1,                  "_dbpath",
-               "/var/lib/rpm",         "%{_var}/lib/rpm");
-    setVarDefault(-1,                  "_defaultdocdir",
-               "/usr/doc",             "%{_usr}/doc");
-
-    setVarDefault(-1,                  "_rpmfilename",
-       "%%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm",NULL);
-
-    setVarDefault(RPMVAR_OPTFLAGS,     "optflags",
-               "-O2",                  NULL);
-    setVarDefault(-1,                  "sigtype",
-               "none",                 NULL);
-    setVarDefault(-1,                  "_buildshell",
-               "/bin/sh",              NULL);
-
-    setPathDefault(-1,                 "_builddir",    "BUILD");
-    setPathDefault(-1,                 "_rpmdir",      "RPMS");
-    setPathDefault(-1,                 "_srcrpmdir",   "SRPMS");
-    setPathDefault(-1,                 "_sourcedir",   "SOURCES");
-    setPathDefault(-1,                 "_specdir",     "SPECS");
-
-}
-
-int rpmReadRC(const char * rcfiles)
-{
-    char *myrcfiles, *r, *re;
-    int rc;
-
-    if (!defaultsInitialized) {
-       setDefaults();
-       defaultsInitialized = 1;
-    }
-
-    if (rcfiles == NULL)
-       rcfiles = defrcfiles;
-
-    /* Read each file in rcfiles. */
-    rc = 0;
-    for (r = myrcfiles = xstrdup(rcfiles); *r != '\0'; r = re) {
-       char fn[4096];
-       FD_t fd;
-
-       /* Get pointer to rest of files */
-       for (re = r; (re = strchr(re, ':')) != NULL; re++) {
-           if (!(re[1] == '/' && re[2] == '/'))
-               break;
-       }
-       if (re && *re == ':')
-           *re++ = '\0';
-       else
-           re = r + strlen(r);
-
-       /* Expand ~/ to $HOME/ */
-       fn[0] = '\0';
-       if (r[0] == '~' && r[1] == '/') {
-           const char * home = getenv("HOME");
-           if (home == NULL) {
-           /* XXX Only /usr/lib/rpm/rpmrc must exist in default rcfiles list */
-               if (rcfiles == defrcfiles && myrcfiles != r)
-                   continue;
-               rpmError(RPMERR_RPMRC, _("Cannot expand %s"), r);
-               rc = 1;
-               break;
-           }
-           if (strlen(home) > (sizeof(fn) - strlen(r))) {
-               rpmError(RPMERR_RPMRC, _("Cannot read %s, HOME is too large."),
-                               r);
-               rc = 1;
-               break;
-           }
-           strcpy(fn, home);
-           r++;
-       }
-       strncat(fn, r, sizeof(fn) - (strlen(fn) + 1));
-       fn[sizeof(fn)-1] = '\0';
-
-       /* Read another rcfile */
-       fd = Fopen(fn, "r.fpio");
-       if (fd == NULL || Ferror(fd)) {
-           /* XXX Only /usr/lib/rpm/rpmrc must exist in default rcfiles list */
-           if (rcfiles == defrcfiles && myrcfiles != r)
-               continue;
-           rpmError(RPMERR_RPMRC, _("Unable to open %s for reading: %s."),
-                fn, Fstrerror(fd));
-           rc = 1;
-           break;
-       } else {
-           rc = doReadRC(fd, fn);
-       }
-       if (rc) break;
-    }
-    if (myrcfiles)     free(myrcfiles);
-    if (rc)
-       return rc;
-
-    rpmSetMachine(NULL, NULL); /* XXX WTFO? Why bother? */
-
-    {  const char *macrofiles;
-       if ((macrofiles = rpmGetVar(RPMVAR_MACROFILES)) != NULL) {
-           macrofiles = strdup(macrofiles);
-           rpmInitMacros(NULL, macrofiles);
-           xfree(macrofiles);
-       }
-    }
-
-    return rc;
-}
-
-static int doReadRC( /*@killref@*/ FD_t fd, const char * urlfn)
+void rpmFreeRpmrc(void)
 {
-    const char *s;
-    char *se, *next;
-    int linenum = 0;
-    struct rpmOption searchOption, * option;
-    int rc;
-
-    /* XXX really need rc = Slurp(fd, const char * filename, char ** buf) */
-  { off_t size = fdSize(fd);
-    size_t nb = (size >= 0 ? size : (8*BUFSIZ - 2));
-    if (nb == 0) {
-       Fclose(fd);
-       return 0;
-    }
-    next = alloca(nb + 2);
-    next[0] = '\0';
-    rc = Fread(next, sizeof(*next), nb, fd);
-    if (Ferror(fd) || (size > 0 && rc != nb)) {        /* XXX Feof(fd) */
-       rpmError(RPMERR_RPMRC, _("Failed to read %s: %s."), urlfn,
-                Fstrerror(fd));
-       rc = 1;
-    } else
-       rc = 0;
-    Fclose(fd);
-    if (rc) return rc;
-    next[nb] = '\n';
-    next[nb + 1] = '\0';
-  }
-
-    while (*next) {
-       linenum++;
-
-       s = se = next;
-
-       /* Find end-of-line. */
-       while (*se && *se != '\n') se++;
-       if (*se) *se++ = '\0';
-       next = se;
-
-       /* Trim leading spaces */
-       while (*s && isspace(*s)) s++;
-
-       /* We used to allow comments to begin anywhere, but not anymore. */
-       if (*s == '#' || *s == '\0') continue;
-
-       /* Find end-of-keyword. */
-       se = (char *)s;
-       while (*se && !isspace(*se) && *se != ':') se++;
-
-       if (isspace(*se)) {
-           *se++ = '\0';
-           while (*se && isspace(*se) && *se != ':') se++;
-       }
-
-       if (*se != ':') {
-           rpmError(RPMERR_RPMRC, _("missing ':' (found 0x%02x) at %s:%d"),
-                    (0xff & *se), urlfn, linenum);
-           return 1;
-       }
-       *se++ = '\0';   /* terminate keyword or option, point to value */
-       while (*se && isspace(*se)) se++;
-
-       /* Find keyword in table */
-       searchOption.name = s;
-       option = bsearch(&searchOption, optionTable, optionTableSize,
-                        sizeof(struct rpmOption), optionCompare);
-
-       if (option) {   /* For configuration variables  ... */
-           const char *arch, *val, *fn;
-
-           arch = val = fn = NULL;
-           if (*se == '\0') {
-               rpmError(RPMERR_RPMRC, _("missing argument for %s at %s:%d"),
-                     option->name, urlfn, linenum);
-               return 1;
-           }
-
-           switch (option->var) {
-           case RPMVAR_INCLUDE:
-             { FD_t fdinc;
-
-               s = se;
-               while (*se && !isspace(*se)) se++;
-               if (*se) *se++ = '\0';
-
-               rpmRebuildTargetVars(NULL, NULL);
-
-               fn = rpmGetPath(s, NULL);
-               if (fn == NULL || *fn == '\0') {
-                   rpmError(RPMERR_RPMRC, _("%s expansion failed at %s:%d \"%s\""),
-                       option->name, urlfn, linenum, s);
-                   if (fn) xfree(fn);
-                   return 1;
-                   /*@notreached@*/
-               }
-
-               fdinc = Fopen(fn, "r.fpio");
-               if (fdinc == NULL || Ferror(fdinc)) {
-                   rpmError(RPMERR_RPMRC, _("cannot open %s at %s:%d: %s"),
-                       fn, urlfn, linenum, Fstrerror(fdinc));
-                   rc = 1;
-               } else {
-                   rc = doReadRC(fdinc, fn);
-               }
-               if (fn) xfree(fn);
-               if (rc) return rc;
-               continue;       /* XXX don't save include value as var/macro */
-             } /*@notreached@*/ break;
-           case RPMVAR_MACROFILES:
-               fn = rpmGetPath(se, NULL);
-               if (fn == NULL || *fn == '\0') {
-                   rpmError(RPMERR_RPMRC, _("%s expansion failed at %s:%d \"%s\""),
-                       option->name, urlfn, linenum, fn);
-                   if (fn) xfree(fn);
-                   return 1;
-               }
-               se = (char *)fn;
-               break;
-           case RPMVAR_PROVIDES:
-             { char *t;
-               s = rpmGetVar(RPMVAR_PROVIDES);
-               if (s == NULL) s = "";
-               fn = t = xmalloc(strlen(s) + strlen(se) + 2);
-               while (*s) *t++ = *s++;
-               *t++ = ' ';
-               while (*se) *t++ = *se++;
-               *t++ = '\0';
-               se = (char *)fn;
-             } break;
-           default:
-               break;
-           }
-
-           if (option->archSpecific) {
-               arch = se;
-               while (*se && !isspace(*se)) se++;
-               if (*se == '\0') {
-                   rpmError(RPMERR_RPMRC,
-                               _("missing architecture for %s at %s:%d"),
-                               option->name, urlfn, linenum);
-                   return 1;
-               }
-               *se++ = '\0';
-               while (*se && isspace(*se)) se++;
-               if (*se == '\0') {
-                   rpmError(RPMERR_RPMRC,
-                               _("missing argument for %s at %s:%d"),
-                               option->name, urlfn, linenum);
-                   return 1;
-               }
-           }
-       
-           val = se;
-
-           /* Only add macros if appropriate for this arch */
-           if (option->macroize &&
-             (arch == NULL || !strcmp(arch, current[ARCH]))) {
-               char *n, *name;
-               n = name = xmalloc(strlen(option->name)+2);
-               if (option->localize)
-                   *n++ = '_';
-               strcpy(n, option->name);
-               addMacro(NULL, name, NULL, val, RMIL_RPMRC);
-               free(name);
-           }
-           rpmSetVarArch(option->var, val, arch);
-           if (fn) xfree(fn);
-
-       } else {        /* For arch/os compatibilty tables ... */
-           int gotit;
-           int i;
-
-           gotit = 0;
-
-           for (i = 0; i < RPM_MACHTABLE_COUNT; i++) {
-               if (!strncmp(tables[i].key, s, strlen(tables[i].key)))
-                   break;
-           }
-
-           if (i < RPM_MACHTABLE_COUNT) {
-               const char *rest = s + strlen(tables[i].key);
-               if (*rest == '_') rest++;
-
-               if (!strcmp(rest, "compat")) {
-                   if (machCompatCacheAdd(se, urlfn, linenum,
-                                               &tables[i].cache))
-                       return 1;
-                   gotit = 1;
-               } else if (tables[i].hasTranslate &&
-                          !strcmp(rest, "translate")) {
-                   if (addDefault(&tables[i].defaults,
-                                  &tables[i].defaultsLength,
-                                  se, urlfn, linenum))
-                       return 1;
-                   gotit = 1;
-               } else if (tables[i].hasCanon &&
-                          !strcmp(rest, "canon")) {
-                   if (addCanon(&tables[i].canons, &tables[i].canonsLength,
-                                se, urlfn, linenum))
-                       return 1;
-                   gotit = 1;
-               }
-           }
-
-           if (!gotit) {
-               rpmError(RPMERR_RPMRC, _("bad option '%s' at %s:%d"),
-                           s, urlfn, linenum);
-           }
-       }
-    }
-
-    return 0;
 }
 
-static void defaultMachine(/*@out@*/ const char ** arch, /*@out@*/ const char ** os)
+static void defaultMachine(/*@out@*/ char ** arch, /*@out@*/ char ** os)
 {
     static struct utsname un;
     static int gotDefaults = 0;
-    char * chptr;
-    const struct canonEntry * canon;
 
     if (!gotDefaults) {
        uname(&un);
 
-#if !defined(__linux__)
-#ifdef SNI
-       /* USUALLY un.sysname on sinix does start with the word "SINIX"
-        * let's be absolutely sure
-        */
-       sprintf(un.sysname,"SINIX");
-#endif
-       if (!strcmp(un.sysname, "AIX")) {
-           strcpy(un.machine, __power_pc() ? "ppc" : "rs6000");
-           sprintf(un.sysname,"aix%s.%s",un.version,un.release);
-       }
-       else if (!strcmp(un.sysname, "SunOS")) {
-           if (!strncmp(un.release,"4", 1)) /* SunOS 4.x */ {
-               int fd;
-               for (fd = 0;
-                   (un.release[fd] != 0 && (fd < sizeof(un.release)));
-                   fd++) {
-                     if (!isdigit(un.release[fd]) && (un.release[fd] != '.')) {
-                       un.release[fd] = 0;
-                       break;
-                     }
-                   }
-                   sprintf(un.sysname,"sunos%s",un.release);
-           }
-
-           else /* Solaris 2.x: n.x.x becomes n-3.x.x */
-               sprintf(un.sysname, "solaris%1d%s", atoi(un.release)-3,
-                       un.release+1+(atoi(un.release)/10));
-       }
-       else if (!strcmp(un.sysname, "HP-UX"))
-           /*make un.sysname look like hpux9.05 for example*/
-           sprintf(un.sysname, "hpux%s", strpbrk(un.release,"123456789"));
-       else if (!strcmp(un.sysname, "OSF1"))
-           /*make un.sysname look like osf3.2 for example*/
-           sprintf(un.sysname,"osf%s",strpbrk(un.release,"123456789"));
-       else if (!strncmp(un.sysname, "IP", 2))
-           un.sysname[2] = '\0';
-       else if (!strncmp(un.sysname, "SINIX", 5)) {
-           sprintf(un.sysname, "sinix%s",un.release);
-           if (!strncmp(un.machine, "RM", 2))
-               sprintf(un.machine, "mips");
-       }
-       else if ((!strncmp(un.machine, "34", 2) ||
-               !strncmp(un.machine, "33", 2)) && \
-               !strncmp(un.release, "4.0", 3))
-       {
-           /* we are on ncr-sysv4 */
-           char *prelid = NULL;
-           FD_t fd;
-           fd = Fopen("/etc/.relid", "r.fdio");
-           if (!Ferror(fd)) {
-               chptr = (char *) xcalloc(1, 256);
-               if (chptr != NULL) {
-                   int irelid = Fread(chptr, sizeof(*chptr), 256, fd);
-                   Fclose(fd);
-                   /* example: "112393 RELEASE 020200 Version 01 OS" */
-                   if (irelid > 0) {
-                       if ((prelid=strstr(chptr, "RELEASE "))){
-                           prelid += strlen("RELEASE ")+1;
-                           sprintf(un.sysname,"ncr-sysv4.%.*s",1,prelid);
-                       }
-                   }
-                   free (chptr);
-               }
-           }
-           if (prelid == NULL) /* parsing /etc/.relid file failed? */
-               strcpy(un.sysname,"ncr-sysv4");
-           /* wrong, just for now, find out how to look for i586 later*/
-           strcpy(un.machine,"i486");
-       }
-#endif /* __linux__ */
-
        /* get rid of the hyphens in the sysname */
-       for (chptr = un.machine; *chptr; chptr++)
-           if (*chptr == '/') *chptr = '-';
-
-#      if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL)
-           /* little endian */
-           strcpy(un.machine, "mipsel");
-#      elif defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB)
-          /* big endian */
-               strcpy(un.machine, "mipseb");
-#      endif
-
-#      if defined(__hpux) && defined(_SC_CPU_VERSION)
-       {
-#          if !defined(CPU_PA_RISC1_2)
-#                define CPU_PA_RISC1_2  0x211 /* HP PA-RISC1.2 */
-#           endif
-#           if !defined(CPU_PA_RISC2_0)
-#               define CPU_PA_RISC2_0  0x214 /* HP PA-RISC2.0 */
-#           endif
-           int cpu_version = sysconf(_SC_CPU_VERSION);
-
-#          if defined(CPU_HP_MC68020)
-               if (cpu_version == CPU_HP_MC68020)
-                   strcpy(un.machine, "m68k");
-#          endif
-#          if defined(CPU_HP_MC68030)
-               if (cpu_version == CPU_HP_MC68030)
-                   strcpy(un.machine, "m68k");
-#          endif
-#          if defined(CPU_HP_MC68040)
-               if (cpu_version == CPU_HP_MC68040)
-                   strcpy(un.machine, "m68k");
-#          endif
-
-#          if defined(CPU_PA_RISC1_0)
-               if (cpu_version == CPU_PA_RISC1_0)
-                   strcpy(un.machine, "hppa1.0");
-#          endif
-#          if defined(CPU_PA_RISC1_1)
-               if (cpu_version == CPU_PA_RISC1_1)
-                   strcpy(un.machine, "hppa1.1");
-#          endif
-#          if defined(CPU_PA_RISC1_2)
-               if (cpu_version == CPU_PA_RISC1_2)
-                   strcpy(un.machine, "hppa1.2");
-#          endif
-#          if defined(CPU_PA_RISC2_0)
-               if (cpu_version == CPU_PA_RISC2_0)
-                   strcpy(un.machine, "hppa2.0");
-#          endif
+       {   char *s;
+           for (s = un.machine; *s; s++)
+               if (*s == '/') *s = '-';
        }
-#      endif   /* hpux */
 
 #      if HAVE_PERSONALITY && defined(__linux__) && defined(__sparc__)
        if (!strcmp(un.machine, "sparc")) {
@@ -970,447 +132,112 @@ static void defaultMachine(/*@out@*/ const char ** arch, /*@out@*/ const char **
        }
 #      endif   /* sparc*-linux */
 
-       /* the uname() result goes through the arch_canon table */
-       canon = lookupInCanonTable(un.machine,
-                                  tables[RPM_MACHTABLE_INSTARCH].canons,
-                                  tables[RPM_MACHTABLE_INSTARCH].canonsLength);
-       if (canon)
-           strcpy(un.machine, canon->short_name);
-
-       canon = lookupInCanonTable(un.sysname,
-                                  tables[RPM_MACHTABLE_INSTOS].canons,
-                                  tables[RPM_MACHTABLE_INSTOS].canonsLength);
-       if (canon)
-           strcpy(un.sysname, canon->short_name);
        gotDefaults = 1;
     }
 
-    if (arch) *arch = un.machine;
-    if (os) *os = un.sysname;
-}
-
-static const char * rpmGetVarArch(int var, const char * arch) {
-    struct rpmvarValue * next;
-
-    if (!arch) arch = current[ARCH];
-
-    if (arch) {
-       next = &values[var];
-       while (next) {
-           if (next->arch && !strcmp(next->arch, arch)) return next->value;
-           next = next->next;
-       }
-    }
-
-    next = values + var;
-    while (next && next->arch) next = next->next;
-
-    return next ? next->value : NULL;
+    if (arch && *arch == NULL) *arch = un.machine;
+    if (os && *os == NULL) *os = un.sysname;
 }
 
-const char *rpmGetVar(int var)
+static void rpmRebuildTargetVars(const char **ct)
 {
-    return rpmGetVarArch(var, NULL);
-}
+    const char *target;
+    char * ca, * cv, * co;
+    char * ce;
 
-/* this doesn't free the passed pointer! */
-static void freeRpmVar(struct rpmvarValue * orig) {
-    struct rpmvarValue * next, * var = orig;
+fprintf(stderr, "*** rpmRebuildTargetVars(%p) %s\n", ct, (ct ? *ct : NULL));
+    ca = cv = co = NULL;
+    if (ct && *ct) {
+       char * c = strcpy(alloca(strlen(*ct)), *ct);
+       char ** av;
+       int ac;
 
-    while (var) {
-       next = var->next;
-       if (var->arch) {
-           xfree(var->arch);
-           var->arch = NULL;
-       }
-       if (var->value) {
-           xfree(var->value);
-           var->value = NULL;
+       /* Set arch, vendor and os from specified build target */
+       ac = 1;
+       for (ce = c; (ce = strchr(ce, '-')) != NULL; ce++)
+           ac++;
+       av = alloca(ac * sizeof(*av));
+       ac = 0;
+       av[ac++] = c;
+       for (ce = c; (ce = strchr(ce, '-')) != NULL;) {
+           *ce++ = '\0';
+           av[ac++] = ce;
        }
 
-       if (var != orig) free(var);
-       var = next;
+       do {
+           ca = av[0];
+           if (ac == 1) break;
+           co = av[(!strcasecmp(av[ac-1], "gnu") ? (ac-2) : (ac-1))];
+           if (ac == 2) break;
+           cv = av[1];
+           if (ac == 3) break;
+           if (!strcasecmp(av[1], "pc"))
+               cv = av[2];
+       } while (0);
     }
-}
-
-void rpmSetVar(int var, const char *val) {
-    freeRpmVar(&values[var]);
-    values[var].value = (val ? xstrdup(val) : NULL);
-}
-
-static void rpmSetVarArch(int var, const char * val, const char * arch) {
-    struct rpmvarValue * next = values + var;
-
-    if (next->value) {
-       if (arch) {
-           while (next->next) {
-               if (next->arch && !strcmp(next->arch, arch)) break;
-               next = next->next;
-           }
-       } else {
-           while (next->next) {
-               if (!next->arch) break;
-               next = next->next;
-           }
-       }
-
-       if (next->arch && arch && !strcmp(next->arch, arch)) {
-           if (next->value) xfree(next->value);
-           if (next->arch) xfree(next->arch);
-       } else if (next->arch || arch) {
-           next->next = xmalloc(sizeof(*next->next));
-           next = next->next;
-           next->value = NULL;
-           next->arch = NULL;
-           next->next = NULL;
-       }
-    }
-
-    next->value = xstrdup(val);                /* XXX memory leak, hard to plug */
-    next->arch = (arch ? xstrdup(arch) : NULL);
-}
-
-void rpmSetTables(int archTable, int osTable) {
-    const char * arch, * os;
 
-    defaultMachine(&arch, &os);
+    /* If still not set, set target arch/os from uname(2) values */
+    defaultMachine(&ca, &co);
 
-    if (currTables[ARCH] != archTable) {
-       currTables[ARCH] = archTable;
-       rebuildCompatTables(ARCH, arch);
-    }
-
-    if (currTables[OS] != osTable) {
-       currTables[OS] = osTable;
-       rebuildCompatTables(OS, os);
-    }
-}
-
-int rpmMachineScore(int type, const char * name) {
-    struct machEquivInfo * info = machEquivSearch(&tables[type].equiv, name);
-    return (info != NULL ? info->score : 0);
-}
-
-void rpmGetMachine(const char **arch, const char **os)
-{
-    if (arch)
-       *arch = current[ARCH];
-
-    if (os)
-       *os = current[OS];
-}
-
-void rpmSetMachine(const char * arch, const char * os) {
-    const char * host_cpu, * host_os;
-
-    defaultMachine(&host_cpu, &host_os);
-
-    if (arch == NULL) {
-       arch = host_cpu;
-       if (tables[currTables[ARCH]].hasTranslate)
-           arch = lookupInDefaultTable(arch,
-                           tables[currTables[ARCH]].defaults,
-                           tables[currTables[ARCH]].defaultsLength);
-    }
+    for (ce = ca; *ce; ce++) *ce = tolower(*ce);
+    delMacro(NULL, "_target_cpu");
+    addMacro(NULL, "_target_cpu", NULL, ca, RMIL_RPMRC);
+fprintf(stderr, "*** _target_cpu: \"%s\"\n", ca);
 
-    if (os == NULL) {
-       os = host_os;
-       if (tables[currTables[OS]].hasTranslate)
-           os = lookupInDefaultTable(os,
-                           tables[currTables[OS]].defaults,
-                           tables[currTables[OS]].defaultsLength);
+    if (cv) {
+       for (ce = cv; *ce; ce++) *ce = tolower(*ce);
+       delMacro(NULL, "_target_vendor");
+       addMacro(NULL, "_target_vendor", NULL, cv, RMIL_RPMRC);
+fprintf(stderr, "*** _target_vendor: \"%s\"\n", cv);
     }
 
-    if (!current[ARCH] || strcmp(arch, current[ARCH])) {
-       if (current[ARCH]) xfree(current[ARCH]);
-       current[ARCH] = xstrdup(arch);
-       rebuildCompatTables(ARCH, host_cpu);
-    }
+    for (ce = co; *ce; ce++) *ce = tolower(*ce);
+    delMacro(NULL, "_target_os");
+    addMacro(NULL, "_target_os", NULL, co, RMIL_RPMRC);
+fprintf(stderr, "*** _target_os: \"%s\"\n", co);
 
-    if (!current[OS] || strcmp(os, current[OS])) {
-       char * t = xstrdup(os);
-       if (current[OS]) xfree(current[OS]);
-       /*
-        * XXX Capitalizing the 'L' is needed to insure that old
-        * XXX os-from-uname (e.g. "Linux") is compatible with the new
-        * XXX os-from-platform (e.g "linux" from "sparc-*-linux").
-        * XXX A copy of this string is embedded in headers and is
-        * XXX used by rpmInstallPackage->{os,arch}Okay->rpmMachineScore->
-        * XXX to verify correct arch/os from headers.
-        */
-       if (!strcmp(t, "linux"))
-           *t = 'L';
-       current[OS] = t;
-       
-       rebuildCompatTables(OS, host_os);
+    if (!(ct && *ct)) {
+       char * t;
+       int nb = strlen(ca) + strlen(co) + sizeof("-");
+       if (cv) nb += strlen(cv) + 1;
+       target = t = alloca(nb);
+       t = stpcpy( stpcpy(t, ca), "-");
+       if (cv)
+           t = stpcpy( stpcpy(t, cv), "-");
+       t = stpcpy(t, co);
+       ct = &target;
     }
-}
 
-static void rebuildCompatTables(int type, const char * name) {
-    machFindEquivs(&tables[currTables[type]].cache,
-                  &tables[currTables[type]].equiv,
-                  name);
-}
-
-static void getMachineInfo(int type, /*@out@*/ const char ** name,
-                       /*@out@*/int * num)
-{
-    const struct canonEntry * canon;
-    int which = currTables[type];
-
-    /* use the normal canon tables, even if we're looking up build stuff */
-    if (which >= 2) which -= 2;
-
-    canon = lookupInCanonTable(current[type],
-                              tables[which].canons,
-                              tables[which].canonsLength);
-
-    if (canon) {
-       if (num) *num = canon->num;
-       if (name) *name = canon->short_name;
-    } else {
-       if (num) *num = 255;
-       if (name) *name = current[type];
-
-       if (tables[currTables[type]].hasCanon) {
-           rpmMessage(RPMMESS_WARNING, _("Unknown system: %s\n"), current[type]);
-           rpmMessage(RPMMESS_WARNING, _("Please contact rpm-list@redhat.com\n"));
-       }
+    if (ct && *ct) {
+       delMacro(NULL, "_target");
+       addMacro(NULL, "_target", NULL, *ct, RMIL_RPMRC);
+fprintf(stderr, "*** _target: \"%s\"\n", *ct);
     }
 }
 
-void rpmGetArchInfo(const char ** name, int * num) {
-    getMachineInfo(ARCH, name, num);
-}
-
-void rpmGetOsInfo(const char ** name, int * num) {
-    getMachineInfo(OS, name, num);
-}
-
-void rpmRebuildTargetVars(const char **buildtarget, const char ** canontarget)
+int rpmReadConfigFiles(const char * mfiles, const char * target)
 {
 
-    char *ca = NULL, *co = NULL, *ct = NULL;
-    int x;
-
-    /* Rebuild the compat table to recalculate the current target arch.  */
-
-    rpmSetMachine(NULL, NULL);
-    rpmSetTables(RPM_MACHTABLE_INSTARCH, RPM_MACHTABLE_INSTOS);
-    rpmSetTables(RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS);
-
-    if (buildtarget && *buildtarget) {
-       char *c;
-       /* Set arch and os from specified build target */
-       ca = xstrdup(*buildtarget);
-       if ((c = strchr(ca, '-')) != NULL) {
-           *c++ = '\0';
-           
-           if ((co = strrchr(c, '-')) == NULL) {
-               co = c;
-           } else {
-               if (!strcasecmp(co, "-gnu"))
-                   *co = '\0';
-               if ((co = strrchr(c, '-')) == NULL)
-                   co = c;
-               else
-                   co++;
-           }
-           if (co != NULL) co = xstrdup(co);
-       }
-    } else {
-       const char *a = NULL;
-       const char *o = NULL;
-       /* Set build target from rpm arch and os */
-       rpmGetArchInfo(&a, NULL);
-       ca = (a) ? xstrdup(a) : NULL;
-       rpmGetOsInfo(&o, NULL);
-       co = (o) ? xstrdup(o) : NULL;
-    }
-
-    /* If still not set, Set target arch/os from default uname(2) values */
-    if (ca == NULL) {
-       const char *a = NULL;
-       defaultMachine(&a, NULL);
-       ca = (a) ? xstrdup(a) : NULL;
-    }
-    for (x = 0; ca[x]; x++)
-       ca[x] = tolower(ca[x]);
-
-    if (co == NULL) {
-       const char *o = NULL;
-       defaultMachine(NULL, &o);
-       co = (o) ? xstrdup(o) : NULL;
-    }
-    for (x = 0; co[x]; x++)
-       co[x] = tolower(co[x]);
-
-    /* XXX For now, set canonical target to arch-os */
-    if (ct == NULL) {
-       ct = xmalloc(strlen(ca) + sizeof("-") + strlen(co));
-       sprintf(ct, "%s-%s", ca, co);
-    }
+fprintf(stderr, "*** rpmReadConfigFiles(%s,%s) %s\n", mfiles, target, macrofiles);
+    if (mfiles == NULL)
+       mfiles = macrofiles;
 
-/*
- * XXX All this macro pokery/jiggery could be achieved by doing a delayed
- *     rpmInitMacros(NULL, PER-PLATFORM-MACRO-FILE-NAMES);
- */
-    delMacro(NULL, "_target");
-    addMacro(NULL, "_target", NULL, ct, RMIL_RPMRC);
-    delMacro(NULL, "_target_cpu");
-    addMacro(NULL, "_target_cpu", NULL, ca, RMIL_RPMRC);
-    delMacro(NULL, "_target_os");
-    addMacro(NULL, "_target_os", NULL, co, RMIL_RPMRC);
-/*
- * XXX Make sure that per-arch optflags is initialized correctly.
- */
-  { const char *optflags = rpmGetVarArch(RPMVAR_OPTFLAGS, ca);
-    if (optflags != NULL) {
-       delMacro(NULL, "optflags");
-       addMacro(NULL, "optflags", NULL, optflags, RMIL_RPMRC);
-    }
-  }
-
-    if (canontarget)
-       *canontarget = ct;
-    else
-       free(ct);
-    free(ca);
-    free(co);
-}
+    /* Preset target macros */
+    rpmRebuildTargetVars(&target);
 
-void rpmFreeRpmrc(void)
-{
-    int i, j, k;
+    if (mfiles) {
+       mfiles = rpmExpand(mfiles, NULL);
+       rpmInitMacros(NULL, mfiles);
+       xfree(mfiles);
 
-    for (i = 0; i < RPM_MACHTABLE_COUNT; i++) {
-       struct tableType *t;
-       t = tables + i;
-       if (t->equiv.list) {
-           for (j = 0; j < t->equiv.count; j++) {
-               if (t->equiv.list[j].name)      xfree(t->equiv.list[j].name);
-           }
-           xfree(t->equiv.list);
-           t->equiv.list = NULL;
-           t->equiv.count = 0;
-       }
-       if (t->cache.cache) {
-           for (j = 0; j < t->cache.size; j++) {
-               struct machCacheEntry *e;
-               e = t->cache.cache + j;
-               if (e == NULL)  continue;
-               if (e->name)            xfree(e->name);
-               if (e->equivs) {
-                   for (k = 0; k < e->count; k++) {
-                       if (e->equivs[k])       xfree(e->equivs[k]);
-                   }
-                   xfree(e->equivs);
-               }
-           }
-           xfree(t->cache.cache);
-           t->cache.cache = NULL;
-           t->cache.size = 0;
-       }
-       if (t->defaults) {
-           for (j = 0; j < t->defaultsLength; j++) {
-               if (t->defaults[j].name)        xfree(t->defaults[j].name);
-               if (t->defaults[j].defName)     xfree(t->defaults[j].defName);
-           }
-           xfree(t->defaults);
-           t->defaults = NULL;
-           t->defaultsLength = 0;
-       }
-       if (t->canons) {
-           for (j = 0; j < t->canonsLength; j++) {
-               if (t->canons[j].name)          xfree(t->canons[j].name);
-               if (t->canons[j].short_name)    xfree(t->canons[j].short_name);
-           }
-           xfree(t->canons);
-           t->canons = NULL;
-           t->canonsLength = 0;
-       }
+       /* Reset target macros */
+       rpmRebuildTargetVars(&target);
     }
 
-    for (i = 0; i < RPMVAR_NUM; i++) {
-       struct rpmvarValue *this;
-       while ((this = values[i].next) != NULL) {
-           values[i].next = this->next;
-           if (this->value)    xfree(this->value);
-           if (this->arch)     xfree(this->arch);
-           xfree(this);
-       }
-       if (values[i].value)
-           xfree(values[i].value);
-       values[i].value = NULL;
-       if (values[i].arch)
-           xfree(values[i].arch);
-       values[i].arch = NULL;
-    }
-    if (current[OS])
-       xfree(current[OS]);
-    current[OS] = NULL;
-    if (current[ARCH])
-       xfree(current[ARCH]);
-    current[ARCH] = NULL;
-    defaultsInitialized = 0;
-    return;
+    return 0;
 }
 
 int rpmShowRC(FILE *fp)
 {
-    struct rpmOption *opt;
-    int i;
-    struct machEquivTable * equivTable;
-
-    /* the caller may set the build arch which should be printed here */
-    fprintf(fp, "ARCHITECTURE AND OS:\n");
-    fprintf(fp, "build arch            : %s\n", current[ARCH]);
-
-    fprintf(fp, "compatible build archs:");
-    equivTable = &tables[RPM_MACHTABLE_BUILDARCH].equiv;
-    for (i = 0; i < equivTable->count; i++)
-       fprintf(fp," %s", equivTable->list[i].name);
-    fprintf(fp, "\n");
-
-    fprintf(fp, "build os              : %s\n", current[OS]);
-
-    fprintf(fp, "compatible build os's :");
-    equivTable = &tables[RPM_MACHTABLE_BUILDOS].equiv;
-    for (i = 0; i < equivTable->count; i++)
-       fprintf(fp," %s", equivTable->list[i].name);
-    fprintf(fp, "\n");
-
-    rpmSetTables(RPM_MACHTABLE_INSTARCH, RPM_MACHTABLE_INSTOS);
-    rpmSetMachine(NULL, NULL); /* XXX WTFO? Why bother? */
-
-    fprintf(fp, "install arch          : %s\n", current[ARCH]);
-    fprintf(fp, "install os            : %s\n", current[OS]);
-
-    fprintf(fp, "compatible archs      :");
-    equivTable = &tables[RPM_MACHTABLE_INSTARCH].equiv;
-    for (i = 0; i < equivTable->count; i++)
-       fprintf(fp," %s", equivTable->list[i].name);
-    fprintf(fp, "\n");
-
-    fprintf(fp, "compatible os's       :");
-    equivTable = &tables[RPM_MACHTABLE_INSTOS].equiv;
-    for (i = 0; i < equivTable->count; i++)
-       fprintf(fp," %s", equivTable->list[i].name);
-    fprintf(fp, "\n");
-
-    fprintf(fp, "\nRPMRC VALUES:\n");
-    for (i = 0, opt = optionTable; i < optionTableSize; i++, opt++) {
-       const char *s = rpmGetVar(opt->var);
-       if (s != NULL || rpmGetVerbosity() < RPMMESS_NORMAL)
-           fprintf(fp, "%-21s : %s\n", opt->name, s ? s : "(not set)");
-    }
-    fprintf(fp, "\n");
-
-    fprintf(fp, "Features supported by rpmlib:\n");
-    rpmShowRpmlibProvides(fp);
-    fprintf(fp, "\n");
-
-    rpmDumpMacroTable(NULL, fp);
-
     return 0;
 }
index 90961d2..2dd8b01 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-08-14 09:19-0400\n"
+"POT-Creation-Date: 2000-08-27 15:15-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"
@@ -14,7 +14,7 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: ENCODING\n"
 
-#: build.c:25 lib/rpminstall.c:451
+#: build.c:25 lib/rpminstall.c:455
 #, c-format
 msgid "cannot open %s/packages.rpm\n"
 msgstr ""
@@ -28,39 +28,39 @@ msgstr ""
 msgid "Unable to open spec file %s: %s\n"
 msgstr ""
 
-#: build.c:128 build.c:141
+#: build.c:126 build.c:139
 #, c-format
 msgid "Failed to open tar pipe: %s\n"
 msgstr ""
 
 #. Give up
-#: build.c:149
+#: build.c:147
 #, c-format
 msgid "Failed to read spec file from %s\n"
 msgstr ""
 
-#: build.c:176
+#: build.c:174
 #, c-format
 msgid "Failed to rename %s to %s: %s\n"
 msgstr ""
 
-#: build.c:216
+#: build.c:214
 #, c-format
 msgid "File is not a regular file: %s\n"
 msgstr ""
 
-#: build.c:223
+#: build.c:221
 #, c-format
 msgid "File %s does not appear to be a specfile.\n"
 msgstr ""
 
 #. parse up the build operators
-#: build.c:284
+#: build.c:282
 #, c-format
 msgid "Building target platforms: %s\n"
 msgstr ""
 
-#: build.c:299
+#: build.c:297
 #, c-format
 msgid "Building for target %s\n"
 msgstr ""
@@ -691,15 +691,15 @@ msgstr ""
 msgid "bin/src package (prep, compile, install, package)"
 msgstr ""
 
-#: lib/poptBT.c:155 rpm.c:473 rpmqv.c:586
+#: lib/poptBT.c:156 rpm.c:473 rpmqv.c:586
 msgid "skip straight to specified stage (only for c,i)"
 msgstr ""
 
-#: lib/poptBT.c:145 rpm.c:475 rpmqv.c:588
+#: lib/poptBT.c:146 rpm.c:475 rpmqv.c:588
 msgid "remove build tree when done"
 msgstr ""
 
-#: lib/poptBT.c:151 rpm.c:477 rpmqv.c:590
+#: lib/poptBT.c:152 rpm.c:477 rpmqv.c:590
 msgid "remove sources when done"
 msgstr ""
 
@@ -1239,7 +1239,7 @@ msgstr ""
 msgid "  Package specification options:"
 msgstr ""
 
-#: lib/poptQV.c:62 rpmqv.c:433
+#: lib/poptQV.c:66 rpmqv.c:433
 msgid "query/verify all packages"
 msgstr ""
 
@@ -1424,644 +1424,644 @@ msgstr ""
 msgid "no tar files given for build"
 msgstr ""
 
-#: build/build.c:110 build/pack.c:354
+#: build/build.c:111 build/pack.c:355
 msgid "Unable to open temp file."
 msgstr ""
 
-#: build/build.c:189
+#: build/build.c:190
 #, c-format
 msgid "Executing(%s): %s\n"
 msgstr ""
 
-#: build/build.c:195
+#: build/build.c:196
 #, c-format
 msgid "Exec of %s failed (%s): %s"
 msgstr ""
 
-#: build/build.c:203
+#: build/build.c:204
 #, c-format
 msgid "Bad exit status from %s (%s)"
 msgstr ""
 
-#: build/expression.c:211
+#: build/expression.c:207
 msgid "syntax error while parsing =="
 msgstr ""
 
-#: build/expression.c:241
+#: build/expression.c:237
 msgid "syntax error while parsing &&"
 msgstr ""
 
-#: build/expression.c:250
+#: build/expression.c:246
 msgid "syntax error while parsing ||"
 msgstr ""
 
-#: build/expression.c:292
+#: build/expression.c:288
 msgid "parse error in expression"
 msgstr ""
 
-#: build/expression.c:321
+#: build/expression.c:317
 msgid "unmatched ("
 msgstr ""
 
-#: build/expression.c:339
+#: build/expression.c:335
 msgid "undefined identifier"
 msgstr ""
 
-#: build/expression.c:358
+#: build/expression.c:354
 msgid "- only on numbers"
 msgstr ""
 
-#: build/expression.c:374
+#: build/expression.c:370
 msgid "! only on numbers"
 msgstr ""
 
-#: build/expression.c:413 build/expression.c:458 build/expression.c:515
-#: build/expression.c:602
+#: build/expression.c:409 build/expression.c:454 build/expression.c:511
+#: build/expression.c:598
 msgid "types must match"
 msgstr ""
 
-#: build/expression.c:426
+#: build/expression.c:422
 msgid "* / not suported for strings"
 msgstr ""
 
-#: build/expression.c:474
+#: build/expression.c:470
 msgid "- not suported for strings"
 msgstr ""
 
-#: build/expression.c:615
+#: build/expression.c:611
 msgid "&& and || not suported for strings"
 msgstr ""
 
-#: build/expression.c:649 build/expression.c:697
+#: build/expression.c:645 build/expression.c:693
 msgid "syntax error in expression"
 msgstr ""
 
-#: build/files.c:204
+#: build/files.c:205
 #, c-format
 msgid "TIMECHECK failure: %s\n"
 msgstr ""
 
-#: build/files.c:249 build/files.c:331 build/files.c:494
+#: build/files.c:250 build/files.c:332 build/files.c:495
 #, c-format
 msgid "Missing '(' in %s %s"
 msgstr ""
 
-#: build/files.c:260 build/files.c:448 build/files.c:505
+#: build/files.c:261 build/files.c:449 build/files.c:506
 #, c-format
 msgid "Missing ')' in %s(%s"
 msgstr ""
 
-#: build/files.c:298 build/files.c:473
+#: build/files.c:299 build/files.c:474
 #, c-format
 msgid "Invalid %s token: %s"
 msgstr ""
 
-#: build/files.c:347
+#: build/files.c:348
 #, c-format
 msgid "Non-white space follows %s(): %s"
 msgstr ""
 
-#: build/files.c:385
+#: build/files.c:386
 #, c-format
 msgid "Bad syntax: %s(%s)"
 msgstr ""
 
-#: build/files.c:395
+#: build/files.c:396
 #, c-format
 msgid "Bad mode spec: %s(%s)"
 msgstr ""
 
-#: build/files.c:407
+#: build/files.c:408
 #, c-format
 msgid "Bad dirmode spec: %s(%s)"
 msgstr ""
 
-#: build/files.c:531
+#: build/files.c:532
 msgid "Unusual locale length: \"%.*s\" in %%lang(%s)"
 msgstr ""
 
-#: build/files.c:541
+#: build/files.c:542
 msgid "Duplicate locale %.*s in %%lang(%s)"
 msgstr ""
 
-#: build/files.c:666
+#: build/files.c:667
 msgid "Hit limit for %%docdir"
 msgstr ""
 
-#: build/files.c:672
+#: build/files.c:673
 msgid "Only one arg for %%docdir"
 msgstr ""
 
 #. We already got a file -- error
-#: build/files.c:700
+#: build/files.c:701
 #, c-format
 msgid "Two files on one line: %s"
 msgstr ""
 
-#: build/files.c:713
+#: build/files.c:714
 #, c-format
 msgid "File must begin with \"/\": %s"
 msgstr ""
 
-#: build/files.c:725
+#: build/files.c:726
 msgid "Can't mix special %%doc with other forms: %s"
 msgstr ""
 
-#: build/files.c:812
+#: build/files.c:813
 #, c-format
 msgid "File listed twice: %s"
 msgstr ""
 
-#: build/files.c:921
+#: build/files.c:922
 #, c-format
 msgid "Symlink points to BuildRoot: %s -> %s"
 msgstr ""
 
-#: build/files.c:1010
+#: build/files.c:1011
 #, c-format
 msgid "File doesn't match prefix (%s): %s"
 msgstr ""
 
-#: build/files.c:1020
+#: build/files.c:1021
 #, c-format
 msgid "File not found: %s"
 msgstr ""
 
-#: build/files.c:1063
+#: build/files.c:1064
 #, c-format
 msgid "Bad owner/group: %s\n"
 msgstr ""
 
-#: build/files.c:1075
+#: build/files.c:1076
 #, c-format
 msgid "File %4d: %07o %s.%s\t %s\n"
 msgstr ""
 
-#: build/files.c:1149
+#: build/files.c:1150
 #, c-format
 msgid "File needs leading \"/\": %s"
 msgstr ""
 
-#: build/files.c:1178
+#: build/files.c:1179
 #, c-format
 msgid "File not found by glob: %s"
 msgstr ""
 
-#: build/files.c:1230
+#: build/files.c:1231
 msgid "Could not open %%files file %s: %s"
 msgstr ""
 
-#: build/files.c:1239 build/pack.c:100
+#: build/files.c:1240 build/pack.c:101
 #, c-format
 msgid "line: %s"
 msgstr ""
 
-#: build/files.c:1566
+#: build/files.c:1567
 #, c-format
 msgid "Bad file: %s: %s"
 msgstr ""
 
-#: build/files.c:1578 build/parsePrep.c:34
+#: build/files.c:1579 build/parsePrep.c:35
 #, c-format
 msgid "Bad owner/group: %s"
 msgstr ""
 
 #. XXX this error message is probably not seen.
-#: build/files.c:1633
+#: build/files.c:1634
 #, c-format
 msgid "Couldn't exec %s: %s"
 msgstr ""
 
-#: build/files.c:1638
+#: build/files.c:1639
 #, c-format
 msgid "Couldn't fork %s: %s"
 msgstr ""
 
-#: build/files.c:1720
+#: build/files.c:1721
 #, c-format
 msgid "%s failed"
 msgstr ""
 
-#: build/files.c:1724
+#: build/files.c:1725
 #, c-format
 msgid "failed to write all data to %s"
 msgstr ""
 
-#: build/files.c:1820
+#: build/files.c:1821
 #, c-format
 msgid "Finding  %s: (using %s)...\n"
 msgstr ""
 
-#: build/files.c:1848 build/files.c:1858
+#: build/files.c:1849 build/files.c:1859
 #, c-format
 msgid "Failed to find %s:"
 msgstr ""
 
-#: build/files.c:1968
+#: build/files.c:1969
 #, c-format
 msgid "Processing files: %s-%s-%s\n"
 msgstr ""
 
-#: build/names.c:46 build/names.c:79
+#: build/names.c:47 build/names.c:80
 msgid "RPMERR_INTERNAL: Hit limit in getUname()\n"
 msgstr ""
 
-#: build/names.c:113 build/names.c:146
+#: build/names.c:114 build/names.c:147
 msgid "RPMERR_INTERNAL: Hit limit in getGname()\n"
 msgstr ""
 
-#: build/names.c:186
+#: build/names.c:187
 #, c-format
 msgid "Could not canonicalize hostname: %s\n"
 msgstr ""
 
-#: build/pack.c:48
+#: build/pack.c:49
 #, c-format
 msgid "create archive failed on file %s: %s"
 msgstr ""
 
-#: build/pack.c:68
+#: build/pack.c:69
 #, c-format
 msgid "cpio_copy write failed: %s"
 msgstr ""
 
-#: build/pack.c:75
+#: build/pack.c:76
 #, c-format
 msgid "cpio_copy read failed: %s"
 msgstr ""
 
-#: build/pack.c:155
+#: build/pack.c:156
 #, c-format
 msgid "Could not open PreIn file: %s"
 msgstr ""
 
-#: build/pack.c:162
+#: build/pack.c:163
 #, c-format
 msgid "Could not open PreUn file: %s"
 msgstr ""
 
-#: build/pack.c:169
+#: build/pack.c:170
 #, c-format
 msgid "Could not open PostIn file: %s"
 msgstr ""
 
-#: build/pack.c:176
+#: build/pack.c:177
 #, c-format
 msgid "Could not open PostUn file: %s"
 msgstr ""
 
-#: build/pack.c:184
+#: build/pack.c:185
 #, c-format
 msgid "Could not open VerifyScript file: %s"
 msgstr ""
 
-#: build/pack.c:199
+#: build/pack.c:200
 #, c-format
 msgid "Could not open Trigger script file: %s"
 msgstr ""
 
-#: build/pack.c:226
+#: build/pack.c:227
 #, c-format
 msgid "readRPM: open %s: %s\n"
 msgstr ""
 
-#: build/pack.c:236
+#: build/pack.c:237
 #, c-format
 msgid "readRPM: read %s: %s\n"
 msgstr ""
 
-#: build/pack.c:257
+#: build/pack.c:258
 #, c-format
 msgid "readRPM: %s is not an RPM package\n"
 msgstr ""
 
-#: build/pack.c:263
+#: build/pack.c:264
 #, c-format
 msgid "readRPM: reading header from %s\n"
 msgstr ""
 
-#: build/pack.c:366
+#: build/pack.c:367
 msgid "Bad CSA data"
 msgstr ""
 
-#: build/pack.c:402
+#: build/pack.c:403
 #, c-format
 msgid "Could not open %s: %s\n"
 msgstr ""
 
-#: build/pack.c:434
+#: build/pack.c:437
 #, c-format
 msgid "Unable to write package: %s"
 msgstr ""
 
-#: build/pack.c:449
+#: build/pack.c:452
 #, c-format
 msgid "Generating signature: %d\n"
 msgstr ""
 
-#: build/pack.c:465
+#: build/pack.c:468
 #, c-format
 msgid "Unable to open sigtarget %s: %s"
 msgstr ""
 
-#: build/pack.c:475
+#: build/pack.c:478
 #, c-format
 msgid "Unable to read sigtarget %s: %s"
 msgstr ""
 
-#: build/pack.c:485
+#: build/pack.c:488
 #, c-format
 msgid "Unable to write package %s: %s"
 msgstr ""
 
-#: build/pack.c:500
+#: build/pack.c:503
 #, c-format
 msgid "Wrote: %s\n"
 msgstr ""
 
-#: build/pack.c:564
+#: build/pack.c:567
 #, c-format
 msgid "Could not generate output filename for package %s: %s\n"
 msgstr ""
 
-#: build/pack.c:581
+#: build/pack.c:584
 #, c-format
 msgid "cannot create %s: %s\n"
 msgstr ""
 
-#: build/parseBuildInstallClean.c:31
+#: build/parseBuildInstallClean.c:32
 #, c-format
 msgid "line %d: second %s"
 msgstr ""
 
-#: build/parseChangelog.c:108
+#: build/parseChangelog.c:109
 msgid "%%changelog entries must start with *"
 msgstr ""
 
-#: build/parseChangelog.c:116
+#: build/parseChangelog.c:117
 msgid "incomplete %%changelog entry"
 msgstr ""
 
-#: build/parseChangelog.c:131
+#: build/parseChangelog.c:132
 msgid "bad date in %%changelog: %s"
 msgstr ""
 
-#: build/parseChangelog.c:136
+#: build/parseChangelog.c:137
 msgid "%%changelog not in decending chronological order"
 msgstr ""
 
-#: build/parseChangelog.c:144 build/parseChangelog.c:155
+#: build/parseChangelog.c:145 build/parseChangelog.c:156
 msgid "missing name in %%changelog"
 msgstr ""
 
-#: build/parseChangelog.c:162
+#: build/parseChangelog.c:163
 msgid "no description in %%changelog"
 msgstr ""
 
-#: build/parseDescription.c:38
+#: build/parseDescription.c:39
 msgid "line %d: Error parsing %%description: %s"
 msgstr ""
 
-#: build/parseDescription.c:51 build/parseFiles.c:46 build/parseScript.c:173
+#: build/parseDescription.c:52 build/parseFiles.c:47 build/parseScript.c:174
 #, c-format
 msgid "line %d: Bad option %s: %s"
 msgstr ""
 
-#: build/parseDescription.c:64 build/parseFiles.c:58 build/parseScript.c:186
+#: build/parseDescription.c:65 build/parseFiles.c:59 build/parseScript.c:187
 #, c-format
 msgid "line %d: Too many names: %s"
 msgstr ""
 
-#: build/parseDescription.c:74 build/parseFiles.c:67 build/parseScript.c:196
+#: build/parseDescription.c:75 build/parseFiles.c:68 build/parseScript.c:197
 #, c-format
 msgid "line %d: Package does not exist: %s"
 msgstr ""
 
-#: build/parseDescription.c:86
+#: build/parseDescription.c:87
 #, c-format
 msgid "line %d: Second description"
 msgstr ""
 
-#: build/parseFiles.c:32
+#: build/parseFiles.c:33
 msgid "line %d: Error parsing %%files: %s"
 msgstr ""
 
-#: build/parseFiles.c:74
+#: build/parseFiles.c:75
 msgid "line %d: Second %%files list"
 msgstr ""
 
-#: build/parsePreamble.c:142
+#: build/parsePreamble.c:149
 #, c-format
 msgid "Architecture is excluded: %s"
 msgstr ""
 
-#: build/parsePreamble.c:147
+#: build/parsePreamble.c:154
 #, c-format
 msgid "Architecture is not included: %s"
 msgstr ""
 
-#: build/parsePreamble.c:152
+#: build/parsePreamble.c:159
 #, c-format
 msgid "OS is excluded: %s"
 msgstr ""
 
-#: build/parsePreamble.c:157
+#: build/parsePreamble.c:164
 #, c-format
 msgid "OS is not included: %s"
 msgstr ""
 
-#: build/parsePreamble.c:171
+#: build/parsePreamble.c:178
 #, c-format
 msgid "%s field must be present in package: %s"
 msgstr ""
 
-#: build/parsePreamble.c:196
+#: build/parsePreamble.c:203
 #, c-format
 msgid "Duplicate %s entries in package: %s"
 msgstr ""
 
-#: build/parsePreamble.c:244
+#: build/parsePreamble.c:251
 #, c-format
 msgid "Unable to open icon %s: %s"
 msgstr ""
 
-#: build/parsePreamble.c:262
+#: build/parsePreamble.c:269
 #, c-format
 msgid "Unable to read icon %s: %s"
 msgstr ""
 
-#: build/parsePreamble.c:275
+#: build/parsePreamble.c:282
 #, c-format
 msgid "Unknown icon type: %s"
 msgstr ""
 
-#: build/parsePreamble.c:338
+#: build/parsePreamble.c:345
 #, c-format
 msgid "line %d: Malformed tag: %s"
 msgstr ""
 
 #. Empty field
-#: build/parsePreamble.c:346
+#: build/parsePreamble.c:353
 #, c-format
 msgid "line %d: Empty tag: %s"
 msgstr ""
 
-#: build/parsePreamble.c:368 build/parsePreamble.c:375
+#: build/parsePreamble.c:375 build/parsePreamble.c:382
 #, c-format
 msgid "line %d: Illegal char '-' in %s: %s"
 msgstr ""
 
-#: build/parsePreamble.c:432 build/parseSpec.c:376
+#: build/parsePreamble.c:439 build/parseSpec.c:386
 #, c-format
 msgid "BuildRoot can not be \"/\": %s"
 msgstr ""
 
-#: build/parsePreamble.c:445
+#: build/parsePreamble.c:452
 #, c-format
 msgid "line %d: Prefixes must not end with \"/\": %s"
 msgstr ""
 
-#: build/parsePreamble.c:457
+#: build/parsePreamble.c:464
 #, c-format
 msgid "line %d: Docdir must begin with '/': %s"
 msgstr ""
 
-#: build/parsePreamble.c:469
+#: build/parsePreamble.c:476
 #, c-format
 msgid "line %d: Epoch/Serial field must be a number: %s"
 msgstr ""
 
-#: build/parsePreamble.c:527
+#: build/parsePreamble.c:534
 #, c-format
 msgid "line %d: Bad BuildArchitecture format: %s"
 msgstr ""
 
-#: build/parsePreamble.c:536
+#: build/parsePreamble.c:543
 #, c-format
 msgid "Internal error: Bogus tag %d"
 msgstr ""
 
-#: build/parsePreamble.c:675
+#: build/parsePreamble.c:682
 #, c-format
 msgid "Bad package specification: %s"
 msgstr ""
 
-#: build/parsePreamble.c:681
+#: build/parsePreamble.c:688
 #, c-format
 msgid "Package already exists: %s"
 msgstr ""
 
-#: build/parsePreamble.c:708
+#: build/parsePreamble.c:715
 #, c-format
 msgid "line %d: Unknown tag: %s"
 msgstr ""
 
-#: build/parsePreamble.c:733
+#: build/parsePreamble.c:740
 msgid "Spec file can't use BuildRoot"
 msgstr ""
 
-#: build/parsePrep.c:30
+#: build/parsePrep.c:31
 #, c-format
 msgid "Bad source: %s: %s"
 msgstr ""
 
-#: build/parsePrep.c:57
+#: build/parsePrep.c:58
 #, c-format
 msgid "No patch number %d"
 msgstr ""
 
-#: build/parsePrep.c:139
+#: build/parsePrep.c:140
 #, c-format
 msgid "No source number %d"
 msgstr ""
 
-#: build/parsePrep.c:158
+#: build/parsePrep.c:159
 #, c-format
 msgid "Couldn't download nosource %s: %s"
 msgstr ""
 
-#: build/parsePrep.c:224
+#: build/parsePrep.c:225
 msgid "Error parsing %%setup: %s"
 msgstr ""
 
-#: build/parsePrep.c:239
+#: build/parsePrep.c:240
 msgid "line %d: Bad arg to %%setup %c: %s"
 msgstr ""
 
-#: build/parsePrep.c:257
+#: build/parsePrep.c:258
 msgid "line %d: Bad %%setup option %s: %s"
 msgstr ""
 
-#: build/parsePrep.c:384
+#: build/parsePrep.c:385
 msgid "line %d: Need arg to %%patch -b: %s"
 msgstr ""
 
-#: build/parsePrep.c:392
+#: build/parsePrep.c:393
 msgid "line %d: Need arg to %%patch -z: %s"
 msgstr ""
 
-#: build/parsePrep.c:404
+#: build/parsePrep.c:405
 msgid "line %d: Need arg to %%patch -p: %s"
 msgstr ""
 
-#: build/parsePrep.c:410
+#: build/parsePrep.c:411
 msgid "line %d: Bad arg to %%patch -p: %s"
 msgstr ""
 
-#: build/parsePrep.c:417
+#: build/parsePrep.c:418
 msgid "Too many patches!"
 msgstr ""
 
-#: build/parsePrep.c:421
+#: build/parsePrep.c:422
 msgid "line %d: Bad arg to %%patch: %s"
 msgstr ""
 
-#: build/parsePrep.c:458
+#: build/parsePrep.c:459
 msgid "line %d: second %%prep"
 msgstr ""
 
-#: build/parseReqs.c:97
+#: build/parseReqs.c:98
 #, c-format
 msgid ""
 "line %d: Dependency tokens must begin with alpha-numeric, '_' or '/': %s"
 msgstr ""
 
-#: build/parseReqs.c:108
+#: build/parseReqs.c:109
 #, c-format
 msgid "line %d: File name not permitted: %s"
 msgstr ""
 
-#: build/parseReqs.c:140
+#: build/parseReqs.c:141
 #, c-format
 msgid "line %d: Versioned file name not permitted: %s"
 msgstr ""
 
-#: build/parseReqs.c:170
+#: build/parseReqs.c:171
 #, c-format
 msgid "line %d: Version required: %s"
 msgstr ""
 
-#: build/parseScript.c:141
+#: build/parseScript.c:142
 #, c-format
 msgid "line %d: triggers must have --: %s"
 msgstr ""
 
-#: build/parseScript.c:151 build/parseScript.c:214
+#: build/parseScript.c:152 build/parseScript.c:215
 #, c-format
 msgid "line %d: Error parsing %s: %s"
 msgstr ""
 
-#: build/parseScript.c:161
+#: build/parseScript.c:162
 #, c-format
 msgid "line %d: script program must begin with '/': %s"
 msgstr ""
 
-#: build/parseScript.c:205
+#: build/parseScript.c:206
 #, c-format
 msgid "line %d: Second %s"
 msgstr ""
 
-#: build/parseSpec.c:137
+#: build/parseSpec.c:136
 #, c-format
 msgid "line %d: %s"
 msgstr ""
@@ -2076,301 +2076,301 @@ msgstr ""
 msgid "Unclosed %%if"
 msgstr ""
 
-#: build/parseSpec.c:261
+#: build/parseSpec.c:271
 #, c-format
 msgid "%s:%d: parseExpressionBoolean returns %d"
 msgstr ""
 
 #. Got an else with no %if !
-#: build/parseSpec.c:269
+#: build/parseSpec.c:279
 msgid "%s:%d: Got a %%else with no if"
 msgstr ""
 
 #. Got an end with no %if !
-#: build/parseSpec.c:280
+#: build/parseSpec.c:290
 msgid "%s:%d: Got a %%endif with no if"
 msgstr ""
 
-#: build/parseSpec.c:294 build/parseSpec.c:303
+#: build/parseSpec.c:304 build/parseSpec.c:313
 msgid "malformed %%include statement"
 msgstr ""
 
-#: build/parseSpec.c:471
+#: build/parseSpec.c:489
 msgid "No buildable architectures"
 msgstr ""
 
-#: build/parseSpec.c:520
+#: build/parseSpec.c:544
 msgid "Package has no %%description: %s"
 msgstr ""
 
-#: build/spec.c:35
+#: build/spec.c:36
 #, c-format
 msgid "archive = %s, fs = %s\n"
 msgstr ""
 
-#: build/spec.c:244
+#: build/spec.c:245
 #, c-format
 msgid "line %d: Bad number: %s"
 msgstr ""
 
-#: build/spec.c:250
+#: build/spec.c:251
 #, c-format
 msgid "line %d: Bad no%s number: %d"
 msgstr ""
 
-#: build/spec.c:309
+#: build/spec.c:310
 #, c-format
 msgid "line %d: Bad %s number: %s\n"
 msgstr ""
 
-#: lib/cpio.c:362
+#: lib/cpio.c:378
 #, c-format
 msgid "can't rename %s to %s: %s\n"
 msgstr ""
 
-#: lib/cpio.c:368
+#: lib/cpio.c:384
 #, c-format
 msgid "can't unlink %s: %s\n"
 msgstr ""
 
-#: lib/cpio.c:612
+#: lib/cpio.c:632
 #, c-format
 msgid "getNextHeader: %s\n"
 msgstr ""
 
-#: lib/cpio.c:1073
+#: lib/cpio.c:1093
 #, c-format
 msgid "(error 0x%x)"
 msgstr ""
 
-#: lib/cpio.c:1076
+#: lib/cpio.c:1096
 msgid "Bad magic"
 msgstr ""
 
-#: lib/cpio.c:1077
+#: lib/cpio.c:1097
 msgid "Bad/unreadable  header"
 msgstr ""
 
-#: lib/cpio.c:1095
+#: lib/cpio.c:1115
 msgid "Header size too big"
 msgstr ""
 
-#: lib/cpio.c:1096
+#: lib/cpio.c:1116
 msgid "Unknown file type"
 msgstr ""
 
-#: lib/cpio.c:1097
+#: lib/cpio.c:1117
 msgid "Missing hard link"
 msgstr ""
 
-#: lib/cpio.c:1098
+#: lib/cpio.c:1118
 msgid "Internal error"
 msgstr ""
 
-#: lib/cpio.c:1107
+#: lib/cpio.c:1127
 msgid " failed - "
 msgstr ""
 
 #. XXX legacy epoch-less requires/conflicts compatibility
-#: lib/depends.c:456
+#: lib/depends.c:522
 #, c-format
 msgid ""
 "the \"B\" dependency needs an epoch (assuming same as \"A\")\n"
 "\tA %s\tB %s\n"
 msgstr ""
 
-#: lib/depends.c:485
+#: lib/depends.c:551
 #, c-format
 msgid "  %s    A %s\tB %s\n"
 msgstr ""
 
-#: lib/depends.c:825
+#: lib/depends.c:905
 #, c-format
 msgid "%s: %-45s YES (added files)\n"
 msgstr ""
 
-#: lib/depends.c:874
+#: lib/depends.c:964
 #, c-format
 msgid "%s: %-45s YES (added provide)\n"
 msgstr ""
 
-#: lib/depends.c:918
+#: lib/depends.c:1016
 #, c-format
 msgid "%s: %-45s %-3s (cached)\n"
 msgstr ""
 
-#: lib/depends.c:935
+#: lib/depends.c:1035
 #, c-format
 msgid "%s: %-45s YES (rpmrc provides)\n"
 msgstr ""
 
-#: lib/depends.c:951
+#: lib/depends.c:1052
 #, c-format
 msgid "%s: %-45s YES (rpmlib provides)\n"
 msgstr ""
 
-#: lib/depends.c:972
+#: lib/depends.c:1073
 #, c-format
 msgid "%s: %-45s YES (db files)\n"
 msgstr ""
 
-#: lib/depends.c:985
+#: lib/depends.c:1086
 #, c-format
 msgid "%s: %-45s YES (db provides)\n"
 msgstr ""
 
-#: lib/depends.c:998
+#: lib/depends.c:1099
 #, c-format
 msgid "%s: %-45s NO\n"
 msgstr ""
 
-#: lib/depends.c:1019
+#: lib/depends.c:1120
 #, c-format
 msgid "%s: (%s, %s) added to Depends cache.\n"
 msgstr ""
 
 #. requirements are not satisfied.
-#: lib/depends.c:1073
+#: lib/depends.c:1174
 #, c-format
 msgid "package %s-%s-%s require not satisfied: %s\n"
 msgstr ""
 
 #. conflicts exist.
-#: lib/depends.c:1140
+#: lib/depends.c:1241
 #, c-format
 msgid "package %s conflicts: %s\n"
 msgstr ""
 
-#: lib/depends.c:1266
+#: lib/depends.c:1367
 #, c-format
 msgid "loop in prerequisite chain: %s"
 msgstr ""
 
-#: lib/db1.c:96 lib/db3.c:441
+#: lib/db1.c:102 lib/db3.c:449
 #, c-format
 msgid "db%d error(%d)"
 msgstr ""
 
-#: lib/db1.c:98 lib/db3.c:443
+#: lib/db1.c:104 lib/db3.c:451
 #, c-format
 msgid " performing %s"
 msgstr ""
 
-#: lib/db1.c:390
+#: lib/db1.c:396
 #, c-format
 msgid "closed  db file        %s\n"
 msgstr ""
 
-#: lib/db1.c:393
+#: lib/db1.c:399
 #, c-format
 msgid "removed db file        %s\n"
 msgstr ""
 
-#: lib/db1.c:424
+#: lib/db1.c:430
 #, c-format
 msgid "bad db file %s"
 msgstr ""
 
-#: lib/db1.c:429
+#: lib/db1.c:435
 #, c-format
 msgid "opening db file        %s mode 0x%x\n"
 msgstr ""
 
 #. XXX check errno validity
-#: lib/db1.c:452
+#: lib/db1.c:458
 #, c-format
 msgid "cannot get %s lock on database"
 msgstr ""
 
-#: lib/db1.c:453 lib/db3.c:1104
+#: lib/db1.c:459 lib/db3.c:1112
 msgid "exclusive"
 msgstr ""
 
-#: lib/db1.c:453 lib/db3.c:1104
+#: lib/db1.c:459 lib/db3.c:1112
 msgid "shared"
 msgstr ""
 
-#: lib/db2.c:133
+#: lib/db2.c:137
 #, c-format
 msgid "closed  db environment %s/%s(%s)\n"
 msgstr ""
 
-#: lib/db2.c:145
+#: lib/db2.c:149
 #, c-format
 msgid "removed db environment %s/%s(%s)\n"
 msgstr ""
 
-#: lib/db2.c:182
+#: lib/db2.c:186
 #, c-format
 msgid "opening db environment %s/%s(%s) %s\n"
 msgstr ""
 
-#: lib/db2.c:557
+#: lib/db2.c:561
 #, c-format
 msgid "closed  db index       %s/%s(%s)\n"
 msgstr ""
 
-#: lib/db2.c:635
+#: lib/db2.c:639
 #, c-format
 msgid "opening db index       %s/%s(%s) %s mode=0x%x\n"
 msgstr ""
 
-#: lib/db3.c:257
+#: lib/db3.c:265
 #, c-format
 msgid "dbiSetConfig: unrecognized db option: \"%s\" ignored\n"
 msgstr ""
 
-#: lib/db3.c:285
+#: lib/db3.c:293
 #, c-format
 msgid "%s has invalid numeric value, skipped\n"
 msgstr ""
 
-#: lib/db3.c:293
+#: lib/db3.c:301
 #, c-format
 msgid "%s has too large or too small long value, skipped\n"
 msgstr ""
 
-#: lib/db3.c:301
+#: lib/db3.c:309
 #, c-format
 msgid "%s has too large or too small integer value, skipped\n"
 msgstr ""
 
-#: lib/db3.c:468
+#: lib/db3.c:476
 #, c-format
 msgid "closed  db environment %s/%s\n"
 msgstr ""
 
-#: lib/db3.c:484
+#: lib/db3.c:492
 #, c-format
 msgid "removed db environment %s/%s\n"
 msgstr ""
 
-#: lib/db3.c:521
+#: lib/db3.c:529
 #, c-format
 msgid "opening db environment %s/%s %s\n"
 msgstr ""
 
-#: lib/db3.c:907
+#: lib/db3.c:915
 #, c-format
 msgid "closed  db index       %s/%s\n"
 msgstr ""
 
-#: lib/db3.c:997
+#: lib/db3.c:1005
 #, c-format
 msgid "opening db index       %s/%s %s mode=0x%x\n"
 msgstr ""
 
-#: lib/db3.c:1102
+#: lib/db3.c:1110
 #, c-format
 msgid "cannot get %s lock on %s/%s\n"
 msgstr ""
 
-#: lib/db3.c:1109
+#: lib/db3.c:1117
 #, c-format
 msgid "locked  db index       %s/%s\n"
 msgstr ""
 
-#: lib/falloc.c:135
+#: lib/falloc.c:140
 #, c-format
 msgid ""
 "free list corrupt (%u)- please run\n"
@@ -2380,669 +2380,670 @@ msgid ""
 "if \"rpm --rebuilddb\" fails to correct the problem.\n"
 msgstr ""
 
-#: lib/formats.c:69 lib/formats.c:86 lib/formats.c:106 lib/formats.c:138
-#: lib/header.c:2092 lib/header.c:2108 lib/header.c:2127
+#: lib/formats.c:86 lib/formats.c:112 lib/formats.c:141 lib/formats.c:182
+#: lib/header.c:2114 lib/header.c:2131 lib/header.c:2151
 msgid "(not a number)"
 msgstr ""
 
-#: lib/fs.c:56
+#: lib/fs.c:60
 #, c-format
 msgid "mntctl() failed to return fugger size: %s"
 msgstr ""
 
-#: lib/fs.c:91 lib/fs.c:261
+#: lib/fs.c:95 lib/fs.c:265
 #, c-format
 msgid "failed to stat %s: %s"
 msgstr ""
 
-#: lib/fs.c:127
+#: lib/fs.c:131
 msgid "getting list of mounted filesystems\n"
 msgstr ""
 
-#: lib/fs.c:132
+#: lib/fs.c:136
 #, c-format
 msgid "failed to open %s: %s"
 msgstr ""
 
-#: lib/fs.c:283
+#: lib/fs.c:287
 #, c-format
 msgid "file %s is on an unknown device"
 msgstr ""
 
 #. This should not be allowed
-#: lib/header.c:219
+#: lib/header.c:223
 msgid "grabData() RPM_STRING_TYPE count must be 1.\n"
 msgstr ""
 
-#: lib/header.c:250 lib/header.c:721 lib/install.c:324
+#: lib/header.c:254 lib/header.c:726 lib/install.c:351
 #, c-format
 msgid "Data type %d not supported\n"
 msgstr ""
 
-#: lib/header.c:1078
+#: lib/header.c:1089
 #, c-format
 msgid "Bad count for headerAddEntry(): %d\n"
 msgstr ""
 
-#: lib/header.c:1485
+#: lib/header.c:1499
 #, c-format
 msgid "missing { after %"
 msgstr ""
 
-#: lib/header.c:1513
+#: lib/header.c:1527
 msgid "missing } after %{"
 msgstr ""
 
-#: lib/header.c:1525
+#: lib/header.c:1539
 msgid "empty tag format"
 msgstr ""
 
-#: lib/header.c:1535
+#: lib/header.c:1549
 msgid "empty tag name"
 msgstr ""
 
-#: lib/header.c:1550
+#: lib/header.c:1564
 msgid "unknown tag"
 msgstr ""
 
-#: lib/header.c:1575
+#: lib/header.c:1589
 msgid "] expected at end of array"
 msgstr ""
 
-#: lib/header.c:1591
+#: lib/header.c:1605
 msgid "unexpected ]"
 msgstr ""
 
-#: lib/header.c:1593
+#: lib/header.c:1607
 msgid "unexpected }"
 msgstr ""
 
-#: lib/header.c:1648
+#: lib/header.c:1665
 msgid "? expected in expression"
 msgstr ""
 
-#: lib/header.c:1655
+#: lib/header.c:1672
 msgid "{ expected after ? in expression"
 msgstr ""
 
-#: lib/header.c:1666 lib/header.c:1701
+#: lib/header.c:1683 lib/header.c:1718
 msgid "} expected in expression"
 msgstr ""
 
-#: lib/header.c:1674
+#: lib/header.c:1691
 msgid ": expected following ? subexpression"
 msgstr ""
 
-#: lib/header.c:1688
+#: lib/header.c:1705
 msgid "{ expected after : in expression"
 msgstr ""
 
-#: lib/header.c:1709
+#: lib/header.c:1726
 msgid "| expected at end of expression"
 msgstr ""
 
-#: lib/header.c:1874
+#: lib/header.c:1893
 msgid "(unknown type)"
 msgstr ""
 
-#: lib/install.c:149 lib/uninstall.c:195
+#: lib/install.c:168 lib/uninstall.c:193
 #, c-format
 msgid "   file: %s action: %s\n"
 msgstr ""
 
-#: lib/install.c:168
+#: lib/install.c:189
 #, c-format
 msgid "user %s does not exist - using root"
 msgstr ""
 
-#: lib/install.c:176
+#: lib/install.c:197
 #, c-format
 msgid "group %s does not exist - using root"
 msgstr ""
 
-#: lib/install.c:205
+#: lib/install.c:230
 msgid "%%instchangelog value in macro file should be a number, but isn't"
 msgstr ""
 
 #. this would probably be a good place to check if disk space
 #. was used up - if so, we should return a different error
-#: lib/install.c:580
+#. XXX FIXME: Fclose with libio destroys errno
+#: lib/install.c:612
 #, c-format
 msgid "unpacking of archive failed%s%s: %s"
 msgstr ""
 
-#: lib/install.c:581
+#: lib/install.c:613
 msgid " on file "
 msgstr ""
 
-#: lib/install.c:625
+#: lib/install.c:657
 msgid "installing a source package\n"
 msgstr ""
 
-#: lib/install.c:645
+#: lib/install.c:677
 #, c-format
 msgid "cannot create sourcedir %s"
 msgstr ""
 
-#: lib/install.c:651 lib/install.c:681
+#: lib/install.c:683 lib/install.c:713
 #, c-format
 msgid "cannot write to %s"
 msgstr ""
 
-#: lib/install.c:655
+#: lib/install.c:687
 #, c-format
 msgid "sources in: %s\n"
 msgstr ""
 
-#: lib/install.c:675
+#: lib/install.c:707
 #, c-format
 msgid "cannot create specdir %s"
 msgstr ""
 
-#: lib/install.c:685
+#: lib/install.c:717
 #, c-format
 msgid "spec file in: %s\n"
 msgstr ""
 
-#: lib/install.c:719 lib/install.c:747
+#: lib/install.c:751 lib/install.c:779
 msgid "source package contains no .spec file"
 msgstr ""
 
-#: lib/install.c:769
+#: lib/install.c:801
 #, c-format
 msgid "renaming %s to %s\n"
 msgstr ""
 
-#: lib/install.c:771 lib/install.c:1044 lib/uninstall.c:28
+#: lib/install.c:803 lib/install.c:1070 lib/uninstall.c:40
 #, c-format
 msgid "rename of %s to %s failed: %s"
 msgstr ""
 
-#: lib/install.c:863
+#: lib/install.c:892
 msgid "source package expected, binary found"
 msgstr ""
 
-#: lib/install.c:913
+#: lib/install.c:939
 #, c-format
 msgid "package: %s-%s-%s files test = %d\n"
 msgstr ""
 
-#: lib/install.c:973
+#: lib/install.c:999
 msgid "stopping install as we're running --test\n"
 msgstr ""
 
-#: lib/install.c:978
+#: lib/install.c:1004
 msgid "running preinstall script (if any)\n"
 msgstr ""
 
-#: lib/install.c:1003
+#: lib/install.c:1029
 #, c-format
 msgid "warning: %s created as %s"
 msgstr ""
 
-#: lib/install.c:1040
+#: lib/install.c:1066
 #, c-format
 msgid "warning: %s saved as %s"
 msgstr ""
 
-#: lib/install.c:1128
+#: lib/install.c:1154
 msgid "running postinstall scripts (if any)\n"
 msgstr ""
 
-#: lib/misc.c:273 lib/misc.c:278 lib/misc.c:284
+#: lib/misc.c:277 lib/misc.c:282 lib/misc.c:288
 #, c-format
 msgid "error creating temporary file %s"
 msgstr ""
 
-#: lib/package.c:52
+#: lib/package.c:60
 msgid "packaging version 1 is not supported by this version of RPM"
 msgstr ""
 
-#: lib/package.c:112
+#: lib/package.c:120
 msgid ""
 "only packaging with major numbers <= 4 is supported by this version of RPM"
 msgstr ""
 
-#: lib/poptBT.c:82
+#: lib/poptBT.c:83
 msgid "buildroot already specified"
 msgstr ""
 
-#: lib/poptBT.c:108
+#: lib/poptBT.c:109
 msgid "build through %%prep stage from spec file"
 msgstr ""
 
-#: lib/poptBT.c:110
+#: lib/poptBT.c:111
 msgid "build through %%build stage from spec file"
 msgstr ""
 
-#: lib/poptBT.c:112
+#: lib/poptBT.c:113
 msgid "build through %%install stage from spec file"
 msgstr ""
 
-#: lib/poptBT.c:114
+#: lib/poptBT.c:115
 msgid "verify %%files section from spec file"
 msgstr ""
 
-#: lib/poptBT.c:116
+#: lib/poptBT.c:117
 msgid "build source and binary package from spec file"
 msgstr ""
 
-#: lib/poptBT.c:118
+#: lib/poptBT.c:119
 msgid "build binary package from spec file"
 msgstr ""
 
-#: lib/poptBT.c:120
+#: lib/poptBT.c:121
 msgid "build source package from spec file"
 msgstr ""
 
-#: lib/poptBT.c:123
+#: lib/poptBT.c:124
 msgid "build through %%prep stage from tar ball"
 msgstr ""
 
-#: lib/poptBT.c:125
+#: lib/poptBT.c:126
 msgid "build through %%build stage from tar ball"
 msgstr ""
 
-#: lib/poptBT.c:127
+#: lib/poptBT.c:128
 msgid "build through %%install stage from tar ball"
 msgstr ""
 
-#: lib/poptBT.c:129
+#: lib/poptBT.c:130
 msgid "verify %%files section from tar ball"
 msgstr ""
 
-#: lib/poptBT.c:131
+#: lib/poptBT.c:132
 msgid "build source and binary package from tar ball"
 msgstr ""
 
-#: lib/poptBT.c:133
+#: lib/poptBT.c:134
 msgid "build binary package from tar ball"
 msgstr ""
 
-#: lib/poptBT.c:135
+#: lib/poptBT.c:136
 msgid "build source package from tar ball"
 msgstr ""
 
-#: lib/poptBT.c:138
+#: lib/poptBT.c:139
 msgid "build binary package from source package"
 msgstr ""
 
-#: lib/poptBT.c:140
+#: lib/poptBT.c:141
 msgid "build through %%install stage from source package"
 msgstr ""
 
-#: lib/poptBT.c:143
+#: lib/poptBT.c:144
 msgid "override build root"
 msgstr ""
 
-#: lib/poptBT.c:147
+#: lib/poptBT.c:148
 msgid "do not execute any stages of the build"
 msgstr ""
 
-#: lib/poptBT.c:149
+#: lib/poptBT.c:150
 msgid "do not accept I18N msgstr's from specfile"
 msgstr ""
 
-#: lib/poptBT.c:153
+#: lib/poptBT.c:154
 msgid "remove specfile when done"
 msgstr ""
 
-#: lib/poptBT.c:157
+#: lib/poptBT.c:158
 msgid "override target platform"
 msgstr ""
 
-#: lib/poptBT.c:159
+#: lib/poptBT.c:160
 msgid "lookup I18N strings in specfile catalog"
 msgstr ""
 
-#: lib/poptQV.c:64
+#: lib/poptQV.c:68
 msgid "query/verify package owning file"
 msgstr ""
 
-#: lib/poptQV.c:66
+#: lib/poptQV.c:70
 msgid "query/verify packages in group"
 msgstr ""
 
-#: lib/poptQV.c:68
+#: lib/poptQV.c:72
 msgid "query/verify a package file"
 msgstr ""
 
-#: lib/poptQV.c:70
+#: lib/poptQV.c:74
 msgid "rpm query mode"
 msgstr ""
 
-#: lib/poptQV.c:74
+#: lib/poptQV.c:78
 msgid "display known query tags"
 msgstr ""
 
-#: lib/poptQV.c:76
+#: lib/poptQV.c:80
 msgid "query a spec file"
 msgstr ""
 
-#: lib/poptQV.c:78
+#: lib/poptQV.c:82
 msgid "query the pacakges triggered by the package"
 msgstr ""
 
-#: lib/poptQV.c:80
+#: lib/poptQV.c:84
 msgid "rpm verify mode"
 msgstr ""
 
-#: lib/poptQV.c:82
+#: lib/poptQV.c:86
 msgid "rpm verify mode (legacy)"
 msgstr ""
 
-#: lib/poptQV.c:84
+#: lib/poptQV.c:88
 msgid "query the packages which require a capability"
 msgstr ""
 
-#: lib/poptQV.c:86
+#: lib/poptQV.c:90
 msgid "query the packages which provide a capability"
 msgstr ""
 
-#: lib/poptQV.c:126
+#: lib/poptQV.c:130
 msgid "list all configuration files"
 msgstr ""
 
-#: lib/poptQV.c:128
+#: lib/poptQV.c:132
 msgid "list all documentation files"
 msgstr ""
 
-#: lib/poptQV.c:130
+#: lib/poptQV.c:134
 msgid "dump basic file information"
 msgstr ""
 
-#: lib/poptQV.c:132
+#: lib/poptQV.c:136
 msgid "list files in package"
 msgstr ""
 
-#: lib/poptQV.c:136
+#: lib/poptQV.c:140
 msgid "use the following query format"
 msgstr ""
 
-#: lib/poptQV.c:138
+#: lib/poptQV.c:142
 msgid "substitute i18n sections into spec file"
 msgstr ""
 
-#: lib/poptQV.c:140
+#: lib/poptQV.c:144
 msgid "display the states of the listed files"
 msgstr ""
 
-#: lib/poptQV.c:142
+#: lib/poptQV.c:146
 msgid "display a verbose file listing"
 msgstr ""
 
-#: lib/problems.c:76
+#: lib/problems.c:80
 #, c-format
 msgid " is needed by %s-%s-%s\n"
 msgstr ""
 
-#: lib/problems.c:79
+#: lib/problems.c:83
 #, c-format
 msgid " conflicts with %s-%s-%s\n"
 msgstr ""
 
-#: lib/problems.c:99
+#: lib/problems.c:103
 #, c-format
 msgid "package %s-%s-%s is for a different architecture"
 msgstr ""
 
-#: lib/problems.c:104
+#: lib/problems.c:108
 #, c-format
 msgid "package %s-%s-%s is for a different operating system"
 msgstr ""
 
-#: lib/problems.c:109
+#: lib/problems.c:113
 #, c-format
 msgid "package %s-%s-%s is already installed"
 msgstr ""
 
-#: lib/problems.c:114
+#: lib/problems.c:118
 #, c-format
 msgid "path %s is not relocateable for package %s-%s-%s"
 msgstr ""
 
-#: lib/problems.c:119
+#: lib/problems.c:123
 #, c-format
 msgid "file %s conflicts between attemped installs of %s-%s-%s and %s-%s-%s"
 msgstr ""
 
-#: lib/problems.c:125
+#: lib/problems.c:129
 #, c-format
 msgid ""
 "file %s from install of %s-%s-%s conflicts with file from package %s-%s-%s"
 msgstr ""
 
-#: lib/problems.c:131
+#: lib/problems.c:135
 #, c-format
 msgid "package %s-%s-%s (which is newer than %s-%s-%s) is already installed"
 msgstr ""
 
-#: lib/problems.c:137
+#: lib/problems.c:141
 #, c-format
 msgid "installing package %s-%s-%s needs %ld%cb on the %s filesystem"
 msgstr ""
 
-#: lib/problems.c:147
+#: lib/problems.c:151
 #, c-format
 msgid "package %s-%s-%s pre-transaction syscall(s): %s failed: %s"
 msgstr ""
 
-#: lib/problems.c:155
+#: lib/problems.c:159
 #, c-format
 msgid "unknown error %d encountered while manipulating package %s-%s-%s"
 msgstr ""
 
-#: lib/query.c:139
+#: lib/query.c:143
 #, c-format
 msgid "error in format: %s\n"
 msgstr ""
 
-#: lib/query.c:201
+#: lib/query.c:205
 msgid "(contains no files)"
 msgstr ""
 
-#: lib/query.c:260
+#: lib/query.c:264
 msgid "normal        "
 msgstr ""
 
-#: lib/query.c:262
+#: lib/query.c:266
 msgid "replaced      "
 msgstr ""
 
-#: lib/query.c:264
+#: lib/query.c:268
 msgid "not installed "
 msgstr ""
 
-#: lib/query.c:266
+#: lib/query.c:270
 msgid "net shared    "
 msgstr ""
 
-#: lib/query.c:268
+#: lib/query.c:272
 #, c-format
 msgid "(unknown %3d) "
 msgstr ""
 
-#: lib/query.c:272
+#: lib/query.c:276
 msgid "(no state)    "
 msgstr ""
 
-#: lib/query.c:289 lib/query.c:332
+#: lib/query.c:293 lib/query.c:336
 msgid "package has neither file owner or id lists"
 msgstr ""
 
-#: lib/query.c:376
+#: lib/query.c:380
 #, c-format
 msgid "can't query %s: %s\n"
 msgstr ""
 
 #. XXX Fstrerror
-#: lib/query.c:493
+#: lib/query.c:497
 #, c-format
 msgid "open of %s failed: %s\n"
 msgstr ""
 
-#: lib/query.c:511
+#: lib/query.c:515
 msgid "old format source packages cannot be queried\n"
 msgstr ""
 
-#: lib/query.c:520 lib/rpminstall.c:234
+#: lib/query.c:524 lib/rpminstall.c:238
 #, c-format
 msgid "%s does not appear to be a RPM package\n"
 msgstr ""
 
-#: lib/query.c:524
+#: lib/query.c:528
 #, c-format
 msgid "query of %s failed\n"
 msgstr ""
 
-#: lib/query.c:557
+#: lib/query.c:561
 #, c-format
 msgid "query of specfile %s failed, can't parse\n"
 msgstr ""
 
-#: lib/query.c:580
+#: lib/query.c:584
 msgid "no packages\n"
 msgstr ""
 
-#: lib/query.c:590
+#: lib/query.c:594
 #, c-format
 msgid "group %s does not contain any packages\n"
 msgstr ""
 
-#: lib/query.c:600
+#: lib/query.c:604
 #, c-format
 msgid "no package triggers %s\n"
 msgstr ""
 
-#: lib/query.c:610
+#: lib/query.c:614
 #, c-format
 msgid "no package requires %s\n"
 msgstr ""
 
-#: lib/query.c:621
+#: lib/query.c:625
 #, c-format
 msgid "no package provides %s\n"
 msgstr ""
 
-#: lib/query.c:651
+#: lib/query.c:655
 #, c-format
 msgid "file %s: %s\n"
 msgstr ""
 
-#: lib/query.c:654
+#: lib/query.c:658
 #, c-format
 msgid "file %s is not owned by any package\n"
 msgstr ""
 
-#: lib/query.c:680
+#: lib/query.c:684
 #, c-format
 msgid "invalid package number: %s\n"
 msgstr ""
 
-#: lib/query.c:683
+#: lib/query.c:687
 #, c-format
 msgid "package record number: %u\n"
 msgstr ""
 
-#: lib/query.c:687
+#: lib/query.c:691
 #, c-format
 msgid "record %d could not be read\n"
 msgstr ""
 
-#: lib/query.c:698 lib/rpminstall.c:464
+#: lib/query.c:702 lib/rpminstall.c:468
 #, c-format
 msgid "package %s is not installed\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:31
+#: lib/rpmchecksig.c:34
 #, c-format
 msgid "%s: open failed: %s\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:42
+#: lib/rpmchecksig.c:45
 msgid "makeTempFile failed\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:74
+#: lib/rpmchecksig.c:77
 #, c-format
 msgid "%s: Fwrite failed: %s\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:80
+#: lib/rpmchecksig.c:83
 #, c-format
 msgid "%s: Fread failed: %s\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:113 lib/rpmchecksig.c:243
+#: lib/rpmchecksig.c:116 lib/rpmchecksig.c:246
 #, c-format
 msgid "%s: readLead failed\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:118
+#: lib/rpmchecksig.c:121
 #, c-format
 msgid "%s: Can't sign v1.0 RPM\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:122
+#: lib/rpmchecksig.c:125
 #, c-format
 msgid "%s: Can't re-sign v2.0 RPM\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:130 lib/rpmchecksig.c:257
+#: lib/rpmchecksig.c:133 lib/rpmchecksig.c:260
 #, c-format
 msgid "%s: rpmReadSignature failed\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:134 lib/rpmchecksig.c:262
+#: lib/rpmchecksig.c:137 lib/rpmchecksig.c:265
 #, c-format
 msgid "%s: No signature available\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:167
+#: lib/rpmchecksig.c:170
 #, c-format
 msgid "%s: writeLead failed: %s\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:173
+#: lib/rpmchecksig.c:176
 #, c-format
 msgid "%s: rpmWriteSignature failed: %s\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:249
+#: lib/rpmchecksig.c:252
 #, c-format
 msgid "%s: No signature available (v1.0 RPM)\n"
 msgstr ""
 
-#: lib/rpmchecksig.c:412
+#: lib/rpmchecksig.c:415
 msgid "NOT OK"
 msgstr ""
 
-#: lib/rpmchecksig.c:413 lib/rpmchecksig.c:427
+#: lib/rpmchecksig.c:416 lib/rpmchecksig.c:430
 msgid " (MISSING KEYS:"
 msgstr ""
 
-#: lib/rpmchecksig.c:415 lib/rpmchecksig.c:429
+#: lib/rpmchecksig.c:418 lib/rpmchecksig.c:432
 msgid ") "
 msgstr ""
 
-#: lib/rpmchecksig.c:416 lib/rpmchecksig.c:430
+#: lib/rpmchecksig.c:419 lib/rpmchecksig.c:433
 msgid " (UNTRUSTED KEYS:"
 msgstr ""
 
-#: lib/rpmchecksig.c:418 lib/rpmchecksig.c:432
+#: lib/rpmchecksig.c:421 lib/rpmchecksig.c:435
 msgid ")"
 msgstr ""
 
-#: lib/rpmchecksig.c:426
+#: lib/rpmchecksig.c:429
 msgid "OK"
 msgstr ""
 
-#: lib/rpmdb.c:95
+#: lib/rpmdb.c:99
 #, c-format
 msgid "dbiTagsInit: unrecognized tag name: \"%s\" ignored\n"
 msgstr ""
 
-#: lib/rpmdb.c:258
+#: lib/rpmdb.c:262
 msgid ""
 "\n"
 "--> This version of rpm was not compiled with support for \"%%_dbapi %d\".\n"
@@ -3051,17 +3052,17 @@ msgid ""
 "\n"
 msgstr ""
 
-#: lib/rpmdb.c:273
+#: lib/rpmdb.c:277
 #, c-format
 msgid "cannot open %s index using db%d - %s (%d)"
 msgstr ""
 
-#: lib/rpmdb.c:293
+#: lib/rpmdb.c:297
 #, c-format
 msgid "cannot open %s index"
 msgstr ""
 
-#: lib/rpmdb.c:308
+#: lib/rpmdb.c:312
 #, c-format
 msgid ""
 "\n"
@@ -3071,7 +3072,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: lib/rpmdb.c:321
+#: lib/rpmdb.c:325
 msgid ""
 "\n"
 "--> The configured %%_dbapi was db%d, but the rpm database is db%d format.\n"
@@ -3081,7 +3082,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: lib/rpmdb.c:336
+#: lib/rpmdb.c:340
 msgid ""
 "\n"
 "--> The rpm database is in db%d format, not the suggested db%d format.\n"
@@ -3092,751 +3093,656 @@ msgid ""
 "\n"
 msgstr ""
 
-#: lib/rpmdb.c:404
+#: lib/rpmdb.c:408
 #, c-format
 msgid "error(%d) getting \"%s\" records from %s index"
 msgstr ""
 
-#: lib/rpmdb.c:522
+#: lib/rpmdb.c:526
 #, c-format
 msgid "error(%d) storing record %s into %s"
 msgstr ""
 
-#: lib/rpmdb.c:531
+#: lib/rpmdb.c:535
 #, c-format
 msgid "error(%d) removing record %s from %s"
 msgstr ""
 
-#: lib/rpmdb.c:766 lib/rpmdb.c:2293
+#: lib/rpmdb.c:770 lib/rpmdb.c:2304
 msgid "no dbpath has been set"
 msgstr ""
 
-#: lib/rpmdb.c:865
+#: lib/rpmdb.c:869
 msgid ""
 "old format database is present; use --rebuilddb to generate a new format "
 "database"
 msgstr ""
 
 #. error
-#: lib/rpmdb.c:1077
+#: lib/rpmdb.c:1081
 #, c-format
 msgid "error(%d) counting packages"
 msgstr ""
 
-#: lib/rpmdb.c:1136 lib/rpmdb.c:1663 lib/uninstall.c:97
+#: lib/rpmdb.c:1140 lib/rpmdb.c:1674
 #, c-format
 msgid "%s: cannot read header at 0x%x"
 msgstr ""
 
-#: lib/rpmdb.c:1716
+#: lib/rpmdb.c:1727
 #, c-format
 msgid "removing 0 %s entries.\n"
 msgstr ""
 
-#: lib/rpmdb.c:1727
+#: lib/rpmdb.c:1738
 #, c-format
 msgid "removing \"%s\" from %s index.\n"
 msgstr ""
 
-#: lib/rpmdb.c:1736
+#: lib/rpmdb.c:1747
 #, c-format
 msgid "removing %d entries from %s index.\n"
 msgstr ""
 
-#: lib/rpmdb.c:1878
+#: lib/rpmdb.c:1889
 #, c-format
 msgid "error(%d) allocating new package instance"
 msgstr ""
 
-#: lib/rpmdb.c:1935
+#: lib/rpmdb.c:1946
 #, c-format
 msgid "adding 0 %s entries.\n"
 msgstr ""
 
-#: lib/rpmdb.c:1951
+#: lib/rpmdb.c:1962
 #, c-format
 msgid "adding \"%s\" to %s index.\n"
 msgstr ""
 
-#: lib/rpmdb.c:1960
+#: lib/rpmdb.c:1971
 #, c-format
 msgid "adding %d entries to %s index.\n"
 msgstr ""
 
-#: lib/rpmdb.c:2318
+#: lib/rpmdb.c:2329
 #, c-format
 msgid "rebuilding database %s into %s\n"
 msgstr ""
 
-#: lib/rpmdb.c:2322
+#: lib/rpmdb.c:2333
 #, c-format
 msgid "temporary database %s already exists"
 msgstr ""
 
-#: lib/rpmdb.c:2328
+#: lib/rpmdb.c:2339
 #, c-format
 msgid "creating directory %s\n"
 msgstr ""
 
-#: lib/rpmdb.c:2330
+#: lib/rpmdb.c:2341
 #, c-format
 msgid "error creating directory %s: %s"
 msgstr ""
 
-#: lib/rpmdb.c:2337
+#: lib/rpmdb.c:2348
 #, c-format
 msgid "opening old database with dbapi %d\n"
 msgstr ""
 
-#: lib/rpmdb.c:2348
+#: lib/rpmdb.c:2359
 #, c-format
 msgid "opening new database with dbapi %d\n"
 msgstr ""
 
-#: lib/rpmdb.c:2371
+#: lib/rpmdb.c:2382
 #, c-format
 msgid "record number %d in database is bad -- skipping."
 msgstr ""
 
-#: lib/rpmdb.c:2403
+#: lib/rpmdb.c:2414
 #, c-format
 msgid "cannot add record originally at %d"
 msgstr ""
 
-#: lib/rpmdb.c:2421
+#: lib/rpmdb.c:2432
 msgid "failed to rebuild database: original database remains in place\n"
 msgstr ""
 
-#: lib/rpmdb.c:2429
+#: lib/rpmdb.c:2440
 msgid "failed to replace old database with new database!\n"
 msgstr ""
 
-#: lib/rpmdb.c:2431
+#: lib/rpmdb.c:2442
 #, c-format
 msgid "replace files in %s with files from %s to recover"
 msgstr ""
 
-#: lib/rpmdb.c:2441
+#: lib/rpmdb.c:2452
 #, c-format
 msgid "removing directory %s\n"
 msgstr ""
 
-#: lib/rpmdb.c:2443
+#: lib/rpmdb.c:2454
 #, c-format
 msgid "failed to remove directory %s: %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:129
+#: lib/rpminstall.c:133
 msgid "counting packages to install\n"
 msgstr ""
 
-#: lib/rpminstall.c:133
+#: lib/rpminstall.c:137
 #, c-format
 msgid "found %d packages\n"
 msgstr ""
 
-#: lib/rpminstall.c:138
+#: lib/rpminstall.c:142
 msgid "looking for packages to download\n"
 msgstr ""
 
-#: lib/rpminstall.c:153
+#: lib/rpminstall.c:157
 #, c-format
 msgid "skipping %s - rpmGlob failed(%d)\n"
 msgstr ""
 
-#: lib/rpminstall.c:168
+#: lib/rpminstall.c:172
 #, c-format
 msgid "Retrieving %s\n"
 msgstr ""
 
 #. XXX undefined %{name}/%{version}/%{release} here
 #. XXX %{_tmpdir} does not exist
-#: lib/rpminstall.c:178
+#: lib/rpminstall.c:182
 #, c-format
 msgid " ... as %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:182
+#: lib/rpminstall.c:186
 #, c-format
 msgid "skipping %s - transfer failed - %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:209
+#: lib/rpminstall.c:213
 #, c-format
 msgid "retrieved %d packages\n"
 msgstr ""
 
-#: lib/rpminstall.c:220 lib/rpminstall.c:389
+#: lib/rpminstall.c:224 lib/rpminstall.c:393
 #, c-format
 msgid "cannot open file %s: %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:238 lib/rpminstall.c:529
+#: lib/rpminstall.c:242 lib/rpminstall.c:533
 #, c-format
 msgid "%s cannot be installed\n"
 msgstr ""
 
-#: lib/rpminstall.c:253
+#: lib/rpminstall.c:257
 #, c-format
 msgid "cannot open Packages database in %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:273
+#: lib/rpminstall.c:277
 #, c-format
 msgid "package %s is not relocateable\n"
 msgstr ""
 
-#: lib/rpminstall.c:318
+#: lib/rpminstall.c:322
 #, c-format
 msgid "error reading from file %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:323
+#: lib/rpminstall.c:327
 #, c-format
 msgid "file %s requires a newer version of RPM\n"
 msgstr ""
 
-#: lib/rpminstall.c:340
+#: lib/rpminstall.c:344
 #, c-format
 msgid "found %d source and %d binary packages\n"
 msgstr ""
 
-#: lib/rpminstall.c:351
+#: lib/rpminstall.c:355
 msgid "failed dependencies:\n"
 msgstr ""
 
-#: lib/rpminstall.c:369
+#: lib/rpminstall.c:373
 msgid "installing binary packages\n"
 msgstr ""
 
-#: lib/rpminstall.c:467
+#: lib/rpminstall.c:471
 #, c-format
 msgid "\"%s\" specifies multiple packages\n"
 msgstr ""
 
-#: lib/rpminstall.c:490
+#: lib/rpminstall.c:494
 msgid "removing these packages would break dependencies:\n"
 msgstr ""
 
-#: lib/rpminstall.c:518
+#: lib/rpminstall.c:522
 #, c-format
 msgid "cannot open %s: %s\n"
 msgstr ""
 
-#: lib/rpminstall.c:524
+#: lib/rpminstall.c:528
 #, c-format
 msgid "Installing %s\n"
 msgstr ""
 
-#: lib/rpmlead.c:48
+#: lib/rpmlead.c:52
 #, c-format
 msgid "read failed: %s (%d)"
 msgstr ""
 
-#: lib/rpmrc.c:147
-#, c-format
-msgid "missing second ':' at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:150
-#, c-format
-msgid "missing architecture name at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:310
-#, c-format
-msgid "Incomplete data line at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:314
-#, c-format
-msgid "Too many args in data line at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:321
-#, c-format
-msgid "Bad arch/os number: %s (%s:%d)"
-msgstr ""
-
-#: lib/rpmrc.c:356
-#, c-format
-msgid "Incomplete default line at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:361
-#, c-format
-msgid "Too many args in default line at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:551
-#, c-format
-msgid "Cannot expand %s"
-msgstr ""
-
-#: lib/rpmrc.c:556
-#, c-format
-msgid "Cannot read %s, HOME is too large."
-msgstr ""
-
-#: lib/rpmrc.c:573
-#, c-format
-msgid "Unable to open %s for reading: %s."
-msgstr ""
-
-#. XXX Feof(fd)
-#: lib/rpmrc.c:618
-#, c-format
-msgid "Failed to read %s: %s."
-msgstr ""
-
-#: lib/rpmrc.c:655
-#, c-format
-msgid "missing ':' (found 0x%02x) at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:672 lib/rpmrc.c:746
-#, c-format
-msgid "missing argument for %s at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:689 lib/rpmrc.c:711
-#, c-format
-msgid "%s expansion failed at %s:%d \"%s\""
-msgstr ""
-
-#: lib/rpmrc.c:698
-#, c-format
-msgid "cannot open %s at %s:%d: %s"
-msgstr ""
-
-#: lib/rpmrc.c:738
-#, c-format
-msgid "missing architecture for %s at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:805
-#, c-format
-msgid "bad option '%s' at %s:%d"
-msgstr ""
-
-#: lib/rpmrc.c:1176
-#, c-format
-msgid "Unknown system: %s\n"
-msgstr ""
-
-#: lib/rpmrc.c:1177
-msgid "Please contact rpm-list@redhat.com\n"
-msgstr ""
-
-#: lib/signature.c:107
+#: lib/signature.c:111
 #, c-format
 msgid "sigsize         : %d\n"
 msgstr ""
 
-#: lib/signature.c:108
+#: lib/signature.c:112
 #, c-format
 msgid "Header + Archive: %d\n"
 msgstr ""
 
-#: lib/signature.c:109
+#: lib/signature.c:113
 #, c-format
 msgid "expected size   : %d\n"
 msgstr ""
 
-#: lib/signature.c:113
+#: lib/signature.c:117
 msgid "file is not regular -- skipping size check\n"
 msgstr ""
 
-#: lib/signature.c:135
+#: lib/signature.c:139
 msgid "No signature\n"
 msgstr ""
 
-#: lib/signature.c:138
+#: lib/signature.c:142
 msgid "Old PGP signature\n"
 msgstr ""
 
-#: lib/signature.c:150
+#: lib/signature.c:154
 msgid "Old (internal-only) signature!  How did you get that!?"
 msgstr ""
 
-#: lib/signature.c:154
+#: lib/signature.c:158
 msgid "New Header signature\n"
 msgstr ""
 
 #. 8-byte pad
-#: lib/signature.c:161 lib/signature.c:203
+#: lib/signature.c:165 lib/signature.c:207
 #, c-format
 msgid "Signature size: %d\n"
 msgstr ""
 
-#: lib/signature.c:162 lib/signature.c:204
+#: lib/signature.c:166 lib/signature.c:208
 #, c-format
 msgid "Signature pad : %d\n"
 msgstr ""
 
-#: lib/signature.c:267
+#: lib/signature.c:271
 #, c-format
 msgid "Couldn't exec pgp (%s)"
 msgstr ""
 
-#: lib/signature.c:278
+#: lib/signature.c:282
 msgid "pgp failed"
 msgstr ""
 
 #. PGP failed to write signature
 #. Just in case
-#: lib/signature.c:285
+#: lib/signature.c:289
 msgid "pgp failed to write signature"
 msgstr ""
 
-#: lib/signature.c:290
+#: lib/signature.c:294
 #, c-format
 msgid "PGP sig size: %d\n"
 msgstr ""
 
-#: lib/signature.c:301 lib/signature.c:378
+#: lib/signature.c:305 lib/signature.c:382
 msgid "unable to read the signature"
 msgstr ""
 
-#: lib/signature.c:306
+#: lib/signature.c:310
 #, c-format
 msgid "Got %d bytes of PGP sig\n"
 msgstr ""
 
-#: lib/signature.c:344 lib/signature.c:687
+#: lib/signature.c:348 lib/signature.c:691
 msgid "Couldn't exec gpg"
 msgstr ""
 
-#: lib/signature.c:355
+#: lib/signature.c:359
 msgid "gpg failed"
 msgstr ""
 
 #. GPG failed to write signature
 #. Just in case
-#: lib/signature.c:362
+#: lib/signature.c:366
 msgid "gpg failed to write signature"
 msgstr ""
 
-#: lib/signature.c:367
+#: lib/signature.c:371
 #, c-format
 msgid "GPG sig size: %d\n"
 msgstr ""
 
-#: lib/signature.c:383
+#: lib/signature.c:387
 #, c-format
 msgid "Got %d bytes of GPG sig\n"
 msgstr ""
 
-#: lib/signature.c:410
+#: lib/signature.c:414
 msgid "Generating signature using PGP.\n"
 msgstr ""
 
-#: lib/signature.c:416
+#: lib/signature.c:420
 msgid "Generating signature using GPG.\n"
 msgstr ""
 
-#: lib/signature.c:493 lib/signature.c:555
+#: lib/signature.c:497 lib/signature.c:559
 msgid "Could not run pgp.  Use --nopgp to skip PGP checks."
 msgstr ""
 
-#: lib/signature.c:553 lib/signature.c:626
+#: lib/signature.c:557 lib/signature.c:630
 msgid "exec failed!\n"
 msgstr ""
 
-#: lib/signature.c:628
+#: lib/signature.c:632
 msgid "Could not run gpg.  Use --nogpg to skip GPG checks."
 msgstr ""
 
-#: lib/signature.c:716
+#: lib/signature.c:720
 msgid "Couldn't exec pgp"
 msgstr ""
 
 #. @notreached@
 #. This case should have been screened out long ago.
-#: lib/signature.c:720 lib/signature.c:773
+#: lib/signature.c:724 lib/signature.c:777
 msgid "Invalid %%_signature spec in macro file"
 msgstr ""
 
-#: lib/signature.c:753
+#: lib/signature.c:757
 msgid "You must set \"%%_gpg_name\" in your macro file"
 msgstr ""
 
-#: lib/signature.c:765
+#: lib/signature.c:769
 msgid "You must set \"%%_pgp_name\" in your macro file"
 msgstr ""
 
-#: lib/transaction.c:413
+#: lib/transaction.c:425
 #, c-format
 msgid "excluding file %s%s\n"
 msgstr ""
 
-#: lib/transaction.c:439 lib/transaction.c:522
+#: lib/transaction.c:451 lib/transaction.c:534
 #, c-format
 msgid "excluding directory %s\n"
 msgstr ""
 
-#: lib/transaction.c:444
+#: lib/transaction.c:456
 #, c-format
 msgid "relocating %s to %s\n"
 msgstr ""
 
-#: lib/transaction.c:515
+#: lib/transaction.c:527
 #, c-format
 msgid "relocating directory %s to %s\n"
 msgstr ""
 
-#: lib/transaction.c:667
+#: lib/transaction.c:679
 #, c-format
 msgid "%s skipped due to missingok flag\n"
 msgstr ""
 
-#: lib/uninstall.c:42
+#: lib/uninstall.c:54
 #, c-format
 msgid "cannot remove %s - directory not empty"
 msgstr ""
 
-#: lib/uninstall.c:46
+#: lib/uninstall.c:58
 #, c-format
 msgid "rmdir of %s failed: %s"
 msgstr ""
 
-#: lib/uninstall.c:56
+#: lib/uninstall.c:68
 #, c-format
 msgid "removal of %s failed: %s"
 msgstr ""
 
-#: lib/uninstall.c:141
+#: lib/uninstall.c:133
 #, c-format
 msgid "will remove files test = %d\n"
 msgstr ""
 
-#: lib/uninstall.c:209
+#: lib/uninstall.c:217
 msgid "running postuninstall script (if any)\n"
 msgstr ""
 
-#: lib/uninstall.c:406
+#: lib/uninstall.c:419
 #, c-format
 msgid "execution of %s-%s-%s script failed, exit status %d"
 msgstr ""
 
-#: lib/verify.c:39
+#: lib/verify.c:43
 msgid "don't verify files in package"
 msgstr ""
 
-#: lib/verify.c:215
+#: lib/verify.c:219
 msgid "package lacks both user name and id lists (this should never happen)"
 msgstr ""
 
-#: lib/verify.c:233
+#: lib/verify.c:237
 msgid "package lacks both group name and id lists (this should never happen)"
 msgstr ""
 
-#: lib/verify.c:269
+#: lib/verify.c:273
 #, c-format
 msgid "missing    %s\n"
 msgstr ""
 
-#: lib/verify.c:331
+#: lib/verify.c:335
 #, c-format
 msgid "Unsatisfied dependencies for %s-%s-%s: "
 msgstr ""
 
-#: rpmio/rpmio.c:529
+#: rpmio/rpmio.c:533
 msgid "Success"
 msgstr ""
 
-#: rpmio/rpmio.c:532
+#: rpmio/rpmio.c:536
 msgid "Bad server response"
 msgstr ""
 
-#: rpmio/rpmio.c:535
+#: rpmio/rpmio.c:539
 msgid "Server IO error"
 msgstr ""
 
-#: rpmio/rpmio.c:538
+#: rpmio/rpmio.c:542
 msgid "Server timeout"
 msgstr ""
 
-#: rpmio/rpmio.c:541
+#: rpmio/rpmio.c:545
 msgid "Unable to lookup server host address"
 msgstr ""
 
-#: rpmio/rpmio.c:544
+#: rpmio/rpmio.c:548
 msgid "Unable to lookup server host name"
 msgstr ""
 
-#: rpmio/rpmio.c:547
+#: rpmio/rpmio.c:551
 msgid "Failed to connect to server"
 msgstr ""
 
-#: rpmio/rpmio.c:550
+#: rpmio/rpmio.c:554
 msgid "Failed to establish data connection to server"
 msgstr ""
 
-#: rpmio/rpmio.c:553
+#: rpmio/rpmio.c:557
 msgid "IO error to local file"
 msgstr ""
 
-#: rpmio/rpmio.c:556
+#: rpmio/rpmio.c:560
 msgid "Error setting remote server to passive mode"
 msgstr ""
 
-#: rpmio/rpmio.c:559
+#: rpmio/rpmio.c:563
 msgid "File not found on server"
 msgstr ""
 
-#: rpmio/rpmio.c:562
+#: rpmio/rpmio.c:566
 msgid "Abort in progress"
 msgstr ""
 
-#: rpmio/rpmio.c:566
+#: rpmio/rpmio.c:570
 msgid "Unknown or unexpected error"
 msgstr ""
 
-#: rpmio/rpmio.c:1161
+#: rpmio/rpmio.c:1165
 #, c-format
 msgid "logging into %s as %s, pw %s\n"
 msgstr ""
 
-#: rpmio/macro.c:161
+#: rpmio/macro.c:166
 #, c-format
 msgid "======================== active %d empty %d\n"
 msgstr ""
 
 #. XXX just in case
-#: rpmio/macro.c:256
+#: rpmio/macro.c:261
 #, c-format
 msgid "%3d>%*s(empty)"
 msgstr ""
 
-#: rpmio/macro.c:291
+#: rpmio/macro.c:296
 #, c-format
 msgid "%3d<%*s(empty)\n"
 msgstr ""
 
-#: rpmio/macro.c:470
+#: rpmio/macro.c:475
 msgid "Macro %%%s has unterminated body"
 msgstr ""
 
-#: rpmio/macro.c:496
+#: rpmio/macro.c:501
 msgid "Macro %%%s has illegal name (%%define)"
 msgstr ""
 
-#: rpmio/macro.c:502
+#: rpmio/macro.c:507
 msgid "Macro %%%s has unterminated opts"
 msgstr ""
 
-#: rpmio/macro.c:507
+#: rpmio/macro.c:512
 msgid "Macro %%%s has empty body"
 msgstr ""
 
-#: rpmio/macro.c:512
+#: rpmio/macro.c:517
 msgid "Macro %%%s failed to expand"
 msgstr ""
 
-#: rpmio/macro.c:537
+#: rpmio/macro.c:542
 msgid "Macro %%%s has illegal name (%%undefine)"
 msgstr ""
 
-#: rpmio/macro.c:614
+#: rpmio/macro.c:619
 msgid "Macro %%%s (%s) was not used below level %d"
 msgstr ""
 
-#: rpmio/macro.c:698
+#: rpmio/macro.c:703
 #, c-format
 msgid "Unknown option %c in %s(%s)"
 msgstr ""
 
-#: rpmio/macro.c:854
+#: rpmio/macro.c:859
 #, c-format
 msgid "Recursion depth(%d) greater than max(%d)"
 msgstr ""
 
-#: rpmio/macro.c:920 rpmio/macro.c:936
+#: rpmio/macro.c:925 rpmio/macro.c:941
 #, c-format
 msgid "Unterminated %c: %s"
 msgstr ""
 
-#: rpmio/macro.c:976
+#: rpmio/macro.c:981
 msgid "A %% is followed by an unparseable macro"
 msgstr ""
 
-#: rpmio/macro.c:1102
+#: rpmio/macro.c:1107
 msgid "Macro %%%.*s not found, skipping"
 msgstr ""
 
-#: rpmio/macro.c:1183
+#: rpmio/macro.c:1188
 msgid "Target buffer overflow"
 msgstr ""
 
 #. XXX Fstrerror
-#: rpmio/macro.c:1363 rpmio/macro.c:1369
+#: rpmio/macro.c:1368 rpmio/macro.c:1374
 #, c-format
 msgid "File %s: %s"
 msgstr ""
 
-#: rpmio/macro.c:1372
+#: rpmio/macro.c:1377
 #, c-format
 msgid "File %s is smaller than %d bytes"
 msgstr ""
 
-#: rpmio/messages.c:55
+#: rpmio/messages.c:59
 msgid "warning: "
 msgstr ""
 
-#: rpmio/messages.c:64
+#: rpmio/messages.c:68
 msgid "error: "
 msgstr ""
 
-#: rpmio/messages.c:73
+#: rpmio/messages.c:77
 msgid "fatal error: "
 msgstr ""
 
-#: rpmio/messages.c:82
+#: rpmio/messages.c:86
 msgid "internal error (rpm bug?): "
 msgstr ""
 
-#: rpmio/rpmmalloc.c:9
+#: rpmio/rpmmalloc.c:13
 #, c-format
 msgid "memory alloc (%u bytes) returned NULL.\n"
 msgstr ""
 
-#: rpmio/url.c:88
+#: rpmio/url.c:92
 #, c-format
 msgid "warning: u %p ctrl %p nrefs != 0 (%s %s)\n"
 msgstr ""
 
-#: rpmio/url.c:105
+#: rpmio/url.c:109
 #, c-format
 msgid "warning: u %p data %p nrefs != 0 (%s %s)\n"
 msgstr ""
 
-#: rpmio/url.c:132
+#: rpmio/url.c:136
 #, c-format
 msgid "warning: uCache[%d] %p nrefs(%d) != 1 (%s %s)\n"
 msgstr ""
 
-#: rpmio/url.c:218
+#: rpmio/url.c:222
 #, c-format
 msgid "Password for %s@%s: "
 msgstr ""
 
-#: rpmio/url.c:243 rpmio/url.c:269
+#: rpmio/url.c:247 rpmio/url.c:273
 #, c-format
 msgid "error: %sport must be a number\n"
 msgstr ""
 
-#: rpmio/url.c:405
+#: rpmio/url.c:409
 msgid "url port must be a number\n"
 msgstr ""
 
-#: rpmio/url.c:445
+#: rpmio/url.c:449
 #, c-format
 msgid "failed to open %s: %s\n"
 msgstr ""
 
 #. XXX Fstrerror
-#: rpmio/url.c:462
+#: rpmio/url.c:466
 #, c-format
 msgid "failed to create %s: %s\n"
 msgstr ""
index 461fcc2..2f28ac5 100644 (file)
--- a/rpm.spec
+++ b/rpm.spec
@@ -21,6 +21,8 @@ Requires: popt, bzip2 >= 0.9.0c-2
 %ifnarch ia64
 Requires: glibc >= 2.1.92
 %endif
+# XXX needed to avoid libdb.so.2 satisfied by compat/libc5 provides.
+Requires: db1 = 1.85
 BuildRequires: db3-devel
 BuildRequires: bzip2 >= 0.9.0c-2
 BuildRequires: python-devel >= 1.5.2
@@ -129,6 +131,7 @@ mkdir -p $RPM_BUILD_ROOT/etc/rpm
 rm -rf $RPM_BUILD_ROOT
 
 %post
+/sbin/ldconfig
 %ifos linux
 if [ ! -e /etc/rpm/macros -a -e /etc/rpmrc -a -f %{__prefix}/lib/rpm/convertrpmrc.sh ] 
 then
@@ -138,6 +141,8 @@ fi
 /bin/rpm --initdb
 %endif
 
+%postun -p /sbin/ldconfig
+
 %ifos linux
 %post devel -p /sbin/ldconfig
 %postun devel -p /sbin/ldconfig
index e71282b..c5ef9d3 100644 (file)
@@ -97,7 +97,6 @@ LIBDIR = @LIBDIR@
 LIBMISC = @LIBMISC@
 LIBOBJS = @LIBOBJS@
 LIBRPMALIAS_FILENAME = @LIBRPMALIAS_FILENAME@
-LIBRPMRC_FILENAME = @LIBRPMRC_FILENAME@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@