blob: a841940f613bae0388e86770acf3f57cf1659f93 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
|
#
# CMakeLists.txt used to build test and demo apps by the CMake build system
#
# Copyright 2004-2025 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
# file is missing or damaged, see the license at:
#
# https://www.fltk.org/COPYING.php
#
# Please see the following page on how to report bugs and issues:
#
# https://www.fltk.org/bugs.php
#
#######################################################################
include(../CMake/FLTK-Functions.cmake)
include(../CMake/fl_create_example.cmake)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/../bin/test)
set(TESTFILE_PATH ${CMAKE_CURRENT_BINARY_DIR}/../data)
# create data and binary directory to copy scripts and data files
file(MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
file(MAKE_DIRECTORY ${TESTFILE_PATH})
#######################################################################
# Define additional example programs for testing, for instance:
# set(extra_tests issue-276 str-1895)
# Use the source file test/'name'.cxx for each additional program.
# These test programs will be built with image and GL libraries.
# Leave the variable 'extra_tests' empty to disable extra test programs.
set(extra_tests)
#######################################################################
# audio libs for test apps
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)
mark_as_advanced (LIB_asound)
endif(WIN32)
#######################################################################
# Define standard libraries for those OpenGL demos that can be built
# w/o OpenGL as well. These demos show an alternate GUI or a warning
# when built w/o OpenGL.
#
# 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 "call_main;fltk::fltk-shared")
else()
set(GLDEMO_SHARED fltk::gl-shared)
endif()
else()
# build w/o OpenGL libraries
set(GLDEMO_LIBS fltk::fltk)
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 for the 'forms' demo (shared lib not supported)
if(FLTK_BUILD_FORMS)
set(FORMS_LIBS fltk::forms)
else()
set(FORMS_LIBS fltk::fltk)
endif()
#######################################################################
fl_create_example(adjuster adjuster.cxx fltk::fltk)
fl_create_example(arc arc.cxx fltk::fltk)
fl_create_example(animated animated.cxx fltk::fltk)
fl_create_example(ask ask.cxx fltk::fltk)
fl_create_example(bitmap bitmap.cxx fltk::fltk)
fl_create_example(boxtype boxtype.cxx fltk::fltk)
fl_create_example(browser browser.cxx fltk::fltk)
fl_create_example(button button.cxx fltk::fltk)
fl_create_example(buttons buttons.cxx fltk::fltk)
# Cairo demo, built with and w/o Cairo (libcairo is linked implicitly - or not at all)
fl_create_example(cairo_test cairo_test.cxx fltk::fltk)
fl_create_example(clipboard clipboard.cxx fltk::images)
fl_create_example(clock clock.cxx fltk::fltk)
fl_create_example(colbrowser colbrowser.cxx fltk::fltk)
fl_create_example(color_chooser color_chooser.cxx fltk::fltk)
fl_create_example(contrast contrast.cxx fltk::fltk)
fl_create_example(coordinates coordinates.cxx fltk::fltk)
fl_create_example(cursor cursor.cxx fltk::fltk)
fl_create_example(curve curve.cxx fltk::fltk)
fl_create_example(demo demo.cxx fltk::fltk)
fl_create_example(device device.cxx fltk::images)
fl_create_example(doublebuffer doublebuffer.cxx fltk::fltk)
fl_create_example(editor "editor.cxx;editor.plist" fltk::fltk)
fl_create_example(fast_slow fast_slow.fl fltk::fltk)
fl_create_example(file_chooser file_chooser.cxx fltk::images)
fl_create_example(flex_demo flex_demo.cxx fltk::fltk)
fl_create_example(flex_login flex_login.cxx fltk::fltk)
fl_create_example(fltk-versions fltk-versions.cxx fltk::fltk)
fl_create_example(fonts fonts.cxx fltk::fltk)
fl_create_example(forms forms.cxx "${FORMS_LIBS}")
fl_create_example(fullscreen fullscreen.cxx "${GLDEMO_LIBS}")
fl_create_example(grid_alignment grid_alignment.cxx fltk::fltk)
fl_create_example(grid_buttons grid_buttons.cxx fltk::fltk)
fl_create_example(grid_dialog grid_dialog.cxx fltk::fltk)
fl_create_example(grid_login grid_login.cxx fltk::fltk)
fl_create_example(group group.cxx fltk::fltk)
fl_create_example(handle_events handle_events.cxx "${GLDEMO_LIBS}")
fl_create_example(handle_keys handle_keys.cxx fltk::fltk)
fl_create_example(hello hello.cxx fltk::fltk)
fl_create_example(help_dialog help_dialog.cxx fltk::images)
fl_create_example(icon icon.cxx fltk::fltk)
fl_create_example(iconize iconize.cxx fltk::fltk)
fl_create_example(image image.cxx fltk::fltk)
fl_create_example(inactive inactive.fl fltk::fltk)
fl_create_example(input input.cxx fltk::fltk)
fl_create_example(input_choice input_choice.cxx fltk::fltk)
fl_create_example(keyboard "keyboard.cxx;keyboard_ui.fl" fltk::fltk)
fl_create_example(label label.cxx fltk::fltk)
fl_create_example(line_style line_style.cxx fltk::fltk)
fl_create_example(line_style_docs line_style_docs.cxx fltk::fltk)
fl_create_example(list_visuals list_visuals.cxx fltk::fltk)
fl_create_example(mandelbrot "mandelbrot_ui.fl;mandelbrot.cxx" fltk::fltk)
fl_create_example(menubar menubar.cxx fltk::fltk)
fl_create_example(message message.cxx fltk::fltk)
fl_create_example(minimum minimum.cxx fltk::fltk)
fl_create_example(native-filechooser native-filechooser.cxx fltk::images)
fl_create_example(navigation navigation.cxx fltk::fltk)
fl_create_example(output output.cxx fltk::fltk)
fl_create_example(overlay overlay.cxx fltk::fltk)
fl_create_example(pack pack.cxx fltk::fltk)
fl_create_example(pixmap pixmap.cxx fltk::images)
fl_create_example(pixmap_browser pixmap_browser.cxx fltk::images)
fl_create_example(preferences preferences.fl fltk::fltk)
fl_create_example(offscreen offscreen.cxx fltk::fltk)
fl_create_example(radio radio.fl fltk::fltk)
fl_create_example(resize resize.fl fltk::fltk)
fl_create_example(resizebox resizebox.cxx fltk::fltk)
fl_create_example(resize-example1 "resize-example1.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(resize-example2 "resize-example2.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(resize-example3a "resize-example3a.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(resize-example3b "resize-example3b.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(resize-example3c "resize-example3c.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(resize-example4a "resize-example4a.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(resize-example4b "resize-example4b.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(resize-example5a "resize-example5a.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(resize-example5b "resize-example5b.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(resize-example5c "resize-example5c.cxx;resize-arrows.cxx" fltk::fltk)
fl_create_example(rotated_text rotated_text.cxx fltk::fltk)
fl_create_example(scroll scroll.cxx fltk::fltk)
fl_create_example(subwindow subwindow.cxx fltk::fltk)
fl_create_example(symbols symbols.cxx fltk::fltk)
fl_create_example(tabs tabs.fl fltk::fltk)
fl_create_example(table table.cxx fltk::fltk)
fl_create_example(terminal terminal.fl fltk::fltk)
fl_create_example(threads threads.cxx fltk::fltk)
fl_create_example(tile tile.cxx fltk::fltk)
fl_create_example(tiled_image tiled_image.cxx fltk::fltk)
fl_create_example(tree tree.fl fltk::fltk)
fl_create_example(twowin twowin.cxx fltk::fltk)
fl_create_example(utf8 utf8.cxx fltk::fltk)
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 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.plist;checkers_pieces.fl;checkers.icns" fltk::images)
fl_create_example(sudoku "sudoku.cxx;sudoku.plist;sudoku.icns;sudoku.rc" "fltk::images;${AUDIOLIBS}")
endif()
# unittests uses multiple source files and can be built with or w/o OpenGL and "shared"
SET (UNITTEST_SRCS
unittests.cxx
unittests.h
unittest_about.cxx
unittest_points.cxx
unittest_core.cxx
unittest_complex_shapes.cxx
unittest_fast_shapes.cxx
unittest_circles.cxx
unittest_text.cxx
unittest_unicode.cxx
unittest_symbol.cxx
unittest_images.cxx
unittest_viewport.cxx
unittest_scrollbarsize.cxx
unittest_schemes.cxx
unittest_terminal.cxx
)
fl_create_example(unittests "${UNITTEST_SRCS}" "${GLDEMO_LIBS}")
# Create additional test programs (used by developers for testing)
if(extra_tests)
foreach(name ${extra_tests})
fl_create_example(${name} ${name}.cxx "fltk::images;${GLDEMO_LIBS}")
endforeach()
endif()
# OpenGL demos. These programs can't be built w/o OpenGL
if(OPENGL_FOUND)
fl_create_example(CubeView "CubeMain.cxx;CubeView.cxx;CubeViewUI.fl" "${GLDEMO_LIBS}")
fl_create_example(cube cube.cxx "${GLDEMO_LIBS}")
fl_create_example(fractals "fractals.cxx;fracviewer.cxx" "${GLDEMO_LIBS}")
fl_create_example(glut_test glut_test.cxx "${GLDEMO_LIBS}")
if(NOT FLTK_BUILD_SHARED_LIBS)
fl_create_example(glpuzzle glpuzzle.cxx "${GLDEMO_LIBS}")
endif()
fl_create_example(gl_overlay gl_overlay.cxx "${GLDEMO_LIBS}")
fl_create_example(shape shape.cxx "${GLDEMO_LIBS}")
endif(OPENGL_FOUND)
# Test FLTK headers for variable shadowing [-Wshadow] (STR 2728)
#
# The following test program is added only for GNU or Clang compilers which
# are known to support the '-Wshadow' compiler flag. We could also implement
# a compile test but using GNU and Clang appears to be sufficient.
#
# Note 1: usage of `file(GLOB ...)` is discouraged by CMake documentation because
# it doesn't trigger rebuilding when new header files are added. However, this
# is better than nothing.
#
# Note 2: a better way to generate the header file might be with a custom command
# to be able to generate proper dependencies but this is left for later...
#
# Note 3: this test program is only included in CMake builds and was inspired
# by STR 2728: "Add test program to test for shadowed variables (-Wshadow)".
# Its sole purpose is to issue compilation warnings during build time if
# variables are shadowed in public headers.
set(_compilers GNU Clang AppleClang)
if(CMAKE_CXX_COMPILER_ID IN_LIST _compilers)
set(include_all "${CMAKE_CURRENT_BINARY_DIR}/include_all.h")
file(WRITE ${include_all} "/* DO NOT EDIT - this file is created by CMake */\n")
file(GLOB all_headers "${FLTK_SOURCE_DIR}/FL/*.[hH]")
foreach(hd ${all_headers})
get_filename_component(hd "${hd}" NAME)
# skip headers that must not be included directly and fl_config.h if it exists
string(REGEX MATCH "^(mac|win32|x11|wayland|fl_config|gl[a-z_0-9]*)\.[hH]$" skip "${hd}")
if(skip STREQUAL "")
file(APPEND ${include_all} "#include <FL/${hd}>\n")
endif()
endforeach()
if(FLTK_USE_GL)
file(GLOB all_headers "${FLTK_SOURCE_DIR}/FL/gl*.[hH]")
foreach(hd ${all_headers})
get_filename_component(hd "${hd}" NAME)
file(APPEND ${include_all} "#include <FL/${hd}>\n")
endforeach()
endif(FLTK_USE_GL)
file(APPEND ${include_all} "/* End of generated file */\n")
# now add the 'shadow_variables' target and set the compiler flag
fl_create_example(shadow_variables shadow_variables.cxx fltk::fltk)
set_target_properties(shadow_variables PROPERTIES COMPILE_FLAGS -Wshadow)
endif() # GNU or Clang (-Wshadow test)
unset(_compilers)
#########################################################################
# Build some of the demo programs linked against the shared FLTK lib(s)
#########################################################################
if(FLTK_BUILD_SHARED_LIBS)
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)
#####################################################
# We need some support files for the demo programs
#####################################################
# copy the required test files
file(COPY
demo.menu rgb.txt browser.cxx editor.cxx valuators.fl
help_dialog.html
DESTINATION ${TESTFILE_PATH}
)
# copy the image directory for help_dialog.html
file(COPY
${CMAKE_CURRENT_SOURCE_DIR}/images
DESTINATION ${TESTFILE_PATH}
)
# The main test program 'demo' needs additional hints and configurations.
# Note: CMake defines "CMAKE_INTDIR" which is the build type folder (e.g. "Debug")
# for multi config builds (MSVC, Xcode)
|