################################################################################ # WAF package infrastructure # # This file implements an infrastructure that eases development of package # .mk files for WAF packages. It should be used for all packages that use # WAF as their build system. # # See the Buildroot documentation for details on the usage of this # infrastructure # # In terms of implementation, this WAF infrastructure requires the .mk file # to only specify metadata information about the package: name, version, # download URL, etc. # # We still allow the package .mk file to override what the different steps # are doing, if needed. For example, if _BUILD_CMDS is already defined, # it is used as the list of commands to perform to build the package, # instead of the default WAF behaviour. The package can also define some # post operation hooks. # ################################################################################ WAF_OPTS = $(if $(VERBOSE),-v) -j $(PARALLEL_JOBS) ################################################################################ # inner-waf-package -- defines how the configuration, compilation and # installation of a waf package should be done, implements a few hooks # to tune the build process for waf specifities and calls the generic # package infrastructure to generate the necessary make targets # # argument 1 is the lowercase package name # argument 2 is the uppercase package name, including a HOST_ prefix # for host packages # argument 3 is the uppercase package name, without the HOST_ prefix # for host packages # argument 4 is the type (target or host) ################################################################################ define inner-waf-package # The version of waflib has to match with the version of waf, # otherwise waf errors out with: # Waf script 'X' and library 'Y' do not match define WAF_PACKAGE_REMOVE_WAF_LIB $$(RM) -fr $$(@D)/waf $$(@D)/waflib endef # We need host-python3 to run waf $(2)_DEPENDENCIES += host-python3 $(2)_NEEDS_EXTERNAL_WAF ?= NO # If the package does not have its own waf, use our own. ifeq ($$($(2)_NEEDS_EXTERNAL_WAF),YES) $(2)_DEPENDENCIES += host-waf $(2)_WAF = $$(HOST_DIR)/bin/waf $(2)_POST_PATCH_HOOKS += WAF_PACKAGE_REMOVE_WAF_LIB else $(2)_WAF ?= ./waf endif # # Configure step. Only define it if not already defined by the package # .mk file. # ifndef $(2)_CONFIGURE_CMDS define $(2)_CONFIGURE_CMDS cd $$($$(PKG)_SRCDIR) && \ $$(TARGET_CONFIGURE_OPTS) \ $$($(2)_CONF_ENV) \ $$(HOST_DIR)/bin/python3 $$($(2)_WAF) configure \ --prefix=/usr \ --libdir=/usr/lib \ $$($(2)_CONF_OPTS) \ $$($(2)_WAF_OPTS) endef endif # # Build step. Only define it if not already defined by the package .mk # file. # ifndef $(2)_BUILD_CMDS define $(2)_BUILD_CMDS cd $$($$(PKG)_SRCDIR) && \ $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$(HOST_DIR)/bin/python3 $$($(2)_WAF) \ build $$(WAF_OPTS) $$($(2)_BUILD_OPTS) \ $$($(2)_WAF_OPTS) endef endif # # Staging installation step. Only define it if not already defined by # the package .mk file. # ifndef $(2)_INSTALL_STAGING_CMDS define $(2)_INSTALL_STAGING_CMDS cd $$($$(PKG)_SRCDIR) && \ $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$(HOST_DIR)/bin/python3 $$($(2)_WAF) \ install --destdir=$$(STAGING_DIR) \ $$($(2)_INSTALL_STAGING_OPTS) \ $$($(2)_WAF_OPTS) endef endif # # Target installation step. Only define it if not already defined by # the package .mk file. # ifndef $(2)_INSTALL_TARGET_CMDS define $(2)_INSTALL_TARGET_CMDS cd $$($$(PKG)_SRCDIR) && \ $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$(HOST_DIR)/bin/python3 $$($(2)_WAF) \ install --destdir=$$(TARGET_DIR) \ $$($(2)_INSTALL_TARGET_OPTS) \ $$($(2)_WAF_OPTS) endef endif # Call the generic package infrastructure to generate the necessary # make targets $(call inner-generic-package,$(1),$(2),$(3),$(4)) endef ################################################################################ # waf-package -- the target generator macro for WAF packages ################################################################################ waf-package = $(call inner-waf-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)