mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 19:57:44 +00:00
Meta: Move LibWeb's CMake generation script to its own file
This patch has no functional changes, but prepares the CMake script to be able to handle LibWeb on Lagom.
This commit is contained in:
parent
9035d9e845
commit
b37379d489
4 changed files with 356 additions and 328 deletions
160
Meta/CMake/libweb_generators.cmake
Normal file
160
Meta/CMake/libweb_generators.cmake
Normal file
|
@ -0,0 +1,160 @@
|
|||
function (generate_css_implementation)
|
||||
|
||||
set(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(LIBWEB_OUTPUT_FOLDER "")
|
||||
set(LIBWEB_META_PREFIX "")
|
||||
|
||||
invoke_generator(
|
||||
"Enums.cpp"
|
||||
Lagom::GenerateCSSEnums
|
||||
"${LIBWEB_INPUT_FOLDER}/CSS/Enums.json"
|
||||
"${LIBWEB_META_PREFIX}"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/Enums.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/Enums.cpp"
|
||||
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Enums.json"
|
||||
)
|
||||
|
||||
invoke_generator(
|
||||
"MediaFeatureID.cpp"
|
||||
Lagom::GenerateCSSMediaFeatureID
|
||||
"${LIBWEB_INPUT_FOLDER}/CSS/MediaFeatures.json"
|
||||
"${LIBWEB_META_PREFIX}"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/MediaFeatureID.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/MediaFeatureID.cpp"
|
||||
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/MediaFeatures.json"
|
||||
)
|
||||
|
||||
invoke_generator(
|
||||
"PropertyID.cpp"
|
||||
Lagom::GenerateCSSPropertyID
|
||||
"${LIBWEB_INPUT_FOLDER}/CSS/Properties.json"
|
||||
"${LIBWEB_META_PREFIX}"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/PropertyID.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/PropertyID.cpp"
|
||||
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Properties.json"
|
||||
)
|
||||
|
||||
invoke_generator(
|
||||
"TransformFunctions.cpp"
|
||||
Lagom::GenerateCSSTransformFunctions
|
||||
"${LIBWEB_INPUT_FOLDER}/CSS/TransformFunctions.json"
|
||||
"${LIBWEB_META_PREFIX}"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/TransformFunctions.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/TransformFunctions.cpp"
|
||||
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/TransformFunctions.json"
|
||||
)
|
||||
|
||||
invoke_generator(
|
||||
"ValueID.cpp"
|
||||
Lagom::GenerateCSSValueID
|
||||
"${LIBWEB_INPUT_FOLDER}/CSS/Identifiers.json"
|
||||
"${LIBWEB_META_PREFIX}"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/ValueID.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}CSS/ValueID.cpp"
|
||||
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Identifiers.json"
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp
|
||||
COMMAND "${CMAKE_COMMAND}" -E make_directory ${LIBWEB_OUTPUT_FOLDER}CSS
|
||||
COMMAND "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" default_stylesheet_source "${LIBWEB_INPUT_FOLDER}/CSS/Default.css" > ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp.tmp
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp.tmp ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp
|
||||
COMMAND "${CMAKE_COMMAND}" -E remove ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp.tmp
|
||||
VERBATIM
|
||||
DEPENDS "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh"
|
||||
MAIN_DEPENDENCY ${LIBWEB_INPUT_FOLDER}/CSS/Default.css
|
||||
)
|
||||
add_custom_target(generate_${LIBWEB_META_PREFIX}DefaultStyleSheetSource.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp)
|
||||
add_dependencies(all_generated generate_${LIBWEB_META_PREFIX}DefaultStyleSheetSource.cpp)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp
|
||||
COMMAND "${CMAKE_COMMAND}" -E make_directory ${LIBWEB_OUTPUT_FOLDER}CSS
|
||||
COMMAND "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" quirks_mode_stylesheet_source "${LIBWEB_INPUT_FOLDER}/CSS/QuirksMode.css" > ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp.tmp
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp.tmp ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp
|
||||
COMMAND "${CMAKE_COMMAND}" -E remove ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp.tmp
|
||||
VERBATIM
|
||||
DEPENDS "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh"
|
||||
MAIN_DEPENDENCY ${LIBWEB_INPUT_FOLDER}/CSS/Default.css
|
||||
)
|
||||
add_custom_target(generate_${LIBWEB_META_PREFIX}QuirksModeStyleSheetSource.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp)
|
||||
add_dependencies(all_generated generate_${LIBWEB_META_PREFIX}QuirksModeStyleSheetSource.cpp)
|
||||
|
||||
endfunction()
|
||||
|
||||
function (generate_js_wrappers target)
|
||||
|
||||
set(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(LIBWEB_OUTPUT_FOLDER "")
|
||||
set(LIBWEB_META_PREFIX "")
|
||||
|
||||
function(libweb_js_wrapper class)
|
||||
cmake_parse_arguments(PARSE_ARGV 1 LIBWEB_WRAPPER "ITERABLE" "" "")
|
||||
get_filename_component(basename "${class}" NAME)
|
||||
set(BINDINGS_SOURCES
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Wrapper.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Wrapper.cpp"
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.cpp"
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.cpp"
|
||||
)
|
||||
set(BINDINGS_TYPES
|
||||
header
|
||||
implementation
|
||||
constructor-header
|
||||
constructor-implementation
|
||||
prototype-header
|
||||
prototype-implementation
|
||||
)
|
||||
# FIXME: Instead of requiring a manual declaration of iterable wrappers, we should ask WrapperGenerator if it's iterable
|
||||
if(LIBWEB_WRAPPER_ITERABLE)
|
||||
list(APPEND BINDINGS_SOURCES
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorWrapper.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorWrapper.cpp"
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorPrototype.h"
|
||||
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorPrototype.cpp"
|
||||
)
|
||||
list(APPEND BINDINGS_TYPES
|
||||
iterator-header
|
||||
iterator-implementation
|
||||
iterator-prototype-header
|
||||
iterator-prototype-implementation
|
||||
)
|
||||
endif()
|
||||
target_sources(${target} PRIVATE ${BINDINGS_SOURCES})
|
||||
# FIXME: cmake_minimum_required(3.17) for ZIP_LISTS
|
||||
list(LENGTH BINDINGS_SOURCES num_bindings)
|
||||
math(EXPR bindings_end "${num_bindings} - 1")
|
||||
foreach(iter RANGE "${bindings_end}")
|
||||
list(GET BINDINGS_SOURCES ${iter} bindings_src)
|
||||
list(GET BINDINGS_TYPES ${iter} bindings_type)
|
||||
get_property(include_paths DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
|
||||
list(TRANSFORM include_paths PREPEND -i)
|
||||
add_custom_command(
|
||||
OUTPUT "${bindings_src}"
|
||||
COMMAND "$<TARGET_FILE:Lagom::WrapperGenerator>" "--${bindings_type}" ${include_paths} "${LIBWEB_INPUT_FOLDER}/${class}.idl" "${LIBWEB_INPUT_FOLDER}" > "${bindings_src}.tmp"
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${bindings_src}.tmp" "${bindings_src}"
|
||||
COMMAND "${CMAKE_COMMAND}" -E remove "${bindings_src}.tmp"
|
||||
VERBATIM
|
||||
DEPENDS Lagom::WrapperGenerator
|
||||
MAIN_DEPENDENCY ${LIBWEB_INPUT_FOLDER}/${class}.idl
|
||||
)
|
||||
endforeach()
|
||||
add_custom_target(generate_${basename}Wrapper.h DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Wrapper.h)
|
||||
add_dependencies(all_generated generate_${basename}Wrapper.h)
|
||||
add_custom_target(generate_${basename}Wrapper.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Wrapper.cpp)
|
||||
add_dependencies(all_generated generate_${basename}Wrapper.cpp)
|
||||
add_custom_target(generate_${basename}Constructor.h DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.h)
|
||||
add_dependencies(all_generated generate_${basename}Constructor.h)
|
||||
add_custom_target(generate_${basename}Constructor.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.cpp)
|
||||
add_dependencies(all_generated generate_${basename}Constructor.cpp)
|
||||
add_custom_target(generate_${basename}Prototype.h DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.h)
|
||||
add_dependencies(all_generated generate_${basename}Prototype.h)
|
||||
add_custom_target(generate_${basename}Prototype.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.cpp)
|
||||
add_dependencies(all_generated generate_${basename}Prototype.cpp)
|
||||
endfunction()
|
||||
|
||||
include("${LIBWEB_INPUT_FOLDER}/idl_files.cmake")
|
||||
|
||||
endfunction()
|
Loading…
Add table
Add a link
Reference in a new issue