summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-lang')
-rw-r--r--dev-lang/parrot/ChangeLog8
-rw-r--r--dev-lang/parrot/files/perldoc-5.10.patch146
-rw-r--r--dev-lang/parrot/parrot-5.10.0.ebuild86
3 files changed, 239 insertions, 1 deletions
diff --git a/dev-lang/parrot/ChangeLog b/dev-lang/parrot/ChangeLog
index e33e91aac59e..5685346aec73 100644
--- a/dev-lang/parrot/ChangeLog
+++ b/dev-lang/parrot/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for dev-lang/parrot
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/dev-lang/parrot/ChangeLog,v 1.72 2013/09/24 07:45:30 patrick Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-lang/parrot/ChangeLog,v 1.73 2013/12/01 06:46:07 patrick Exp $
+
+*parrot-5.10.0 (01 Dec 2013)
+
+ 01 Dec 2013; Patrick Lauer <patrick@gentoo.org> +files/perldoc-5.10.patch,
+ +parrot-5.10.0.ebuild:
+ Bump for #492648
24 Sep 2013; Patrick Lauer <patrick@gentoo.org> -parrot-5.4.0.ebuild,
-parrot-5.5.0.ebuild:
diff --git a/dev-lang/parrot/files/perldoc-5.10.patch b/dev-lang/parrot/files/perldoc-5.10.patch
new file mode 100644
index 000000000000..43a7fddee142
--- /dev/null
+++ b/dev-lang/parrot/files/perldoc-5.10.patch
@@ -0,0 +1,146 @@
+diff --git a/config/auto/perldoc.pm b/config/auto/perldoc.pm
+index 4d87aca..7e54156 100644
+--- a/config/auto/perldoc.pm
++++ b/config/auto/perldoc.pm
+@@ -66,24 +66,12 @@ E_NOTE
+ foreach my $ops (@ops) {
+ my $pod = $ops;
+ $pod =~ s/\.ops$/.pod/;
+- if ( $new_perldoc ) {
+- $TEMP_pod_build .= <<"END";
++ $TEMP_pod_build .= <<"END";
+ ops/$pod: ../src/ops/$ops
+-\t\$(PERLDOC) -ud ops/$pod ../src/ops/$ops
++\t\$(PODEXTRACT) ../src/ops/$ops ops/$pod
+ \t\$(CHMOD) 0644 ops/$pod
+ \t\$(ADDGENERATED) "docs/\$\@" "[doc]"
+-
+-END
+- }
+- else {
+- $TEMP_pod_build .= <<"END";
+-ops/$pod: ../src/ops/$ops
+-\t\$(PERLDOC) -u ../ops/$ops > ops/$pod
+-\t\$(CHMOD) 0644 ../ops/$pod
+-\t\$(ADDGENERATED) "docs/\$\@" "[doc]"
+-
+ END
+- }
+ }
+
+ $conf->data->set(
+diff --git a/config/gen/makefiles/docs.in b/config/gen/makefiles/docs.in
+index 3e8c74b..4e8f35d 100644
+--- a/config/gen/makefiles/docs.in
++++ b/config/gen/makefiles/docs.in
+@@ -11,6 +11,7 @@ RM_RF = @rm_rf@
+ PERLDOC = @perldoc@
+ POD2MAN = @pod2man@
+ VERSION = @VERSION@@DEVEL@
++PODEXTRACT = $(PERL) ../tools/build/podextract.pl
+ ADDGENERATED = $(PERL) ../tools/build/addgenerated.pl
+ OPS_SUMMARY = ../tools/docs/ops_summary.pl
+
+@@ -63,8 +64,7 @@ doc-prep:
+ $(TOUCH) doc-prep
+
+ packfile-c.pod: ../src/packfile/api.c
+-#IF(new_perldoc): $(PERLDOC) -ud packfile-c.pod ../src/packfile/api.c
+-#ELSE: $(PERLDOC) -u ../src/packfile/api.c > packfile-c.pod
++ $(PODEXTRACT) ../src/packfile/api.c packfile-c.pod
+ $(ADDGENERATED) "docs/$@" "[doc]"
+
+ .pod.1 : # suffix rule (limited support)
+diff --git a/config/gen/makefiles/root.in b/config/gen/makefiles/root.in
+index c1f0c19..36e853a 100644
+--- a/config/gen/makefiles/root.in
++++ b/config/gen/makefiles/root.in
+@@ -115,6 +115,7 @@ LDFLAGS = @ldflags@ @ld_debug@
+ INNO_SETUP = iscc
+ TEMPDIR = @tempdir@
+ RPATH_BLIB = @rpath_blib@
++PODEXTRACT = $(PERL) $(BUILD_TOOLS_DIR)/podextract.pl
+ ADDGENERATED = $(PERL) $(BUILD_TOOLS_DIR)/addgenerated.pl
+ #IF(darwin):export MACOSX_DEPLOYMENT_TARGET = @osx_version@
+
+diff --git a/tools/build/podextract.pl b/tools/build/podextract.pl
+new file mode 100644
+index 0000000..0979b6b
+--- /dev/null
++++ b/tools/build/podextract.pl
+@@ -0,0 +1,75 @@
++#! perl
++
++=head1 NAME
++
++tools/build/podextract.pl
++
++=head1 DESCRIPTION
++
++Simple POD Extraction
++
++=head1 SYNOPSIS
++
++Previously:
++
++ perldoc -ud $target $source
++
++or
++
++ perldoc -u $source > $target
++
++Now:
++
++ perl podextract.pl $source $target
++
++=head1 RATIONALE
++
++C<perldoc> does many things, and is somewhat complex.
++
++For instance, normally,
++
++ perldoc perldoc
++
++Inspects various paths, and paths that are controlled by C<%ENV> to find relevant documentation for "perldoc".
++
++And because of this, it is a little security concious, and pre-emptively drops root to UID=nobody
++
++But Parrot is not using this feature of C<perldoc>
++
++Parrot is simply using C<perldoc> as a content filter to extract C<POD> from source files.
++
++And as such, it only needs the alternative function
++
++ perldoc $PATH
++
++To work, which doesn't require C<%ENV>, and additionally, dropping root to C<UID=nobody> makes it impossible
++for some parrot to invoke C<perldoc -ud $target $source> on some systems, because it drops privelages and can then no longer read C<$source>, and can no longer write C<$target>.
++
++However, some means vendor tooling that B<MUST> execute C<make install> as root, by proxy, C<MUST> invoke C<perldoc> as root, and as such, invokes the security problem, which is impossible to work around.
++
++Given a simple C<chmod> is not enough, because parent directories also are not readable or writeable by C<UID=nobody>, and additionally, vendor tooling causes fatal access violations when a process running as C<UID=nobody> even attempts to do directory lookaround ( which C<perldoc> does much of as part of C<%ENV> handling )
++
++So this tool is simple:
++
++It takes the very core utility in C<PerlDoc> that parrot needed to utilize, and calls it directly.
++
++And this avoids the misguided attempts of increasing security, which simply does nothing useful.
++
++=cut
++
++use strict;
++use warnings;
++
++if ( not $ARGV[1] ) {
++ die "pod_extract <src> <target>";
++}
++if ( not -e $ARGV[0] ) {
++ die "<src> $ARGV[0] does not exist";
++}
++require Pod::Perldoc::ToPod;
++my $parser = Pod::Perldoc::ToPod->new();
++open my $output, '>', $ARGV[1] or die "Cant write to $ARGV[1] $! $?";
++$parser->parse_from_file( $ARGV[0], $output );
++
++1
++
diff --git a/dev-lang/parrot/parrot-5.10.0.ebuild b/dev-lang/parrot/parrot-5.10.0.ebuild
new file mode 100644
index 000000000000..e4d4d38d1979
--- /dev/null
+++ b/dev-lang/parrot/parrot-5.10.0.ebuild
@@ -0,0 +1,86 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-lang/parrot/parrot-5.10.0.ebuild,v 1.1 2013/12/01 06:46:07 patrick Exp $
+
+EAPI=3
+
+inherit eutils multilib
+
+# weird failures
+RESTRICT="test"
+
+DESCRIPTION="Virtual machine designed to efficiently compile and execute bytecode for dynamic languages"
+HOMEPAGE="http://www.parrot.org/"
+SRC_URI="ftp://ftp.parrot.org/pub/parrot/releases/devel/${PV}/${P}.tar.gz"
+
+LICENSE="Artistic-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
+IUSE="opengl nls doc examples gdbm gmp ssl +unicode pcre"
+
+RDEPEND="sys-libs/readline
+ opengl? ( media-libs/freeglut )
+ nls? ( sys-devel/gettext )
+ unicode? ( >=dev-libs/icu-2.6 )
+ gdbm? ( >=sys-libs/gdbm-1.8.3-r1 )
+ gmp? ( >=dev-libs/gmp-4.1.4 )
+ ssl? ( dev-libs/openssl )
+ pcre? ( dev-libs/libpcre )"
+
+DEPEND="dev-lang/perl[doc?]
+ ${RDEPEND}"
+
+src_prepare() {
+ # Fix perldoc sandbox madness
+ epatch "${FILESDIR}/perldoc-5.10.patch" || die
+}
+
+src_configure() {
+ myconf="--disable-rpath"
+ use unicode || myconf+=" --without-icu"
+ use ssl || myconf+=" --without-crypto"
+ use gdbm || myconf+=" --without-gdbm"
+ use nls || myconf+=" --without-gettext"
+ use gmp || myconf+=" --without-gmp"
+ use opengl || myconf+=" --without-opengl"
+ use pcre || myconf+=" --without-pcre"
+
+ perl Configure.pl \
+ --ccflags="${CFLAGS}" \
+ --linkflags="${LDFLAGS}" \
+ --prefix="${EPREFIX}"/usr \
+ --libdir="${EPREFIX}"/usr/$(get_libdir) \
+ --mandir="${EPREFIX}"/usr/share/man \
+ --sysconfdir="${EPREFIX}"/etc \
+ --sharedstatedir="${EPREFIX}"/var/lib/parrot \
+ $myconf || die
+}
+
+src_compile() {
+ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}"${S}"/blib/lib
+ # occasionally dies in parallel make
+ emake -j1 || die
+ if use doc ; then
+ emake -j1 html || die
+ fi
+}
+
+src_test() {
+ emake -j1 test || die
+}
+
+src_install() {
+ emake -j1 install-dev DESTDIR="${D}" DOC_DIR="${EPREFIX}/usr/share/doc/${PF}" || die
+ dodoc CREDITS DONORS.pod PBC_COMPAT PLATFORMS RESPONSIBLE_PARTIES TODO || die
+ if use examples; then
+ insinto "/usr/share/doc/${PF}/examples"
+ doins -r examples/* || die
+ fi
+ if use doc; then
+ insinto "/usr/share/doc/${PF}/editor"
+ doins -r editor || die
+ cd docs/html
+ dohtml -r developer.html DONORS.pod.html index.html ops.html parrotbug.html pdds.html \
+ pmc.html tools.html docs src tools || die
+ fi
+}