#
# Copyright (c) 2017, Alliance for Open Media. All rights reserved
#
# This source code is subject to the terms of the BSD 2 Clause License and the
# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
# not distributed with this source code in the LICENSE file, you can obtain it
# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
# License 1.0 was not distributed with this source code in the PATENTS file, you
# can obtain it at www.aomedia.org/license/patent.
#
if(AOM_BUILD_CMAKE_EXPORTS_CMAKE_)
  return()
endif() # AOM_BUILD_CMAKE_EXPORTS_CMAKE_
set(AOM_BUILD_CMAKE_EXPORTS_CMAKE_ 1)

include("${AOM_ROOT}/build/cmake/exports_sources.cmake")

# Creates the custom target which handles generation of the symbol export lists.
function(setup_exports_target)
  if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
    set(symbol_file_ext "syms")
  elseif("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS" AND MSVC)
    set(symbol_file_ext "def")
  else()
    set(symbol_file_ext "ver")
  endif()

  set(aom_sym_file "${AOM_CONFIG_DIR}/libaom.${symbol_file_ext}")

  add_custom_target(generate_exports
                    COMMAND ${CMAKE_COMMAND} -DAOM_ROOT="${AOM_ROOT}"
                            -DAOM_CONFIG_DIR="${AOM_CONFIG_DIR}"
                            -DAOM_TARGET_SYSTEM=${AOM_TARGET_SYSTEM}
                            -DAOM_SYM_FILE="${aom_sym_file}" -DAOM_MSVC=${MSVC}
                            -DAOM_XCODE=${XCODE} -DCONFIG_NAME=$<CONFIG>
                            -DCONFIG_AV1_DECODER=${CONFIG_AV1_DECODER}
                            -DCONFIG_AV1_ENCODER=${CONFIG_AV1_ENCODER} -P
                            "${AOM_ROOT}/build/cmake/generate_exports.cmake"
                    SOURCES ${AOM_EXPORTS_SOURCES}
                    DEPENDS ${AOM_EXPORTS_SOURCES})

  # Make libaom depend on the exports file, and set flags to pick it up when
  # creating the dylib.
  add_dependencies(aom generate_exports)

  if(APPLE)
    set_property(TARGET aom APPEND_STRING
                 PROPERTY LINK_FLAGS "-exported_symbols_list ${aom_sym_file}")
  elseif(WIN32)
    message(FATAL_ERROR "Windows DLL builds not supported yet.")
    if(NOT MSVC)
      set_property(TARGET aom APPEND_STRING
                   PROPERTY LINK_FLAGS "-Wl,--version-script ${aom_sym_file}")
    endif()

    # TODO(tomfinegan): Sort out the import lib situation and flags for MSVC.

  else()
    set_property(TARGET aom APPEND_STRING
                 PROPERTY LINK_FLAGS "-Wl,--version-script,${aom_sym_file}")
  endif()
endfunction()
