diff --git a/cmake/platforms/emscripten.cmake b/cmake/platforms/emscripten.cmake index c7e55fe..5673ebe 100644 --- a/cmake/platforms/emscripten.cmake +++ b/cmake/platforms/emscripten.cmake @@ -35,11 +35,15 @@ set(CMAKE_C_LINK_FLAGS "\ -s EXTRA_EXPORTED_RUNTIME_METHODS='[cwrap,callMain]'") set(build_cli_programs FALSE) +set(build_gui_programs FALSE) function(get_platform_puzzle_extra_source_files OUTVAR NAME) set(${OUTVAR} PARENT_SCOPE) endfunction() +function(set_platform_gui_target_properties TARGET) +endfunction() + function(set_platform_puzzle_target_properties NAME TARGET) em_link_pre_js(${TARGET} ${CMAKE_SOURCE_DIR}/emccpre.js) em_link_js_library(${TARGET} ${CMAKE_SOURCE_DIR}/emcclib.js) diff --git a/cmake/platforms/nestedvm.cmake b/cmake/platforms/nestedvm.cmake index 6862896..3f768a4 100644 --- a/cmake/platforms/nestedvm.cmake +++ b/cmake/platforms/nestedvm.cmake @@ -15,7 +15,7 @@ function(get_platform_puzzle_extra_source_files OUTVAR NAME) set(${OUTVAR} PARENT_SCOPE) endfunction() -function(set_platform_puzzle_target_properties NAME TARGET) +function(set_platform_gui_target_properties TARGET) set(build_subdir ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}-tmp) add_custom_command(OUTPUT ${build_subdir} @@ -56,5 +56,8 @@ function(set_platform_puzzle_target_properties NAME TARGET) ${build_subdir}/PuzzleEngine.class) endfunction() +function(set_platform_puzzle_target_properties NAME TARGET) +endfunction() + function(build_platform_extras) endfunction() diff --git a/cmake/platforms/osx.cmake b/cmake/platforms/osx.cmake index 4577a73..2e95d4b 100644 --- a/cmake/platforms/osx.cmake +++ b/cmake/platforms/osx.cmake @@ -6,10 +6,15 @@ set(CPACK_DMG_VOLUME_NAME "Simon Tatham's Puzzle Collection") include(CPack) set(build_individual_puzzles FALSE) +set(build_gui_programs FALSE) # they don't really fit in the OS X GUI model + function(get_platform_puzzle_extra_source_files OUTVAR NAME) set(${OUTVAR} PARENT_SCOPE) endfunction() +function(set_platform_gui_target_properties TARGET) +endfunction() + function(set_platform_puzzle_target_properties NAME TARGET) endfunction() diff --git a/cmake/platforms/unix.cmake b/cmake/platforms/unix.cmake index 26d2e97..09eed6a 100644 --- a/cmake/platforms/unix.cmake +++ b/cmake/platforms/unix.cmake @@ -75,6 +75,9 @@ function(get_platform_puzzle_extra_source_files OUTVAR NAME) set(${OUTVAR} ${c_icon_file} PARENT_SCOPE) endfunction() +function(set_platform_gui_target_properties TARGET) +endfunction() + function(set_platform_puzzle_target_properties NAME TARGET) get_target_property(official ${TARGET} official) get_target_property(exename ${TARGET} exename) diff --git a/cmake/platforms/windows.cmake b/cmake/platforms/windows.cmake index 377b05d..d4b9092 100644 --- a/cmake/platforms/windows.cmake +++ b/cmake/platforms/windows.cmake @@ -37,11 +37,14 @@ function(get_platform_puzzle_extra_source_files OUTVAR NAME) set(${OUTVAR} ${CMAKE_SOURCE_DIR}/puzzles.rc PARENT_SCOPE) endfunction() +function(set_platform_gui_target_properties TARGET) + set_target_properties(${TARGET} PROPERTIES WIN32_EXECUTABLE ON) +endfunction() + function(set_platform_puzzle_target_properties NAME TARGET) if(DEFINED ICO_DIR AND EXISTS ${ICO_DIR}/${NAME}.ico) target_compile_definitions(${TARGET} PRIVATE ICON_FILE=\"${ICO_DIR}/${NAME}.ico\") endif() - set_target_properties(${TARGET} PROPERTIES WIN32_EXECUTABLE ON) endfunction() function(build_platform_extras) diff --git a/cmake/setup.cmake b/cmake/setup.cmake index 0ccf345..26eb74d 100644 --- a/cmake/setup.cmake +++ b/cmake/setup.cmake @@ -4,6 +4,7 @@ to build as if official (separated by ';')") set(build_individual_puzzles TRUE) set(build_cli_programs TRUE) +set(build_gui_programs TRUE) set(build_icons FALSE) set(need_c_icons FALSE) @@ -90,6 +91,7 @@ function(puzzle NAME) set_property(TARGET ${EXENAME} PROPERTY objective ${OPT_OBJECTIVE}) set_property(TARGET ${EXENAME} PROPERTY official ${official}) set_platform_puzzle_target_properties(${NAME} ${EXENAME}) + set_platform_gui_target_properties(${EXENAME}) endif() endfunction() @@ -109,6 +111,24 @@ function(cliprogram NAME) endif() endfunction() +# Similar to cliprogram, but builds a GUI helper tool, linked against +# the normal puzzle frontend. +function(guiprogram NAME) + cmake_parse_arguments(OPT + "" "COMPILE_DEFINITIONS" "" ${ARGN}) + + if(build_gui_programs) + get_platform_puzzle_extra_source_files(extra_files nullgame) + add_executable(${NAME} ${OPT_UNPARSED_ARGUMENTS} ${extra_files}) + target_link_libraries(${NAME} + common ${platform_gui_libs} ${platform_libs}) + if(OPT_COMPILE_DEFINITIONS) + target_compile_definitions(${NAME} PRIVATE ${OPT_COMPILE_DEFINITIONS}) + endif() + set_platform_gui_target_properties(${NAME}) + endif() +endfunction() + # A small wrapper around cliprogram, taking advantage of the common # formula that puzzle 'foo' often comes with 'foosolver'. function(solver NAME)