Skip to content

Commit bfe1bbf

Browse files
Merge pull request he4rt#101 from he4rt/fix/undefined-php-stat-symbol
Fixing issue with undefined symbol 'php_stat' -> External C Linking E…
2 parents 3cc13a1 + df71b38 commit bfe1bbf

File tree

4 files changed

+94
-58
lines changed

4 files changed

+94
-58
lines changed

Diff for: CMakeLists.txt

+64-39
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,37 @@
11
cmake_minimum_required(VERSION 3.24)
2+
3+
if (POLICY CMP0074)
4+
cmake_policy(SET CMP0074 NEW)
5+
endif ()
6+
7+
if (POLICY CMP0054)
8+
cmake_policy(SET CMP0054 NEW)
9+
endif ()
10+
11+
if (POLICY CMP0079)
12+
cmake_policy(SET CMP0079 NEW)
13+
endif ()
14+
15+
if (POLICY CMP0108)
16+
cmake_policy(SET CMP0108 NEW)
17+
endif ()
18+
19+
if (POLICY CMP0109)
20+
cmake_policy(SET CMP0109 NEW)
21+
endif ()
22+
23+
if (POLICY CMP0128)
24+
cmake_policy(SET CMP0128 NEW)
25+
endif ()
26+
27+
228
project(php-ext-scylladb LANGUAGES C CXX)
329
add_library(ext_scylladb SHARED)
4-
cmake_policy(SET CMP0079 NEW)
530

