Skip to content

Commit a5825bc

Browse files
kringCopilot
andcommitted
Add sqlite3 overlay port pinned to version 3.51.3.
SQLite 3.53.0 intentionally dropped Windows RT / UWP support (see item 12 in the 3.53.0 changelog: https://www.sqlite.org/changes.html). The stock vcpkg sqlite3 port at commit 56bb2411 uses 3.53.0, which fails to compile when targeting arm64-uwp-unity because several Win32 APIs required by the sqlite3.c Win32 VFS (AreFileApisANSI, CreateFileA, CreateFileW, GetFileSize, HeapValidate) are not available when WINAPI_FAMILY=WINAPI_FAMILY_APP. This overlay pins sqlite3 to version 3.51.3, the latest version with UWP / WinRT support. The UWP fix relies on SQLITE_OS_WINRT=1, which is injected via sqlite3-vcpkg-config.h when VCPKG_TARGET_IS_UWP is set. This define exists and is functional in 3.51.3 but was removed in 3.53.0. All other port files (patches, CMakeLists.txt, config headers, etc.) are copied unchanged from the stock vcpkg port at commit 56bb2411. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 2e4857c commit a5825bc

10 files changed

Lines changed: 441 additions & 0 deletions
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
3+
project(sqlite3 C CXX)
4+
5+
option(WITH_ZLIB "Build sqlite3 with zlib support" OFF)
6+
option(SQLITE3_SKIP_TOOLS "Disable build sqlite3 executable" OFF)
7+
8+
set(PKGCONFIG_LIBS_PRIVATE "")
9+
set(PKGCONFIG_REQUIRES_PRIVATE "")
10+
11+
add_library(sqlite3 sqlite3.c sqlite3.rc)
12+
13+
target_include_directories(sqlite3 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}> $<INSTALL_INTERFACE:include>)
14+
15+
target_compile_definitions(
16+
sqlite3
17+
PRIVATE
18+
$<$<CONFIG:Debug>:SQLITE_DEBUG=1>
19+
$<$<CONFIG:Debug>:SQLITE_ENABLE_SELECTTRACE>
20+
$<$<CONFIG:Debug>:SQLITE_ENABLE_WHERETRACE>
21+
$<$<COMPILE_LANGUAGE:RC>:RC_VERONLY>
22+
)
23+
24+
if (BUILD_SHARED_LIBS)
25+
if (WIN32)
26+
target_compile_definitions(sqlite3 PRIVATE "SQLITE_API=__declspec(dllexport)")
27+
else()
28+
target_compile_definitions(sqlite3 PRIVATE "SQLITE_API=__attribute__((visibility(\"default\")))")
29+
endif()
30+
endif()
31+
32+
if (NOT WIN32)
33+
find_package(Threads REQUIRED)
34+
target_link_libraries(sqlite3 PRIVATE Threads::Threads ${CMAKE_DL_LIBS})
35+
string(APPEND PKGCONFIG_LIBS_PRIVATE " -pthread")
36+
foreach(LIB IN LISTS CMAKE_DL_LIBS)
37+
string(APPEND PKGCONFIG_LIBS_PRIVATE " -l${LIB}")
38+
endforeach()
39+
40+
if(SQLITE_ENABLE_FTS5 OR SQLITE_ENABLE_MATH_FUNCTIONS)
41+
find_library(HAVE_LIBM m)
42+
if(HAVE_LIBM)
43+
target_link_libraries(sqlite3 PRIVATE m)
44+
string(APPEND PKGCONFIG_LIBS_PRIVATE " -lm")
45+
endif()
46+
endif()
47+
endif()
48+
49+
if(SQLITE_ENABLE_ICU)
50+
find_package(ICU COMPONENTS uc i18n REQUIRED)
51+
target_link_libraries(sqlite3 PRIVATE ICU::uc ICU::i18n)
52+
53+
string(APPEND PKGCONFIG_REQUIRES_PRIVATE " icu-uc icu-i18n")
54+
endif()
55+
56+
if(NOT SQLITE3_SKIP_TOOLS)
57+
add_executable(sqlite3-bin shell.c)
58+
set_target_properties(sqlite3-bin PROPERTIES
59+
RUNTIME_OUTPUT_NAME sqlite3
60+
)
61+
62+
target_link_libraries(sqlite3-bin PRIVATE sqlite3)
63+
if (WITH_ZLIB)
64+
find_package(ZLIB REQUIRED)
65+
target_link_libraries(sqlite3-bin PRIVATE ZLIB::ZLIB)
66+
target_compile_definitions(sqlite3-bin PRIVATE SQLITE_HAVE_ZLIB)
67+
endif()
68+
69+
find_library(HAVE_LIBM m)
70+
if(HAVE_LIBM)
71+
target_link_libraries(sqlite3-bin PRIVATE m)
72+
endif()
73+
74+
install(TARGETS sqlite3-bin
75+
RUNTIME DESTINATION bin
76+
LIBRARY DESTINATION lib
77+
ARCHIVE DESTINATION lib
78+
)
79+
endif()
80+
81+
install(
82+
TARGETS sqlite3
83+
EXPORT unofficial-sqlite3-targets
84+
RUNTIME DESTINATION bin
85+
LIBRARY DESTINATION lib
86+
ARCHIVE DESTINATION lib
87+
)
88+
89+
install(FILES sqlite3.h sqlite3ext.h sqlite3-vcpkg-config.h DESTINATION include CONFIGURATIONS Release)
90+
install(EXPORT unofficial-sqlite3-targets NAMESPACE unofficial::sqlite3:: FILE unofficial-sqlite3-targets.cmake DESTINATION share/unofficial-sqlite3)
91+
92+
configure_file(sqlite3.pc.in sqlite3.pc @ONLY)
93+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sqlite3.pc" DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
diff --git a/sqlite3.c b/sqlite3.c
2+
index 80433f6..cfd213b 100644
3+
--- a/sqlite3.c
4+
+++ b/sqlite3.c
5+
@@ -25,6 +25,7 @@
6+
#ifndef SQLITE_AMALGAMATION
7+
#define SQLITE_CORE 1
8+
#define SQLITE_AMALGAMATION 1
9+
+#include "sqlite3-vcpkg-config.h"
10+
#ifndef SQLITE_PRIVATE
11+
# define SQLITE_PRIVATE static
12+
#endif
13+
diff --git a/sqlite3.h b/sqlite3.h
14+
index 4ed8428..f1cf6d4 100644
15+
--- a/sqlite3.h
16+
+++ b/sqlite3.h
17+
@@ -32,6 +32,7 @@
18+
*/
19+
#ifndef SQLITE3_H
20+
#define SQLITE3_H
21+
+#include "sqlite3-vcpkg-config.h"
22+
#include <stdarg.h> /* Needed for the definition of va_list */
23+
24+
/*
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
diff --git a/shell.c b/shell.c
2+
index 10d8cc1..99f37a5 100644
3+
--- a/shell.c
4+
+++ b/shell.c
5+
@@ -316,7 +316,11 @@ static int hasTimer(void){
6+
*/
7+
hProcess = GetCurrentProcess();
8+
if( hProcess ){
9+
+#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
10+
HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll"));
11+
+#else
12+
+ HINSTANCE hinstLib = LoadPackagedLibrary(TEXT("Kernel32.dll"), 0);
13+
+#endif
14+
if( NULL != hinstLib ){
15+
getProcessTimesAddr =
16+
(GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes");
17+
@@ -2437,10 +2441,16 @@ static int writeFile(
18+
if( zUnicodeName==0 ){
19+
return 1;
20+
}
21+
+#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
22+
hFile = CreateFileW(
23+
zUnicodeName, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
24+
FILE_FLAG_BACKUP_SEMANTICS, NULL
25+
);
26+
+#else
27+
+ hFile = CreateFile2(
28+
+ zUnicodeName, FILE_WRITE_ATTRIBUTES, 0, OPEN_EXISTING, NULL
29+
+ );
30+
+#endif
31+
sqlite3_free(zUnicodeName);
32+
if( hFile!=INVALID_HANDLE_VALUE ){
33+
BOOL bResult = SetFileTime(hFile, NULL, &lastAccess, &lastWrite);
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# This is based on the stock vcpkg sqlite3 port from
2+
# https://github.com/microsoft/vcpkg/tree/56bb2411609227288b70117ead2c47585ba07713/ports/sqlite3
3+
# but pinned to version 3.51.3 because SQLite 3.53.0 intentionally dropped
4+
# Windows RT / UWP support (see SQLite 3.53.0 changelog, item 12), which
5+
# breaks builds targeting arm64-uwp-unity (WINAPI_FAMILY_APP).
6+
7+
string(REGEX REPLACE "^([0-9]+)[.]([0-9]+)[.]([0-9]+)[.]([0-9]+)" "\\1,0\\2,0\\3,0\\4," SQLITE_VERSION "${VERSION}.0")
8+
string(REGEX REPLACE "^([0-9]+),0*([0-9][0-9]),0*([0-9][0-9]),0*([0-9][0-9])," "\\1\\2\\3\\4" SQLITE_VERSION "${SQLITE_VERSION}")
9+
10+
vcpkg_download_distfile(ARCHIVE
11+
URLS "https://sqlite.org/2026/sqlite-autoconf-${SQLITE_VERSION}.tar.gz"
12+
FILENAME "sqlite-autoconf-${SQLITE_VERSION}.tar.gz"
13+
SHA512 3c6fc2fbbb9d1315ac7903cb76e4f8e55335cc7439558145d550ed4cc29ddfb7dbd9af9c3153409582d56d6ce3550e9cb07462211e1eca58bfff9c6484a9b8de
14+
)
15+
16+
vcpkg_extract_source_archive(
17+
SOURCE_PATH
18+
ARCHIVE "${ARCHIVE}"
19+
PATCHES
20+
fix-arm-uwp.patch
21+
add-config-include.patch
22+
)
23+
24+
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
25+
if(VCPKG_TARGET_IS_WINDOWS)
26+
set(SQLITE_API "__declspec(dllimport)")
27+
else()
28+
set(SQLITE_API "__attribute__((visibility(\"default\")))")
29+
endif()
30+
else()
31+
set(SQLITE_API "")
32+
endif()
33+
34+
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
35+
FEATURES
36+
fts5 SQLITE_ENABLE_FTS5
37+
math SQLITE_ENABLE_MATH_FUNCTIONS
38+
zlib WITH_ZLIB
39+
unicode SQLITE_ENABLE_ICU
40+
INVERTED_FEATURES
41+
tool SQLITE3_SKIP_TOOLS
42+
)
43+
vcpkg_check_features(OUT_FEATURE_OPTIONS none # only using the script-mode side-effects
44+
FEATURES
45+
dbstat SQLITE_ENABLE_DBSTAT_VTAB
46+
dbpage-vtab SQLITE_ENABLE_DBPAGE_VTAB
47+
fts3 SQLITE_ENABLE_FTS3
48+
fts4 SQLITE_ENABLE_FTS4
49+
memsys3 SQLITE_ENABLE_MEMSYS3
50+
memsys5 SQLITE_ENABLE_MEMSYS5
51+
limit SQLITE_ENABLE_UPDATE_DELETE_LIMIT
52+
rtree SQLITE_ENABLE_RTREE
53+
session SQLITE_ENABLE_SESSION
54+
session SQLITE_ENABLE_PREUPDATE_HOOK
55+
snapshot SQLITE_ENABLE_SNAPSHOT
56+
omit-load-extension SQLITE_OMIT_LOAD_EXTENSION
57+
geopoly SQLITE_ENABLE_GEOPOLY
58+
soundex SQLITE_SOUNDEX
59+
INVERTED_FEATURES
60+
json1 SQLITE_OMIT_JSON
61+
)
62+
63+
if(VCPKG_TARGET_IS_WINDOWS)
64+
set(SQLITE_OS_WIN "1")
65+
if(VCPKG_TARGET_IS_UWP)
66+
set(SQLITE_OS_WINRT "1")
67+
endif()
68+
else()
69+
set(SQLITE_OS_UNIX "1")
70+
endif()
71+
72+
file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" DESTINATION "${SOURCE_PATH}")
73+
file(COPY "${CMAKE_CURRENT_LIST_DIR}/sqlite3.pc.in" DESTINATION "${SOURCE_PATH}")
74+
configure_file("${CMAKE_CURRENT_LIST_DIR}/sqlite3-vcpkg-config.h.in" "${SOURCE_PATH}/sqlite3-vcpkg-config.h" @ONLY)
75+
76+
vcpkg_cmake_configure(
77+
SOURCE_PATH "${SOURCE_PATH}"
78+
OPTIONS
79+
${FEATURE_OPTIONS}
80+
-DPKGCONFIG_VERSION=${VERSION}
81+
OPTIONS_DEBUG
82+
-DSQLITE3_SKIP_TOOLS=ON
83+
MAYBE_UNUSED_VARIABLES
84+
SQLITE_ENABLE_FTS5
85+
SQLITE_ENABLE_MATH_FUNCTIONS
86+
)
87+
88+
vcpkg_cmake_install()
89+
vcpkg_cmake_config_fixup(PACKAGE_NAME unofficial-${PORT} CONFIG_PATH share/unofficial-${PORT})
90+
91+
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
92+
93+
if("tool" IN_LIST FEATURES)
94+
vcpkg_copy_tools(TOOL_NAMES sqlite3 DESTINATION "${CURRENT_PACKAGES_DIR}/tools" AUTO_CLEAN)
95+
endif()
96+
97+
configure_file(
98+
"${CMAKE_CURRENT_LIST_DIR}/sqlite3-config.in.cmake"
99+
"${CURRENT_PACKAGES_DIR}/share/unofficial-${PORT}/unofficial-sqlite3-config.cmake"
100+
@ONLY
101+
)
102+
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
103+
configure_file("${CURRENT_PORT_DIR}/vcpkg-cmake-wrapper.cmake" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY)
104+
endif()
105+
106+
vcpkg_fixup_pkgconfig()
107+
vcpkg_copy_pdbs()
108+
109+
file(WRITE "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" "SQLite is in the Public Domain.\nhttp://www.sqlite.org/copyright.html\n")
110+
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
include(CMakeFindDependencyMacro)
3+
if(NOT WIN32)
4+
find_dependency(Threads)
5+
endif()
6+
if("@VCPKG_LIBRARY_LINKAGE@" STREQUAL "static")
7+
find_package(ICU COMPONENTS uc i18n)
8+
endif()
9+
10+
include(${CMAKE_CURRENT_LIST_DIR}/unofficial-sqlite3-targets.cmake)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* This file was generated to inject vcpkg feature selections into the installed copy of
3+
* sqlite so that consumers need not get the values from pkgconfig or CMake configs.
4+
*
5+
* No include guard: intentionally reuses the include guard from sqlite3.h.
6+
*/
7+
8+
#ifndef SQLITE_API
9+
#cmakedefine SQLITE_API @SQLITE_API@
10+
#endif
11+
12+
#define SQLITE_ENABLE_UNLOCK_NOTIFY 1
13+
#cmakedefine SQLITE_ENABLE_FTS3
14+
#cmakedefine SQLITE_ENABLE_FTS4
15+
#cmakedefine SQLITE_ENABLE_FTS5
16+
#cmakedefine SQLITE_ENABLE_MEMSYS3
17+
#cmakedefine SQLITE_ENABLE_MEMSYS5
18+
#cmakedefine SQLITE_ENABLE_MATH_FUNCTIONS
19+
#cmakedefine SQLITE_ENABLE_UPDATE_DELETE_LIMIT
20+
#cmakedefine SQLITE_ENABLE_DBPAGE_VTAB
21+
#cmakedefine SQLITE_ENABLE_RTREE
22+
#cmakedefine SQLITE_ENABLE_SESSION
23+
#cmakedefine SQLITE_ENABLE_SNAPSHOT
24+
#cmakedefine SQLITE_ENABLE_PREUPDATE_HOOK
25+
#cmakedefine SQLITE_OMIT_LOAD_EXTENSION
26+
#cmakedefine SQLITE_ENABLE_GEOPOLY
27+
#cmakedefine SQLITE_OMIT_JSON
28+
#cmakedefine SQLITE_OS_WIN @SQLITE_OS_WIN@
29+
#cmakedefine SQLITE_OS_WINRT @SQLITE_OS_WINRT@
30+
#define SQLITE_ENABLE_COLUMN_METADATA 1
31+
#cmakedefine SQLITE_OS_UNIX @SQLITE_OS_UNIX@
32+
#cmakedefine SQLITE_ENABLE_DBSTAT_VTAB
33+
#cmakedefine SQLITE_ENABLE_ICU
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
exec_prefix=${prefix}
3+
libdir=${prefix}/lib
4+
includedir=${prefix}/include
5+
6+
Name: SQLite
7+
Description: SQL database engine
8+
Version: @PKGCONFIG_VERSION@
9+
Libs: -L${libdir} -lsqlite3
10+
Libs.private: @PKGCONFIG_LIBS_PRIVATE@
11+
Requires.private: @PKGCONFIG_REQUIRES_PRIVATE@
12+
Cflags: -I${includedir}

native~/vcpkg/ports/sqlite3/usage

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
sqlite3 provides pkgconfig bindings.
2+
sqlite3 provides CMake targets:
3+
4+
find_package(unofficial-sqlite3 CONFIG REQUIRED)
5+
target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
string(COMPARE EQUAL "${SQLite3_LIBRARIES}" "" z_vcpkg_sqlite3_fixup_libraries)
2+
_find_package(${ARGS})
3+
if(SQLite3_FOUND)
4+
set(z_vcpkg_sqlite3_libraries "")
5+
set(z_vcpkg_sqlite3_link_libs "")
6+
if("@SQLITE_ENABLE_ICU@")
7+
find_package(ICU COMPONENTS uc i18n)
8+
if(ICU_FOUND)
9+
list(APPEND z_vcpkg_sqlite3_libraries ${ICU_LIBRARIES})
10+
list(APPEND z_vcpkg_sqlite3_link_libs $<LINK_ONLY:ICU::uc> $<LINK_ONLY:ICU::i18n>)
11+
endif()
12+
endif()
13+
if(NOT WIN32)
14+
find_package(Threads)
15+
if(Threads_FOUND)
16+
list(APPEND z_vcpkg_sqlite3_libraries ${CMAKE_THREAD_LIBS_INIT})
17+
list(APPEND z_vcpkg_sqlite3_link_libs $<LINK_ONLY:Threads::Threads>)
18+
endif()
19+
list(APPEND z_vcpkg_sqlite3_libraries ${CMAKE_DL_LIBS})
20+
list(APPEND z_vcpkg_sqlite3_link_libs ${CMAKE_DL_LIBS})
21+
if("@SQLITE_ENABLE_FTS5@" OR "@SQLITE_ENABLE_MATH_FUNCTIONS@")
22+
find_library(z_vcpkg_sqlite3_have_libm m)
23+
if(z_vcpkg_sqlite3_have_libm)
24+
list(APPEND z_vcpkg_sqlite3_libraries m)
25+
list(APPEND z_vcpkg_sqlite3_link_libs $<LINK_ONLY:m>)
26+
endif()
27+
endif()
28+
endif()
29+
if(z_vcpkg_sqlite3_fixup_libraries)
30+
list(APPEND SQLite3_LIBRARIES ${z_vcpkg_sqlite3_libraries})
31+
endif()
32+
if(TARGET SQLite::SQLite3)
33+
set_target_properties(SQLite::SQLite3 PROPERTIES INTERFACE_LINK_LIBRARIES "${z_vcpkg_sqlite3_link_libs}")
34+
endif()
35+
endif()

0 commit comments

Comments
 (0)