/[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.11 Revision 1.40
1# Copyright 1999-2007 Gentoo Foundation 1# Copyright 1999-2015 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.11 2008/03/23 13:03:53 hollow Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/apache-2.eclass,v 1.40 2015/05/30 14:11:49 polynomial-c Exp $
4 4
5# @ECLASS: apache-2.eclass 5# @ECLASS: apache-2.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# apache-devs@gentoo.org 7# polynomial-c@gentoo.org
8# @BLURB: Provides a common set of functions for apache-2.x ebuilds 8# @BLURB: Provides a common set of functions for apache-2.x ebuilds
9# @DESCRIPTION: 9# @DESCRIPTION:
10# This eclass handles apache-2.x ebuild functions such as LoadModule generation 10# This eclass handles apache-2.x ebuild functions such as LoadModule generation
11# and inter-module dependency checking. 11# and inter-module dependency checking.
12 12
13inherit autotools confutils eutils flag-o-matic multilib 13inherit autotools eutils flag-o-matic multilib ssl-cert user toolchain-funcs versionator
14
15[[ ${CATEGORY}/${PN} != www-servers/apache ]] \
16 && die "Do not use this eclass with anything else than www-servers/apache ebuilds!"
17
18case ${EAPI:-0} in
19 0|1|2|3)
20 die "This eclass requires >=EAPI-4"
21 ;;
22esac
23
24# settings which are version specific go in here:
25case $(get_version_component_range 1-2) in
26 2.4)
27 DEFAULT_MPM_THREADED="event" #509922
28 RDEPEND=">=dev-libs/apr-1.5.1" #492578
29 ;;
30 *)
31 DEFAULT_MPM_THREADED="worker"
32 RDEPEND=">=dev-libs/apr-1.4.5" #368651
33 ;;
34esac
14 35
15# ============================================================================== 36# ==============================================================================
16# INTERNAL VARIABLES 37# INTERNAL VARIABLES
17# ============================================================================== 38# ==============================================================================
18 39
19# @ECLASS-VARIABLE: GENTOO_PATCHNAME 40# @ECLASS-VARIABLE: GENTOO_PATCHNAME
20# @DESCRIPTION: 41# @DESCRIPTION:
21# This internal variable contains the prefix for the patch tarball 42# This internal variable contains the prefix for the patch tarball.
22GENTOO_PATCHNAME="gentoo-${PF}" 43# Defaults to the full name and version (including revision) of the package.
44# If you want to override this in an ebuild, use:
45# ORIG_PR="(revision of Gentoo stuff you want)"
46# GENTOO_PATCHNAME="gentoo-${PN}-${PV}${ORIG_PR:+-${ORIG_PR}}"
47[[ -n "$GENTOO_PATCHNAME" ]] || GENTOO_PATCHNAME="gentoo-${PF}"
23 48
24# @ECLASS-VARIABLE: GENTOO_PATCHDIR 49# @ECLASS-VARIABLE: GENTOO_PATCHDIR
25# @DESCRIPTION: 50# @DESCRIPTION:
26# This internal variable contains the working directory where patches and config 51# This internal variable contains the working directory where patches and config
27# files are located 52# files are located.
53# Defaults to the patchset name appended to the working directory.
28GENTOO_PATCHDIR="${WORKDIR}/${GENTOO_PATCHNAME}" 54[[ -n "$GENTOO_PATCHDIR" ]] || GENTOO_PATCHDIR="${WORKDIR}/${GENTOO_PATCHNAME}"
29 55
30# @VARIABLE: GENTOO_DEVELOPER 56# @VARIABLE: GENTOO_DEVELOPER
31# @DESCRIPTION: 57# @DESCRIPTION:
32# This variable needs to be set in the ebuild and contains the name of the 58# This variable needs to be set in the ebuild and contains the name of the
33# gentoo developer who created the patch tarball 59# gentoo developer who created the patch tarball
35# @VARIABLE: GENTOO_PATCHSTAMP 61# @VARIABLE: GENTOO_PATCHSTAMP
36# @DESCRIPTION: 62# @DESCRIPTION:
37# This variable needs to be set in the ebuild and contains the date the patch 63# This variable needs to be set in the ebuild and contains the date the patch
38# tarball was created at in YYYYMMDD format 64# tarball was created at in YYYYMMDD format
39 65
66# @VARIABLE: GENTOO_PATCH_A
67# @DESCRIPTION:
68# This variable should contain the entire filename of patch tarball.
69# Defaults to the name of the patchset, with a datestamp.
70[[ -n "$GENTOO_PATCH_A" ]] || GENTOO_PATCH_A="${GENTOO_PATCHNAME}-${GENTOO_PATCHSTAMP}.tar.bz2"
71
40SRC_URI="mirror://apache/httpd/httpd-${PV}.tar.bz2 72SRC_URI="mirror://apache/httpd/httpd-${PV}.tar.bz2
41 http://dev.gentoo.org/~${GENTOO_DEVELOPER}/dist/apache/${GENTOO_PATCHNAME}-${GENTOO_PATCHSTAMP}.tar.bz2" 73 http://dev.gentoo.org/~${GENTOO_DEVELOPER}/dist/apache/${GENTOO_PATCH_A}"
42 74
43# @VARIABLE: IUSE_MPMS_FORK 75# @VARIABLE: IUSE_MPMS_FORK
44# @DESCRIPTION: 76# @DESCRIPTION:
45# This variable needs to be set in the ebuild and contains a list of forking 77# This variable needs to be set in the ebuild and contains a list of forking
46# (i.e. non-threaded) MPMs 78# (i.e. non-threaded) MPMs
66 IUSE="${IUSE} apache2_mpms_${mpm}" 98 IUSE="${IUSE} apache2_mpms_${mpm}"
67done 99done
68 100
69DEPEND="dev-lang/perl 101DEPEND="dev-lang/perl
70 =dev-libs/apr-1* 102 =dev-libs/apr-1*
71 =dev-libs/apr-util-1* 103 =dev-libs/apr-util-1*[ldap?]
72 dev-libs/libpcre 104 dev-libs/libpcre
105 apache2_modules_deflate? ( sys-libs/zlib )
106 apache2_modules_mime? ( app-misc/mime-types )
73 ldap? ( =net-nds/openldap-2* ) 107 ldap? ( =net-nds/openldap-2* )
74 selinux? ( sec-policy/selinux-apache )
75 ssl? ( >=dev-libs/openssl-0.9.8f ) 108 ssl? ( >=dev-libs/openssl-0.9.8m )
76 !=www-servers/apache-1*" 109 !=www-servers/apache-1*"
77RDEPEND="${DEPEND}" 110RDEPEND+=" ${DEPEND}
111 selinux? ( sec-policy/selinux-apache )"
78PDEPEND="~app-admin/apache-tools-${PV}" 112PDEPEND="~app-admin/apache-tools-${PV}"
79 113
80S="${WORKDIR}/httpd-${PV}" 114S="${WORKDIR}/httpd-${PV}"
81 115
82# ============================================================================== 116# ==============================================================================
108 fi 142 fi
109 done 143 done
110 144
111 if [[ -z "${MY_MPM}" ]] ; then 145 if [[ -z "${MY_MPM}" ]] ; then
112 if use threads ; then 146 if use threads ; then
113 MY_MPM=worker 147 MY_MPM=${DEFAULT_MPM_THREADED}
114 elog 148 elog
115 elog "Selected default threaded MPM: ${MY_MPM}" 149 elog "Selected default threaded MPM: ${MY_MPM}"
116 elog 150 elog
117 else 151 else
118 MY_MPM=prefork 152 MY_MPM=prefork
145# apache configuration. 179# apache configuration.
146check_module_critical() { 180check_module_critical() {
147 local unsupported=0 181 local unsupported=0
148 182
149 for m in ${MODULE_CRITICAL} ; do 183 for m in ${MODULE_CRITICAL} ; do
150 if ! has ${m} ${MY_MODS} ; then 184 if ! has ${m} ${MY_MODS[@]} ; then
151 ewarn "Module '${m}' is required in the default apache configuration." 185 ewarn "Module '${m}' is required in the default apache configuration."
152 unsupported=1 186 unsupported=1
153 fi 187 fi
154 done 188 done
155 189
158 ewarn "You have disabled one or more required modules" 192 ewarn "You have disabled one or more required modules"
159 ewarn "for the default apache configuration." 193 ewarn "for the default apache configuration."
160 ewarn "Although this is not an error, please be" 194 ewarn "Although this is not an error, please be"
161 ewarn "aware that this setup is UNSUPPORTED." 195 ewarn "aware that this setup is UNSUPPORTED."
162 ewarn 196 ewarn
163 ebeep 10
164 fi 197 fi
165} 198}
166 199
167# @VARIABLE: MODULE_DEPENDS 200# @VARIABLE: MODULE_DEPENDS
168# @DESCRIPTION: 201# @DESCRIPTION:
175# This internal function makes sure that all inter-module dependencies are 208# This internal function makes sure that all inter-module dependencies are
176# satisfied with the current module selection 209# satisfied with the current module selection
177check_module_depends() { 210check_module_depends() {
178 local err=0 211 local err=0
179 212
180 for m in ${MY_MODS} ; do 213 for m in ${MY_MODS[@]} ; do
181 for dep in ${MODULE_DEPENDS} ; do 214 for dep in ${MODULE_DEPENDS} ; do
182 if [[ "${m}" == "${dep%:*}" ]] ; then 215 if [[ "${m}" == "${dep%:*}" ]] ; then
183 if ! use apache2_modules_${dep#*:} ; then 216 if ! use apache2_modules_${dep#*:} ; then
184 eerror "Module '${m}' depends on '${dep#*:}'" 217 eerror "Module '${m}' depends on '${dep#*:}'"
185 err=1 218 err=1
214 mod_type="static" 247 mod_type="static"
215 else 248 else
216 mod_type="shared" 249 mod_type="shared"
217 fi 250 fi
218 251
219 MY_CONF="--enable-so=static" 252 MY_CONF=( --enable-so=static )
253 MY_MODS=()
220 254
221 if use ldap ; then 255 if use ldap ; then
222 confutils_use_depend_built_with_all ldap dev-libs/apr-util ldap
223 MY_CONF="${MY_CONF} --enable-authnz_ldap=${mod_type} --enable-ldap=${mod_type}" 256 MY_CONF+=( --enable-authnz_ldap=${mod_type} --enable-ldap=${mod_type} )
224 MY_MODS="${MY_MODS} ldap authnz_ldap" 257 MY_MODS+=( ldap authnz_ldap )
225 else 258 else
226 MY_CONF="${MY_CONF} --disable-authnz_ldap --disable-ldap" 259 MY_CONF+=( --disable-authnz_ldap --disable-ldap )
227 fi 260 fi
228 261
229 if use ssl ; then 262 if use ssl ; then
230 MY_CONF="${MY_CONF} --with-ssl=/usr --enable-ssl=${mod_type}" 263 MY_CONF+=( --with-ssl="${EPREFIX}"/usr --enable-ssl=${mod_type} )
231 MY_MODS="${MY_MODS} ssl" 264 MY_MODS+=( ssl )
232 else 265 else
233 MY_CONF="${MY_CONF} --without-ssl --disable-ssl" 266 MY_CONF+=( --without-ssl --disable-ssl )
234 fi
235
236 if use threads || has ${MY_MPM} ${IUSE_MPMS_THREAD} ; then
237 MY_CONF="${MY_CONF} --enable-cgid=${mod_type}"
238 MY_MODS="${MY_MODS} cgid"
239 else
240 MY_CONF="${MY_CONF} --enable-cgi=${mod_type}"
241 MY_MODS="${MY_MODS} cgi"
242 fi 267 fi
243 268
244 if use suexec ; then 269 if use suexec ; then
245 elog "You can manipulate several configure options of suexec" 270 elog "You can manipulate several configure options of suexec"
246 elog "through the following environment variables:" 271 elog "through the following environment variables:"
247 elog 272 elog
248 elog " SUEXEC_SAFEPATH: Default PATH for suexec (default: /usr/local/bin:/usr/bin:/bin)" 273 elog " SUEXEC_SAFEPATH: Default PATH for suexec (default: '${EPREFIX}/usr/local/bin:${EPREFIX}/usr/bin:${EPREFIX}/bin')"
249 elog " SUEXEC_LOGFILE: Path to the suexec logfile (default: /var/log/apache2/suexec_log)" 274 elog " SUEXEC_LOGFILE: Path to the suexec logfile (default: '${EPREFIX}/var/log/apache2/suexec_log')"
250 elog " SUEXEC_CALLER: Name of the user Apache is running as (default: apache)" 275 elog " SUEXEC_CALLER: Name of the user Apache is running as (default: apache)"
251 elog " SUEXEC_DOCROOT: Directory in which suexec will run scripts (default: /var/www)" 276 elog " SUEXEC_DOCROOT: Directory in which suexec will run scripts (default: '${EPREFIX}/var/www')"
252 elog " SUEXEC_MINUID: Minimum UID, which is allowed to run scripts via suexec (default: 1000)" 277 elog " SUEXEC_MINUID: Minimum UID, which is allowed to run scripts via suexec (default: 1000)"
253 elog " SUEXEC_MINGID: Minimum GID, which is allowed to run scripts via suexec (default: 100)" 278 elog " SUEXEC_MINGID: Minimum GID, which is allowed to run scripts via suexec (default: 100)"
254 elog " SUEXEC_USERDIR: User subdirectories (like /home/user/html) (default: public_html)" 279 elog " SUEXEC_USERDIR: User subdirectories (like /home/user/html) (default: public_html)"
255 elog " SUEXEC_UMASK: Umask for the suexec process (default: 077)" 280 elog " SUEXEC_UMASK: Umask for the suexec process (default: 077)"
256 elog 281 elog
257 282
258 MY_CONF="${MY_CONF} --with-suexec-safepath=${SUEXEC_SAFEPATH:-/usr/local/bin:/usr/bin:/bin}" 283 MY_CONF+=( --with-suexec-safepath="${SUEXEC_SAFEPATH:-${EPREFIX}/usr/local/bin:${EPREFIX}/usr/bin:${EPREFIX}/bin}" )
259 MY_CONF="${MY_CONF} --with-suexec-logfile=${SUEXEC_LOGFILE:-/var/log/apache2/suexec_log}" 284 MY_CONF+=( --with-suexec-logfile="${SUEXEC_LOGFILE:-${EPREFIX}/var/log/apache2/suexec_log}" )
260 MY_CONF="${MY_CONF} --with-suexec-bin=/usr/sbin/suexec" 285 MY_CONF+=( --with-suexec-bin="${EPREFIX}/usr/sbin/suexec" )
261 MY_CONF="${MY_CONF} --with-suexec-userdir=${SUEXEC_USERDIR:-public_html}" 286 MY_CONF+=( --with-suexec-userdir=${SUEXEC_USERDIR:-public_html} )
262 MY_CONF="${MY_CONF} --with-suexec-caller=${SUEXEC_CALLER:-apache}" 287 MY_CONF+=( --with-suexec-caller=${SUEXEC_CALLER:-apache} )
263 MY_CONF="${MY_CONF} --with-suexec-docroot=${SUEXEC_DOCROOT:-/var/www}" 288 MY_CONF+=( --with-suexec-docroot="${SUEXEC_DOCROOT:-${EPREFIX}/var/www}" )
264 MY_CONF="${MY_CONF} --with-suexec-uidmin=${SUEXEC_MINUID:-1000}" 289 MY_CONF+=( --with-suexec-uidmin=${SUEXEC_MINUID:-1000} )
265 MY_CONF="${MY_CONF} --with-suexec-gidmin=${SUEXEC_MINGID:-100}" 290 MY_CONF+=( --with-suexec-gidmin=${SUEXEC_MINGID:-100} )
266 MY_CONF="${MY_CONF} --with-suexec-umask=${SUEXEC_UMASK:-077}" 291 MY_CONF+=( --with-suexec-umask=${SUEXEC_UMASK:-077} )
267 MY_CONF="${MY_CONF} --enable-suexec=${mod_type}" 292 MY_CONF+=( --enable-suexec=${mod_type} )
268 MY_MODS="${MY_MODS} suexec" 293 MY_MODS+=( suexec )
269 else 294 else
270 MY_CONF="${MY_CONF} --disable-suexec" 295 MY_CONF+=( --disable-suexec )
271 fi 296 fi
272 297
273 for x in ${IUSE_MODULES} ; do 298 for x in ${IUSE_MODULES} ; do
274 if use apache2_modules_${x} ; then 299 if use apache2_modules_${x} ; then
275 MY_CONF="${MY_CONF} --enable-${x}=${mod_type}" 300 MY_CONF+=( --enable-${x}=${mod_type} )
276 MY_MODS="${MY_MODS} ${x}" 301 MY_MODS+=( ${x} )
277 else 302 else
278 MY_CONF="${MY_CONF} --disable-${x}" 303 MY_CONF+=( --disable-${x} )
279 fi 304 fi
280 done 305 done
281 306
282 # sort and uniquify MY_MODS 307 # sort and uniquify MY_MODS
283 MY_MODS=$(echo ${MY_MODS} | tr ' ' '\n' | sort -u) 308 MY_MODS=( $(echo ${MY_MODS[@]} | tr ' ' '\n' | sort -u) )
284 check_module_depends 309 check_module_depends
285 check_module_critical 310 check_module_critical
286} 311}
287 312
288# @VARIABLE: MODULE_DEFINES 313# @VARIABLE: MODULE_DEFINES
295# @FUNCTION: generate_load_module 320# @FUNCTION: generate_load_module
296# @DESCRIPTION: 321# @DESCRIPTION:
297# This internal function generates the LoadModule lines for httpd.conf based on 322# This internal function generates the LoadModule lines for httpd.conf based on
298# the current module selection and MODULE_DEFINES 323# the current module selection and MODULE_DEFINES
299generate_load_module() { 324generate_load_module() {
300 local endit=0 mod_lines= mod_dir="${D}/usr/$(get_libdir)/apache2/modules" 325 local endit=0 mod_lines= mod_dir="${ED}/usr/$(get_libdir)/apache2/modules"
301 326
302 if use static; then 327 if use static; then
303 sed -i -e "/%%LOAD_MODULE%%/d" \ 328 sed -i -e "/%%LOAD_MODULE%%/d" \
304 "${GENTOO_PATCHDIR}"/conf/httpd.conf 329 "${GENTOO_PATCHDIR}"/conf/httpd.conf
305 return 330 return
306 fi 331 fi
307 332
308 for m in ${MY_MODS} ; do 333 for m in ${MY_MODS[@]} ; do
309 if [[ -e "${mod_dir}/mod_${m}.so" ]] ; then 334 if [[ -e "${mod_dir}/mod_${m}.so" ]] ; then
310 for def in ${MODULE_DEFINES} ; do 335 for def in ${MODULE_DEFINES} ; do
311 if [[ "${m}" == "${def%:*}" ]] ; then 336 if [[ "${m}" == "${def%:*}" ]] ; then
312 mod_lines="${mod_lines}\n<IfDefine ${def#*:}>" 337 mod_lines="${mod_lines}\n<IfDefine ${def#*:}>"
313 endit=1 338 endit=1
332# This internal function checks if the previous configuration file for built-in 357# This internal function checks if the previous configuration file for built-in
333# modules exists in ROOT and prevents upgrade in this case. Users are supposed 358# modules exists in ROOT and prevents upgrade in this case. Users are supposed
334# to convert this file to the new APACHE2_MODULES USE_EXPAND variable and remove 359# to convert this file to the new APACHE2_MODULES USE_EXPAND variable and remove
335# it afterwards. 360# it afterwards.
336check_upgrade() { 361check_upgrade() {
337 if [[ -e "${ROOT}"etc/apache2/apache2-builtin-mods ]]; then 362 if [[ -e "${EROOT}"etc/apache2/apache2-builtin-mods ]]; then
338 eerror "The previous configuration file for built-in modules" 363 eerror "The previous configuration file for built-in modules"
339 eerror "(${ROOT}etc/apache2/apache2-builtin-mods) exists on your" 364 eerror "(${EROOT}etc/apache2/apache2-builtin-mods) exists on your"
340 eerror "system." 365 eerror "system."
341 eerror 366 eerror
342 eerror "Please read http://www.gentoo.org/doc/en/apache-upgrading.xml" 367 eerror "Please read http://www.gentoo.org/doc/en/apache-upgrading.xml"
343 eerror "for detailed information how to convert this file to the new" 368 eerror "for detailed information how to convert this file to the new"
344 eerror "APACHE2_MODULES USE_EXPAND variable." 369 eerror "APACHE2_MODULES USE_EXPAND variable."
365 390
366 setup_mpm 391 setup_mpm
367 setup_modules 392 setup_modules
368 393
369 if use debug; then 394 if use debug; then
370 MY_CONF="${MY_CONF} --enable-maintainer-mode --enable-exception-hook" 395 MY_CONF+=( --enable-maintainer-mode --enable-exception-hook )
371 fi 396 fi
372 397
373 elog "Please note that you need SysV IPC support in your kernel." 398 elog "Please note that you need SysV IPC support in your kernel."
374 elog "Make sure CONFIG_SYSVIPC=y is set." 399 elog "Make sure CONFIG_SYSVIPC=y is set."
375 elog 400 elog
376}
377 401
402 if use userland_BSD; then
403 elog "On BSD systems you need to add the following line to /boot/loader.conf:"
404 elog " accf_http_load=\"YES\""
405 elog
406 fi
407}
408
378# @FUNCTION: apache-2_src_unpack 409# @FUNCTION: apache-2_src_prepare
379# @DESCRIPTION: 410# @DESCRIPTION:
380# This function applies patches, configures a custom file-system layout and 411# This function applies patches, configures a custom file-system layout and
381# rebuilds the configure scripts. 412# rebuilds the configure scripts.
382apache-2_src_unpack() { 413apache-2_src_prepare() {
383 unpack ${A} 414 #fix prefix in conf files etc (bug #433736)
384 cd "${S}" 415 use !prefix || sed -e "s@/\(usr\|var\|etc\|run\)/@${EPREFIX}&@g" \
416 -i "${GENTOO_PATCHDIR}"/conf/httpd.conf "${GENTOO_PATCHDIR}"/scripts/* \
417 "${GENTOO_PATCHDIR}"/docs/*.example "${GENTOO_PATCHDIR}"/patches/*.layout \
418 "${GENTOO_PATCHDIR}"/init/* "${GENTOO_PATCHDIR}"/conf/vhosts.d/* \
419 "${GENTOO_PATCHDIR}"/conf/modules.d/* || die
420
421 # 03_all_gentoo-apache-tools.patch injects -Wl,-z,now, which is not a good
422 # idea for everyone
423 case ${CHOST} in
424 *-linux-gnu|*-solaris*|*-freebsd*)
425 # do nothing, these use GNU binutils
426 :
427 ;;
428 *-darwin*)
429 sed -i -e 's/-Wl,-z,now/-Wl,-bind_at_load/g' \
430 "${GENTOO_PATCHDIR}"/patches/03_all_gentoo_apache-tools.patch
431 ;;
432 *)
433 # patch it out to be like upstream
434 sed -i -e 's/-Wl,-z,now//g' \
435 "${GENTOO_PATCHDIR}"/patches/03_all_gentoo_apache-tools.patch
436 ;;
437 esac
385 438
386 # Use correct multilib libdir in gentoo patches 439 # Use correct multilib libdir in gentoo patches
387 sed -i -e "s:/usr/lib:/usr/$(get_libdir):g" \ 440 sed -i -e "s:/usr/lib:/usr/$(get_libdir):g" \
388 "${GENTOO_PATCHDIR}"/{conf/httpd.conf,init/*,patches/config.layout} \ 441 "${GENTOO_PATCHDIR}"/{conf/httpd.conf,init/*,patches/config.layout} \
389 || die "libdir sed failed" 442 || die "libdir sed failed"
399 mv docs/man/{httpd,apache2}.8 452 mv docs/man/{httpd,apache2}.8
400 sed -i -e 's/httpd\.8/apache2.8/g' Makefile.in 453 sed -i -e 's/httpd\.8/apache2.8/g' Makefile.in
401 454
402 # patched-in MPMs need the build environment rebuilt 455 # patched-in MPMs need the build environment rebuilt
403 sed -i -e '/sinclude/d' configure.in 456 sed -i -e '/sinclude/d' configure.in
404 AT_GNUCONF_UPDATE=yes AT_M4DIR=build eautoreconf 457 AT_M4DIR=build eautoreconf
405}
406 458
459 # ${T} must be not group-writable, else grsec TPE will block it
460 chmod g-w "${T}"
461
462 # This package really should upgrade to using pcre's .pc file.
463 cat <<-\EOF >"${T}"/pcre-config
464 #!/bin/sh
465 [ "${flag}" = "--version" ] && set -- --modversion
466 exec ${PKG_CONFIG} libpcre "$@"
467 EOF
468 chmod a+x "${T}"/pcre-config
469}
470
407# @FUNCTION: apache-2_src_compile 471# @FUNCTION: apache-2_src_configure
408# @DESCRIPTION: 472# @DESCRIPTION:
409# This function adds compiler flags and runs econf and emake based on MY_MPM and 473# This function adds compiler flags and runs econf and emake based on MY_MPM and
410# MY_CONF 474# MY_CONF
411apache-2_src_compile() { 475apache-2_src_configure() {
476 tc-export PKG_CONFIG
477
478 # Sanity check in case people have bad mounts/TPE settings. #500928
479 if ! "${T}"/pcre-config --help >/dev/null ; then
480 eerror "Could not execute ${T}/pcre-config; do you have bad mount"
481 eerror "permissions in ${T} or have TPE turned on in your kernel?"
482 die "check your runtime settings #500928"
483 fi
484
412 # Instead of filtering --as-needed (bug #128505), append --no-as-needed 485 # Instead of filtering --as-needed (bug #128505), append --no-as-needed
413 # Thanks to Harald van Dijk 486 # Thanks to Harald van Dijk
414 append-ldflags -Wl,--no-as-needed 487 append-ldflags $(no-as-needed)
415 488
416 # peruser MPM debugging with -X is nearly impossible 489 # peruser MPM debugging with -X is nearly impossible
417 if has peruser ${IUSE_MPMS} && use apache2_mpms_peruser ; then 490 if has peruser ${IUSE_MPMS} && use apache2_mpms_peruser ; then
418 use debug && append-flags -DMPM_PERUSER_DEBUG 491 use debug && append-flags -DMPM_PERUSER_DEBUG
419 fi 492 fi
420 493
421 # econf overwrites the stuff from config.layout, so we have to put them into 494 # econf overwrites the stuff from config.layout, so we have to put them into
422 # our myconf line too 495 # our myconf line too
496 ac_cv_path_PKGCONFIG=${PKG_CONFIG} \
423 econf \ 497 econf \
424 --includedir=/usr/include/apache2 \ 498 --includedir="${EPREFIX}"/usr/include/apache2 \
425 --libexecdir=/usr/$(get_libdir)/apache2/modules \ 499 --libexecdir="${EPREFIX}"/usr/$(get_libdir)/apache2/modules \
426 --datadir=/var/www/localhost \ 500 --datadir="${EPREFIX}"/var/www/localhost \
427 --sysconfdir=/etc/apache2 \ 501 --sysconfdir="${EPREFIX}"/etc/apache2 \
428 --localstatedir=/var \ 502 --localstatedir="${EPREFIX}"/var \
429 --with-mpm=${MY_MPM} \ 503 --with-mpm=${MY_MPM} \
430 --with-perl=/usr/bin/perl \ 504 --with-apr="${SYSROOT}${EPREFIX}"/usr \
431 --with-apr=/usr \ 505 --with-apr-util="${SYSROOT}${EPREFIX}"/usr \
432 --with-apr-util=/usr \ 506 --with-pcre="${T}"/pcre-config \
433 --with-pcre=/usr \ 507 --with-z="${EPREFIX}"/usr \
434 --with-z=/usr \
435 --with-port=80 \ 508 --with-port=80 \
436 --with-program-name=apache2 \ 509 --with-program-name=apache2 \
437 --enable-layout=Gentoo \ 510 --enable-layout=Gentoo \
438 ${MY_CONF} || die "econf failed!" 511 "${MY_CONF[@]}"
439 512
440 sed -i -e 's:apache2\.conf:httpd.conf:' include/ap_config_auto.h 513 sed -i -e 's:apache2\.conf:httpd.conf:' include/ap_config_auto.h
441
442 emake || die "emake failed"
443} 514}
444 515
445# @FUNCTION: apache-2_src_install 516# @FUNCTION: apache-2_src_install
446# @DESCRIPTION: 517# @DESCRIPTION:
447# This function runs `emake install' and generates, installs and adapts the gentoo 518# This function runs `emake install' and generates, installs and adapts the gentoo
448# specific configuration files found in the tarball 519# specific configuration files found in the tarball
449apache-2_src_install() { 520apache-2_src_install() {
450 make DESTDIR="${D}" install || die "make install failed" 521 emake DESTDIR="${D}" MKINSTALLDIRS="mkdir -p" install
451 522
452 # install our configuration files 523 # install our configuration files
453 keepdir /etc/apache2/vhosts.d 524 keepdir /etc/apache2/vhosts.d
454 keepdir /etc/apache2/modules.d 525 keepdir /etc/apache2/modules.d
455 526
456 generate_load_module 527 generate_load_module
457 insinto /etc/apache2 528 insinto /etc/apache2
458 doins -r "${GENTOO_PATCHDIR}"/conf/* 529 doins -r "${GENTOO_PATCHDIR}"/conf/*
459 doins docs/conf/magic 530 use apache2_modules_mime_magic && doins docs/conf/magic
460 531
461 insinto /etc/logrotate.d 532 insinto /etc/logrotate.d
462 newins "${GENTOO_PATCHDIR}"/scripts/apache2-logrotate apache2 533 newins "${GENTOO_PATCHDIR}"/scripts/apache2-logrotate apache2
463 534
464 # generate a sane default APACHE2_OPTS 535 # generate a sane default APACHE2_OPTS
465 APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE" 536 APACHE2_OPTS="-D DEFAULT_VHOST -D INFO"
466 use doc && APACHE2_OPTS="${APACHE2_OPTS} -D MANUAL" 537 use doc && APACHE2_OPTS="${APACHE2_OPTS} -D MANUAL"
467 use ssl && APACHE2_OPTS="${APACHE2_OPTS} -D SSL -D SSL_DEFAULT_VHOST" 538 use ssl && APACHE2_OPTS="${APACHE2_OPTS} -D SSL -D SSL_DEFAULT_VHOST"
468 use suexec && APACHE2_OPTS="${APACHE2_OPTS} -D SUEXEC" 539 use suexec && APACHE2_OPTS="${APACHE2_OPTS} -D SUEXEC"
540 if has negotiation ${APACHE2_MODULES} && use apache2_modules_negotiation; then
541 APACHE2_OPTS="${APACHE2_OPTS} -D LANGUAGE"
542 fi
469 543
470 sed -i -e "s:APACHE2_OPTS=\".*\":APACHE2_OPTS=\"${APACHE2_OPTS}\":" \ 544 sed -i -e "s:APACHE2_OPTS=\".*\":APACHE2_OPTS=\"${APACHE2_OPTS}\":" \
471 "${GENTOO_PATCHDIR}"/init/apache2.confd || die "sed failed" 545 "${GENTOO_PATCHDIR}"/init/apache2.confd || die "sed failed"
472 546
473 newconfd "${GENTOO_PATCHDIR}"/init/apache2.confd apache2 547 newconfd "${GENTOO_PATCHDIR}"/init/apache2.confd apache2
474 newinitd "${GENTOO_PATCHDIR}"/init/apache2.initd apache2 548 newinitd "${GENTOO_PATCHDIR}"/init/apache2.initd apache2
475 549
476 # link apache2ctl to the init script 550 # install apache2ctl wrapper for our init script if available
551 if test -e "${GENTOO_PATCHDIR}"/scripts/apache2ctl; then
552 exeinto /usr/sbin
553 doexe "${GENTOO_PATCHDIR}"/scripts/apache2ctl
554 else
477 dosym /etc/init.d/apache2 /usr/sbin/apache2ctl 555 dosym /etc/init.d/apache2 /usr/sbin/apache2ctl
556 fi
478 557
479 # provide legacy symlink for apxs, bug 177697 558 # provide legacy symlink for apxs, bug 177697
480 dosym /usr/sbin/apxs /usr/sbin/apxs2 559 dosym apxs /usr/sbin/apxs2
481
482 # install some thirdparty scripts
483 exeinto /usr/sbin
484 use ssl && doexe "${GENTOO_PATCHDIR}"/scripts/gentestcrt.sh
485 560
486 # install some documentation 561 # install some documentation
487 dodoc ABOUT_APACHE CHANGES LAYOUT README README.platforms VERSIONING 562 dodoc ABOUT_APACHE CHANGES LAYOUT README README.platforms VERSIONING
488 dodoc "${GENTOO_PATCHDIR}"/docs/* 563 dodoc "${GENTOO_PATCHDIR}"/docs/*
489 564
490 # drop in a convenient link to the manual 565 # drop in a convenient link to the manual
491 if use doc ; then 566 if use doc ; then
492 sed -i -e "s:VERSION:${PVR}:" "${D}/etc/apache2/modules.d/00_apache_manual.conf" 567 sed -i -e "s:VERSION:${PVR}:" "${ED}/etc/apache2/modules.d/00_apache_manual.conf"
568 docompress -x /usr/share/doc/${PF}/manual # 503640
493 else 569 else
494 rm -f "${D}/etc/apache2/modules.d/00_apache_manual.conf" 570 rm -f "${ED}/etc/apache2/modules.d/00_apache_manual.conf"
495 rm -Rf "${D}/usr/share/doc/${PF}/manual" 571 rm -Rf "${ED}/usr/share/doc/${PF}/manual"
496 fi 572 fi
497 573
498 # the default webroot gets stored in /usr/share/${PF}/webroot 574 # the default icons and error pages get stored in
499 ebegin "Installing default webroot to /usr/share/${PF}/webroot" 575 # /usr/share/apache2/{error,icons}
500 dodir /usr/share/${PF} 576 dodir /usr/share/apache2
501 mv -f "${D}/var/www/localhost" "${D}/usr/share/${PF}/webroot" 577 mv -f "${ED}/var/www/localhost/error" "${ED}/usr/share/apache2/error"
578 mv -f "${ED}/var/www/localhost/icons" "${ED}/usr/share/apache2/icons"
579 rm -rf "${ED}/var/www/localhost/"
502 eend $? 580 eend $?
503 581
504 # set some sane permissions for suexec 582 # set some sane permissions for suexec
505 if use suexec ; then 583 if use suexec ; then
506 fowners 0:apache /usr/sbin/suexec 584 fowners 0:${SUEXEC_CALLER:-apache} /usr/sbin/suexec
507 fperms 4710 /usr/sbin/suexec 585 fperms 4710 /usr/sbin/suexec
508 # provide legacy symlink for suexec, bug 177697 586 # provide legacy symlink for suexec, bug 177697
509 dosym /usr/sbin/suexec /usr/sbin/suexec2 587 dosym /usr/sbin/suexec /usr/sbin/suexec2
510 fi 588 fi
511 589
512 # empty dirs 590 # empty dirs
513 for i in /var/lib/dav /var/log/apache2 /var/cache/apache2 ; do 591 for i in /var/lib/dav /var/log/apache2 /var/cache/apache2 ; do
514 keepdir ${i} 592 keepdir ${i}
515 fowners apache:apache ${i} 593 fowners apache:apache ${i}
516 fperms 0755 ${i} 594 fperms 0750 ${i}
517 done 595 done
518
519 # we need /etc/apache2/ssl if USE=ssl
520 use ssl && keepdir /etc/apache2/ssl
521} 596}
522 597
523# @FUNCTION: apache-2_pkg_postinst 598# @FUNCTION: apache-2_pkg_postinst
524# @DESCRIPTION: 599# @DESCRIPTION:
525# This function creates test certificates if SSL is enabled and installs the 600# This function creates test certificates if SSL is enabled and installs the
526# default webroot to /var/www/localhost if it does not exist. We do this here 601# default index.html to /var/www/localhost if it does not exist. We do this here
527# because the default webroot is a copy of the files that exist elsewhere and we 602# because the default webroot is a copy of the files that exist elsewhere and we
528# don't want them to be managed/removed by portage when apache is upgraded. 603# don't want them to be managed/removed by portage when apache is upgraded.
529apache-2_pkg_postinst() { 604apache-2_pkg_postinst() {
530 einfo
531
532 if use ssl && [[ ! -e "${ROOT}/etc/apache2/ssl/server.crt" ]] ; then 605 if use ssl && [[ ! -e "${EROOT}/etc/ssl/apache2/server.pem" ]]; then
533 cd "${ROOT}"/etc/apache2/ssl 606 SSL_ORGANIZATION="${SSL_ORGANIZATION:-Apache HTTP Server}"
534 einfo "Generating self-signed test certificate in ${ROOT}etc/apache2/ssl ..." 607 install_cert /etc/ssl/apache2/server
535 yes "" 2>/dev/null | \ 608 ewarn
536 "${ROOT}"/usr/sbin/gentestcrt.sh >/dev/null 2>&1 || \ 609 ewarn "The location of SSL certificates has changed. If you are"
537 die "gentestcrt.sh failed" 610 ewarn "upgrading from ${CATEGORY}/${PN}-2.2.13 or earlier (or remerged"
538 einfo 611 ewarn "*any* apache version), you might want to move your old"
612 ewarn "certificates from /etc/apache2/ssl/ to /etc/ssl/apache2/ and"
613 ewarn "update your config files."
614 ewarn
539 fi 615 fi
540 616
541 if [[ -e "${ROOT}/var/www/localhost" ]] ; then 617 if [[ ! -e "${EROOT}/var/www/localhost" ]] ; then
542 elog "The default webroot has not been installed into"
543 elog "${ROOT}var/www/localhost because the directory already exists"
544 elog "and we do not want to overwrite any files you have put there."
545 elog
546 elog "If you would like to install the latest webroot, please run"
547 elog "emerge --config =${PF}"
548 elog
549 else
550 einfo "Installing default webroot to ${ROOT}var/www/localhost"
551 mkdir -p "${ROOT}"/var/www/localhost 618 mkdir -p "${EROOT}/var/www/localhost/htdocs"
552 cp -R "${ROOT}"/usr/share/${PF}/webroot/* "${ROOT}"/var/www/localhost/ 619 echo "<html><body><h1>It works!</h1></body></html>" > "${EROOT}/var/www/localhost/htdocs/index.html"
553 einfo
554 fi 620 fi
555}
556 621
557# @FUNCTION: apache-2_pkg_config 622 echo
558# @DESCRIPTION: 623 elog "Attention: cgi and cgid modules are now handled via APACHE2_MODULES flags"
559# This function installs -- and overwrites -- the default webroot to 624 elog "in make.conf. Make sure to enable those in order to compile them."
560# /var/www/localhost 625 elog "In general, you should use 'cgid' with threaded MPMs and 'cgi' otherwise."
561apache-2_pkg_config() { 626 echo
562 einfo "Installing default webroot to ${ROOT}var/www/localhost"
563 mkdir -p "${ROOT}"/var/www/localhost
564 cp -R "${ROOT}"/usr/share/${PF}/webroot/* "${ROOT}"/var/www/localhost/
565}
566 627
628}
629
567EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postinst pkg_config 630EXPORT_FUNCTIONS pkg_setup src_prepare src_configure src_install pkg_postinst

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.40

  ViewVC Help
Powered by ViewVC 1.1.20