diff options
Diffstat (limited to 'dev-lang')
-rw-r--r-- | dev-lang/parrot/ChangeLog | 8 | ||||
-rw-r--r-- | dev-lang/parrot/files/perldoc-5.10.patch | 146 | ||||
-rw-r--r-- | dev-lang/parrot/parrot-5.10.0.ebuild | 86 |
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 +} |