# Copyright 2019 The libgav1 Authors
#
# 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.

if(LIBGAV1_CMAKE_LIBGAV1_FLAGS_CMAKE_)
  return()
endif() # LIBGAV1_CMAKE_LIBGAV1_FLAGS_CMAKE_
set(LIBGAV1_CMAKE_LIBGAV1_FLAGS_CMAKE_ 1)

include(CheckCXXCompilerFlag)
include(CheckCXXSourceCompiles)

# Adds compiler flags specified by FLAGS to the sources specified by SOURCES:
#
# libgav1_set_compiler_flags_for_sources(SOURCES <sources> FLAGS <flags>)
macro(libgav1_set_compiler_flags_for_sources)
  unset(compiler_SOURCES)
  unset(compiler_FLAGS)
  unset(optional_args)
  unset(single_value_args)
  set(multi_value_args SOURCES FLAGS)
  cmake_parse_arguments(compiler "${optional_args}" "${single_value_args}"
                        "${multi_value_args}" ${ARGN})

  if(NOT (compiler_SOURCES AND compiler_FLAGS))
    libgav1_die("libgav1_set_compiler_flags_for_sources: SOURCES and "
                "FLAGS required.")
  endif()

  set_source_files_properties(${compiler_SOURCES} PROPERTIES COMPILE_FLAGS
                              ${compiler_FLAGS})

  if(LIBGAV1_VERBOSE GREATER 1)
    foreach(source ${compiler_SOURCES})
      foreach(flag ${compiler_FLAGS})
        message("libgav1_set_compiler_flags_for_sources: source:${source} "
                "flag:${flag}")
      endforeach()
    endforeach()
  endif()
endmacro()

# Tests compiler flags stored in list(s) specified by FLAG_LIST_VAR_NAMES, adds
# flags to $LIBGAV1_CXX_FLAGS when tests pass. Terminates configuration if
# FLAG_REQUIRED is specified and any flag check fails.
#
# ~~~
# libgav1_test_cxx_flag(<FLAG_LIST_VAR_NAMES <flag list variable(s)>>
#                       [FLAG_REQUIRED])
# ~~~
macro(libgav1_test_cxx_flag)
  unset(cxx_test_FLAG_LIST_VAR_NAMES)
  unset(cxx_test_FLAG_REQUIRED)
  unset(single_value_args)
  set(optional_args FLAG_REQUIRED)
  set(multi_value_args FLAG_LIST_VAR_NAMES)
  cmake_parse_arguments(cxx_test "${optional_args}" "${single_value_args}"
                        "${multi_value_args}" ${ARGN})

  if(NOT cxx_test_FLAG_LIST_VAR_NAMES)
    libgav1_die("libgav1_test_cxx_flag: FLAG_LIST_VAR_NAMES required")
  endif()

  unset(cxx_flags)
  foreach(list_var ${cxx_test_FLAG_LIST_VAR_NAMES})
    if(LIBGAV1_VERBOSE)
      message("libgav1_test_cxx_flag: adding ${list_var} to cxx_flags")
    endif()
    list(APPEND cxx_flags ${${list_var}})
  endforeach()

  if(LIBGAV1_VERBOSE)
    message("CXX test: all flags: ${cxx_flags}")
  endif()

  unset(all_cxx_flags)
  list(APPEND all_cxx_flags ${LIBGAV1_CXX_FLAGS} ${cxx_flags})

  # Turn off output from check_cxx_source_compiles. Print status directly
  # instead since the logging messages from check_cxx_source_compiles can be
  # quite confusing.
  set(CMAKE_REQUIRED_QUIET TRUE)

  # Run the actual compile test.
  unset(libgav1_all_cxx_flags_pass CACHE)
  message("--- Running combined CXX flags test, flags: ${all_cxx_flags}")
  check_cxx_compiler_flag("${all_cxx_flags}" libgav1_all_cxx_flags_pass)

  if(cxx_test_FLAG_REQUIRED AND NOT libgav1_all_cxx_flags_pass)
    libgav1_die("Flag test failed for required flag(s): "
                "${all_cxx_flags} and FLAG_REQUIRED specified.")
  endif()

  if(libgav1_all_cxx_flags_pass)
    # Test passed: update the global flag list used by the libgav1 target
    # creation wrappers.
    set(LIBGAV1_CXX_FLAGS ${cxx_flags})
    list(REMOVE_DUPLICATES LIBGAV1_CXX_FLAGS)

    if(LIBGAV1_VERBOSE)
      message("LIBGAV1_CXX_FLAGS=${LIBGAV1_CXX_FLAGS}")
    endif()

    message("--- Passed combined CXX flags test")
  else()
    message("--- Failed combined CXX flags test, testing flags individually.")

    if(cxx_flags)
      message("--- Testing flags from $cxx_flags: " "${cxx_flags}")
      foreach(cxx_flag ${cxx_flags})
        unset(cxx_flag_test_passed CACHE)
        message("--- Testing flag: ${cxx_flag}")
        check_cxx_compiler_flag("${cxx_flag}" cxx_flag_test_passed)

        if(cxx_flag_test_passed)
          message("--- Passed test for ${cxx_flag}")
        else()
          list(REMOVE_ITEM cxx_flags ${cxx_flag})
          message("--- Failed test for ${cxx_flag}, flag removed.")
        endif()
      endforeach()

      set(LIBGAV1_CXX_FLAGS ${cxx_flags})
    endif()
  endif()

  if(LIBGAV1_CXX_FLAGS)
    list(REMOVE_DUPLICATES LIBGAV1_CXX_FLAGS)
  endif()
