openpkg/perl.patch

Wed, 14 Jan 2009 15:59:12 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 14 Jan 2009 15:59:12 +0100
changeset 86
78e7deb1d6ab
parent 13
cb59d6afeb61
child 428
f880f219c566
permissions
-rw-r--r--

Correct and improve many buildconf and code logic blocks. In particular:
1. Document potential problems building with current binutils releases.
2. Document the flawed webkit and explain its temporary exclusion.
3. Document the edition of Qt which is built and installed.
4. Remove the Solaris x11_supdir logic as it is no longer found.
5. Correct several .pr[io] files including QMAKE_CXXFLAGS and INCPATH,
which previously caused preexisting Qt installations to deliver
erroneous old include and library logic instead of relying on
that of the currently building package. -I/opkg/include is now
placed at the end of the compile statements.
6. Don't trust the QMAKE_[INC|LIB]DIR_X11 identifiers in qmake.conf.
7. Allow more 64-bit builds and more properly identify the platform.
8. Place plugins (which are shared objects) in lib instead of share.
9. Build components as plugins when possible if with_shared is enabled.
10. Translate German text to English to be more consistent.
11. Instead of removing the pkgconfig directory of with_shared builds,
place it in a child directory useful for shared building.
12. Document the nonstandard shared build directory structure,
including using the hidden pkgconfig directory (PKG_CONFIG_PATH.)
13. Change %doc to specify files rather than directories in the RPM DB.

     1 By default, the "vendor" area is not used, so Perl's installation
     2 procedure forgot to create its top-level paths, too. In OpenPKG we use
     3 the "vendor" area, so make sure it is created the same way the "site"
     4 area is.
     6 Index: installperl
     7 --- installperl.orig	2006-08-15 14:37:41 +0200
     8 +++ installperl	2006-08-18 21:05:05 +0200
     9 @@ -211,6 +211,8 @@
    10  my $installarchlib = "$destdir$Config{installarchlib}";
    11  my $installsitelib = "$destdir$Config{installsitelib}";
    12  my $installsitearch = "$destdir$Config{installsitearch}";
    13 +my $installvendorlib = "$destdir$Config{installvendorlib}";
    14 +my $installvendorarch = "$destdir$Config{installvendorarch}";
    15  my $installman1dir = "$destdir$Config{installman1dir}";
    16  my $man1ext = $Config{man1ext};
    17  my $libperl = $Config{libperl};
    18 @@ -372,6 +374,8 @@
    19  mkpath($installarchlib, $verbose, 0777);
    20  mkpath($installsitelib, $verbose, 0777) if ($installsitelib);
    21  mkpath($installsitearch, $verbose, 0777) if ($installsitearch);
    22 +mkpath($installvendorlib, $verbose, 0777) if ($installvendorlib);
    23 +mkpath($installvendorarch, $verbose, 0777) if ($installvendorarch);
    25  if (chdir "lib") {
    26      $do_installarchlib = ! samepath($installarchlib, '.');
    28 -----------------------------------------------------------------------------
    30 By default, the Perl module search order is "use lib, -I, PERL[5]LIB,
    31 perl, site, vendor, other". This means that in OpenPKG both the modules
    32 installed via CPAN shell (in "site" area) and the "perl-xxx" packages
    33 (in "vendor" area) cannot override the (sometimes obsoleted) module
    34 versions distributed with Perl (in "perl" area). Hence, we change
    35 the search order to a more reasonable one for OpenPKG: "use lib, -I,
    36 PERL[5]LIB, site, vendor, perl, other".
    38 Index: perl.c
    39 --- perl.c.orig	2006-08-15 14:37:41 +0200
    40 +++ perl.c	2006-08-18 21:08:14 +0200
    41 @@ -4753,39 +4753,6 @@
    42      incpush(APPLLIB_EXP, TRUE, TRUE, TRUE, TRUE);
    43  #endif
    45 -#ifdef ARCHLIB_EXP
    46 -    incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, TRUE);
    47 -#endif
    48 -#ifdef MACOS_TRADITIONAL
    49 -    {
    50 -	Stat_t tmpstatbuf;
    51 -    	SV * privdir = newSV(0);
    52 -	char * macperl = PerlEnv_getenv("MACPERL");
    53 -	
    54 -	if (!macperl)
    55 -	    macperl = "";
    56 -	
    57 -	Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
    58 -	if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
    59 -	    incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
    60 -	Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
    61 -	if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
    62 -	    incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
    63 -	
    64 -   	SvREFCNT_dec(privdir);
    65 -    }
    66 -    if (!PL_tainting)
    67 -	incpush(":", FALSE, FALSE, TRUE, FALSE);
    68 -#else
    69 -#ifndef PRIVLIB_EXP
    70 -#  define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
    71 -#endif
    72 -#if defined(WIN32)
    73 -    incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE, TRUE);
    74 -#else
    75 -    incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, TRUE);
    76 -#endif
    77 -
    78  #ifdef SITEARCH_EXP
    79      /* sitearch is always relative to sitelib on Windows for
    80       * DLL-based path intuition to work correctly */
    81 @@ -4828,6 +4795,39 @@
    82      incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE, TRUE);
    83  #endif
    85 +#ifdef ARCHLIB_EXP
    86 +    incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, TRUE);
    87 +#endif
    88 +#ifdef MACOS_TRADITIONAL
    89 +    {
    90 +	Stat_t tmpstatbuf;
    91 +    	SV * privdir = newSV(0);
    92 +	char * macperl = PerlEnv_getenv("MACPERL");
    93 +	
    94 +	if (!macperl)
    95 +	    macperl = "";
    96 +	
    97 +	Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
    98 +	if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
    99 +	    incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
   100 +	Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
   101 +	if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
   102 +	    incpush(SvPVX(privdir), TRUE, FALSE, TRUE, FALSE);
   103 +	
   104 +   	SvREFCNT_dec(privdir);
   105 +    }
   106 +    if (!PL_tainting)
   107 +	incpush(":", FALSE, FALSE, TRUE, FALSE);
   108 +#else
   109 +#ifndef PRIVLIB_EXP
   110 +#  define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
   111 +#endif
   112 +#if defined(WIN32)
   113 +    incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE, TRUE);
   114 +#else
   115 +    incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, TRUE);
   116 +#endif
   117 +
   118  #ifdef PERL_OTHERLIBDIRS
   119      incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE, TRUE);
   120  #endif
   122 -----------------------------------------------------------------------------
   124 Port to [Open]Darwin 6.6.2:
   126 1. In OpenPKG, Perl does not use the vendor GCC and our GCC does not
   127    understand "-no-cpp-precomp", so remove this build option.
   129 2. The <sys/mman.h> indirectly includes system specific headers
   130    which in turn have fields named "environ" while Perl uses
   131    a define of "environ" internally. So wrap the inclusion.
   133 3. Darwin 6 no longer accepts the non-standard "#import" statements,
   134    so replace with "#include" and circumvent some header problem
   135    related to the non-standard "__private_extern__" attribute.
   137 Index: hints/darwin.sh
   138 --- hints/darwin.sh.orig	2006-08-15 14:37:41 +0200
   139 +++ hints/darwin.sh	2006-08-18 21:05:05 +0200
   140 @@ -120,9 +120,6 @@
   141    *-2147483648) ccflags="${ccflags} -DINT32_MIN_BROKEN -DINT64_MIN_BROKEN" ;;
   142  esac
   144 -# Avoid Apple's cpp precompiler, better for extensions
   145 -cppflags="${cppflags} -no-cpp-precomp"
   146 -
   147  # This is necessary because perl's build system doesn't
   148  # apply cppflags to cc compile lines as it should.
   149  ccflags="${ccflags} ${cppflags}"
   150 @@ -182,8 +179,7 @@
   151  esac
   152  ldlibpthname='DYLD_LIBRARY_PATH';
   154 -# useshrplib=true results in much slower startup times.
   155 -# 'false' is the default value.  Use Configure -Duseshrplib to override.
   156 +useshrplib='true'
   158  cat > UU/archname.cbu <<'EOCBU'
   159  # This script UU/archname.cbu will get 'called-back' by Configure 
   160 Index: perlio.c
   161 --- perlio.c.orig	2006-08-15 14:37:41 +0200
   162 +++ perlio.c	2006-08-18 21:05:05 +0200
   163 @@ -472,7 +472,14 @@
   164  #include <unistd.h>
   165  #endif
   166  #ifdef HAS_MMAP
   167 +#ifdef PERL_DARWIN
   168 +#define environ_safe environ
   169 +#undef environ
   170  #include <sys/mman.h>
   171 +#define environ environ_safe
   172 +#else
   173 +#include <sys/mman.h>
   174 +#endif
   175  #endif
   177  void
   179 -----------------------------------------------------------------------------
   181 Port to Tru64 5.1:
   183 Under Tru64 our gcc has to be built without binutils and the system
   184 ld(1) does not accept a "-O" option, so remove the whole passing of
   185 optimization flags to ld(1). Under a brain-dead platform like Tru64 we
   186 really don't need any more optimization because we are already happy if
   187 it works at all.
   189 Index: hints/dec_osf.sh
   190 --- hints/dec_osf.sh.orig	2007-12-18 11:47:07 +0100
   191 +++ hints/dec_osf.sh	2007-12-19 12:31:37 +0100
   192 @@ -73,15 +73,6 @@
   193  *)            if $test "X$optimize" = "X$undef"; then
   194                        lddlflags="$lddlflags -msym"
   195                else
   196 -		  case "$myosvers" in
   197 -		  *4.0D*)
   198 -		      # QAR 56761: -O4 + .so may produce broken code,
   199 -		      # fixed in 4.0E or better.
   200 -		      ;;
   201 -		  *)
   202 -                      lddlflags="$lddlflags $optimize"
   203 -		      ;;
   204 -		  esac
   205  		  # -msym: If using a sufficiently recent /sbin/loader,
   206  		  # keep the module symbols with the modules.
   207                    lddlflags="$lddlflags -msym $_lddlflags_strict_ansi"
   209 -----------------------------------------------------------------------------
   211 Index: Configure
   212 --- Configure.orig	2006-08-15 14:37:40 +0200
   213 +++ Configure	2006-08-18 21:05:05 +0200
   214 @@ -7871,7 +7871,7 @@
   215  			      ;;
   216  			linux|irix*|gnu*)  dflt="-shared $optimize" ;;
   217  			next)  dflt='none' ;;
   218 -			solaris) dflt='-G' ;;
   219 +			solaris) dflt='-shared' ;;
   220  			sunos) dflt='-assert nodefinitions' ;;
   221  			svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
   222  	        *)     dflt='none' ;;
   224 -----------------------------------------------------------------------------
   226 Security Fix (CVE-2005-3962, OpenPKG-SA-2005.025-perl)
   228 Index: sv.c
   229 --- sv.c.orig	2006-08-15 14:37:41 +0200
   230 +++ sv.c	2006-08-18 21:05:05 +0200
   231 @@ -8667,7 +8667,10 @@
   232  	if ( (width = expect_number(&q)) ) {
   233  	    if (*q == '$') {
   234  		++q;
   235 -		efix = width;
   236 +		if (width > PERL_INT_MAX)
   237 +		    efix = PERL_INT_MAX;
   238 +		else
   239 +		    efix = width;
   240  	    } else {
   241  		goto gotwidth;
   242  	    }
   244 -----------------------------------------------------------------------------
   246 Corrections for Solaris 11:
   248 Index: perl.h
   249 diff -Nau perl.h.orig perl.h
   250 --- perl.h.orig	2007-12-18 11:47:08.000000000 +0100
   251 +++ perl.h	2009-01-06 15:28:45.843276063 +0100
   252 @@ -1393,6 +1393,7 @@
   253   */
   255  #if defined(I_SYSMODE) && !defined(PERL_MICRO)
   256 +#include <sys/vnode.h>
   257  #include <sys/mode.h>
   258  #endif

mercurial