]> TLD Linux GIT Repositories - packages/php.git/blob - dep-tests.sh
- sync patches with PLD
[packages/php.git] / dep-tests.sh
1 #!/bin/sh
2 # inter-dependencies checker.
3
4 with_mysqlnd=mysqlnd
5
6 dep_session=""
7 dep_filter=''
8 dep_eaccelerator='session'
9 dep_mysqlnd=''
10 dep_mysql="$dep_mysqlnd $with_mysqlnd"
11 dep_mysqli="$dep_mysqlnd $with_mysqlnd"
12 dep_pdo=""
13 dep_pdo_sqlite="$dep_pdo pdo"
14 dep_pdo_pgsql="$dep_pdo pdo"
15 dep_pdo_oci="$dep_pdo pdo"
16 dep_pdo_odbc="$dep_pdo pdo"
17 dep_pdo_firebird="$dep_pdo pdo"
18 dep_pdo_dblib="$dep_pdo pdo"
19 dep_pdo_mysql="$dep_pdo pdo $dep_mysqlnd $with_mysqlnd"
20 dep_simplexml=""
21 dep_imap=""
22 dep_phar=""
23 dep_sqlite="$dep_pdo pdo"
24 dep_fileinfo=""
25 dep_wddx='xml'
26 dep_xmlreader='dom'
27 dep_xmlrpc='xml'
28 dep_xsl='dom'
29 dep_snmp="snmp"
30 dep_opcache=''
31
32 php=${PHP:-$(php-config --php-binary)}
33 ext_dir=${EXTENSION_DIR:-$(php-config --extension-dir)}
34 conf_dir=${CONFIG_DIR:-$(php-config --sysconfdir)/conf.d $(php-config --sysconfdir)/cli.d}
35
36 test_deps() {
37         tmpini=$(mktemp)
38
39         # poldek --sn ac-ready -u php-*
40         for ext in ${*:-$ext_dir/*.so}; do
41                 [ -f $ext ] || continue
42                 ext=${ext##*/}; ext=${ext%.so}
43
44                 deps=$(eval echo \$dep_$ext)
45                 # add ext itself, if already not in list (spl case)
46                 [[ $deps = *\ $ext\ * ]] || deps="$deps $ext"
47
48                 echo -n "$ext (deps: ${deps# })..."
49
50                 # special: opcache is listed as "Zend Opcache"
51                 [ "$ext" = "opcache" ] && ext="zend opcache"
52
53                 grep -rlE '^(zend_)?extension=('$(echo "${deps# }" | tr ' ' '|')')$' $conf_dir | LC_ALL=C sort | xargs cat > $tmpini
54                 $php -n -d extension_dir=$ext_dir -c $tmpini -r "exit(extension_loaded('${ext}') ? 0 : 1);"
55                 rc=$?
56                 if [ $rc = 0 ]; then
57                         echo OK
58                 else
59                         echo FAIL
60                         echo "Failed config was:"
61                         cat $tmpini
62                 fi
63         done
64 }
65
66 _resolve_extension_deps() {
67         local name="$1"
68
69         eval echo \$dep_$ext
70 }
71
72 # Prints a load order (0-based integer) for the given extension name. Extension
73 # with lower load order should be loaded before exts with higher load order.
74 # It's based on number of dependencies of the extension (with exception for
75 # "imap"), which is flawed, but simple and good enough for now.
76 #
77 # _extension_load_order adopted from alpine linux:
78 # https://github.com/alpinelinux/aports/blob/v3.10.1/community/php7/APKBUILD#L639-L653
79 _extension_load_order() {
80         local name="$1"
81         local deps=$(eval "echo \$dep_$name")
82
83         case "$name" in
84                 # XXX: This must be loaded after recode, even though it does
85                 # not depend on it. So we must use this hack...
86                 imap) echo 1;;
87                 *) echo "${deps:=$(_resolve_extension_deps $name)}" | wc -w;;
88         esac
89 }
90
91 generate_ini() {
92         local load_order
93
94         rm -rf conf.d
95         install -d conf.d
96         for module in ${*:-$ext_dir/*.so}; do
97                 [ -f $module ] || continue
98                 extname=${module##*/}; extname=${extname%.so}
99
100                 ext=extension
101                 # opcache.so is zend extension
102                 nm $module | grep -q zend_extension_entry && ext=zend_extension
103
104                 load_order=$(_extension_load_order "$extname")
105                 cat > conf.d/$(printf %02d $load_order)_$extname.ini <<-EOF
106                         ; Enable $extname $ext module
107                         $ext=$extname
108                 EOF
109         done
110 }
111
112 if [ -n "$GENERATE_INI" ]; then
113         generate_ini "$@"
114 else
115         test_deps "$@"
116 fi