1dnl config.m4 for extension mongodb
2PHP_ARG_ENABLE([mongodb],
3               [whether to enable MongoDB support],
4               [AS_HELP_STRING([--enable-mongodb],
5                               [Enable MongoDB support])])
6
7if test "$PHP_MONGODB" != "no"; then
8  dnl Check PHP version is compatible with this extension
9  AC_MSG_CHECKING([PHP version])
10
11  PHP_MONGODB_PHP_VERSION=$PHP_VERSION
12  PHP_MONGODB_PHP_VERSION_ID=$PHP_VERSION_ID
13
14  if test -z "$PHP_MONGODB_PHP_VERSION"; then
15    if test -z "$PHP_CONFIG"; then
16      AC_MSG_ERROR([php-config not found])
17    fi
18    PHP_MONGODB_PHP_VERSION=`${PHP_CONFIG} --version`
19    PHP_MONGODB_PHP_VERSION_ID=`echo "${PHP_MONGODB_PHP_VERSION}" | $AWK 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 100 + [$]2) * 100 + [$]3;}'`
20  fi
21
22  AC_MSG_RESULT($PHP_MONGODB_PHP_VERSION)
23  if test "$PHP_MONGODB_PHP_VERSION_ID" -lt "70000"; then
24    AC_MSG_ERROR([not supported. Need a PHP version >= 7.0.0 (found $PHP_MONGODB_PHP_VERSION)])
25  fi
26
27  PHP_ARG_ENABLE([mongodb-developer-flags],
28                 [whether to enable developer build flags],
29                 [AS_HELP_STRING([--enable-mongodb-developer-flags],
30                                 [MongoDB: Enable developer flags [default=no]])],
31                 [no],
32                 [no])
33
34  if test "$PHP_MONGODB_DEVELOPER_FLAGS" = "yes"; then
35    dnl Warn about functions which might be candidates for format attributes
36    AX_CHECK_COMPILE_FLAG(-Wmissing-format-attribute,       _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wmissing-format-attribute"     ,, -Werror)
37    dnl Avoid duplicating values for an enum
38    AX_CHECK_COMPILE_FLAG(-Wduplicate-enum,                 _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wduplicate-enum"               ,, -Werror)
39    dnl Warns on mismatches between #ifndef and #define header guards
40    AX_CHECK_COMPILE_FLAG(-Wheader-guard,                   _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wheader-guard"                 ,, -Werror)
41    dnl logical not of a non-boolean expression
42    AX_CHECK_COMPILE_FLAG(-Wlogical-not-parentheses,        _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-not-parentheses"      ,, -Werror)
43    dnl Warn about suspicious uses of logical operators in expressions
44    AX_CHECK_COMPILE_FLAG(-Wlogical-op,                     _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-op",, -Werror         ,, -Werror)
45    dnl memory error detector.
46    dnl FIXME: -fsanitize=address,undefined for clang. The AX_CHECK_COMPILE_FLAG macro isn't happy about that string :(
47    AX_CHECK_COMPILE_FLAG(-fsanitize-address,               _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fsanitize-address"             ,, -Werror)
48    dnl Enable frame debugging
49    AX_CHECK_COMPILE_FLAG(-fno-omit-frame-pointer,          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-omit-frame-pointer"        ,, -Werror)
50    dnl Make sure we don't optimize calls
51    AX_CHECK_COMPILE_FLAG(-fno-optimize-sibling-calls,      _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-optimize-sibling-calls"    ,, -Werror)
52    AX_CHECK_COMPILE_FLAG(-Wlogical-op-parentheses,         _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-op-parentheses"       ,, -Werror)
53    AX_CHECK_COMPILE_FLAG(-Wpointer-bool-conversion,        _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wpointer-bool-conversion"      ,, -Werror)
54    AX_CHECK_COMPILE_FLAG(-Wbool-conversion,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wbool-conversion"              ,, -Werror)
55    AX_CHECK_COMPILE_FLAG(-Wloop-analysis,                  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wloop-analysis"                ,, -Werror)
56    AX_CHECK_COMPILE_FLAG(-Wsizeof-array-argument,          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wsizeof-array-argument"        ,, -Werror)
57    AX_CHECK_COMPILE_FLAG(-Wstring-conversion,              _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wstring-conversion"            ,, -Werror)
58    AX_CHECK_COMPILE_FLAG(-Wno-variadic-macros,             _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-variadic-macros"           ,, -Werror)
59    AX_CHECK_COMPILE_FLAG(-Wno-sign-compare,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-sign-compare"              ,, -Werror)
60    AX_CHECK_COMPILE_FLAG(-fstack-protector,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fstack-protector"              ,, -Werror)
61    AX_CHECK_COMPILE_FLAG(-fno-exceptions,                  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-exceptions"                ,, -Werror)
62    AX_CHECK_COMPILE_FLAG(-Wformat-security,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wformat-security"              ,, -Werror)
63    AX_CHECK_COMPILE_FLAG(-Wformat-nonliteral,              _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wformat-nonliteral"            ,, -Werror)
64    AX_CHECK_COMPILE_FLAG(-Winit-self,                      _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Winit-self"                    ,, -Werror)
65    AX_CHECK_COMPILE_FLAG(-Wwrite-strings,                  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wwrite-strings"                ,, -Werror)
66    AX_CHECK_COMPILE_FLAG(-Wenum-compare,                   _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wenum-compare"                 ,, -Werror)
67    AX_CHECK_COMPILE_FLAG(-Wempty-body,                     _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wempty-body"                   ,, -Werror)
68    AX_CHECK_COMPILE_FLAG(-Wparentheses,                    _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wparentheses"                  ,, -Werror)
69    AX_CHECK_COMPILE_FLAG(-Wdeclaration-after-statement,    _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wdeclaration-after-statement"  ,, -Werror)
70    AX_CHECK_COMPILE_FLAG(-Wmaybe-uninitialized,            _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wmaybe-uninitialized"          ,, -Werror)
71    AX_CHECK_COMPILE_FLAG(-Wimplicit-fallthrough,           _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wimplicit-fallthrough"         ,, -Werror)
72    AX_CHECK_COMPILE_FLAG(-Werror,                          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Werror"                        ,, -Werror)
73    AX_CHECK_COMPILE_FLAG(-Wextra,                          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wextra"                        ,, -Werror)
74    AX_CHECK_COMPILE_FLAG(-Wno-unused-parameter,            _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-unused-parameter"          ,, -Werror)
75    AX_CHECK_COMPILE_FLAG(-Wno-unused-but-set-variable,     _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-unused-but-set-variable"   ,, -Werror)
76    AX_CHECK_COMPILE_FLAG(-Wno-missing-field-initializers,  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-missing-field-initializers",, -Werror)
77
78    MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS"
79    STD_CFLAGS="-g -O0 -Wall"
80  fi
81
82
83  PHP_ARG_ENABLE([mongodb-coverage],
84                 [whether to enable code coverage],
85                 [AS_HELP_STRING([--enable-mongodb-coverage],
86                                 [MongoDB: Enable developer code coverage information [default=no]])],
87                 [no],
88                 [no])
89
90  if test "$PHP_MONGODB_COVERAGE" = "yes"; then
91    if test "$ext_shared" != "yes"; then
92      AC_MSG_ERROR(code coverage is not supported for static builds)
93    fi
94
95    COVERAGE_CFLAGS="--coverage -g"
96    COVERAGE_LDFLAGS="--coverage"
97
98    MONGODB_SHARED_LIBADD="$MONGODB_SHARED_LIBADD $COVERAGE_LDFLAGS"
99  fi
100
101  PHP_MONGODB_CFLAGS="$STD_CFLAGS $MAINTAINER_CFLAGS $COVERAGE_CFLAGS"
102
103  PHP_MONGODB_SOURCES="\
104    php_phongo.c \
105    phongo_compat.c \
106    src/bson.c \
107    src/bson-encode.c \
108    src/BSON/Binary.c \
109    src/BSON/BinaryInterface.c \
110    src/BSON/DBPointer.c \
111    src/BSON/Decimal128.c \
112    src/BSON/Decimal128Interface.c \
113    src/BSON/Int64.c \
114    src/BSON/Javascript.c \
115    src/BSON/JavascriptInterface.c \
116    src/BSON/MaxKey.c \
117    src/BSON/MaxKeyInterface.c \
118    src/BSON/MinKey.c \
119    src/BSON/MinKeyInterface.c \
120    src/BSON/ObjectId.c \
121    src/BSON/ObjectIdInterface.c \
122    src/BSON/Persistable.c \
123    src/BSON/Regex.c \
124    src/BSON/RegexInterface.c \
125    src/BSON/Serializable.c \
126    src/BSON/Symbol.c \
127    src/BSON/Timestamp.c \
128    src/BSON/TimestampInterface.c \
129    src/BSON/Type.c \
130    src/BSON/Undefined.c \
131    src/BSON/Unserializable.c \
132    src/BSON/UTCDateTime.c \
133    src/BSON/UTCDateTimeInterface.c \
134    src/BSON/functions.c \
135    src/MongoDB/BulkWrite.c \
136    src/MongoDB/ClientEncryption.c \
137    src/MongoDB/Command.c \
138    src/MongoDB/Cursor.c \
139    src/MongoDB/CursorId.c \
140    src/MongoDB/CursorInterface.c \
141    src/MongoDB/Manager.c \
142    src/MongoDB/Query.c \
143    src/MongoDB/ReadConcern.c \
144    src/MongoDB/ReadPreference.c \
145    src/MongoDB/Server.c \
146    src/MongoDB/Session.c \
147    src/MongoDB/WriteConcern.c \
148    src/MongoDB/WriteConcernError.c \
149    src/MongoDB/WriteError.c \
150    src/MongoDB/WriteResult.c \
151    src/MongoDB/Exception/AuthenticationException.c \
152    src/MongoDB/Exception/BulkWriteException.c \
153    src/MongoDB/Exception/CommandException.c \
154    src/MongoDB/Exception/ConnectionException.c \
155    src/MongoDB/Exception/ConnectionTimeoutException.c \
156    src/MongoDB/Exception/EncryptionException.c \
157    src/MongoDB/Exception/Exception.c \
158    src/MongoDB/Exception/ExecutionTimeoutException.c \
159    src/MongoDB/Exception/InvalidArgumentException.c \
160    src/MongoDB/Exception/LogicException.c \
161    src/MongoDB/Exception/RuntimeException.c \
162    src/MongoDB/Exception/ServerException.c \
163    src/MongoDB/Exception/SSLConnectionException.c \
164    src/MongoDB/Exception/UnexpectedValueException.c \
165    src/MongoDB/Exception/WriteException.c \
166    src/MongoDB/Monitoring/CommandFailedEvent.c \
167    src/MongoDB/Monitoring/CommandStartedEvent.c \
168    src/MongoDB/Monitoring/CommandSubscriber.c \
169    src/MongoDB/Monitoring/CommandSucceededEvent.c \
170    src/MongoDB/Monitoring/Subscriber.c \
171    src/MongoDB/Monitoring/functions.c \
172  "
173
174  PHP_ARG_WITH([mongodb-system-libs],
175               [whether to compile against system libraries instead of bundled],
176               [AS_HELP_STRING([--with-mongodb-system-libs=@<:@yes/no@:>@],
177                               [MongoDB: Use system libraries for libbson, libmongoc, and libmongocrypt [default=no]])],
178               [no],
179               [no])
180  PHP_ARG_WITH([libbson],
181               [whether to use system libbson],
182               [AS_HELP_STRING([--with-libbson=@<:@yes/no@:>@],
183                               [MongoDB: Use system libbson [default=no]])],
184               [no],
185               [no])
186  PHP_ARG_WITH([libmongoc],
187               [whether to use system libmongoc],
188               [AS_HELP_STRING([--with-libmongoc=@<:@yes/no@:>@],
189                               [MongoDB: Use system libmongoc [default=no]])],
190               [no],
191               [no])
192  PHP_ARG_WITH([mongodb-client-side-encryption],
193               [whether to enable client-side encryption],
194               [AS_HELP_STRING([--with-mongodb-client-side-encryption=@<:@auto/yes/no@:>@],
195                               [MongoDB: Enable client-side encryption [default=auto]])],
196               [auto],
197               [no])
198
199  if test "$PHP_LIBBSON" != "no"; then
200    AC_MSG_WARN(Using --with-libbson is deprecated and will be removed in a future version. Please use --with-system-libs instead)
201
202    if test "$PHP_LIBMONGOC" = "no"; then
203      AC_MSG_ERROR(Cannot use system libbson and bundled libmongoc)
204    fi
205
206    PHP_MONGODB_SYSTEM_LIBS="yes"
207  fi
208
209  if test "$PHP_LIBMONGOC" != "no"; then
210    AC_MSG_WARN(Using --with-libmongoc is deprecated and will be removed in a future version. Please use --with-system-libs instead)
211
212    if test "$PHP_LIBBSON" = "no"; then
213      AC_MSG_ERROR(Cannot use system libmongoc and bundled libbson)
214    fi
215
216    PHP_MONGODB_SYSTEM_LIBS="yes"
217  fi
218
219  PHP_MONGODB_BSON_VERSION_STRING="None"
220  PHP_MONGODB_MONGOC_VERSION_STRING="None"
221  PHP_MONGODB_MONGOCRYPT_VERSION_STRING="None"
222
223  if test "$PHP_MONGODB_SYSTEM_LIBS" != "no"; then
224    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
225    AC_MSG_CHECKING(for libbson)
226    if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libbson-1.0; then
227      if $PKG_CONFIG libbson-1.0 --atleast-version 1.17.0; then
228        PHP_MONGODB_BSON_CFLAGS=`$PKG_CONFIG libbson-1.0 --cflags`
229        PHP_MONGODB_BSON_LIBS=`$PKG_CONFIG libbson-1.0 --libs`
230        PHP_MONGODB_BSON_VERSION=`$PKG_CONFIG libbson-1.0 --modversion`
231        PHP_MONGODB_BSON_VERSION_STRING="System ($PHP_MONGODB_BSON_VERSION)"
232        AC_MSG_RESULT(version $PHP_MONGODB_BSON_VERSION found)
233      else
234        AC_MSG_ERROR(system libbson must be upgraded to version >= 1.17.0)
235      fi
236    else
237      AC_MSG_ERROR(pkgconfig and libbson must be installed)
238    fi
239    PHP_MONGODB_CFLAGS="$PHP_MONGODB_CFLAGS $PHP_MONGODB_BSON_CFLAGS"
240    PHP_EVAL_LIBLINE($PHP_MONGODB_BSON_LIBS, MONGODB_SHARED_LIBADD)
241    AC_DEFINE(HAVE_SYSTEM_LIBBSON, 1, [Use system libbson])
242
243    AC_MSG_CHECKING(for libmongoc)
244    if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libmongoc-1.0; then
245      if $PKG_CONFIG libmongoc-1.0 --atleast-version 1.17.0; then
246        PHP_MONGODB_MONGOC_CFLAGS=`$PKG_CONFIG libmongoc-1.0 --cflags`
247        PHP_MONGODB_MONGOC_LIBS=`$PKG_CONFIG libmongoc-1.0 --libs`
248        PHP_MONGODB_MONGOC_VERSION=`$PKG_CONFIG libmongoc-1.0 --modversion`
249        PHP_MONGODB_MONGOC_VERSION_STRING="System ($PHP_MONGODB_MONGOC_VERSION)"
250        AC_MSG_RESULT(version $PHP_MONGODB_MONGOC_VERSION found)
251      else
252        AC_MSG_ERROR(system libmongoc must be upgraded to version >= 1.17.0)
253      fi
254    else
255      AC_MSG_ERROR(pkgconfig and libmongoc must be installed)
256    fi
257    PHP_MONGODB_CFLAGS="$PHP_MONGODB_CFLAGS $PHP_MONGODB_MONGOC_CFLAGS"
258    PHP_EVAL_LIBLINE($PHP_MONGODB_MONGOC_LIBS, MONGODB_SHARED_LIBADD)
259    AC_DEFINE(HAVE_SYSTEM_LIBMONGOC, 1, [Use system libmongoc])
260
261    if test "$PHP_MONGODB_CLIENT_SIDE_ENCRYPTION" != "no"; then
262      AC_MSG_CHECKING(for libmongocrypt)
263
264      if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libmongocrypt; then
265        if $PKG_CONFIG libmongocrypt --atleast-version 1.0.4; then
266          PHP_MONGODB_MONGOCRYPT_CFLAGS=`$PKG_CONFIG libmongocrypt --cflags`
267          PHP_MONGODB_MONGOCRYPT_LIBS=`$PKG_CONFIG libmongocrypt --libs`
268          PHP_MONGODB_MONGOCRYPT_VERSION=`$PKG_CONFIG libmongocrypt --modversion`
269          PHP_MONGODB_MONGOCRYPT_VERSION_STRING="System ($PHP_MONGODB_MONGOCRYPT_VERSION)"
270          AC_MSG_RESULT(version $PHP_MONGODB_MONGOCRYPT_VERSION found)
271
272          PHP_MONGODB_CFLAGS="$PHP_MONGODB_CFLAGS $PHP_MONGODB_MONGOCRYPT_CFLAGS"
273          PHP_EVAL_LIBLINE($PHP_MONGODB_MONGOCRYPT_LIBS, MONGODB_SHARED_LIBADD)
274          AC_DEFINE(HAVE_SYSTEM_LIBMONGOCRYPT, 1, [Use system libmongocrypt])
275        elif test "$PHP_MONGODB_CLIENT_SIDE_ENCRYPTION" = "yes"; then
276          AC_MSG_ERROR(system libmongocrypt must be upgraded to version >= 1.0.4)
277        else
278          AC_MSG_RESULT(found an older version, compiling without client-side encryption)
279        fi
280      else
281        if test "$PHP_MONGODB_CLIENT_SIDE_ENCRYPTION" = "yes"; then
282          AC_MSG_ERROR(pkgconfig and libmongocrypt must be installed)
283        else
284          AC_MSG_RESULT(not found, compiling without client-side encryption)
285        fi
286      fi
287    fi
288  fi
289
290  if test "$PHP_MONGODB_SYSTEM_LIBS" = "no"; then
291    PHP_MONGODB_BUNDLED_CFLAGS="$STD_CFLAGS -DBSON_COMPILATION -DMONGOC_COMPILATION"
292    dnl TODO: MONGOCRYPT-219 makes the -std argument obsolete
293    PHP_MONGODB_LIBMONGOCRYPT_CFLAGS="-DKMS_MSG_STATIC -std=gnu99"
294
295    dnl M4 doesn't know if we're building statically or as a shared module, so
296    dnl attempt to include both paths while ignoring errors. If neither path
297    dnl exists, report an error during configure (this is later than M4 parsing
298    dnl during phpize but better than nothing).
299    m4_pushdef([_include],[
300      dnl TODO: Fix this for PECL install (PHPC-1218)
301      dnl if test ! \( -f "$1" -o -f "ext/mongodb/$1" \); then
302      dnl   AC_MSG_ERROR([m4 could not include $1: No such file or directory])
303      dnl fi
304      m4_builtin([sinclude],[$1])
305      m4_builtin([sinclude],[ext/mongodb/][$1])
306    ])
307
308    dnl Avoid using AC_CONFIG_MACRO_DIR, which might conflict with PHP
309    _include([scripts/autotools/m4/as_var_copy.m4])
310    _include([scripts/autotools/m4/ax_check_compile_flag.m4])
311    _include([scripts/autotools/m4/ax_prototype.m4])
312    _include([scripts/autotools/m4/ax_pthread.m4])
313    _include([scripts/autotools/m4/php_mongodb.m4])
314    _include([scripts/autotools/m4/pkg.m4])
315
316    _include([scripts/autotools/CheckCompiler.m4])
317    _include([scripts/autotools/CheckHost.m4])
318
319    _include([scripts/autotools/libbson/CheckAtomics.m4])
320    _include([scripts/autotools/libbson/CheckHeaders.m4])
321    _include([scripts/autotools/libbson/Endian.m4])
322    _include([scripts/autotools/libbson/FindDependencies.m4])
323    _include([scripts/autotools/libbson/Versions.m4])
324
325    _include([scripts/autotools/libmongoc/CheckCompression.m4])
326    _include([scripts/autotools/libmongoc/CheckResolv.m4])
327    _include([scripts/autotools/libmongoc/CheckSasl.m4])
328    _include([scripts/autotools/libmongoc/CheckSSL.m4])
329    _include([scripts/autotools/libmongoc/CheckICU.m4])
330    _include([scripts/autotools/libmongoc/FindDependencies.m4])
331    _include([scripts/autotools/libmongoc/PlatformFlags.m4])
332    _include([scripts/autotools/libmongoc/Versions.m4])
333    _include([scripts/autotools/libmongoc/WeakSymbols.m4])
334
335    dnl This include modifies the value of $PHP_MONGODB_CLIENT_SIDE_ENCRYPTION to "yes"
336    dnl or "no" depending on whether dependencies for libmongocrypt are fulfilled
337    _include([scripts/autotools/libmongocrypt/CheckSSL.m4])
338    _include([scripts/autotools/libmongocrypt/Version.m4])
339
340    PHP_MONGODB_BSON_VERSION_STRING="Bundled ($BSON_VERSION)"
341    PHP_MONGODB_MONGOC_VERSION_STRING="Bundled ($MONGOC_VERSION)"
342    PHP_MONGODB_MONGOCRYPT_VERSION_STRING="Bundled ($MONGOCRYPT_BUILD_VERSION)"
343
344    m4_popdef([_include])
345
346    AC_SUBST(BSON_EXTRA_ALIGN, 0)
347    AC_SUBST(BSON_OS, 1)
348
349    AC_SUBST(MONGOC_NO_AUTOMATIC_GLOBALS, 1)
350    AC_SUBST(MONGOC_ENABLE_MONGODB_AWS_AUTH, 0)
351    AC_SUBST(MONGOC_ENABLE_RDTSCP, 0)
352    AC_SUBST(MONGOC_ENABLE_SHM_COUNTERS, 0)
353    AC_SUBST(MONGOC_TRACE, 1)
354
355    dnl Assignments for metadata handshake. Leave CFLAGS/LDFLAGS empty as they
356    dnl would likely cause platform info (PHP version) to be truncated. We can
357    dnl consider restoring CFLAGS/LDFLAGS once CDRIVER-3134 is resolved.
358    AC_SUBST(MONGOC_CC, [$CC])
359    AC_SUBST(MONGOC_USER_SET_CFLAGS, [])
360    AC_SUBST(MONGOC_USER_SET_LDFLAGS, [])
361
362    if test "$PHP_MONGODB_CLIENT_SIDE_ENCRYPTION" = "yes"; then
363      AC_SUBST(MONGOC_ENABLE_CLIENT_SIDE_ENCRYPTION, 1)
364    else
365      AC_SUBST(MONGOC_ENABLE_CLIENT_SIDE_ENCRYPTION, 0)
366    fi
367
368    dnl On MacOS, use gcut from the coreutils brew package instead of cut
369    dnl Generated with: find src/libmongoc/src/common -name '*.c' -print0 | cut -sz -d / -f 5- | sort -dz | tr '\000' ' '
370    PHP_MONGODB_COMMON_SOURCES="common-b64.c common-md5.c common-thread.c"
371
372    dnl Generated with: find src/libmongoc/src/kms-message/src -maxdepth 1 -name '*.c' -print0 | cut -sz -d / -f 6- | sort -dz | tr '\000' ' '
373    PHP_MONGODB_KMS_MESSAGE_SOURCES="hexlify.c kms_b64.c kms_caller_identity_request.c kms_crypto_apple.c kms_crypto_libcrypto.c kms_crypto_none.c kms_crypto_windows.c kms_decrypt_request.c kms_encrypt_request.c kms_kv_list.c kms_message.c kms_port.c kms_request.c kms_request_opt.c kms_request_str.c kms_response.c kms_response_parser.c sort.c"
374
375    dnl Generated with: find src/libmongoc/src/libbson/src/bson -name '*.c' -print0 | cut -sz -d / -f 7- | sort -dz | tr '\000' ' '
376    PHP_MONGODB_BSON_SOURCES="bcon.c bson-atomic.c bson.c bson-clock.c bson-context.c bson-decimal128.c bson-error.c bson-iso8601.c bson-iter.c bson-json.c bson-keys.c bson-md5.c bson-memory.c bson-oid.c bson-reader.c bson-string.c bson-timegm.c bson-utf8.c bson-value.c bson-version-functions.c bson-writer.c"
377
378    dnl Generated with: find src/libmongoc/src/libbson/src/jsonsl -name '*.c' -print0 | cut -sz -d / -f 7- | sort -dz | tr '\000' ' '
379    PHP_MONGODB_JSONSL_SOURCES="jsonsl.c"
380
381    dnl Generated with: find src/libmongoc/src/libmongoc/src/mongoc -name '*.c' -print0 | cut -sz -d / -f 7- | sort -dz | tr '\000' ' '
382    PHP_MONGODB_MONGOC_SOURCES="mongoc-aggregate.c mongoc-apm.c mongoc-array.c mongoc-async.c mongoc-async-cmd.c mongoc-buffer.c mongoc-bulk-operation.c mongoc-change-stream.c mongoc-client.c mongoc-client-pool.c mongoc-client-session.c mongoc-client-side-encryption.c mongoc-cluster-aws.c mongoc-cluster.c mongoc-cluster-cyrus.c mongoc-cluster-sasl.c mongoc-cluster-sspi.c mongoc-cmd.c mongoc-collection.c mongoc-compression.c mongoc-counters.c mongoc-crypt.c mongoc-crypto.c mongoc-crypto-cng.c mongoc-crypto-common-crypto.c mongoc-crypto-openssl.c mongoc-cursor-array.c mongoc-cursor.c mongoc-cursor-change-stream.c mongoc-cursor-cmd.c mongoc-cursor-cmd-deprecated.c mongoc-cursor-find.c mongoc-cursor-find-cmd.c mongoc-cursor-find-opquery.c mongoc-cursor-legacy.c mongoc-cyrus.c mongoc-database.c mongoc-error.c mongoc-find-and-modify.c mongoc-gridfs-bucket.c mongoc-gridfs-bucket-file.c mongoc-gridfs.c mongoc-gridfs-file.c mongoc-gridfs-file-list.c mongoc-gridfs-file-page.c mongoc-handshake.c mongoc-host-list.c mongoc-http.c mongoc-index.c mongoc-init.c mongoc-interrupt.c mongoc-libressl.c mongoc-linux-distro-scanner.c mongoc-list.c mongoc-log.c mongoc-matcher.c mongoc-matcher-op.c mongoc-memcmp.c mongoc-ocsp-cache.c mongoc-openssl.c mongoc-opts.c mongoc-opts-helpers.c mongoc-queue.c mongoc-rand-cng.c mongoc-rand-common-crypto.c mongoc-rand-openssl.c mongoc-read-concern.c mongoc-read-prefs.c mongoc-rpc.c mongoc-sasl.c mongoc-scram.c mongoc-secure-channel.c mongoc-secure-transport.c mongoc-server-description.c mongoc-server-monitor.c mongoc-server-stream.c mongoc-set.c mongoc-socket.c mongoc-ssl.c mongoc-sspi.c mongoc-stream-buffered.c mongoc-stream.c mongoc-stream-file.c mongoc-stream-gridfs.c mongoc-stream-gridfs-download.c mongoc-stream-gridfs-upload.c mongoc-stream-socket.c mongoc-stream-tls.c mongoc-stream-tls-libressl.c mongoc-stream-tls-openssl-bio.c mongoc-stream-tls-openssl.c mongoc-stream-tls-secure-channel.c mongoc-stream-tls-secure-transport.c mongoc-topology-background-monitoring.c mongoc-topology.c mongoc-topology-description-apm.c mongoc-topology-description.c mongoc-topology-scanner.c mongoc-uri.c mongoc-util.c mongoc-version-functions.c mongoc-write-command.c mongoc-write-command-legacy.c mongoc-write-concern.c"
383
384    dnl Generated with: find src/libmongoc/src/zlib-1.2.11 -maxdepth 1 -name '*.c' -print0 | cut -sz -d / -f 5- | sort -dz | tr '\000' ' '
385    PHP_MONGODB_ZLIB_SOURCES="adler32.c compress.c crc32.c deflate.c gzclose.c gzlib.c gzread.c gzwrite.c infback.c inffast.c inflate.c inftrees.c trees.c uncompr.c zutil.c"
386
387    PHP_MONGODB_ADD_SOURCES([src/libmongoc/src/common/], $PHP_MONGODB_COMMON_SOURCES, $PHP_MONGODB_BUNDLED_CFLAGS)
388    PHP_MONGODB_ADD_SOURCES([src/libmongoc/src/libbson/src/bson/], $PHP_MONGODB_BSON_SOURCES, $PHP_MONGODB_BUNDLED_CFLAGS)
389    PHP_MONGODB_ADD_SOURCES([src/libmongoc/src/libbson/src/jsonsl/], $PHP_MONGODB_JSONSL_SOURCES, $PHP_MONGODB_BUNDLED_CFLAGS)
390    PHP_MONGODB_ADD_SOURCES([src/libmongoc/src/libmongoc/src/mongoc/], $PHP_MONGODB_MONGOC_SOURCES, $PHP_MONGODB_BUNDLED_CFLAGS)
391
392    PHP_MONGODB_ADD_INCLUDE([src/libmongoc/src/common/])
393    PHP_MONGODB_ADD_INCLUDE([src/libmongoc/src/libbson/src/])
394    PHP_MONGODB_ADD_INCLUDE([src/libmongoc/src/libbson/src/jsonsl/])
395    PHP_MONGODB_ADD_INCLUDE([src/libmongoc/src/libmongoc/src/])
396
397    PHP_MONGODB_ADD_BUILD_DIR([src/libmongoc/src/common/])
398    PHP_MONGODB_ADD_BUILD_DIR([src/libmongoc/src/libbson/src/bson/])
399    PHP_MONGODB_ADD_BUILD_DIR([src/libmongoc/src/libbson/src/jsonsl/])
400    PHP_MONGODB_ADD_BUILD_DIR([src/libmongoc/src/libmongoc/src/mongoc/])
401
402    dnl If compiling without libmongocrypt, use kms_message sources bundled with libmongoc.
403    dnl If compiling with libmongocrypt, kms_message bundled with libmongocrypt is used as it is most likely newer.
404    if test "$PHP_MONGODB_CLIENT_SIDE_ENCRYPTION" != "yes" && test "$PHP_MONGODB_SSL" != "no"; then
405      AC_SUBST(MONGOC_ENABLE_MONGODB_AWS_AUTH, 1)
406      PHP_MONGODB_ADD_SOURCES([src/libmongoc/src/kms-message/src/], $PHP_MONGODB_KMS_MESSAGE_SOURCES, $PHP_MONGODB_BUNDLED_CFLAGS)
407      PHP_MONGODB_ADD_INCLUDE([src/libmongoc/src/kms-message/src/])
408      PHP_MONGODB_ADD_BUILD_DIR([src/libmongoc/src/kms-message/src/])
409    fi
410
411    dnl TODO: Use $ext_srcdir if we can move this after PHP_NEW_EXTENSION
412    ac_config_dir=PHP_EXT_SRCDIR(mongodb)
413
414    AC_CONFIG_FILES([
415      ${ac_config_dir}/src/libmongoc/src/libbson/src/bson/bson-config.h
416      ${ac_config_dir}/src/libmongoc/src/libbson/src/bson/bson-version.h
417      ${ac_config_dir}/src/libmongoc/src/libmongoc/src/mongoc/mongoc-config.h
418      ${ac_config_dir}/src/libmongoc/src/libmongoc/src/mongoc/mongoc-version.h
419    ])
420
421    if test "x$bundled_zlib" = "xyes"; then
422      PHP_MONGODB_ZLIB_CFLAGS="$PHP_MONGODB_BUNDLED_CFLAGS"
423      AC_CHECK_HEADER([unistd.h], [PHP_MONGODB_ZLIB_CFLAGS="$PHP_MONGODB_ZLIB_CFLAGS -DHAVE_UNISTD_H=1"], [])
424      PHP_MONGODB_ADD_SOURCES([src/libmongoc/src/zlib-1.2.11/], $PHP_MONGODB_ZLIB_SOURCES, $PHP_MONGODB_ZLIB_CFLAGS)
425      PHP_MONGODB_ADD_INCLUDE([src/libmongoc/src/zlib-1.2.11/])
426      PHP_MONGODB_ADD_BUILD_DIR([src/libmongoc/src/zlib-1.2.11/])
427      AC_CONFIG_FILES([${ac_config_dir}/src/libmongoc/src/zlib-1.2.11/zconf.h])
428    fi
429
430    if test "$PHP_MONGODB_CLIENT_SIDE_ENCRYPTION" = "yes"; then
431      dnl Since libmongocrypt adds kms-message, we can enable AWS auth in this case
432      AC_SUBST(MONGOC_ENABLE_MONGODB_AWS_AUTH, 1)
433      AC_SUBST(MONGOCRYPT_ENABLE_TRACE, 1)
434
435      dnl Generated with: find src/libmongocrypt/src -maxdepth 1 -name '*.c' -print0 | cut -sz -d / -f 4- | sort -dz | tr '\000' ' '
436      PHP_MONGODB_MONGOCRYPT_SOURCES="mongocrypt-binary.c mongocrypt-buffer.c mongocrypt.c mongocrypt-cache.c mongocrypt-cache-collinfo.c mongocrypt-cache-key.c mongocrypt-ciphertext.c mongocrypt-crypto.c mongocrypt-ctx.c mongocrypt-ctx-datakey.c mongocrypt-ctx-decrypt.c mongocrypt-ctx-encrypt.c mongocrypt-key-broker.c mongocrypt-key.c mongocrypt-kms-ctx.c mongocrypt-log.c mongocrypt-marking.c mongocrypt-opts.c mongocrypt-status.c mongocrypt-traverse-util.c"
437
438      dnl Generated with: find src/libmongocrypt/src/crypto -name '*.c' -print0 | cut -sz -d / -f 5- | sort -dz | tr '\000' ' '
439      PHP_MONGODB_MONGOCRYPT_CRYPTO_SOURCES="cng.c commoncrypto.c libcrypto.c none.c"
440
441      dnl Generated with: find src/libmongocrypt/src/os_posix -name '*.c' -print0 | cut -sz -d / -f 5- | sort -dz | tr '\000' ' '
442      PHP_MONGODB_MONGOCRYPT_OS_POSIX_SOURCES="os_mutex.c os_once.c"
443
444      dnl Generated with: find src/libmongocrypt/src/os_win -name '*.c' -print0 | cut -sz -d / -f 5- | sort -dz | tr '\000' ' '
445      PHP_MONGODB_MONGOCRYPT_OS_WIN_SOURCES="os_mutex.c os_once.c"
446
447      dnl Generated with: find src/libmongocrypt/kms-message/src -maxdepth 1 -name '*.c' -print0 | cut -sz -d / -f 5- | sort -dz | tr '\000' ' '
448      PHP_MONGODB_MONGOCRYPT_KMS_MESSAGE_SOURCES="hexlify.c kms_b64.c kms_caller_identity_request.c kms_crypto_apple.c kms_crypto_libcrypto.c kms_crypto_none.c kms_crypto_windows.c kms_decrypt_request.c kms_encrypt_request.c kms_kv_list.c kms_message.c kms_port.c kms_request.c kms_request_opt.c kms_request_str.c kms_response.c kms_response_parser.c sort.c"
449
450      PHP_MONGODB_LIBMONGOCRYPT_CFLAGS="$PHP_MONGODB_BUNDLED_CFLAGS $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS"
451      PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/src/], $PHP_MONGODB_MONGOCRYPT_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS)
452      PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/src/crypto/], $PHP_MONGODB_MONGOCRYPT_CRYPTO_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS)
453      PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/src/os_posix/], $PHP_MONGODB_MONGOCRYPT_OS_POSIX_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS)
454      PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/src/os_win/], $PHP_MONGODB_MONGOCRYPT_OS_WIN_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS)
455      PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/kms-message/src/], $PHP_MONGODB_MONGOCRYPT_KMS_MESSAGE_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS)
456
457      PHP_MONGODB_ADD_INCLUDE([src/libmongocrypt/src/])
458      PHP_MONGODB_ADD_INCLUDE([src/libmongocrypt/kms-message/src/])
459      PHP_MONGODB_ADD_INCLUDE([src/libmongocrypt-compat/])
460
461      PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/src/])
462      PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/src/crypto/])
463      PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/src/os_posix/])
464      PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/src/os_win/])
465      PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/kms-message/src/])
466
467      AC_CONFIG_FILES([
468        ${ac_config_dir}/src/libmongocrypt/src/mongocrypt-config.h
469        ${ac_config_dir}/src/libmongocrypt/src/mongocrypt.h
470      ])
471    fi
472  fi
473
474  PHP_NEW_EXTENSION(mongodb, $PHP_MONGODB_SOURCES, $ext_shared,, $PHP_MONGODB_CFLAGS)
475
476  PHP_SUBST(MONGODB_SHARED_LIBADD)
477
478  PHP_ADD_EXTENSION_DEP(mongodb, date)
479  PHP_ADD_EXTENSION_DEP(mongodb, json)
480  PHP_ADD_EXTENSION_DEP(mongodb, spl)
481  PHP_ADD_EXTENSION_DEP(mongodb, standard)
482
483  PHP_ADD_INCLUDE(PHP_EXT_SRCDIR(mongodb)[/src/BSON/])
484  PHP_ADD_INCLUDE(PHP_EXT_SRCDIR(mongodb)[/src/MongoDB/])
485  PHP_ADD_INCLUDE(PHP_EXT_SRCDIR(mongodb)[/src/MongoDB/Exception/])
486  PHP_ADD_INCLUDE(PHP_EXT_SRCDIR(mongodb)[/src/MongoDB/Monitoring/])
487  PHP_ADD_INCLUDE(PHP_EXT_SRCDIR(mongodb)[/src/contrib/])
488
489  PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(mongodb)[/src/BSON/])
490  PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(mongodb)[/src/MongoDB/])
491  PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(mongodb)[/src/MongoDB/Exception/])
492  PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(mongodb)[/src/MongoDB/Monitoring/])
493  PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(mongodb)[/src/contrib/])
494
495  dnl Necessary to ensure that static builds include "-pthread" when linking
496  if test "$ext_shared" != "yes"; then
497    EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $EXTRA_LDFLAGS"
498  fi
499
500  dnl This must come after PHP_NEW_EXTENSION, otherwise the srcdir won't be set
501  PHP_ADD_MAKEFILE_FRAGMENT
502
503  dnl The libmongocrypt line intentionally uses the PHP_LIBBSON flag as that decides whether to build against bundled or system libraries.
504  AC_CONFIG_COMMANDS_POST([
505    if test "$enable_static" = "no"; then
506      echo "
507mongodb was configured with the following options:
508
509Build configuration:
510  CFLAGS                                           : $CFLAGS
511  Extra CFLAGS                                     : $STD_CFLAGS $EXTRA_CFLAGS
512  Developers flags (slow)                          : $MAINTAINER_CFLAGS
513  Code Coverage flags (extra slow)                 : $COVERAGE_CFLAGS
514  libmongoc                                        : $PHP_MONGODB_BSON_VERSION_STRING
515  libbson                                          : $PHP_MONGODB_MONGOC_VERSION_STRING
516  libmongocrypt                                    : $PHP_MONGODB_MONGOCRYPT_VERSION_STRING
517  LDFLAGS                                          : $LDFLAGS
518  EXTRA_LDFLAGS                                    : $EXTRA_LDFLAGS
519  MONGODB_SHARED_LIBADD                            : $MONGODB_SHARED_LIBADD
520
521Please submit bugreports at:
522  https://jira.mongodb.org/browse/PHPC
523
524"
525    fi
526  ])
527fi
528
529dnl: vim: et sw=2
530