xref: /OK3568_Linux_fs/buildroot/package/pkg-virtual.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2# Virtual package infrastructure
3#
4# This file implements an infrastructure that eases development of
5# package .mk files for virtual packages. It should be used for all
6# virtual packages.
7#
8# See the Buildroot documentation for details on the usage of this
9# infrastructure
10#
11# In terms of implementation, this virtual infrastructure requires
12# the .mk file to only call the 'virtual-package' macro.
13#
14################################################################################
15
16
17################################################################################
18# inner-virtual-package -- defines the dependency rules of the virtual
19# package against its provider.
20#
21#  argument 1 is the lowercase package name
22#  argument 2 is the uppercase package name, including a HOST_ prefix
23#             for host packages
24#  argument 3 is the uppercase package name, without the HOST_ prefix
25#             for host packages
26#  argument 4 is the type (target or host)
27################################################################################
28
29# Note: putting this comment here rather than in the define block, otherwise
30# make would try to expand the $(error ...) in the comment, which is not
31# really what we want.
32# We need to use second-expansion for the $(error ...) call, below,
33# so it is not evaluated now, but as part of the generated make code.
34
35define inner-virtual-package
36
37# Ensure the virtual package has an implementation defined.
38ifeq ($$(BR2_PACKAGE_HAS_$(2)),y)
39ifeq ($$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2))),)
40$$(error No implementation selected for virtual package $(1). Configuration error)
41endif
42endif
43
44# explicitly set these so we do not get confused by environment
45# variables with the same names.
46$(2)_VERSION =
47$(2)_SOURCE =
48
49$(2)_IS_VIRTUAL = YES
50
51# Add dependency against the provider
52# For a host package, there is no corresponding BR2_PACKAGE_PROVIDES_HOST_FOO,
53# so we need to compute it from the target variant.
54ifeq ($(4),target)
55$(2)_DEPENDENCIES += $$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2)))
56else
57ifeq ($$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2))),)
58# Inherit from target package BR2_PACKAGE_PROVIDES_FOO
59$(2)_DEPENDENCIES += host-$$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(3)))
60else
61# BR2_PACKAGE_PROVIDES_HOST_<pkg> is explicitly defined
62$(2)_DEPENDENCIES += $$(call qstrip,$$(BR2_PACKAGE_PROVIDES_$(2)))
63endif
64endif
65
66# Call the generic package infrastructure to generate the necessary
67# make targets
68$(call inner-generic-package,$(1),$(2),$(3),$(4))
69
70endef
71
72################################################################################
73# virtual-package -- the target generator macro for virtual packages
74################################################################################
75
76virtual-package = $(call inner-virtual-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
77host-virtual-package = $(call inner-virtual-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
78