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