Skip to content

Commit 264b146

Browse files
author
ayla
committed
Rearrange app build commands for headless build. Tested on OS X so far.
1 parent 12bd47d commit 264b146

File tree

1 file changed

+111
-30
lines changed

1 file changed

+111
-30
lines changed

src/Main/CMakeLists.txt

Lines changed: 111 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,26 @@ IF(APPLE)
4747
)
4848
ENDIF()
4949

50-
LIST(APPEND SCIRunMain_SOURCES "${APPLICATION_OSX_ICON_FULL_PATH}")
51-
SET_SOURCE_FILES_PROPERTIES(${APPLICATION_OSX_ICON_FULL_PATH}
52-
PROPERTIES
53-
MACOSX_PACKAGE_LOCATION Resources)
54-
SET(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_OSX_ICON}" )
50+
IF(BUILD_HEADLESS)
51+
ADD_EXECUTABLE(${APPLICATION_NAME} ${SCIRunMain_SOURCES})
52+
ELSE()
53+
LIST(APPEND SCIRunMain_SOURCES "${APPLICATION_OSX_ICON_FULL_PATH}")
54+
SET_SOURCE_FILES_PROPERTIES(${APPLICATION_OSX_ICON_FULL_PATH}
55+
PROPERTIES
56+
MACOSX_PACKAGE_LOCATION Resources)
57+
SET(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_OSX_ICON}" )
5558

56-
ADD_EXECUTABLE(${APPLICATION_NAME} MACOSX_BUNDLE ${SCIRunMain_SOURCES})
59+
ADD_EXECUTABLE(${APPLICATION_NAME} MACOSX_BUNDLE ${SCIRunMain_SOURCES})
60+
ENDIF()
5761

5862
ELSEIF(WIN32)
63+
# TODO: windows headless mode?
64+
5965
SET(SCIRunMain_SOURCES ${SCIRunMain_SOURCES} "${APPLICATION_WINDOWS_RC}")
6066
IF(SCIRUN_SHOW_CONSOLE)
6167
ADD_DEFINITIONS(-DSCIRUN_SHOW_CONSOLE=1)
6268
ENDIF()
69+
6370
ADD_EXECUTABLE(${APPLICATION_NAME} WIN32 ${SCIRunMain_SOURCES})
6471

6572
# TODO: probably need this for Xcode
@@ -72,6 +79,13 @@ ELSEIF(WIN32)
7279
ARGS -E copy_directory
7380
${SCIRun_BINARY_DIR}/Shaders
7481
${SCIRun_BINARY_DIR}/$<CONFIGURATION>/Shaders
82+
)
83+
ADD_CUSTOM_COMMAND(TARGET ${APPLICATION_NAME}
84+
POST_BUILD
85+
COMMAND ${CMAKE_COMMAND}
86+
ARGS -E copy_directory
87+
${SCIRun_BINARY_DIR}/Fonts
88+
${SCIRun_BINARY_DIR}/$<CONFIGURATION>/Fonts
7589
)
7690
ADD_CUSTOM_COMMAND(TARGET ${APPLICATION_NAME}
7791
POST_BUILD
@@ -90,7 +104,11 @@ TARGET_LINK_LIBRARIES(${APPLICATION_NAME}
90104
Core_Util_Legacy
91105
)
92106

93-
IF(NOT BUILD_HEADLESS)
107+
IF(BUILD_HEADLESS)
108+
TARGET_LINK_LIBRARIES(${APPLICATION_NAME}
109+
Core_ConsoleApplication
110+
)
111+
ELSE()
94112
TARGET_LINK_LIBRARIES(${APPLICATION_NAME}
95113
Interface_Application
96114
)
@@ -102,11 +120,16 @@ IF(BUILD_WITH_PYTHON)
102120
)
103121
ENDIF()
104122

105-
OPTION(DISABLE_MAC_BUNDLE "Disable Mac bundle" OFF)
106-
MARK_AS_ADVANCED(DISABLE_MAC_BUNDLE)
123+
OPTION(BUILD_BUNDLE "Build Mac bundle" ON)
124+
MARK_AS_ADVANCED(BUILD_BUNDLE)
107125

108-
IF(APPLE)
109-
SET(BUILD_BUNDLE NOT ${DISABLE_MAC_BUNDLE})
126+
IF(BUILD_HEADLESS)
127+
SET(BUILD_BUNDLE OFF)
128+
ENDIF()
129+
130+
MESSAGE(STATUS "Build Mac bundle: ${BUILD_BUNDLE}")
131+
132+
IF(APPLE AND BUILD_BUNDLE)
110133

