Rigorously treat quoting in CMake.
CMake can properly quote inputs to custom commands itself; this is governed by the VERBATIM flag. If we pass this flag, no quoting needs to be done except for compiler/linker flags and diagnostic messages, as CMake doesn't treat whitespace expanded from variables the same way it treats whitespace that separates arguments.
This commit is contained in:
parent
575146b975
commit
a1a624da12
@ -15,19 +15,19 @@ add_definitions(
|
|||||||
${PNG_CFLAGS_OTHER})
|
${PNG_CFLAGS_OTHER})
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/built"
|
${CMAKE_CURRENT_SOURCE_DIR}/built
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}")
|
${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
if(SPACEWARE_FOUND)
|
if(SPACEWARE_FOUND)
|
||||||
include_directories(
|
include_directories(
|
||||||
"${SPACEWARE_INCLUDE_DIR}")
|
${SPACEWARE_INCLUDE_DIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(HAVE_SPACEWARE ${SPACEWARE_FOUND})
|
set(HAVE_SPACEWARE ${SPACEWARE_FOUND})
|
||||||
set(HAVE_GTK ${GTKMM_FOUND})
|
set(HAVE_GTK ${GTKMM_FOUND})
|
||||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in"
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/config.h")
|
${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
||||||
|
|
||||||
# platform utilities
|
# platform utilities
|
||||||
|
|
||||||
@ -62,10 +62,10 @@ target_compile_definitions(slvs
|
|||||||
PRIVATE -DLIBRARY)
|
PRIVATE -DLIBRARY)
|
||||||
|
|
||||||
target_include_directories(slvs
|
target_include_directories(slvs
|
||||||
PUBLIC "${CMAKE_SOURCE_DIR}/include")
|
PUBLIC ${CMAKE_SOURCE_DIR}/include)
|
||||||
|
|
||||||
set_target_properties(slvs PROPERTIES
|
set_target_properties(slvs PROPERTIES
|
||||||
PUBLIC_HEADER "${CMAKE_SOURCE_DIR}/include/slvs.h"
|
PUBLIC_HEADER ${CMAKE_SOURCE_DIR}/include/slvs.h
|
||||||
VERSION ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}
|
VERSION ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}
|
||||||
SOVERSION 1)
|
SOVERSION 1)
|
||||||
|
|
||||||
@ -82,34 +82,37 @@ endif()
|
|||||||
# but unlike Windows, Linux does not have the machinery to map
|
# but unlike Windows, Linux does not have the machinery to map
|
||||||
# an invocation of `tool` to an executable `tool.exe` in $PATH.
|
# an invocation of `tool` to an executable `tool.exe` in $PATH.
|
||||||
|
|
||||||
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated")
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/generated)
|
||||||
|
|
||||||
file(GLOB icons "${CMAKE_CURRENT_SOURCE_DIR}/icons/*.png")
|
file(GLOB icons ${CMAKE_CURRENT_SOURCE_DIR}/icons/*.png)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp"
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h"
|
${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h
|
||||||
COMMAND $<TARGET_FILE:png2c>
|
COMMAND $<TARGET_FILE:png2c>
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp"
|
${CMAKE_CURRENT_BINARY_DIR}/generated/icons.cpp
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h"
|
${CMAKE_CURRENT_BINARY_DIR}/generated/icons.h
|
||||||
${icons}
|
${icons}
|
||||||
DEPENDS png2c ${icons})
|
DEPENDS png2c ${icons}
|
||||||
|
VERBATIM)
|
||||||
|
|
||||||
file(GLOB chars "${CMAKE_CURRENT_SOURCE_DIR}/fonts/private/*.png")
|
file(GLOB chars ${CMAKE_CURRENT_SOURCE_DIR}/fonts/private/*.png)
|
||||||
list(SORT chars)
|
list(SORT chars)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h"
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h
|
||||||
COMMAND $<TARGET_FILE:unifont2c>
|
COMMAND $<TARGET_FILE:unifont2c>
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h"
|
${CMAKE_CURRENT_BINARY_DIR}/generated/bitmapfont.table.h
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/fonts/unifont-8.0.01.hex.gz"
|
${CMAKE_CURRENT_SOURCE_DIR}/fonts/unifont-8.0.01.hex.gz
|
||||||
${chars}
|
${chars}
|
||||||
DEPENDS unifont2c ${chars})
|
DEPENDS unifont2c ${chars}
|
||||||
|
VERBATIM)
|
||||||
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h"
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h
|
||||||
COMMAND $<TARGET_FILE:lff2c>
|
COMMAND $<TARGET_FILE:lff2c>
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h"
|
"${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/fonts/unicode.lff.gz"
|
"${CMAKE_CURRENT_SOURCE_DIR}/fonts/unicode.lff.gz"
|
||||||
DEPENDS lff2c ${chars})
|
DEPENDS lff2c ${chars}
|
||||||
|
VERBATIM)
|
||||||
|
|
||||||
set(generated_HEADERS
|
set(generated_HEADERS
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h
|
${CMAKE_CURRENT_BINARY_DIR}/generated/vectorfont.table.h
|
||||||
@ -196,7 +199,8 @@ foreach(xib ${platform_XIBS})
|
|||||||
--output-format human-readable-text --compile
|
--output-format human-readable-text --compile
|
||||||
${target} ${source}
|
${target} ${source}
|
||||||
COMMENT "Building Interface Builder file ${xib}"
|
COMMENT "Building Interface Builder file ${xib}"
|
||||||
DEPENDS ${xib})
|
DEPENDS ${xib}
|
||||||
|
VERBATIM)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
foreach(icon ${platform_ICONS})
|
foreach(icon ${platform_ICONS})
|
||||||
@ -210,7 +214,8 @@ foreach(icon ${platform_ICONS})
|
|||||||
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources
|
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources
|
||||||
COMMAND iconutil -c icns -o ${target} ${source}
|
COMMAND iconutil -c icns -o ${target} ${source}
|
||||||
COMMENT "Building icon set ${icon}"
|
COMMENT "Building icon set ${icon}"
|
||||||
DEPENDS ${source})
|
DEPENDS ${source}
|
||||||
|
VERBATIM)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
foreach(res ${platform_RESOURCES})
|
foreach(res ${platform_RESOURCES})
|
||||||
@ -224,7 +229,8 @@ foreach(res ${platform_RESOURCES})
|
|||||||
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources
|
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${source} ${target}
|
COMMAND ${CMAKE_COMMAND} -E copy ${source} ${target}
|
||||||
COMMENT "Copying resource file ${res}"
|
COMMENT "Copying resource file ${res}"
|
||||||
DEPENDS ${res})
|
DEPENDS ${res}
|
||||||
|
VERBATIM)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
foreach(lib ${platform_BUNDLED_LIBS})
|
foreach(lib ${platform_BUNDLED_LIBS})
|
||||||
@ -237,7 +243,8 @@ foreach(lib ${platform_BUNDLED_LIBS})
|
|||||||
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources
|
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${lib} ${target}
|
COMMAND ${CMAKE_COMMAND} -E copy ${lib} ${target}
|
||||||
COMMENT "Bundling shared library ${lib}"
|
COMMENT "Bundling shared library ${lib}"
|
||||||
DEPENDS ${lib})
|
DEPENDS ${lib}
|
||||||
|
VERBATIM)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
# solvespace executable
|
# solvespace executable
|
||||||
@ -309,11 +316,11 @@ add_executable(solvespace WIN32 MACOSX_BUNDLE
|
|||||||
${solvespace_SOURCES})
|
${solvespace_SOURCES})
|
||||||
|
|
||||||
target_link_libraries(solvespace
|
target_link_libraries(solvespace
|
||||||
"${OPENGL_LIBRARIES}"
|
${OPENGL_LIBRARIES}
|
||||||
"${PNG_LIBRARIES}"
|
${PNG_LIBRARIES}
|
||||||
"${ZLIB_LIBRARIES}"
|
${ZLIB_LIBRARIES}
|
||||||
"${FREETYPE_LIBRARIES}"
|
${FREETYPE_LIBRARIES}
|
||||||
"${platform_LIBRARIES}")
|
${platform_LIBRARIES})
|
||||||
|
|
||||||
if(WIN32 AND NOT MINGW)
|
if(WIN32 AND NOT MINGW)
|
||||||
set_target_properties(solvespace PROPERTIES
|
set_target_properties(solvespace PROPERTIES
|
||||||
@ -322,7 +329,7 @@ endif()
|
|||||||
|
|
||||||
if(SPACEWARE_FOUND)
|
if(SPACEWARE_FOUND)
|
||||||
target_link_libraries(solvespace
|
target_link_libraries(solvespace
|
||||||
"${SPACEWARE_LIBRARIES}")
|
${SPACEWARE_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
@ -332,9 +339,10 @@ if(APPLE)
|
|||||||
execute_process(COMMAND otool -XD ${lib}
|
execute_process(COMMAND otool -XD ${lib}
|
||||||
OUTPUT_VARIABLE canonical_lib OUTPUT_STRIP_TRAILING_WHITESPACE)
|
OUTPUT_VARIABLE canonical_lib OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
add_custom_command(TARGET solvespace POST_BUILD
|
add_custom_command(TARGET solvespace POST_BUILD
|
||||||
COMMAND install_name_tool -change "${canonical_lib}" "@executable_path/${name}"
|
COMMAND install_name_tool -change ${canonical_lib} @executable_path/${name}
|
||||||
$<TARGET_FILE:solvespace>
|
$<TARGET_FILE:solvespace>
|
||||||
COMMENT "Fixing up rpath for dylib ${name}")
|
COMMENT "Fixing up rpath for dylib ${name}"
|
||||||
|
VERBATIM)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
set(bundle solvespace)
|
set(bundle solvespace)
|
||||||
@ -343,7 +351,8 @@ if(APPLE)
|
|||||||
COMMAND hdiutil create -srcfolder ${CMAKE_CURRENT_BINARY_DIR}/${bundle}.app
|
COMMAND hdiutil create -srcfolder ${CMAKE_CURRENT_BINARY_DIR}/${bundle}.app
|
||||||
${CMAKE_BINARY_DIR}/${bundle}.dmg
|
${CMAKE_BINARY_DIR}/${bundle}.dmg
|
||||||
DEPENDS $<TARGET_FILE:${bundle}>
|
DEPENDS $<TARGET_FILE:${bundle}>
|
||||||
COMMENT "Building ${bundle}.dmg")
|
COMMENT "Building ${bundle}.dmg"
|
||||||
|
VERBATIM)
|
||||||
|
|
||||||
add_custom_target(${bundle}-dmg ALL
|
add_custom_target(${bundle}-dmg ALL
|
||||||
DEPENDS ${CMAKE_BINARY_DIR}/${bundle}.dmg)
|
DEPENDS ${CMAKE_BINARY_DIR}/${bundle}.dmg)
|
||||||
|
Loading…
Reference in New Issue
Block a user