Skip to content

Commit fbc376e

Browse files
committed
Support selecting JavaScriptCore API version
Signed-off-by: Robert Günzler <[email protected]>
1 parent 72889b3 commit fbc376e

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

cmake/FindJavaScriptCore.cmake

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)