# SPDX-FileCopyrightText: Copyright 2024 Open Mobile Platform LLC <community@omp.ru>
# SPDX-FileCopyrightText: Copyright 2020 Simon Binder
# SPDX-License-Identifier: BSD-3-Clause

cmake_minimum_required(VERSION 3.10)

set(PROJECT_NAME sqlite3_lib)
set(PLUGIN_NAME sqlite3_flutter_libs)
project(${PROJECT_NAME} LANGUAGES C)


include(FetchContent)
set(SQL_LIB_NAME sqlite3_lib)
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
  # cmake 3.24.0 added the `DOWNLOAD_EXTRACT_TIMESTAMP` and prints an ugly warning when
  # the default is used, so override it to the recommended behavior.
  # We can't really ask users to use a cmake that recent, so there's this if here.
  FetchContent_Declare(
    ${SQL_LIB_NAME}
    URL https://sqlite.org/2024/sqlite-autoconf-3460000.tar.gz
    DOWNLOAD_EXTRACT_TIMESTAMP NEW
  )
else()
  FetchContent_Declare(
    ${SQL_LIB_NAME}
    URL https://sqlite.org/2024/sqlite-autoconf-3460000.tar.gz
  )
endif()
FetchContent_MakeAvailable(${SQL_LIB_NAME})


add_library(${PLUGIN_NAME} SHARED
  "${sqlite3_lib_SOURCE_DIR}/sqlite3.c"
)

target_compile_definitions(${PLUGIN_NAME} PUBLIC DART_SHARED_LIB)
target_include_directories(${PLUGIN_NAME} PRIVATE
  "${CMAKE_CURRENT_SOURCE_DIR}/${sqlite3_lib_SOURCE_DIR}"
)

set_target_properties(${PLUGIN_NAME} PROPERTIES
  PUBLIC_HEADER "${sqlite3_lib_SOURCE_DIR}/sqlite3.h"
  OUTPUT_NAME "sqlite3"
)

# Note: Keep in sync with https://github.com/simolus3/sqlite-native-libraries/blob/master/sqlite3-native-library/cpp/CMakeLists.txt
target_compile_definitions(${PLUGIN_NAME} PRIVATE
  SQLITE_ENABLE_DBSTAT_VTAB
  SQLITE_ENABLE_FTS5
  SQLITE_ENABLE_RTREE
  SQLITE_DQS=0
  SQLITE_DEFAULT_MEMSTATUS=0
  SQLITE_TEMP_STORE=2
  SQLITE_MAX_EXPR_DEPTH=0
  SQLITE_STRICT_SUBTYPE=1
  SQLITE_OMIT_AUTHORIZATION
  SQLITE_OMIT_DECLTYPE
  SQLITE_OMIT_DEPRECATED
  SQLITE_OMIT_PROGRESS_CALLBACK
  SQLITE_OMIT_SHARED_CACHE
  SQLITE_OMIT_TCL_VARIABLE
  SQLITE_OMIT_TRACE
  SQLITE_USE_ALLOCA
  SQLITE_UNTESTABLE
  SQLITE_HAVE_ISNAN
  SQLITE_HAVE_LOCALTIME_R
  SQLITE_HAVE_LOCALTIME_S
  SQLITE_HAVE_MALLOC_USABLE_SIZE
  SQLITE_HAVE_STRCHRNUL
)
