diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2020-06-13 15:19:27 +0200 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2020-07-15 00:34:53 +0200 |
| commit | 720b84ef9d086245f5119d143202a2661a78ca53 (patch) | |
| tree | 26bcd11ffa797c3c01917507e9204fbc9f9b45aa /test | |
| parent | 54425030774eb04b29c749ffa85d224c8bbfcc34 (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.txt | 291 |
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) |
