From df38424a0241cf1798e8fac42cb13414a864e478 Mon Sep 17 00:00:00 2001 From: Elijah Quartey Date: Tue, 29 Oct 2024 08:39:25 -0500 Subject: [PATCH] fix(common): db_common windows sqlite3 collision (#5481) --- .../amplify_db_common/example/pubspec.yaml | 4 + .../amplify_db_common/windows/CMakeLists.txt | 108 ++++++++++-------- .../amplify_db_common_dart/pubspec.yaml | 2 +- pubspec.yaml | 2 +- 4 files changed, 66 insertions(+), 50 deletions(-) diff --git a/packages/common/amplify_db_common/example/pubspec.yaml b/packages/common/amplify_db_common/example/pubspec.yaml index 52a0bd554f..aee1e97d19 100644 --- a/packages/common/amplify_db_common/example/pubspec.yaml +++ b/packages/common/amplify_db_common/example/pubspec.yaml @@ -11,6 +11,10 @@ dependencies: drift: ">=2.18.0 <2.19.0" flutter: sdk: flutter + # Unused in example app, rather included to validate + # windows app will build when there is a downstream dependency on sqlite3 + # https://github.com/aws-amplify/amplify-flutter/issues/5477 + sqlite3: ">=2.0.0 <2.4.7" dev_dependencies: amplify_lints: ^2.0.0 diff --git a/packages/common/amplify_db_common/windows/CMakeLists.txt b/packages/common/amplify_db_common/windows/CMakeLists.txt index a5de5d3f88..b9788c4158 100644 --- a/packages/common/amplify_db_common/windows/CMakeLists.txt +++ b/packages/common/amplify_db_common/windows/CMakeLists.txt @@ -16,15 +16,14 @@ add_library(${PLUGIN_NAME} SHARED "amplify_db_common_plugin.cpp" ) -### +# ## # Below here, keep in sync with: https://github.com/simolus3/sqlite3.dart/blob/main/sqlite3_flutter_libs/windows/CMakeLists.txt -### +# ## # Essentially, the idea of this build script is to compile a sqlite3.dll # and make Fluter bundle that with the final app. # It looks like we can't avoid building a sqlite3_flutter_libs.dll too, # but that's not on me. - apply_standard_settings(${PLUGIN_NAME}) set_target_properties(${PLUGIN_NAME} PROPERTIES CXX_VISIBILITY_PRESET hidden) @@ -34,57 +33,70 @@ target_include_directories(${PLUGIN_NAME} INTERFACE target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin) include(FetchContent) -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( - sqlite3 - URL https://sqlite.org/2023/sqlite-autoconf-3430000.tar.gz - DOWNLOAD_EXTRACT_TIMESTAMP NEW + +# Only add the sqlite3 library if it hasn't been defined already. +if(NOT TARGET sqlite3) + 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( + sqlite3 + URL https://sqlite.org/2023/sqlite-autoconf-3430000.tar.gz + DOWNLOAD_EXTRACT_TIMESTAMP NEW + ) + else() + FetchContent_Declare( + sqlite3 + URL https://sqlite.org/2023/sqlite-autoconf-3430000.tar.gz + ) + endif() + + FetchContent_MakeAvailable(sqlite3) + + # Define the sqlite3 library only if it wasn't already defined. + add_library(sqlite3 SHARED "sqlite3_flutter.c") + + target_include_directories(sqlite3 PRIVATE "${sqlite3_SOURCE_DIR}") + target_compile_options(sqlite3 PRIVATE "$<$>:-O2>" "/w") + + # Note: Keep in sync with https://github.com/simolus3/sqlite-native-libraries/blob/master/sqlite3-native-library/cpp/CMakeLists.txt + target_compile_definitions(sqlite3 PRIVATE + SQLITE_ENABLE_FTS5 + SQLITE_ENABLE_RTREE + SQLITE_DQS=0 + SQLITE_DEFAULT_MEMSTATUS=0 + SQLITE_TEMP_STORE=2 + SQLITE_MAX_EXPR_DEPTH=0 + SQLITE_OMIT_AUTHORIZATION + SQLITE_OMIT_DECLTYPE + SQLITE_OMIT_DEPRECATED + SQLITE_OMIT_GET_TABLE + SQLITE_OMIT_LOAD_EXTENSION + 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 ) + + # Create an alias for this version of sqlite3. + add_library(sqlite3_amplify_db_common ALIAS sqlite3) else() - FetchContent_Declare( - sqlite3 - URL https://sqlite.org/2023/sqlite-autoconf-3430000.tar.gz - ) + # If sqlite3 already exists, create an alias for amplify plugin to avoid duplication. + add_library(sqlite3_amplify_db_common ALIAS sqlite3) endif() -FetchContent_MakeAvailable(sqlite3) - -add_library(sqlite3 SHARED "sqlite3_flutter.c") -target_include_directories(sqlite3 PRIVATE "${sqlite3_SOURCE_DIR}") -target_compile_options(sqlite3 PRIVATE "$<$>:-O2>" "/w") - -# Note: Keep in sync with https://github.com/simolus3/sqlite-native-libraries/blob/master/sqlite3-native-library/cpp/CMakeLists.txt -target_compile_definitions(sqlite3 PRIVATE - SQLITE_ENABLE_FTS5 - SQLITE_ENABLE_RTREE - SQLITE_DQS=0 - SQLITE_DEFAULT_MEMSTATUS=0 - SQLITE_TEMP_STORE=2 - SQLITE_MAX_EXPR_DEPTH=0 - SQLITE_OMIT_AUTHORIZATION - SQLITE_OMIT_DECLTYPE - SQLITE_OMIT_DEPRECATED - SQLITE_OMIT_GET_TABLE - SQLITE_OMIT_LOAD_EXTENSION - 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 -) +target_link_libraries(${PLUGIN_NAME} PRIVATE sqlite3_amplify_db_common) -# Ensure sqlite3 actually gets build -add_dependencies(${PLUGIN_NAME} sqlite3) +add_dependencies(${PLUGIN_NAME} sqlite3_amplify_db_common) -# List of absolute paths to libraries that should be bundled with the plugin +# List of absolute paths to libraries that should be bundled with the plugin. set(amplify_db_common_bundled_libraries - "$" + "$" PARENT_SCOPE ) diff --git a/packages/common/amplify_db_common_dart/pubspec.yaml b/packages/common/amplify_db_common_dart/pubspec.yaml index 7ede684144..d6e0b887c1 100644 --- a/packages/common/amplify_db_common_dart/pubspec.yaml +++ b/packages/common/amplify_db_common_dart/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: drift: ">=2.18.0 <2.19.0" meta: ^1.7.0 path: ">=1.8.0 <2.0.0" - sqlite3: ">=2.0.0 <2.4.3" + sqlite3: ">=2.0.0 <2.4.7" dev_dependencies: amplify_lints: ">=3.1.0 <3.2.0" diff --git a/pubspec.yaml b/pubspec.yaml index 392888e035..298afd11e2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,7 +39,7 @@ dependencies: oauth2: ^2.0.2 package_info_plus: ^8.0.0 pigeon: ^11.0.0 - sqlite3: ">=2.0.0 <2.4.3" + sqlite3: ">=2.0.0 <2.4.7" source_gen: ^1.3.2 stack_trace: ^1.10.0 uuid: ">=3.0.6 <5.0.0"