summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Doxyfile.in731
-rw-r--r--Doxyheader34
-rw-r--r--INSTALL273
-rw-r--r--Makefile.am10
-rw-r--r--acconfig.h5
-rw-r--r--build.c2
-rw-r--r--configure.in12
-rw-r--r--lib/rpmrc.c1463
-rw-r--r--po/rpm.pot1108
-rw-r--r--rpm.spec5
-rw-r--r--scripts/Makefile.in1
11 files changed, 1381 insertions, 2263 deletions
diff --git a/Doxyfile.in b/Doxyfile.in
index e6589d42d..bc99b28a9 100644
--- a/Doxyfile.in
+++ b/Doxyfile.in
@@ -1,171 +1,239 @@
-# 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
index 000000000..2f476c494
--- /dev/null
+++ b/Doxyheader
@@ -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 71f6d7687..539cfbc54 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,75 +1,148 @@
-
-
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.
diff --git a/Makefile.am b/Makefile.am
index c27c51592..af87d3bed 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -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 $<
diff --git a/acconfig.h b/acconfig.h
index 32e92af33..6dac639dd 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -108,10 +108,7 @@
/* 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 b2ffdda16..bce60d489 100644
--- 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);
diff --git a/configure.in b/configure.in
index f0daa96cf..5c02e17f0 100644
--- a/configure.in
+++ b/configure.in
@@ -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)
diff --git a/lib/rpmrc.c b/lib/rpmrc.c
index 7d1dc7d10..086bb962d 100644
--- a/lib/rpmrc.c
+++ b/lib/rpmrc.c
@@ -1,951 +1,113 @@
-#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;
}
diff --git a/po/rpm.pot b/po/rpm.pot
index 90961d25a..2dd8b01bd 100644
--- a/po/rpm.pot
+++ b/po/rpm.pot
@@ -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 ""
diff --git a/rpm.spec b/rpm.spec
index 461fcc2ba..2f28ac53b 100644
--- 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
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
index e71282bcf..c5ef9d39d 100644
--- a/scripts/Makefile.in
+++ b/scripts/Makefile.in
@@ -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@