| |
| # Copyright (C) Igor Sysoev |
| # Copyright (C) NGINX, Inc. |
| |
| |
| echo checking for C compiler: $CC |
| cat << END >> $NJS_AUTOCONF_ERR |
| ---------------------------------------- |
| checking for C compiler: $CC |
| END |
| |
| |
| # Allow error exit status. |
| set +e |
| |
| if [ -z `which $CC` ]; then |
| echo |
| echo $0: error: $CC not found. |
| echo |
| exit 1; |
| fi |
| |
| |
| if `/bin/sh -c "($CC -v)" 2>&1 | grep "gcc version" >> $NJS_AUTOCONF_ERR 2>&1` |
| then |
| NJS_CC_NAME=gcc |
| echo " + using GNU C compiler" |
| NJS_CC_VERSION=`/bin/sh -c "($CC -v)" 2>&1 | grep "gcc version" 2>&1` |
| echo " + $NJS_CC_VERSION" |
| |
| else |
| if `/bin/sh -c "($CC -v)" 2>&1 | grep "clang version" >> $NJS_AUTOCONF_ERR 2>&1` |
| then |
| NJS_CC_NAME=clang |
| echo " + using Clang C compiler" |
| NJS_CC_VERSION=`/bin/sh -c "($CC -v)" 2>&1 | grep "clang version" 2>&1` |
| echo " + $NJS_CC_VERSION" |
| |
| else |
| if `/bin/sh -c "($CC -v)" 2>&1 \ |
| | grep "Apple LLVM version" >> $NJS_AUTOCONF_ERR 2>&1` |
| then |
| NJS_CC_NAME=clang |
| echo " + using Clang C compiler" |
| NJS_CC_VERSION=`/bin/sh -c "($CC -v)" 2>&1 | grep "Apple LLVM version" 2>&1` |
| echo " + $NJS_CC_VERSION" |
| |
| else |
| if `/bin/sh -c "($CC -V)" 2>&1 | grep "Sun C" >> $NJS_AUTOCONF_ERR 2>&1` |
| then |
| NJS_CC_NAME=SunC |
| echo " + using Sun C compiler" |
| NJS_CC_VERSION=`/bin/sh -c "($CC -V)" 2>&1 | grep "Sun C" 2>&1` |
| echo " + $NJS_CC_VERSION" |
| |
| fi # SunC |
| fi # Apple LLVM clang |
| fi # clang |
| fi # gcc |
| |
| |
| case $NJS_CC_NAME in |
| |
| gcc) |
| njs_define=NJS_GCC . auto/define |
| |
| NJS_CFLAGS="$NJS_CFLAGS -pipe" |
| NJS_CFLAGS="$NJS_CFLAGS -fPIC" |
| |
| # Do not export symbols except explicitly marked with NJS_EXPORT. |
| NJS_CFLAGS="$NJS_CFLAGS -fvisibility=hidden" |
| |
| # c99/gnu99 conflict with Solaris XOPEN. |
| #NJS_CFLAGS="$NJS_CFLAGS -std=gnu99" |
| |
| NJS_CFLAGS="$NJS_CFLAGS -O" |
| #NJS_CFLAGS="$NJS_CFLAGS -O0" |
| NJS_CFLAGS="$NJS_CFLAGS -W -Wall -Wextra" |
| |
| #NJS_CFLAGS="$NJS_CFLAGS -Wunused-result" |
| NJS_CFLAGS="$NJS_CFLAGS -Wno-unused-parameter" |
| #NJS_CFLAGS="$NJS_CFLAGS -Wshorten-64-to-32" |
| NJS_CFLAGS="$NJS_CFLAGS -Wwrite-strings" |
| |
| # -O2 enables -fstrict-aliasing and -fstrict-overflow. |
| #NJS_CFLAGS="$NJS_CFLAGS -O2" |
| #NJS_CFLAGS="$NJS_CFLAGS -Wno-strict-aliasing" |
| |
| #NJS_CFLAGS="$NJS_CFLAGS -fomit-frame-pointer" |
| #NJS_CFLAGS="$NJS_CFLAGS -momit-leaf-frame-pointer" |
| |
| # -Wstrict-overflow is supported by GCC 4.2+. |
| #NJS_CFLAGS="$NJS_CFLAGS -Wstrict-overflow=5" |
| |
| NJS_CFLAGS="$NJS_CFLAGS -Wmissing-prototypes" |
| |
| # Stop on warning. |
| NJS_CFLAGS="$NJS_CFLAGS -Werror" |
| |
| # Debug. |
| NJS_CFLAGS="$NJS_CFLAGS -g" |
| |
| if [ "$NJS_ADDRESS_SANITIZER" = "YES" ]; then |
| NJS_CFLAGS="$NJS_CFLAGS -fsanitize=address" |
| NJS_CFLAGS="$NJS_CFLAGS -fno-omit-frame-pointer" |
| fi |
| ;; |
| |
| clang) |
| njs_define=NJS_CLANG . auto/define |
| |
| NJS_CFLAGS="$NJS_CFLAGS -pipe" |
| NJS_CFLAGS="$NJS_CFLAGS -fPIC" |
| |
| # Do not export symbols except explicitly marked with NJS_EXPORT. |
| NJS_CFLAGS="$NJS_CFLAGS -fvisibility=hidden" |
| |
| NJS_CFLAGS="$NJS_CFLAGS -O" |
| #NJS_CFLAGS="$NJS_CFLAGS -O0" |
| NJS_CFLAGS="$NJS_CFLAGS -W -Wall -Wextra" |
| |
| #NJS_CFLAGS="$NJS_CFLAGS -Wunused-result" |
| NJS_CFLAGS="$NJS_CFLAGS -Wno-unused-parameter" |
| #NJS_CFLAGS="$NJS_CFLAGS -Wshorten-64-to-32" |
| NJS_CFLAGS="$NJS_CFLAGS -Wwrite-strings" |
| #NJS_CFLAGS="$NJS_CFLAGS -O2" |
| #NJS_CFLAGS="$NJS_CFLAGS -fomit-frame-pointer" |
| NJS_CFLAGS="$NJS_CFLAGS -fstrict-aliasing" |
| NJS_CFLAGS="$NJS_CFLAGS -Wstrict-overflow=5" |
| |
| NJS_CFLAGS="$NJS_CFLAGS -Wmissing-prototypes" |
| |
| # Stop on warning. |
| NJS_CFLAGS="$NJS_CFLAGS -Werror" |
| |
| # Debug. |
| |
| if [ "$NJS_SYSTEM_PLATFORM" != "powerpc" ]; then |
| # "-g" flag causes the "unknown pseudo-op: `.cfi_sections'" |
| # error on PowerPC Clang. |
| NJS_CFLAGS="$NJS_CFLAGS -g" |
| fi |
| |
| if [ "$NJS_ADDRESS_SANITIZER" = "YES" ]; then |
| NJS_CFLAGS="$NJS_CFLAGS -fsanitize=address" |
| NJS_CFLAGS="$NJS_CFLAGS -fno-omit-frame-pointer" |
| NJS_CFLAGS="$NJS_CFLAGS -fsanitize-address-use-after-scope" |
| fi |
| ;; |
| |
| SunC) |
| njs_define=NJS_SUNC . auto/define |
| |
| NJS_CFLAGS="$NJS_CFLAGS -fPIC" |
| # Optimization. |
| NJS_CFLAGS="$NJS_CFLAGS -O -fast" |
| # Stop on warning. |
| NJS_CFLAGS="$NJS_CFLAGS -errwarn=%all" |
| # Debug. |
| NJS_CFLAGS="$NJS_CFLAGS -g" |
| |
| if [ "$NJS_ADDRESS_SANITIZER" = "YES" ]; then |
| echo " - Address sanitizer is not supported by $NJS_CC_NAME" |
| fi |
| ;; |
| |
| *) |
| ;; |
| |
| esac |
| |
| if [ "$NJS_DEBUG" = "YES" ]; then |
| njs_define=NJS_DEBUG . auto/define |
| fi |
| |
| if [ "$NJS_DEBUG_MEMORY" = "YES" ]; then |
| njs_define=NJS_DEBUG_MEMORY . auto/define |
| fi |
| |
| if [ "$NJS_TEST262" = "YES" ]; then |
| njs_define=NJS_TEST262 . auto/define |
| fi |
| |
| # Stop on error exit status again. |
| set -e |