1216Sigor@sysoev.ru 2216Sigor@sysoev.ru# Copyright (C) Max Romanov 3216Sigor@sysoev.ru# Copyright (C) Igor Sysoev 4216Sigor@sysoev.ru# Copyright (C) NGINX, Inc. 5216Sigor@sysoev.ru 6216Sigor@sysoev.ru 7216Sigor@sysoev.rushift 8216Sigor@sysoev.ru 9216Sigor@sysoev.rufor nxt_option; do 10216Sigor@sysoev.ru 11216Sigor@sysoev.ru case "$nxt_option" in 12235Sigor@sysoev.ru -*=*) value=`echo "$nxt_option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;; 13216Sigor@sysoev.ru *) value="" ;; 14216Sigor@sysoev.ru esac 15216Sigor@sysoev.ru 16216Sigor@sysoev.ru case "$nxt_option" in 17216Sigor@sysoev.ru --config=*) NXT_PHP_CONFIG="$value" ;; 18216Sigor@sysoev.ru --module=*) NXT_PHP_MODULE="$value" ;; 19216Sigor@sysoev.ru --lib-path=*) NXT_PHP_LIB_PATH="$value" ;; 20466Sigor@sysoev.ru --lib-static) NXT_PHP_LIB_STATIC=yes ;; 21216Sigor@sysoev.ru 22216Sigor@sysoev.ru --help) 23216Sigor@sysoev.ru cat << END 24216Sigor@sysoev.ru 25235Sigor@sysoev.ru --config=FILE set php-config filename 26235Sigor@sysoev.ru --module=NAME set unit php module name 27235Sigor@sysoev.ru --lib-path=DIRECTORY set directory path to libphp.so library 28466Sigor@sysoev.ru --lib-static enable linking with static libphp.a library 29216Sigor@sysoev.ru 30216Sigor@sysoev.ruEND 31216Sigor@sysoev.ru exit 0 32216Sigor@sysoev.ru ;; 33216Sigor@sysoev.ru 34216Sigor@sysoev.ru *) 35235Sigor@sysoev.ru echo 36235Sigor@sysoev.ru echo $0: error: invalid PHP option \"$nxt_option\" 37235Sigor@sysoev.ru echo 38216Sigor@sysoev.ru exit 1 39216Sigor@sysoev.ru ;; 40216Sigor@sysoev.ru 41216Sigor@sysoev.ru esac 42216Sigor@sysoev.ru 43235Sigor@sysoev.rudone 44216Sigor@sysoev.ru 45235Sigor@sysoev.ru 46235Sigor@sysoev.ruif [ ! -f $NXT_AUTOCONF_DATA ]; then 47235Sigor@sysoev.ru echo 48235Sigor@sysoev.ru echo Please run common $0 before configuring module \"$nxt_module\". 49235Sigor@sysoev.ru echo 50235Sigor@sysoev.ru exit 1 51235Sigor@sysoev.rufi 52235Sigor@sysoev.ru 53235Sigor@sysoev.ru. $NXT_AUTOCONF_DATA 54216Sigor@sysoev.ru 55216Sigor@sysoev.ru 56216Sigor@sysoev.ruNXT_PHP_CONFIG=${NXT_PHP_CONFIG=php-config} 57216Sigor@sysoev.ruNXT_PHP=${NXT_PHP_CONFIG%-config*} 58216Sigor@sysoev.ruNXT_PHP_MODULE=${NXT_PHP_MODULE=${NXT_PHP##*/}} 59216Sigor@sysoev.ruNXT_PHP_LIB_PATH=${NXT_PHP_LIB_PATH=} 60466Sigor@sysoev.ruNXT_PHP_LIB_STATIC=${NXT_PHP_LIB_STATIC=no} 611376St.nateldemoura@f5.comNXT_PHP_ADDITIONAL_FLAGS= 62*1583St.nateldemoura@f5.comNXT_PHP_REALPATH=realpath 63*1583St.nateldemoura@f5.com 64*1583St.nateldemoura@f5.com 65*1583St.nateldemoura@f5.comif [ -z `which $NXT_PHP_REALPATH` ]; then 66*1583St.nateldemoura@f5.com NXT_PHP_REALPATH="readlink -e" 67*1583St.nateldemoura@f5.comfi 68216Sigor@sysoev.ru 69216Sigor@sysoev.ru 70216Sigor@sysoev.ru$echo "configuring PHP module" 71216Sigor@sysoev.ru$echo "configuring PHP module ..." >> $NXT_AUTOCONF_ERR 72216Sigor@sysoev.ru 73216Sigor@sysoev.ru$echo -n "checking for PHP ..." 74216Sigor@sysoev.ru$echo "checking for PHP ..." >> $NXT_AUTOCONF_ERR 75216Sigor@sysoev.ru 76216Sigor@sysoev.ruNXT_PHP_LDFLAGS= 77216Sigor@sysoev.ru 78277Sigor@sysoev.ruif /bin/sh -c "${NXT_PHP_CONFIG} --version" >> $NXT_AUTOCONF_ERR 2>&1; then 79216Sigor@sysoev.ru 80216Sigor@sysoev.ru $echo " found" 81216Sigor@sysoev.ru 82216Sigor@sysoev.ru NXT_PHP_VERSION="`${NXT_PHP_CONFIG} --version`" 83*1583St.nateldemoura@f5.com NXT_PHP_EXT_DIR="`${NXT_PHP_CONFIG} --extension-dir`" 84*1583St.nateldemoura@f5.com NXT_PHP_LIBC_DIR="`${CC} --print-file-name=libc.so`" 85*1583St.nateldemoura@f5.com NXT_PHP_LIBC_DIR="`$NXT_PHP_REALPATH $NXT_PHP_LIBC_DIR`" 86*1583St.nateldemoura@f5.com NXT_PHP_LIBC_DIR="`dirname $NXT_PHP_LIBC_DIR`" 87*1583St.nateldemoura@f5.com NXT_PHP_SYSLIB_DIR="`${CC} --print-file-name=libtinfo.so`" 88*1583St.nateldemoura@f5.com NXT_PHP_SYSLIB_DIR="`$NXT_PHP_REALPATH $NXT_PHP_SYSLIB_DIR`" 89*1583St.nateldemoura@f5.com NXT_PHP_SYSLIB_DIR="`dirname $NXT_PHP_SYSLIB_DIR`" 90*1583St.nateldemoura@f5.com 91216Sigor@sysoev.ru $echo " + PHP SAPI: [`${NXT_PHP_CONFIG} --php-sapis`]" 92216Sigor@sysoev.ru 931376St.nateldemoura@f5.com NXT_PHP_MAJOR_VERSION=${NXT_PHP_VERSION%%.*} 941531St.nateldemoura@f5.com NXT_PHP_MINOR_VERSION=${NXT_PHP_VERSION#*.} 951531St.nateldemoura@f5.com NXT_PHP_MINOR_VERSION=${NXT_PHP_MINOR_VERSION%%.*} 961376St.nateldemoura@f5.com 971376St.nateldemoura@f5.com if [ $NXT_PHP_MAJOR_VERSION = 5 -a $NXT_PHP_MINOR_VERSION -lt 4 ]; then 981376St.nateldemoura@f5.com NXT_PHP_ADDITIONAL_FLAGS=-Wno-write-strings 991376St.nateldemoura@f5.com fi 1001376St.nateldemoura@f5.com 101216Sigor@sysoev.ru NXT_PHP_INCLUDE="`${NXT_PHP_CONFIG} --includes`" 102216Sigor@sysoev.ru 103466Sigor@sysoev.ru if [ $NXT_PHP_LIB_STATIC = yes ]; then 104468Sigor@sysoev.ru 105468Sigor@sysoev.ru if [ "$NXT_PHP_LIB_PATH" = "" ]; then 106468Sigor@sysoev.ru $echo 107468Sigor@sysoev.ru $echo $0: error: --lib-static option requires --lib-path option. 108468Sigor@sysoev.ru $echo 109468Sigor@sysoev.ru exit 1; 110468Sigor@sysoev.ru fi 111466Sigor@sysoev.ru 112468Sigor@sysoev.ru NXT_PHP_LIB="$NXT_PHP_LIB_PATH/libphp${NXT_PHP_VERSION%%.*}.a" 113682Sigor@sysoev.ru NXT_PHP_LDFLAGS="`${NXT_PHP_CONFIG} --ldflags` \ 114682Sigor@sysoev.ru `${NXT_PHP_CONFIG} --libs`" 115468Sigor@sysoev.ru 116468Sigor@sysoev.ru else 1171482Sremi@remirepo.net if [ $NXT_PHP_MAJOR_VERSION -ge 8 ]; then 1181482Sremi@remirepo.net NXT_PHP_LIB="-lphp" 1191482Sremi@remirepo.net else 1201482Sremi@remirepo.net NXT_PHP_LIB="-lphp${NXT_PHP_VERSION%%.*}" 1211482Sremi@remirepo.net fi 122468Sigor@sysoev.ru 123468Sigor@sysoev.ru if [ "$NXT_PHP_LIB_PATH" != "" ]; then 124682Sigor@sysoev.ru # "php-config --ldflags" does not contain path to libphp, but 125682Sigor@sysoev.ru # contains usually path to libraries required by extensions. 126468Sigor@sysoev.ru NXT_PHP_LDFLAGS="-L${NXT_PHP_LIB_PATH} \ 127468Sigor@sysoev.ru -Wl,-rpath ${NXT_PHP_LIB_PATH}" 128468Sigor@sysoev.ru fi 129216Sigor@sysoev.ru fi 130216Sigor@sysoev.ru 131216Sigor@sysoev.ruelse 132216Sigor@sysoev.ru $echo 133216Sigor@sysoev.ru $echo $0: error: no PHP found. 134216Sigor@sysoev.ru $echo 135216Sigor@sysoev.ru exit 1; 136216Sigor@sysoev.rufi 137216Sigor@sysoev.ru 138612Salexander.borisov@nginx.com 139612Salexander.borisov@nginx.comnxt_feature="PHP version" 140612Salexander.borisov@nginx.comnxt_feature_name="" 141612Salexander.borisov@nginx.comnxt_feature_run=value 142612Salexander.borisov@nginx.comnxt_feature_incs="${NXT_PHP_INCLUDE}" 143612Salexander.borisov@nginx.comnxt_feature_libs="${NXT_PHP_LIB} ${NXT_PHP_LDFLAGS}" 144612Salexander.borisov@nginx.comnxt_feature_test=" 145612Salexander.borisov@nginx.com #include <php.h> 146612Salexander.borisov@nginx.com 147612Salexander.borisov@nginx.com int main() { 148612Salexander.borisov@nginx.com printf(\"%s\", PHP_VERSION); 149612Salexander.borisov@nginx.com return 0; 150612Salexander.borisov@nginx.com }" 151612Salexander.borisov@nginx.com 152612Salexander.borisov@nginx.com. auto/feature 153612Salexander.borisov@nginx.com 154612Salexander.borisov@nginx.com 1551382Svbart@nginx.comnxt_feature="PHP embed SAPI" 1561382Svbart@nginx.comnxt_feature_name="" 1571382Svbart@nginx.comnxt_feature_run=no 1581382Svbart@nginx.comnxt_feature_incs="${NXT_PHP_INCLUDE}" 1591382Svbart@nginx.comnxt_feature_libs="${NXT_PHP_LIB} ${NXT_PHP_LDFLAGS}" 1601382Svbart@nginx.comnxt_feature_test=" 1611382Svbart@nginx.com #include <php.h> 1621382Svbart@nginx.com #include <php_main.h> 1631382Svbart@nginx.com 1641382Svbart@nginx.com int main() { 1651382Svbart@nginx.com php_module_startup(NULL, NULL, 0); 1661382Svbart@nginx.com return 0; 1671382Svbart@nginx.com }" 1681382Svbart@nginx.com 1691382Svbart@nginx.com. auto/feature 1701382Svbart@nginx.com 1711382Svbart@nginx.comif [ $nxt_found = no ]; then 1721382Svbart@nginx.com $echo 1731382Svbart@nginx.com $echo $0: error: no PHP embed SAPI found. 1741382Svbart@nginx.com $echo 1751382Svbart@nginx.com exit 1; 1761382Svbart@nginx.comfi 1771382Svbart@nginx.com 1781382Svbart@nginx.com 1791383Svbart@nginx.comnxt_feature="PHP Zend Thread Safety" 1801383Svbart@nginx.comnxt_feature_name="" 1811383Svbart@nginx.comnxt_feature_run=no 1821383Svbart@nginx.comnxt_feature_incs="${NXT_PHP_INCLUDE}" 1831383Svbart@nginx.comnxt_feature_libs="${NXT_PHP_LIB} ${NXT_PHP_LDFLAGS}" 1841383Svbart@nginx.comnxt_feature_test=" 1851383Svbart@nginx.com #include <php.h> 1861383Svbart@nginx.com #include <php_main.h> 1871383Svbart@nginx.com 1881383Svbart@nginx.com int main() { 1891383Svbart@nginx.com #ifndef ZTS 1901383Svbart@nginx.com #error ZTS is not defined. 1911383Svbart@nginx.com #endif 1921383Svbart@nginx.com return 0; 1931383Svbart@nginx.com }" 1941383Svbart@nginx.com 1951383Svbart@nginx.com. auto/feature 1961383Svbart@nginx.com 1971383Svbart@nginx.com 1981382Svbart@nginx.com# Bug #71041 (https://bugs.php.net/bug.php?id=71041). 1991382Svbart@nginx.com 2001382Svbart@nginx.comnxt_feature="PHP zend_signal_startup()" 2011382Svbart@nginx.comnxt_feature_name="" 2021382Svbart@nginx.comnxt_feature_run=no 2031382Svbart@nginx.comnxt_feature_incs="${NXT_PHP_INCLUDE}" 2041382Svbart@nginx.comnxt_feature_libs="${NXT_PHP_LIB} ${NXT_PHP_LDFLAGS}" 2051382Svbart@nginx.comnxt_feature_test=" 2061382Svbart@nginx.com #include <php.h> 2071382Svbart@nginx.com #include <php_main.h> 2081382Svbart@nginx.com 2091382Svbart@nginx.com int main() { 2101382Svbart@nginx.com zend_signal_startup(); 2111382Svbart@nginx.com return 0; 2121382Svbart@nginx.com }" 2131382Svbart@nginx.com 2141382Svbart@nginx.com. auto/feature 2151382Svbart@nginx.com 2161382Svbart@nginx.comif [ $nxt_found = yes ]; then 2171382Svbart@nginx.com NXT_ZEND_SIGNAL_STARTUP=1 2181382Svbart@nginx.comelse 2191382Svbart@nginx.com NXT_ZEND_SIGNAL_STARTUP=0 2201382Svbart@nginx.comfi 2211382Svbart@nginx.com 2221382Svbart@nginx.com 223216Sigor@sysoev.ruif grep ^$NXT_PHP_MODULE: $NXT_MAKEFILE 2>&1 > /dev/null; then 224216Sigor@sysoev.ru $echo 225216Sigor@sysoev.ru $echo $0: error: duplicate \"$NXT_PHP_MODULE\" module configured. 226216Sigor@sysoev.ru $echo 227216Sigor@sysoev.ru exit 1; 228216Sigor@sysoev.rufi 229216Sigor@sysoev.ru 230*1583St.nateldemoura@f5.com 231*1583St.nateldemoura@f5.comNXT_PHP_MOUNTS_HEADER=nxt_${NXT_PHP_MODULE}_mounts.h 232*1583St.nateldemoura@f5.com 233*1583St.nateldemoura@f5.comcat << END > $NXT_BUILD_DIR/$NXT_PHP_MOUNTS_HEADER 234*1583St.nateldemoura@f5.comstatic const nxt_fs_mount_t nxt_php_mounts[] = { 235*1583St.nateldemoura@f5.com {(u_char *) "$NXT_PHP_EXT_DIR", (u_char *) "$NXT_PHP_EXT_DIR", 236*1583St.nateldemoura@f5.com (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 237*1583St.nateldemoura@f5.com {(u_char *) "$NXT_PHP_LIBC_DIR", (u_char *) "$NXT_PHP_LIBC_DIR", 238*1583St.nateldemoura@f5.com (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 239*1583St.nateldemoura@f5.com {(u_char *) "$NXT_PHP_SYSLIB_DIR", (u_char *) "$NXT_PHP_SYSLIB_DIR", 240*1583St.nateldemoura@f5.com (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 241*1583St.nateldemoura@f5.com}; 242*1583St.nateldemoura@f5.com 243*1583St.nateldemoura@f5.comEND 244*1583St.nateldemoura@f5.com 245*1583St.nateldemoura@f5.com 246260Sigor@sysoev.ru$echo " + PHP module: ${NXT_PHP_MODULE}.unit.so" 247216Sigor@sysoev.ru 248396Smax.romanov@nginx.com. auto/cc/deps 249216Sigor@sysoev.ru 250216Sigor@sysoev.ru$echo >> $NXT_MAKEFILE 251216Sigor@sysoev.ru 252216Sigor@sysoev.ruNXT_PHP_MODULE_SRCS=" \ 253216Sigor@sysoev.ru src/nxt_php_sapi.c \ 254216Sigor@sysoev.ru" 255216Sigor@sysoev.ru 256216Sigor@sysoev.ru# The php module object files. 257216Sigor@sysoev.ru 258743Smax.romanov@nginx.comnxt_objs=$NXT_BUILD_DIR/src/nxt_unit.o 259216Sigor@sysoev.ru 260216Sigor@sysoev.rufor nxt_src in $NXT_PHP_MODULE_SRCS; do 261216Sigor@sysoev.ru 262396Smax.romanov@nginx.com nxt_obj=${nxt_src%.c}-$NXT_PHP_MODULE.o 263396Smax.romanov@nginx.com nxt_dep=${nxt_src%.c}-$NXT_PHP_MODULE.dep 264396Smax.romanov@nginx.com nxt_dep_flags=`nxt_gen_dep_flags` 265396Smax.romanov@nginx.com nxt_dep_post=`nxt_gen_dep_post` 266216Sigor@sysoev.ru nxt_objs="$nxt_objs $NXT_BUILD_DIR/$nxt_obj" 267216Sigor@sysoev.ru 268216Sigor@sysoev.ru cat << END >> $NXT_MAKEFILE 269216Sigor@sysoev.ru 2701217Smax.romanov@nginx.com$NXT_BUILD_DIR/$nxt_obj: $nxt_src $NXT_VERSION_H 271*1583St.nateldemoura@f5.com \$(CC) -c \$(CFLAGS) -DNXT_PHP_MOUNTS_H=\"$NXT_PHP_MOUNTS_HEADER\" \\ 272*1583St.nateldemoura@f5.com $NXT_PHP_ADDITIONAL_FLAGS \$(NXT_INCS) \\ 2731376St.nateldemoura@f5.com $NXT_PHP_INCLUDE -DNXT_ZEND_SIGNAL_STARTUP=$NXT_ZEND_SIGNAL_STARTUP \\ 274396Smax.romanov@nginx.com $nxt_dep_flags \\ 275216Sigor@sysoev.ru -o $NXT_BUILD_DIR/$nxt_obj $nxt_src 276396Smax.romanov@nginx.com $nxt_dep_post 277681Smax.romanov@nginx.com 278681Smax.romanov@nginx.com-include $NXT_BUILD_DIR/$nxt_dep 279681Smax.romanov@nginx.com 280216Sigor@sysoev.ruEND 281216Sigor@sysoev.ru 282216Sigor@sysoev.rudone 283216Sigor@sysoev.ru 284858Svbart@nginx.com 285216Sigor@sysoev.rucat << END >> $NXT_MAKEFILE 286216Sigor@sysoev.ru 287265Smax.romanov@nginx.com.PHONY: ${NXT_PHP_MODULE} 288265Smax.romanov@nginx.com.PHONY: ${NXT_PHP_MODULE}-install 289265Smax.romanov@nginx.com.PHONY: ${NXT_PHP_MODULE}-uninstall 290216Sigor@sysoev.ru 291241Smax.romanov@nginx.comall: ${NXT_PHP_MODULE} 292241Smax.romanov@nginx.com 293260Sigor@sysoev.ru${NXT_PHP_MODULE}: $NXT_BUILD_DIR/${NXT_PHP_MODULE}.unit.so 294216Sigor@sysoev.ru 295260Sigor@sysoev.ru$NXT_BUILD_DIR/${NXT_PHP_MODULE}.unit.so: $nxt_objs 296395Smax.romanov@nginx.com \$(NXT_MODULE_LINK) -o $NXT_BUILD_DIR/${NXT_PHP_MODULE}.unit.so \\ 297395Smax.romanov@nginx.com $nxt_objs ${NXT_PHP_LIB} ${NXT_PHP_LDFLAGS} $NXT_LD_OPT 298216Sigor@sysoev.ru 299265Smax.romanov@nginx.com 300265Smax.romanov@nginx.cominstall: ${NXT_PHP_MODULE}-install 301265Smax.romanov@nginx.com 302706Sigor@sysoev.ru${NXT_PHP_MODULE}-install: ${NXT_PHP_MODULE} install-check 303265Smax.romanov@nginx.com install -d \$(DESTDIR)$NXT_MODULES 304265Smax.romanov@nginx.com install -p $NXT_BUILD_DIR/${NXT_PHP_MODULE}.unit.so \\ 305265Smax.romanov@nginx.com \$(DESTDIR)$NXT_MODULES/ 306265Smax.romanov@nginx.com 307265Smax.romanov@nginx.com 308265Smax.romanov@nginx.comuninstall: ${NXT_PHP_MODULE}-uninstall 309265Smax.romanov@nginx.com 310265Smax.romanov@nginx.com${NXT_PHP_MODULE}-uninstall: 311265Smax.romanov@nginx.com rm -f \$(DESTDIR)$NXT_MODULES/${NXT_PHP_MODULE}.unit.so 312265Smax.romanov@nginx.com @rmdir -p \$(DESTDIR)$NXT_MODULES 2>/dev/null || true 313265Smax.romanov@nginx.com 314216Sigor@sysoev.ruEND 315