| 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/php-ext-source-r2.eclass,v 1.4 2010/11/02 21:46:05 olemarkus Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/php-ext-source-r2.eclass,v 1.13 2011/08/15 12:48:27 olemarkus Exp $ |
| 4 | # |
4 | # |
| 5 | # Author: Tal Peer <coredumb@gentoo.org> |
5 | # Author: Tal Peer <coredumb@gentoo.org> |
| 6 | # Author: Stuart Herbert <stuart@gentoo.org> |
6 | # Author: Stuart Herbert <stuart@gentoo.org> |
| 7 | # Author: Luca Longinotti <chtekk@gentoo.org> |
7 | # Author: Luca Longinotti <chtekk@gentoo.org> |
| 8 | # Author: Jakub Moc <jakub@gentoo.org> (documentation) |
8 | # Author: Jakub Moc <jakub@gentoo.org> (documentation) |
| … | |
… | |
| 14 | # @BLURB: A unified interface for compiling and installing standalone PHP extensions. |
14 | # @BLURB: A unified interface for compiling and installing standalone PHP extensions. |
| 15 | # @DESCRIPTION: |
15 | # @DESCRIPTION: |
| 16 | # This eclass provides a unified interface for compiling and installing standalone |
16 | # This eclass provides a unified interface for compiling and installing standalone |
| 17 | # PHP extensions (modules). |
17 | # PHP extensions (modules). |
| 18 | |
18 | |
| 19 | inherit flag-o-matic autotools depend.php |
19 | inherit flag-o-matic autotools |
| 20 | |
20 | |
| 21 | EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_install |
21 | EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_install |
| 22 | |
22 | |
| 23 | # @ECLASS-VARIABLE: PHP_EXT_NAME |
23 | # @ECLASS-VARIABLE: PHP_EXT_NAME |
| 24 | # @DESCRIPTION: |
24 | # @DESCRIPTION: |
| … | |
… | |
| 58 | [[ -z "${PHP_EXT_ZENDEXT}" ]] && PHP_EXT_ZENDEXT="no" |
58 | [[ -z "${PHP_EXT_ZENDEXT}" ]] && PHP_EXT_ZENDEXT="no" |
| 59 | |
59 | |
| 60 | # @ECLASS-VARIABLE: USE_PHP |
60 | # @ECLASS-VARIABLE: USE_PHP |
| 61 | # @DESCRIPTION: |
61 | # @DESCRIPTION: |
| 62 | # Lists the PHP slots compatibile the extension is compatibile with |
62 | # Lists the PHP slots compatibile the extension is compatibile with |
| 63 | [[ -z "${USE_PHP}" ]] && USE_PHP="php5-2 php5-3" |
63 | [[ -z "${USE_PHP}" ]] && USE_PHP="php5-3 php5-2" |
|
|
64 | |
|
|
65 | # @ECLASS-VARIABLE: PHP_EXT_OPTIONAL_USE |
|
|
66 | # @DESCRIPTION: |
|
|
67 | # If set, this is the USE flag that the PHP dependencies are behind |
|
|
68 | # Most commonly set as PHP_EXT_OPTIONAL_USE=php to get the dependencies behind |
|
|
69 | # USE=php. |
|
|
70 | |
|
|
71 | # @ECLASS-VARIABLE: PHP_EXT_S |
|
|
72 | # @DESCRIPTION: |
|
|
73 | # The relative location of the temporary build directory for the PHP extension within |
|
|
74 | # the source package. This is useful for packages that bundle the PHP extension. |
|
|
75 | # Defaults to ${S} |
|
|
76 | [[ -z "${PHP_EXT_S}" ]] && PHP_EXT_S="${S}" |
| 64 | |
77 | |
| 65 | #Make sure at least one target is installed. Abuses USE dependencies. |
78 | #Make sure at least one target is installed. Abuses USE dependencies. |
| 66 | for target in ${USE_PHP}; do |
79 | for target in ${USE_PHP}; do |
| 67 | IUSE="${IUSE} php_targets_${target}" |
80 | IUSE="${IUSE} php_targets_${target}" |
| 68 | target=${target/+} |
81 | target=${target/+} |
| 69 | SELFDEPEND="${SELFDEPEND} =${CATEGORY}/${PF}[php_targets_${target}]" |
82 | SELFDEPEND="${SELFDEPEND} =${CATEGORY}/${PF}[php_targets_${target}]" |
| 70 | slot=${target/php} |
83 | slot=${target/php} |
| 71 | slot=${slot/-/.} |
84 | slot=${slot/-/.} |
| 72 | PHPDEPEND="${PHPDEPEND} |
85 | PHPDEPEND="${PHPDEPEND} |
| 73 | php_targets_${target}? ( dev-lang/php:${slot} )" |
86 | php_targets_${target}? ( dev-lang/php:${slot} )" |
| 74 | done |
87 | done |
| 75 | |
88 | |
| 76 | RDEPEND="${RDEPEND} |
89 | RDEPEND="${RDEPEND} |
|
|
90 | ${PHP_EXT_OPTIONAL_USE}${PHP_EXT_OPTIONAL_USE:+? ( } |
| 77 | || ( ${SELFDEPEND} ) |
91 | || ( ${SELFDEPEND} ) |
| 78 | ${PHPDEPEND}" |
92 | ${PHPDEPEND} |
|
|
93 | ${PHP_EXT_OPTIONAL_USE:+ )}" |
| 79 | |
94 | |
| 80 | |
95 | |
| 81 | # @FUNCTION: php-ext-source-r2_src_unpack |
96 | # @FUNCTION: php-ext-source-r2_src_unpack |
| 82 | # @DESCRIPTION: |
97 | # @DESCRIPTION: |
| 83 | # runs standard src_unpack + _phpize |
98 | # runs standard src_unpack + _phpize |
| 84 | # |
99 | # |
| 85 | # @VARIABLE: PHP_EXT_SKIP_PHPIZE |
100 | # @VARIABLE: PHP_EXT_SKIP_PHPIZE |
| 86 | # @DESCRIPTION: |
101 | # @DESCRIPTION: |
| 87 | # phpize will be run by default for all ebuilds that use |
102 | # phpize will be run by default for all ebuilds that use |
| 88 | # php-ext-source-r1_src_unpack |
103 | # php-ext-source-r2_src_unpack |
| 89 | # Set PHP_EXT_SKIP_PHPIZE="yes" in your ebuild if you do not want to run phpize. |
104 | # Set PHP_EXT_SKIP_PHPIZE="yes" in your ebuild if you do not want to run phpize. |
| 90 | php-ext-source-r2_src_unpack() { |
105 | php-ext-source-r2_src_unpack() { |
| 91 | unpack ${A} |
106 | unpack ${A} |
| 92 | local slot orig_s="$S" |
107 | local slot orig_s="${PHP_EXT_S}" |
| 93 | for slot in $(php_get_slots); do |
108 | for slot in $(php_get_slots); do |
| 94 | cp -r "${orig_s}" "${WORKDIR}/${slot}" |
109 | cp -r "${orig_s}" "${WORKDIR}/${slot}" |
| 95 | done |
110 | done |
| 96 | } |
111 | } |
| 97 | |
112 | |
| 98 | php-ext-source-r2_src_prepare() { |
113 | php-ext-source-r2_src_prepare() { |
| 99 | local slot orig_s="$S" |
114 | local slot orig_s="${PHP_EXT_S}" |
| 100 | for slot in $(php_get_slots); do |
115 | for slot in $(php_get_slots); do |
| 101 | php_init_slot_env ${slot} |
116 | php_init_slot_env ${slot} |
| 102 | php-ext-source-r2_phpize |
117 | php-ext-source-r2_phpize |
| 103 | done |
118 | done |
| 104 | } |
119 | } |
| … | |
… | |
| 114 | ${PHPIZE} |
129 | ${PHPIZE} |
| 115 | # force run of libtoolize and regeneration of related autotools |
130 | # force run of libtoolize and regeneration of related autotools |
| 116 | # files (bug 220519) |
131 | # files (bug 220519) |
| 117 | rm aclocal.m4 |
132 | rm aclocal.m4 |
| 118 | eautoreconf |
133 | eautoreconf |
| 119 | fi |
134 | fi |
| 120 | } |
135 | } |
| 121 | |
136 | |
| 122 | # @FUNCTION: php-ext-source-r2_src_configure |
137 | # @FUNCTION: php-ext-source-r2_src_configure |
| 123 | # @DESCRIPTION: |
138 | # @DESCRIPTION: |
| 124 | # Takes care of standard configure for PHP extensions (modules). |
139 | # Takes care of standard configure for PHP extensions (modules). |
| … | |
… | |
| 131 | for slot in $(php_get_slots); do |
146 | for slot in $(php_get_slots); do |
| 132 | php_init_slot_env ${slot} |
147 | php_init_slot_env ${slot} |
| 133 | # Set the correct config options |
148 | # Set the correct config options |
| 134 | # We cannot use econf here, phpize/php-config deals with setting |
149 | # We cannot use econf here, phpize/php-config deals with setting |
| 135 | # --prefix etc to whatever the php slot was configured to use |
150 | # --prefix etc to whatever the php slot was configured to use |
|
|
151 | echo ./configure --with-php-config=${PHPCONFIG} ${my_conf} |
| 136 | ./configure --with-php-config=${PHPCONFIG} ${my_conf} || die "Unable to configure code to compile" |
152 | ./configure --with-php-config=${PHPCONFIG} ${my_conf} || die "Unable to configure code to compile" |
| 137 | done |
153 | done |
| 138 | } |
154 | } |
| 139 | |
155 | |
| 140 | # @FUNCTION: php-ext-source-r2_src_compile |
156 | # @FUNCTION: php-ext-source-r2_src_compile |
| … | |
… | |
| 143 | php-ext-source-r2_src_compile() { |
159 | php-ext-source-r2_src_compile() { |
| 144 | # net-snmp creates this file #324739 |
160 | # net-snmp creates this file #324739 |
| 145 | addpredict /usr/share/snmp/mibs/.index |
161 | addpredict /usr/share/snmp/mibs/.index |
| 146 | # shm extension createss a semaphore file #173574 |
162 | # shm extension createss a semaphore file #173574 |
| 147 | addpredict /session_mm_cli0.sem |
163 | addpredict /session_mm_cli0.sem |
| 148 | local slot |
164 | local slot |
| 149 | for slot in $(php_get_slots); do |
165 | for slot in $(php_get_slots); do |
| 150 | php_init_slot_env ${slot} |
166 | php_init_slot_env ${slot} |
| 151 | emake || die "Unable to make code" |
167 | emake || die "Unable to make code" |
| 152 | |
168 | |
| 153 | done |
169 | done |
| … | |
… | |
| 195 | PHPCLI="/usr/${libdir}/${1}/bin/php" |
211 | PHPCLI="/usr/${libdir}/${1}/bin/php" |
| 196 | PHPCGI="/usr/${libdir}/${1}/bin/php-cgi" |
212 | PHPCGI="/usr/${libdir}/${1}/bin/php-cgi" |
| 197 | PHP_PKG="$(best_version =dev-lang/php-${1:3}*)" |
213 | PHP_PKG="$(best_version =dev-lang/php-${1:3}*)" |
| 198 | PHPPREFIX="/usr/${libdir}/${slot}" |
214 | PHPPREFIX="/usr/${libdir}/${slot}" |
| 199 | EXT_DIR="$(${PHPCONFIG} --extension-dir 2>/dev/null)" |
215 | EXT_DIR="$(${PHPCONFIG} --extension-dir 2>/dev/null)" |
|
|
216 | PHP_CURRENTSLOT=${1:3} |
| 200 | |
217 | |
| 201 | S="${WORKDIR}/${1}" |
218 | PHP_EXT_S="${WORKDIR}/${1}" |
| 202 | cd "${S}" |
219 | cd "${PHP_EXT_S}" |
| 203 | } |
220 | } |
| 204 | |
221 | |
| 205 | php-ext-source-r2_buildinilist() { |
222 | php-ext-source-r2_buildinilist() { |
| 206 | # Work out the list of <ext>.ini files to edit/add to |
223 | # Work out the list of <ext>.ini files to edit/add to |
| 207 | if [[ -z "${PHPSAPILIST}" ]] ; then |
224 | if [[ -z "${PHPSAPILIST}" ]] ; then |
| … | |
… | |
| 213 | for x in ${PHPSAPILIST} ; do |
230 | for x in ${PHPSAPILIST} ; do |
| 214 | if [[ -f "/etc/php/${x}-${1}/php.ini" ]] ; then |
231 | if [[ -f "/etc/php/${x}-${1}/php.ini" ]] ; then |
| 215 | PHPINIFILELIST="${PHPINIFILELIST} etc/php/${x}-${1}/ext/${PHP_EXT_NAME}.ini" |
232 | PHPINIFILELIST="${PHPINIFILELIST} etc/php/${x}-${1}/ext/${PHP_EXT_NAME}.ini" |
| 216 | fi |
233 | fi |
| 217 | done |
234 | done |
|
|
235 | PHPFULLINIFILELIST="${PHPFULLINIFILELIST} ${PHPINIFILELIST}" |
| 218 | } |
236 | } |
| 219 | |
237 | |
| 220 | # @FUNCTION: php-ext-source-r2_createinifiles |
238 | # @FUNCTION: php-ext-source-r2_createinifiles |
| 221 | # @DESCRIPTION: |
239 | # @DESCRIPTION: |
| 222 | # Builds ini files for every enabled slot and SAPI |
240 | # Builds ini files for every enabled slot and SAPI |
| 223 | php-ext-source-r2_createinifiles() { |
241 | php-ext-source-r2_createinifiles() { |
| 224 | local slot |
242 | local slot |
| 225 | for slot in $(php_get_slots); do |
243 | for slot in $(php_get_slots); do |
| 226 | php_init_slot_env ${slot} |
244 | php_init_slot_env ${slot} |
| 227 | # Pull in the PHP settings |
245 | # Pull in the PHP settings |
| 228 | |
246 | |
| 229 | # Build the list of <ext>.ini files to edit/add to |
247 | # Build the list of <ext>.ini files to edit/add to |
| 230 | php-ext-source-r2_buildinilist ${slot} |
248 | php-ext-source-r2_buildinilist ${slot} |
| 231 | |
249 | |
|
|
250 | |
| 232 | # Add the needed lines to the <ext>.ini files |
251 | # Add the needed lines to the <ext>.ini files |
|
|
252 | local file |
| 233 | if [[ "${PHP_EXT_INI}" = "yes" ]] ; then |
253 | if [[ "${PHP_EXT_INI}" = "yes" ]] ; then |
|
|
254 | for file in ${PHPINIFILELIST}; do |
| 234 | php-ext-source-r2_addextension "${PHP_EXT_NAME}.so" |
255 | php-ext-source-r2_addextension "${PHP_EXT_NAME}.so" "${file}" |
|
|
256 | done |
| 235 | fi |
257 | fi |
|
|
258 | |
| 236 | |
259 | |
| 237 | # Symlink the <ext>.ini files from ext/ to ext-active/ |
260 | # Symlink the <ext>.ini files from ext/ to ext-active/ |
|
|
261 | local inifile |
| 238 | for inifile in ${PHPINIFILELIST} ; do |
262 | for inifile in ${PHPINIFILELIST} ; do |
|
|
263 | if [[ -n "${PHP_EXT_INIFILE}" ]]; then |
|
|
264 | cat "${FILESDIR}/${PHP_EXT_INIFILE}" > "${inifile}" |
|
|
265 | einfo "Added content of ${FILESDIR}/${PHP_EXT_INIFILE} to ${inifile}" |
|
|
266 | fi |
|
|
267 | |
|
|
268 | |
|
|
269 | |
|
|
270 | |
| 239 | inidir="${inifile/${PHP_EXT_NAME}.ini/}" |
271 | inidir="${inifile/${PHP_EXT_NAME}.ini/}" |
| 240 | inidir="${inidir/ext/ext-active}" |
272 | inidir="${inidir/ext/ext-active}" |
| 241 | dodir "/${inidir}" |
273 | dodir "/${inidir}" |
| 242 | dosym "/${inifile}" "/${inifile/ext/ext-active}" |
274 | dosym "/${inifile}" "/${inifile/ext/ext-active}" |
| 243 | done |
275 | done |
| 244 | |
276 | |
| 245 | # Add support for installing PHP files into a version dependant directory |
277 | # Add support for installing PHP files into a version dependant directory |
| 246 | PHP_EXT_SHARED_DIR="/usr/share/php/${PHP_EXT_NAME}" |
278 | PHP_EXT_SHARED_DIR="/usr/share/php/${PHP_EXT_NAME}" |
| 247 | done |
279 | done |
|
|
280 | |
| 248 | } |
281 | } |
| 249 | |
282 | |
| 250 | php-ext-source-r2_addextension() { |
283 | php-ext-source-r2_addextension() { |
| 251 | if [[ "${PHP_EXT_ZENDEXT}" = "yes" ]] ; then |
284 | if [[ "${PHP_EXT_ZENDEXT}" = "yes" ]] ; then |
| 252 | # We need the full path for ZendEngine extensions |
285 | # We need the full path for ZendEngine extensions |
| 253 | # and we need to check for debugging enabled! |
286 | # and we need to check for debugging enabled! |
| 254 | if has_zts ; then |
287 | if has_version "dev-lang/php:${PHP_CURRENTSLOT}[threads]" ; then |
| 255 | if has_debug ; then |
288 | if has_version "dev-lang/php:${PHP_CURRENTSLOT}[debug]" ; then |
| 256 | ext_type="zend_extension_debug_ts" |
289 | ext_type="zend_extension_debug_ts" |
| 257 | else |
290 | else |
| 258 | ext_type="zend_extension_ts" |
291 | ext_type="zend_extension_ts" |
| 259 | fi |
292 | fi |
| 260 | ext_file="${EXT_DIR}/${1}" |
293 | ext_file="${EXT_DIR}/${1}" |
| 261 | else |
294 | else |
| 262 | if has_debug ; then |
295 | if has_version "dev-lang/php:${PHP_CURRENTSLOT}[debug]"; then |
| 263 | ext_type="zend_extension_debug" |
296 | ext_type="zend_extension_debug" |
| 264 | else |
297 | else |
| 265 | ext_type="zend_extension" |
298 | ext_type="zend_extension" |
| 266 | fi |
299 | fi |
| 267 | ext_file="${EXT_DIR}/${1}" |
300 | ext_file="${EXT_DIR}/${1}" |
| … | |
… | |
| 278 | # We don't need the full path for normal extensions! |
311 | # We don't need the full path for normal extensions! |
| 279 | ext_type="extension" |
312 | ext_type="extension" |
| 280 | ext_file="${1}" |
313 | ext_file="${1}" |
| 281 | fi |
314 | fi |
| 282 | |
315 | |
| 283 | php-ext-source-r2_addtoinifiles "${ext_type}" "${ext_file}" "Extension added" |
316 | php-ext-source-r2_addtoinifile "${ext_type}" "${ext_file}" "${2}" "Extension added" |
| 284 | } |
317 | } |
| 285 | |
318 | |
| 286 | # $1 - Setting name |
319 | # $1 - Setting name |
| 287 | # $2 - Setting value |
320 | # $2 - Setting value |
| 288 | # $3 - File to add to |
321 | # $3 - File to add to |
| 289 | # $4 - Sanitized text to output |
322 | # $4 - Sanitized text to output |
| 290 | php-ext-source-r2_addtoinifile() { |
323 | php-ext-source-r2_addtoinifile() { |
|
|
324 | local inifile="${WORKDIR}/${3}" |
| 291 | if [[ ! -d $(dirname ${3}) ]] ; then |
325 | if [[ ! -d $(dirname ${inifile}) ]] ; then |
| 292 | mkdir -p $(dirname ${3}) |
326 | mkdir -p $(dirname ${inifile}) |
| 293 | fi |
327 | fi |
| 294 | |
328 | |
| 295 | # Are we adding the name of a section? |
329 | # Are we adding the name of a section? |
| 296 | if [[ ${1:0:1} == "[" ]] ; then |
330 | if [[ ${1:0:1} == "[" ]] ; then |
| 297 | echo "${1}" >> "${3}" |
331 | echo "${1}" >> "${inifile}" |
| 298 | my_added="${1}" |
332 | my_added="${1}" |
| 299 | else |
333 | else |
| 300 | echo "${1}=${2}" >> "${3}" |
334 | echo "${1}=${2}" >> "${inifile}" |
| 301 | my_added="${1}=${2}" |
335 | my_added="${1}=${2}" |
| 302 | fi |
336 | fi |
| 303 | |
337 | |
| 304 | if [[ -z "${4}" ]] ; then |
338 | if [[ -z "${4}" ]] ; then |
| 305 | einfo "Added '${my_added}' to /${3}" |
339 | einfo "Added '${my_added}' to /${3}" |
| 306 | else |
340 | else |
| 307 | einfo "${4} to /${3}" |
341 | einfo "${4} to /${3}" |
| 308 | fi |
342 | fi |
| 309 | |
343 | |
| 310 | insinto /$(dirname ${3}) |
344 | insinto /$(dirname ${3}) |
| 311 | doins "${3}" |
345 | doins "${inifile}" |
| 312 | } |
346 | } |
| 313 | |
347 | |
| 314 | # @FUNCTION: php-ext-source-r2_addtoinifiles |
348 | # @FUNCTION: php-ext-source-r2_addtoinifiles |
| 315 | # @USAGE: <setting name> <setting value> [message to output]; or just [section name] |
349 | # @USAGE: <setting name> <setting value> [message to output]; or just [section name] |
| 316 | # @DESCRIPTION: |
350 | # @DESCRIPTION: |
| … | |
… | |
| 330 | # php-ext-source-r2_addtoinifiles "debugger.enabled" "on" |
364 | # php-ext-source-r2_addtoinifiles "debugger.enabled" "on" |
| 331 | # php-ext-source-r2_addtoinifiles "debugger.profiler_enabled" "on" |
365 | # php-ext-source-r2_addtoinifiles "debugger.profiler_enabled" "on" |
| 332 | # @CODE |
366 | # @CODE |
| 333 | php-ext-source-r2_addtoinifiles() { |
367 | php-ext-source-r2_addtoinifiles() { |
| 334 | local x |
368 | local x |
| 335 | for x in ${PHPINIFILELIST} ; do |
369 | for x in ${PHPFULLINIFILELIST} ; do |
| 336 | php-ext-source-r2_addtoinifile "${1}" "${2}" "${x}" "${3}" |
370 | php-ext-source-r2_addtoinifile "${1}" "${2}" "${x}" "${3}" |
| 337 | done |
371 | done |
| 338 | } |
372 | } |