Skip to content

Switch from curl-config to pkg-config for curl extension #2694

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 76 additions & 54 deletions ext/curl/config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -6,75 +6,97 @@ PHP_ARG_WITH(curl, for cURL support,
[ --with-curl[=DIR] Include cURL support])

if test "$PHP_CURL" != "no"; then
if test -r $PHP_CURL/include/curl/easy.h; then
CURL_DIR=$PHP_CURL
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we use pkg-config even if the path is specified explicitly? I would expect the files in <somepath>/include/curl/easy.h to be used regardless of whether pkg-config is available, when I compile PHP with --with-curl=<somepath>

Copy link
Member Author

@remicollet remicollet Aug 21, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we use pkg-config even if the path is specified explicitly?

Yes, this is what is done, using libcurl.pc in specified directory

 elif test -r $PHP_CURL/lib/pkgconfig/libcurl.pc; then 

Which should (obviously) provides needed build options to use headers from this directory.

if test -z "$PKG_CONFIG"; then
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
fi

if test -x "$PKG_CONFIG"; then
dnl using pkg-config output

AC_MSG_CHECKING(for libcurl.pc)
if test "$PHP_CURL" == "yes"; then
PKNAME=libcurl
AC_MSG_RESULT(using default path)
elif test -r $PHP_CURL/$PHP_LIBDIR/pkgconfig/libcurl.pc; then
PKNAME=$PHP_CURL/$PHP_LIBDIR/pkgconfig/libcurl.pc
AC_MSG_RESULT(using $PKNAME)
elif test -r $PHP_CURL/lib/pkgconfig/libcurl.pc; then
PKNAME=$PHP_CURL/lib/pkgconfig/libcurl.pc
AC_MSG_RESULT(using $PKNAME)
else
AC_MSG_ERROR(Could not find libcurl.pc)
fi

AC_MSG_CHECKING(for cURL 7.10.5 or greater)
if $PKG_CONFIG --atleast-version 7.10.5 $PKNAME; then
curl_version_full=`$PKG_CONFIG --modversion $PKNAME`
AC_MSG_RESULT($curl_version_full)
else
AC_MSG_ERROR(cURL version 7.10.5 or later is required to compile php with cURL support)
fi

CURL_LIBS=`$PKG_CONFIG --libs $PKNAME`
CURL_INCL=`$PKG_CONFIG --cflags $PKNAME`
CURL_SSL=`$PKG_CONFIG --variable=supported_features $PKNAME| $EGREP SSL`
else
AC_MSG_CHECKING(for cURL in default path)
for i in /usr/local /usr; do
if test -r $i/include/curl/easy.h; then
CURL_DIR=$i
AC_MSG_RESULT(found in $i)
break
fi
done
dnl fallback to old vay, using curl-config

if test -r $PHP_CURL/include/curl/easy.h; then
CURL_DIR=$PHP_CURL
else
AC_MSG_CHECKING(for cURL in default path)
for i in /usr/local /usr; do
if test -r $i/include/curl/easy.h; then
CURL_DIR=$i
AC_MSG_RESULT(found in $i)
break
fi
done
fi

if test -z "$CURL_DIR"; then
AC_MSG_RESULT(not found)
if which dpkg-architecture>/dev/null; then
AC_MSG_CHECKING(for cURL in multiarch path)
CURL_MULTIARCH_INCLUDE=/usr/include/$(dpkg-architecture -qDEB_HOST_MULTIARCH)
if test -r $CURL_MULTIARCH_INCLUDE/curl/easy.h; then
CURL_DIR=/usr
AC_MSG_RESULT(found in $CURL_MULTIARCH_INCLUDE)
else
AC_MSG_RESULT(not found)
fi
fi
AC_MSG_ERROR(Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/)
fi
fi

if test -z "$CURL_DIR"; then
AC_MSG_ERROR(Could not find cURL, please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/)
fi
CURL_CONFIG="curl-config"
AC_MSG_CHECKING(for cURL 7.10.5 or greater)

