diff --git a/Buildscr b/Buildscr index ba6ffca..69cc2d0 100644 --- a/Buildscr +++ b/Buildscr @@ -24,6 +24,16 @@ in puzzles do echo '$#define VER "Version $(Version)"' >> version.h # them!) in puzzles do perl -i -pe 's/Unidentified build/$(Version)/' osx/Info.plist +ifneq "$(NOICONS)" yes then + # Run enough of a native Unix build to produce the various icons. + in . do cmake -B build-icons puzzles + in build-icons do make -j$(nproc) icons VERBOSE=1 + + # Copy the C icon files into the icons source subdirectory, for the + # distribution tarball. + in . do cp build-icons/icons/*-icon.c puzzles/icons +endif + # The very first thing we do is to make the source archive, before we # fill up the build directory with extra files. delegate - @@ -38,13 +48,6 @@ delegate - return puzzles-$(Version).tar.gz enddelegate -ifneq "$(NOICONS)" yes then - # Run enough of a native Unix build to produce the icons needed for - # the Windows builds and the website. - in puzzles do cmake -B build-icons . - in puzzles/build-icons do make -j$(nproc) icons VERBOSE=1 -endif - ifneq "$(NOMACOS)" yes then # Build the OS X binaries and .dmg archive. delegate osx @@ -59,8 +62,8 @@ ifneq "$(NOWINDOWS)" yes then in puzzles do make -f Makefile.doc clean in puzzles do make -f Makefile.doc -j$(nproc) # build help files for installer - in puzzles do cmake -B build-win64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -DCMAKE_TOOLCHAIN_FILE=$(cmake_toolchain_clangcl64) . - in puzzles do cmake -B build-win32 -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -DCMAKE_TOOLCHAIN_FILE=$(cmake_toolchain_clangcl32) . + in . with cmake_at_least_3.20 do cmake -B puzzles/build-win64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -DCMAKE_TOOLCHAIN_FILE=$(cmake_toolchain_clangcl64) -DICO_DIR=$$PWD/build-icons/icons puzzles + in . with cmake_at_least_3.20 do cmake -B puzzles/build-win32 -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -DCMAKE_TOOLCHAIN_FILE=$(cmake_toolchain_clangcl32) -DICO_DIR=$$PWD/build-icons/icons puzzles in puzzles/build-win64 do make -j$(nproc) VERBOSE=1 in puzzles/build-win32 do make -j$(nproc) VERBOSE=1 @@ -150,7 +153,7 @@ in puzzles do echo RedirectMatch temp '(.*/)'puzzles-installer.msi '$$1'puzzles- # Phew, we're done. Deliver everything! ifneq "$(NOICONS)" yes then - deliver puzzles/build-icons/icons/*-web.png $@ + deliver build-icons/icons/*-web.png $@ endif ifneq "$(NOWINDOWS)" yes then deliver puzzles/winbin64/*.exe $@ diff --git a/cmake/platforms/unix.cmake b/cmake/platforms/unix.cmake index 1bed675..b858be8 100644 --- a/cmake/platforms/unix.cmake +++ b/cmake/platforms/unix.cmake @@ -51,9 +51,21 @@ endif() function(get_platform_puzzle_extra_source_files OUTVAR NAME) if(build_icons AND EXISTS ${CMAKE_SOURCE_DIR}/icons/${NAME}.sav) + # If we have the equipment to rebuild the puzzles' icon images + # from scratch, do so. Then changes in the puzzle display code + # will cause the icon to auto-update. build_icon(${NAME}) set(c_icon_file ${CMAKE_BINARY_DIR}/icons/${NAME}-icon.c) + elseif(EXISTS ${CMAKE_SOURCE_DIR}/icons/${NAME}-icon.c) + # Failing that, use a pre-built icon file in the 'icons' + # subdirectory, if there is one. (They don't exist in git, but the + # distribution tarball will have pre-built them and put them in + # there, so that users building from that can still have icons + # even if they don't have the wherewithal to rebuild them.) + set(c_icon_file ${CMAKE_SOURCE_DIR}/icons/${NAME}-icon.c) else() + # Failing even that, include no-icon.c to satisfy the link-time + # dependencies. The puzzles will build without nice icons. set(c_icon_file ${CMAKE_SOURCE_DIR}/no-icon.c) endif() diff --git a/icons/icons.cmake b/icons/icons.cmake index 873c3c7..b5ee02e 100644 --- a/icons/icons.cmake +++ b/icons/icons.cmake @@ -236,6 +236,7 @@ function(build_icon name) DEPENDS ${icon_srcdir}/cicon.pl ${cicon_pl_infiles}) + list(APPEND output_icon_files ${icon_bindir}/${name}-icon.c) add_custom_target(${name}-icons DEPENDS ${output_icon_files}) add_dependencies(icons ${name}-icons)