# 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: $$$$@"; } elsif ($$$$!) { die "Could\047t run 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
|