mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
smtk-import: add cmake modules and .nsi skeleton
Needed to crossbuild to windows. The cmake modules are just clones from those under subsurface/cmake/Modules, tweaked to build smtk-import for windows.
This commit is contained in:
parent
3f4f2455d3
commit
b012258617
3 changed files with 300 additions and 0 deletions
42
smtk-import/cmake/Modules/dlllist.cmake
Normal file
42
smtk-import/cmake/Modules/dlllist.cmake
Normal file
|
@ -0,0 +1,42 @@
|
|||
message(STATUS "processing dlllist.cmake")
|
||||
|
||||
# figure out which command to use for objdump
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_C_COMPILER} -dumpmachine
|
||||
OUTPUT_VARIABLE OBJDUMP
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
# figure out where we should search for libraries
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_C_COMPILER} -print-search-dirs
|
||||
COMMAND sed -nE "/^libraries: =/{s///;s,/lib/?\(:|\$\$\),/bin\\1,g;p;q;}"
|
||||
OUTPUT_VARIABLE ADDPATH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
message(STATUS "addpath is ${ADDPATH}")
|
||||
# since cmake doesn't appear to give us a variable with
|
||||
# all libraries we link against, grab the link.txt script
|
||||
# instead and drop the command name from it (before the
|
||||
# first space) -- this will fail if the full path for the
|
||||
# linker used contains a space...
|
||||
execute_process(
|
||||
COMMAND tail -1 CMakeFiles/${SMTK_IMPORT_TARGET}.dir/link.txt
|
||||
COMMAND cut -d\ -f 2-
|
||||
OUTPUT_VARIABLE LINKER_LINE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
# finally run our win-ldd.pl script against that to
|
||||
# collect all the required dlls
|
||||
execute_process(
|
||||
COMMAND sh -c "OBJDUMP=${OBJDUMP}-objdump PATH=$ENV{PATH}:${ADDPATH} perl '../../subsurface/scripts/win-ldd.pl' ${SMTK_IMPORT_TARGET}.exe ${LINKER_LINE}"
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
OUTPUT_VARIABLE DLLS
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
# replace newlines with semicolons so this is a cmake list
|
||||
string(REPLACE "\n" ";" DLLLIST ${DLLS})
|
||||
# executing 'install' as a command seems hacky, but you
|
||||
# can't use the install() cmake function in a script
|
||||
foreach(DLL ${DLLLIST})
|
||||
execute_process(COMMAND install ${DLL} ${STAGING})
|
||||
endforeach()
|
24
smtk-import/cmake/Modules/version.cmake
Normal file
24
smtk-import/cmake/Modules/version.cmake
Normal file
|
@ -0,0 +1,24 @@
|
|||
message(STATUS "processing version.cmake")
|
||||
execute_process(
|
||||
COMMAND sh ${CMAKE_TOP_SRC_DIR}/../scripts/get-version linux
|
||||
WORKING_DIRECTORY ${CMAKE_TOP_SRC_DIR}
|
||||
OUTPUT_VARIABLE GIT_VERSION_STRING
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
execute_process(
|
||||
COMMAND sh ${CMAKE_TOP_SRC_DIR}/../scripts/get-version full
|
||||
WORKING_DIRECTORY ${CMAKE_TOP_SRC_DIR}
|
||||
OUTPUT_VARIABLE CANONICAL_VERSION_STRING
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
set(MOBILE_VERSION_STRING "1.2.1")
|
||||
|
||||
configure_file(${SRC} ${DST} @ONLY)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
execute_process(
|
||||
COMMAND cat ${CMAKE_TOP_SRC_DIR}/../packaging/windows/smtk-import.nsi.in
|
||||
COMMAND sed -e "s/VERSIONTOKEN/${GIT_VERSION_STRING}/"
|
||||
COMMAND sed -e "s/PRODVTOKEN/${CANONICAL_VERSION_STRING}/"
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/staging/smtk-import.nsi
|
||||
)
|
||||
endif()
|
Loading…
Add table
Add a link
Reference in a new issue