packages/lang/perl/perlmod.mk
Philip Prindeville a4aaaf8d8f perl: when Makefile.PL fails give more feedback
There are a few packages which mysteriously fail during the configure
stage.  Give us better means of understanding why.

Also, some Makefile.PL's have "use" statements which reference
files which are in or under ".".

Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
2017-10-27 18:22:13 -06:00

166 lines
4.5 KiB
Makefile

# This makefile simplifies perl module builds.
#
PERL_VERSION:=5.26
# Build environment
HOST_PERL_PREFIX:=$(STAGING_DIR_HOSTPKG)/usr
ifneq ($(CONFIG_USE_GLIBC),)
EXTRA_LIBS:=bsd
EXTRA_LIBDIRS:=$(STAGING_DIR)/lib
endif
PERL_CMD:=$(STAGING_DIR_HOSTPKG)/usr/bin/perl$(PERL_VERSION).0
MOD_CFLAGS_PERL:=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(TARGET_CFLAGS) $(TARGET_CPPFLAGS)
ifdef CONFIG_PERL_THREADS
MOD_CFLAGS_PERL+= -D_REENTRANT -D_GNU_SOURCE
endif
# Module install prefix
PERL_SITELIB:=/usr/lib/perl5/$(PERL_VERSION)
PERL_TESTSDIR:=/usr/share/perl/perl-tests
PERLBASE_TESTSDIR:=/usr/share/perl/perlbase-tests
PERLMOD_TESTSDIR:=/usr/share/perl/perlmod-tests
define perlmod/host/relink
rm -f $(1)/Makefile.aperl
$(MAKE) -C $(1) perl
$(CP) $(1)/perl $(PERL_CMD)
$(CP) $(1)/perl $(STAGING_DIR_HOSTPKG)/usr/bin/perl
endef
define perlmod/host/Configure
(cd $(HOST_BUILD_DIR); \
PERL_MM_USE_DEFAULT=1 \
$(2) \
$(PERL_CMD) Makefile.PL \
$(1) \
);
endef
define perlmod/host/Compile
$(2) \
$(MAKE) -C $(HOST_BUILD_DIR) \
$(1) \
install
endef
define perlmod/host/Install
$(2) \
$(MAKE) -C $(HOST_BUILD_DIR) \
$(1) \
install
$(call perlmod/host/relink,$(HOST_BUILD_DIR))
endef
define perlmod/Configure
(cd $(if $(3),$(3),$(PKG_BUILD_DIR)); \
PERL_MM_USE_DEFAULT=1 \
$(2) \
$(PERL_CMD) -MConfig -e '$$$${tied %Config::Config}{cpprun}="$(GNU_TARGET_NAME)-cpp -E"; unshift(@INC, "."); unless (defined (do "./Makefile.PL")) { if ($$$$@) { die "couldn\047t parse Makefile.PL: $$$$@"; } else { die "couldn\047t do Makefile.PL: $$$$!"; } }; die "No Makefile generated!" unless -f "Makefile";' \
$(1) \
AR=ar \
CC=$(GNU_TARGET_NAME)-gcc \
CCFLAGS="$(MOD_CFLAGS_PERL)" \
CCCDLFLAGS=-fPIC \
CCDLFLAGS=-Wl,-E \
DLEXT=so \
DLSRC=dl_dlopen.xs \
EXE_EXT=" " \
FULL_AR=$(GNU_TARGET_NAME)-ar \
LD=$(GNU_TARGET_NAME)-gcc \
LDDLFLAGS="-shared -rdynamic $(TARGET_LDFLAGS)" \
LDFLAGS="$(EXTRA_LIBDIRS:%=-L%) $(EXTRA_LIBS:%=-l%) " \
LIBC=" " \
LIB_EXT=.a \
OBJ_EXT=.o \
OSNAME=linux \
OSVERS=2.4.30 \
RANLIB=: \
SITELIBEXP=" " \
SITEARCHEXP=" " \
SO=so \
VENDORARCHEXP=" " \
VENDORLIBEXP=" " \
SITEPREFIX=/usr \
INSTALLPRIVLIB=$(PERL_SITELIB) \
INSTALLSITELIB=$(PERL_SITELIB) \
INSTALLVENDORLIB=" " \
INSTALLARCHLIB=$(PERL_SITELIB) \
INSTALLSITEARCH=$(PERL_SITELIB) \
INSTALLVENDORARCH=" " \
INSTALLBIN=/usr/bin \
INSTALLSITEBIN=/usr/bin \
INSTALLVENDORBIN=" " \
INSTALLSCRIPT=/usr/bin \
INSTALLSITESCRIPT=/usr/bin \
INSTALLVENDORSCRIPT=" " \
INSTALLMAN1DIR=/usr/man/man1 \
INSTALLSITEMAN1DIR=/usr/man/man1 \
INSTALLVENDORMAN1DIR=" " \
INSTALLMAN3DIR=/usr/man/man3 \
INSTALLSITEMAN3DIR=/usr/man/man3 \
INSTALLVENDORMAN3DIR=" " \
LINKTYPE=dynamic \
DESTDIR=$(PKG_INSTALL_DIR) \
);
sed 's!^PERL_INC = .*!PERL_INC = $(STAGING_DIR)/usr/lib/perl5/$(PERL_VERSION)/CORE/!' -i $(if $(3),$(3),$(PKG_BUILD_DIR))/Makefile
endef
define perlmod/Compile
PERL5LIB=$(PERL_LIB) \
$(2) \
$(MAKE) -C $(if $(3),$(3),$(PKG_BUILD_DIR)) \
$(1) \
install
endef
define perlmod/Install/NoStrip
$(INSTALL_DIR) $(strip $(1))$(PERL_SITELIB)
(cd $(PKG_INSTALL_DIR)$(PERL_SITELIB) && \
rsync --relative -rlHp --itemize-changes \
--exclude=\*.pod \
--exclude=.packlist \
$(addprefix --exclude=/,$(strip $(3))) \
--prune-empty-dirs \
$(strip $(2)) $(strip $(1))$(PERL_SITELIB))
chmod -R u+w $(strip $(1))$(PERL_SITELIB)
endef
define perlmod/_DoStrip
@echo "---> Stripping modules in: $(strip $(1))$(PERL_SITELIB)"
find $(strip $(1))$(PERL_SITELIB) -name \*.pm -or -name \*.pl | \
xargs -r sed -i \
-e '/^=\(head\|pod\|item\|over\|back\|encoding\|begin\|end\|for\)/,/^=cut/d' \
-e '/^=\(head\|pod\|item\|over\|back\|encoding\|begin\|end\|for\)/,$$$$d' \
-e '/^#$$$$/d' \
-e '/^#[^!"'"'"']/d'
endef
define perlmod/Install
$(call perlmod/Install/NoStrip,$(1),$(2),$(3))
$(if $(CONFIG_PERL_NOCOMMENT),$(if $(PKG_LEAVE_COMMENTS),,$(call perlmod/_DoStrip,$(1),$(2),$(3))))
endef
# You probably don't want to use this directly. Look at perlmod/InstallTests
define perlmod/_InstallTests
$(INSTALL_DIR) $(strip $(1))
(cd $(PKG_BUILD_DIR)/$(2) && \
rsync --relative -rlHp --itemize-changes \
--exclude=.packlist \
--prune-empty-dirs \
$(strip $(3)) $(strip $(1)))
chmod -R u+w $(strip $(1))
endef
define perlmod/InstallBaseTests
$(if $(CONFIG_PERL_TESTS),$(call perlmod/_InstallTests,$(1)$(PERL_TESTSDIR),,$(2)))
endef
define perlmod/InstallTests
$(if $(CONFIG_PERL_TESTS),$(call perlmod/_InstallTests,$(1)$(PERL_TESTSDIR),$(2),$(3)))
endef