Permit building GUI helper tools.

These look like puzzles, in that they link against a frontend and
provide the usual 'struct game', but they don't count as a puzzle for
purposes of shipping, or even having to have descriptions and icons.

There's one of these buried in the code already under an ifdef, which
I'll re-enable in the next commit.
This commit is contained in:
Simon Tatham
2021-05-23 10:01:06 +01:00
parent b54702168b
commit d5b53853aa
6 changed files with 40 additions and 2 deletions

View File

@ -35,11 +35,15 @@ set(CMAKE_C_LINK_FLAGS "\
-s EXTRA_EXPORTED_RUNTIME_METHODS='[cwrap,callMain]'") -s EXTRA_EXPORTED_RUNTIME_METHODS='[cwrap,callMain]'")
set(build_cli_programs FALSE) set(build_cli_programs FALSE)
set(build_gui_programs FALSE)
function(get_platform_puzzle_extra_source_files OUTVAR NAME) function(get_platform_puzzle_extra_source_files OUTVAR NAME)
set(${OUTVAR} PARENT_SCOPE) set(${OUTVAR} PARENT_SCOPE)
endfunction() endfunction()
function(set_platform_gui_target_properties TARGET)
endfunction()
function(set_platform_puzzle_target_properties NAME TARGET) function(set_platform_puzzle_target_properties NAME TARGET)
em_link_pre_js(${TARGET} ${CMAKE_SOURCE_DIR}/emccpre.js) em_link_pre_js(${TARGET} ${CMAKE_SOURCE_DIR}/emccpre.js)
em_link_js_library(${TARGET} ${CMAKE_SOURCE_DIR}/emcclib.js) em_link_js_library(${TARGET} ${CMAKE_SOURCE_DIR}/emcclib.js)

View File

@ -15,7 +15,7 @@ function(get_platform_puzzle_extra_source_files OUTVAR NAME)
set(${OUTVAR} PARENT_SCOPE) set(${OUTVAR} PARENT_SCOPE)
endfunction() 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) set(build_subdir ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}-tmp)
add_custom_command(OUTPUT ${build_subdir} add_custom_command(OUTPUT ${build_subdir}
@ -56,5 +56,8 @@ function(set_platform_puzzle_target_properties NAME TARGET)
${build_subdir}/PuzzleEngine.class) ${build_subdir}/PuzzleEngine.class)
endfunction() endfunction()
function(set_platform_puzzle_target_properties NAME TARGET)
endfunction()
function(build_platform_extras) function(build_platform_extras)
endfunction() endfunction()

View File

@ -6,10 +6,15 @@ set(CPACK_DMG_VOLUME_NAME "Simon Tatham's Puzzle Collection")
include(CPack) include(CPack)
set(build_individual_puzzles FALSE) 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) function(get_platform_puzzle_extra_source_files OUTVAR NAME)
set(${OUTVAR} PARENT_SCOPE) set(${OUTVAR} PARENT_SCOPE)
endfunction() endfunction()
function(set_platform_gui_target_properties TARGET)
endfunction()
function(set_platform_puzzle_target_properties NAME TARGET) function(set_platform_puzzle_target_properties NAME TARGET)
endfunction() endfunction()

View File

@ -75,6 +75,9 @@ function(get_platform_puzzle_extra_source_files OUTVAR NAME)
set(${OUTVAR} ${c_icon_file} PARENT_SCOPE) set(${OUTVAR} ${c_icon_file} PARENT_SCOPE)
endfunction() endfunction()
function(set_platform_gui_target_properties TARGET)
endfunction()
function(set_platform_puzzle_target_properties NAME TARGET) function(set_platform_puzzle_target_properties NAME TARGET)
get_target_property(official ${TARGET} official) get_target_property(official ${TARGET} official)
get_target_property(exename ${TARGET} exename) get_target_property(exename ${TARGET} exename)

View File

@ -37,11 +37,14 @@ function(get_platform_puzzle_extra_source_files OUTVAR NAME)
set(${OUTVAR} ${CMAKE_SOURCE_DIR}/puzzles.rc PARENT_SCOPE) set(${OUTVAR} ${CMAKE_SOURCE_DIR}/puzzles.rc PARENT_SCOPE)
endfunction() 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) function(set_platform_puzzle_target_properties NAME TARGET)
if(DEFINED ICO_DIR AND EXISTS ${ICO_DIR}/${NAME}.ico) if(DEFINED ICO_DIR AND EXISTS ${ICO_DIR}/${NAME}.ico)
target_compile_definitions(${TARGET} PRIVATE ICON_FILE=\"${ICO_DIR}/${NAME}.ico\") target_compile_definitions(${TARGET} PRIVATE ICON_FILE=\"${ICO_DIR}/${NAME}.ico\")
endif() endif()
set_target_properties(${TARGET} PROPERTIES WIN32_EXECUTABLE ON)
endfunction() endfunction()
function(build_platform_extras) function(build_platform_extras)

View File

@ -4,6 +4,7 @@ to build as if official (separated by ';')")
set(build_individual_puzzles TRUE) set(build_individual_puzzles TRUE)
set(build_cli_programs TRUE) set(build_cli_programs TRUE)
set(build_gui_programs TRUE)
set(build_icons FALSE) set(build_icons FALSE)
set(need_c_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 objective ${OPT_OBJECTIVE})
set_property(TARGET ${EXENAME} PROPERTY official ${official}) set_property(TARGET ${EXENAME} PROPERTY official ${official})
set_platform_puzzle_target_properties(${NAME} ${EXENAME}) set_platform_puzzle_target_properties(${NAME} ${EXENAME})
set_platform_gui_target_properties(${EXENAME})
endif() endif()
endfunction() endfunction()
@ -109,6 +111,24 @@ function(cliprogram NAME)
endif() endif()
endfunction() 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 # A small wrapper around cliprogram, taking advantage of the common
# formula that puzzle 'foo' often comes with 'foosolver'. # formula that puzzle 'foo' often comes with 'foosolver'.
function(solver NAME) function(solver NAME)