mirror of https://github.com/c-ares/c-ares.git
Fix proper macro expansion order across autotools versions for C compiler and preprocessor program checks.pull/10/head
parent
dc6c864108
commit
037656b2d8
5 changed files with 351 additions and 27 deletions
@ -0,0 +1,96 @@ |
||||
#--------------------------------------------------------------------------- |
||||
# |
||||
# xc-cc-check.m4 |
||||
# |
||||
# Copyright (c) 2013 Daniel Stenberg <daniel@haxx.se> |
||||
# |
||||
# Permission to use, copy, modify, and distribute this software for any |
||||
# purpose with or without fee is hereby granted, provided that the above |
||||
# copyright notice and this permission notice appear in all copies. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
||||
# |
||||
#--------------------------------------------------------------------------- |
||||
|
||||
# serial 1 |
||||
|
||||
|
||||
dnl _XC_PROG_CC_PREAMBLE |
||||
dnl ------------------------------------------------- |
||||
dnl Private macro. |
||||
|
||||
AC_DEFUN([_XC_PROG_CC_PREAMBLE], [ |
||||
xc_prog_cc_prev_IFS=$IFS |
||||
xc_prog_cc_prev_LIBS=$LIBS |
||||
xc_prog_cc_prev_CFLAGS=$CFLAGS |
||||
xc_prog_cc_prev_LDFLAGS=$LDFLAGS |
||||
xc_prog_cc_prev_CPPFLAGS=$CPPFLAGS |
||||
]) |
||||
|
||||
|
||||
dnl _XC_PROG_CC_POSTLUDE |
||||
dnl ------------------------------------------------- |
||||
dnl Private macro. |
||||
|
||||
AC_DEFUN([_XC_PROG_CC_POSTLUDE], [ |
||||
IFS=$xc_prog_cc_prev_IFS |
||||
LIBS=$xc_prog_cc_prev_LIBS |
||||
CFLAGS=$xc_prog_cc_prev_CFLAGS |
||||
LDFLAGS=$xc_prog_cc_prev_LDFLAGS |
||||
CPPFLAGS=$xc_prog_cc_prev_CPPFLAGS |
||||
AC_SUBST([CC])dnl |
||||
AC_SUBST([CPP])dnl |
||||
AC_SUBST([LIBS])dnl |
||||
AC_SUBST([CFLAGS])dnl |
||||
AC_SUBST([LDFLAGS])dnl |
||||
AC_SUBST([CPPFLAGS])dnl |
||||
]) |
||||
|
||||
|
||||
dnl _XC_PROG_CC |
||||
dnl ------------------------------------------------- |
||||
dnl Private macro. |
||||
|
||||
AC_DEFUN([_XC_PROG_CC], [ |
||||
AC_REQUIRE([_XC_PROG_CC_PREAMBLE])dnl |
||||
AC_REQUIRE([XC_CHECK_USER_FLAGS])dnl |
||||
AC_REQUIRE([AC_PROG_INSTALL])dnl |
||||
AC_REQUIRE([AC_PROG_CC])dnl |
||||
AC_REQUIRE([AM_PROG_CC_C_O])dnl |
||||
AC_REQUIRE([AC_PROG_CPP])dnl |
||||
AC_REQUIRE([_XC_PROG_CC_POSTLUDE])dnl |
||||
]) |
||||
|
||||
|
||||
dnl XC_CHECK_PROG_CC |
||||
dnl ------------------------------------------------- |
||||
dnl Public macro. |
||||
dnl |
||||
dnl Checks for C compiler and C preprocessor programs, |
||||
dnl while doing some previous sanity validation on user |
||||
dnl provided LIBS, LDFLAGS, CPPFLAGS and CFLAGS values |
||||
dnl that must succeed in order to continue execution. |
||||
dnl |
||||
dnl This sets variables CC and CPP, while preventing |
||||
dnl LIBS, LDFLAGS, CFLAGS, CPPFLAGS and IFS from being |
||||
dnl unexpectedly changed by underlying macros. |
||||
|
||||
AC_DEFUN([XC_CHECK_PROG_CC], [ |
||||
AC_PREREQ([2.50])dnl |
||||
AC_BEFORE([$0],[_XC_PROG_CC_PREAMBLE])dnl |
||||
AC_BEFORE([$0],[AC_PROG_INSTALL])dnl |
||||
AC_BEFORE([$0],[AC_PROG_CC])dnl |
||||
AC_BEFORE([$0],[AM_PROG_CC_C_O])dnl |
||||
AC_BEFORE([$0],[AC_PROG_CPP])dnl |
||||
AC_BEFORE([$0],[AC_PROG_LIBTOOL])dnl |
||||
AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl |
||||
AC_BEFORE([$0],[_XC_PROG_CC_POSTLUDE])dnl |
||||
AC_REQUIRE([_XC_PROG_CC])dnl |
||||
]) |
||||
|
@ -0,0 +1,243 @@ |
||||
#--------------------------------------------------------------------------- |
||||
# |
||||
# xc-val-flgs.m4 |
||||
# |
||||
# Copyright (c) 2013 Daniel Stenberg <daniel@haxx.se> |
||||
# |
||||
# Permission to use, copy, modify, and distribute this software for any |
||||
# purpose with or without fee is hereby granted, provided that the above |
||||
# copyright notice and this permission notice appear in all copies. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
||||
# |
||||
#--------------------------------------------------------------------------- |
||||
|
||||
# serial 1 |
||||
|
||||
|
||||
dnl _XC_CHECK_VAR_LIBS |
||||
dnl ------------------------------------------------- |
||||
dnl Private macro. |
||||
|
||||
AC_DEFUN([_XC_CHECK_VAR_LIBS], [ |
||||
xc_bad_var_libs=no |
||||
for xc_word in $LIBS; do |
||||
case "$xc_word" in |
||||
-l* | --library=*) |
||||
: |
||||
;; |
||||
*) |
||||
xc_bad_var_libs=yes |
||||
;; |
||||
esac |
||||
done |
||||
if test $xc_bad_var_libs = yes; then |
||||
AC_MSG_NOTICE([using LIBS: $LIBS]) |
||||
AC_MSG_NOTICE([LIBS error: LIBS may only be used to specify libraries (-lname).]) |
||||
fi |
||||
]) |
||||
|
||||
|
||||
dnl _XC_CHECK_VAR_LDFLAGS |
||||
dnl ------------------------------------------------- |
||||
dnl Private macro. |
||||
|
||||
AC_DEFUN([_XC_CHECK_VAR_LDFLAGS], [ |
||||
xc_bad_var_ldflags=no |
||||
for xc_word in $LDFLAGS; do |
||||
case "$xc_word" in |
||||
-D*) |
||||
xc_bad_var_ldflags=yes |
||||
;; |
||||
-U*) |
||||
xc_bad_var_ldflags=yes |
||||
;; |
||||
-I*) |
||||
xc_bad_var_ldflags=yes |
||||
;; |
||||
-l* | --library=*) |
||||
xc_bad_var_ldflags=yes |
||||
;; |
||||
esac |
||||
done |
||||
if test $xc_bad_var_ldflags = yes; then |
||||
AC_MSG_NOTICE([using LDFLAGS: $LDFLAGS]) |
||||
xc_bad_var_msg="LDFLAGS error: LDFLAGS may only be used to specify linker flags, not" |
||||
for xc_word in $LDFLAGS; do |
||||
case "$xc_word" in |
||||
-D*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word]) |
||||
;; |
||||
-U*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word]) |
||||
;; |
||||
-I*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word]) |
||||
;; |
||||
-l* | --library=*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg libraries. Use LIBS for: $xc_word]) |
||||
;; |
||||
esac |
||||
done |
||||
fi |
||||
]) |
||||
|
||||
|
||||
dnl _XC_CHECK_VAR_CPPFLAGS |
||||
dnl ------------------------------------------------- |
||||
dnl Private macro. |
||||
|
||||
AC_DEFUN([_XC_CHECK_VAR_CPPFLAGS], [ |
||||
xc_bad_var_cppflags=no |
||||
for xc_word in $CPPFLAGS; do |
||||
case "$xc_word" in |
||||
-rpath*) |
||||
xc_bad_var_cppflags=yes |
||||
;; |
||||
-L* | --library-path=*) |
||||
xc_bad_var_cppflags=yes |
||||
;; |
||||
-l* | --library=*) |
||||
xc_bad_var_cppflags=yes |
||||
;; |
||||
esac |
||||
done |
||||
if test $xc_bad_var_cppflags = yes; then |
||||
AC_MSG_NOTICE([using CPPFLAGS: $CPPFLAGS]) |
||||
xc_bad_var_msg="CPPFLAGS error: CPPFLAGS may only be used to specify C preprocessor flags, not" |
||||
for xc_word in $CPPFLAGS; do |
||||
case "$xc_word" in |
||||
-rpath*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word]) |
||||
;; |
||||
-L* | --library-path=*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word]) |
||||
;; |
||||
-l* | --library=*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg libraries. Use LIBS for: $xc_word]) |
||||
;; |
||||
esac |
||||
done |
||||
fi |
||||
]) |
||||
|
||||
|
||||
dnl _XC_CHECK_VAR_CFLAGS |
||||
dnl ------------------------------------------------- |
||||
dnl Private macro. |
||||
|
||||
AC_DEFUN([_XC_CHECK_VAR_CFLAGS], [ |
||||
xc_bad_var_cflags=no |
||||
for xc_word in $CFLAGS; do |
||||
case "$xc_word" in |
||||
-D*) |
||||
xc_bad_var_cflags=yes |
||||
;; |
||||
-U*) |
||||
xc_bad_var_cflags=yes |
||||
;; |
||||
-I*) |
||||
xc_bad_var_cflags=yes |
||||
;; |
||||
-rpath*) |
||||
xc_bad_var_cflags=yes |
||||
;; |
||||
-L* | --library-path=*) |
||||
xc_bad_var_cflags=yes |
||||
;; |
||||
-l* | --library=*) |
||||
xc_bad_var_cflags=yes |
||||
;; |
||||
esac |
||||
done |
||||
if test $xc_bad_var_cflags = yes; then |
||||
AC_MSG_NOTICE([using CFLAGS: $CFLAGS]) |
||||
xc_bad_var_msg="CFLAGS error: CFLAGS may only be used to specify C compiler flags, not" |
||||
for xc_word in $CFLAGS; do |
||||
case "$xc_word" in |
||||
-D*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word]) |
||||
;; |
||||
-U*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word]) |
||||
;; |
||||
-I*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word]) |
||||
;; |
||||
-rpath*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word]) |
||||
;; |
||||
-L* | --library-path=*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word]) |
||||
;; |
||||
-l* | --library=*) |
||||
AC_MSG_NOTICE([$xc_bad_var_msg libraries. Use LIBS for: $xc_word]) |
||||
;; |
||||
esac |
||||
done |
||||
fi |
||||
]) |
||||
|
||||
|
||||
dnl XC_CHECK_USER_FLAGS |
||||
dnl ------------------------------------------------- |
||||
dnl Public macro. |
||||
dnl |
||||
dnl Performs some sanity checks for LIBS, LDFLAGS, |
||||
dnl CPPFLAGS and CFLAGS values that the user might |
||||
dnl have set. When checks fails, user is noticed |
||||
dnl about errors detected in all of them and script |
||||
dnl execution is halted. |
||||
dnl |
||||
dnl Intended to be used early in configure script. |
||||
|
||||
AC_DEFUN([XC_CHECK_USER_FLAGS], [ |
||||
AC_PREREQ([2.50])dnl |
||||
AC_BEFORE([$0],[XC_CHECK_PROG_CC])dnl |
||||
dnl check order below matters |
||||
_XC_CHECK_VAR_LIBS |
||||
_XC_CHECK_VAR_LDFLAGS |
||||
_XC_CHECK_VAR_CPPFLAGS |
||||
_XC_CHECK_VAR_CFLAGS |
||||
if test $xc_bad_var_libs = yes || |
||||
test $xc_bad_var_cflags = yes || |
||||
test $xc_bad_var_ldflags = yes || |
||||
test $xc_bad_var_cppflags = yes; then |
||||
AC_MSG_ERROR([Can not continue. Fix errors mentioned immediately above this line.]) |
||||
fi |
||||
]) |
||||
|
||||
|
||||
dnl XC_CHECK_BUILD_FLAGS |
||||
dnl ------------------------------------------------- |
||||
dnl Public macro. |
||||
dnl |
||||
dnl Performs some sanity checks for LIBS, LDFLAGS, |
||||
dnl CPPFLAGS and CFLAGS values that the configure |
||||
dnl script might have set. When checks fails, user |
||||
dnl is noticed about errors detected in all of them |
||||
dnl but script continues execution. |
||||
dnl |
||||
dnl Intended to be used very late in configure script. |
||||
|
||||
AC_DEFUN([XC_CHECK_BUILD_FLAGS], [ |
||||
AC_PREREQ([2.50])dnl |
||||
dnl check order below matters |
||||
_XC_CHECK_VAR_LIBS |
||||
_XC_CHECK_VAR_LDFLAGS |
||||
_XC_CHECK_VAR_CPPFLAGS |
||||
_XC_CHECK_VAR_CFLAGS |
||||
if test $xc_bad_var_libs = yes || |
||||
test $xc_bad_var_cflags = yes || |
||||
test $xc_bad_var_ldflags = yes || |
||||
test $xc_bad_var_cppflags = yes; then |
||||
AC_MSG_WARN([Continuing even with errors mentioned immediately above this line.]) |
||||
fi |
||||
]) |
||||
|
Loading…
Reference in new issue