@@ -8,7 +8,26 @@ if(NOT JavaScriptCore_FOUND)
8
8
elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
9
9
add_library (javascript_core INTERFACE IMPORTED )
10
10
find_package (PkgConfig REQUIRED)
11
- pkg_check_modules(JAVASCRIPTCORE REQUIRED javascriptcoregtk-4.0)
11
+
12
+ # If find_package(JavaScriptCore [version]) is called we only look for that
13
+ # otherwise loop through a list of supported options, pick the first one found
14
+ # and error out if there is no match
15
+ if (JavaScriptCore_FIND_VERSION)
16
+ pkg_check_modules(JAVASCRIPTCORE javascriptcoregtk-${JavaScriptCore_FIND_VERSION} REQUIRED)
17
+ else ()
18
+ set (supported_versions 6.0 4.1 4.0)
19
+ foreach (ver ${supported_versions} )
20
+ pkg_check_modules(JAVASCRIPTCORE javascriptcoregtk-${ver} )
21
+ if (JAVASCRIPTCORE_FOUND)
22
+ set (JavaScriptCore_FIND_VERSION ${ver} )
23
+ break ()
24
+ endif ()
25
+ endforeach ()
26
+ if (NOT JAVASCRIPTCORE_FOUND)
27
+ message (FATAL_ERROR "Required package JavaScriptCore was not found" )
28
+ endif ()
29
+ endif ()
30
+
12
31
set_property (TARGET javascript_core PROPERTY
13
32
INTERFACE_INCLUDE_DIRECTORIES ${JAVASCRIPTCORE_INCLUDE_DIRS} )
14
33
set_property (TARGET javascript_core PROPERTY
@@ -17,6 +36,20 @@ if(NOT JavaScriptCore_FOUND)
17
36
INTERFACE_LINK_OPTIONS ${JAVASCRIPTCORE_LDFLAGS} )
18
37
set_property (TARGET javascript_core PROPERTY
19
38
INTERFACE_LINK_LIBRARIES ${JAVASCRIPTCORE_LINK_LIBRARIES} )
39
+
40
+ if (JavaScriptCore_FIND_VERSION STREQUAL "6.0" )
41
+ # NOTE: this is required since WebkitGTK (which includes JavaScriptCore) only
42
+ # exposes the GLib headers starting in versions after 4.0
43
+ # see: https://github.com/WebKit/WebKit/blob/main/Source/WebKit/gtk/migrating-to-webkitgtk-6.0.md#stop-using-deprecated-apis
44
+ FILE (GLOB headers ${PROJECT_SOURCE_DIR} /vendor/webkitgtk/Source /JavaScriptCore/API/*.h)
45
+ FOREACH (header ${headers} )
46
+ cmake_path(GET header FILENAME header_filename)
47
+ configure_file ("${header} " "${PROJECT_BINARY_DIR} /javascriptcore-headers/JavaScriptCore/${header_filename} " COPYONLY )
48
+ ENDFOREACH ()
49
+ set_property (TARGET javascript_core PROPERTY
50
+ INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_BINARY_DIR} /javascriptcore-headers" )
51
+ endif ()
52
+
20
53
add_library (JavaScriptCore::JavaScriptCore ALIAS javascript_core)
21
54
set (JavaScriptCore_FOUND ON )
22
55
endif ()
0 commit comments