]> granicus.if.org Git - php/commitdiff
Fix issues with phpt and EXTENSION on windows (BUG 75042)
authorJohn Boehr <jbboehr@gmail.com>
Sun, 6 Aug 2017 22:04:36 +0000 (15:04 -0700)
committerAnatol Belski <ab@php.net>
Fri, 18 Aug 2017 15:34:48 +0000 (17:34 +0200)
* Commands are not properly escaped for windows
* Specifying "-n" to check loaded modules causes "Module already loaded"
warning
* Extensions to be loaded need the "php_" prefix on Windows

Bug: https://bugs.php.net/bug.php?id=75042

Add back -n flag to fetch loaded extensions in run-tests.php

Add test for phpt EXTENSIONS directive

Add a second test for bug 75042

Add test to test loading of nonexistent shared module

with the EXTENSIONS phpt block

Pass ini settings when checking loaded extensions

run-tests.php
tests/run-test/bug75042-2.phpt [new file with mode: 0644]
tests/run-test/bug75042-3.phpt [new file with mode: 0644]
tests/run-test/bug75042.phpt [new file with mode: 0644]

index 8cdaa03b20bd5b1721d576935d4b9e3f04ac9b90..a32db44bf83f0fba70752ce3526e74b819f7a3b6 100755 (executable)
@@ -1575,15 +1575,19 @@ TEST $file
 
        // Additional required extensions
        if (array_key_exists('EXTENSIONS', $section_text)) {
-               $ext_dir=`$php -r 'echo ini_get("extension_dir");'`;
+               $ext_params = array();
+               settings2array($ini_overwrites, $ext_params);
+               settings2params($ext_params);
+               $ext_dir=`$php $pass_options $ext_params -d display_errors=0 -r "echo ini_get('extension_dir');"`;
                $extensions = preg_split("/[\n\r]+/", trim($section_text['EXTENSIONS']));
-               $loaded = explode(",", `$php -n -r 'echo implode(",", get_loaded_extensions());'`);
+               $loaded = explode(",", `$php $pass_options $ext_params -d display_errors=0 -r "echo implode(',', get_loaded_extensions());"`);
+               $ext_prefix = substr(PHP_OS, 0, 3) === "WIN" ? "php_" : "";
                foreach ($extensions as $req_ext) {
                        if (!in_array($req_ext, $loaded)) {
                                if ($req_ext == 'opcache') {
-                                       $ini_settings['zend_extension'][] = $ext_dir . DIRECTORY_SEPARATOR . $req_ext . '.' . PHP_SHLIB_SUFFIX;
+                                       $ini_settings['zend_extension'][] = $ext_dir . DIRECTORY_SEPARATOR . $ext_prefix . $req_ext . '.' . PHP_SHLIB_SUFFIX;
                                } else {
-                                       $ini_settings['extension'][] = $ext_dir . DIRECTORY_SEPARATOR . $req_ext . '.' . PHP_SHLIB_SUFFIX;
+                                       $ini_settings['extension'][] = $ext_dir . DIRECTORY_SEPARATOR . $ext_prefix . $req_ext . '.' . PHP_SHLIB_SUFFIX;
                                }
                        }
                }
diff --git a/tests/run-test/bug75042-2.phpt b/tests/run-test/bug75042-2.phpt
new file mode 100644 (file)
index 0000000..c79eb44
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+phpt EXTENSIONS directive with static module
+--SKIPIF--
+<?php
+if(empty($_ENV['TEST_PHP_EXECUTABLE'])) {
+       die('skip TEST_PHP_EXECUTABLE not set');
+}
+$php = $_ENV['TEST_PHP_EXECUTABLE'];
+if (false === stripos(`$php -n -m`, 'spl')) {
+       die('skip spl is NOT built static');
+}
+--EXTENSIONS--
+SPL
+--FILE--
+<?php
+var_dump(extension_loaded('spl'));
+--EXPECT--
+bool(true)
\ No newline at end of file
diff --git a/tests/run-test/bug75042-3.phpt b/tests/run-test/bug75042-3.phpt
new file mode 100644 (file)
index 0000000..76ec2b5
--- /dev/null
@@ -0,0 +1,8 @@
+--TEST--
+phpt EXTENSIONS directive with nonexistent shared module
+--EXTENSIONS--
+nonexistentsharedmodule
+--FILE--
+<?php
+--EXPECTF--
+PHP Warning:  PHP Startup: Unable to load dynamic library '%snonexistentsharedmodule.%s' %A
\ No newline at end of file
diff --git a/tests/run-test/bug75042.phpt b/tests/run-test/bug75042.phpt
new file mode 100644 (file)
index 0000000..10a0f45
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+phpt EXTENSIONS directive with shared module
+--SKIPIF--
+<?php
+if(empty($_ENV['TEST_PHP_EXECUTABLE'])) {
+       die('skip TEST_PHP_EXECUTABLE not set');
+}
+$php = $_ENV['TEST_PHP_EXECUTABLE'];
+if (false !== stripos(`$php -n -m`, 'openssl')) {
+       die('skip openssl is built static');
+}
+$ext_module = ini_get('extension_dir') . DIRECTORY_SEPARATOR . (substr(PHP_OS, 0, 3) === "WIN" ? "php_openssl." : "openssl.") . PHP_SHLIB_SUFFIX;
+if( !file_exists($ext_module) ) die('skip openssl shared extension not found');
+--EXTENSIONS--
+openssl
+--FILE--
+<?php
+var_dump(extension_loaded('openssl'));
+--EXPECT--
+bool(true)
\ No newline at end of file