aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Buildscr23
-rw-r--r--cmake/platforms/unix.cmake12
-rw-r--r--icons/icons.cmake1
3 files changed, 26 insertions, 10 deletions
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)