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

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

  ViewVC Help
Powered by ViewVC 1.1.20