Manual.md: revamp explain_depends section.

Add useful examples of checkdepends that might not be obvious.
This commit is contained in:
Érico Rolim 2020-07-22 16:36:59 -03:00 committed by Michael Aldridge
parent 9f1e068c42
commit 65ee7c0782

View file

@ -727,36 +727,45 @@ Examples:
Do not use noarch. It is deprecated and being removed. Do not use noarch. It is deprecated and being removed.
<a id="explain_depends"></a> <a id="explain_depends"></a>
#### About the many types of `depends` variable. #### About the many types of `depends` variables
So far we have listed four types of `depends`, there are `hostmakedepends`, So far, we have listed four types of `depends` variables: `hostmakedepends`,
`makedepends`, `checkdepends` and plain old `depends`.To understand the difference `makedepends`, `checkdepends` and `depends`. These different kinds of variables
between them, understand this: Void Linux cross compiles for many arches. are necessary because `xbps-src` supports cross compilation and to avoid
Sometimes in a build process, certain programs must be run, for example `yacc`, or the installing unecessary packages in the build environment.
compiler itself for a C program. Those programs get put in `hostmakedepends`.
When the build runs, those will be installed on the host to help the build
complete.
Then there are those things for which a package either links against or During a build process, there are programs that must be _run_ on the host, such
includes header files. These are `makedepends`, and regardless of the as `yacc` or the C compiler. The packages that contain these programs should be
architecture of the build machine, the architecture of the target machine must listed in `hostmakedepends`, and will be installed on the host when building the
be used. Typically the `makedepends` will be the only one of the three types of target package. Some of these packages are dependencies of the `base-chroot`
`depends` to include `-devel` packages, and typically only `-devel` packages. package and don't need to be listed. It is possible that some of the programs
necessary to build a project are located in `-devel` packages.
Then there are those things that are required for a package to run its testsuite The target package can also depend on other packages for libraries to link
`dejagnu` or libraries it must link to when building test binaries like `cmocka`. against or header files. These packages should be listed in `makedepends` and
These are `checkdepends` and they are installed like they are part of `makedepends`. will match the target architecture, regardless of the architecture of the build
the difference is that they are only installed when `XBPS_CHECK_PKGS` is defined. machine. Typically, `makedepends` will contain mainly `-devel` packages.
The final variable, `depends`, is for those things the package needs at Furthermore, if `XBPS_CHECK_PKGS` is set or the `-Q` option is passed to
runtime and without which is unusable, and that xbps can't auto-detect. `xbps-src`, the target package might require specific dependencies or libraries
These are not all the packages the package needs at runtime, but only those that are linked into its test binaries to run its test suite. These dependencies
that are not linked against. This variable is most useful for non-compiled should be listed in `checkdepends` and will be installed as if they were part of
programs. `hostmakedepends`. Some dependencies that can be included in `checkdepends` are:
Finally, as a general rule, if something compiles the exact same way whether or - `dejagnu`: used for some GNU projects
not you add a particular package to `makedepends` or `hostmakedepends`, it - `cmocka-devel`: linked into test binaries
shouldn't be added. - `dbus`: makes it possible to run `dbus-run-session <test-command>` to provide
a D-Bus session for applications that need it
- `git`: some test suites run the `git` command
Lastly, a package may require certain dependencies at runtime, without which it
is unusable. These dependencies, when they aren't detected automatically by
XBPS, should be listed in `depends`. This is mostly relevant for Perl and Python
modules and other programs that use `dlopen(3)` instead of dynamically linking.
Finally, as a general rule, if a package is built the exact same way whether or
not a particular package is present in `makedepends` or `hostmakedepends`, that
package shouldn't be added as a build time dependency.
<a id="repositories"></a> <a id="repositories"></a>
#### Repositories #### Repositories