111134
IF(${MACDEPLOYQT} MATCHES "NOTFOUND" OR ${SED} MATCHES "NOTFOUND" OR ${AWK} MATCHES "NOTFOUND")
112135
SET(BUILD_BUNDLE FALSE)
@@ -131,6 +154,7 @@ IF(APPLE AND BUILD_BUNDLE)
131154
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory ${SCIRUN_LIB_DIR} ${APP_PATH}/Frameworks
132155
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
133156
)
157+
134158
IF(BUILD_WITH_PYTHON)
135159
SET(VERSION_PATH Versions/${SCI_PYTHON_VERSION_SHORT})
136160
SET(FRAMEWORK_PATH Frameworks/Python.framework)
@@ -149,19 +173,19 @@ IF(APPLE AND BUILD_BUNDLE)
149173
@executable_path/../${FRAMEWORK_PATH}/${VERSION_PATH}/Python
150174
${APP_PATH}/MacOS/${APPLICATION_NAME}
151175
WORKING_DIRECTORY ${SCIRun_BINARY_DIR})
176+
152177
SET(SCIRUN_LIBS "Core_Application"
153178
"Core_Python"
154179
"SCIRunPythonAPI"
180+
"Interface_Application"
155181
"Engine_Network"
182+
"Interface_Modules_Factory"
183+
"Interface_Modules_Render"
184+
"Interface_Modules_Python"
156185
"Core_ConsoleApplication"
186+
"Modules_Factory"
187+
"Modules_Python"
157188
)
158-
IF(BUILD_HEADLESS)
159-
LIST(APPEND SCIRUN_LIBS
160-
"Interface_Application"
161-
"Interface_Modules_Factory"
162-
"Interface_Modules_Render"
163-
)
164-
ENDIF()
165189

166190
FOREACH(lib ${SCIRUN_LIBS})
167191
ADD_CUSTOM_COMMAND(TARGET ${APPLICATION_NAME}
@@ -171,22 +195,72 @@ IF(APPLE AND BUILD_BUNDLE)
171195
${APP_PATH}/Frameworks/${CMAKE_SHARED_LIBRARY_PREFIX}${lib}${CMAKE_SHARED_LIBRARY_SUFFIX}
172196
WORKING_DIRECTORY ${SCIRun_BINARY_DIR})
173197
ENDFOREACH()
198+
ENDIF()
174199

200+
ADD_CUSTOM_COMMAND(TARGET ${APPLICATION_NAME}
201+
POST_BUILD
202+
# configure Qt libs
203+
# Note: macdeployqt also processes SCIRun dynamically linked libraries under the lib directory
204+
COMMAND ${MACDEPLOYQT} ${APPLICATION_NAME}.app -verbose=${MACDEPLOYQT_OUTPUT_LEVEL}
205+
COMMAND ${CMAKE_COMMAND} ARGS -E copy ${SCIRun_SOURCE_DIR}/CMake/qt.conf ${APPLICATION_NAME}.app/Contents/Resources
206+
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory
207+
${SCIRun_BINARY_DIR}/Shaders ${APP_PATH}/MacOS/Shaders
208+
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory
209+
${SCIRun_BINARY_DIR}/Assets ${APP_PATH}/MacOS/Assets
210+
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory
211+
${SCIRun_BINARY_DIR}/Fonts ${APP_PATH}/MacOS/Fonts
212+
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
213+
)
214+
215+
INSTALL(TARGETS ${APPLICATION_NAME} RUNTIME DESTINATION . BUNDLE DESTINATION . )
216+
217+
ELSEIF(APPLE)
218+
219+
MESSAGE(STATUS "Building Mac OS X headless app")
220+
MESSAGE(STATUS "CMAKE_CFG_INTDIR=${CMAKE_CFG_INTDIR}")
221+
SET(APP_PATH ${CMAKE_CFG_INTDIR})
222+
223+
IF(${CMAKE_GENERATOR} MATCHES "Xcode")
224+
SET(SCIRUN_LIB_DIR ${SCIRun_BINARY_DIR}/lib/$<CONFIGURATION>)
225+
ELSE()
226+
SET(SCIRUN_LIB_DIR ${SCIRun_BINARY_DIR}/lib)
227+
ENDIF()
228+
229+
IF(BUILD_WITH_PYTHON)
230+
SET(VERSION_PATH Versions/${SCI_PYTHON_VERSION_SHORT})
231+
SET(FRAMEWORK_PATH Python.framework)
232+
SET(PYTHON_PATH ${APP_PATH}/${FRAMEWORK_PATH}/${VERSION_PATH})
175233
ADD_CUSTOM_COMMAND(TARGET ${APPLICATION_NAME}
176234
POST_BUILD
177-
# configure Qt libs
178-
# Note: macdeployqt also processes SCIRun dynamically linked libraries under the lib directory
179-
COMMAND ${MACDEPLOYQT} ${APPLICATION_NAME}.app -verbose=${MACDEPLOYQT_OUTPUT_LEVEL}
180-
COMMAND ${CMAKE_COMMAND} ARGS -E copy ${SCIRun_SOURCE_DIR}/CMake/qt.conf ${APPLICATION_NAME}.app/Contents/Resources
181-
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory
182-
${SCIRun_BINARY_DIR}/Shaders ${APP_PATH}/MacOS/Shaders
183-
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory
184-
${SCIRun_BINARY_DIR}/Assets ${APP_PATH}/MacOS/Assets
185-
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
235+
# TODO: when CMake 2.8 support is dropped, and CMP0042 new is enabled, change to @rpath
236+
COMMAND ${CMAKE_COMMAND} ARGS -E chdir ${APP_PATH} tar xf ${SCI_PYTHON_FRAMEWORK_ARCHIVE}
237+
COMMAND chmod u+w ${PYTHON_PATH}/Python
238+
COMMAND install_name_tool -id Python ${PYTHON_PATH}/Python
239+
COMMAND install_name_tool -change ${SCI_PYTHON_FRAMEWORK}/${VERSION_PATH}/Python
240+
@executable_path/../${FRAMEWORK_PATH}/${VERSION_PATH}/Python
241+
${APP_PATH}/${APPLICATION_NAME}
242+
COMMAND install_name_tool -change ${SCI_PYTHON_FRAMEWORK}/${VERSION_PATH}/Python
243+
@executable_path/../${FRAMEWORK_PATH}/${VERSION_PATH}/Python
244+
${APP_PATH}/${APPLICATION_NAME}
245+
WORKING_DIRECTORY ${SCIRun_BINARY_DIR})
246+
247+
SET(SCIRUN_LIBS "Core_Application"
248+
"Core_Python"
249+
"SCIRunPythonAPI"
250+
"Engine_Network"
251+
"Core_ConsoleApplication"
252+
"Modules_Factory"
253+
"Modules_Python"
186254
)
187-
ENDIF()
188255

