[oe] [patch review] cpan.class and perl: Fix MakeMaker paths to prevent path clashes

Stanislav Brabec utx at penguin.cz
Sat Nov 8 23:55:36 UTC 2008


Hallo core developers.

Here is next patch. It affects classes => requires core team review.

Please approve or comment following patch of cpan.class.

The patch tries to prevent mixing of host, native and target perl
instances.

Example of failing package: Compilation of libxml-parser-perl on host
system that has perl != 5.8.8.

That mixing may causes build failure and probably also miscompilation
(if Config.pm is mistakenly referenced during target build).

Patch prevents references to /usr/share/perl/{version}/ExtUtils/typemap
and /usr/lib/perl/{version}/Config.pm on host system and installs both
native and target files needed by MakeMaker.


diff --git a/classes/cpan.bbclass b/classes/cpan.bbclass
index 3ff3f30..7b3faa2 100644
--- a/classes/cpan.bbclass
+++ b/classes/cpan.bbclass
@@ -10,7 +10,8 @@ export PERLCONFIGTARGET = "${@is_target(d)}"
 
 # Env var which tells perl where the perl include files are
 export PERL_INC = "${STAGING_LIBDIR}/perl/${@get_perl_version(d)}/CORE"
-export PERL_ARCHLIB = "${STAGING_LIBDIR_NATIVE}/perl/${@get_perl_version(d)}"
+export PERL_LIB = "${STAGING_DATADIR}/perl/${@get_perl_version(d)}"
+export PERL_ARCHLIB = "${STAGING_LIBDIR}/perl/${@get_perl_version(d)}"
 
 cpan_do_configure () {
 	yes '' | perl Makefile.PL ${EXTRA_CPANFLAGS}
diff --git a/packages/perl/perl-5.8.8/native-perlinc.patch b/packages/perl/perl-5.8.8/native-perlinc.patch
index aea38a0..6dc4b95 100644
--- a/packages/perl/perl-5.8.8/native-perlinc.patch
+++ b/packages/perl/perl-5.8.8/native-perlinc.patch
@@ -1,12 +1,20 @@
 Index: perl-5.8.8/lib/ExtUtils/MM_Unix.pm
 ===================================================================
---- perl-5.8.8.orig/lib/ExtUtils/MM_Unix.pm	2007-05-30 15:16:47.000000000 +1000
-+++ perl-5.8.8/lib/ExtUtils/MM_Unix.pm	2007-05-30 15:18:12.000000000 +1000
-@@ -1597,6 +1597,11 @@
+--- perl-5.8.8.orig/lib/ExtUtils/MM_Unix.pm	2008-10-31 22:01:35.000000000 +0000
++++ perl-5.8.8/lib/ExtUtils/MM_Unix.pm	2008-11-08 16:01:12.000000000 +0000
+@@ -1597,6 +1597,19 @@
  	$self->{PERL_LIB}     ||= $Config{privlibexp};
  	$self->{PERL_ARCHLIB} ||= $Config{archlibexp};
  	$self->{PERL_INC}     = $self->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
 +	# Check for environment override so we'll find the headers in the correct place
++        if (defined $ENV{PERL_LIB})
++        {
++            $self->{PERL_LIB} = $ENV{PERL_LIB};
++        }
++        if (defined $ENV{PERL_ARCHLIB})
++        {
++            $self->{PERL_ARCHLIB} = $ENV{PERL_ARCHLIB};
++        }
 +        if (defined $ENV{PERL_INC})
 +        {
 +            $self->{PERL_INC} = $ENV{PERL_INC};
diff --git a/packages/perl/perl-native_5.8.8.bb b/packages/perl/perl-native_5.8.8.bb
index c58f828..e3d7384 100644
--- a/packages/perl/perl-native_5.8.8.bb
+++ b/packages/perl/perl-native_5.8.8.bb
@@ -65,8 +65,25 @@ do_stage_append() {
         # We need a hostperl link for building perl
         ln -sf ${STAGING_BINDIR_NATIVE}/perl${PV} ${STAGING_BINDIR_NATIVE}/hostperl
         # Store native config in non-versioned directory
-        install -d ${STAGING_DIR_HOST}/perl
+        install -d ${STAGING_DIR_HOST}/perl \
+                   ${STAGING_LIBDIR_NATIVE}/perl/${PV}/CORE \
+                   ${STAGING_DATADIR_NATIVE}/perl/${PV}/ExtUtils
         install config.sh ${STAGING_DIR_HOST}/perl
+	# target configuration
+        install lib/Config.pm       ${STAGING_LIBDIR_NATIVE}/perl/${PV}/
+	install lib/ExtUtils/typemap ${STAGING_DATADIR_NATIVE}/perl/${PV}/ExtUtils/
+        # perl shared library headers
+        for i in av.h embed.h gv.h keywords.h op.h perlio.h pp.h regexp.h \
+                 uconfig.h XSUB.h cc_runtime.h embedvar.h handy.h opnames.h \
+                 perliol.h pp_proto.h regnodes.h unixish.h config.h EXTERN.h \
+                 hv.h malloc_ctl.h pad.h perlsdio.h proto.h scope.h utf8.h \
+                 cop.h fakesdio.h INTERN.h mg.h patchlevel.h perlsfio.h \
+                 reentr.h sv.h utfebcdic.h cv.h fakethr.h intrpvar.h \
+                 nostdio.h perlapi.h perlvars.h reentr.inc thrdvar.h util.h \
+                 dosish.h form.h iperlsys.h opcode.h perl.h perly.h regcomp.h \
+                 thread.h warnings.h; do
+            install $i ${STAGING_LIBDIR_NATIVE}/perl/${PV}/CORE
+        done
 }
 
 PARALLEL_MAKE = ""
diff --git a/packages/perl/perl_5.8.8.bb b/packages/perl/perl_5.8.8.bb
index 8c00a61..2118bba 100644
--- a/packages/perl/perl_5.8.8.bb
+++ b/packages/perl/perl_5.8.8.bb
@@ -139,11 +139,15 @@ do_install() {
 do_stage() {
         install -d ${STAGING_DIR_HOST}/perl \
                    ${STAGING_LIBDIR_NATIVE}/perl/${PV} \
-                   ${STAGING_LIBDIR}/perl/${PV}/CORE
+                   ${STAGING_LIBDIR}/perl/${PV}/CORE \
+                   ${STAGING_DATADIR}/perl/${PV}/ExtUtils
         # target config, used by cpan.bbclass to extract version information
         install config.sh ${STAGING_DIR_HOST}/perl/
         # target configuration, used by native perl when cross-compiling
         install lib/Config_heavy.pl ${STAGING_LIBDIR_NATIVE}/perl/${PV}/Config_heavy-target.pl
+	# target configuration
+        install lib/Config.pm       ${STAGING_LIBDIR}/perl/${PV}/
+	install lib/ExtUtils/typemap ${STAGING_DATADIR}/perl/${PV}/ExtUtils/
         # perl shared library headers
         for i in av.h embed.h gv.h keywords.h op.h perlio.h pp.h regexp.h \
                  uconfig.h XSUB.h cc_runtime.h embedvar.h handy.h opnames.h \



________________________________________________________________________
Stanislav Brabec
http://www.penguin.cz/~utx/zaurus





More information about the Openembedded-devel mailing list