Skip to content

Commit 228970a

Browse files
committed
Support selecting JavaScriptCore API version
Signed-off-by: Robert Günzler <[email protected]>
1 parent 58d63e9 commit 228970a

File tree

1 file changed

+50
-20
lines changed

1 file changed

+50
-20
lines changed

cmake/FindJavaScriptCore.cmake

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

0 commit comments

Comments
 (0)