fiddle perl
[buildroot.git] / package / perl / perl.mk
blob9febed8ca9ad20a0274064250e935df321b78dca
1 #############################################################
3 # perl
5 #############################################################
6 PERL_MAJ=5
7 PERL_VERSION=$(PERL_MAJ).8.8
8 PERL_SOURCE=perl-$(PERL_VERSION).tar.bz2
9 PERL_CAT:=$(BZCAT)
10 PERL_SITE=http://www.cpan.org/src/
11 PERL_DIR=$(BUILD_DIR)/perl-$(PERL_VERSION)
13 PERL_MODS_DIR=/usr/lib/perl$(PERL_MAJ)/$(PERL_VERSION)
14 PERL_MODS=$(subst ",,$(BR2_PACKAGE_PERL_MODULES))
15 # ")
16 ifeq ($(BR2_PACKAGE_AUTOMAKE),y)
17 PERL_MODS+=File/Basename.pm Errno.pm Config.pm IO/File.pm Symbol.pm \
18 SelectSaver.pm IO/Seekable.pm IO/Handle.pm IO.pm XSLoader.pm \
19 DynaLoader.pm AutoLoader.pm Carp/Heavy.pm
20 endif
22 ifeq ($(BR2_ENDIAN),"BIG")
23 ifeq ($(KERNEL_BITS),64)
24 PERL_BYTEORDER:=87654321
25 endif
26 ifeq ($(KERNEL_BITS),32)
27 PERL_BYTEORDER:=4321
28 endif
29 endif
30 ifeq ($(BR2_ENDIAN),"LITTLE")
31 ifeq ($(KERNEL_BITS),64)
32 PERL_BYTEORDER:=12345678
33 endif
34 ifeq ($(KERNEL_BITS),32)
35 PERL_BYTEORDER:=1234
36 endif
37 endif
38 ifeq ($(KERNEL_BITS),32)
39 PERL_is_32:=y
40 PERL_SIZEOF_LONG:=4
41 PERL_SIZEOF_LONG_LONG:=8
42 PERL_SIZEOF_LONG_DOUBLE:=12
43 PERL_TYPE_i32:=long
44 PERL_TYPE_i64:=long long
45 PERL_TYPE_QUAD:=long long
46 PERL_QUAD_KIND:=3
47 PERL_UID_FORMAT:=lu
48 endif
49 ifeq ($(KERNEL_BITS),64)
50 PERL_SIZEOF_LONG:=8
51 PERL_SIZEOF_LONG_LONG:=8
52 PERL_SIZEOF_LONG_DOUBLE:=16
53 PERL_TYPE_i32:=int
54 PERL_TYPE_i64:=long
55 PERL_TYPE_QUAD:=long
56 PERL_QUAD_KIND:=2
57 PERL_UID_FORMAT:=u
58 endif
61 ifneq ($(PERL_VERSION),$(MICROPERL_VERSION))
62 $(DL_DIR)/$(PERL_SOURCE):
63 $(WGET) -P $(DL_DIR) $(PERL_SITE)/$(PERL_SOURCE)
64 endif
66 $(PERL_DIR)/.unpacked: $(DL_DIR)/$(PERL_SOURCE)
67 rm -rf $(BUILD_DIR)/tmp.perl
68 mkdir -p $(BUILD_DIR)/tmp.perl
69 $(PERL_CAT) $(DL_DIR)/$(PERL_SOURCE) | tar -C $(BUILD_DIR)/tmp.perl $(TAR_OPTIONS) -
70 mv $(BUILD_DIR)/tmp.perl/perl-$(PERL_VERSION) $(@D)
71 toolchain/patch-kernel.sh $(PERL_DIR) package/perl/ perl-$(PERL_VERSION)\*.patch
72 touch $@
74 $(PERL_DIR)/.configured: $(PERL_DIR)/.unpacked
75 # First we need to build a perl for the host..
76 (cd $(PERL_DIR); ./Configure -de; \
77 $(MAKE1) CC="$(HOSTCC)" && \
78 mv perl hostperl && ln -sf hostperl miniperl; \
80 # ..then we can try to build it for the target. Must be some obscure
81 # kind of feature.
83 # Unsurprisingly also it's configury sucks
84 (cd $(PERL_DIR); rm -f config.sh Policy.sh; \
85 $(CONFIG_SHELL) ./Configure -deE \
86 -DXXXusecrosscompile=yes_my_dear_and_apparently_you_could_impossibly_autodetect_this_fact \
87 -DXXXcc="$(TARGET_CC)" \
88 -DXXXcflags="$(TARGET_CFLAGS)" \
89 -DXXXoptimize="$(TARGET_CFLAGS)" \
90 -DXXXldflags="$(TARGET_LDFLAGS)" \
91 -Dcf_by="Buildroot $(BR2_VERSION)" \
92 -A define:osvers=$(LINUX_HEADERS_VERSION) \
93 -Dinstallprefix="$(STAGING_DIR)" \
94 -Dprefix=/usr \
95 -Dvendorprefix=/usr \
96 -Dsiteprefix=/usr \
97 -Dprivlib=$(STAGING_DIR)/$(PERL_MODS_DIR) \
98 -Darchlib=$(STAGING_DIR)/$(PERL_MODS_DIR) \
99 -Dvendorlib=$(STAGING_DIR)/$(PERL_MODS_DIR) \
100 -Dvendorarch=$(STAGING_DIR)/$(PERL_MODS_DIR) \
101 -Dsitelib=$(STAGING_DIR)/$(PERL_MODS_DIR) \
102 -Dsitearch=$(STAGING_DIR)/$(PERL_MODS_DIR) \
103 $(if $(BR2_ENABLE_SHARED),-Duseshrplib,-Uuseshrplib) \
104 $(if $(BR2_PTHREADS_NONE),-Uusethreads -Uuseithreads,-Dusethreads -Duseithreads) \
105 $(if $(BR2_LARGEFILE),-Duselargefiles -Dd_uselargefiles,-Uuselargefiles -Ud_uselargefiles -Ud_readdir64_r -Ud_off64_t) \
106 -Ud_dosuid \
107 -Ui_db \
108 -Ui_ndbm \
109 -Ui_gdbm \
110 $(if $(BR2__UCLIBC_UCLIBC_HAS_SHADOW),-Di_shadow,-Ui_shadow) \
111 $(if $(BR2__UCLIBC_UCLIBC_HAS_SYSLOG),-Di_syslog,-Ui_syslog) \
112 -Ud_crypt_r \
113 -Ud_getnetbyaddr_r \
114 -Ud_getnetbyname_r \
115 -Ud_getnetent_r \
116 -Ud_eaccess \
117 -Duseperlio \
118 -Dman3ext=3pm \
119 -Uafs \
120 -Ud_csh \
121 -Uusesfio \
122 -Uusenm \
124 # despite specifying some desired settings above, this crap is broken
125 # enough not to set the config.sh properly, not even trivia like osvers.
126 # Fix this trash manually..
127 $(SED) \
128 "s|^\(optimize\)=.*|\1=\'$(TARGET_CFLAGS)\'|" \
129 -e "s|^\(osversXXX\)=.*|\1=\'$(LINUX_HEADERS_VERSION)\'|" \
130 -e "s|^\(ar\)=.*|\1=\'$(TARGET_AR)\'|" \
131 -e "s|^\(full_ar\)=.*|\1=\'$(TARGET_AR)\'|" \
132 -e "s|^\(archname\)=.*|\1=\'$(REAL_GNU_TARGET_NAME)\'|" \
133 -e "s|^\(cc\)=.*|\1=\'$(TARGET_CC) $(TARGET_CC_FLAGS)\'|" \
134 -e "s|^\(ld\)=.*|\1=\'$(TARGET_LD) $(TARGET_LD_FLAGS)\'|" \
135 -e "s|^\(ldflags\)=.*|\1=\'$(TARGET_LDFLAGS)\'|" \
136 -e "s|/usr/local/|$(STAGING_DIR)/usr/|g" \
137 -e "s|^\(byteorder\)=.*|\1=\'$(PERL_BYTEORDER)\'|" \
138 -e "s|^\(alignbytes\)=.*|\1=\'$(PERL_SIZEOF_LONG)\'|" \
139 -e "s|^\(longsize\)=.*|\1=\'$(PERL_SIZEOF_LONG)\'|" \
140 -e "s|^\(ivsize\)=.*|\1=\'$(PERL_SIZEOF_LONG)\'|" \
141 -e "s|^\(ptrsize\)=.*|\1=\'$(PERL_SIZEOF_LONG)\'|" \
142 -e "s|^\(sizesize\)=.*|\1=\'$(PERL_SIZEOF_LONG)\'|" \
143 -e "s|^\(uvsize\)=.*|\1=\'$(PERL_SIZEOF_LONG)\'|" \
144 -e "s|^\(longlongsize\)=.*|\1=\'$(PERL_SIZEOF_LONG_LONG)\'|" \
145 -e "s|^\(longdblsize\)=.*|\1=\'$(PERL_SIZEOF_LONG_DOUBLE)\'|" \
146 -e "s|^\(quadkind\)=.*|\1=\'$(PERL_QUAD_KIND)\'|" \
147 -e "s|^\(quadtype\)=.*|\1=\'$(PERL_TYPE_QUAD)\'|" \
148 -e "s|^\(uquadtype\)=.*|\1=\'unsigned $(PERL_TYPE_QUAD)\'|" \
149 -e "s|^\(i32type\)=.*|\1=\'$(PERL_TYPE_i32)\'|" \
150 -e "s|^\(u32type\)=.*|\1=\'unsigned $(PERL_TYPE_i32)\'|" \
151 -e "s|^\(i64type\)=.*|\1=\'$(PERL_TYPE_i64)\'|" \
152 -e "s|^\(u64type\)=.*|\1=\'unsigned $(PERL_TYPE_i64)\'|" \
153 -e "s|^\(d_u32align\)=.*|\1=\'$(if $(PERL_is_32),undef,define)\'|" \
154 -e "s|^\(nv_preserves_uv_bits\)=.*|\1=\'$(if $(PERL_is_32),32,53)\'|" \
155 -e "s|^\(use64bitall\)=.*|\1=\'$(if $(PERL_is_32),undef,define)\'|" \
156 -e "s|^\(use64bitint\)=.*|\1=\'$(if $(PERL_is_32),undef,define)\'|" \
157 -e "s|^\(selectminbits\)=.*|\1=\'$(if $(PERL_is_32),32,64)\'|" \
158 -e "s|^\(uidformat\)=.*|\1=\'\"$(PERL_UID_FORMAT)\"\'|" \
159 -e "s|^\(gidformat\)=.*|\1=\'\"$(PERL_UID_FORMAT)\"\'|" \
160 -e "s|^\(sPRIXU64\)=.*|\1=\'\"$(if $(PERL_is_32),LX,lX)\"\'|" \
161 -e "s|^\(sPRId64\)=.*|\1=\'\"$(if $(PERL_is_32),Ld,ld)\"\'|" \
162 -e "s|^\(sPRIi64\)=.*|\1=\'\"$(if $(PERL_is_32),Li,li)\"\'|" \
163 -e "s|^\(sPRIo64\)=.*|\1=\'\"$(if $(PERL_is_32),Lo,lo)\"\'|" \
164 -e "s|^\(sPRIu64\)=.*|\1=\'\"$(if $(PERL_is_32),Lu,lu)\"\'|" \
165 -e "s|^\(sPRIx64\)=.*|\1=\'\"$(if $(PERL_is_32),Lx,lx)\"\'|" \
166 -e "s|^\(sPRIEUldbl\)=.*|\1=\'\"$(if $(PERL_is_32),LE,lE)\"\'|" \
167 -e "s|^\(sPRIFUldbl\)=.*|\1=\'\"$(if $(PERL_is_32),LF,lF)\"\'|" \
168 -e "s|^\(sPRIGUldbl\)=.*|\1=\'\"$(if $(PERL_is_32),LG,lG)\"\'|" \
169 -e "s|^\(sPRIeldbl\)=.*|\1=\'\"$(if $(PERL_is_32),Le,le)\"\'|" \
170 -e "s|^\(sPRIfldbl\)=.*|\1=\'\"$(if $(PERL_is_32),Lf,lf)\"\'|" \
171 -e "s|^\(sPRIgldbl\)=.*|\1=\'\"$(if $(PERL_is_32),Lg,lg)\"\'|" \
172 -e "s|^\(sSCNfldbl\)=.*|\1=\'\"$(if $(PERL_is_32),Lf,lf)\"\'|" \
173 $(PERL_DIR)/config.sh
174 ifneq ($(BR2_LARGEFILE),y)
175 $(SED) \
176 "/cppsymbols/s/\(_LARGEFILE64_SOURCE\|_LARGEFILE_SOURCE\|__USE_LARGEFILE\|__USE_LARGEFILE64\)=[^[:space:]]*//" \
177 $(PERL_DIR)/config.sh
178 endif
179 cp -dpf $(PERL_DIR)/config.sh $(PERL_DIR)/config.sh.01
180 (cd $(PERL_DIR); \
181 $(CONFIG_SHELL) ./Configure -f config.sh -reS \
183 touch $@
185 $(PERL_DIR)/perl: $(PERL_DIR)/.configured
186 $(MAKE1) -C $(PERL_DIR)
188 $(TARGET_DIR)/usr/bin/perl: $(PERL_DIR)/perl
189 ifneq ($(PERL_MODS),)
190 (cd $(PERL_DIR); \
191 for i in $(PERL_MODS); do \
192 $(INSTALL) -D lib/$$i $(TARGET_DIR)/$(PERL_MODS_DIR)/$$i; \
193 done; \
195 endif
196 $(INSTALL) -D -m 0755 $(PERL_DIR)/perl $(TARGET_DIR)/usr/bin/perl
197 (cd $(TARGET_DIR)/usr/bin; rm -f perl; ln -s perl perl;)
199 perl: uclibc $(TARGET_DIR)/usr/bin/perl
201 perl-source: $(DL_DIR)/$(PERL_SOURCE)
203 perl-clean:
204 rm -rf $(TARGET_DIR)/usr/bin/perl \
205 $(TARGET_DIR)/$(PERL_MODS_DIR) $(TARGET_DIR)/usr/bin/perl
206 -rmdir $(TARGET_DIR)/usr/lib/perl$(PERL_MAJ)
207 -$(MAKE) -C $(PERL_DIR) clean
209 perl-dirclean:
210 rm -rf $(PERL_DIR)
212 #############################################################
214 # Toplevel Makefile options
216 #############################################################
217 ifeq ($(BR2_PACKAGE_PERL),y)
218 TARGETS+=perl
219 endif