summaryrefslogtreecommitdiff
blob: 14e356e8bd38f0debf2939b3bc9b7d97cb130583 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-perl/mod_perl/mod_perl-1.99.11.ebuild,v 1.8 2004/08/28 15:34:28 dholm Exp $

inherit eutils

front=${PV%\.*}
back=\_${PV##*\.}
MY_PV=${PV:0:${#front}}${back}
MY_P=${PN}-${MY_PV}
S=${WORKDIR}/${MY_P}
DESCRIPTION="An embedded Perl interpreter for Apache2"
SRC_URI="http://perl.apache.org/dist/${MY_P}.tar.gz"
HOMEPAGE="http://perl.apache.org/"

LICENSE="GPL-2"
KEYWORDS="~x86 amd64 alpha ~ia64 ~sparc ~ppc"
IUSE=""
SLOT="1"

# see bug 30087 for why sudo is in here

DEPEND="dev-lang/perl
	=net-www/apache-2*
	>=dev-perl/CGI-2.93
	>=sys-apps/sed-4
	app-admin/sudo"

src_unpack() {
	unpack ${A}

	cd ${S}

	# I am not entirely happy with this solution, but here's what's
	# going on here if someone wants to take a stab at another
	# approach.  When userpriv compilation is off, then the make
	# process drops to user "nobody" to run the test servers.  This
	# server is closed, and then the socket is rebound using
	# SO_REUSEADDR.  If the same user does this, there is no problem,
	# and the socket may be rebound immediately.  If a different user
	# (yes, in my testing, even root) attempts to rebind, it fails.
	# Since the "is the socket available yet" code and the
	# second-batch bind call both run as root, this will fail.  

	# The upstream settings on my test machine cause the second batch
	# of tests to fail, believing the socket to still be in use.  I
	# tried patching various parts to make them run as the user
	# specified in $config->{vars}{user} using getpwnam, but found
	# this patch to be fairly intrusive, because the userid must be
	# restored and the patch must be applied to multiple places.

	# For now, we will simply extend the timeout in hopes that in the
	# non-userpriv case, the socket will clear from the kernel tables
	# normally, and the tests will proceed.

	# If anybody is still having problems, then commenting out "make
	# test" below should allow the software to build properly.

	# Robert Coie <rac@gentoo.org> 2003.05.06

	sed -i -e "s/sleep \$_/sleep \$_ << 2/" ${S}/Apache-Test/lib/Apache/TestServer.pm || die "problem editing TestServer.pm"
}

src_compile() {
	perl Makefile.PL \
		PREFIX=${D}/usr \
		MP_TRACE=1 \
		MP_DEBUG=1 \
		MP_AP_PREFIX=/usr \
		MP_USE_DSO=1 \
		MP_INST_APACHE2=1 \
		MP_APXS=/usr/sbin/apxs2  \
		CCFLAGS="${CFLAGS} -fPIC" \
		INSTALLDIRS=vendor </dev/null || die

	# reported that parallel make is broken in bug 30257
	emake -j1 || die

	# make test notes whether it is running as root, and drops
	# privileges all the way to "nobody" if so, so we must adjust
	# write permissions accordingly in this case.

	if [ "`id -u`" == '0' ]; then
		chown nobody:nobody ${WORKDIR}
		chown nobody:nobody ${T}
	fi

	# these next two stanzas avoid sandbox problems with make test
	# tell mod_cgid to make the socket here instead of /var/run/cgisock
	echo -e "\nScriptSock logs/cgisock" >> ${S}/t/conf/extra.conf.in
	echo -e "\nScriptSock logs/cgisock" >> ${S}/ModPerl-Registry/t/conf/extra.conf.in
	# tell CGI.pm to create new tmpfiles in this directory
	echo -e "\nSetEnv TMPDIR ${T}" >> ${S}/t/conf/extra.conf.in

	# this does not || die because of bug 21325.

	make test
}

src_install() {
	dodir /usr/lib/apache2-extramodules
	make install \
		MODPERL_AP_LIBEXECDIR=${D}/usr/lib/apache2-extramodules \
		MODPERL_AP_INCLUDEDIR=${D}/usr/include/apache2 \
		MP_INST_APACHE2=1 \
		INSTALLDIRS=vendor || die

	insinto /etc/apache2/conf/modules.d
	doins ${FILESDIR}/75_mod_perl.conf \
		${FILESDIR}/apache2-mod_perl-startup.pl

	dodoc ${FILESDIR}/75_mod_perl.conf Changes \
		INSTALL LICENSE README STATUS
	cp -a docs ${D}/usr/share/doc/${PF}
	cp -a todo ${D}/usr/share/doc/${PF}
}