189-
INSTALL(TARGETS ${APPLICATION_NAME} RUNTIME DESTINATION . BUNDLE DESTINATION . )
256+
FOREACH(lib ${SCIRUN_LIBS})
257+
ADD_CUSTOM_COMMAND(TARGET ${APPLICATION_NAME}
258+
POST_BUILD
259+
COMMAND echo "install_name_tool -change ${SCI_PYTHON_FRAMEWORK}/${VERSION_PATH}/Python @executable_path/../${FRAMEWORK_PATH}/${VERSION_PATH}/Python ${SCIRUN_LIB_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${lib}${CMAKE_SHARED_LIBRARY_SUFFIX}"
260+
COMMAND install_name_tool -change ${SCI_PYTHON_FRAMEWORK}/${VERSION_PATH}/Python @executable_path/../${FRAMEWORK_PATH}/${VERSION_PATH}/Python ${SCIRUN_LIB_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${lib}${CMAKE_SHARED_LIBRARY_SUFFIX}
261+
WORKING_DIRECTORY ${SCIRun_BINARY_DIR})
262+
ENDFOREACH()
263+
ENDIF()
190264

191265
ELSE()
192266

@@ -215,8 +289,16 @@ ELSE()
215289
${QT_BINARY_DIR}/${QTNETWORKNAME}.dll
216290
DESTINATION bin)
217291

292+
IF(BUILD_WITH_PYTHON)
293+
INSTALL(PROGRAMS
294+
${SCI_PYTHON_DLL_PATH}
295+
DESTINATION bin)
296+
INSTALL(DIRECTORY "${SCI_PYTHON_MODULE_LIBRARY_PATH}/" DESTINATION bin/${PYTHON_MODULE_SEARCH_PATH})
297+
ENDIF()
298+
218299
INSTALL(DIRECTORY "${SCIRun_BINARY_DIR}/Shaders" DESTINATION bin USE_SOURCE_PERMISSIONS)
219300
INSTALL(DIRECTORY "${SCIRun_BINARY_DIR}/Assets" DESTINATION bin USE_SOURCE_PERMISSIONS)
301+
INSTALL(DIRECTORY "${SCIRun_BINARY_DIR}/Assets" DESTINATION bin USE_SOURCE_PERMISSIONS)
220302
ELSE()
221303
IF(BUILD_WITH_PYTHON)
222304
ADD_CUSTOM_COMMAND(TARGET ${APPLICATION_NAME}
@@ -227,7 +309,6 @@ ELSE()
227309
IF(SCI_PYTHON_64BIT_MODULE_LIBRARY_PATH AND EXISTS ${SCI_PYTHON_64BIT_MODULE_LIBRARY_PATH})
228310
ADD_CUSTOM_COMMAND(TARGET ${APPLICATION_NAME}
229311
POST_BUILD
230-
COMMAND echo "${CMAKE_COMMAND} ARGS -E copy_directory ${SCI_PYTHON_64BIT_MODULE_LIBRARY_PATH} ${PYTHON_MODULE_SEARCH_PATH}"
231312
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory ${SCI_PYTHON_64BIT_MODULE_LIBRARY_PATH} ${PYTHON_MODULE_SEARCH_PATH}
232313
WORKING_DIRECTORY ${SCIRun_BINARY_DIR})
233314
ENDIF()

0 commit comments

Comments
 (0)