Using Dependencies
Topic
A typical package Makefile will contain a section like:
define Package/tcpdump/default SECTION:=net CATEGORY:=Network DEPENDS:=+libpcap TITLE:=Network monitoring and data acquisition tool URL:=http://www.tcpdump.org/ endef
This page talks about what the DEPENDS:= line should look like.
Dependency types
- If you specify a package name without any ornaments then that means that the current package cannot be selected unless the package named in enabled. e.g., in
tcpdumpabove,
DEPENDS:=libpcap
would mean that tcpdump would not be shown as possible to be selected unless libpcap were already selected
- If you say
+packagethat means if the current package is selected, it will causepackageto be selected. This is the case withtcpdumpabove. It says that iftcpdumpis selected, then selectlibpcap. e.g.
DEPENDS:=+libpcap
- If you say
+PACKAGE_packageb:packagec, it means thatpackagecwill only get selected by the current package (e.g.tcpdump) ifpackagebis enabled. e.g.
DEPENDS:=+PACKAGE_arpd:libpcapwould mean that if
tcpdump was selected, then if arpd was also selected, select libpcap
- If you say
@SYMBOLthat means that CONFIG_SYMBOL must be defined by OpenWRT in order for thepackageto be available for selection. e.g
DEPENDS:=@USB_SUPPORTwould mean that the package wouldn't even appear unless config symbol CONFIG_USB_SUPPORT was defined, for example by the package
usb-core
Special Notes
It is possible to do select and depend on packages outside the usual DEPENDS definition. If, in the package Makefile, you have a definition:
define Package/package-name/config
...config stuff
endef
then you can include the following directives.
| Directive | Meaning |
|---|---|
| select package | Selects a package if this package is selected |
| select package if packageb | Selects a package if packageb is selected as well as this package |
| select package if SYMBOL | Selects a package if CONFIG_SYMBOL is defined |
| depends packageb | This package depends on packageb (i.e. won't even show up, unless packageb is selected) |
| depends packageb if packagec | This package depends on packageb if packagec is selected |
| select SYMBOL | Sets a symbol to y if this package is selected (.e.g. select BUSYBOX_FEATURE_MKSWAP_UUID) |
| select SYMBOL if packageb | Like select SYMBOL but only if packageb is selected |
| select SYMBOL if SYMBOL2 | Like select SYMBOL but only if SYMBOL2 is defined |
The author is not aware of the ability to do depends SYMBOL.
Note that the if directives may also include &&, ||, !, and uses parentheses () to use logical expression for AND (&&), OR (||) and NOT (!), and for order of operations ('()').
There is also a default 'y' SYMBOL directive but the author is hazy on the details.
Caveats
Dependencies MAY NOT be circular (i.e. Package A may not depend on Package B, which in turn depends on Package A). If a circular dependency is created (whether directly or through another package), strange make menuconfig behaviour will be the result.
Bugs
There may be bugs in the OpenWRT build system wrt to dependencies. If you can confirm that you have a dependency problem, please report a bug. The developers would appreciate the following information:
- the relevant portions of
$ROOTDIR/tmp/.config-package.in(where $ROOTDIR is your OpenWRT source root dir)
NB Many apparent bugs are caused by circular dependencies. The openwrt build system doesn't like circular dependencies.
doc/devel/dependencies.txt · Last modified: 2010/07/21 03:16 by jow