diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2025-05-08 20:21:44 +0200 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2025-05-08 21:34:13 +0200 |
| commit | bcf51371d24283951948470e5ab62ea89e725dbd (patch) | |
| tree | b549cd307918ef19a9363748b9a817fc21a5e3ca /test/CMakeLists.txt | |
| parent | 4d559838338e2dce347fe0e3e7cf63c9ebd03008 (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.
Diffstat (limited to 'test/CMakeLists.txt')
| -rw-r--r-- | test/CMakeLists.txt | 92 |
1 files changed, 47 insertions, 45 deletions
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) |
