216 lines
7.0 KiB
Makefile
216 lines
7.0 KiB
Makefile
################################################################################
|
|
# 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 <PKG>_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)
|