solvespace/src/CMakeLists.txt

355 lines
8.6 KiB
CMake
Raw Normal View History

# global
include_directories(
${OPENGL_INCLUDE_DIR}
${PNG_INCLUDE_DIRS})
link_directories(
${PNG_LIBRARY_DIRS})
add_definitions(
${PNG_CFLAGS_OTHER})
link_directories(
${PNG_LIBRARY_DIRS}
${ZLIB_LIBRARY_DIRS})
add_definitions(
${PNG_CFLAGS_OTHER}
${ZLIB_CFLAGS_OTHER})
include_directories(
"${CMAKE_CURRENT_SOURCE_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}/built"
"${CMAKE_CURRENT_BINARY_DIR}")
if(SPACEWARE_FOUND)
include_directories(
"${SPACEWARE_INCLUDE_DIR}")
endif()
set(HAVE_SPACEWARE ${SPACEWARE_FOUND})
set(HAVE_FLTK ${FLTK_FOUND})
set(HAVE_GTK ${GTKMM_FOUND})
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/config.h")
# platform utilities
if(WIN32)
set(util_SOURCES
win32/w32util.cpp)
else()
set(util_SOURCES
unix/unixutil.cpp)
endif()
# libslvs
set(libslvs_SOURCES
util.cpp
entity.cpp
expr.cpp
constraint.cpp
constrainteq.cpp
system.cpp)
set(libslvs_HEADERS
solvespace.h)
add_library(slvs SHARED
${libslvs_SOURCES}
${libslvs_HEADERS}
${util_SOURCES}
lib.cpp)
target_compile_definitions(slvs
PRIVATE -DLIBRARY)
target_include_directories(slvs
PUBLIC "${CMAKE_SOURCE_DIR}/include")
set_target_properties(slvs PROPERTIES
PUBLIC_HEADER "${CMAKE_SOURCE_DIR}/include/slvs.h"
VERSION ${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR}
SOVERSION 1)
if(NOT WIN32)
install(TARGETS slvs
2015-03-20 10:49:52 +00:00
LIBRARY DESTINATION lib/${CMAKE_LIBRARY_PATH} # multiarch
PUBLIC_HEADER DESTINATION include)
endif()
# generated files
file(GLOB icons "${CMAKE_CURRENT_SOURCE_DIR}/icons/*.png")
if(PERL_FOUND AND PERLMODULES_FOUND)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/built/icons.h"
"${CMAKE_CURRENT_SOURCE_DIR}/built/icons-proto.h"
COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/png2c.pl"
"${CMAKE_CURRENT_SOURCE_DIR}/built/icons.h"
"${CMAKE_CURRENT_SOURCE_DIR}/built/icons-proto.h"
"${CMAKE_CURRENT_SOURCE_DIR}"
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/png2c.pl"
DEPENDENCIES ${icons})
add_custom_command(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/built/bitmapextra.table.h"
COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/pngchar2c.pl"
"${CMAKE_CURRENT_SOURCE_DIR}/built/bitmapextra.table.h"
"${CMAKE_CURRENT_SOURCE_DIR}"
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/pngchar2c.pl"
DEPENDENCIES ${icons})
endif()
if(WIN32)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/built/bitmapfont.table.h"
COMMAND ttf2c "${CMAKE_CURRENT_SOURCE_DIR}/built/bitmapfont.table.h")
endif()
set(generated_HEADERS
built/bitmapextra.table.h
built/bitmapfont.table.h
built/icons-proto.h
built/icons.h)
set_source_files_properties(${generated_HEADERS}
PROPERTIES GENERATED TRUE)
# platform dependencies
if(WIN32)
set(platform_HEADERS
win32/freeze.h)
set(platform_SOURCES
win32/freeze.cpp
win32/w32main.cpp
win32/resource.rc)
2015-03-24 06:45:53 +00:00
elseif(APPLE)
add_definitions(
-mmacosx-version-min=10.6
-fobjc-arc)
set(platform_SOURCES
cocoa/cocoamain.mm
unix/gloffscreen.cpp)
set(platform_XIBS
cocoa/MainMenu.xib
cocoa/SaveFormatAccessory.xib)
set(platform_ICONS
cocoa/AppIcon.iconset)
set(platform_RESOURCES
unix/solvespace-48x48.png)
set(platform_LIBRARIES
${APPKIT_LIBRARY})
elseif(HAVE_FLTK)
include_directories(${FLTK_INCLUDE_DIR})
set(platform_SOURCES
fltk/fltkmain.cpp)
set(platform_LIBRARIES
${CMAKE_DL_LIBS}
${FLTK_LIBRARIES})
elseif(HAVE_GTK)
include_directories(
${GTKMM_INCLUDE_DIRS}
${JSONC_INCLUDE_DIRS}
${FONTCONFIG_INCLUDE_DIRS}
${GLEW_INCLUDE_DIRS})
link_directories(
${GTKMM_LIBRARY_DIRS}
${JSONC_LIBRARY_DIRS}
${FONTCONFIG_LIBRARY_DIRS}
${GLEW_LIBRARY_DIRS})
add_definitions(
${GTKMM_CFLAGS_OTHER}
${JSONC_CFLAGS_OTHER}
${FONTCONFIG_CFLAGS_OTHER}
${GLEW_CFLAGS_OTHER})
set(platform_SOURCES
gtk/gtkmain.cpp
unix/gloffscreen.cpp)
set(platform_LIBRARIES
${GTKMM_LIBRARIES}
${JSONC_LIBRARIES}
${FONTCONFIG_LIBRARIES}
${GLEW_LIBRARIES})
endif()
2015-03-24 06:45:53 +00:00
set(platform_BUNDLED_RESOURCES)
foreach(xib ${platform_XIBS})
get_filename_component(nib ${xib} NAME_WE)
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${xib})
set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources/${nib}.nib)
list(APPEND platform_BUNDLED_RESOURCES ${target})
add_custom_command(
OUTPUT ${target}
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources
COMMAND ibtool --errors --warnings --notices
--output-format human-readable-text --compile
${target} ${source}
COMMENT "Building Interface Builder file ${xib}"
DEPENDS ${xib})
endforeach()
foreach(icon ${platform_ICONS})
get_filename_component(name ${icon} NAME_WE)
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${icon})
set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources/${name}.icns)
list(APPEND platform_BUNDLED_RESOURCES ${target})
add_custom_command(
OUTPUT ${target}
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources
COMMAND iconutil -c icns -o ${target} ${source}
COMMENT "Building icon set ${icon}"
DEPENDS ${source})
endforeach()
foreach(res ${platform_RESOURCES})
get_filename_component(name ${res} NAME)
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${res})
set(target ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources/${name})
list(APPEND platform_BUNDLED_RESOURCES ${target})
add_custom_command(
OUTPUT ${target}
COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/solvespace.app/Contents/Resources
COMMAND ${CMAKE_COMMAND} -E copy ${source} ${target}
COMMENT "Copying resource file ${res}"
DEPENDS ${res})
endforeach()
# solvespace executable
set(solvespace_HEADERS
config.h
dsc.h
expr.h
font.table.h
polygon.h
sketch.h
solvespace.h
ui.h
srf/surface.h)
set(solvespace_SOURCES
bsp.cpp
clipboard.cpp
confscreen.cpp
constraint.cpp
constrainteq.cpp
describescreen.cpp
draw.cpp
drawconstraint.cpp
drawentity.cpp
entity.cpp
export.cpp
exportstep.cpp
exportvector.cpp
expr.cpp
file.cpp
generate.cpp
glhelper.cpp
graphicswin.cpp
group.cpp
groupmesh.cpp
mesh.cpp
modify.cpp
mouse.cpp
polygon.cpp
request.cpp
solvespace.cpp
style.cpp
system.cpp
textscreens.cpp
textwin.cpp
toolbar.cpp
ttf.cpp
undoredo.cpp
util.cpp
view.cpp
srf/boolean.cpp
srf/curve.cpp
srf/merge.cpp
srf/ratpoly.cpp
srf/raycast.cpp
srf/surface.cpp
srf/surfinter.cpp
srf/triangulate.cpp)
2015-03-24 06:45:53 +00:00
add_executable(solvespace WIN32 MACOSX_BUNDLE
${libslvs_HEADERS}
${libslvs_SOURCES}
${util_SOURCES}
${platform_HEADERS}
${platform_SOURCES}
2015-03-24 06:45:53 +00:00
${platform_BUNDLED_RESOURCES}
${generated_HEADERS}
${solvespace_HEADERS}
${solvespace_SOURCES})
target_link_libraries(solvespace
"${OPENGL_LIBRARIES}"
"${PNG_LIBRARIES}"
"${platform_LIBRARIES}")
if(WIN32)
set_target_properties(solvespace PROPERTIES
LINK_FLAGS "/MANIFEST:NO /SAFESEH:NO")
endif()
if(SPACEWARE_FOUND)
target_link_libraries(solvespace
"${SPACEWARE_LIBRARIES}")
endif()
install(TARGETS solvespace
2015-03-24 06:45:53 +00:00
RUNTIME DESTINATION bin
BUNDLE DESTINATION .)
install(FILES unix/solvespace.desktop
DESTINATION share/applications)
foreach(SIZE 16x16 24x24 32x32 48x48)
install(FILES unix/solvespace-${SIZE}.png
DESTINATION share/icons/hicolor/${SIZE}/apps
RENAME solvespace.png)
install(FILES unix/solvespace-${SIZE}.png
DESTINATION share/icons/hicolor/${SIZE}/mimetypes
RENAME application.x-solvespace.png)
endforeach()
# valgrind
add_custom_target(solvespace-valgrind
valgrind
--tool=memcheck
--verbose
--track-fds=yes
--log-file=vg.%p.out
--num-callers=50
--error-limit=no
--read-var-info=yes
--leak-check=full
--leak-resolution=high
--show-reachable=yes
--track-origins=yes
--malloc-fill=0xac
--free-fill=0xde
$<TARGET_FILE:solvespace>)