Merge pull request #4775 from lucize/pigeonup
[feed/packages.git] / lang / perl / perlmod.mk
1 # This makefile simplifies perl module builds.
2 #
3
4 PERL_VERSION:=5.24
5
6 # Build environment
7 HOST_PERL_PREFIX:=$(STAGING_DIR_HOSTPKG)/usr
8 ifneq ($(CONFIG_USE_GLIBC),)
9 EXTRA_LIBS:=bsd
10 EXTRA_LIBDIRS:=$(STAGING_DIR)/lib
11 endif
12 PERL_CMD:=$(STAGING_DIR_HOSTPKG)/usr/bin/perl$(PERL_VERSION).0
13
14 MOD_CFLAGS_PERL:=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(TARGET_CFLAGS) $(TARGET_CPPFLAGS)
15 ifdef CONFIG_PERL_THREADS
16 MOD_CFLAGS_PERL+= -D_REENTRANT -D_GNU_SOURCE
17 endif
18
19 # Module install prefix
20 PERL_SITELIB:=/usr/lib/perl5/$(PERL_VERSION)
21 PERL_TESTSDIR:=/usr/share/perl/perl-tests
22 PERLBASE_TESTSDIR:=/usr/share/perl/perlbase-tests
23 PERLMOD_TESTSDIR:=/usr/share/perl/perlmod-tests
24
25 define perlmod/host/relink
26 rm -f $(1)/Makefile.aperl
27 $(MAKE) -C $(1) perl
28 $(CP) $(1)/perl $(PERL_CMD)
29 $(CP) $(1)/perl $(STAGING_DIR_HOSTPKG)/usr/bin/perl
30 endef
31
32 define perlmod/host/Configure
33 (cd $(HOST_BUILD_DIR); \
34 PERL_MM_USE_DEFAULT=1 \
35 $(2) \
36 $(PERL_CMD) Makefile.PL \
37 $(1) \
38 );
39 endef
40
41 define perlmod/host/Compile
42 $(2) \
43 $(MAKE) -C $(HOST_BUILD_DIR) \
44 $(1) \
45 install
46 endef
47
48 define perlmod/host/Install
49 $(2) \
50 $(MAKE) -C $(HOST_BUILD_DIR) \
51 $(1) \
52 install
53 $(call perlmod/host/relink,$(HOST_BUILD_DIR))
54 endef
55
56 define perlmod/Configure
57 (cd $(if $(3),$(3),$(PKG_BUILD_DIR)); \
58 PERL_MM_USE_DEFAULT=1 \
59 $(2) \
60 $(PERL_CMD) -MConfig -e '$$$${tied %Config::Config}{cpprun}="$(GNU_TARGET_NAME)-cpp -E"; do "Makefile.PL"' \
61 $(1) \
62 AR=ar \
63 CC=$(GNU_TARGET_NAME)-gcc \
64 CCFLAGS="$(MOD_CFLAGS_PERL)" \
65 CCCDLFLAGS=-fPIC \
66 CCDLFLAGS=-Wl,-E \
67 DLEXT=so \
68 DLSRC=dl_dlopen.xs \
69 EXE_EXT=" " \
70 FULL_AR=$(GNU_TARGET_NAME)-ar \
71 LD=$(GNU_TARGET_NAME)-gcc \
72 LDDLFLAGS="-shared -rdynamic $(TARGET_LDFLAGS)" \
73 LDFLAGS="$(EXTRA_LIBDIRS:%=-L%) $(EXTRA_LIBS:%=-l%) " \
74 LIBC=" " \
75 LIB_EXT=.a \
76 OBJ_EXT=.o \
77 OSNAME=linux \
78 OSVERS=2.4.30 \
79 RANLIB=: \
80 SITELIBEXP=" " \
81 SITEARCHEXP=" " \
82 SO=so \
83 VENDORARCHEXP=" " \
84 VENDORLIBEXP=" " \
85 SITEPREFIX=/usr \
86 INSTALLPRIVLIB=$(PERL_SITELIB) \
87 INSTALLSITELIB=$(PERL_SITELIB) \
88 INSTALLVENDORLIB=" " \
89 INSTALLARCHLIB=$(PERL_SITELIB) \
90 INSTALLSITEARCH=$(PERL_SITELIB) \
91 INSTALLVENDORARCH=" " \
92 INSTALLBIN=/usr/bin \
93 INSTALLSITEBIN=/usr/bin \
94 INSTALLVENDORBIN=" " \
95 INSTALLSCRIPT=/usr/bin \
96 INSTALLSITESCRIPT=/usr/bin \
97 INSTALLVENDORSCRIPT=" " \
98 INSTALLMAN1DIR=/usr/man/man1 \
99 INSTALLSITEMAN1DIR=/usr/man/man1 \
100 INSTALLVENDORMAN1DIR=" " \
101 INSTALLMAN3DIR=/usr/man/man3 \
102 INSTALLSITEMAN3DIR=/usr/man/man3 \
103 INSTALLVENDORMAN3DIR=" " \
104 LINKTYPE=dynamic \
105 DESTDIR=$(PKG_INSTALL_DIR) \
106 );
107 sed 's!^PERL_INC = .*!PERL_INC = $(STAGING_DIR)/usr/lib/perl5/$(PERL_VERSION)/CORE/!' -i $(if $(3),$(3),$(PKG_BUILD_DIR))/Makefile
108 endef
109
110 define perlmod/Compile
111 PERL5LIB=$(PERL_LIB) \
112 $(2) \
113 $(MAKE) -C $(if $(3),$(3),$(PKG_BUILD_DIR)) \
114 $(1) \
115 install
116 endef
117
118 define perlmod/Install/NoStrip
119 $(INSTALL_DIR) $(strip $(1))$(PERL_SITELIB)
120 (cd $(PKG_INSTALL_DIR)$(PERL_SITELIB) && \
121 rsync --relative -rlHp --itemize-changes \
122 --exclude=\*.pod \
123 --exclude=.packlist \
124 $(addprefix --exclude=/,$(strip $(3))) \
125 --prune-empty-dirs \
126 $(strip $(2)) $(strip $(1))$(PERL_SITELIB))
127
128 chmod -R u+w $(strip $(1))$(PERL_SITELIB)
129 endef
130
131
132 define perlmod/_DoStrip
133 @echo "---> Stripping modules in: $(strip $(1))$(PERL_SITELIB)"
134 find $(strip $(1))$(PERL_SITELIB) -name \*.pm -or -name \*.pl | \
135 xargs -r sed -i \
136 -e '/^=\(head\|pod\|item\|over\|back\|encoding\|begin\|end\|for\)/,/^=cut/d' \
137 -e '/^=\(head\|pod\|item\|over\|back\|encoding\|begin\|end\|for\)/,$$$$d' \
138 -e '/^#$$$$/d' \
139 -e '/^#[^!"'"'"']/d'
140 endef
141
142 define perlmod/Install
143 $(call perlmod/Install/NoStrip,$(1),$(2),$(3))
144
145 $(if $(CONFIG_PERL_NOCOMMENT),$(if $(PKG_LEAVE_COMMENTS),,$(call perlmod/_DoStrip,$(1),$(2),$(3))))
146 endef
147
148 # You probably don't want to use this directly. Look at perlmod/InstallTests
149 define perlmod/_InstallTests
150 $(INSTALL_DIR) $(strip $(1))
151 (cd $(PKG_BUILD_DIR)/$(2) && \
152 rsync --relative -rlHp --itemize-changes \
153 --exclude=.packlist \
154 --prune-empty-dirs \
155 $(strip $(3)) $(strip $(1)))
156
157 chmod -R u+w $(strip $(1))
158 endef
159
160 define perlmod/InstallBaseTests
161 $(if $(CONFIG_PERL_TESTS),$(call perlmod/_InstallTests,$(1)$(PERL_TESTSDIR),,$(2)))
162 endef
163
164 define perlmod/InstallTests
165 $(if $(CONFIG_PERL_TESTS),$(call perlmod/_InstallTests,$(1)$(PERL_TESTSDIR),$(2),$(3)))
166 endef