1 #### Fast .stl viewer #####
2 # Original Project Author: Matt Keeter Copyright 2014 -2017
3 # Author: Paul Tsouchlos Copyright 2017
5 cmake_minimum_required(VERSION 3.3)
8 set(CMAKE_CXX_STANDARD 11)
9 # Setting standard to required, as requisted by DeveloperPaul123 on github
10 set(CXX_STANDARD_REQUIRED ON)
12 # Set the version number
13 set (FSTL_VERSION_MAJOR "0")
14 set (FSTL_VERSION_MINOR "9")
15 set (FSTL_VERSION_PATCH "4")
16 set (PROJECT_VERSION "${FSTL_VERSION_MAJOR}.${FSTL_VERSION_MINOR}.${FSTL_VERSION_PATCH}")
21 set(CMAKE_INCLUDE_CURRENT_DIR ON)
25 set(Project_Sources src/app.cpp
35 set(Project_Headers src/app.h
43 #set project resources and icon resource
44 set(Project_Resources qt/qt.qrc gl/gl.qrc)
45 set(Icon_Resource exe/fstl.rc)
47 #set Policy CMP0072 FindOpenGL behavior
48 set(OpenGL_GL_PREFERENCE GLVND)
50 #find required packages.
51 find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets OpenGL)
52 find_package(OpenGL REQUIRED)
53 find_package(Threads REQUIRED)
56 qt5_add_resources(Project_Resources_RCC ${Project_Resources})
58 #tell CMake AUTOGEN to skip autogen on the generated qrc files
59 set_property(SOURCE ${Project_Resources_RCC} PROPERTY SKIP_AUTOGEN ON)
61 #include opengl files.
62 include_directories(${QT_QTOPENGL_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} )
64 add_executable(fstl WIN32 ${Project_Sources} ${Project_Headers} ${Project_Resources_RCC} ${Icon_Resource})
65 target_link_libraries(fstl Qt5::Widgets Qt5::Core Qt5::Gui Qt5::OpenGL ${OPENGL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
67 set(Fstl_LINK_FLAGS ${CMAKE_CURRENT_SOURCE_DIR}/${Icon_Resource})
68 set_target_properties(fstl PROPERTIES LINK_FLAGS ${Fstl_LINK_FLAGS})
71 # Add version definitions to use within the code.
72 target_compile_definitions(fstl PRIVATE -DFSTL_VERSION="${PROJECT_VERSION}")
74 #installer information that is platform independent
75 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Fast .stl file viewer.")
76 set(CPACK_PACKAGE_VERSION_MAJOR ${FSTL_VERSION_MAJOR})
77 set(CPACK_PACKAGE_VERSION_MINOR ${FSTL_VERSION_MINOR})
78 set(CPACK_PACKAGE_VERSION_PATCH ${FSTL_VERSION_PATCH})
82 set(QT_USE_QTMAIN true)
85 set_source_files_properties(fstl PROPERTIES LINKER_LANGUAGE "CXX")
86 set_target_properties(fstl PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS")
88 install(TARGETS fstl DESTINATION bin COMPONENT all)
91 $<TARGET_FILE:Qt5::Gui_EGL>
92 $<TARGET_FILE:Qt5::Gui_GLESv2>
93 $<TARGET_FILE:Qt5::Core>
94 $<TARGET_FILE:Qt5::Gui>
95 $<TARGET_FILE:Qt5::OpenGL>
96 $<TARGET_FILE:Qt5::Widgets>
97 DESTINATION bin COMPONENT all)
99 #install file in the platforms directory.
101 ${Qt5Core_DIR}/../../../plugins/platforms/qwindows.dll
102 DESTINATION bin/platforms COMPONENT all
105 #custom commands based on: https://gist.github.com/Rod-Persky/e6b93e9ee31f9516261b
106 add_custom_command(TARGET fstl POST_BUILD
107 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Qt5::Core> $<TARGET_FILE_DIR:${PROJECT_NAME}>
108 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Qt5::Gui> $<TARGET_FILE_DIR:${PROJECT_NAME}>
109 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Qt5::Widgets> $<TARGET_FILE_DIR:${PROJECT_NAME}>
110 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Qt5::OpenGL> $<TARGET_FILE_DIR:${PROJECT_NAME}>
114 # windows specific installer generation information
115 set(CPACK_GENERATOR NSIS)
116 set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL OFF)
117 set(CPACK_NSIS_MODIFY_PATH ON)
118 set(CPACK_NSIS_MUI_FINISHPAGE_RUN ${PROJECT_NAME})
119 set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}")
120 set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\fstl.exe")
121 set(CPACK_NSIS_URL_INFO_ABOUT "https://github.com/mkeeter/fstl")
122 set(CPACK_NSIS_DISPLAY_NAME "fstl ${FSTL_VERSION}")
123 set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/exe/fstl.ico")
124 set(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}/exe/fstl.ico")
125 set(CPACK_NSIS_CREATE_ICONS_EXTRA
126 "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\fstl.lnk' '$INSTDIR\\\\bin\\\\fstl.exe'")
127 set(CPACK_COMPONENTS_ALL all)
129 set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
131 set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
134 set(CPACK_GENERATOR "DragNDrop")
135 set(CPACK_DMG_FORMAT "UDBZ")
136 set(CPACK_DMG_VOLUME_NAME "${PROJECT_NAME}")
137 set(CPACK_SYSTEM_NAME "OSX")
138 set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
139 set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/app/fstl.icns")
141 install(TARGETS fstl RUNTIME DESTINATION bin)
143 set(CPACK_GENERATOR "DEB;RPM")
144 set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")