Skip to content

Commit 3677871

Browse files
authored
Use pkg-config for ext/ldap without a directory (php#17441)
* Use pkg-config for ext/ldap without a directory The existing check is not very good. OpenLDAP has been shipping a pkg-config file for a while now, and that's preferable over trying to manually find it. Note that for older OpenLDAP or non-OpenLDAP implementations, a directory can still be passed to use the old logic. Note that Oracle LDAP is busted and going away soon; I'm not sure for other LDAP implementations. Tested on macOS 14. * Convert added ifs to AS_IF
1 parent 2e7b6da commit 3677871

File tree

1 file changed

+45
-37
lines changed

1 file changed

+45
-37
lines changed

ext/ldap/config.m4

+45-37
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ AC_DEFUN([PHP_LDAP_CHECKS], [
3838
LDAP_LIBDIR=$1
3939
fi
4040
fi
41+
PHP_LDAP_PKGCONFIG=false
4142
])
4243

4344
PHP_ARG_WITH([ldap],
@@ -59,52 +60,53 @@ if test "$PHP_LDAP" != "no"; then
5960
[-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1])
6061

6162
AS_VAR_IF([PHP_LDAP], [yes], [
62-
for i in /usr/local /usr; do
63-
PHP_LDAP_CHECKS([$i])
64-
done
63+
PKG_CHECK_MODULES([LDAP], [lber ldap])
64+
PHP_LDAP_PKGCONFIG=true
6565
], [PHP_LDAP_CHECKS([$PHP_LDAP])])
6666

67-
AS_VAR_IF([LDAP_DIR],, [AC_MSG_ERROR([Cannot find ldap.h])])
67+
AS_IF([test "$PHP_LDAP_PKGCONFIG" = true], [
68+
PHP_EVAL_INCLINE([$LDAP_CFLAGS])
69+
PHP_EVAL_LIBLINE([$LDAP_LIBS], [LDAP_SHARED_LIBADD])
70+
], [
71+
AS_VAR_IF([LDAP_DIR],, [AC_MSG_ERROR([Cannot find ldap.h])])
6872
69-
dnl -pc removal is a hack for clang
70-
MACHINE_INCLUDES=$($CC -dumpmachine | $SED 's/-pc//')
73+
dnl -pc removal is a hack for clang
74+
MACHINE_INCLUDES=$($CC -dumpmachine | $SED 's/-pc//')
7175
72-
AH_TEMPLATE([HAVE_ORALDAP],
73-
[Define to 1 if the ldap extension uses the Oracle Instant Client.])
76+
AH_TEMPLATE([HAVE_ORALDAP],
77+
[Define to 1 if the ldap extension uses the Oracle Instant Client.])
7478
75-
if test -f $LDAP_LIBDIR/liblber.a || test -f $LDAP_LIBDIR/liblber.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.a || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.$SHLIB_SUFFIX_NAME; then
76-
PHP_ADD_LIBRARY_WITH_PATH([lber], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
77-
PHP_ADD_LIBRARY_WITH_PATH([ldap], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
79+
if test -f $LDAP_LIBDIR/liblber.a || test -f $LDAP_LIBDIR/liblber.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.a || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/liblber.$SHLIB_SUFFIX_NAME; then
80+
PHP_ADD_LIBRARY_WITH_PATH([lber], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
81+
PHP_ADD_LIBRARY_WITH_PATH([ldap], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
7882
79-
elif test -f $LDAP_LIBDIR/libldap.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/libldap.$SHLIB_SUFFIX_NAME.3 || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libldap.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libldap.$SHLIB_SUFFIX_NAME.3 || test -f $LDAP_LIBDIR/libldap.3.dylib; then
80-
PHP_ADD_LIBRARY_WITH_PATH([ldap], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
83+
elif test -f $LDAP_LIBDIR/libldap.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/libldap.$SHLIB_SUFFIX_NAME.3 || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libldap.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libldap.$SHLIB_SUFFIX_NAME.3 || test -f $LDAP_LIBDIR/libldap.3.dylib; then
84+
PHP_ADD_LIBRARY_WITH_PATH([ldap], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
8185
82-
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME.12.1 || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libclntsh.$SHLIB_SUFFIX_NAME.12.1; then
83-
PHP_ADD_LIBRARY_WITH_PATH([clntsh], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
84-
AC_DEFINE([HAVE_ORALDAP], [1])
86+
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME.12.1 || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libclntsh.$SHLIB_SUFFIX_NAME.12.1; then
87+
PHP_ADD_LIBRARY_WITH_PATH([clntsh], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
88+
AC_DEFINE([HAVE_ORALDAP], [1])
8589
86-
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME.11.1 || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libclntsh.$SHLIB_SUFFIX_NAME.11.1; then
87-
PHP_ADD_LIBRARY_WITH_PATH([clntsh], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
88-
AC_DEFINE([HAVE_ORALDAP], [1])
90+
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME.11.1 || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libclntsh.$SHLIB_SUFFIX_NAME.11.1; then
91+
PHP_ADD_LIBRARY_WITH_PATH([clntsh], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
92+
AC_DEFINE([HAVE_ORALDAP], [1])
8993
90-
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libclntsh.$SHLIB_SUFFIX_NAME; then
91-
PHP_ADD_LIBRARY_WITH_PATH([clntsh], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
92-
AC_DEFINE([HAVE_ORALDAP], [1])
94+
elif test -f $LDAP_LIBDIR/libclntsh.$SHLIB_SUFFIX_NAME || test -f $LDAP_LIBDIR/$MACHINE_INCLUDES/libclntsh.$SHLIB_SUFFIX_NAME; then
95+
PHP_ADD_LIBRARY_WITH_PATH([clntsh], [$LDAP_LIBDIR], [LDAP_SHARED_LIBADD])
96+
AC_DEFINE([HAVE_ORALDAP], [1])
9397
94-
else
95-
AC_MSG_ERROR([Cannot find ldap libraries in $LDAP_LIBDIR.])
96-
fi
98+
else
99+
AC_MSG_ERROR([Cannot find ldap libraries in $LDAP_LIBDIR.])
100+
fi
97101
98-
PHP_ADD_INCLUDE([$LDAP_INCDIR])
99-
PHP_SUBST([LDAP_SHARED_LIBADD])
100-
AC_DEFINE([HAVE_LDAP], [1],
101-
[Define to 1 if the PHP extension 'ldap' is available.])
102+
PHP_ADD_INCLUDE([$LDAP_INCDIR])
102103
103-
dnl Save original values
104-
_SAVE_CPPFLAGS=$CPPFLAGS
105-
_SAVE_LIBS=$LIBS
106-
CPPFLAGS="$CPPFLAGS -I$LDAP_INCDIR"
107-
LIBS="$LIBS $LDAP_SHARED_LIBADD"
104+
dnl Save original values
105+
_SAVE_CPPFLAGS=$CPPFLAGS
106+
_SAVE_LIBS=$LIBS
107+
CPPFLAGS="$CPPFLAGS -I$LDAP_INCDIR"
108+
LIBS="$LIBS $LDAP_SHARED_LIBADD"
109+
])
108110

109111
dnl Check for 3 arg ldap_set_rebind_proc
110112
AC_CACHE_CHECK([for 3 arg ldap_set_rebind_proc],
@@ -132,6 +134,12 @@ if test "$PHP_LDAP" != "no"; then
132134
ldap_whoami_s
133135
]))
134136

137+
AS_IF([test "$PHP_LDAP_PKGCONFIG" = false], [
138+
dnl Restore original values
139+
CPPFLAGS=$_SAVE_CPPFLAGS
140+
LIBS=$_SAVE_LIBS
141+
])
142+
135143
dnl SASL check
136144
AS_VAR_IF([PHP_LDAP_SASL], [no],, [
137145
PKG_CHECK_MODULES([SASL], [libsasl2])
@@ -146,7 +154,7 @@ if test "$PHP_LDAP" != "no"; then
146154
[AC_CHECK_FUNC([ldap_simple_bind_s],,
147155
[AC_MSG_ERROR([LDAP library build check failed.])])])
148156

149-
dnl Restore original values
150-
CPPFLAGS=$_SAVE_CPPFLAGS
151-
LIBS=$_SAVE_LIBS
157+
PHP_SUBST([LDAP_SHARED_LIBADD])
158+
AC_DEFINE([HAVE_LDAP], [1],
159+
[Define to 1 if the PHP extension 'ldap' is available.])
152160
fi

0 commit comments

Comments
 (0)