summaryrefslogtreecommitdiff
blob: d2b6cb753c1942ba07107a0b2fa28d825fa5bdb7 (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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

DIST_TEST=do
inherit depend.apache apache-module perl-module

DESCRIPTION="An embedded Perl interpreter for Apache2"
HOMEPAGE="https://perl.apache.org/ https://projects.apache.org/project.html?perl-mod_perl"
SRC_URI="mirror://apache/perl/${P}.tar.gz"

LICENSE="Apache-2.0"
SLOT="1"
KEYWORDS="amd64 ~arm ppc ppc64 ~riscv x86"
IUSE="debug ithreads test"
RESTRICT="!test? ( test )"

# Apache::Reload, Apache::SizeLimit, and Apache::Test are force-unbundled.
# The minimum versions requested here are the bundled versions.

# The test dependencies are from CPAN (Bundle::Apache2).

# When all MPMs are disabled via useflags, the apache ebuild selects a
# default one, which will likely need threading.

RDEPEND="
	dev-lang/perl[ithreads=]
	>=dev-perl/Apache-Test-1.420.0
	>=www-servers/apache-2.0.47
	>=dev-libs/apr-util-1.4
	!ithreads? ( www-servers/apache[-apache2_mpms_event,-apache2_mpms_worker,apache2_mpms_prefork] )
"
DEPEND="${RDEPEND}"
BDEPEND="
	dev-perl/Module-Build
	test? (
		>=dev-perl/CGI-3.110.0
		dev-perl/Chatbot-Eliza
		dev-perl/Devel-Symdump
		dev-perl/HTML-Parser
		dev-perl/IPC-Run3
		dev-perl/libwww-perl
		www-servers/apache[apache2_modules_version,-apache2_modules_unique_id]
		!www-apache/mpm_itk
	)
"
PDEPEND="
	>=dev-perl/Apache-Reload-0.130.0
	>=dev-perl/Apache-SizeLimit-0.970.0
"

APACHE2_MOD_FILE="${S}/src/modules/perl/mod_perl.so"
APACHE2_MOD_CONF="2.0.3/75_${PN}"
APACHE2_MOD_DEFINE="PERL"

need_apache2

PATCHES=(
	"${FILESDIR}"/${PN}-2.0.1-sneak-tmpdir.patch  # seems to fix the make test problem
	"${FILESDIR}"/${PN}-2.0.4-inline.patch        # 550244
	"${FILESDIR}"/${PN}-2.0.10_rc1-bundled-Apache-Test.patch # 352724
	"${FILESDIR}"/${PN}-2.0.10_rc1-Gentoo-not-Unix.patch
	"${FILESDIR}"/${PN}-2.0.11-ranlib.patch       # 728554
)

src_prepare() {
	perl-module_src_prepare

	# chainsaw unbundling
	rm -rf Apache-{Test,Reload,SizeLimit}/ lib/Bundle/ || die
}

src_configure() {
	_init_apache2_late

	local debug=$(usex debug 1 0)
	local nothreads=$(usex ithreads 0 1)
	myconf=(
		MP_USE_DSO=1
		MP_APXS=${APXS}
		MP_APR_CONFIG=/usr/bin/apr-1-config
		MP_TRACE=${debug}
		MP_DEBUG=${debug}
		MP_NO_THREADS=${nothreads}
	)

	perl-module_src_configure
}

src_test() {
	# 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 YOU SUDO TO EMERGE AND HAVE !env_reset set testing will fail!
	if [[ "$(id -u)" == "0" ]]; then
		chown nobody:nobody "${WORKDIR}" "${T}" || die
	fi

	# We force verbose tests for now to get meaningful bug reports.
	MAKEOPTS+=" -j1"
	TMPDIR="${T}" HOME="${T}/" TEST_VERBOSE=1 LC_TIME=C perl-module_src_test
}

src_install() {
	apache-module_src_install

	default

	perl_delete_localpod
	perl_fix_packlist
	perl_delete_emptybsdir

	insinto "${APACHE_MODULES_CONFDIR}"
	doins "${FILESDIR}"/2.0.3/apache2-mod_perl-startup.pl

	# this is an attempt to get @INC in line with /usr/bin/perl.
	# there is blib garbage in the mainstream one that can only be
	# useful during internal testing, so we wait until here and then
	# just go with a clean slate.  should be much easier to see what's
	# happening and revert if problematic.

	perl_set_version
	sed -i \
		-e "s,-I${S}/[^[:space:]\"\']\+[[:space:]]\?,,g" \
		-e "s,-typemap[[:space:]]${S}/[^[:space:]\"\']\+[[:space:]]\?,,g" \
		-e "s,${S}\(/[^[:space:]\"\']\+\)\?,/,g" \
		"${D}/${VENDOR_ARCH}/Apache2/BuildConfig.pm" || die

	local fname
	for fname in $(find "${D}" -type f -not -name '*.so'); do
		grep -q "\(${D}\|${S}\)" "${fname}" && ewarn "QA: File contains a temporary path ${fname}"
		sed -i -e "s:\(${D}\|${S}\):/:g" ${fname} || die
	done

	perl_remove_temppath
}

pkg_postinst() {
	apache-module_pkg_postinst
}