#
#    Copyright 2015-2016 Nest Labs Inc. All Rights Reserved.
#
#    Licensed under the Apache License, Version 2.0 (the "License");
#    you may not use this file except in compliance with the License.
#    You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#

#
#    Description:
#      This file defines GNU autoconf M4-style macros that ensure the
#      -Werror compiler option for GCC-based or -compatible compilers
#      do not break some autoconf tests (see
#      http://lists.gnu.org/archive/html/autoconf-patches/2008-09/msg00014.html).
#
#      If -Werror has been passed transform it into -Wno-error for
#      CPPFLAGS, CFLAGS, CXXFLAGS, OBJCFLAGS, and OBJCXXFLAGS with
#      NL_SAVE_WERROR. Transform them back again with
#      NL_RESTORE_WERROR.
#

# 
# _NL_SAVE_WERROR_FOR_VAR(variable)
#
#   variable - The compiler flags variable to scan for the presence of
#              -Werror and, if present, transform to -Wno-error.
#
# This transforms, for the specified compiler flags variable, -Werror
# to -Wno-error, if it was it present. The original state may be
# restored by invoking _NL_RESTORE_WERROR_FOR_VAR([variable]).
#
#------------------------------------------------------------------------------
AC_DEFUN([_NL_SAVE_WERROR_FOR_VAR],
[
    if echo "${$1}" | grep -q '\-Werror'; then
	$1="`echo ${$1} | sed -e 's,-Werror\([[[:space:]]]\),-Wno-error\1,g'`"
	nl_had_$1_werror=yes
    else
	nl_had_$1_werror=no
    fi
])

#
# _NL_RESTORE_WERROR_FOR_VAR(variable)
#
#   variable - The compiler flag for which to restore -Wno-error back
#              to -Werror if it was originally passed in by the user as
#              such.
#
# This restores, for the specified compiler flags variable, -Werror
# from -Wno-error, if it was initially set as -Werror at the time
# _NL_SAVE_WERROR_FOR_VAR([variable]) was invoked.
#
#------------------------------------------------------------------------------
AC_DEFUN([_NL_RESTORE_WERROR_FOR_VAR],
[
    if test "${nl_had_$1_werror}" = "yes"; then
	$1="`echo ${$1} | sed -e 's,-Wno-error\([[[:space:]]]\),-Werror\1,g'`"
    fi

    unset nl_had_$1_werror
])

# 
# NL_SAVE_WERROR
#
# This transforms, for each of CFLAGS, CXXFLAGS, OBJCFLAGS, and
# OBJCXXFLAGS, -Werror to -Wno-error, if it was it present. The
# original state may be restored by invoking NL_RESTORE_WERROR.
#
#------------------------------------------------------------------------------
AC_DEFUN([NL_SAVE_WERROR],
[
    _NL_SAVE_WERROR_FOR_VAR([CPPFLAGS])
    _NL_SAVE_WERROR_FOR_VAR([CFLAGS])
    _NL_SAVE_WERROR_FOR_VAR([CXXFLAGS])
    _NL_SAVE_WERROR_FOR_VAR([OBJCFLAGS])
    _NL_SAVE_WERROR_FOR_VAR([OBJCXXFLAGS])
])

#
# NL_RESTORE_WERROR
#
# This restores, for each of OBJCXXFLAGS, OBJCFLAGS, CXXFLAGS, and
# CFLAGS, -Werror from -Wno-error, if it was initially set as -Werror
# at the time NL_SAVE_WERROR was invoked.
#
#------------------------------------------------------------------------------
AC_DEFUN([NL_RESTORE_WERROR],
[
    _NL_RESTORE_WERROR_FOR_VAR([OBJCXXFLAGS])
    _NL_RESTORE_WERROR_FOR_VAR([OBJCFLAGS])
    _NL_RESTORE_WERROR_FOR_VAR([CXXFLAGS])
    _NL_RESTORE_WERROR_FOR_VAR([CFLAGS])
    _NL_RESTORE_WERROR_FOR_VAR([CPPFLAGS])
])
