cmake_minimum_required(VERSION 2.8.12)
project(pywraptestlib)
#
# Using submodules -
# https://github.com/RosettaCommons/pybind11.git
#
find_package(PythonInterp)
find_package(PythonLibs)
include_directories(${PYTHON_INCLUDE_DIRS})
#
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

IF(NOT DEFINED ENV{RUN_FROM_DISUTILS})
    set(CMAKE_VERBOSE_MAKEFILE ON)
ENDIF()
#
#
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
    # require at least gcc 4.8
    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
        message(FATAL_ERROR "GCC version must be at least 4.8!")
    endif()
    set(warnings " -Wall ")
    set(WRAPPER_DIR_EXT "Linux")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
     if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.1)
        message(FATAL_ERROR "Clang version must be at least 8.1!")
    endif()
    #set(warnings "-Wall -Wextra -Werror")
    # set(warnings " -Wall -Wno-unused-variable")
    set(warnings " -Wall -Wno-unused-variable -Wno-deprecated-declarations -Wno-register")
    set(WRAPPER_DIR_EXT "Darwin")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
    message(FATAL_ERROR "No current support for MSVC!")
    set(warnings "/W4 /WX /EHsc")
endif()
#
set(mydefines " -DBIG_ENDIAN_PLATFORM  -DHAVE_STRCASECMP -DINCL_TEMPLATE_SRC -DHAVE_PLACEMENT_NEW  ")
if (NOT CONFIGURED_ONCE)
    set(CMAKE_CXX_FLAGS "${warnings} ${mydefines}  -fno-common -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11  -flto "
        CACHE STRING "Flags used by the compiler during all build types." FORCE)
    set(CMAKE_C_FLAGS   "${warnings} ${mydefines} -FPIC"
        CACHE STRING "Flags used by the compiler during all build types." FORCE)
endif()

message(STATUS "Compiler flags " ${CMAKE_CXX_FLAGS})

#
# ---------------------------------------------------------------
#   WHERE AM I RUNNING
#
message(STATUS "---CMAKE MODULE PATH - " ${CMAKE_MODULE_PATH})
message(STATUS "---CMAKE SOURCE DIR  - " ${CMAKE_SOURCE_DIR})
message(STATUS "---CMAKE PROJECT DIR - " ${PROJECT_SOURCE_DIR})
# ---------------------------------------------------------------
#
set(BUILD_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/src")
set(BUILD_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include")
set(BUILD_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/bin")
set(BUILD_LIBRARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/lib")
#
#  Set the source module paths ---
#
set(WRAP_DIR_1      "modules/cpp-wrapper-gen/src")
set(WRAP_INCL_DIR_1 "modules/cpp-wrapper-gen/include-binder")
#
#set(WRAP_INCL_BINDER_DIR_1 "modules/cpp-wrapper-gen/binder-mappers")

set(SOURCE_DIR_1 "modules/cpp-stl-example-vec-string/src")
set(INCLUDE_DIR_1 "modules/cpp-stl-example-vec-string/include")
#

# ---------------------------------------------------------------
#
file(GLOB INC_1 "${INCLUDE_DIR_1}/*.h")
file(COPY ${INC_1} DESTINATION include)
#
#
file(GLOB INC_8 "${WRAP_INCL_BINDER_DIR_1}/*.hpp")
file(COPY ${INC_8} DESTINATION include)
#
file(MAKE_DIRECTORY ${BUILD_SOURCE_DIR})
file(MAKE_DIRECTORY ${BUILD_INCLUDE_DIR})
file(MAKE_DIRECTORY ${BUILD_BINARY_DIR})
file(MAKE_DIRECTORY ${BUILD_LIBRARY_DIR})
#
IF(NOT DEFINED ENV{RUN_FROM_DISUTILS})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY  ${BUILD_LIBRARY_DIR})
ENDIF()
#
#set(LIBRARY_OUTPUT_DIRECTORY        ${BUILD_LIBRARY_DIR})
#set(ARCHIVE_OUTPUT_DIRECTORY        ${BUILD_LIBRARY_DIR})
#
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY  ${BUILD_LIBRARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY  ${BUILD_BINARY_DIR})
#
# ---------------------------------------------------------------
install(DIRECTORY ${INCLUDE_DIR_1} DESTINATION include FILES_MATCHING PATTERN "*.h")
#
#
#  Build 'common' library
set(SOURCES_1
         "${SOURCE_DIR_1}/StringA.C"
         "${SOURCE_DIR_1}/StringB.C"
         "${SOURCE_DIR_1}/StringC.C"
         "${SOURCE_DIR_1}/Exceptions.C"
         )


add_library("stringlibA" OBJECT ${SOURCES_1})
target_include_directories("stringlibA" PUBLIC ${BUILD_INCLUDE_DIR})

#
# Combine the all object into consolidated library  'cpplib-all'
#
add_library("cpplib-all" STATIC
            "$<TARGET_OBJECTS:stringlibA>"
            )
#
#  -- Build a test application binary to verify the completeness of the library--
#
#add_executable("test_1" "${SOURCE_TEST_DIR}/CifReader.C")
#target_link_libraries("test_1" "testlib-all")
#target_include_directories("test_1" PUBLIC ${BUILD_INCLUDE_DIR})
#
#  -- Build a wrapper library  --
#
add_subdirectory("modules/pybind11")
#
file(GLOB_RECURSE WRAP_SRC_FILES "${WRAP_DIR_1}/*.cpp")
#
pybind11_add_module("pywraptestlib" ${WRAP_SRC_FILES})
target_include_directories("pywraptestlib" PUBLIC ${BUILD_INCLUDE_DIR} )
target_link_libraries("pywraptestlib" PUBLIC "cpplib-all")
#
IF(NOT DEFINED ENV{RUN_FROM_DISUTILS})
    message(STATUS "Source directory 1 " ${SOURCE_DIR_1})
    message(STATUS "Include directory 1 " ${INCLUDE_DIR_1})
    message(STATUS "SOURCE_1 LIST " ${SOURCES_1})
    message(STATUS, "---WRAPPER SOURCE ${WRAP_DIR_1} INITIAL FILE LIST " ${WRAP_SRC_FILES})
    message(STATUS, "---EXCLUDING FILE " ${EXC_FILES})
    message(STATUS, "---WRAPPER SOURCE FINAL FILE LIST " ${WRAP_SRC_FILES})
ENDIF()
#
message(STATUS, "---ALL DONE WITH CMAKE")
#
