/[gentoo-x86]/eclass/apache-2.eclass
Gentoo

Diff of /eclass/apache-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.1 Revision 1.9
1# Copyright 1999-2007 Gentoo Foundation 1# Copyright 1999-2007 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/apache-2.eclass,v 1.1 2007/11/28 13:04:12 hollow Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/apache-2.eclass,v 1.9 2008/03/23 00:14:13 hollow Exp $
4 4
5# @ECLASS: apache-2 5# @ECLASS: apache-2
6# @MAINTAINER: apache-devs@gentoo.org 6# @MAINTAINER: apache-devs@gentoo.org
7# @BLURB: Provides a common set of functions for >=apache-2.2* ebuilds 7# @BLURB: Provides a common set of functions for >=apache-2.2* ebuilds
8# @DESCRIPTION: 8# @DESCRIPTION:
9# This eclass handles common apache ebuild functions in a sane way and providing 9# This eclass handles common apache ebuild functions in a sane way and providing
10# information about where certain interfaces are located such as LoadModule 10# information about where certain interfaces are located such as LoadModule
11# generation and inter-module dependency checking. 11# generation and inter-module dependency checking.
12 12
13inherit depend.apache eutils flag-o-matic multilib autotools 13inherit autotools confutils eutils flag-o-matic multilib
14 14
15# ============================================================================== 15# ==============================================================================
16# INTERNAL VARIABLES 16# INTERNAL VARIABLES
17# ============================================================================== 17# ==============================================================================
18 18
25# @DESCRIPTION: 25# @DESCRIPTION:
26# This internal variable contains the working directory where patches and config 26# This internal variable contains the working directory where patches and config
27# files are located 27# files are located
28GENTOO_PATCHDIR="${WORKDIR}/${GENTOO_PATCHNAME}" 28GENTOO_PATCHDIR="${WORKDIR}/${GENTOO_PATCHNAME}"
29 29
30# @ECLASS-VARIABLE: GENTOO_DEVELOPER 30# @VARIABLE: GENTOO_DEVELOPER
31# @DESCRIPTION: 31# @DESCRIPTION:
32# This variable needs to be set in the ebuild and contains the name of the 32# This variable needs to be set in the ebuild and contains the name of the
33# gentoo developer who created the patch tarball 33# gentoo developer who created the patch tarball
34 34
35# @ECLASS-VARIABLE: GENTOO_PATCHSTAMP 35# @VARIABLE: GENTOO_PATCHSTAMP
36# @DESCRIPTION: 36# @DESCRIPTION:
37# This variable needs to be set in the ebuild and contains the date the patch 37# This variable needs to be set in the ebuild and contains the date the patch
38# tarball was created at in YYMMDD format 38# tarball was created at in YYYYMMDD format
39 39
40SRC_URI="mirror://apache/httpd/httpd-${PV}.tar.bz2 40SRC_URI="mirror://apache/httpd/httpd-${PV}.tar.bz2
41 http://dev.gentoo.org/~${GENTOO_DEVELOPER}/dist/apache/${GENTOO_PATCHNAME}-${GENTOO_PATCHSTAMP}.tar.bz2" 41 http://dev.gentoo.org/~${GENTOO_DEVELOPER}/dist/apache/${GENTOO_PATCHNAME}-${GENTOO_PATCHSTAMP}.tar.bz2"
42 42
43# @ECLASS-VARIABLE: IUSE_MPMS_FORK 43# @VARIABLE: IUSE_MPMS_FORK
44# @DESCRIPTION: 44# @DESCRIPTION:
45# This variable needs to be set in the ebuild and contains a list of forking 45# This variable needs to be set in the ebuild and contains a list of forking
46# (i.e. non-threaded) MPMS 46# (i.e. non-threaded) MPMS
47 47
48# @ECLASS-VARIABLE: IUSE_MPMS_THREAD 48# @VARIABLE: IUSE_MPMS_THREAD
49# @DESCRIPTION: 49# @DESCRIPTION:
50# This variable needs to be set in the ebuild and contains a list of threaded 50# This variable needs to be set in the ebuild and contains a list of threaded
51# MPMS 51# MPMS
52 52
53# @ECLASS-VARIABLE: IUSE_MODULES 53# @VARIABLE: IUSE_MODULES
54# @DESCRIPTION: 54# @DESCRIPTION:
55# This variable needs to be set in the ebuild and contains a list of available 55# This variable needs to be set in the ebuild and contains a list of available
56# built-in modules 56# built-in modules
57 57
58IUSE_MPMS="${IUSE_MPMS_FORK} ${IUSE_MPMS_THREAD}" 58IUSE_MPMS="${IUSE_MPMS_FORK} ${IUSE_MPMS_THREAD}"
59IUSE="debug doc ldap selinux ssl static suexec threads" 59IUSE="${IUSE} debug doc ldap selinux ssl static suexec threads"
60 60
61for module in ${IUSE_MODULES} ; do 61for module in ${IUSE_MODULES} ; do
62 IUSE="${IUSE} apache2_modules_${module}" 62 IUSE="${IUSE} apache2_modules_${module}"
63done 63done
64 64
70 =dev-libs/apr-1* 70 =dev-libs/apr-1*
71 =dev-libs/apr-util-1* 71 =dev-libs/apr-util-1*
72 dev-libs/libpcre 72 dev-libs/libpcre
73 ldap? ( =net-nds/openldap-2* ) 73 ldap? ( =net-nds/openldap-2* )
74 selinux? ( sec-policy/selinux-apache ) 74 selinux? ( sec-policy/selinux-apache )
75 ssl? ( dev-libs/openssl ) 75 ssl? ( >=dev-libs/openssl-0.9.8f )
76 !=www-servers/apache-1*" 76 !=www-servers/apache-1*"
77RDEPEND="${DEPEND}" 77RDEPEND="${DEPEND}"
78PDEPEND="~app-admin/apache-tools-${PV}" 78PDEPEND="~app-admin/apache-tools-${PV}"
79 79
80S="${WORKDIR}/httpd-${PV}" 80S="${WORKDIR}/httpd-${PV}"
82# ============================================================================== 82# ==============================================================================
83# INTERNAL FUNCTIONS 83# INTERNAL FUNCTIONS
84# ============================================================================== 84# ==============================================================================
85 85
86# @ECLASS-VARIABLE: MY_MPM 86# @ECLASS-VARIABLE: MY_MPM
87# DESCRIPTION: 87# @DESCRIPTION:
88# This internal variable contains the selected MPM after a call to setup_mpm() 88# This internal variable contains the selected MPM after a call to setup_mpm()
89 89
90# @FUNCTION: setup_mpm 90# @FUNCTION: setup_mpm
91# @DESCRIPTION: 91# @DESCRIPTION:
92# This internal function makes sure that only one of APACHE2_MPMS was selected 92# This internal function makes sure that only one of APACHE2_MPMS was selected
93# or a default based on USE=threads is selected if APACHE2_MPMS is empty 93# or a default based on USE=threads is selected if APACHE2_MPMS is empty
94setup_mpm() { 94setup_mpm() {
95 MY_MPM=""
95 for x in ${IUSE_MPMS} ; do 96 for x in ${IUSE_MPMS} ; do
96 if use apache2_mpms_${x} ; then 97 if use apache2_mpms_${x} ; then
97 if [[ -z "${MY_MPM}" ]] ; then 98 if [[ -z "${MY_MPM}" ]] ; then
98 MY_MPM=${x} 99 MY_MPM=${x}
99 elog 100 elog
130 eerror "You have selected a non-threaded MPM but USE=threads is enabled" 131 eerror "You have selected a non-threaded MPM but USE=threads is enabled"
131 die "invalid use flag combination" 132 die "invalid use flag combination"
132 fi 133 fi
133} 134}
134 135
136# @VARIABLE: MODULE_CRITICAL
137# @DESCRIPTION:
138# This variable needs to be set in the ebuild and contains a space-separated
139# list of modules critical for the default apache. A user may still
140# disable these modules for custom minimal installation at their own risk.
141
142# @FUNCTION: check_module_critical
143# @DESCRIPTION:
144# This internal function warns the user about modules critical for the default
145# apache configuration.
146check_module_critical() {
147 local unsupported=0
148
149 for m in ${MODULE_CRITICAL} ; do
150 if ! has ${m} ${MY_MODS} ; then
151 ewarn "Module '${m}' is required in the default apache configuration."
152 unsupported=1
153 fi
154 done
155
156 if [[ ${unsupported} -ne 0 ]] ; then
157 ewarn
158 ewarn "You have disabled one or more required modules"
159 ewarn "for the default apache configuration."
160 ewarn "Although this is not an error, please be"
161 ewarn "aware that this setup is UNSUPPORTED."
162 ewarn
163 ebeep 10
164 fi
165}
166
135# @ECLASS-VARIABLE: MODULE_DEPENDS 167# @VARIABLE: MODULE_DEPENDS
136# @DESCRIPTION: 168# @DESCRIPTION:
137# This variable needs to be set in the ebuild and contains a space-separated 169# This variable needs to be set in the ebuild and contains a space-separated
138# list of dependency tokens each with a module and the module it depends on 170# list of dependency tokens each with a module and the module it depends on
139# separated by a colon 171# separated by a colon
140 172
145check_module_depends() { 177check_module_depends() {
146 local err=0 178 local err=0
147 179
148 for m in ${MY_MODS} ; do 180 for m in ${MY_MODS} ; do
149 for dep in ${MODULE_DEPENDS} ; do 181 for dep in ${MODULE_DEPENDS} ; do
150 if [[ "${m}" == "${dep%:*}" ]]; then 182 if [[ "${m}" == "${dep%:*}" ]] ; then
151 if ! use apache2_modules_${dep#*:} ; then 183 if ! use apache2_modules_${dep#*:} ; then
152 eerror "Module '${m}' depends on '${dep#*:}'" 184 eerror "Module '${m}' depends on '${dep#*:}'"
153 err=1 185 err=1
154 fi 186 fi
155 fi 187 fi
160 die "invalid use flag combination" 192 die "invalid use flag combination"
161 fi 193 fi
162} 194}
163 195
164# @ECLASS-VARIABLE: MY_CONF 196# @ECLASS-VARIABLE: MY_CONF
165# DESCRIPTION: 197# @DESCRIPTION:
166# This internal variable contains the econf options for the current module 198# This internal variable contains the econf options for the current module
167# selection after a call to setup_modules() 199# selection after a call to setup_modules()
168 200
169# @ECLASS-VARIABLE: MY_MODS 201# @ECLASS-VARIABLE: MY_MODS
170# DESCRIPTION: 202# @DESCRIPTION:
171# This internal variable contains a sorted, space separated list of currently 203# This internal variable contains a sorted, space separated list of currently
172# selected modules after a call to setup_modules() 204# selected modules after a call to setup_modules()
173 205
174# @FUNCTION: setup_modules 206# @FUNCTION: setup_modules
175# @DESCRIPTION: 207# @DESCRIPTION:
185 fi 217 fi
186 218
187 MY_CONF="--enable-so=static" 219 MY_CONF="--enable-so=static"
188 220
189 if use ldap ; then 221 if use ldap ; then
190 if ! built_with_use 'dev-libs/apr-util' ldap ; then 222 confutils_use_depend_built_with_all ldap dev-libs/apr-util ldap
191 eerror "dev-libs/apr-util is missing LDAP support. For apache to have"
192 eerror "ldap support, apr-util must be built with the ldap USE-flag"
193 eerror "enabled."
194 die "ldap USE-flag enabled while not supported in apr-util"
195 fi
196 MY_CONF="${MY_CONF} --enable-authnz_ldap=${mod_type} --enable-ldap=${mod_type}" 223 MY_CONF="${MY_CONF} --enable-authnz_ldap=${mod_type} --enable-ldap=${mod_type}"
197 MY_MODS="${MY_MODS} ldap authnz_ldap" 224 MY_MODS="${MY_MODS} ldap authnz_ldap"
198 else 225 else
199 MY_CONF="${MY_CONF} --disable-authnz_ldap --disable-ldap" 226 MY_CONF="${MY_CONF} --disable-authnz_ldap --disable-ldap"
200 fi 227 fi
253 done 280 done
254 281
255 # sort and uniquify MY_MODS 282 # sort and uniquify MY_MODS
256 MY_MODS=$(echo ${MY_MODS} | tr ' ' '\n' | sort -u) 283 MY_MODS=$(echo ${MY_MODS} | tr ' ' '\n' | sort -u)
257 check_module_depends 284 check_module_depends
285 check_module_critical
258} 286}
259 287
260# @ECLASS-VARIABLE: MODULE_DEFINES 288# @VARIABLE: MODULE_DEFINES
261# @DESCRIPTION: 289# @DESCRIPTION:
262# This variable needs to be set in the ebuild and contains a space-separated 290# This variable needs to be set in the ebuild and contains a space-separated
263# list of tokens each mapping a module to a runtime define which can be 291# list of tokens each mapping a module to a runtime define which can be
264# specified in APACHE2_OPTS in /etc/conf.d/apache2 to enable this particular 292# specified in APACHE2_OPTS in /etc/conf.d/apache2 to enable this particular
265# module. 293# module.
267# @FUNCTION: generate_load_module 295# @FUNCTION: generate_load_module
268# @DESCRIPTION: 296# @DESCRIPTION:
269# This internal function generates the LoadModule lines for httpd.conf based on 297# This internal function generates the LoadModule lines for httpd.conf based on
270# the current module selection and MODULE_DEFINES 298# the current module selection and MODULE_DEFINES
271generate_load_module() { 299generate_load_module() {
272 local endit=0 mod_lines= mod_dir="${D}${APACHE2_MODULESDIR}" 300 local endit=0 mod_lines= mod_dir="${D}/usr/$(get_libdir)/apache2/modules"
273 301
274 if use static; then 302 if use static; then
275 sed -i -e "/%%LOAD_MODULE%%/d" \ 303 sed -i -e "/%%LOAD_MODULE%%/d" \
276 "${GENTOO_PATCHDIR}"/conf/httpd.conf 304 "${GENTOO_PATCHDIR}"/conf/httpd.conf
277 return 305 return
309 if [[ -e "${ROOT}"etc/apache2/apache2-builtin-mods ]]; then 337 if [[ -e "${ROOT}"etc/apache2/apache2-builtin-mods ]]; then
310 eerror "The previous configuration file for built-in modules" 338 eerror "The previous configuration file for built-in modules"
311 eerror "(${ROOT}etc/apache2/apache2-builtin-mods) exists on your" 339 eerror "(${ROOT}etc/apache2/apache2-builtin-mods) exists on your"
312 eerror "system." 340 eerror "system."
313 eerror 341 eerror
314 eerror "Please read http://www.gentoo.org/proj/en/apache/upgrade.xml" 342 eerror "Please read http://www.gentoo.org/doc/en/apache-upgrading.xml"
315 eerror "for detailed information how to convert this file to the new" 343 eerror "for detailed information how to convert this file to the new"
316 eerror "APACHE2_MODULES USE_EXPAND variable." 344 eerror "APACHE2_MODULES USE_EXPAND variable."
317 eerror 345 eerror
318 die "upgrade not possible with existing ${ROOT}etc/apache2/apache2-builtin-mods" 346 die "upgrade not possible with existing ${ROOT}etc/apache2/apache2-builtin-mods"
319 fi 347 fi
348} 376}
349 377
350# @FUNCTION: apache-2_src_unpack 378# @FUNCTION: apache-2_src_unpack
351# @DESCRIPTION: 379# @DESCRIPTION:
352# This function applies patches, configures a custom file-system layout and 380# This function applies patches, configures a custom file-system layout and
353# rebuilds the configure scripts. The patch names are organized as follows: 381# rebuilds the configure scripts.
354#
355# 00-19 Gentoo specific (00_all_some-title.patch)
356# 20-39 Additional MPMs (20_all_${MPM}_some-title.patch)
357# 40-59 USE-flag based (40_all_${USE}_some-title.patch)
358# 60-79 Version specific (60_all_${PV}_some-title.patch)
359# 80-99 Security patches (80_all_${PV}_cve-####-####.patch)
360apache-2_src_unpack() { 382apache-2_src_unpack() {
361 unpack ${A} 383 unpack ${A}
362 cd "${S}" 384 cd "${S}"
363 385
364 # Use correct multilib libdir in gentoo patches 386 # Use correct multilib libdir in gentoo patches
371 # setup the filesystem layout config 393 # setup the filesystem layout config
372 cat "${GENTOO_PATCHDIR}"/patches/config.layout >> "${S}"/config.layout || \ 394 cat "${GENTOO_PATCHDIR}"/patches/config.layout >> "${S}"/config.layout || \
373 die "Failed preparing config.layout!" 395 die "Failed preparing config.layout!"
374 sed -i -e "s:version:${PF}:g" "${S}"/config.layout 396 sed -i -e "s:version:${PF}:g" "${S}"/config.layout
375 397
398 # apache2.8 instead of httpd.8 (bug #194828)
399 mv docs/man/{httpd,apache2}.8
400 sed -i -e 's/httpd\.8/apache2.8/g' Makefile.in
401
376 # patched-in MPMs need the build environment rebuilt 402 # patched-in MPMs need the build environment rebuilt
377 sed -i -e '/sinclude/d' configure.in 403 sed -i -e '/sinclude/d' configure.in
378 AT_GNUCONF_UPDATE=yes AT_M4DIR=build eautoreconf 404 AT_GNUCONF_UPDATE=yes AT_M4DIR=build eautoreconf
379
380 # apache2.8 instead of httpd.8 (bug #194828)
381 mv docs/man/{httpd,apache2}.8
382} 405}
383 406
384# @FUNCTION: apache-2_src_compile 407# @FUNCTION: apache-2_src_compile
385# @DESCRIPTION: 408# @DESCRIPTION:
386# This function adds compiler flags and runs econf and emake based on MY_MPM and 409# This function adds compiler flags and runs econf and emake based on MY_MPM and
419 emake || die "emake failed" 442 emake || die "emake failed"
420} 443}
421 444
422# @FUNCTION: apache-2_src_install 445# @FUNCTION: apache-2_src_install
423# @DESCRIPTION: 446# @DESCRIPTION:
424# This function runs emake install and generates, install and adapts the gentoo 447# This function runs emake install and generates, installs and adapts the gentoo
425# specific configuration files found in the tarball 448# specific configuration files found in the tarball
426apache-2_src_install() { 449apache-2_src_install() {
427 emake DESTDIR="${D}" install || die "emake install failed" 450 make DESTDIR="${D}" install || die "make install failed"
428 451
429 # install our configuration files 452 # install our configuration files
430 keepdir /etc/apache2/vhosts.d 453 keepdir /etc/apache2/vhosts.d
431 keepdir /etc/apache2/modules.d 454 keepdir /etc/apache2/modules.d
432 455
451 newinitd "${GENTOO_PATCHDIR}"/init/apache2.initd apache2 474 newinitd "${GENTOO_PATCHDIR}"/init/apache2.initd apache2
452 475
453 # link apache2ctl to the init script 476 # link apache2ctl to the init script
454 dosym /etc/init.d/apache2 /usr/sbin/apache2ctl 477 dosym /etc/init.d/apache2 /usr/sbin/apache2ctl
455 478
456 # provide symlinks for all the stuff we no longer rename, bug 177697 479 # provide legacy symlink for apxs, bug 177697
457 for i in suexec apxs; do
458 dosym /usr/sbin/${i} /usr/sbin/${i}2 480 dosym /usr/sbin/apxs /usr/sbin/apxs2
459 done
460 481
461 # install some thirdparty scripts 482 # install some thirdparty scripts
462 exeinto /usr/sbin 483 exeinto /usr/sbin
463 use ssl && doexe "${GENTOO_PATCHDIR}"/scripts/gentestcrt.sh 484 use ssl && doexe "${GENTOO_PATCHDIR}"/scripts/gentestcrt.sh
464 485
482 503
483 # set some sane permissions for suexec 504 # set some sane permissions for suexec
484 if use suexec ; then 505 if use suexec ; then
485 fowners 0:apache /usr/sbin/suexec 506 fowners 0:apache /usr/sbin/suexec
486 fperms 4710 /usr/sbin/suexec 507 fperms 4710 /usr/sbin/suexec
508 # provide legacy symlink for suexec, bug 177697
509 dosym /usr/sbin/suexec /usr/sbin/suexec2
487 fi 510 fi
488 511
489 # empty dirs 512 # empty dirs
490 for i in /var/lib/dav /var/log/apache2 /var/cache/apache2 ; do 513 for i in /var/lib/dav /var/log/apache2 /var/cache/apache2 ; do
491 keepdir ${i} 514 keepdir ${i}

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.9

  ViewVC Help
Powered by ViewVC 1.1.20