2 # inter-dependencies checker.
6 dep_spl="pcre simplexml"
7 dep_session="spl $dep_spl"
9 dep_eaccelerator='session'
11 dep_mysql="$dep_mysqlnd $with_mysqlnd"
12 dep_mysqli="$dep_spl spl $dep_mysqlnd $with_mysqlnd"
13 dep_pdo="$dep_spl spl"
14 dep_pdo_sqlite="$dep_pdo pdo"
15 dep_pdo_pgsql="$dep_pdo pdo"
16 dep_pdo_oci="$dep_pdo pdo"
17 dep_pdo_odbc="$dep_pdo pdo"
18 dep_pdo_firebird="$dep_pdo pdo"
19 dep_pdo_dblib="$dep_pdo pdo"
20 dep_pdo_mysql="$dep_pdo pdo $dep_mysqlnd $with_mysqlnd"
21 dep_simplexml="$dep_spl spl"
23 dep_phar="$dep_spl spl hash"
24 dep_sqlite="$dep_pdo pdo"
30 dep_snmp="$dep_spl spl snmp"
33 php=${PHP:-$(php-config --php-binary)}
34 ext_dir=${EXTENSION_DIR:-$(php-config --extension-dir)}
35 conf_dir=${CONFIG_DIR:-$(php-config --sysconfdir)/conf.d $(php-config --sysconfdir)/cli.d}
40 # poldek --sn ac-ready -u php-*
41 for ext in ${*:-$ext_dir/*.so}; do
42 [ -f $ext ] || continue
43 ext=${ext##*/}; ext=${ext%.so}
45 deps=$(eval echo \$dep_$ext)
46 # add ext itself, if already not in list (spl case)
47 [[ $deps = *\ $ext\ * ]] || deps="$deps $ext"
49 echo -n "$ext (deps: ${deps# })..."
51 # special: opcache is listed as "Zend Opcache"
52 [ "$ext" = "opcache" ] && ext="zend opcache"
54 grep -rlE '^(zend_)?extension=('$(echo "${deps# }" | tr ' ' '|')')$' $conf_dir | LC_ALL=C sort | xargs cat > $tmpini
55 $php -n -d extension_dir=$ext_dir -c $tmpini -r "exit(extension_loaded('${ext}') ? 0 : 1);"
61 echo "Failed config was:"
67 _resolve_extension_deps() {
73 # Prints a load order (0-based integer) for the given extension name. Extension
74 # with lower load order should be loaded before exts with higher load order.
75 # It's based on number of dependencies of the extension (with exception for
76 # "imap"), which is flawed, but simple and good enough for now.
78 # _extension_load_order adopted from alpine linux:
79 # https://github.com/alpinelinux/aports/blob/v3.10.1/community/php7/APKBUILD#L639-L653
80 _extension_load_order() {
82 local deps=$(eval "echo \$dep_$name")
85 # XXX: This must be loaded after recode, even though it does
86 # not depend on it. So we must use this hack...
88 *) echo "${deps:=$(_resolve_extension_deps $name)}" | wc -w;;
97 for module in ${*:-$ext_dir/*.so}; do
98 [ -f $module ] || continue
99 extname=${module##*/}; extname=${extname%.so}
102 # opcache.so is zend extension
103 nm $module | grep -q zend_extension_entry && ext=zend_extension
105 load_order=$(_extension_load_order "$extname")
106 cat > conf.d/$(printf %02d $load_order)_$extname.ini <<-EOF
107 ; Enable $extname $ext module
113 if [ -n "$GENERATE_INI" ]; then