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

Contents of /eclass/apache-module.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (download) (vendor branch)
Wed Nov 30 09:59:23 2005 UTC (8 years, 7 months ago) by chriswhite
Changes since 1.1: +64 -41 lines
*** empty log message ***

1 urilith 1.1 # Copyright 2004 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License, v2 or later
3     # Author Michael Tindal <urilith@gentoo.org>
4 chriswhite 1.1.1.1 # $Header: /var/cvsroot/gentoo-x86/eclass/apache-module.eclass,v 1.13 2005/08/02 23:26:14 vericgar Exp $
5 urilith 1.1
6     inherit depend.apache
7    
8     # This eclass provides a common set of functions for Apache modules.
9    
10     ######
11     ## Common ebuild variables
12     ######
13    
14     ####
15     ## APXS1_S, APXS2_S
16     ##
17     ## Paths to temporary build directories
18     ####
19     APXS1_S=""
20     APXS2_S=""
21    
22     ####
23     ## APXS1_ARGS, APXS2_ARGS
24     ##
25     ## Arguments to pass to the apxs tool
26     ####
27     APXS1_ARGS=""
28     APXS2_ARGS=""
29    
30     ####
31     ## APACHE1_MOD_FILE, APACHE2_MOD_FILE
32     ##
33     ## Name of the module that src_install installs (only, minus the .so)
34     ####
35     APACHE1_MOD_FILE=""
36     APACHE2_MOD_FILE=""
37    
38     ####
39     ## APACHE1_MOD_CONF, APACHE2_MOD_CONF
40     ##
41     ## Configuration file installed by src_install
42     ####
43     APACHE1_MOD_CONF=""
44     APACHE2_MOD_CONF=""
45    
46     ####
47     ## APACHE1_MOD_DEFINE, APACHE2_MOD_DEFINE
48     ##
49     ## Name of define (eg FOO) to use in conditional loading of the installed
50     ## module/it's config file
51     ####
52     APACHE1_MOD_DEFINE=""
53     APACHE2_MOD_DEFINE=""
54    
55     ####
56     ## DOCFILES
57     ##
58     ## If the exported src_install() is being used, and ${DOCFILES} is non-zero,
59     ## some sed-fu is applied to split out html documentation (if any) from normal
60     ## documentation, and dodoc'd or dohtml'd
61     ####
62     DOCFILES=""
63    
64     ######
65     ## Utility functions
66     ######
67    
68     ####
69     ## apache_cd_dir
70     ##
71     ## Return the path to our temporary build dir
72     ####
73     apache_cd_dir() {
74     debug-print-function apache_cd_dir
75    
76     if [ "${APACHE_VERSION}" == "1" ]; then
77     [ -n "${APXS1_S}" ] && CD_DIR="${APXS1_S}"
78     else
79     [ -n "${APXS2_S}" ] && CD_DIR="${APXS2_S}"
80     fi
81    
82     # XXX - is this really needed? can't we just return ${S}?
83     if [ -z "${CD_DIR}" ]; then
84     if [ -d ${S}/src ] ; then
85     CD_DIR="${S}/src"
86     else
87     CD_DIR="${S}"
88     fi
89     fi
90    
91     debug-print apache_cd_dir: "CD_DIR=${CD_DIR}"
92     echo ${CD_DIR}
93     }
94    
95     ####
96     ## apache_mod_file
97     ##
98     ## Return the path to the module file
99     ####
100     apache_mod_file() {
101     debug-print-function apache_mod_file
102    
103     if [ "${APACHE_VERSION}" == "1" ]; then
104     [ -n "${APACHE1_MOD_FILE}" ] && MOD_FILE="${APACHE1_MOD_FILE}"
105     [ -z "${MOD_FILE}" ] && MOD_FILE="$(apache_cd_dir)/${PN}.so"
106     else
107     [ -n "${APACHE2_MOD_FILE}" ] && MOD_FILE="${APACHE2_MOD_FILE}"
108     [ -z "${MOD_FILE}" ] && MOD_FILE="$(apache_cd_dir)/.libs/${PN}.so"
109     fi
110    
111     debug-print apache_mod_file: MOD_FILE=${MOD_FILE}
112     echo ${MOD_FILE}
113     }
114    
115     ####
116     ## apache_doc_magic
117     ##
118     ## Some magic for picking out html files from ${DOCFILES}. It takes
119     ## an optional first argument `html'; if the first argument is equals
120     ## `html', only html files are returned, otherwise normal (non-html)
121     ## docs are returned.
122     ####
123     apache_doc_magic() {
124     debug-print-function apache_doc_magic $*
125    
126     if [ -n "${DOCFILES}" ]; then
127     if [ "x$1" == "xhtml" ]; then
128     DOCS="`echo ${DOCFILES} | sed -e 's/ /\n/g' | sed -e '/^[^ ]*.html$/ !d'`"
129     else
130     DOCS="`echo ${DOCFILES} | sed 's, *[^ ]*\+.html, ,g'`"
131     fi
132    
133     debug-print apache_doc_magic: DOCS=${DOCS}
134     echo ${DOCS}
135     fi
136     }
137    
138     ######
139     ## Apache 1.x ebuild functions
140     ######
141    
142     ####
143     ## apache1_src_compile
144     ## The default action is to call ${APXS11} with the value of
145     ## ${APXS1_ARGS}. If a module requires a different build setup
146     ## than this, use ${APXS1} in your own src_compile routine.
147     ####
148 chriswhite 1.1.1.1 apache1_src_compile() {
149 urilith 1.1 debug-print-function apache1_src_compile
150    
151     CD_DIR=$(apache_cd_dir)
152     cd ${CD_DIR} || die "cd ${CD_DIR} failed"
153     APXS1_ARGS="${APXS1_ARGS:--c ${PN}.c}"
154     ${APXS1} ${APXS1_ARGS} || die "${APXS1} ${APXS1_ARGS} failed"
155     }
156    
157     ####
158     ## apache1_src_install
159     ##
160     ## This installs the files into apache's directories. The module is installed
161     ## from a directory chosen as above (APXS2_S or ${S}/src). In addition,
162     ## this function can also set the executable permission on files listed in EXECFILES.
163     ## The configuration file name is listed in APACHE1_MOD_CONF without the .conf extensions,
164     ## so if you configuration is 55_mod_foo.conf, APACHE1_MOD_CONF would be 55_mod_foo.
165 chriswhite 1.1.1.1 ## DOCFILES contains the list of files you want filed as documentation. The name of the
166 urilith 1.1 ## module can also be specified using the APACHE1_MOD_FILE or defaults to
167 chriswhite 1.1.1.1 ## .libs/${PN}.so.
168 urilith 1.1 ####
169     apache1_src_install() {
170     debug-print-function apache1_src_install
171    
172     CD_DIR=$(apache_cd_dir)
173     cd ${CD_DIR} || die "cd ${CD_DIR} failed"
174    
175     MOD_FILE=$(apache_mod_file)
176    
177     exeinto ${APACHE1_MODULESDIR}
178 chriswhite 1.1.1.1 doexe ${MOD_FILE} || die "internal ebuild error: '${MOD_FILE}' not found"
179 urilith 1.1 [ -n "${APACHE1_EXECFILES}" ] && doexe ${APACHE1_EXECFILES}
180    
181     if [ -n "${APACHE1_MOD_CONF}" ] ; then
182     insinto ${APACHE1_MODULES_CONFDIR}
183 chriswhite 1.1.1.1 doins ${FILESDIR}/${APACHE1_MOD_CONF}.conf || die "internal ebuild error: '${FILESDIR}/${APACHE1_MOD_CONF}.conf' not found."
184 urilith 1.1 fi
185 chriswhite 1.1.1.1
186 urilith 1.1 cd ${S}
187    
188     if [ -n "${DOCFILES}" ] ; then
189     OTHER_DOCS=$(apache_doc_magic)
190     HTML_DOCS=$(apache_doc_magic html)
191    
192     [ -n "${OTHER_DOCS}" ] && dodoc ${OTHER_DOCS}
193     [ -n "${HTML_DOCS}" ] && dohtml ${HTML_DOCS}
194     fi
195     }
196    
197     ####
198     ## apache1_pkg_postinst
199     ##
200     ## Prints the standard config message, unless APACHE1_NO_CONFIG is set to yes.
201     ####
202     apache1_pkg_postinst() {
203     debug-print-function apache1_pkg_postinst
204    
205     if [ -n "${APACHE1_MOD_DEFINE}" ]; then
206     einfo
207     einfo "To enable ${PN}, you need to edit your /etc/conf.d/apache file and"
208     einfo "add '-D ${APACHE1_MOD_DEFINE}' to APACHE_OPTS."
209     einfo
210     fi
211 chriswhite 1.1.1.1 if [ -n "${APACHE1_MOD_CONF}" ] ; then
212     einfo
213     einfo "Configuration file installed as"
214     einfo " ${APACHE1_MODULES_CONFDIR}/$(basename ${APACHE1_MOD_CONF}).conf"
215     einfo "You may want to edit it before turning the module on in /etc/conf.d/apache"
216     einfo
217     fi
218 urilith 1.1 }
219    
220     ######
221     ## Apache 2.x ebuild functions
222     ######
223    
224     ####
225     ## apache2_pkg_setup
226     ##
227     ## Checks to see if APACHE2_MT_UNSAFE is set to anything other than "no". If it is, then
228     ## we check what the MPM style used by Apache is, if it isnt prefork, we let the user
229     ## know they need prefork, and then exit the build.
230     ####
231 chriswhite 1.1.1.1 apache2_pkg_setup() {
232 urilith 1.1 debug-print-function apache2_pkg_setup
233    
234 chriswhite 1.1.1.1 if [ -n "${APACHE2_SAFE_MPMS}" ]; then
235    
236     INSTALLED_MPM="$(${ROOT}/usr/sbin/apxs2 -q MPM_NAME)"
237    
238     if hasq ${INSTALLED_MPM} ${APACHE2_SAFE_MPMS} ; then
239     INSTALLED_MPM_SAFE="yes"
240     fi
241    
242     if [ -z "${INSTALLED_MPM_SAFE}" ] ; then
243     eerror "The module you are trying to install (${PN})"
244     eerror "will only work with one of the following MPMs:"
245     eerror " ${APACHE2_SAFE_MPMS}"
246     eerror "You do not currently have any of these MPMs installed."
247     eerror "Please re-install apache with the correct mpm-* USE flag set."
248     die "No safe MPM installed."
249 urilith 1.1 fi
250 chriswhite 1.1.1.1
251 urilith 1.1 fi
252 chriswhite 1.1.1.1
253 urilith 1.1 }
254 chriswhite 1.1.1.1
255 urilith 1.1 ####
256     ## apache2_src_compile
257     ##
258     ## The default action is to call ${APXS2} with the value of
259     ## ${APXS2_ARGS}. If a module requires a different build setup
260     ## than this, use ${APXS2} in your own src_compile routine.
261     ####
262 chriswhite 1.1.1.1 apache2_src_compile() {
263 urilith 1.1 debug-print-function apache2_src_compile
264    
265     CD_DIR=$(apache_cd_dir)
266     cd ${CD_DIR} || die "cd ${CD_DIR} failed"
267     APXS2_ARGS="${APXS2_ARGS:--c ${PN}.c}"
268     ${APXS2} ${APXS2_ARGS} || die "${APXS2} ${APXS2_ARGS} failed"
269     }
270    
271     ####
272     ## apache2_src_install
273     ##
274     ## This installs the files into apache's directories. The module is installed
275     ## from a directory chosen as above (APXS2_S or ${S}/src). In addition,
276     ## this function can also set the executable permission on files listed in EXECFILES.
277     ## The configuration file name is listed in CONFFILE without the .conf extensions,
278     ## so if you configuration is 55_mod_foo.conf, CONFFILE would be 55_mod_foo.
279     ## DOCFILES contains the list of files you want filed as documentation.
280     ####
281     apache2_src_install() {
282     debug-print-function apache2_src_install
283    
284     CD_DIR=$(apache_cd_dir)
285     cd ${CD_DIR} || die "cd ${CD_DIR} failed"
286    
287     MOD_FILE=$(apache_mod_file)
288    
289     exeinto ${APACHE2_MODULESDIR}
290 chriswhite 1.1.1.1 doexe ${MOD_FILE} || die "internal ebuild error: '${MOD_FILE}' not found"
291 urilith 1.1 [ -n "${APACHE2_EXECFILES}" ] && doexe ${APACHE2_EXECFILES}
292    
293     if [ -n "${APACHE2_MOD_CONF}" ] ; then
294     insinto ${APACHE2_MODULES_CONFDIR}
295 chriswhite 1.1.1.1 doins ${FILESDIR}/${APACHE2_MOD_CONF}.conf || die "internal ebuild error: '${FILESDIR}/${APACHE2_MOD_CONF}.conf' not found."
296 urilith 1.1 fi
297    
298     if [ -n "${APACHE2_VHOSTFILE}" ]; then
299 chriswhite 1.1.1.1 insinto ${APACHE2_VHOSTDIR}
300 urilith 1.1 doins ${FILESDIR}/${APACHE2_VHOSTFILE}.conf
301     fi
302    
303     cd ${S}
304    
305     if [ -n "${DOCFILES}" ] ; then
306     OTHER_DOCS=$(apache_doc_magic)
307     HTML_DOCS=$(apache_doc_magic html)
308    
309     [ -n "${OTHER_DOCS}" ] && dodoc ${OTHER_DOCS}
310     [ -n "${HTML_DOCS}" ] && dohtml ${HTML_DOCS}
311     fi
312     }
313    
314     apache2_pkg_postinst() {
315     debug-print-function apache2_pkg_postinst
316    
317     if [ -n "${APACHE2_MOD_DEFINE}" ]; then
318     einfo
319     einfo "To enable ${PN}, you need to edit your /etc/conf.d/apache2 file and"
320     einfo "add '-D ${APACHE2_MOD_DEFINE}' to APACHE2_OPTS."
321     einfo
322     fi
323 chriswhite 1.1.1.1 if [ -n "${APACHE2_MOD_CONF}" ] ; then
324     einfo
325     einfo "Configuration file installed as"
326     einfo " ${APACHE2_MODULES_CONFDIR}/$(basename ${APACHE2_MOD_CONF}).conf"
327     einfo "You may want to edit it before turning the module on in /etc/conf.d/apache2"
328     einfo
329     fi
330    
331     if [ -n "${APACHE2_SAFE_MPMS}" ]; then
332    
333     INSTALLED_MPM="$(${ROOT}/usr/sbin/apxs2 -q MPM_NAME)"
334    
335     if ! hasq ${INSTALLED_MPM} ${APACHE2_SAFE_MPMS} ; then
336     INSTALLED_MPM_UNSAFE="${INSTALLED_MPM_UNSAFE} ${mpm}"
337     else
338     INSTALLED_MPM_SAFE="${INSTALLED_MPM_SAFE} ${mpm}"
339     fi
340    
341     if [ -n "${INSTALLED_MPM_UNSAFE}" ] ; then
342     ewarn "You have one or more MPMs installed that will not work with"
343     ewarn "this module (${PN}). Please make sure that you only enable"
344     ewarn "this module if you are using one of the following MPMs:"
345     ewarn " ${INSTALLED_MPM_SAFE}"
346     fi
347    
348     fi
349    
350 urilith 1.1 }
351    
352     ######
353     ## Apache dual (1.x or 2.x) ebuild functions
354     ##
355     ## This is where the magic happens. We provide dummy routines of all of the functions
356     ## provided by all of the specifics. We use APACHE_ECLASS_VER_* to see which versions
357     ## to call. If a function is provided by a given section (ie pkg_postinst in Apache 2.x)
358     ## the exported routine simply does nothing.
359     ######
360    
361     apache-module_pkg_setup() {
362     debug-print-function apache-module_pkg_setup
363    
364     if [ ${APACHE_VERSION} -eq '2' ]; then
365     apache2_pkg_setup
366     fi
367     }
368    
369     apache-module_src_compile() {
370     debug-print-function apache-module_src_compile
371    
372     if [ ${APACHE_VERSION} -eq '1' ]; then
373     apache1_src_compile
374     else
375     apache2_src_compile
376     fi
377     }
378    
379     apache-module_src_install() {
380     debug-print-function apache-module_src_install
381    
382     if [ ${APACHE_VERSION} -eq '1' ]; then
383     apache1_src_install
384     else
385     apache2_src_install
386     fi
387     }
388    
389     apache-module_pkg_postinst() {
390     debug-print-function apache-module_pkg_postinst
391    
392     if [ ${APACHE_VERSION} -eq '1' ]; then
393     apache1_pkg_postinst
394     else
395     apache2_pkg_postinst
396     fi
397     }
398    
399     EXPORT_FUNCTIONS pkg_setup src_compile src_install pkg_postinst
400    
401     # vim:ts=4

  ViewVC Help
Powered by ViewVC 1.1.20