summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2025-05-08 20:21:44 +0200
committerAlbrecht Schlosser <albrechts.fltk@online.de>2025-05-08 21:34:13 +0200
commitbcf51371d24283951948470e5ab62ea89e725dbd (patch)
treeb549cd307918ef19a9363748b9a817fc21a5e3ca
parent4d559838338e2dce347fe0e3e7cf63c9ebd03008 (diff)
Simplify CMake build config for test and demo programs
Define platform specific library names as CMake variables so they can be used to build demo programs w/o platform specific instructions. This includes optional components (e.g. OpenGL) and the MSVC specific extra object library (call_main) and the fact that we build only one "monolithic" shared library with MSVC. Also, enable building FLTK Forms library in CI builds.
-rw-r--r--.github/workflows/build.yml8
-rw-r--r--test/CMakeLists.txt92
2 files changed, 51 insertions, 49 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a3803e9cb..81d55a758 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -36,7 +36,7 @@ jobs:
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
- run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D FLTK_BACKEND_WAYLAND=OFF -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused"
+ run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D FLTK_BACKEND_WAYLAND=OFF -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D FLTK_BUILD_FORMS=ON -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused"
- name: Build
working-directory: ${{github.workspace}}/build
@@ -72,7 +72,7 @@ jobs:
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
- run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused -Wsuggest-override"
+ run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D FLTK_BUILD_FORMS=ON -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused -Wsuggest-override"
- name: Build
working-directory: ${{github.workspace}}/build
@@ -103,7 +103,7 @@ jobs:
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
- run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -DFLTK_BUILD_SHARED_LIBS:BOOL=ON -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused -Wsuggest-override"
+ run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -DFLTK_BUILD_SHARED_LIBS:BOOL=ON -D FLTK_BUILD_FORMS=ON -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused -Wsuggest-override"
- name: Build
working-directory: ${{github.workspace}}/build
@@ -130,7 +130,7 @@ jobs:
- name: Configure CMake
working-directory: ${{github.workspace}}/build
- run: cmake -D FLTK_USE_SYSTEM_LIBJPEG:BOOL=OFF -D FLTK_USE_SYSTEM_LIBPNG:BOOL=OFF -D FLTK_USE_SYSTEM_ZLIB:BOOL=OFF -DFLTK_BUILD_SHARED_LIBS:BOOL=ON ..
+ run: cmake -D FLTK_USE_SYSTEM_LIBJPEG:BOOL=OFF -D FLTK_USE_SYSTEM_LIBPNG:BOOL=OFF -D FLTK_USE_SYSTEM_ZLIB:BOOL=OFF -D FLTK_BUILD_FORMS=ON -DFLTK_BUILD_SHARED_LIBS:BOOL=ON ..
- name: Build
working-directory: ${{github.workspace}}/build
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 00765a79b..a841940f6 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -54,22 +54,44 @@ endif(WIN32)
# w/o OpenGL as well. These demos show an alternate GUI or a warning
# when built w/o OpenGL.
#
-# Note: use "${GLDEMO_LIBS}" for their library parameter
-# or "${GLDEMO_SHARED}" to build with shared FLTK libraries
+# For building with Visual Studio (MSVC) we also include the special
+# object library 'call_main' when linking with the shared libraries.
+# Setting the correct library variants as CMake variables may appear
+# confusing but simplifies the build instructions below (makes them
+# platform independent).
+#
+# Note that all CMake variables for libraries can be "CMake lists"
+# and must therefore be quoted when used in fl_create_example().
+#######################################################################
if(OPENGL_FOUND)
set(GLDEMO_LIBS fltk::gl)
if(MSVC)
- set(GLDEMO_SHARED fltk::fltk-shared)
+ set(GLDEMO_SHARED "call_main;fltk::fltk-shared")
else()
set(GLDEMO_SHARED fltk::gl-shared)
endif()
else()
+ # build w/o OpenGL libraries
set(GLDEMO_LIBS fltk::fltk)
- set(GLDEMO_SHARED fltk::fltk-shared)
+ if(MSVC)
+ set(GLDEMO_SHARED "call_main;fltk::fltk-shared")
+ else()
+ set(GLDEMO_SHARED "fltk::fltk-shared")
+ endif()
+endif()
+
+# set FLTK_SHARED and IMAGES_SHARED depending on the platform (MSVC or ...)
+
+if(MSVC)
+ set(FLTK_SHARED "call_main;fltk::fltk-shared")
+ set(IMAGES_SHARED "${FLTK_SHARED}")
+else()
+ set(FLTK_SHARED "fltk::fltk-shared")
+ set(IMAGES_SHARED "fltk::images-shared")
endif()
-# Similar approach for the 'forms' demo (shared lib not supported)
+# similar for the 'forms' demo (shared lib not supported)
if(FLTK_BUILD_FORMS)
set(FORMS_LIBS fltk::forms)
@@ -173,11 +195,11 @@ fl_create_example(valuators valuators.fl fltk::fltk)
fl_create_example(windowfocus windowfocus.cxx fltk::fltk)
fl_create_example(wizard wizard.cxx fltk::fltk)
-# games
+# games w/o shared libs
if(NOT FLTK_BUILD_SHARED_LIBS)
fl_create_example(blocks "blocks.cxx;blocks.plist;blocks.icns" "fltk::fltk;${AUDIOLIBS}")
- fl_create_example(checkers "checkers.cxx;checkers_pieces.fl;checkers.icns" fltk::images)
+ fl_create_example(checkers "checkers.cxx;checkers.plist;checkers_pieces.fl;checkers.icns" fltk::images)
fl_create_example(sudoku "sudoku.cxx;sudoku.plist;sudoku.icns;sudoku.rc" "fltk::images;${AUDIOLIBS}")
endif()
@@ -275,47 +297,27 @@ if(CMAKE_CXX_COMPILER_ID IN_LIST _compilers)
endif() # GNU or Clang (-Wshadow test)
unset(_compilers)
-# Build some of the demo programs linked against the shared FLTK lib(s).
+#########################################################################
+# Build some of the demo programs linked against the shared FLTK lib(s)
+#########################################################################
if(FLTK_BUILD_SHARED_LIBS)
- if(MSVC) # MS Visual C++ aka. Visual Studio
-
- # We need to link with fl_call_main.c which is available as an object
- # library 'call_main' when built with MSVC (see main CMakeLists.txt).
-
- fl_create_example(hello-shared hello.cxx "call_main;fltk::fltk-shared")
- fl_create_example(pixmap_browser-shared pixmap_browser.cxx "call_main;fltk::fltk-shared")
- fl_create_example(unittests-shared "${UNITTEST_SRCS}" "call_main;${GLDEMO_SHARED}")
-
- # Games
- fl_create_example(blocks-shared "blocks.cxx;blocks.plist;blocks.icns" "call_main;fltk::fltk-shared;${AUDIOLIBS}")
- fl_create_example(checkers-shared "checkers.cxx;checkers_pieces.fl;checkers.icns" "call_main;fltk::fltk-shared")
- fl_create_example(sudoku-shared "sudoku.cxx;sudoku.plist;sudoku.icns;sudoku.rc" "call_main;fltk::fltk-shared;${AUDIOLIBS}")
-
- if(OPENGL_FOUND)
- fl_create_example(glpuzzle-shared glpuzzle.cxx "call_main;${GLDEMO_SHARED}")
- fl_create_example(shape-shared shape.cxx "call_main;${GLDEMO_SHARED}")
- endif(OPENGL_FOUND)
-
- else() # not MSVC
-
- fl_create_example(cairo_test-shared cairo_test.cxx fltk::fltk-shared)
- fl_create_example(hello-shared hello.cxx fltk::fltk-shared)
- fl_create_example(pixmap_browser-shared pixmap_browser.cxx fltk::images-shared)
- fl_create_example(unittests-shared "${UNITTEST_SRCS}" "${GLDEMO_SHARED}")
-
- # Games
- fl_create_example(blocks-shared "blocks.cxx;blocks.plist;blocks.icns" "fltk::fltk-shared;${AUDIOLIBS}")
- fl_create_example(checkers-shared "checkers.cxx;checkers_pieces.fl;checkers.icns" fltk::images-shared)
- fl_create_example(sudoku-shared "sudoku.cxx;sudoku.plist;sudoku.icns;sudoku.rc" "fltk::images-shared;${AUDIOLIBS}")
-
- if(OPENGL_FOUND)
- fl_create_example(glpuzzle-shared glpuzzle.cxx "${GLDEMO_SHARED}")
- fl_create_example(shape-shared shape.cxx "${GLDEMO_SHARED}")
- endif(OPENGL_FOUND)
-
- endif(MSVC) # (not MSVC)
+ fl_create_example(cairo_test-shared cairo_test.cxx "${FLTK_SHARED}")
+ fl_create_example(hello-shared hello.cxx "${FLTK_SHARED}")
+ fl_create_example(pixmap_browser-shared pixmap_browser.cxx "${IMAGES_SHARED}")
+ fl_create_example(unittests-shared "${UNITTEST_SRCS}" "${GLDEMO_SHARED}")
+
+ # Games
+ fl_create_example(blocks-shared "blocks.cxx;blocks.plist;blocks.icns" "${FLTK_SHARED};${AUDIOLIBS}")
+ fl_create_example(checkers-shared "checkers.cxx;checkers.plist;checkers_pieces.fl;checkers.icns" "${IMAGES_SHARED}")
+ fl_create_example(sudoku-shared "sudoku.cxx;sudoku.plist;sudoku.icns;sudoku.rc" "${IMAGES_SHARED};${AUDIOLIBS}")
+
+ # demo programs that can't be built w/o OpenGL
+ if(OPENGL_FOUND)
+ fl_create_example(glpuzzle-shared glpuzzle.cxx "${GLDEMO_SHARED}")
+ fl_create_example(shape-shared shape.cxx "${GLDEMO_SHARED}")
+ endif(OPENGL_FOUND)
endif(FLTK_BUILD_SHARED_LIBS)