CURL_CONFIG="curl-config"
AC_MSG_CHECKING(for cURL 7.10.5 or greater)
if ${CURL_DIR}/bin/curl-config --libs > /dev/null 2>&1; then
CURL_CONFIG=${CURL_DIR}/bin/curl-config
else
if ${CURL_DIR}/curl-config --libs > /dev/null 2>&1; then
CURL_CONFIG=${CURL_DIR}/curl-config
fi
fi

if ${CURL_DIR}/bin/curl-config --libs > /dev/null 2>&1; then
CURL_CONFIG=${CURL_DIR}/bin/curl-config
else
if ${CURL_DIR}/curl-config --libs > /dev/null 2>&1; then
CURL_CONFIG=${CURL_DIR}/curl-config
curl_version_full=`$CURL_CONFIG --version`
curl_version=`echo ${curl_version_full} | sed -e 's/libcurl //' | $AWK 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
if test "$curl_version" -ge 7010005; then
AC_MSG_RESULT($curl_version_full)
CURL_LIBS=`$CURL_CONFIG --libs`
CURL_INCL=`$CURL_CONFIG --cflags`
CURL_SSL=`$CURL_CONFIG --feature | $EGREP SSL`
else
AC_MSG_ERROR(cURL version 7.10.5 or later is required to compile php with cURL support)
fi
fi

curl_version_full=`$CURL_CONFIG --version`
curl_version=`echo ${curl_version_full} | sed -e 's/libcurl //' | $AWK 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
if test "$curl_version" -ge 7010005; then
AC_MSG_RESULT($curl_version_full)
CURL_LIBS=`$CURL_CONFIG --libs`
else
AC_MSG_ERROR(cURL version 7.10.5 or later is required to compile php with cURL support)
fi
dnl common stuff (pkg-config / curl-config)

if test -z "$CURL_MULTIARCH_INCLUDE"; then
PHP_ADD_INCLUDE($CURL_DIR/include)
else
PHP_ADD_INCLUDE($CURL_MULTIARCH_INCLUDE)
fi
PHP_EVAL_LIBLINE($CURL_LIBS, CURL_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(curl, $CURL_DIR/$PHP_LIBDIR, CURL_SHARED_LIBADD)
PHP_EVAL_INCLINE($CURL_INCL, CURL_SHARED_LIBADD)

AC_MSG_CHECKING([for SSL support in libcurl])
CURL_SSL=`$CURL_CONFIG --feature | $EGREP SSL`
if test "$CURL_SSL" = "SSL"; then
if test -n "$CURL_SSL"; then
AC_MSG_RESULT([yes])
AC_DEFINE([HAVE_CURL_SSL], [1], [Have cURL with SSL support])

save_CFLAGS="$CFLAGS"
CFLAGS="`$CURL_CONFIG --cflags`"
save_LDFLAGS="$LDFLAGS"
LDFLAGS="`$CURL_CONFIG --libs`"
CFLAGS=$CURL_INCL
save_LDFLAGS="$CFLAGS"
LDFLAGS=$CURL_LIBS

AC_PROG_CPP
AC_MSG_CHECKING([for openssl support in libcurl])
Expand Down Expand Up @@ -145,21 +167,21 @@ int main(int argc, char *argv[])
],[
AC_MSG_ERROR(There is something wrong. Please check config.log for more information.)
],[
$CURL_LIBS -L$CURL_DIR/$PHP_LIBDIR
$CURL_LIBS
])

PHP_CHECK_LIBRARY(curl,curl_easy_strerror,
[
AC_DEFINE(HAVE_CURL_EASY_STRERROR,1,[ ])
],[],[
$CURL_LIBS -L$CURL_DIR/$PHP_LIBDIR
$CURL_LIBS
])

PHP_CHECK_LIBRARY(curl,curl_multi_strerror,
[
AC_DEFINE(HAVE_CURL_MULTI_STRERROR,1,[ ])
],[],[
$CURL_LIBS -L$CURL_DIR/$PHP_LIBDIR
$CURL_LIBS
])

PHP_NEW_EXTENSION(curl, interface.c multi.c share.c curl_file.c, $ext_shared)
Expand Down