cmake_minimum_required (VERSION 3.14)

if(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" MATCHES "[;$]")
  set(USE_SWIFT 1)
else()
  set(USE_SWIFT 0)
endif()

if(IOS)
  set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED NO)
  set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
  if(XCODE_VERSION VERSION_LESS 9)
    set(USE_SWIFT 0)
  endif()
endif ()

enable_language (CXX)

if(USE_SWIFT)
  enable_language (Swift)
  if(NOT XCODE_VERSION VERSION_LESS 10.2)
    set(CMAKE_Swift_LANGUAGE_VERSION 5.0)
  elseif(NOT XCODE_VERSION VERSION_LESS 8.0)
    set(CMAKE_Swift_LANGUAGE_VERSION 3.0)
  endif()
endif()

# Try to find ZLIB in the SDK rather than in system locations.
set(CMAKE_FIND_USE_PACKAGE_ROOT_PATH FALSE)
set(CMAKE_FIND_USE_CMAKE_PATH FALSE)
set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH FALSE)
set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH FALSE)
list(REMOVE_ITEM CMAKE_SYSTEM_PREFIX_PATH /usr/local /usr / /usr/X11R6 /usr/pkg /opt /sw /opt/local)

find_package(ZLIB REQUIRED)
add_library (framework_dependency STATIC)
target_sources (framework_dependency PRIVATE use_cmath.cpp)
target_link_libraries(framework_dependency INTERFACE ZLIB::ZLIB)

add_library (framework_test SHARED use_cmath.cpp)
if(USE_SWIFT)
  target_sources(framework_test PRIVATE foo.swift)
endif()
target_link_libraries (framework_test PRIVATE framework_dependency)

set_target_properties (framework_test PROPERTIES
    FRAMEWORK TRUE
    FRAMEWORK_VERSION A
    MACOSX_FRAMEWORK_IDENTIFIER "framework.test"
    VERSION "1.0"
    SOVERSION 1.0
  )
