xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/perl/perl_5.34.1.bb (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunSUMMARY = "Perl scripting language"
2*4882a593SmuzhiyunHOMEPAGE = "http://www.perl.org/"
3*4882a593SmuzhiyunDESCRIPTION = "Perl is a highly capable, feature-rich programming language"
4*4882a593SmuzhiyunSECTION = "devel"
5*4882a593SmuzhiyunLICENSE = "Artistic-1.0 | GPL-1.0-or-later"
6*4882a593SmuzhiyunLIC_FILES_CHKSUM = "file://Copying;md5=5b122a36d0f6dc55279a0ebc69f3c60b \
7*4882a593Smuzhiyun                    file://Artistic;md5=71a4d5d9acc18c0952a6df2218bb68da \
8*4882a593Smuzhiyun                    "
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunSRC_URI = "https://www.cpan.org/src/5.0/perl-${PV}.tar.gz;name=perl \
12*4882a593Smuzhiyun           file://perl-rdepends.txt \
13*4882a593Smuzhiyun           file://0001-Somehow-this-module-breaks-through-the-perl-wrapper-.patch \
14*4882a593Smuzhiyun           file://errno_ver.diff \
15*4882a593Smuzhiyun           file://native-perlinc.patch \
16*4882a593Smuzhiyun           file://perl-dynloader.patch \
17*4882a593Smuzhiyun           file://0002-Constant-Fix-up-shebang.patch \
18*4882a593Smuzhiyun           file://determinism.patch \
19*4882a593Smuzhiyun           file://0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch \
20*4882a593Smuzhiyun           file://0001-Fix-build-with-gcc-12.patch \
21*4882a593Smuzhiyun           "
22*4882a593SmuzhiyunSRC_URI:append:class-native = " \
23*4882a593Smuzhiyun           file://perl-configpm-switch.patch \
24*4882a593Smuzhiyun"
25*4882a593SmuzhiyunSRC_URI:append:class-target = " \
26*4882a593Smuzhiyun           file://encodefix.patch \
27*4882a593Smuzhiyun"
28*4882a593Smuzhiyun
29*4882a593SmuzhiyunSRC_URI[perl.sha256sum] = "357951a491b0ba1ce3611263922feec78ccd581dddc24a446b033e25acf242a1"
30*4882a593Smuzhiyun
31*4882a593SmuzhiyunS = "${WORKDIR}/perl-${PV}"
32*4882a593Smuzhiyun
33*4882a593Smuzhiyuninherit upstream-version-is-even update-alternatives
34*4882a593Smuzhiyun
35*4882a593SmuzhiyunDEPENDS += "perlcross-native zlib virtual/crypt"
36*4882a593Smuzhiyun# make 4.1 has race issues with the double-colon usage of MakeMaker, see #14096
37*4882a593SmuzhiyunDEPENDS += "make-native"
38*4882a593Smuzhiyun
39*4882a593SmuzhiyunPERL_LIB_VER = "${@'.'.join(d.getVar('PV').split('.')[0:2])}.0"
40*4882a593Smuzhiyun
41*4882a593SmuzhiyunPACKAGECONFIG ??= "gdbm"
42*4882a593SmuzhiyunPACKAGECONFIG[bdb] = ",-Ui_db,db"
43*4882a593SmuzhiyunPACKAGECONFIG[gdbm] = ",-Ui_gdbm,gdbm"
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun# Don't generate comments in enc2xs output files. They are not reproducible
46*4882a593Smuzhiyunexport ENC2XS_NO_COMMENTS = "1"
47*4882a593Smuzhiyun
48*4882a593Smuzhiyundo_configure:prepend() {
49*4882a593Smuzhiyun    cp -rfp ${STAGING_DATADIR_NATIVE}/perl-cross/* ${S}
50*4882a593Smuzhiyun}
51*4882a593Smuzhiyun
52*4882a593Smuzhiyundo_configure:class-target() {
53*4882a593Smuzhiyun    ./configure --prefix=${prefix} --libdir=${libdir} \
54*4882a593Smuzhiyun    --target=${TARGET_SYS} \
55*4882a593Smuzhiyun    -Duseshrplib \
56*4882a593Smuzhiyun    -Dusethreads \
57*4882a593Smuzhiyun    -Dsoname=libperl.so.5 \
58*4882a593Smuzhiyun    -Dvendorprefix=${prefix} \
59*4882a593Smuzhiyun    -Dvendorlibdir=${libdir} \
60*4882a593Smuzhiyun    -Darchlibexp=${STAGING_LIBDIR}/perl5/${PV}/${TARGET_ARCH}-linux \
61*4882a593Smuzhiyun    -Dlibpth='${libdir} ${base_libdir}' \
62*4882a593Smuzhiyun    -Dglibpth='${libdir} ${base_libdir}' \
63*4882a593Smuzhiyun    -Alddlflags=' ${LDFLAGS}' \
64*4882a593Smuzhiyun    ${PACKAGECONFIG_CONFARGS}
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun    #perl.c uses an ARCHLIB_EXP define to generate compile-time code that
67*4882a593Smuzhiyun    #adds the archlibexp path to @INC during run-time initialization of a
68*4882a593Smuzhiyun    #new perl interpreter.
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun    #Because we've changed this value in a temporary way to make it
71*4882a593Smuzhiyun    #possible to use ExtUtils::Embed in the target build (the temporary
72*4882a593Smuzhiyun    #value in config.sh gets re-stripped out during packaging), the
73*4882a593Smuzhiyun    #ARCHLIB_EXP value that gets generated still uses the temporary version
74*4882a593Smuzhiyun    #instead of the original expected version (i.e. becauses it's in the
75*4882a593Smuzhiyun    #generated config.h, it doesn't get stripped out during packaging like
76*4882a593Smuzhiyun    #the others in config.sh).
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun    sed -i -e "s,${STAGING_LIBDIR},${libdir},g" config.h
79*4882a593Smuzhiyun}
80*4882a593Smuzhiyun
81*4882a593Smuzhiyundo_configure:class-nativesdk() {
82*4882a593Smuzhiyun    ./configure --prefix=${prefix} \
83*4882a593Smuzhiyun    --target=${TARGET_SYS} \
84*4882a593Smuzhiyun    -Duseshrplib \
85*4882a593Smuzhiyun    -Dusethreads \
86*4882a593Smuzhiyun    -Dsoname=libperl.so.5 \
87*4882a593Smuzhiyun    -Dvendorprefix=${prefix} \
88*4882a593Smuzhiyun    -Darchlibexp=${STAGING_LIBDIR}/perl5/${PV}/${TARGET_ARCH}-linux \
89*4882a593Smuzhiyun    -Alddlflags=' ${LDFLAGS}' \
90*4882a593Smuzhiyun    ${PACKAGECONFIG_CONFARGS}
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun    # See the comment above
93*4882a593Smuzhiyun    sed -i -e "s,${STAGING_LIBDIR},${libdir},g" config.h
94*4882a593Smuzhiyun}
95*4882a593Smuzhiyun
96*4882a593Smuzhiyundo_configure:class-native() {
97*4882a593Smuzhiyun    ./configure --prefix=${prefix} \
98*4882a593Smuzhiyun    -Dbin=${bindir}/perl-native \
99*4882a593Smuzhiyun    -Duseshrplib \
100*4882a593Smuzhiyun    -Dusethreads \
101*4882a593Smuzhiyun    -Dsoname=libperl.so.5 \
102*4882a593Smuzhiyun    -Dvendorprefix=${prefix} \
103*4882a593Smuzhiyun    -Ui_xlocale \
104*4882a593Smuzhiyun    -Alddlflags=' ${LDFLAGS}' \
105*4882a593Smuzhiyun    ${PACKAGECONFIG_CONFARGS}
106*4882a593Smuzhiyun}
107*4882a593Smuzhiyun
108*4882a593Smuzhiyundo_configure:append() {
109*4882a593Smuzhiyun    if [ -n "$SOURCE_DATE_EPOCH" ]; then
110*4882a593Smuzhiyun        PERL_BUILD_DATE="$(${PYTHON} -c "\
111*4882a593Smuzhiyunfrom datetime import datetime, timezone; \
112*4882a593Smuzhiyunprint(datetime.fromtimestamp($SOURCE_DATE_EPOCH, timezone.utc).strftime('%a %b %d %H:%M:%S %Y')) \
113*4882a593Smuzhiyun            ")"
114*4882a593Smuzhiyun        echo "#define PERL_BUILD_DATE \"$PERL_BUILD_DATE\"" >> config.h
115*4882a593Smuzhiyun    fi
116*4882a593Smuzhiyun}
117*4882a593Smuzhiyun
118*4882a593Smuzhiyundo_compile() {
119*4882a593Smuzhiyun    oe_runmake
120*4882a593Smuzhiyun    # This isn't generated reliably so delete and re-generate.
121*4882a593Smuzhiyun    # https://github.com/arsv/perl-cross/issues/86
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun    if [ -e pod/perltoc.pod ]; then
124*4882a593Smuzhiyun        bbnote Rebuilding perltoc.pod
125*4882a593Smuzhiyun        rm -f pod/perltoc.pod
126*4882a593Smuzhiyun        oe_runmake pod/perltoc.pod
127*4882a593Smuzhiyun    fi
128*4882a593Smuzhiyun}
129*4882a593Smuzhiyun
130*4882a593Smuzhiyundo_install() {
131*4882a593Smuzhiyun    oe_runmake 'DESTDIR=${D}' install
132*4882a593Smuzhiyun
133*4882a593Smuzhiyun    install -d ${D}${libdir}/perl5
134*4882a593Smuzhiyun    install -d ${D}${libdir}/perl5/${PV}/
135*4882a593Smuzhiyun    install -d ${D}${libdir}/perl5/${PV}/ExtUtils/
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun    # Save native config
138*4882a593Smuzhiyun    install config.sh ${D}${libdir}/perl5
139*4882a593Smuzhiyun    install lib/Config.pm ${D}${libdir}/perl5/${PV}/
140*4882a593Smuzhiyun    install lib/ExtUtils/typemap ${D}${libdir}/perl5/${PV}/ExtUtils/
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun    # Fix up shared library
143*4882a593Smuzhiyun    dir=$(echo ${D}/${libdir}/perl5/${PV}/*/CORE)
144*4882a593Smuzhiyun    rm $dir/libperl.so
145*4882a593Smuzhiyun    ln -sf ../../../../libperl.so.${PERL_LIB_VER} $dir/libperl.so
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun    # Try to catch Bug #13946
148*4882a593Smuzhiyun    if [ -e ${D}/${libdir}/perl5/${PV}/Storable.pm ]; then
149*4882a593Smuzhiyun        bbfatal 'non-arch specific Storable.pm found! See https://bugzilla.yoctoproject.org/show_bug.cgi?id=13946'
150*4882a593Smuzhiyun    fi
151*4882a593Smuzhiyun}
152*4882a593Smuzhiyun
153*4882a593Smuzhiyundo_install:append:class-target() {
154*4882a593Smuzhiyun    # This is used to substitute target configuration when running native perl via perl-configpm-switch.patch
155*4882a593Smuzhiyun    ln -s Config_heavy.pl ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy-target.pl
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun    # This contains host-specific information used for building miniperl (a helper executable built with host compiler)
158*4882a593Smuzhiyun    # and therefore isn't reproducible. I believe the file isn't actually needed on target.
159*4882a593Smuzhiyun    rm ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/xconfig.h
160*4882a593Smuzhiyun}
161*4882a593Smuzhiyun
162*4882a593Smuzhiyundo_install:append:class-nativesdk() {
163*4882a593Smuzhiyun    # This is used to substitute target configuration when running native perl via perl-configpm-switch.patch
164*4882a593Smuzhiyun    ln -s Config_heavy.pl ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy-target.pl
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun    create_wrapper ${D}${bindir}/perl \
167*4882a593Smuzhiyun        PERL5LIB='$PERL5LIB:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/site_perl/${PV}:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/vendor_perl/${PV}:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/${PV}'
168*4882a593Smuzhiyun}
169*4882a593Smuzhiyun
170*4882a593Smuzhiyundo_install:append:class-native () {
171*4882a593Smuzhiyun    # Those wrappers mean that perl installed from sstate (which may change
172*4882a593Smuzhiyun    # path location) works and that in the nativesdk case, the SDK can be
173*4882a593Smuzhiyun    # installed to a different location from the one it was built for.
174*4882a593Smuzhiyun    create_wrapper ${D}${bindir}/perl-native/perl PERL5LIB='$PERL5LIB:${STAGING_LIBDIR}/perl5/site_perl/${PV}:${STAGING_LIBDIR}/perl5/vendor_perl/${PV}:${STAGING_LIBDIR}/perl5/${PV}'
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun    # Use /usr/bin/env nativeperl for the perl script.
177*4882a593Smuzhiyun    for f in `grep -Il '#! *${bindir}/perl' ${D}/${bindir}/*`; do
178*4882a593Smuzhiyun            sed -i -e 's|${bindir}/perl|/usr/bin/env nativeperl|' $f
179*4882a593Smuzhiyun    done
180*4882a593Smuzhiyun}
181*4882a593Smuzhiyun
182*4882a593SmuzhiyunPACKAGE_PREPROCESS_FUNCS += "perl_package_preprocess"
183*4882a593Smuzhiyun
184*4882a593Smuzhiyunperl_package_preprocess () {
185*4882a593Smuzhiyun        # Fix up installed configuration
186*4882a593Smuzhiyun        sed -i -e "s,${D},,g" \
187*4882a593Smuzhiyun               -e "s,${DEBUG_PREFIX_MAP},,g" \
188*4882a593Smuzhiyun               -e "s,--sysroot=${STAGING_DIR_HOST},,g" \
189*4882a593Smuzhiyun               -e "s,-isystem${STAGING_INCDIR} ,,g" \
190*4882a593Smuzhiyun               -e "s,${STAGING_LIBDIR},${libdir},g" \
191*4882a593Smuzhiyun               -e "s,${STAGING_BINDIR},${bindir},g" \
192*4882a593Smuzhiyun               -e "s,${STAGING_INCDIR},${includedir},g" \
193*4882a593Smuzhiyun               -e "s,${STAGING_BINDIR_NATIVE}/perl-native/,${bindir}/,g" \
194*4882a593Smuzhiyun               -e "s,${STAGING_BINDIR_NATIVE}/,,g" \
195*4882a593Smuzhiyun               -e "s,${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX},${bindir},g" \
196*4882a593Smuzhiyun               -e 's:${RECIPE_SYSROOT}::g' \
197*4882a593Smuzhiyun            ${PKGD}${bindir}/h2xs.perl \
198*4882a593Smuzhiyun            ${PKGD}${bindir}/h2ph.perl \
199*4882a593Smuzhiyun            ${PKGD}${bindir}/pod2man.perl \
200*4882a593Smuzhiyun            ${PKGD}${bindir}/pod2text.perl \
201*4882a593Smuzhiyun            ${PKGD}${bindir}/pod2usage.perl \
202*4882a593Smuzhiyun            ${PKGD}${bindir}/podchecker.perl \
203*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/config.h \
204*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/perl.h \
205*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/pp.h \
206*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/Config.pm \
207*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pm \
208*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pod \
209*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_git.pl \
210*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy.pl \
211*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/ExtUtils/Liblist/Kid.pm \
212*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/FileCache.pm \
213*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/${PV}/pod/*.pod \
214*4882a593Smuzhiyun            ${PKGD}${libdir}/perl5/config.sh
215*4882a593Smuzhiyun}
216*4882a593Smuzhiyun
217*4882a593Smuzhiyuninherit update-alternatives
218*4882a593Smuzhiyun
219*4882a593SmuzhiyunALTERNATIVE_PRIORITY = "100"
220*4882a593Smuzhiyun
221*4882a593SmuzhiyunALTERNATIVE:${PN}-misc = "corelist cpan enc2xs encguess h2ph h2xs instmodsh json_pp libnetcfg \
222*4882a593Smuzhiyun                     piconv pl2pm pod2html pod2man pod2text pod2usage podchecker \
223*4882a593Smuzhiyun                     prove ptar ptardiff ptargrep shasum splain streamzip xsubpp zipdetails"
224*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[corelist] = "${bindir}/corelist"
225*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[cpan] = "${bindir}/cpan"
226*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[enc2xs] = "${bindir}/enc2xs"
227*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[encguess] = "${bindir}/encguess"
228*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[h2ph] = "${bindir}/h2ph"
229*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[h2xs] = "${bindir}/h2xs"
230*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[instmodsh] = "${bindir}/instmodsh"
231*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[json_pp] = "${bindir}/json_pp"
232*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[libnetcfg] = "${bindir}/libnetcfg"
233*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[piconv] = "${bindir}/piconv"
234*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[pl2pm] = "${bindir}/pl2pm"
235*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[pod2html] = "${bindir}/pod2html"
236*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[pod2man] = "${bindir}/pod2man"
237*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[pod2text] = "${bindir}/pod2text"
238*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[pod2usage] = "${bindir}/pod2usage"
239*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[podchecker] = "${bindir}/podchecker"
240*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[prove] = "${bindir}/prove"
241*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[ptar] = "${bindir}/ptar"
242*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[ptardiff] = "${bindir}/ptardiff"
243*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[ptargrep] = "${bindir}/ptargrep"
244*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[shasum] = "${bindir}/shasum"
245*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[splain] = "${bindir}/splain"
246*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[streamzip] = "${bindir}/streamzip"
247*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[xsubpp] = "${bindir}/xsubpp"
248*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[zipdetails] = "${bindir}/zipdetails"
249*4882a593Smuzhiyun
250*4882a593Smuzhiyunrequire perl-ptest.inc
251*4882a593Smuzhiyun
252*4882a593SmuzhiyunFILES:${PN} = "${bindir}/perl ${bindir}/perl.real ${bindir}/perl${PV} ${libdir}/libperl.so* \
253*4882a593Smuzhiyun               ${libdir}/perl5/site_perl \
254*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/Config.pm \
255*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pm \
256*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/*/Config_git.pl \
257*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/*/Config_heavy-target.pl \
258*4882a593Smuzhiyun               ${libdir}/perl5/config.sh \
259*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/strict.pm \
260*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/warnings.pm \
261*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/warnings \
262*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/vars.pm \
263*4882a593Smuzhiyun               ${libdir}/perl5/site_perl \
264*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/ExtUtils/MANIFEST.SKIP \
265*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/ExtUtils/xsubpp \
266*4882a593Smuzhiyun               ${libdir}/perl5/${PV}/ExtUtils/typemap \
267*4882a593Smuzhiyun               "
268*4882a593SmuzhiyunRPROVIDES:${PN} += "perl-module-strict perl-module-vars perl-module-config perl-module-warnings \
269*4882a593Smuzhiyun                    perl-module-warnings-register"
270*4882a593Smuzhiyun
271*4882a593SmuzhiyunFILES:${PN}-staticdev:append = " ${libdir}/perl5/${PV}/*/CORE/libperl.a"
272*4882a593Smuzhiyun
273*4882a593SmuzhiyunFILES:${PN}-dev:append = " ${libdir}/perl5/${PV}/*/CORE"
274*4882a593Smuzhiyun
275*4882a593SmuzhiyunFILES:${PN}-doc:append = " ${libdir}/perl5/${PV}/Unicode/Collate/*.txt \
276*4882a593Smuzhiyun                           ${libdir}/perl5/${PV}/*/.packlist \
277*4882a593Smuzhiyun                           ${libdir}/perl5/${PV}/Encode/encode.h \
278*4882a593Smuzhiyun                         "
279*4882a593SmuzhiyunPACKAGES += "${PN}-misc"
280*4882a593Smuzhiyun
281*4882a593SmuzhiyunFILES:${PN}-misc = "${bindir}/*"
282*4882a593Smuzhiyun
283*4882a593SmuzhiyunPACKAGES += "${PN}-pod"
284*4882a593Smuzhiyun
285*4882a593SmuzhiyunFILES:${PN}-pod = "${libdir}/perl5/${PV}/pod \
286*4882a593Smuzhiyun                   ${libdir}/perl5/${PV}/*.pod \
287*4882a593Smuzhiyun                   ${libdir}/perl5/${PV}/*/*.pod \
288*4882a593Smuzhiyun                   ${libdir}/perl5/${PV}/*/*/*.pod \
289*4882a593Smuzhiyun                   ${libdir}/perl5/${PV}/*/*/*/*.pod \
290*4882a593Smuzhiyun                  "
291*4882a593Smuzhiyun
292*4882a593SmuzhiyunPACKAGES += "${PN}-module-cpan ${PN}-module-unicore"
293*4882a593Smuzhiyun
294*4882a593SmuzhiyunFILES:${PN}-module-cpan += "${libdir}/perl5/${PV}/CPAN \
295*4882a593Smuzhiyun                          "
296*4882a593SmuzhiyunFILES:${PN}-module-unicore += "${libdir}/perl5/${PV}/unicore"
297*4882a593Smuzhiyun
298*4882a593SmuzhiyunALTERNATIVE_PRIORITY = "40"
299*4882a593SmuzhiyunALTERNATIVE:${PN}-doc = "Thread.3"
300*4882a593SmuzhiyunALTERNATIVE_LINK_NAME[Thread.3] = "${mandir}/man3/Thread.3"
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun# Create a perl-modules package recommending all the other perl
303*4882a593Smuzhiyun# packages (actually the non modules packages and not created too)
304*4882a593SmuzhiyunALLOW_EMPTY:${PN}-modules = "1"
305*4882a593SmuzhiyunPACKAGES += "${PN}-modules "
306*4882a593Smuzhiyun
307*4882a593SmuzhiyunPACKAGESPLITFUNCS:prepend = "split_perl_packages "
308*4882a593Smuzhiyun
309*4882a593Smuzhiyunpython split_perl_packages () {
310*4882a593Smuzhiyun    libdir = d.expand('${libdir}/perl5/${PV}')
311*4882a593Smuzhiyun    do_split_packages(d, libdir, r'.*/auto/([^.]*)/[^/]*\.(so|ld|ix|al)', '${PN}-module-%s', 'perl module %s', recursive=True, match_path=True, prepend=False)
312*4882a593Smuzhiyun    do_split_packages(d, libdir, r'.*linux/([^\/]*)\.pm', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
313*4882a593Smuzhiyun    do_split_packages(d, libdir, r'Module/([^\/]*)\.pm', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
314*4882a593Smuzhiyun    do_split_packages(d, libdir, r'Module/([^\/]*)/.*', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
315*4882a593Smuzhiyun    do_split_packages(d, libdir, r'.*linux/([^\/].*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
316*4882a593Smuzhiyun    do_split_packages(d, libdir, r'(^(?!(CPAN\/|CPANPLUS\/|Module\/|unicore\/|.*linux\/)[^\/]).*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False)
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun    # perl-modules should recommend every perl module, and only the
319*4882a593Smuzhiyun    # modules. Don't attempt to use the result of do_split_packages() as some
320*4882a593Smuzhiyun    # modules are manually split (eg. perl-module-unicore).
321*4882a593Smuzhiyun    packages = filter(lambda p: 'perl-module-' in p, d.getVar('PACKAGES').split())
322*4882a593Smuzhiyun    d.setVar(d.expand("RRECOMMENDS:${PN}-modules"), ' '.join(packages))
323*4882a593Smuzhiyun
324*4882a593Smuzhiyun    # Read the pre-generated dependency file, and use it to set module dependecies
325*4882a593Smuzhiyun    for line in open(d.expand("${WORKDIR}") + '/perl-rdepends.txt').readlines():
326*4882a593Smuzhiyun        splitline = line.split()
327*4882a593Smuzhiyun        # Filter empty lines and comments
328*4882a593Smuzhiyun        if len(splitline) == 0 or splitline[0].startswith("#"):
329*4882a593Smuzhiyun            continue
330*4882a593Smuzhiyun        if bb.data.inherits_class('native', d):
331*4882a593Smuzhiyun            module = splitline[0] + '-native'
332*4882a593Smuzhiyun            depends = "perl-native"
333*4882a593Smuzhiyun        else:
334*4882a593Smuzhiyun            module = splitline[0].replace("RDEPENDS:perl", "RDEPENDS:${PN}")
335*4882a593Smuzhiyun            depends = splitline[2].strip('"').replace("perl-module", "${PN}-module")
336*4882a593Smuzhiyun        d.appendVar(d.expand(module), " " + depends)
337*4882a593Smuzhiyun}
338*4882a593Smuzhiyun
339*4882a593Smuzhiyunpython() {
340*4882a593Smuzhiyun    if d.getVar('CLASSOVERRIDE') == "class-target":
341*4882a593Smuzhiyun        d.setVar("PACKAGES_DYNAMIC", "^${MLPREFIX}perl-module-.*(?<!native)$")
342*4882a593Smuzhiyun    elif d.getVar('CLASSOVERRIDE') == "class-native":
343*4882a593Smuzhiyun        d.setVar("PACKAGES_DYNAMIC", "^perl-module-.*-native$")
344*4882a593Smuzhiyun    elif d.getVar('CLASSOVERRIDE') == "class-nativesdk":
345*4882a593Smuzhiyun        d.setVar("PACKAGES_DYNAMIC", "^nativesdk-perl-module-.*")
346*4882a593Smuzhiyun}
347*4882a593Smuzhiyun
348*4882a593SmuzhiyunRDEPENDS:${PN}-misc += "perl perl-modules"
349*4882a593SmuzhiyunRDEPENDS:${PN}-pod += "perl"
350*4882a593Smuzhiyun
351*4882a593SmuzhiyunBBCLASSEXTEND = "native nativesdk"
352*4882a593Smuzhiyun
353*4882a593SmuzhiyunSSTATE_SCAN_FILES += "*.pm *.pod *.h *.pl *.sh"
354*4882a593Smuzhiyun
355*4882a593Smuzhiyundo_create_rdepends_inc() {
356*4882a593Smuzhiyun    cd ${WORKDIR}
357*4882a593Smuzhiyun    cat <<'EOPREAMBLE' > ${WORKDIR}/perl-rdepends.inc
358*4882a593Smuzhiyun
359*4882a593Smuzhiyun# Some additional dependencies that the above doesn't manage to figure out
360*4882a593SmuzhiyunRDEPENDS:${PN}-module-file-spec += "${PN}-module-file-spec-unix"
361*4882a593SmuzhiyunRDEPENDS:${PN}-module-scalar-util += "${PN}-module-list-util"
362*4882a593SmuzhiyunRDEPENDS:${PN}-module-file-temp += "${PN}-module-scalar-util"
363*4882a593SmuzhiyunRDEPENDS:${PN}-module-file-temp += "${PN}-module-file-spec"
364*4882a593SmuzhiyunRDEPENDS:${PN}-module-io-file += "${PN}-module-symbol"
365*4882a593SmuzhiyunRDEPENDS:${PN}-module-io-file += "${PN}-module-carp"
366*4882a593SmuzhiyunRDEPENDS:${PN}-module-math-bigint += "${PN}-module-math-bigint-calc"
367*4882a593SmuzhiyunRDEPENDS:${PN}-module-test-builder += "${PN}-module-list-util"
368*4882a593SmuzhiyunRDEPENDS:${PN}-module-test-builder += "${PN}-module-scalar-util"
369*4882a593SmuzhiyunRDEPENDS:${PN}-module-test-builder-formatter += "${PN}-module-test2-formatter-tap"
370*4882a593SmuzhiyunRDEPENDS:${PN}-module-test2-api += "${PN}-module-test2-event-fail"
371*4882a593SmuzhiyunRDEPENDS:${PN}-module-test2-api += "${PN}-module-test2-event-pass"
372*4882a593SmuzhiyunRDEPENDS:${PN}-module-test2-api += "${PN}-module-test2-event-v2"
373*4882a593SmuzhiyunRDEPENDS:${PN}-module-test2-formatter-tap += "${PN}-module-test2-formatter"
374*4882a593SmuzhiyunRDEPENDS:${PN}-module-thread-queue += "${PN}-module-attributes"
375*4882a593SmuzhiyunRDEPENDS:${PN}-module-overload += "${PN}-module-overloading"
376*4882a593Smuzhiyun
377*4882a593Smuzhiyun# Generated depends list beyond this line
378*4882a593SmuzhiyunEOPREAMBLE
379*4882a593Smuzhiyun    test -e packages-split.new && rm -rf packages-split.new
380*4882a593Smuzhiyun    cp -r packages-split packages-split.new && cd packages-split.new
381*4882a593Smuzhiyun    find . -name \*.pm | xargs sed -i '/^=head/,/^=cut/d'
382*4882a593Smuzhiyun    egrep -r "^\s*(\<use .*|\<require .*);?" perl-module-* --include="*.pm" | \
383*4882a593Smuzhiyun    sed "s/\/.*\.pm: */ += /g;s/[\"\']//g;s/;.*/\"/g;s/+= .*\(require\|use\)\> */+= \"perl-module-/g;s/CPANPLUS::.*/cpanplus/g;s/CPAN::.*/cpan/g;s/::/-/g;s/ [^+\"].*//g;s/_/-/g;s/\.pl\"$/\"/;s/\"\?\$/\"/;s/(//;s/)//;" | tr [:upper:] [:lower:] | \
384*4882a593Smuzhiyun    awk '{if ($3 != "\x22"$1"\x22"){ print $0}}'| \
385*4882a593Smuzhiyun    grep -v -e "\-vms\-" -e module-5 -e "^$" -e "\\$" -e your -e tk -e autoperl -e html -e http -e parse-cpan -e perl-ostype -e ndbm-file -e module-mac -e fcgi -e lwp -e dbd -e dbix | \
386*4882a593Smuzhiyun    sort -u | \
387*4882a593Smuzhiyun    sed 's/^/RDEPENDS:/;s/perl-module-/${PN}-module-/g;s/module-\(module-\)/\1/g;s/\(module-load\)-conditional/\1/g;s/encode-configlocal/&-pm/;' | \
388*4882a593Smuzhiyun    egrep -wv '=>|module-a|module-apache.?|module-apr|module-authen-sasl|module-b-asmdata|module-convert-ebcdic|module-devel-size|module-digest-perl-md5|module-dumpvalue|module-extutils-constant-aaargh56hash|module-extutils-xssymset|module-file-bsdglob|module-for|module-it|module-io-socket-inet6|module-io-socket-ssl|module-io-string|module-ipc-system-simple|module-lexical|module-local-lib|metadata|module-modperl-util|module-pluggable-object|module-test-builder-io-scalar|module-text-unidecode|module-unicore|module-win32|objects\sload|syscall.ph|systeminfo.ph|%s' | \
389*4882a593Smuzhiyun    egrep -wv '=>|module-algorithm-diff|module-carp|module-c<extutils-mm-unix>|module-l<extutils-mm-unix>|module-encode-hanextra|module-extutils-makemaker-version-regex|module-file-spec|module-io-compress-lzma|module-io-uncompress-unxz|module-locale-maketext-lexicon|module-log-agent|module-meta-notation|module-net-localcfg|module-net-ping-external|module-b-deparse|module-scalar-util|module-some-module|module-symbol|module-uri|module-win32api-file' > ${WORKDIR}/perl-rdepends.generated
390*4882a593Smuzhiyun    cat ${WORKDIR}/perl-rdepends.inc ${WORKDIR}/perl-rdepends.generated > ${THISDIR}/files/perl-rdepends.txt
391*4882a593Smuzhiyun}
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun# bitbake perl -c create_rdepends_inc
394*4882a593Smuzhiyunaddtask do_create_rdepends_inc
395*4882a593Smuzhiyun
396*4882a593SmuzhiyunSYSROOT_PREPROCESS_FUNCS += "perl_sysroot_create_wrapper"
397*4882a593Smuzhiyun
398*4882a593Smuzhiyunperl_sysroot_create_wrapper () {
399*4882a593Smuzhiyun       mkdir -p ${SYSROOT_DESTDIR}${bindir}
400*4882a593Smuzhiyun       # Create a wrapper that /usr/bin/env perl will use to get perl-native.
401*4882a593Smuzhiyun       # This MUST live in the normal bindir.
402*4882a593Smuzhiyun       cat > ${SYSROOT_DESTDIR}${bindir}/nativeperl << EOF
403*4882a593Smuzhiyun#!/bin/sh
404*4882a593Smuzhiyunrealpath=\`readlink -fn \$0\`
405*4882a593Smuzhiyunexec \`dirname \$realpath\`/perl-native/perl "\$@"
406*4882a593SmuzhiyunEOF
407*4882a593Smuzhiyun       chmod 0755 ${SYSROOT_DESTDIR}${bindir}/nativeperl
408*4882a593Smuzhiyun       cat ${SYSROOT_DESTDIR}${bindir}/nativeperl
409*4882a593Smuzhiyun}
410*4882a593Smuzhiyun
411*4882a593SmuzhiyunSSTATE_HASHEQUIV_FILEMAP = " \
412*4882a593Smuzhiyun    populate_sysroot:*/lib*/perl5/*/*/Config_heavy.pl:${TMPDIR} \
413*4882a593Smuzhiyun    populate_sysroot:*/lib*/perl5/*/*/Config_heavy.pl:${COREBASE} \
414*4882a593Smuzhiyun    populate_sysroot:*/lib*/perl5/config.sh:${TMPDIR} \
415*4882a593Smuzhiyun    populate_sysroot:*/lib*/perl5/config.sh:${COREBASE} \
416*4882a593Smuzhiyun    "
417