]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - config-scripts/cups-compiler.m4
CUPS v2.3.6 for CVE-2022-26691
[thirdparty/cups.git] / config-scripts / cups-compiler.m4
index a6923750a04b5abab91a761cde82c16aa6ef3969..604faf1b9f0484a9c7602ad0110f412101e65e2b 100644 (file)
@@ -1,7 +1,7 @@
 dnl
 dnl Compiler stuff for CUPS.
 dnl
-dnl Copyright 2007-2017 by Apple Inc.
+dnl Copyright 2007-2020 by Apple Inc.
 dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
 dnl
 dnl Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
@@ -10,18 +10,20 @@ dnl
 dnl Clear the debugging and non-shared library options unless the user asks
 dnl for them...
 INSTALL_STRIP=""
-OPTIM=""
 AC_SUBST(INSTALL_STRIP)
+
+AC_ARG_WITH(optim, [  --with-optim            set optimization flags ],
+       OPTIM="$withval",
+       OPTIM="")
 AC_SUBST(OPTIM)
 
-AC_ARG_WITH(optim, [  --with-optim            set optimization flags ])
 AC_ARG_ENABLE(debug, [  --enable-debug          build with debugging symbols])
 AC_ARG_ENABLE(debug_guards, [  --enable-debug-guards   build with memory allocation guards])
 AC_ARG_ENABLE(debug_printfs, [  --enable-debug-printfs  build with CUPS_DEBUG_LOG support])
 AC_ARG_ENABLE(unit_tests, [  --enable-unit-tests     build and run unit tests])
 
 dnl For debugging, keep symbols, otherwise strip them...
-if test x$enable_debug = xyes; then
+if test x$enable_debug = xyes -a "x$OPTIM" = x; then
        OPTIM="-g"
 else
        INSTALL_STRIP="-s"
@@ -79,6 +81,9 @@ AC_SUBST(LDARCHFLAGS)
 dnl Read-only data/program support on Linux...
 AC_ARG_ENABLE(relro, [  --enable-relro          build with the GCC relro option])
 
+dnl Clang/GCC address sanitizer...
+AC_ARG_ENABLE(sanitizer, [  --enable-sanitizer      build with AddressSanitizer])
+
 dnl Update compiler options...
 CXXLIBS="${CXXLIBS:=}"
 AC_SUBST(CXXLIBS)
@@ -89,15 +94,28 @@ AC_SUBST(PIEFLAGS)
 RELROFLAGS=""
 AC_SUBST(RELROFLAGS)
 
+WARNING_OPTIONS=""
+AC_SUBST(WARNING_OPTIONS)
+
 if test -n "$GCC"; then
        # Add GCC-specific compiler options...
+
+        # Address sanitizer is a useful tool to use when developing/debugging
+        # code but adds about 2x overhead...
+       if test x$enable_sanitizer = xyes; then
+               # Use -fsanitize=address with debugging...
+               OPTIM="$OPTIM -g -fsanitize=address"
+       else
+               # Otherwise use the Fortify enhancements to catch any unbounded
+               # string operations...
+               CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
+               CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=2"
+       fi
+
+       # Default optimization options...
        if test -z "$OPTIM"; then
-               if test "x$with_optim" = x; then
-                       # Default to optimize-for-size and debug
-                               OPTIM="-Os -g"
-               else
-                       OPTIM="$with_optim $OPTIM"
-               fi
+               # Default to optimize-for-size and debug
+               OPTIM="-Os -g"
        fi
 
        # Generate position-independent code as needed...
@@ -150,72 +168,29 @@ if test -n "$GCC"; then
                CFLAGS="$OLDCFLAGS"
        fi
 