endmacro()

# Tests executable linker flags stored in list specified by FLAG_LIST_VAR_NAME,
# adds flags to $LIBGAV1_EXE_LINKER_FLAGS when test passes. Terminates
# configuration when flag check fails. libgav1_set_cxx_flags() must be called
# before calling this macro because it assumes $LIBGAV1_CXX_FLAGS contains only
# valid CXX flags.
#
# libgav1_test_exe_linker_flag(<FLAG_LIST_VAR_NAME <flag list variable)>)
macro(libgav1_test_exe_linker_flag)
  unset(link_FLAG_LIST_VAR_NAME)
  unset(optional_args)
  unset(multi_value_args)
  set(single_value_args FLAG_LIST_VAR_NAME)
  cmake_parse_arguments(link "${optional_args}" "${single_value_args}"
                        "${multi_value_args}" ${ARGN})

  if(NOT link_FLAG_LIST_VAR_NAME)
    libgav1_die("libgav1_test_link_flag: FLAG_LIST_VAR_NAME required")
  endif()

  libgav1_set_and_stringify(DEST linker_flags SOURCE_VARS
                            ${link_FLAG_LIST_VAR_NAME})

  if(LIBGAV1_VERBOSE)
    message("EXE LINKER test: all flags: ${linker_flags}")
  endif()

  # Tests of $LIBGAV1_CXX_FLAGS have already passed. Include them with the
  # linker test.
  libgav1_set_and_stringify(DEST CMAKE_REQUIRED_FLAGS SOURCE_VARS
                            LIBGAV1_CXX_FLAGS)

  # Cache the global exe linker flags.
  if(CMAKE_EXE_LINKER_FLAGS)
    set(cached_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
    libgav1_set_and_stringify(DEST CMAKE_EXE_LINKER_FLAGS SOURCE
                              ${linker_flags})
  endif()

  libgav1_set_and_stringify(DEST CMAKE_EXE_LINKER_FLAGS SOURCE ${linker_flags}
                            ${CMAKE_EXE_LINKER_FLAGS})

  # Turn off output from check_cxx_source_compiles. Print status directly
  # instead since the logging messages from check_cxx_source_compiles can be
  # quite confusing.
  set(CMAKE_REQUIRED_QUIET TRUE)

  message("--- Running EXE LINKER test for flags: ${linker_flags}")

  unset(linker_flag_test_passed CACHE)
  set(libgav1_cxx_main "\nint main() { return 0; }")
  check_cxx_source_compiles("${libgav1_cxx_main}" linker_flag_test_passed)

  if(NOT linker_flag_test_passed)
    libgav1_die("EXE LINKER test failed.")
  endif()

  message("--- Passed EXE LINKER flag test.")

  # Restore cached global exe linker flags.
  if(cached_CMAKE_EXE_LINKER_FLAGS)
    set(CMAKE_EXE_LINKER_FLAGS cached_CMAKE_EXE_LINKER_FLAGS)
  else()
    unset(CMAKE_EXE_LINKER_FLAGS)
  endif()
endmacro()

# Runs the libgav1 compiler tests. This macro builds up the list of list var(s)
# that is passed to libgav1_test_cxx_flag().
#
# Note: libgav1_set_build_definitions() must be called before this macro.
macro(libgav1_set_cxx_flags)
  unset(cxx_flag_lists)

  if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
    list(APPEND cxx_flag_lists libgav1_base_cxx_flags)
  endif()

  # Append clang flags after the base set to allow -Wno* overrides to take
  # effect. Some of the base flags may enable a large set of warnings, e.g.,
  # -Wall.
  if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    list(APPEND cxx_flag_lists libgav1_clang_cxx_flags)
  endif()

  if(MSVC)
    list(APPEND cxx_flag_lists libgav1_msvc_cxx_flags)
  endif()

  if(LIBGAV1_VERBOSE)
    if(cxx_flag_lists)
      libgav1_set_and_stringify(DEST cxx_flags SOURCE_VARS ${cxx_flag_lists})
      message("libgav1_set_cxx_flags: internal CXX flags: ${cxx_flags}")
    endif()
  endif()

  if(LIBGAV1_CXX_FLAGS)
    list(APPEND cxx_flag_lists LIBGAV1_CXX_FLAGS)
    if(LIBGAV1_VERBOSE)
      message("libgav1_set_cxx_flags: user CXX flags: ${LIBGAV1_CXX_FLAGS}")
    endif()
  endif()

  libgav1_test_cxx_flag(FLAG_LIST_VAR_NAMES ${cxx_flag_lists})
endmacro()
