summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2020-06-13 15:19:27 +0200
committerAlbrecht Schlosser <albrechts.fltk@online.de>2020-07-15 00:34:53 +0200
commit720b84ef9d086245f5119d143202a2661a78ca53 (patch)
tree26bcd11ffa797c3c01917507e9204fbc9f9b45aa /test
parent54425030774eb04b29c749ffa85d224c8bbfcc34 (diff)
CMake: refactor and reformat CMake files
- raise minimum CMake version from 2.6.3 to 3.2.3 (Jun 01, 2015) - indent all CMake files according to the CMP (2 col.) - refactor FLTK version number definitions and usage - unify CMake and autoconf/configure variable names: - FL_VERSION -> FLTK_VERSION - FL_MAJOR_VERSION -> FLTK_VERSION_MAJOR - etc. for _MINOR_ and _PATCH_, respectively - note: this does not affect FL_VERSION etc. in source code - generate "export headers" for all libraries (experimental: OFF) - port some forgotten goodies from branch-1.3 to master - merge and improve macro 'create_example' (WIP) - remove "temporary" options and code for older CMake versions - include and use 'GenerateExportHeader' (experimental, WIP: OFF) - note: created header files are not yet used - build only *one* DLL with Visual Studio (tested, works) - similar to the bundled IDE projects in 1.3.x - add some dynamically linked test/demo programs ('*-shared') if shared libraries are built (WIP) - split 'macros.cmake': use one file per macro
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt291
1 files changed, 176 insertions, 115 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index f47f33b93..5b6cd575f 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,7 +1,7 @@
#
# CMakeLists.txt used to build test and demo apps by the CMake build system
#
-# Copyright 2004-2019 by Bill Spitzak and others.
+# Copyright 2004-2020 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
@@ -15,120 +15,184 @@
#
#######################################################################
-set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/../bin/examples)
+set (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/../bin/examples)
+
+include (../CMake/FLTK-Functions.cmake)
+include (../CMake/fl_create_example.cmake)
#######################################################################
# audio libs for test apps
-if(WIN32)
- set(AUDIOLIBS winmm)
-elseif(APPLE)
- set(AUDIOLIBS "-framework CoreAudio")
-elseif(HAVE_ALSA_ASOUNDLIB_H)
+if (WIN32)
+ set (AUDIOLIBS winmm)
+elseif (APPLE)
+ set (AUDIOLIBS "-framework CoreAudio")
+elseif (HAVE_ALSA_ASOUNDLIB_H)
find_library(LIB_asound asound)
- if(LIB_asound)
- set(AUDIOLIBS ${LIB_asound})
- endif(LIB_asound)
-endif(WIN32)
+ if (LIB_asound)
+ set (AUDIOLIBS ${LIB_asound})
+ endif (LIB_asound)
+endif (WIN32)
#######################################################################
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
- )
+)
#######################################################################
# Add the ANDROID_OK option if the example can be compiled for Android
# as well as for other platforms.
-if(NOT ANDROID)
-CREATE_EXAMPLE(adjuster adjuster.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(arc arc.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(animated animated.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(ask ask.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(bitmap bitmap.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(blocks blocks.cxx "fltk;${AUDIOLIBS}")
-CREATE_EXAMPLE(boxtype boxtype.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(browser browser.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(button button.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(buttons buttons.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(checkers "checkers.cxx;checkers_pieces.fl" "fltk_images;fltk" ANDROID_OK)
-CREATE_EXAMPLE(clock clock.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(colbrowser colbrowser.cxx fltk)
-CREATE_EXAMPLE(color_chooser color_chooser.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(cursor cursor.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(curve curve.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(demo demo.cxx fltk)
-CREATE_EXAMPLE(device device.cxx "fltk;fltk_images")
-CREATE_EXAMPLE(doublebuffer doublebuffer.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(editor editor.cxx fltk ANDROID_OK)
-CREATE_EXAMPLE(fast_slow fast_slow.fl fltk ANDROID_OK)
-CREATE_EXAMPLE(file_chooser file_chooser.cxx "fltk_images;fltk")
-CREATE_EXAMPLE(fonts fonts.cxx fltk)
-CREATE_EXAMPLE(forms forms.cxx "fltk_forms;fltk")
-CREATE_EXAMPLE(hello hello.cxx fltk)
-CREATE_EXAMPLE(help_dialog help_dialog.cxx "fltk_images;fltk")
-CREATE_EXAMPLE(icon icon.cxx fltk)
-CREATE_EXAMPLE(iconize iconize.cxx fltk)
-CREATE_EXAMPLE(image image.cxx fltk)
-CREATE_EXAMPLE(inactive inactive.fl fltk)
-CREATE_EXAMPLE(input input.cxx fltk)
-CREATE_EXAMPLE(input_choice input_choice.cxx fltk)
-CREATE_EXAMPLE(keyboard "keyboard.cxx;keyboard_ui.fl" fltk)
-CREATE_EXAMPLE(label label.cxx fltk)
-CREATE_EXAMPLE(line_style line_style.cxx fltk)
-CREATE_EXAMPLE(list_visuals list_visuals.cxx fltk)
-CREATE_EXAMPLE(mandelbrot "mandelbrot_ui.fl;mandelbrot.cxx" fltk)
-CREATE_EXAMPLE(menubar menubar.cxx fltk)
-CREATE_EXAMPLE(message message.cxx fltk)
-CREATE_EXAMPLE(minimum minimum.cxx fltk)
-CREATE_EXAMPLE(native-filechooser native-filechooser.cxx "fltk_images;fltk")
-CREATE_EXAMPLE(navigation navigation.cxx fltk)
-CREATE_EXAMPLE(output output.cxx fltk)
-CREATE_EXAMPLE(overlay overlay.cxx fltk)
-CREATE_EXAMPLE(pack pack.cxx fltk)
-CREATE_EXAMPLE(pixmap pixmap.cxx fltk)
-CREATE_EXAMPLE(pixmap_browser pixmap_browser.cxx "fltk_images;fltk")
-CREATE_EXAMPLE(preferences preferences.fl fltk)
-CREATE_EXAMPLE(offscreen offscreen.cxx fltk)
-CREATE_EXAMPLE(radio radio.fl fltk)
-CREATE_EXAMPLE(resize resize.fl fltk)
-CREATE_EXAMPLE(resizebox resizebox.cxx fltk)
-CREATE_EXAMPLE(rotated_text rotated_text.cxx fltk)
-CREATE_EXAMPLE(scroll scroll.cxx fltk)
-CREATE_EXAMPLE(subwindow subwindow.cxx fltk)
-CREATE_EXAMPLE(sudoku sudoku.cxx "fltk_images;fltk;${AUDIOLIBS}")
-CREATE_EXAMPLE(symbols symbols.cxx fltk)
-CREATE_EXAMPLE(tabs tabs.fl fltk)
-CREATE_EXAMPLE(table table.cxx fltk)
-CREATE_EXAMPLE(threads threads.cxx fltk)
-CREATE_EXAMPLE(tile tile.cxx fltk)
-CREATE_EXAMPLE(tiled_image tiled_image.cxx fltk)
-CREATE_EXAMPLE(tree tree.fl fltk)
-CREATE_EXAMPLE(twowin twowin.cxx fltk)
-CREATE_EXAMPLE(utf8 utf8.cxx fltk)
-CREATE_EXAMPLE(valuators valuators.fl fltk)
-CREATE_EXAMPLE(unittests unittests.cxx fltk)
-CREATE_EXAMPLE(windowfocus windowfocus.cxx fltk)
-CREATE_EXAMPLE(fltk-versions ../examples/fltk-versions.cxx fltk)
+
+if (NOT ANDROID)
+
+CREATE_EXAMPLE (adjuster adjuster.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (arc arc.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (animated animated.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (ask ask.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (bitmap bitmap.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (blocks blocks.cxx "fltk;${AUDIOLIBS}")
+CREATE_EXAMPLE (boxtype boxtype.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (browser browser.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (button button.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (buttons buttons.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (checkers "checkers.cxx;checkers_pieces.fl" "fltk_images;fltk" ANDROID_OK)
+CREATE_EXAMPLE (clock clock.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (colbrowser colbrowser.cxx fltk)
+CREATE_EXAMPLE (color_chooser color_chooser.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (cursor cursor.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (curve curve.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (demo demo.cxx fltk)
+CREATE_EXAMPLE (device device.cxx "fltk_images;fltk")
+CREATE_EXAMPLE (doublebuffer doublebuffer.cxx fltk ANDROID_OK)
+CREATE_EXAMPLE (editor "editor.cxx;editor-Info.plist" fltk ANDROID_OK)
+CREATE_EXAMPLE (fast_slow fast_slow.fl fltk ANDROID_OK)
+CREATE_EXAMPLE (file_chooser file_chooser.cxx "fltk_images;fltk")
+CREATE_EXAMPLE (fonts fonts.cxx fltk)
+CREATE_EXAMPLE (forms forms.cxx "fltk_forms;fltk")
+CREATE_EXAMPLE (hello hello.cxx fltk)
+CREATE_EXAMPLE (help_dialog help_dialog.cxx "fltk_images;fltk")
+CREATE_EXAMPLE (icon icon.cxx fltk)
+CREATE_EXAMPLE (iconize iconize.cxx fltk)
+CREATE_EXAMPLE (image image.cxx fltk)
+CREATE_EXAMPLE (inactive inactive.fl fltk)
+CREATE_EXAMPLE (input input.cxx fltk)
+CREATE_EXAMPLE (input_choice input_choice.cxx fltk)
+CREATE_EXAMPLE (keyboard "keyboard.cxx;keyboard_ui.fl" fltk)
+CREATE_EXAMPLE (label label.cxx fltk)
+CREATE_EXAMPLE (line_style line_style.cxx fltk)
+CREATE_EXAMPLE (list_visuals list_visuals.cxx fltk)
+CREATE_EXAMPLE (mandelbrot "mandelbrot_ui.fl;mandelbrot.cxx" fltk)
+CREATE_EXAMPLE (menubar menubar.cxx fltk)
+CREATE_EXAMPLE (message message.cxx fltk)
+CREATE_EXAMPLE (minimum minimum.cxx fltk)
+CREATE_EXAMPLE (native-filechooser native-filechooser.cxx "fltk_images;fltk")
+CREATE_EXAMPLE (navigation navigation.cxx fltk)
+CREATE_EXAMPLE (output output.cxx fltk)
+CREATE_EXAMPLE (overlay overlay.cxx fltk)
+CREATE_EXAMPLE (pack pack.cxx fltk)
+CREATE_EXAMPLE (pixmap pixmap.cxx fltk)
+CREATE_EXAMPLE (pixmap_browser pixmap_browser.cxx "fltk_images;fltk")
+CREATE_EXAMPLE (preferences preferences.fl fltk)
+CREATE_EXAMPLE (offscreen offscreen.cxx fltk)
+CREATE_EXAMPLE (radio radio.fl fltk)
+CREATE_EXAMPLE (resize resize.fl fltk)
+CREATE_EXAMPLE (resizebox resizebox.cxx fltk)
+CREATE_EXAMPLE (rotated_text rotated_text.cxx fltk)
+CREATE_EXAMPLE (scroll scroll.cxx fltk)
+CREATE_EXAMPLE (subwindow subwindow.cxx fltk)
+CREATE_EXAMPLE (sudoku sudoku.cxx "fltk_images;fltk;${AUDIOLIBS}")
+CREATE_EXAMPLE (symbols symbols.cxx fltk)
+CREATE_EXAMPLE (tabs tabs.fl fltk)
+CREATE_EXAMPLE (table table.cxx fltk)
+CREATE_EXAMPLE (threads threads.cxx fltk)
+CREATE_EXAMPLE (tile tile.cxx fltk)
+CREATE_EXAMPLE (tiled_image tiled_image.cxx fltk)
+CREATE_EXAMPLE (tree tree.fl fltk)
+CREATE_EXAMPLE (twowin twowin.cxx fltk)
+CREATE_EXAMPLE (utf8 utf8.cxx fltk)
+CREATE_EXAMPLE (valuators valuators.fl fltk)
+CREATE_EXAMPLE (unittests unittests.cxx fltk)
+CREATE_EXAMPLE (windowfocus windowfocus.cxx fltk)
+
+CREATE_EXAMPLE (fltk-versions ../examples/fltk-versions.cxx fltk)
# OpenGL demos...
-if(OPENGL_FOUND)
-CREATE_EXAMPLE(CubeView "CubeMain.cxx;CubeView.cxx;CubeViewUI.fl" "fltk_gl;fltk")
-CREATE_EXAMPLE(cube cube.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
-CREATE_EXAMPLE(fractals "fractals.cxx;fracviewer.cxx" "fltk_gl;fltk")
-CREATE_EXAMPLE(fullscreen fullscreen.cxx "fltk_gl;fltk")
-CREATE_EXAMPLE(glpuzzle glpuzzle.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
-CREATE_EXAMPLE(gl_overlay gl_overlay.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
-CREATE_EXAMPLE(shape shape.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
-endif(OPENGL_FOUND)
+if (OPENGL_FOUND)
+ CREATE_EXAMPLE (CubeView "CubeMain.cxx;CubeView.cxx;CubeViewUI.fl" "fltk_gl;fltk")
+ CREATE_EXAMPLE (cube cube.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
+ CREATE_EXAMPLE (fractals "fractals.cxx;fracviewer.cxx" "fltk_gl;fltk")
+ CREATE_EXAMPLE (fullscreen fullscreen.cxx "fltk_gl;fltk")
+ CREATE_EXAMPLE (glpuzzle glpuzzle.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
+ CREATE_EXAMPLE (gl_overlay gl_overlay.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
+ CREATE_EXAMPLE (shape shape.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
+endif (OPENGL_FOUND)
# Cairo demo - must also be built w/o Cairo (displays a message box)
if (FLTK_HAVE_CAIRO)
- CREATE_EXAMPLE(cairo_test cairo_test.cxx "fltk_cairo;fltk")
+ CREATE_EXAMPLE (cairo_test cairo_test.cxx "fltk_cairo;fltk")
else ()
- CREATE_EXAMPLE(cairo_test cairo_test.cxx fltk)
+ CREATE_EXAMPLE (cairo_test cairo_test.cxx fltk)
endif (FLTK_HAVE_CAIRO)
-endif(NOT ANDROID)
+# /EXPERIMENTAL/ Build some of the demo programs linked against the shared lib(s)
+
+if (OPTION_BUILD_SHARED_LIBS)
+
+ if (MSVC) # MS Visual C++ aka. Visual Studio
+
+ # We need to link with fl_call_main.c, but this must not be compiled with
+ # macro FL_DLL, whereas the other source file(s) must be compiled with FL_DLL
+ # to link against the shared libs.
+ #
+ # ;-) I *love* Visual Studio (MSVC) ;-)
+ #
+ # Trick: build an object library with just this one file and link the executable
+ # against the shared library plus this object library. Another way would be to
+ # add the extra source file fl_call_main.c to the source files of all targets
+ # and set the FL_DLL compile_definition property only on the main *source* files
+ # but this doesn't work since the same file must be compiled for the "static"
+ # and the "shared" target, for instance hello.cxx for "hello" and "hello-shared".
+
+ add_library (CALL_MAIN OBJECT EXCLUDE_FROM_ALL ../src/fl_call_main.c)
+
+ # define a list of shared targets so we can set COMPILE_DEFINITIONS in a loop
+ set (SHARED_TARGETS)
+
+ CREATE_EXAMPLE (hello-shared hello.cxx "fltk_SHARED;CALL_MAIN")
+ CREATE_EXAMPLE (pixmap_browser-shared pixmap_browser.cxx "fltk_SHARED;CALL_MAIN")
+ CREATE_EXAMPLE (unittests-shared unittests.cxx "fltk_SHARED;CALL_MAIN")
+
+ list (APPEND SHARED_TARGETS hello pixmap_browser unittests)
+
+ if (OPENGL_FOUND)
+ CREATE_EXAMPLE (glpuzzle-shared glpuzzle.cxx "fltk_SHARED;CALL_MAIN;${OPENGL_LIBRARIES}")
+ CREATE_EXAMPLE (shape-shared shape.cxx "fltk_SHARED;CALL_MAIN;${OPENGL_LIBRARIES}")
+
+ list (APPEND SHARED_TARGETS glpuzzle shape)
+
+ endif (OPENGL_FOUND)
+
+ # apply property COMPILE_DEFINITIONS in a loop for all necessary source files
+ foreach (tgt ${SHARED_TARGETS})
+ target_compile_definitions (${tgt}-shared PRIVATE "FL_DLL")
+ endforeach ()
+
+ else () # not MSVC
+
+ CREATE_EXAMPLE (hello-shared hello.cxx fltk_SHARED)
+ CREATE_EXAMPLE (pixmap_browser-shared pixmap_browser.cxx "fltk_images_SHARED;fltk_SHARED")
+ CREATE_EXAMPLE (unittests-shared unittests.cxx fltk_SHARED)
+
+ if (OPENGL_FOUND)
+ CREATE_EXAMPLE (glpuzzle-shared glpuzzle.cxx "fltk_gl_SHARED;fltk_SHARED;${OPENGL_LIBRARIES}")
+ CREATE_EXAMPLE (shape-shared shape.cxx "fltk_gl_SHARED;fltk_SHARED;${OPENGL_LIBRARIES}")
+ endif (OPENGL_FOUND)
+
+ endif (MSVC) # (not MSVC)
+
+endif (OPTION_BUILD_SHARED_LIBS)
+
+endif (NOT ANDROID)
# We need some support files for the demo programs:
@@ -140,34 +204,31 @@ endif(NOT ANDROID)
# prepare for a "better" test file installation path
set (TESTFILE_PATH ${EXECUTABLE_OUTPUT_PATH})
-
-# *FIXME* *DEBUG*
-# message ("test/CMakeLists.txt: EXECUTABLE_OUTPUT_PATH = '${EXECUTABLE_OUTPUT_PATH}'")
-# message ("test/CMakeLists.txt: TESTFILE_PATH = '${TESTFILE_PATH}'")
+# fl_debug_var (TESTFILE_PATH)
# use a target filename to make sure the target directory gets created
-configure_file(demo.menu ${TESTFILE_PATH}/demo.menu COPYONLY)
+configure_file (demo.menu ${TESTFILE_PATH}/demo.menu COPYONLY)
-# use target directory only to avoid redundancy
-configure_file(rgb.txt ${TESTFILE_PATH} COPYONLY)
-configure_file(help_dialog.html ${TESTFILE_PATH} COPYONLY)
-configure_file(browser.cxx ${TESTFILE_PATH} COPYONLY)
-configure_file(editor.cxx ${TESTFILE_PATH} COPYONLY)
+# use target directory only (no filename) to avoid redundancy
+configure_file (rgb.txt ${TESTFILE_PATH} COPYONLY)
+configure_file (help_dialog.html ${TESTFILE_PATH} COPYONLY)
+configure_file (browser.cxx ${TESTFILE_PATH} COPYONLY)
+configure_file (editor.cxx ${TESTFILE_PATH} COPYONLY)
# Apple macOS creates bundles instead of executables and needs a little bit
# more help for demos to run correctly
-if(APPLE AND NOT OPTION_APPLE_X11)
+if (APPLE AND NOT OPTION_APPLE_X11)
- # make the menu structure part of the app
- target_sources(demo PRIVATE demo.menu)
- set_target_properties(demo PROPERTIES MACOSX_BUNDLE TRUE RESOURCE demo.menu )
+ # make the menu structure part of the app
+ target_sources (demo PRIVATE demo.menu)
+ set_target_properties (demo PROPERTIES MACOSX_BUNDLE TRUE RESOURCE demo.menu)
- # add a sample RGB file that otherwise only exists under X11
- target_sources(colbrowser PRIVATE rgb.txt)
- set_target_properties(colbrowser PROPERTIES MACOSX_BUNDLE TRUE RESOURCE rgb.txt )
+ # add a sample RGB file that otherwise only exists under X11
+ target_sources (colbrowser PRIVATE rgb.txt)
+ set_target_properties (colbrowser PROPERTIES MACOSX_BUNDLE TRUE RESOURCE rgb.txt)
- # help_dialog displays an html file as an example
- target_sources(help_dialog PRIVATE help_dialog.html)
- set_target_properties(help_dialog PROPERTIES MACOSX_BUNDLE TRUE RESOURCE help_dialog.html )
+ # help_dialog displays an html file as an example
+ target_sources (help_dialog PRIVATE help_dialog.html)
+ set_target_properties (help_dialog PROPERTIES MACOSX_BUNDLE TRUE RESOURCE help_dialog.html)
-endif(APPLE AND NOT OPTION_APPLE_X11)
+endif (APPLE AND NOT OPTION_APPLE_X11)