@@ -121,23 +121,33 @@ function(dpf_add_plugin NAME)
121121 set (_dgl_library)
122122 if (_dpf_plugin_FILES_UI)
123123 if (_dpf_plugin_UI_TYPE STREQUAL "cairo" )
124- dpf__add_dgl_cairo($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >> $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >)
124+ dpf__add_dgl_cairo($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >>
125+ $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
126+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
125127 set (_dgl_library dgl-cairo)
126128 elseif (_dpf_plugin_UI_TYPE STREQUAL "external" )
127- dpf__add_dgl_external($<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >)
129+ dpf__add_dgl_external($<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
130+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
128131 set (_dgl_library dgl-external)
129132 elseif (_dpf_plugin_UI_TYPE STREQUAL "opengl" )
130- dpf__add_dgl_opengl($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >> $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >)
133+ dpf__add_dgl_opengl($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >>
134+ $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
135+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
131136 set (_dgl_library dgl-opengl)
132137 elseif (_dpf_plugin_UI_TYPE STREQUAL "opengl3" )
133- dpf__add_dgl_opengl3($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >> $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >)
138+ dpf__add_dgl_opengl3($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >>
139+ $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
140+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
134141 set (_dgl_library dgl-opengl3)
135142 elseif (_dpf_plugin_UI_TYPE STREQUAL "vulkan" )
136- dpf__add_dgl_vulkan($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >> $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >)
143+ dpf__add_dgl_vulkan($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >>
144+ $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
145+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
137146 set (_dgl_library dgl-vulkan)
138147 elseif (_dpf_plugin_UI_TYPE STREQUAL "webview" )
139148 set (_dpf_plugin_USE_WEB_VIEW TRUE )
140- dpf__add_dgl_external($<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >)
149+ dpf__add_dgl_external($<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
150+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
141151 set (_dgl_library dgl-external)
142152 else ()
143153 message (FATAL_ERROR "Unrecognized UI type for plugin: ${_dpf_plugin_UI_TYPE} " )
@@ -234,6 +244,112 @@ function(dpf_add_plugin NAME)
234244 endforeach ()
235245endfunction ()
236246
247+ # dpf_add_executable(target <args...>)
248+ # ------------------------------------------------------------------------------
249+ #
250+ # Add a simple executable built using the DISTRHO Plugin Framework.
251+ #
252+ # ------------------------------------------------------------------------------
253+ # Arguments:
254+ #
255+ # `UI_TYPE` <type>
256+ # the user interface type, can be one of the following:
257+ # - cairo
258+ # - external
259+ # - opengl (default)
260+ # - opengl3
261+ # - vulkan
262+ # - webview
263+ #
264+ # `NO_SHARED_RESOURCES`
265+ # do not build DPF shared resources (fonts, etc)
266+ #
267+ # `USE_FILE_BROWSER`
268+ # enable file browser dialog APIs
269+ #
270+ # `USE_WEB_VIEW`
271+ # enable web browser view APIs
272+ #
273+ function (dpf_add_executable NAME )
274+ set (options NO_SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW)
275+ set (oneValueArgs UI_TYPE)
276+ cmake_parse_arguments (_dpf_plugin "${options} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
277+
278+ if ("${_dpf_plugin_UI_TYPE} " STREQUAL "" )
279+ set (_dpf_plugin_UI_TYPE "opengl" )
280+ endif ()
281+
282+ set (_dgl_library)
283+ if (_dpf_plugin_UI_TYPE STREQUAL "cairo" )
284+ dpf__add_dgl_cairo($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >>
285+ $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
286+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
287+ set (_dgl_library dgl-cairo)
288+ elseif (_dpf_plugin_UI_TYPE STREQUAL "external" )
289+ dpf__add_dgl_external($<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
290+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
291+ set (_dgl_library dgl-external)
292+ elseif (_dpf_plugin_UI_TYPE STREQUAL "opengl" )
293+ dpf__add_dgl_opengl($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >>
294+ $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
295+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
296+ set (_dgl_library dgl-opengl)
297+ elseif (_dpf_plugin_UI_TYPE STREQUAL "opengl3" )
298+ dpf__add_dgl_opengl3($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >>
299+ $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
300+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
301+ set (_dgl_library dgl-opengl3)
302+ elseif (_dpf_plugin_UI_TYPE STREQUAL "vulkan" )
303+ dpf__add_dgl_vulkan($<NOT :$<BOOL :${_dpf_plugin_NO_SHARED_RESOURCES} >>
304+ $<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
305+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
306+ set (_dgl_library dgl-vulkan)
307+ elseif (_dpf_plugin_UI_TYPE STREQUAL "webview" )
308+ set (_dpf_plugin_USE_WEB_VIEW TRUE )
309+ dpf__add_dgl_external($<BOOL :${_dpf_plugin_USE_FILE_BROWSER} >
310+ $<BOOL :${_dpf_plugin_USE_WEB_VIEW} >)
311+ set (_dgl_library dgl-external)
312+ else ()
313+ message (FATAL_ERROR "Unrecognized UI type for executable: ${_dpf_plugin_UI_TYPE} " )
314+ endif ()
315+
316+ set (_dgl_has_ui OFF )
317+ if (_dgl_library)
318+ set (_dgl_has_ui ON )
319+ endif ()
320+
321+ dpf__create_dummy_source_list(_no_srcs)
322+ dpf__add_executable("${NAME} " ${_no_srcs} )
323+ target_include_directories ("${NAME} " PUBLIC "${DPF_ROOT_DIR} /distrho" )
324+
325+ if (_dpf_plugin_USE_FILE_BROWSER)
326+ target_compile_definitions ("${NAME} " PUBLIC "DGL_USE_FILE_BROWSER" )
327+ endif ()
328+
329+ if (_dpf_plugin_USE_WEB_VIEW)
330+ target_compile_definitions ("${NAME} " PUBLIC "DGL_USE_WEB_VIEW" )
331+ endif ()
332+
333+ if ((NOT WIN32 ) AND (NOT APPLE ) AND (NOT HAIKU))
334+ target_link_libraries ("${NAME} " PRIVATE "dl" )
335+ endif ()
336+
337+ if (_dgl_library)
338+ # make sure that all code will see DGL_* definitions
339+ target_link_libraries ("${NAME} " PUBLIC
340+ "${_dgl_library} "
341+ "${_dgl_library} -definitions"
342+ dgl-system -libs-definitions
343+ dgl-system -libs)
344+ # extra linkage for linux web view
345+ if (LINUX AND _dpf_plugin_USE_WEB_VIEW)
346+ target_link_libraries ("${NAME} " PRIVATE "rt" )
347+ endif ()
348+ # add the files containing C++17 or Objective-C classes
349+ dpf__add_plugin_specific_ui_sources("${NAME} " "${_dpf_plugin_USE_WEB_VIEW} " )
350+ endif ()
351+ endfunction ()
352+
237353# ------------------------------------------------------------------------------
238354# DPF private functions (prefixed with `dpf__`)
239355# ------------------------------------------------------------------------------
@@ -661,7 +777,7 @@ endfunction()
661777#
662778# Add the Cairo variant of DGL, if not already available.
663779#
664- function (dpf__add_dgl_cairo SHARED_RESOURCES USE_FILE_BROWSER)
780+ function (dpf__add_dgl_cairo SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW )
665781 if (TARGET dgl-cairo)
666782 return ()
667783 endif ()
@@ -710,6 +826,21 @@ function(dpf__add_dgl_cairo SHARED_RESOURCES USE_FILE_BROWSER)
710826 target_compile_definitions (dgl-cairo PUBLIC "DGL_USE_FILE_BROWSER" )
711827 endif ()
712828
829+ if (USE_WEB_VIEW)
830+ target_compile_definitions (dgl-cairo PUBLIC "DGL_USE_FILE_BROWSER" )
831+ if (APPLE )
832+ find_library (APPLE_WEBKIT_FRAMEWORK "WebKit" )
833+ target_link_libraries (dgl-cairo PRIVATE "${APPLE_WEBKIT_FRAMEWORK} " )
834+ elseif (WIN32 )
835+ target_sources (dgl-cairo PRIVATE
836+ "${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp" )
837+ set_source_files_properties ("${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp"
838+ PROPERTIES
839+ COMPILE_FLAGS
840+ $<IF:$<BOOL :${MSVC} >,/std:c++17,-std=gnu++17>)
841+ endif ()
842+ endif ()
843+
713844 dpf__add_dgl_system_libs()
714845 target_link_libraries (dgl-cairo PRIVATE dgl-system -libs)
715846
@@ -730,7 +861,7 @@ endfunction()
730861#
731862# Add the external variant of DGL, if not already available.
732863#
733- function (dpf__add_dgl_external USE_FILE_BROWSER)
864+ function (dpf__add_dgl_external USE_FILE_BROWSER USE_WEB_VIEW )
734865 if (TARGET dgl-external)
735866 return ()
736867 endif ()
@@ -770,6 +901,21 @@ function(dpf__add_dgl_external USE_FILE_BROWSER)
770901 target_compile_definitions (dgl-external PUBLIC "DGL_USE_FILE_BROWSER" )
771902 endif ()
772903
904+ if (USE_WEB_VIEW)
905+ target_compile_definitions (dgl-external PUBLIC "DGL_USE_WEB_VIEW" )
906+ if (APPLE )
907+ find_library (APPLE_WEBKIT_FRAMEWORK "WebKit" )
908+ target_link_libraries (dgl-external PRIVATE "${APPLE_WEBKIT_FRAMEWORK} " )
909+ elseif (WIN32 )
910+ target_sources (dgl-external PRIVATE
911+ "${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp" )
912+ set_source_files_properties ("${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp"
913+ PROPERTIES
914+ COMPILE_FLAGS
915+ $<IF:$<BOOL :${MSVC} >,/std:c++17,-std=gnu++17>)
916+ endif ()
917+ endif ()
918+
773919 dpf__add_dgl_system_libs()
774920 target_compile_definitions (dgl-external PUBLIC "DGL_NO_SHARED_RESOURCES" )
775921 target_link_libraries (dgl-external PRIVATE dgl-system -libs)
@@ -786,7 +932,7 @@ endfunction()
786932#
787933# Add the OpenGL variant of DGL, if not already available.
788934#
789- function (dpf__add_dgl_opengl SHARED_RESOURCES USE_FILE_BROWSER)
935+ function (dpf__add_dgl_opengl SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW )
790936 if (TARGET dgl-opengl)
791937 return ()
792938 endif ()
@@ -841,6 +987,21 @@ function(dpf__add_dgl_opengl SHARED_RESOURCES USE_FILE_BROWSER)
841987 target_compile_definitions (dgl-opengl PUBLIC "DGL_USE_FILE_BROWSER" )
842988 endif ()
843989
990+ if (USE_WEB_VIEW)
991+ target_compile_definitions (dgl-opengl PUBLIC "DGL_USE_WEB_VIEW" )
992+ if (APPLE )
993+ find_library (APPLE_WEBKIT_FRAMEWORK "WebKit" )
994+ target_link_libraries (dgl-opengl PRIVATE "${APPLE_WEBKIT_FRAMEWORK} " )
995+ elseif (WIN32 )
996+ target_sources (dgl-opengl PRIVATE
997+ "${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp" )
998+ set_source_files_properties ("${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp"
999+ PROPERTIES
1000+ COMPILE_FLAGS
1001+ $<IF:$<BOOL :${MSVC} >,/std:c++17,-std=gnu++17>)
1002+ endif ()
1003+ endif ()
1004+
8441005 dpf__add_dgl_system_libs()
8451006 target_link_libraries (dgl-opengl PRIVATE dgl-system -libs)
8461007
@@ -856,7 +1017,7 @@ endfunction()
8561017#
8571018# Add the OpenGL3 variant of DGL, if not already available.
8581019#
859- function (dpf__add_dgl_opengl3 SHARED_RESOURCES USE_FILE_BROWSER)
1020+ function (dpf__add_dgl_opengl3 SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW )
8601021 if (TARGET dgl-opengl3)
8611022 return ()
8621023 endif ()
@@ -911,6 +1072,21 @@ function(dpf__add_dgl_opengl3 SHARED_RESOURCES USE_FILE_BROWSER)
9111072 target_compile_definitions (dgl-opengl3 PUBLIC "DGL_USE_FILE_BROWSER" )
9121073 endif ()
9131074
1075+ if (USE_WEB_VIEW)
1076+ target_compile_definitions (dgl-opengl3 PUBLIC "DGL_USE_WEB_VIEW" )
1077+ if (APPLE )
1078+ find_library (APPLE_WEBKIT_FRAMEWORK "WebKit" )
1079+ target_link_libraries (dgl-opengl3 PRIVATE "${APPLE_WEBKIT_FRAMEWORK} " )
1080+ elseif (WIN32 )
1081+ target_sources (dgl-opengl3 PRIVATE
1082+ "${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp" )
1083+ set_source_files_properties ("${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp"
1084+ PROPERTIES
1085+ COMPILE_FLAGS
1086+ $<IF:$<BOOL :${MSVC} >,/std:c++17,-std=gnu++17>)
1087+ endif ()
1088+ endif ()
1089+
9141090 dpf__add_dgl_system_libs()
9151091 target_link_libraries (dgl-opengl3 PRIVATE dgl-system -libs)
9161092
@@ -926,7 +1102,7 @@ endfunction()
9261102#
9271103# Add the Vulkan variant of DGL, if not already available.
9281104#
929- function (dpf__add_dgl_vulkan SHARED_RESOURCES USE_FILE_BROWSER)
1105+ function (dpf__add_dgl_vulkan SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW )
9301106 if (TARGET dgl-vulkan)
9311107 return ()
9321108 endif ()
@@ -976,6 +1152,21 @@ function(dpf__add_dgl_vulkan SHARED_RESOURCES USE_FILE_BROWSER)
9761152 target_compile_definitions (dgl-vulkan PUBLIC "DGL_USE_FILE_BROWSER" )
9771153 endif ()
9781154
1155+ if (USE_WEB_VIEW)
1156+ target_compile_definitions (dgl-vulkan PUBLIC "DGL_USE_WEB_VIEW" )
1157+ if (APPLE )
1158+ find_library (APPLE_WEBKIT_FRAMEWORK "WebKit" )
1159+ target_link_libraries (dgl-vulkan PRIVATE "${APPLE_WEBKIT_FRAMEWORK} " )
1160+ elseif (WIN32 )
1161+ target_sources (dgl-vulkan PRIVATE
1162+ "${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp" )
1163+ set_source_files_properties ("${DPF_ROOT_DIR} /dgl/src/WebViewWin32.cpp"
1164+ PROPERTIES
1165+ COMPILE_FLAGS
1166+ $<IF:$<BOOL :${MSVC} >,/std:c++17,-std=gnu++17>)
1167+ endif ()
1168+ endif ()
1169+
9791170 dpf__add_dgl_system_libs()
9801171 target_link_libraries (dgl-vulkan PRIVATE dgl-system -libs)
9811172
@@ -1002,13 +1193,10 @@ function(dpf__add_plugin_specific_ui_sources NAME USE_WEB_VIEW)
10021193 elseif (WIN32 AND USE_WEB_VIEW)
10031194 target_sources ("${NAME} " PRIVATE
10041195 "${DPF_ROOT_DIR} /distrho/DistrhoUI_win32.cpp" )
1005- if (MSVC )
1006- set_source_files_properties ("${DPF_ROOT_DIR} /distrho/DistrhoUI_win32.cpp"
1007- PROPERTIES COMPILE_FLAGS /std:c++17)
1008- else ()
1009- set_source_files_properties ("${DPF_ROOT_DIR} /distrho/DistrhoUI_win32.cpp"
1010- PROPERTIES COMPILE_FLAGS -std=gnu++17)
1011- endif ()
1196+ set_source_files_properties ("${DPF_ROOT_DIR} /distrho/DistrhoUI_win32.cpp"
1197+ PROPERTIES
1198+ COMPILE_FLAGS
1199+ $<IF:$<BOOL :${MSVC} >,/std:c++17,-std=gnu++17>)
10121200 target_link_libraries ("${NAME} " PRIVATE "ole32" "uuid" )
10131201 endif ()
10141202endfunction ()
0 commit comments