-       if test "x$with_optim" = x; then
-               # Add useful warning options for tracking down problems...
-               OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
-
-               AC_MSG_CHECKING(whether compiler supports -Wno-unused-result)
-               OLDCFLAGS="$CFLAGS"
-               CFLAGS="$CFLAGS -Werror -Wno-unused-result"
-               AC_TRY_COMPILE(,,
-                       [OPTIM="$OPTIM -Wno-unused-result"
-                       AC_MSG_RESULT(yes)],
-                       AC_MSG_RESULT(no))
-               CFLAGS="$OLDCFLAGS"
-
-               AC_MSG_CHECKING(whether compiler supports -Wsign-conversion)
-               OLDCFLAGS="$CFLAGS"
-               CFLAGS="$CFLAGS -Werror -Wsign-conversion"
-               AC_TRY_COMPILE(,,
-                       [OPTIM="$OPTIM -Wsign-conversion"
-                       AC_MSG_RESULT(yes)],
-                       AC_MSG_RESULT(no))
-               CFLAGS="$OLDCFLAGS"
-
-               AC_MSG_CHECKING(whether compiler supports -Wno-tautological-compare)
-               OLDCFLAGS="$CFLAGS"
-               CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
-               AC_TRY_COMPILE(,,
-                       [OPTIM="$OPTIM -Wno-tautological-compare"
-                       AC_MSG_RESULT(yes)],
-                       AC_MSG_RESULT(no))
-               CFLAGS="$OLDCFLAGS"
-
-               # Additional warning options for development testing...
-               if test -d .git; then
-                       OPTIM="-Werror $OPTIM"
-               fi
-       fi
-
-       case "$host_os_name" in
-               darwin*)
-                       # -D_FORTIFY_SOURCE=2 adds additional object size
-                       # checking, basically wrapping all string functions
-                       # with buffer-limited ones.  Not strictly needed for
-                       # CUPS since we already use buffer-limited calls, but
-                       # this will catch any additions that are broken.
-                       CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
-                       ;;
+       # Add useful warning options for tracking down problems...
+       WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion  -Wno-unused-but-set-variable  -Wno-unused-variable"
 
-               linux*)
-                       # The -z relro option is provided by the Linux linker command to
-                       # make relocatable data read-only.
-                       if test x$enable_relro = xyes; then
-                               RELROFLAGS="-Wl,-z,relro,-z,now"
-                       fi
+       # Test GCC version for certain warning flags since -Werror
+       # doesn't trigger...
+       gccversion=`$CC --version | head -1 | awk '{print $NF}'`
+       case "$gccversion" in
+        7.* | 8.* | 9.*)
+                       WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-tautological-compare"
                        ;;
        esac
+
+       # Additional warning options for development testing...
+       if test -d .git; then
+               WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations -Wno-unknown-warning-option $WARNING_OPTIONS"
+       fi
 else
        # Add vendor-specific compiler options...
        case $host_os_name in
                sunos*)
                        # Solaris
                        if test -z "$OPTIM"; then
-                               if test "x$with_optim" = x; then
-                                       OPTIM="-xO2"
-                               else
-                                       OPTIM="$with_optim $OPTIM"
-                               fi
+                               OPTIM="-xO2"
                        fi
 
                        if test $PICFLAG = 1; then
@@ -223,13 +198,13 @@ else
                        fi
                        ;;
                *)
-                       # Running some other operating system; inform the user they
-                       # should contribute the necessary options to
-                       # cups-support@cups.org...
-                       echo "Building CUPS with default compiler optimizations; contact"
-                       echo "cups-devel@cups.org with uname and compiler options needed"
-                       echo "for your platform, or set the CFLAGS and LDFLAGS environment"
-                       echo "variables before running configure."
+                       # Running some other operating system; inform the user
+                       # they should contribute the necessary options via
+                       # Github...
+                       echo "Building CUPS with default compiler optimizations; contact the CUPS developers on Github"
+                       echo "(https://github.com/apple/cups/issues) with the uname and compiler options needed for"
+                       echo "your platform, or set the CFLAGS and LDFLAGS environment variables before running"
+                       echo "configure."
                        ;;
        esac
 fi
@@ -240,5 +215,11 @@ case $host_os_name in
                # glibc 2.8 and higher breaks peer credentials unless you
                # define _GNU_SOURCE...
                OPTIM="$OPTIM -D_GNU_SOURCE"
+
+               # The -z relro option is provided by the Linux linker command to
+               # make relocatable data read-only.
+               if test x$enable_relro = xyes; then
+                       RELROFLAGS="-Wl,-z,relro,-z,now"
+               fi
                ;;
 esac