631
# if build type is not set, default to debug
7-
if(NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
32+
if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
833
set(CMAKE_BUILD_TYPE "Debug")
9-
endif()
34+
endif ()
1035

1136
include(GNUInstallDirs)
1237
include(CheckSymbolExists)
@@ -18,13 +43,13 @@ include(cmake/ScyllaDBPHPLibrary.cmake)
1843

1944
set(PHP_SCYLLADB_VERSION_MAJOR 1)
2045
set(PHP_SCYLLADB_VERSION_MINOR 3)
21-
set(PHP_SCYLLADB_VERSION_PATCH 11)
46+
set(PHP_SCYLLADB_VERSION_PATCH 12)
2247
set(PHP_SCYLLADB_STABILITY "devel")
2348
set(PHP_SCYLLADB_VERSION_FULL "${PHP_SCYLLADB_VERSION_MAJOR}.${PHP_SCYLLADB_VERSION_MINOR}.${PHP_SCYLLADB_VERSION_PATCH}-${PHP_SCYLLADB_STABILITY}")
2449
set(PHP_SCYLLADB_VERSION "${PHP_SCYLLADB_VERSION_MAJOR}.${PHP_SCYLLADB_VERSION_MINOR}.${PHP_SCYLLADB_VERSION_PATCH}-dev")
2550

26-
set(CMAKE_C_STANDARD 23)
27-
set(CMAKE_CXX_STANDARD 23)
51+
set(CMAKE_C_STANDARD 17)
52+
set(CMAKE_CXX_STANDARD 20)
2853

2954
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake" "${PROJECT_SOURCE_DIR}/third-party/sanitizers-cmake/cmake")
3055

@@ -40,39 +65,39 @@ set(PHP_VERSION_FOR_PHP_CONFIG "8.3" CACHE STRING "PHP version")
4065
option(PHP_DEBUG_FOR_PHP_CONFIG "Debug or Release" ON)
4166
option(PHP_THREAD_SAFE_FOR_PHP_CONFIG "ZTS(zts) or NTS(nts)" OFF)
4267

43-
if(CMAKE_HOST_APPLE)
68+
if (CMAKE_HOST_APPLE)
4469
option(PHP_SCYLLADB_LIBUV_STATIC "Statically link libuv" ON)
45-
else()
70+
else ()
4671
option(PHP_SCYLLADB_LIBUV_STATIC "Statically link libuv" OFF)
47-
endif()
72+
endif ()
4873

4974
option(PHP_SCYLLADB_LIBUV_FROM_SRC "Build LibUV from Source" ON)
5075

51-
if(CMAKE_HOST_APPLE)
76+
if (CMAKE_HOST_APPLE)
5277
option(PHP_SCYLLADB_LIBSCYLLADB_STATIC "Statically link LibScyllaDB" ON)
53-
else()
78+
else ()
5479
option(PHP_SCYLLADB_LIBSCYLLADB_STATIC "Statically link LibScyllaDB" OFF)
55-
endif()
80+
endif ()
5681

5782
option(PHP_SCYLLADB_USE_LIBCASSANDRA "Use DataStax LibCassandra instead of LibScyllaDB" OFF)
5883

59-
if(CMAKE_HOST_APPLE)
84+
if (CMAKE_HOST_APPLE)
6085
option(PHP_SCYLLADB_LIBCASSANDRA_STATIC "Statically link LibCassandra" ON)
61-
else()
86+
else ()
6287
option(PHP_SCYLLADB_LIBCASSANDRA_STATIC "Statically link LibCassandra" OFF)
63-
endif()
88+
endif ()
6489

6590
find_package(PHPConfig REQUIRED)
6691
find_package(PHP REQUIRED)
6792
find_package(Sanitizers REQUIRED)
6893
find_package(Libuv REQUIRED)
6994
find_package(LibGMP REQUIRED)
7095

71-
if(PHP_SCYLLADB_USE_LIBCASSANDRA)
96+
if (PHP_SCYLLADB_USE_LIBCASSANDRA)
7297
find_package(CassandraDriver REQUIRED)
73-
else()
98+
else ()
7499
find_package(ScyllaDBDriver REQUIRED)
75-
endif()
100+
endif ()
76101

77102
add_subdirectory(ZendCPP)
78103
add_subdirectory(util)
@@ -95,19 +120,19 @@ target_sources(ext_scylladb PUBLIC FILE_SET headers TYPE HEADERS FILES "${HEADER
95120
target_sources(ext_scylladb PRIVATE php_driver.cpp)
96121

97122
target_link_libraries(
98-
ext_scylladb PRIVATE
99-
Zend
100-
ext_scylladb::src
101-
ext_scylladb::utils
102-
ext_scylladb::type
103-
ext_scylladb::datetime
104-
ext_scylladb::database
105-
ext_scylladb::numbers
106-
ext_scylladb::ssl_options
107-
ext_scylladb::exceptions
108-
ext_scylladb::cluster::builder
109-
ext_scylladb::retry_policy
110-
ext_scylladb::timestamp_generator
123+
ext_scylladb PRIVATE
124+
Zend
125+
ext_scylladb::src
126+
ext_scylladb::utils
127+
ext_scylladb::type
128+
ext_scylladb::datetime
129+
ext_scylladb::database
130+
ext_scylladb::numbers
131+
ext_scylladb::ssl_options
132+
ext_scylladb::exceptions
133+
ext_scylladb::cluster::builder
134+
ext_scylladb::retry_policy
135+
ext_scylladb::timestamp_generator
111136
)
112137

113138
check_include_file("dlfcn.h" HAVE_DLFCN_H)
@@ -123,17 +148,17 @@ check_include_file("unistd.h" HAVE_UNISTD_H)
123148
set(HAVE_STRINGS_H 0)
124149

125150
configure_file(
126-
config.in
127-
config.h
128-
USE_SOURCE_PERMISSIONS
129-
NEWLINE_STYLE UNIX
151+
config.in
152+
config.h
153+
USE_SOURCE_PERMISSIONS
154+
NEWLINE_STYLE UNIX
130155
)
131156

132157
configure_file(
133-
version.h.in
134-
version.h
135-
USE_SOURCE_PERMISSIONS
136-
NEWLINE_STYLE UNIX
158+
version.h.in
159+
version.h
160+
USE_SOURCE_PERMISSIONS
161+
NEWLINE_STYLE UNIX
137162
)
138163

139164
target_compile_definitions(ext_scylladb PRIVATE -DCOMPILE_DL_CASSANDRA -DHAVE_CONFIG_H)

Diff for: scripts/compile-scylladb.sh

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
git clone --depth 1 https://github.com/scylladb/cpp-driver.git scyladb-driver
2+
3+
pushd scyladb-driver
4+
5+
mkdir build
6+
7+
pushd build
8+
9+
cmake -DCASS_CPP_STANDARD=17 -DCASS_BUILD_STATIC=ON -DCASS_BUILD_SHARED=ON -DCASS_USE_STD_ATOMIC=ON -DCASS_USE_TIMERFD=ON -DCASS_USE_LIBSSH2=ON -DCASS_USE_ZLIB=ON CMAKE_C_FLAGS="-fPIC" -DCMAKE_CXX_FLAGS="-fPIC -Wno-error=redundant-move" -DCMAKE_BUILD_TYPE="RelWithInfo" -G Ninja ..
10+
11+
ninja install
12+
13+
popd
14+
popd

Diff for: scripts/scyladb-driver

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit fa0f27069a625057984d1fa58f434ea99b86c83f

Diff for: src/SSLOptions/Builder.cpp

+15-19
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,37 @@
1515
*/
1616

1717
#include <SSLOptions/SSLOptions.h>
18-
#include <expected>
1918
#include <utility>
2019

2120
#include <php_driver.h>
2221
#include <php.h>
2322
#include <php_driver_types.h>
2423

2524

26-
static std::expected<zend_string *, zend_result> file_get_contents(const zend_string *path) {
25+
BEGIN_EXTERN_C()
26+
#include <ext/standard/php_filestat.h>
27+
28+
static zend_result file_get_contents(const zend_string *path, zend_string** out_val) {
2729
php_stream *stream =
2830
php_stream_open_wrapper(ZSTR_VAL(path), "rb", USE_PATH | REPORT_ERRORS, NULL);
2931
if (!stream) {
3032
zend_throw_exception_ex(php_driver_runtime_exception_ce, 0,
3133
"The path '%s' doesn't exist or is not readable", ZSTR_VAL(path));
32-
return std::unexpected(FAILURE);
34+
return FAILURE;
3335
}
3436

3537
zend_string *str = php_stream_copy_to_mem(stream, PHP_STREAM_COPY_ALL, 0);
3638
php_stream_close(stream);
3739

3840
if (!str) {
3941
zend_throw_exception_ex(php_driver_runtime_exception_ce, 0, "Failed to allocate enough memory");
40-
return std::unexpected(FAILURE);
42+
return FAILURE;
4143
}
4244

43-
return str;
44-
}
45+
*out_val = str;
4546

46-
BEGIN_EXTERN_C()
47-
#include <ext/standard/php_filestat.h>
47+
return SUCCESS;
48+
}
4849

4950
#include "Builder_arginfo.h"
5051

@@ -64,13 +65,11 @@ ZEND_METHOD(Cassandra_SSLOptions_Builder, build) {
6465

6566
if (builder->trusted_certs) {
6667
for (size_t i = 0; i < builder->trusted_certs_cnt; i++) {
67-
auto result = file_get_contents(builder->trusted_certs[i]);
68-
69-
if (result.error() == FAILURE) {
68+
zend_string* str;
69+
if (file_get_contents(builder->trusted_certs[i], &str) == FAILURE) {
7070
return;
7171
}
7272

73-
zend_string *str = result.value();
7473
const CassError rc = cass_ssl_add_trusted_cert_n(ssl->ssl, ZSTR_VAL(str), ZSTR_LEN(str));
7574
zend_string_release(str);
7675

@@ -82,13 +81,11 @@ ZEND_METHOD(Cassandra_SSLOptions_Builder, build) {
8281
}
8382

8483
if (builder->client_cert) {
85-
auto result = file_get_contents(builder->client_cert);
86-
87-
if (result.error() == FAILURE) {
84+
zend_string *str = nullptr;
85+
if (file_get_contents(builder->client_cert, &str) == FAILURE) {
8886
return;
8987
}
9088

91-
zend_string *str = result.value();
9289
const CassError rc = cass_ssl_set_cert_n(ssl->ssl, ZSTR_VAL(str), ZSTR_LEN(str));
9390
zend_string_release(str);
9491
if (rc != CASS_OK) {
@@ -98,13 +95,12 @@ ZEND_METHOD(Cassandra_SSLOptions_Builder, build) {
9895
}
9996

10097
if (builder->private_key) {
101-
auto result = file_get_contents(builder->private_key);
98+
zend_string *str = nullptr;
10299

103-
if (result.error() == FAILURE) {
100+
if (file_get_contents(builder->private_key, &str) == FAILURE) {
104101
return;
105102
}
106103

107-
zend_string *str = result.value();
108104
const CassError rc = cass_ssl_set_cert_n(ssl->ssl, ZSTR_VAL(str), ZSTR_LEN(str));
109105
zend_string_release(str);
110106
if (rc != CASS_OK) {

0 commit comments

Comments
 (0)