From 6b177f0ee1378fe7cc1a68d3360b946788dbff1d Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Thu, 21 Dec 2017 14:14:23 -0800 Subject: [PATCH 1/4] Added immediate binding and fixed some mac related test output --- source/pdo_sqlsrv/config.m4 | 152 +++++++++--------- source/sqlsrv/config.m4 | 14 +- .../pdo_getAttribute_clientInfo.phpt | 2 +- .../pdo_sqlsrv/pdo_get_set_attr.phpt | 2 +- .../functional/sqlsrv/sqlsrv_client_info.phpt | 2 +- 5 files changed, 90 insertions(+), 82 deletions(-) diff --git a/source/pdo_sqlsrv/config.m4 b/source/pdo_sqlsrv/config.m4 index dd5cd012..46e22960 100644 --- a/source/pdo_sqlsrv/config.m4 +++ b/source/pdo_sqlsrv/config.m4 @@ -1,74 +1,78 @@ -PHP_ARG_WITH(pdo_sqlsrv, for pdo_sqlsrv support, -[ --with-pdo_sqlsrv Include pdo_sqlsrv support]) - -if test "$PHP_PDO_SQLSRV" != "no"; then - if test "$PHP_PDO" = "no" && test "$ext_shared" = "no"; then - AC_MSG_ERROR([PDO is not enabled! Add --enable-pdo to your configure line.]) - fi - - ifdef([PHP_CHECK_PDO_INCLUDES], - [ - PHP_CHECK_PDO_INCLUDES - ],[ - AC_MSG_CHECKING([for PDO includes]) - if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then - pdo_cv_inc_path=$abs_srcdir/ext - elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then - pdo_cv_inc_path=$abs_srcdir/ext - elif test -f $phpincludedir/ext/pdo/php_pdo_driver.h; then - pdo_cv_inc_path=$phpincludedir/ext - else - AC_MSG_ERROR([Cannot find php_pdo_driver.h.]) - fi - AC_MSG_RESULT($pdo_cv_inc_path) - ]) - - pdo_sqlsrv_src_class="\ - pdo_dbh.cpp \ - pdo_parser.cpp \ - pdo_util.cpp \ - pdo_init.cpp \ - pdo_stmt.cpp \ - " - - shared_src_class="\ - shared/core_conn.cpp \ - shared/core_results.cpp \ - shared/core_stream.cpp \ - shared/core_init.cpp \ - shared/core_stmt.cpp \ - shared/core_util.cpp \ - shared/FormattedPrint.cpp \ - shared/localizationimpl.cpp \ - shared/StringFunctions.cpp \ - " - AC_MSG_CHECKING([for PDO_SQLSRV headers]) - if test -f $srcdir/ext/pdo_sqlsrv/shared/core_sqlsrv.h; then - pdo_sqlsrv_inc_path=$srcdir/ext/pdo_sqlsrv/shared/ - elif test -f $srcdir/shared/core_sqlsrv.h; then - pdo_sqlsrv_inc_path=$srcdir/shared/ - else - AC_MSG_ERROR([Cannot find PDO_SQLSRV headers]) - fi - AC_MSG_RESULT($pdo_sqlsrv_inc_path) - - HOST_OS_ARCH=`uname` - if test "${HOST_OS_ARCH}" = "Darwin"; then - MACOSX_DEPLOYMENT_TARGET=`sw_vers -productVersion` - fi - - CXXFLAGS="$CXXFLAGS -std=c++11" - CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=2 -O2" - CXXFLAGS="$CXXFLAGS -fstack-protector" - PHP_REQUIRE_CXX() - PHP_ADD_LIBRARY(stdc++, 1, PDO_SQLSRV_SHARED_LIBADD) - PHP_ADD_LIBRARY(odbc, 1, PDO_SQLSRV_SHARED_LIBADD) - PHP_ADD_LIBRARY(odbcinst, 1, PDO_SQLSRV_SHARED_LIBADD) - AC_DEFINE(HAVE_PDO_SQLSRV, 1, [ ]) - PHP_ADD_INCLUDE([$pdo_sqlsrv_inc_path]) - PHP_NEW_EXTENSION(pdo_sqlsrv, $pdo_sqlsrv_src_class $shared_src_class, $ext_shared,,-I$pdo_cv_inc_path -std=c++11) - PHP_SUBST(PDO_SQLSRV_SHARED_LIBADD) - PHP_ADD_EXTENSION_DEP(pdo_sqlsrv, pdo) - PHP_ADD_BUILD_DIR([$ext_builddir/shared], 1) -fi - +PHP_ARG_WITH(pdo_sqlsrv, for pdo_sqlsrv support, +[ --with-pdo_sqlsrv Include pdo_sqlsrv support]) + +if test "$PHP_PDO_SQLSRV" != "no"; then + if test "$PHP_PDO" = "no" && test "$ext_shared" = "no"; then + AC_MSG_ERROR([PDO is not enabled! Add --enable-pdo to your configure line.]) + fi + + ifdef([PHP_CHECK_PDO_INCLUDES], + [ + PHP_CHECK_PDO_INCLUDES + ],[ + AC_MSG_CHECKING([for PDO includes]) + if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then + pdo_cv_inc_path=$abs_srcdir/ext + elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then + pdo_cv_inc_path=$abs_srcdir/ext + elif test -f $phpincludedir/ext/pdo/php_pdo_driver.h; then + pdo_cv_inc_path=$phpincludedir/ext + else + AC_MSG_ERROR([Cannot find php_pdo_driver.h.]) + fi + AC_MSG_RESULT($pdo_cv_inc_path) + ]) + + pdo_sqlsrv_src_class="\ + pdo_dbh.cpp \ + pdo_parser.cpp \ + pdo_util.cpp \ + pdo_init.cpp \ + pdo_stmt.cpp \ + " + + shared_src_class="\ + shared/core_conn.cpp \ + shared/core_results.cpp \ + shared/core_stream.cpp \ + shared/core_init.cpp \ + shared/core_stmt.cpp \ + shared/core_util.cpp \ + shared/FormattedPrint.cpp \ + shared/localizationimpl.cpp \ + shared/StringFunctions.cpp \ + " + AC_MSG_CHECKING([for PDO_SQLSRV headers]) + if test -f $srcdir/ext/pdo_sqlsrv/shared/core_sqlsrv.h; then + pdo_sqlsrv_inc_path=$srcdir/ext/pdo_sqlsrv/shared/ + elif test -f $srcdir/shared/core_sqlsrv.h; then + pdo_sqlsrv_inc_path=$srcdir/shared/ + else + AC_MSG_ERROR([Cannot find PDO_SQLSRV headers]) + fi + AC_MSG_RESULT($pdo_sqlsrv_inc_path) + + CXXFLAGS="$CXXFLAGS -std=c++11" + CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=2 -O2" + CXXFLAGS="$CXXFLAGS -fstack-protector" + + HOST_OS_ARCH=`uname` + if test "${HOST_OS_ARCH}" = "Darwin"; then + PDO_SQLSRV_SHARED_LIBADD="$PDO_SQLSRV_SHARED_LIBADD -Wl,-bind_at_load" + MACOSX_DEPLOYMENT_TARGET=`sw_vers -productVersion` + else + PDO_SQLSRV_SHARED_LIBADD="$PDO_SQLSRV_SHARED_LIBADD -Wl,-z,now" + fi + + PHP_REQUIRE_CXX() + PHP_ADD_LIBRARY(stdc++, 1, PDO_SQLSRV_SHARED_LIBADD) + PHP_ADD_LIBRARY(odbc, 1, PDO_SQLSRV_SHARED_LIBADD) + PHP_ADD_LIBRARY(odbcinst, 1, PDO_SQLSRV_SHARED_LIBADD) + AC_DEFINE(HAVE_PDO_SQLSRV, 1, [ ]) + PHP_ADD_INCLUDE([$pdo_sqlsrv_inc_path]) + PHP_NEW_EXTENSION(pdo_sqlsrv, $pdo_sqlsrv_src_class $shared_src_class, $ext_shared,,-I$pdo_cv_inc_path -std=c++11) + PHP_SUBST(PDO_SQLSRV_SHARED_LIBADD) + PHP_ADD_EXTENSION_DEP(pdo_sqlsrv, pdo) + PHP_ADD_BUILD_DIR([$ext_builddir/shared], 1) +fi + diff --git a/source/sqlsrv/config.m4 b/source/sqlsrv/config.m4 index 00b815ba..829bc719 100644 --- a/source/sqlsrv/config.m4 +++ b/source/sqlsrv/config.m4 @@ -29,14 +29,18 @@ if test "$PHP_SQLSRV" != "no"; then fi AC_MSG_RESULT($sqlsrv_inc_path) - HOST_OS_ARCH=`uname` - if test "${HOST_OS_ARCH}" = "Darwin"; then - MACOSX_DEPLOYMENT_TARGET=`sw_vers -productVersion` - fi - CXXFLAGS="$CXXFLAGS -std=c++11" CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=2 -O2" CXXFLAGS="$CXXFLAGS -fstack-protector" + + HOST_OS_ARCH=`uname` + if test "${HOST_OS_ARCH}" = "Darwin"; then + PDO_SQLSRV_SHARED_LIBADD="$PDO_SQLSRV_SHARED_LIBADD -Wl,-bind_at_load" + MACOSX_DEPLOYMENT_TARGET=`sw_vers -productVersion` + else + PDO_SQLSRV_SHARED_LIBADD="$PDO_SQLSRV_SHARED_LIBADD -Wl,-z,now" + fi + PHP_REQUIRE_CXX() PHP_ADD_LIBRARY(stdc++, 1, SQLSRV_SHARED_LIBADD) PHP_ADD_LIBRARY(odbc, 1, SQLSRV_SHARED_LIBADD) diff --git a/test/functional/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt b/test/functional/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt index 2bbfc3e6..e490f6f2 100644 --- a/test/functional/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt +++ b/test/functional/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt @@ -20,7 +20,7 @@ try { --EXPECTREGEX-- Array \( - \[(DriverDllName|DriverName)\] => (msodbcsql1[1-9].dll|libmsodbcsql-[1-9]{2}.[0-9].so.[0-9].[0-9]) + \[(DriverDllName|DriverName)\] => (msodbcsql1[1-9].dll|libmsodbcsql-[1-9]{2}.[0-9].so.[0-9].[0-9]|libmsodbcsql.1[1-9].dylib) \[DriverODBCVer\] => [0-9]{1,2}\.[0-9]{1,2} \[DriverVer\] => [0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4} \[ExtensionVer\] => [0-9].[0-9]\.[0-9](-(RC[0-9]?|preview))?(\.[0-9]+)?(\+[0-9]+)? diff --git a/test/functional/pdo_sqlsrv/pdo_get_set_attr.phpt b/test/functional/pdo_sqlsrv/pdo_get_set_attr.phpt index 06c69b01..c8ae5454 100644 --- a/test/functional/pdo_sqlsrv/pdo_get_set_attr.phpt +++ b/test/functional/pdo_sqlsrv/pdo_get_set_attr.phpt @@ -125,7 +125,7 @@ SQLSTATE\[IMSSP\]: A read-only attribute was designated on the PDO object. Get Result PDO::ATTR_CLIENT_VERSION : array\(4\) { \[\"(DriverDllName|DriverName)\"\]=> - string\(15\) \"msodbcsql[0-9]{2}\.dll|string\(24\) \"libmsodbcsql-[0-9]{2}\.[0-9]\.so\.[0-9]\.[0-9]\" + string\(15\) \"msodbcsql[0-9]{2}\.dll|string\(24\) \"libmsodbcsql-[0-9]{2}\.[0-9]\.so\.[0-9]\.[0-9]|string\(21\) \"libmsodbcsql\.1[1-9]\.dylib\" \["DriverODBCVer"\]=> string\(5\) \"[0-9]{1,2}\.[0-9]{1,2}\" \["DriverVer"\]=> diff --git a/test/functional/sqlsrv/sqlsrv_client_info.phpt b/test/functional/sqlsrv/sqlsrv_client_info.phpt index 1b8f7b31..c991e04e 100644 --- a/test/functional/sqlsrv/sqlsrv_client_info.phpt +++ b/test/functional/sqlsrv/sqlsrv_client_info.phpt @@ -15,7 +15,7 @@ var_dump( $client_info ); --EXPECTREGEX-- array\(4\) { \[\"(DriverDllName|DriverName)\"\]=> - (string\(15\) \"msodbcsql1[1-9].dll\"|string\(24\) \"libmsodbcsql-[1-9]{2}.[0-9].so.[0-9].[0-9]\") + (string\(15\) \"msodbcsql1[1-9].dll\"|string\(24\) \"libmsodbcsql-[1-9]{2}.[0-9].so.[0-9].[0-9]|string\(21\) \"libmsodbcsql.1[1-9].dylib\") \[\"DriverODBCVer\"\]=> string\(5\) \"[0-9]{1,2}\.[0-9]{1,2}\" \[\"DriverVer\"\]=> From bb422196935b9425b6ed54cb1cc122c423050e8c Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Thu, 21 Dec 2017 16:51:39 -0800 Subject: [PATCH 2/4] Dockerfile fix for Ubuntu --- Dockerfile-msphpsql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile-msphpsql b/Dockerfile-msphpsql index 18051c16..9a2d89b8 100644 --- a/Dockerfile-msphpsql +++ b/Dockerfile-msphpsql @@ -56,7 +56,7 @@ WORKDIR $PHPSQLDIR/source/ RUN chmod +x ./packagize.sh RUN /bin/bash -c "./packagize.sh" -RUN echo "extension = pdo_sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` +RUN echo "extension = pdo_sqlsrv.so" >> /etc/php/7.0/cli/conf.d/20-pdo_sqlsrv.ini RUN echo "extension = sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` WORKDIR $PHPSQLDIR/source/sqlsrv From b7ce71bd0ff88a7632de28c52cb87cb313ddd9e9 Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Thu, 21 Dec 2017 18:12:23 -0800 Subject: [PATCH 3/4] Regex fix in clientinfo test --- test/functional/sqlsrv/sqlsrv_client_info.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/sqlsrv/sqlsrv_client_info.phpt b/test/functional/sqlsrv/sqlsrv_client_info.phpt index c991e04e..7c80c779 100644 --- a/test/functional/sqlsrv/sqlsrv_client_info.phpt +++ b/test/functional/sqlsrv/sqlsrv_client_info.phpt @@ -15,7 +15,7 @@ var_dump( $client_info ); --EXPECTREGEX-- array\(4\) { \[\"(DriverDllName|DriverName)\"\]=> - (string\(15\) \"msodbcsql1[1-9].dll\"|string\(24\) \"libmsodbcsql-[1-9]{2}.[0-9].so.[0-9].[0-9]|string\(21\) \"libmsodbcsql.1[1-9].dylib\") + (string\(15\) \"msodbcsql1[1-9].dll\"|string\(24\) \"libmsodbcsql-[1-9]{2}.[0-9].so.[0-9].[0-9]\"|string\(21\) \"libmsodbcsql.1[1-9].dylib\") \[\"DriverODBCVer\"\]=> string\(5\) \"[0-9]{1,2}\.[0-9]{1,2}\" \[\"DriverVer\"\]=> From 092e5c4ff746a58213a83e21608f71c892906b81 Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Fri, 5 Jan 2018 17:06:01 -0800 Subject: [PATCH 4/4] Updated README --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b99fb980..36f13a65 100644 --- a/README.md +++ b/README.md @@ -279,9 +279,12 @@ Note that [Microsoft ODBC Driver 17][odbc17] is required for Ubuntu 17 and Debia *Note: You can run `sudo pecl search sqlsrv` to search for the latest releases and `sudo pecl install sqlsrv-[version]` to install a specific version. PECL installs the stable version when version is not specified. Drivers are Mac-compatible starting from `4.1.7preview` release. -On Ubuntu, Debian, and SUSE systems only, run: +On Linux systems, run: - sudo pear config-set php_ini `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` system + sudo su + echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini + echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini + exit On macOS, run: