@@ -8,7 +8,26 @@ if(NOT JavaScriptCore_FOUND)
88 elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
99 add_library (javascript_core INTERFACE IMPORTED )
1010 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+
1231 set_property (TARGET javascript_core PROPERTY
1332 INTERFACE_INCLUDE_DIRECTORIES ${JAVASCRIPTCORE_INCLUDE_DIRS} )
1433 set_property (TARGET javascript_core PROPERTY
@@ -17,6 +36,20 @@ if(NOT JavaScriptCore_FOUND)
1736 INTERFACE_LINK_OPTIONS ${JAVASCRIPTCORE_LDFLAGS} )
1837 set_property (TARGET javascript_core PROPERTY
1938 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+
2053 add_library (JavaScriptCore::JavaScriptCore ALIAS javascript_core)
2154 set (JavaScriptCore_FOUND ON )
2255 endif ()
0 commit comments