]> rtime.felk.cvut.cz Git - coffee/buildroot.git/blob - package/pkg-waf.mk
package/xen: force location of init scripts
[coffee/buildroot.git] / package / pkg-waf.mk
1 ################################################################################
2 # WAF package infrastructure
3 #
4 # This file implements an infrastructure that eases development of package
5 # .mk files for WAF packages. It should be used for all packages that use
6 # WAF as their build system.
7 #
8 # See the Buildroot documentation for details on the usage of this
9 # infrastructure
10 #
11 # In terms of implementation, this WAF infrastructure requires the .mk file
12 # to only specify metadata information about the package: name, version,
13 # download URL, etc.
14 #
15 # We still allow the package .mk file to override what the different steps
16 # are doing, if needed. For example, if <PKG>_BUILD_CMDS is already defined,
17 # it is used as the list of commands to perform to build the package,
18 # instead of the default WAF behaviour. The package can also define some
19 # post operation hooks.
20 #
21 ################################################################################
22
23 ################################################################################
24 # inner-waf-package -- defines how the configuration, compilation and
25 # installation of a waf package should be done, implements a few hooks
26 # to tune the build process for waf specifities and calls the generic
27 # package infrastructure to generate the necessary make targets
28 #
29 #  argument 1 is the lowercase package name
30 #  argument 2 is the uppercase package name, including a HOST_ prefix
31 #             for host packages
32 #  argument 3 is the uppercase package name, without the HOST_ prefix
33 #             for host packages
34 #  argument 4 is the type (target or host)
35 ################################################################################
36
37 define inner-waf-package
38
39 # We need host-python to run waf
40 $(2)_DEPENDENCIES += host-python
41
42 $(2)_NEEDS_EXTERNAL_WAF ?= NO
43
44 # If the package does not have its own waf, use our own.
45 ifeq ($$($(2)_NEEDS_EXTERNAL_WAF),YES)
46 $(2)_DEPENDENCIES += host-waf
47 $(2)_WAF = $(HOST_DIR)/bin/waf
48 else
49 $(2)_WAF = ./waf
50 endif
51
52 $(2)_BUILD_OPTS                         ?=
53 $(2)_INSTALL_STAGING_OPTS               ?=
54 $(2)_INSTALL_TARGET_OPTS                ?=
55 $(2)_WAF_OPTS                           ?=
56
57 #
58 # Configure step. Only define it if not already defined by the package
59 # .mk file.
60 #
61 ifndef $(2)_CONFIGURE_CMDS
62 define $(2)_CONFIGURE_CMDS
63         cd $$(@D) && \
64         $$(TARGET_CONFIGURE_OPTS) \
65         $$($(2)_CONF_ENV) \
66         $$(HOST_DIR)/bin/python2 $$($(2)_WAF) configure \
67                 --prefix=/usr \
68                 --libdir=/usr/lib \
69                 $$($(2)_CONF_OPTS) \
70                 $$($(2)_WAF_OPTS)
71 endef
72 endif
73
74 #
75 # Build step. Only define it if not already defined by the package .mk
76 # file.
77 #
78 ifndef $(2)_BUILD_CMDS
79 define $(2)_BUILD_CMDS
80         cd $$(@D) && \
81         $$(TARGET_MAKE_ENV) $$(HOST_DIR)/bin/python2 $$($(2)_WAF) \
82                 build -j $$(PARALLEL_JOBS) $$($(2)_BUILD_OPTS) \
83                 $$($(2)_WAF_OPTS)
84 endef
85 endif
86
87 #
88 # Staging installation step. Only define it if not already defined by
89 # the package .mk file.
90 #
91 ifndef $(2)_INSTALL_STAGING_CMDS
92 define $(2)_INSTALL_STAGING_CMDS
93         cd $$(@D) && \
94         $$(TARGET_MAKE_ENV) $$(HOST_DIR)/bin/python2 $$($(2)_WAF) \
95                 install --destdir=$$(STAGING_DIR) \
96                 $$($(2)_INSTALL_STAGING_OPTS) \
97                 $$($(2)_WAF_OPTS)
98 endef
99 endif
100
101 #
102 # Target installation step. Only define it if not already defined by
103 # the package .mk file.
104 #
105 ifndef $(2)_INSTALL_TARGET_CMDS
106 define $(2)_INSTALL_TARGET_CMDS
107         cd $$(@D) && \
108         $$(TARGET_MAKE_ENV) $$(HOST_DIR)/bin/python2 $$($(2)_WAF) \
109                 install --destdir=$$(TARGET_DIR) \
110                 $$($(2)_INSTALL_TARGET_OPTS) \
111                 $$($(2)_WAF_OPTS)
112 endef
113 endif
114
115 # Call the generic package infrastructure to generate the necessary
116 # make targets
117 $(call inner-generic-package,$(1),$(2),$(3),$(4))
118
119 endef
120
121 ################################################################################
122 # waf-package -- the target generator macro for WAF packages
123 ################################################################################
124
125 waf-package = $(call inner-waf-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)