CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
project(wxsqlite3)

include(CheckLibraryExists)
include(CheckCCompilerFlag)

set(sqlite3_SOURCES
wxsqlite/src/sqlite3mc_amalgamation.c
)

function(add_c_compiler_flags var)
  foreach(flag ${ARGN})
    string(REGEX REPLACE "[^a-zA-Z0-9]+" "_" flag_var "CFLAG_${flag}")
    check_c_compiler_flag("${flag}" ${flag_var})
    if(${flag_var})
      set(${var} "${${var}} ${flag}")
    endif()
  endforeach()
  set(${var} "${${var}}" PARENT_SCOPE)
endfunction()

add_c_compiler_flags(CMAKE_C_FLAGS
  -msse4.2
  -maes
)

add_library(sqlite3 STATIC ${sqlite3_SOURCES})
target_include_directories(sqlite3 SYSTEM PUBLIC wxsqlite3/src)

if(NOT WIN32)
check_library_exists(dl dlopen "" COMPILER_HAS_LIBDL)
check_library_exists(pthread pthread_create "" COMPILER_HAS_LIBPTHREAD)
check_library_exists(m acos "" COMPILER_HAS_LIBM)
if(COMPILER_HAS_LIBDL)
list(APPEND NIX_LIBRARIES dl)
endif(COMPILER_HAS_LIBDL)
if(COMPILER_HAS_LIBPTHREAD)
list(APPEND NIX_LIBRARIES pthread)
endif(COMPILER_HAS_LIBPTHREAD)
if(COMPILER_HAS_LIBM)
list(APPEND NIX_LIBRARIES m)
endif(COMPILER_HAS_LIBM)
target_link_libraries(sqlite3 ${NIX_LIBRARIES})
endif(NOT WIN32)

set_property(TARGET sqlite3 PROPERTY C_STANDARD 11)
target_compile_definitions(sqlite3
PUBLIC
    SQLITE_THREADSAFE=1
    SQLITE_DQS=0
    SQLITE_MAX_ATTACHED=10
    SQLITE_ENABLE_EXPLAIN_COMMENTS=1
    SQLITE_SOUNDEX=1
    SQLITE_ENABLE_COLUMN_METADATA=1
    SQLITE_SECURE_DELETE=1
    SQLITE_ENABLE_DESERIALIZE=1
    SQLITE_ENABLE_FTS3=1
    SQLITE_ENABLE_FTS3_PARENTHESIS=1
    SQLITE_ENABLE_FTS4=1
    SQLITE_ENABLE_FTS5=1
    SQLITE_ENABLE_RTREE=1
    SQLITE_ENABLE_GEOPOLY=1
    SQLITE_CORE=1
    SQLITE_ENABLE_EXTFUNC=1
    SQLITE_ENABLE_MATH_FUNCTIONS=1
    SQLITE_ENABLE_CSV=1
    SQLITE_ENABLE_VSV=1
    SQLITE_ENABLE_SHA3=1
    SQLITE_ENABLE_CARRAY=1
    SQLITE_ENABLE_FILEIO=1
    SQLITE_ENABLE_SERIES=1
    SQLITE_ENABLE_UUID=1
    SQLITE_ENABLE_REGEXP=1
    SQLITE_TEMP_STORE=2
    SQLITE_USE_URI=1
    SQLITE_USER_AUTHENTICATION=1
)

set(wxsqlite3_SOURCES
wxsqlite/src/wxsqlite3.cpp
)

add_library(wxsqlite3 STATIC ${wxsqlite3_SOURCES})
target_include_directories(wxsqlite3 SYSTEM PUBLIC wxsqlite/include)
target_link_libraries(wxsqlite3 PUBLIC ${wxWidgets_LIBRARIES} sqlite3)
target_compile_definitions(wxsqlite3
PUBLIC
    SQLITE_ENABLE_COLUMN_METADATA=1
    SQLITE_USER_AUTHENTICATION=1
)

include_directories(
    ./wxsqlite/include
    ./wxsqlite/src
)

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
set(WXSQLITE3_LIBRARIES wxsqlite3 sqlite3 CACHE INTERNAL "")
set(WXSQLITE3_INCLUDE_DIRS ${dirs} CACHE INTERNAL "")


