
Before this commit, the default font chosen for TTF text is Arial (chosen by the basename of arial.ttf), which isn't present on most Linux systems, and cannot be redistributed. After this commit, it is replaced with Bitstream Vera Sans, which can be. Existing files are not affected. The font name in the TTF file was artificially modified to add the (built-in) suffix, which will need to be done if more built-in fonts are added.
240 lines
8.7 KiB
CMake
240 lines
8.7 KiB
CMake
# First, set up registration functions for the kinds of resources we handle.
|
|
set(resource_root ${CMAKE_CURRENT_SOURCE_DIR}/)
|
|
set(resource_list)
|
|
if(WIN32)
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win32/versioninfo.rc.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/win32/versioninfo.rc)
|
|
|
|
set(rc_file ${CMAKE_CURRENT_BINARY_DIR}/resources.rc)
|
|
file(WRITE ${rc_file} "// Autogenerated; do not edit\n")
|
|
file(APPEND ${rc_file} "#include <windows.h>\n")
|
|
file(APPEND ${rc_file} "#include \"${CMAKE_CURRENT_BINARY_DIR}/win32/versioninfo.rc\"\n")
|
|
|
|
function(add_resource name)
|
|
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${name})
|
|
|
|
if(${ARGC} GREATER 1)
|
|
set(id ${ARGV1})
|
|
else()
|
|
string(REPLACE ${resource_root} "" id ${source})
|
|
endif()
|
|
if(${ARGC} GREATER 2)
|
|
set(type ${ARGV2})
|
|
else()
|
|
set(type RCDATA)
|
|
endif()
|
|
file(SHA512 "${source}" hash)
|
|
file(APPEND ${rc_file} "${id} ${type} \"${source}\" // ${hash}\n")
|
|
# CMake doesn't track file dependencies across directories, so we force
|
|
# a reconfigure (which changes the RC file because of the hash above)
|
|
# every time a resource is changed.
|
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${source}")
|
|
endfunction()
|
|
elseif(APPLE)
|
|
set(app_resource_dir ${CMAKE_BINARY_DIR}/bin/SolveSpace.app/Contents/Resources)
|
|
set(cli_resource_dir ${CMAKE_BINARY_DIR}/res)
|
|
|
|
function(add_resource name)
|
|
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${name})
|
|
set(target_app ${app_resource_dir}/${name})
|
|
set(target_cli ${cli_resource_dir}/${name})
|
|
set(resource_list "${resource_list};${target_app};${target_cli}" PARENT_SCOPE)
|
|
|
|
get_filename_component(target_app_dir ${target_app} DIRECTORY)
|
|
get_filename_component(target_cli_dir ${target_cli} DIRECTORY)
|
|
add_custom_command(
|
|
OUTPUT ${target_app} ${target_cli}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${target_app_dir}
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${source} ${target_app}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${target_cli_dir}
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${source} ${target_cli}
|
|
COMMENT "Copying resource ${name}"
|
|
DEPENDS ${source}
|
|
VERBATIM)
|
|
endfunction()
|
|
|
|
function(add_xib name)
|
|
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${name})
|
|
get_filename_component(basename ${name} NAME_WE)
|
|
set(target ${app_resource_dir}/${basename}.nib)
|
|
set(resource_list "${resource_list};${target}" PARENT_SCOPE)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${target}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${app_resource_dir}
|
|
COMMAND ibtool --errors --warnings --notices --output-format human-readable-text
|
|
--compile ${target} ${source}
|
|
COMMENT "Building Interface Builder file ${name}"
|
|
DEPENDS ${source}
|
|
VERBATIM)
|
|
endfunction()
|
|
|
|
function(add_iconset name)
|
|
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${name})
|
|
get_filename_component(basename ${name} NAME_WE)
|
|
set(target ${app_resource_dir}/${basename}.icns)
|
|
set(resource_list "${resource_list};${target}" PARENT_SCOPE)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${target}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${app_resource_dir}
|
|
COMMAND iconutil -c icns -o ${target} ${source}
|
|
COMMENT "Building icon set ${name}"
|
|
DEPENDS ${source}
|
|
VERBATIM)
|
|
endfunction()
|
|
else() # Unix
|
|
include(GNUInstallDirs)
|
|
|
|
set(app_resource_dir ${CMAKE_BINARY_DIR}/res)
|
|
|
|
function(add_resource name)
|
|
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${name})
|
|
set(target ${app_resource_dir}/${name})
|
|
set(resource_list "${resource_list};${target}" PARENT_SCOPE)
|
|
|
|
get_filename_component(target_dir ${target} DIRECTORY)
|
|
add_custom_command(
|
|
OUTPUT ${target}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${target_dir}
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${source} ${target}
|
|
COMMENT "Copying resource ${name}"
|
|
DEPENDS ${source}
|
|
VERBATIM)
|
|
|
|
get_filename_component(name_dir ${name} DIRECTORY)
|
|
install(FILES ${source}
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/solvespace/${name_dir})
|
|
endfunction()
|
|
endif()
|
|
|
|
function(add_resources)
|
|
foreach(name ${ARGN})
|
|
add_resource(${name})
|
|
set(resource_list "${resource_list}" PARENT_SCOPE)
|
|
endforeach()
|
|
endfunction()
|
|
|
|
# Second, register all resources.
|
|
if(WIN32)
|
|
add_resource(win32/icon.ico 4000 ICON)
|
|
add_resource(win32/manifest.xml 1 RT_MANIFEST)
|
|
elseif(APPLE)
|
|
add_iconset (cocoa/AppIcon.iconset)
|
|
add_xib (cocoa/MainMenu.xib)
|
|
add_xib (cocoa/SaveFormatAccessory.xib)
|
|
else()
|
|
add_resource(freedesktop/solvespace-48x48.png)
|
|
|
|
configure_file(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/freedesktop/solvespace.desktop.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/freedesktop/solvespace.desktop)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freedesktop/solvespace.desktop
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
|
|
|
|
install(FILES freedesktop/solvespace-slvs.xml
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mime/packages)
|
|
|
|
foreach(SIZE 16x16 24x24 32x32 48x48)
|
|
install(FILES freedesktop/solvespace-${SIZE}.png
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}/apps
|
|
RENAME solvespace.png)
|
|
install(FILES freedesktop/solvespace-${SIZE}.png
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}/mimetypes
|
|
RENAME application.x-solvespace.png)
|
|
endforeach()
|
|
|
|
foreach(SIZE 16x16 24x24 32x32 48x48)
|
|
install(FILES freedesktop/solvespace-${SIZE}.xpm
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pixmaps)
|
|
endforeach()
|
|
endif()
|
|
|
|
add_resources(
|
|
banner.txt
|
|
icons/graphics-window/angle.png
|
|
icons/graphics-window/arc.png
|
|
icons/graphics-window/assemble.png
|
|
icons/graphics-window/bezier.png
|
|
icons/graphics-window/circle.png
|
|
icons/graphics-window/construction.png
|
|
icons/graphics-window/equal.png
|
|
icons/graphics-window/extrude.png
|
|
icons/graphics-window/horiz.png
|
|
icons/graphics-window/image.png
|
|
icons/graphics-window/in3d.png
|
|
icons/graphics-window/lathe.png
|
|
icons/graphics-window/length.png
|
|
icons/graphics-window/line.png
|
|
icons/graphics-window/ontoworkplane.png
|
|
icons/graphics-window/other-supp.png
|
|
icons/graphics-window/parallel.png
|
|
icons/graphics-window/perpendicular.png
|
|
icons/graphics-window/pointonx.png
|
|
icons/graphics-window/point.png
|
|
icons/graphics-window/rectangle.png
|
|
icons/graphics-window/ref.png
|
|
icons/graphics-window/same-orientation.png
|
|
icons/graphics-window/sketch-in-3d.png
|
|
icons/graphics-window/sketch-in-plane.png
|
|
icons/graphics-window/step-rotate.png
|
|
icons/graphics-window/step-translate.png
|
|
icons/graphics-window/symmetric.png
|
|
icons/graphics-window/tangent-arc.png
|
|
icons/graphics-window/text.png
|
|
icons/graphics-window/trim.png
|
|
icons/graphics-window/vert.png
|
|
icons/text-window/constraint.png
|
|
icons/text-window/edges.png
|
|
icons/text-window/faces.png
|
|
icons/text-window/occluded-visible.png
|
|
icons/text-window/occluded-stippled.png
|
|
icons/text-window/occluded-invisible.png
|
|
icons/text-window/mesh.png
|
|
icons/text-window/normal.png
|
|
icons/text-window/outlines.png
|
|
icons/text-window/point.png
|
|
icons/text-window/shaded.png
|
|
icons/text-window/workplane.png
|
|
locales.txt
|
|
locales/de_DE.po
|
|
locales/en_US.po
|
|
locales/fr_FR.po
|
|
locales/uk_UA.po
|
|
locales/ru_RU.po
|
|
fonts/unifont.hex.gz
|
|
fonts/private/0-check-false.png
|
|
fonts/private/1-check-true.png
|
|
fonts/private/2-radio-false.png
|
|
fonts/private/3-radio-true.png
|
|
fonts/private/4-stipple-dot.png
|
|
fonts/private/5-stipple-dash-long.png
|
|
fonts/private/6-stipple-dash.png
|
|
fonts/private/7-stipple-zigzag.png
|
|
fonts/unicode.lff.gz
|
|
fonts/BitstreamVeraSans-Roman-builtin.ttf
|
|
shaders/imesh.frag
|
|
shaders/imesh.vert
|
|
shaders/imesh_point.frag
|
|
shaders/imesh_point.vert
|
|
shaders/imesh_tex.frag
|
|
shaders/imesh_texa.frag
|
|
shaders/imesh_tex.vert
|
|
shaders/mesh.frag
|
|
shaders/mesh.vert
|
|
shaders/mesh_fill.frag
|
|
shaders/mesh_fill.vert
|
|
shaders/edge.frag
|
|
shaders/edge.vert
|
|
shaders/outline.vert
|
|
threejs/three-r76.js.gz
|
|
threejs/hammer-2.0.8.js.gz
|
|
threejs/SolveSpaceControls.js)
|
|
|
|
# Third, distribute the resources.
|
|
add_custom_target(resources
|
|
DEPENDS ${resource_list})
|
|
if(WIN32)
|
|
set_property(TARGET resources PROPERTY EXTRA_SOURCES ${rc_file})
|
|
endif()
|