################################################################################ # Perl package infrastructure # # This file implements an infrastructure that eases development of # package .mk files for Perl packages. # # See the Buildroot documentation for details on the usage of this # infrastructure # # In terms of implementation, this perl 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 perl behaviour. The # package can also define some post operation hooks. # ################################################################################ PERL_ARCHNAME = $(ARCH)-linux PERL_RUN = PERL5LIB= PERL_USE_UNSAFE_INC=1 $(HOST_DIR)/bin/perl ################################################################################ # inner-perl-package -- defines how the configuration, compilation and # installation of a perl package should be done, implements a # few hooks to tune the build process for perl 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-perl-package # Target packages need both the perl interpreter on the target (for # runtime) and the perl interpreter on the host (for # compilation). However, host packages only need the perl # interpreter on the host. ifeq ($(4),target) $(2)_DEPENDENCIES += host-perl perl else $(2)_DEPENDENCIES += host-perl endif # From http://perldoc.perl.org/CPAN.html#Config-Variables - prefer_installer # legal values are MB and EUMM: if a module comes # with both a Makefile.PL and a Build.PL, use the # former (EUMM) or the latter (MB); if the module # comes with only one of the two, that one will be # used no matter the setting $(2)_PREFER_INSTALLER ?= MB # # Configure step. Only define it if not already defined by the package # .mk file. And take care of the differences between host and target # packages. # ifndef $(2)_CONFIGURE_CMDS ifeq ($(4),target) # Configure package for target define $(2)_CONFIGURE_CMDS cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ $$($(2)_CONF_ENV) \ PERL_MM_USE_DEFAULT=1 \ $$(PERL_RUN) Build.PL \ --config ar="$$(TARGET_AR)" \ --config full_ar="$$(TARGET_AR)" \ --config cc="$$(TARGET_CC)" \ --config ccflags="$$(TARGET_CFLAGS)" \ --config optimize=" " \ --config ld="$$(TARGET_CC)" \ --config lddlflags="-shared $$(TARGET_LDFLAGS)" \ --config ldflags="$$(TARGET_LDFLAGS)" \ --include_dirs $$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$$(PERL_ARCHNAME)/CORE \ --destdir $$(TARGET_DIR) \ --installdirs vendor \ --install_path lib=/usr/lib/perl5/site_perl/$$(PERL_VERSION) \ --install_path arch=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$$(PERL_ARCHNAME) \ --install_path bin=/usr/bin \ --install_path script=/usr/bin \ --install_path bindoc=/usr/share/man/man1 \ --install_path libdoc=/usr/share/man/man3 \ $$($(2)_CONF_OPTS); \ else \ $$($(2)_CONF_ENV) \ PERL_MM_USE_DEFAULT=1 \ PERL_AUTOINSTALL=--skipdeps \ $$(PERL_RUN) Makefile.PL \ AR="$$(TARGET_AR)" \ FULL_AR="$$(TARGET_AR)" \ CC="$$(TARGET_CC)" \ CCFLAGS="$$(TARGET_CFLAGS)" \ OPTIMIZE=" " \ LD="$$(TARGET_CC)" \ LDDLFLAGS="-shared $$(TARGET_LDFLAGS)" \ LDFLAGS="$$(TARGET_LDFLAGS)" \ PERL_ARCHLIB=$$(STAGING_DIR)/usr/lib/perl5/$$(PERL_VERSION)/$$(PERL_ARCHNAME) \ DESTDIR=$$(TARGET_DIR) \ INSTALLDIRS=vendor \ INSTALLVENDORLIB=/usr/lib/perl5/site_perl/$$(PERL_VERSION) \ INSTALLVENDORARCH=/usr/lib/perl5/site_perl/$$(PERL_VERSION)/$$(PERL_ARCHNAME) \ INSTALLVENDORBIN=/usr/bin \ INSTALLVENDORSCRIPT=/usr/bin \ INSTALLVENDORMAN1DIR=/usr/share/man/man1 \ INSTALLVENDORMAN3DIR=/usr/share/man/man3 \ $$($(2)_CONF_OPTS); \ fi endef else # Configure package for host define $(2)_CONFIGURE_CMDS cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ $$($(2)_CONF_ENV) \ PERL_MM_USE_DEFAULT=1 \ $$(PERL_RUN) Build.PL \ $$($(2)_CONF_OPTS); \ else \ $$($(2)_CONF_ENV) \ PERL_MM_USE_DEFAULT=1 \ PERL_AUTOINSTALL=--skipdeps \ $$(PERL_RUN) Makefile.PL \ $$($(2)_CONF_OPTS); \ fi endef endif endif # # Build step. Only define it if not already defined by the package .mk # file. And take care of the differences between host and target # packages. # ifndef $(2)_BUILD_CMDS ifeq ($(4),target) # Build package for target define $(2)_BUILD_CMDS cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ $$(PERL_RUN) Build $$($(2)_BUILD_OPTS) build; \ else \ $$(MAKE1) \ FIXIN=: \ $$($(2)_BUILD_OPTS) pure_all; \ fi endef else # Build package for host define $(2)_BUILD_CMDS cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ $$(PERL_RUN) Build $$($(2)_BUILD_OPTS) build; \ else \ $$(MAKE1) $$($(2)_BUILD_OPTS) pure_all; \ fi endef endif endif # # Host installation step. Only define it if not already defined by the # package .mk file. # ifndef $(2)_INSTALL_CMDS define $(2)_INSTALL_CMDS cd $$($$(PKG)_SRCDIR) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ $$(PERL_RUN) Build $$($(2)_INSTALL_TARGET_OPTS) install; \ else \ $$(MAKE1) $$($(2)_INSTALL_TARGET_OPTS) pure_install; \ fi 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) && if [ -f Build.PL ] && [ $$($(2)_PREFER_INSTALLER) != "EUMM" ] ; then \ $$(PERL_RUN) Build $$($(2)_INSTALL_TARGET_OPTS) install; \ else \ $$(MAKE1) $$($(2)_INSTALL_TARGET_OPTS) pure_install; \ fi endef endif # Call the generic package infrastructure to generate the necessary # make targets $(call inner-generic-package,$(1),$(2),$(3),$(4)) # Upgrade helper ifneq ($$($(3)_DISTNAME),) $(1)-upgrade: utils/scancpan -force -$(4) $$($(3)_DISTNAME) .PHONY: $(1)-upgrade endif endef ################################################################################ # perl-package -- the target generator macro for Perl packages ################################################################################ perl-package = $(call inner-perl-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) host-perl-package = $(call inner-perl-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)