You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

160 lines
4.0 KiB

# This makefile simplifies perl module builds.
#
# Build environment
HOST_PERL_PREFIX:=$(STAGING_DIR_HOST)/usr
ifneq ($(CONFIG_USE_GLIBC),)
EXTRA_LIBS:=bsd
EXTRA_LIBDIRS:=$(STAGING_DIR)/lib
endif
PERL_CMD:=$(STAGING_DIR_HOST)/usr/bin/perl5.20.0
MOD_CFLAGS_PERL:=$(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/5.20
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_HOST)/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"; do "Makefile.PL"' \
$(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/5.20/CORE/!' -i $(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/Install
$(call perlmod/Install/NoStrip,$(1),$(2),$(3))
@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
# 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