File tree Expand file tree Collapse file tree 3 files changed +36
-2
lines changed Expand file tree Collapse file tree 3 files changed +36
-2
lines changed Original file line number Diff line number Diff line change 2
2
# files containing dictionary of useful projection
3
3
#
4
4
5
+ set (PROJ_DB_CACHE_DIR "" CACHE PATH "Directory used to cache proj.db" )
6
+ if (NOT IS_DIRECTORY ${PROJ_DB_CACHE_DIR} )
7
+ if (NOT "${PROJ_DB_CACHE_DIR} " STREQUAL "" )
8
+ message (WARNING
9
+ "PROJ_DB_CACHE_DIR (${PROJ_DB_CACHE_DIR} ) not set to a directory" )
10
+ set (PROJ_DB_CACHE_DIR "" )
11
+ endif ()
12
+ endif ()
13
+
5
14
set (CONFIG_FILES
6
15
proj.ini
7
16
)
@@ -36,7 +45,7 @@ include(sql_filelist.cmake)
36
45
add_custom_command (
37
46
OUTPUT ${PROJ_DB}
38
47
COMMAND ${CMAKE_COMMAND} -E remove -f ${PROJ_DB}
39
- COMMAND ${CMAKE_COMMAND} "-DALL_SQL_IN=${ALL_SQL_IN} " "-DEXE_SQLITE3=${EXE_SQLITE3} " "-DPROJ_DB=${PROJ_DB} " "-DPROJ_VERSION=${PROJ_VERSION} "
48
+ COMMAND ${CMAKE_COMMAND} "-DALL_SQL_IN=${ALL_SQL_IN} " "-DEXE_SQLITE3=${EXE_SQLITE3} " "-DPROJ_DB=${PROJ_DB} " "-DPROJ_VERSION=${PROJ_VERSION} " "-DPROJ_DB_CACHE_DIR= ${PROJ_DB_CACHE_DIR} "
40
49
-P "${CMAKE_CURRENT_SOURCE_DIR} /generate_proj_db.cmake"
41
50
COMMAND ${CMAKE_COMMAND} -E copy ${PROJ_DB} ${CMAKE_CURRENT_BINARY_DIR} /for_tests
42
51
DEPENDS ${SQL_FILES} "${CMAKE_CURRENT_SOURCE_DIR} /generate_proj_db.cmake"
Original file line number Diff line number Diff line change @@ -14,10 +14,30 @@ file(READ ${ALL_SQL_IN} CONTENTS)
14
14
string (REPLACE "\$ {PROJ_VERSION}" "${PROJ_VERSION} " CONTENTS_MOD "${CONTENTS} " )
15
15
file (WRITE "${ALL_SQL_IN} " "${CONTENTS_MOD} " )
16
16
17
+ if (IS_DIRECTORY ${PROJ_DB_CACHE_DIR} )
18
+ set (USE_PROJ_DB_CACHE_DIR TRUE )
19
+ set (PROJ_DB_SQL_MD5_FILE "${PROJ_DB_CACHE_DIR} /proj.db.sql.md5" )
20
+ if (EXISTS "${PROJ_DB_SQL_MD5_FILE} " )
21
+ file (STRINGS "${PROJ_DB_SQL_MD5_FILE} " PROJ_DB_SQL_MD5 LIMIT_COUNT 1 )
22
+ endif ()
23
+ file (MD5 "${ALL_SQL_IN} " PROJ_DB_SQL_MD5 )
24
+ set (CACHED_PROJ_DB "${PROJ_DB_CACHE_DIR} /proj.db" )
25
+ if ("${PROJ_DB_SQL_MD5} " STREQUAL "${PROJ_DB_SQL_MD5} " AND EXISTS "${CACHED_PROJ_DB} " )
26
+ message (STATUS "Reusing cached proj.db from ${PROJ_DB_CACHE_DIR} " )
27
+ get_filename_component (PROJ_DB_DIR "${PROJ_DB} " DIRECTORY )
28
+ file (COPY "${CACHED_PROJ_DB} " DESTINATION "${PROJ_DB_DIR} " )
29
+ return ()
30
+ endif ()
31
+ endif ()
32
+
17
33
execute_process (COMMAND "${EXE_SQLITE3} " "${PROJ_DB} "
18
34
INPUT_FILE "${ALL_SQL_IN} "
19
35
RESULT_VARIABLE STATUS )
20
36
21
37
if (STATUS AND NOT STATUS EQUAL 0 )
22
- message (FATAL_ERROR "SQLite3 failed" )
38
+ message (FATAL_ERROR "Build of proj.db failed" )
39
+ elseif (USE_PROJ_DB_CACHE_DIR )
40
+ message (STATUS "Saving cache: ${CACHED_PROJ_DB} " )
41
+ file (COPY "${PROJ_DB} " DESTINATION "${PROJ_DB_CACHE_DIR} " )
42
+ file (WRITE "${PROJ_DB_SQL_MD5_FILE} " "${PROJ_DB_SQL_MD5} \n " )
23
43
endif ()
Original file line number Diff line number Diff line change @@ -371,6 +371,11 @@ All cached entries can be viewed using ``cmake -LAH`` from a build directory.
371
371
`clcache <https://github.com/frerich/clcache >`_ for MSVC)
372
372
to build C/C++ objects.
373
373
374
+ .. option :: PROJ_DB_CACHE_DIR
375
+
376
+ Path to an existing directory used to cache :file: `proj.db ` to speed-up
377
+ subsequent builds without modifications to source SQL files.
378
+
374
379
375
380
Building on Windows with vcpkg and Visual Studio 2017 or 2019
376
381
--------------------------------------------------------------------------------
You can’t perform that action at this time.
0 commit comments