summaryrefslogtreecommitdiffstats
path: root/man/dpkg-shlibdeps.man
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--man/dpkg-shlibdeps.man392
1 files changed, 392 insertions, 0 deletions
diff --git a/man/dpkg-shlibdeps.man b/man/dpkg-shlibdeps.man
new file mode 100644
index 0000000..d4c8ea2
--- /dev/null
+++ b/man/dpkg-shlibdeps.man
@@ -0,0 +1,392 @@
+.\" dpkg manual page - dpkg-deb(1)
+.\"
+.\" Copyright © 1995-1996 Ian Jackson <ijackson@chiark.greenend.org.uk>
+.\" Copyright © 2000 Wichert Akkerman <wakkerma@debian.org>
+.\" Copyright © 2006 Frank Lichtenheld <djpig@debian.org>
+.\" Copyright © 2007-2011 Raphaël Hertzog <hertzog@debian.org>
+.\" Copyright © 2011-2013, 2015 Guillem Jover <guillem@debian.org>
+.\"
+.\" This is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" This is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program. If not, see <https://www.gnu.org/licenses/>.
+.
+.TH dpkg\-shlibdeps 1 "%RELEASE_DATE%" "%VERSION%" "dpkg suite"
+.nh
+.SH NAME
+dpkg\-shlibdeps \- generate shared library substvar dependencies
+.
+.SH SYNOPSIS
+.B dpkg\-shlibdeps
+.RI [ option "...] [" \fB\-e\fP ] executable " [" option ...]
+.
+.SH DESCRIPTION
+.B dpkg\-shlibdeps
+calculates shared library dependencies for executables named in its
+arguments. The dependencies are added to the substitution
+variables file
+.B debian/substvars
+as variable names
+.BI shlibs: dependency-field
+where
+.I dependency-field
+is a dependency field name. Any other variables starting with
+.B shlibs:
+are removed from the file.
+.P
+.B dpkg\-shlibdeps
+has two possible sources of information to generate dependency
+information. Either
+.I symbols
+files or
+.I shlibs
+files. For each binary that
+.B dpkg\-shlibdeps
+analyzes, it finds out the list of libraries that it's linked with.
+Then, for each library, it looks up either the
+.I symbols
+file, or the
+.I shlibs
+file (if the former doesn't exist or if debian/shlibs.local contains
+the relevant dependency). Both files are supposed to be provided
+by the library package and should thus be available as
+%ADMINDIR%/info/\fIpackage\fR.\fIsymbols\fR
+or %ADMINDIR%/info/\fIpackage\fR.\fIshlibs\fR. The package name is
+identified in two steps: find the library file on the system (looking in
+the same directories that \fBld.so\fR would use), then use
+.BI "dpkg \-S " library-file
+to lookup the package providing the library.
+.SS Symbols files
+Symbols files contain finer-grained dependency information by providing
+the minimum dependency for each symbol that the library exports. The
+script tries to find a symbols file associated to a library package
+in the following places (first match is used):
+.IP debian/*/DEBIAN/symbols
+Shared library information generated by the current build process that also invoked
+.BR dpkg\-shlibdeps .
+They are generated by
+.BR dpkg\-gensymbols (1).
+They are only used if the library is found in a package's build tree. The
+symbols file in that build tree takes precedence over symbols files from
+other binary packages.
+.IP %PKGCONFDIR%/symbols/\fIpackage\fR.symbols.\fIarch\fR
+.IP %PKGCONFDIR%/symbols/\fIpackage\fR.symbols
+Per-system overriding shared library dependency information.
+\fIarch\fR is the architecture of the current system (obtained by
+.BR "dpkg\-architecture \-qDEB_HOST_ARCH" ).
+.IP "Output from “\fBdpkg\-query \-\-control\-path\fR \fIpackage\fR symbols”"
+Package-provided shared library dependency information.
+Unless overridden by \fB\-\-admindir\fP, those files are located in
+%ADMINDIR%.
+.P
+While scanning the symbols used by all binaries,
+.B dpkg\-shlibdeps
+remembers the (biggest) minimal version needed for each library. At the end
+of the process, it is able to write out the minimal dependency for every
+library used (provided that the information of the \fIsymbols\fR files are
+accurate).
+.P
+As a safe-guard measure, a symbols file can provide a
+\fBBuild\-Depends\-Package\fP meta-information field and
+.B dpkg\-shlibdeps
+will extract the minimal version required by the corresponding package in
+the \fBBuild\-Depends\fP field and use this version if it's higher than the
+minimal version computed by scanning symbols.
+.SS Shlibs files
+Shlibs files associate directly a library to a dependency (without looking
+at the symbols). It's thus often stronger than really needed but very safe
+and easy to handle.
+.P
+The dependencies for a library are looked up in several places. The first
+file providing information for the library of interest is used:
+.IP debian/shlibs.local
+Package-local overriding shared library dependency information.
+.IP %PKGCONFDIR%/shlibs.override
+Per-system overriding shared library dependency information.
+.IP debian/*/DEBIAN/shlibs
+Shared library information generated by the current build process that also invoked
+.BR dpkg\-shlibdeps .
+They are only used if the library is found in a package's build tree. The
+shlibs file in that build tree takes precedence over shlibs files from
+other binary packages.
+.IP "Output from “\fBdpkg\-query \-\-control\-path\fP \fIpackage\fR shlibs”"
+Package-provided shared library dependency information.
+Unless overridden by \fB\-\-admindir\fP, those files are located in
+%ADMINDIR%.
+.IP %PKGCONFDIR%/shlibs.default
+Per-system default shared library dependency information.
+.P
+The extracted dependencies are then directly used (except if they are
+filtered out because they have been identified as duplicate, or as weaker
+than another dependency).
+.SH OPTIONS
+.B dpkg\-shlibdeps
+interprets non-option arguments as executable names, just as if they'd
+been supplied as
+.BI \-e executable\fR.
+.TP
+.BI \-e executable
+Include dependencies appropriate for the shared libraries required by
+.IR executable .
+This option can be used multiple times.
+.TP
+.BI \-l directory
+Prepend
+.I directory
+to the list of directories to search for private shared libraries
+(since dpkg 1.17.0). This option can be used multiple times.
+
+Note: Use this option instead of setting \fBLD_LIBRARY_PATH\fP,
+as that environment variable is used to control the run-time linker
+and abusing it to set the shared library paths at build-time can be
+problematic when cross-compiling for example.
+.TP
+.BI \-d dependency-field
+Add dependencies to be added to the control file dependency field
+.IR dependency-field .
+(The dependencies for this field are placed in the variable
+.BI shlibs: dependency-field\fR.)
+
+The
+.BI \-d dependency-field
+option takes effect for all executables after the option, until the
+next
+.BI \-d dependency-field\fR.
+The default
+.I dependency-field
+is
+.BR Depends .
+
+If the same dependency entry (or set of alternatives) appears in more
+than one of the recognized dependency field names
+.BR Pre\-Depends ", " Depends ", " Recommends ", " Enhances " or " Suggests
+then
+.B dpkg\-shlibdeps
+will automatically remove the dependency from all fields except the
+one representing the most important dependencies.
+.TP
+.BI \-p varname-prefix
+Start substitution variables with
+.IB varname-prefix :
+instead of
+.BR shlibs: .
+Likewise, any existing substitution variables starting with
+.IB varname-prefix :
+(rather than
+.BR shlibs: )
+are removed from the substitution variables file.
+.TP
+.BR \-O [\fIfilename\fP]
+Print substitution variable settings to standard output (or \fIfilename\fP
+if specified, since dpkg 1.17.2), rather than being added to the
+substitution variables file
+.RB ( debian/substvars
+by default).
+.TP
+.BI \-t type
+Prefer shared library dependency information tagged for the given
+package type. If no tagged information is available, falls back to untagged
+information. The default package type is \fBdeb\fP. Shared library dependency
+information is tagged for a given type by prefixing it with the name of the
+type, a colon, and whitespace.
+.TP
+.BI \-L local-shlibs-file
+Read overriding shared library dependency information from
+.I local-shlibs-file
+instead of
+.BR debian/shlibs.local .
+.TP
+.BI \-T substvars-file
+Write substitution variables in
+.IR substvars-file ;
+the default is
+.BR debian/substvars .
+.TP
+.BI \-v
+Enable verbose mode (since dpkg 1.14.8).
+Numerous messages are displayed to explain what
+.B dpkg\-shlibdeps
+does.
+.TP
+.BI \-x package
+Exclude the package from the generated dependencies (since dpkg 1.14.8).
+This is useful to
+avoid self-dependencies for packages which provide ELF binaries
+(executables or library plugins) using a library contained in the same
+package. This option can be used multiple times to exclude several
+packages.
+.TP
+.BI \-S package-build-dir
+Look into \fIpackage-build-dir\fP first when trying to find a library
+(since dpkg 1.14.15).
+This is
+useful when the source package builds multiple flavors of the same library
+and you want to ensure that you get the dependency from a given binary
+package. You can use this option multiple times: directories will be
+tried in the same order before directories of other binary packages.
+.TP
+.BI \-I package-build-dir
+Ignore \fIpackage-build-dir\fP when looking for shlibs, symbols, and shared
+library files (since dpkg 1.18.5).
+You can use this option multiple times.
+.TP
+.BI \-\-ignore\-missing\-info
+Do not fail if dependency information can't be found for a shared library
+(since dpkg 1.14.8).
+Usage of this option is discouraged, all libraries should provide
+dependency information (either with shlibs files, or with symbols files)
+even if they are not yet used by other packages.
+.TP
+.BI \-\-warnings= value
+\fIvalue\fP is a bit field defining the set of warnings that
+can be emitted by \fBdpkg\-shlibdeps\fP (since dpkg 1.14.17).
+Bit 0 (value=1) enables the warning “symbol \fIsym\fP used by \fIbinary\fP
+found in none of the libraries”, bit 1 (value=2) enables the warning
+“package could avoid a useless dependency” and bit 2 (value=4) enables
+the warning “\fIbinary\fP should not be linked against \fIlibrary\fP”.
+The default \fIvalue\fP is 3: the first two warnings are active by
+default, the last one is not. Set \fIvalue\fP to 7 if you want all
+warnings to be active.
+.TP
+.BI \-\-admindir= dir
+Change the location of the \fBdpkg\fR database (since dpkg 1.14.0).
+The default location is \fI%ADMINDIR%\fP.
+.TP
+.BR \-? ", " \-\-help
+Show the usage message and exit.
+.TP
+.BR \-\-version
+Show the version and exit.
+.
+.SH ENVIRONMENT
+.TP
+.B DPKG_COLORS
+Sets the color mode (since dpkg 1.18.5).
+The currently accepted values are: \fBauto\fP (default), \fBalways\fP and
+\fBnever\fP.
+.TP
+.B DPKG_NLS
+If set, it will be used to decide whether to activate Native Language Support,
+also known as internationalization (or i18n) support (since dpkg 1.19.0).
+The accepted values are: \fB0\fP and \fB1\fP (default).
+.
+.SH DIAGNOSTICS
+.SS Warnings
+Since
+.B dpkg\-shlibdeps
+analyzes the set of symbols used by each binary of the generated package,
+it is able to emit warnings in several cases. They inform you of things
+that can be improved in the package. In most cases, those improvements
+concern the upstream sources directly. By order of decreasing importance,
+here are the various warnings that you can encounter:
+.TP
+.BI symbol " sym" " used by " binary " found in none of the libraries."
+The indicated symbol has not been found in the libraries linked with the
+binary. The \fIbinary\fR is most likely a library and it needs to be linked
+with an additional library during the build process (option
+\fB\-l\fR\fIlibrary\fR of the linker).
+.TP
+.IB binary " contains an unresolvable reference to symbol " sym ": it's probably a plugin
+The indicated symbol has not been found in the libraries linked with the
+binary. The \fIbinary\fR is most likely a plugin and the symbol is
+probably provided by the program that loads this plugin. In theory a
+plugin doesn't have any SONAME but this binary does have one and as such
+it could not be clearly identified as such. However the fact that the
+binary is stored in a non-public directory is a strong indication
+that's it's not a normal shared library. If the binary is really a
+plugin, then disregard this warning. But there's always the possibility
+that it's a real library and that programs linking to it are using an
+RPATH so that the dynamic loader finds it. In that case, the library is
+broken and needs to be fixed.
+.TP
+.BI "package could avoid a useless dependency if " binary " was not linked against " library " (it uses none of the library's symbols)"
+None of the \fIbinaries\fP that are linked with \fPlibrary\fP use any of the
+symbols provided by the library. By fixing all the binaries, you would avoid
+the dependency associated to this library (unless the same dependency is
+also generated by another library that is really used).
+.TP
+.BI "package could avoid a useless dependency if " binaries " were not linked against " library " (they use none of the library's symbols)"
+Exactly the same as the above warning, but for multiple binaries.
+.TP
+.IB binary " should not be linked against " library " (it uses none of the library's symbols)"
+The \fIbinary\fR is linked to a library that it doesn't need. It's not a
+problem but some small performance improvements in binary load time can be
+obtained by not linking this library to this binary. This warning checks
+the same information as the previous one but does it for each binary
+instead of doing the check globally on all binaries analyzed.
+.SS Errors
+.B dpkg\-shlibdeps
+will fail if it can't find a public library used by a binary or if this
+library has no associated dependency information (either shlibs file or
+symbols file). A public library has a SONAME and is versioned
+(libsomething.so.\fIX\fR). A private library (like a plugin) should not
+have a SONAME and doesn't need to be versioned.
+.TP
+.BI "couldn't find library " library-soname " needed by " binary " (its RPATH is '" rpath "')"
+The \fIbinary\fR uses a library called \fIlibrary-soname\fR but
+.B dpkg\-shlibdeps
+has been unable to find the library.
+.B dpkg\-shlibdeps
+creates a list of directories to check as following: directories listed in
+the RPATH of the binary, directories added by the \fB\-l\fP option, directories
+listed in the \fBLD_LIBRARY_PATH\fP environment variable, cross multiarch
+directories (ex. /lib/arm64-linux-gnu, /usr/lib/arm64-linux-gnu), standard
+public directories (/lib, /usr/lib), directories listed in /etc/ld.so.conf,
+and obsolete multilib directories (/lib32, /usr/lib32, /lib64, /usr/lib64).
+Then it checks those directories in the package's build tree
+of the binary being analyzed, in the packages' build trees indicated with
+the \fB\-S\fP command-line option, in other packages' build trees that contains
+a DEBIAN/shlibs or DEBIAN/symbols file and finally in the root directory.
+If the library is not found in any of those directories, then you get this
+error.
+
+If the library not found is in a private directory of the same package,
+then you want to add the directory with \fB\-l\fP. If it's in another
+binary package being built, you want to make sure that the shlibs/symbols
+file of this package is already created and that \fB\-l\fP
+contains the appropriate directory if it also is in a private directory.
+.TP
+.BI "no dependency information found for " library-file " (used by " binary ")."
+The library needed by \fIbinary\fR has been found by
+.B dpkg\-shlibdeps
+in \fIlibrary-file\fR but
+.B dpkg\-shlibdeps
+has been unable to find any dependency information for that library. To
+find out the dependency, it has tried to map the library to a Debian
+package with the help of
+.BI "dpkg \-S " library-file\fR.
+Then it checked the corresponding shlibs and symbols files in
+%ADMINDIR%/info/, and in the various package's build trees
+(debian/*/DEBIAN/).
+
+This failure can be caused by a bad or missing shlibs or symbols file
+in the package of the library. It might also happen if the library is
+built within the same source package and if the shlibs files has not yet
+been created (in which case you must fix debian/rules to create
+the shlibs before calling \fBdpkg\-shlibdeps\fR). Bad RPATH can also
+lead to the library being found under a non-canonical name (example:
+/usr/lib/openoffice.org/../lib/libssl.so.0.9.8 instead of
+/usr/lib/libssl.so.0.9.8) that's not associated to any package,
+.B dpkg\-shlibdeps
+tries to work around this by trying to fallback on a canonical name (using
+.BR realpath (3))
+but it might not always work. It's always best to clean up the RPATH
+of the binary to avoid problems.
+
+Calling
+.B dpkg\-shlibdeps
+in verbose mode (\fB\-v\fP) will provide much more information about where it
+tried to find the dependency information. This might be useful if you
+don't understand why it's giving you this error.
+.SH SEE ALSO
+.BR deb\-shlibs (5),
+.BR deb\-symbols (5),
+.BR dpkg\-gensymbols (1).