mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:32:44 +00:00 
			
		
		
		
	LibWeb: Use foreach to generate wrapper targets and tidy up CMakeLists
Gather the custom commands for each of the 6 bindings generated targets for libjs_js_wrapper invocations into some lists so that we can foreach over the lists instead of having 6 copy pasted commands with one or two things modified for each one. Additional refactoring, use target_sources command to inform CMake about additional source files for LibWeb, but only after it's been declared as a library via add_library. Also avoid use of the write_if_different script and use cmake -E copy_if_different instead. This lets us express the actions in rules that CMake understands without going to an external source file. It exposes a few optimization opportunities for the code generators to accept an output filename instead of always going to stdout.
This commit is contained in:
		
							parent
							
								
									e88761b2b9
								
							
						
					
					
						commit
						cdfd0bad1f
					
				
					 1 changed files with 69 additions and 75 deletions
				
			
		|  | @ -242,70 +242,50 @@ set(GENERATED_SOURCES | ||||||
|     ../../Services/WebContent/WebContentServerEndpoint.h |     ../../Services/WebContent/WebContentServerEndpoint.h | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| set_property(GLOBAL PROPERTY wrapper_sources) | serenity_lib(LibWeb web) | ||||||
| function(add_wrapper_sources) | target_link_libraries(LibWeb LibCore LibJS LibMarkdown LibGemini LibGUI LibGfx LibTextCodec LibProtocol LibImageDecoderClient LibWasm) | ||||||
|     get_property(tmp GLOBAL PROPERTY wrapper_sources) |  | ||||||
|     foreach(arg ${ARGV}) |  | ||||||
|         set(tmp ${tmp} |  | ||||||
|             ${arg} |  | ||||||
|         ) |  | ||||||
|     endforeach() |  | ||||||
|     set_property(GLOBAL PROPERTY wrapper_sources "${tmp}") |  | ||||||
| endfunction(add_wrapper_sources) |  | ||||||
| 
 | 
 | ||||||
| function(libweb_js_wrapper class) | function(libweb_js_wrapper class) | ||||||
|     get_filename_component(basename ${class} NAME) |     get_filename_component(basename "${class}" NAME) | ||||||
|     add_wrapper_sources(Bindings/${basename}Wrapper.cpp Bindings/${basename}Wrapper.h) |     set(BINDINGS_SOURCES | ||||||
|     add_wrapper_sources(Bindings/${basename}Constructor.cpp Bindings/${basename}Constructor.h) |         "Bindings/${basename}Wrapper.h" | ||||||
|     add_wrapper_sources(Bindings/${basename}Prototype.cpp Bindings/${basename}Prototype.h) |         "Bindings/${basename}Wrapper.cpp" | ||||||
|     add_custom_command( |         "Bindings/${basename}Constructor.h" | ||||||
|         OUTPUT Bindings/${basename}Wrapper.h |         "Bindings/${basename}Constructor.cpp" | ||||||
|         COMMAND ${write_if_different} Bindings/${basename}Wrapper.h CodeGenerators/WrapperGenerator --header ${CMAKE_CURRENT_SOURCE_DIR}/${class}.idl |         "Bindings/${basename}Prototype.h" | ||||||
|         VERBATIM |         "Bindings/${basename}Prototype.cpp" | ||||||
|         DEPENDS WrapperGenerator |  | ||||||
|         MAIN_DEPENDENCY ${class}.idl |  | ||||||
|     ) |     ) | ||||||
|     add_custom_command( |     set(BINDINGS_TYPES | ||||||
|         OUTPUT Bindings/${basename}Wrapper.cpp |         header | ||||||
|         COMMAND ${write_if_different} Bindings/${basename}Wrapper.cpp CodeGenerators/WrapperGenerator --implementation ${CMAKE_CURRENT_SOURCE_DIR}/${class}.idl |         implementation | ||||||
|         VERBATIM |         constructor-header | ||||||
|         DEPENDS WrapperGenerator |         constructor-implementation | ||||||
|         MAIN_DEPENDENCY ${class}.idl |         prototype-header | ||||||
|  |         prototype-implementation | ||||||
|     ) |     ) | ||||||
|     add_custom_command( |     target_sources(LibWeb PRIVATE ${BINDINGS_SOURCES}) | ||||||
|         OUTPUT Bindings/${basename}Constructor.h |     # FIXME: cmake_minimum_required(3.17) for ZIP_LISTS | ||||||
|         COMMAND ${write_if_different} Bindings/${basename}Constructor.h CodeGenerators/WrapperGenerator --constructor-header ${CMAKE_CURRENT_SOURCE_DIR}/${class}.idl |     list(LENGTH BINDINGS_SOURCES num_bindings) | ||||||
|         VERBATIM |     math(EXPR bindings_end "${num_bindings} - 1") | ||||||
|         DEPENDS WrapperGenerator |     foreach(iter RANGE "${bindings_end}") | ||||||
|         MAIN_DEPENDENCY ${class}.idl |         list(GET BINDINGS_SOURCES ${iter} bindings_src) | ||||||
|     ) |         list(GET BINDINGS_TYPES ${iter} bindings_type) | ||||||
|     add_custom_command( |         add_custom_command( | ||||||
|         OUTPUT Bindings/${basename}Constructor.cpp |             OUTPUT "${bindings_src}" | ||||||
|         COMMAND ${write_if_different} Bindings/${basename}Constructor.cpp CodeGenerators/WrapperGenerator --constructor-implementation ${CMAKE_CURRENT_SOURCE_DIR}/${class}.idl |             COMMAND "$<TARGET_FILE:WrapperGenerator>" "--${bindings_type}" "${CMAKE_CURRENT_SOURCE_DIR}/${class}.idl" > "${bindings_src}.tmp" | ||||||
|         VERBATIM |             COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${bindings_src}.tmp" "${bindings_src}" | ||||||
|         DEPENDS WrapperGenerator |             COMMAND "${CMAKE_COMMAND}" -E remove "${bindings_src}.tmp" | ||||||
|         MAIN_DEPENDENCY ${class}.idl |             VERBATIM | ||||||
|     ) |             DEPENDS WrapperGenerator | ||||||
|     add_custom_command( |             MAIN_DEPENDENCY ${class}.idl | ||||||
|         OUTPUT Bindings/${basename}Prototype.h |         ) | ||||||
|         COMMAND ${write_if_different} Bindings/${basename}Prototype.h CodeGenerators/WrapperGenerator --prototype-header ${CMAKE_CURRENT_SOURCE_DIR}/${class}.idl |     endforeach() | ||||||
|         VERBATIM |     add_custom_target(generate_${basename}Wrapper.h DEPENDS Bindings/${basename}Wrapper.h) | ||||||
|         DEPENDS WrapperGenerator |     add_custom_target(generate_${basename}Wrapper.cpp DEPENDS Bindings/${basename}Wrapper.cpp) | ||||||
|         MAIN_DEPENDENCY ${class}.idl |     add_custom_target(generate_${basename}Constructor.h DEPENDS Bindings/${basename}Constructor.h) | ||||||
|     ) |     add_custom_target(generate_${basename}Constructor.cpp DEPENDS Bindings/${basename}Constructor.cpp) | ||||||
|     add_custom_command( |     add_custom_target(generate_${basename}Prototype.h DEPENDS Bindings/${basename}Prototype.h) | ||||||
|         OUTPUT Bindings/${basename}Prototype.cpp |     add_custom_target(generate_${basename}Prototype.cpp DEPENDS Bindings/${basename}Prototype.cpp) | ||||||
|         COMMAND ${write_if_different} Bindings/${basename}Prototype.cpp CodeGenerators/WrapperGenerator --prototype-implementation ${CMAKE_CURRENT_SOURCE_DIR}/${class}.idl |  | ||||||
|         VERBATIM |  | ||||||
|         DEPENDS WrapperGenerator |  | ||||||
|         MAIN_DEPENDENCY ${class}.idl |  | ||||||
|     ) |  | ||||||
|     add_custom_target(generate_${basename}Wrapper.h DEPENDS Bindings/${class}Wrapper.h) |  | ||||||
|     add_custom_target(generate_${basename}Wrapper.cpp DEPENDS Bindings/${class}Wrapper.cpp) |  | ||||||
|     add_custom_target(generate_${basename}Constructor.h DEPENDS Bindings/${class}Constructor.h) |  | ||||||
|     add_custom_target(generate_${basename}Constructor.cpp DEPENDS Bindings/${class}Constructor.cpp) |  | ||||||
|     add_custom_target(generate_${basename}Prototype.h DEPENDS Bindings/${class}Prototype.h) |  | ||||||
|     add_custom_target(generate_${basename}Prototype.cpp DEPENDS Bindings/${class}Prototype.cpp) |  | ||||||
| endfunction() | endfunction() | ||||||
| 
 | 
 | ||||||
| libweb_js_wrapper(CSS/CSSStyleDeclaration) | libweb_js_wrapper(CSS/CSSStyleDeclaration) | ||||||
|  | @ -420,12 +400,12 @@ libweb_js_wrapper(XHR/ProgressEvent) | ||||||
| libweb_js_wrapper(XHR/XMLHttpRequest) | libweb_js_wrapper(XHR/XMLHttpRequest) | ||||||
| libweb_js_wrapper(XHR/XMLHttpRequestEventTarget) | libweb_js_wrapper(XHR/XMLHttpRequestEventTarget) | ||||||
| 
 | 
 | ||||||
| get_property(WRAPPER_SOURCES GLOBAL PROPERTY wrapper_sources) |  | ||||||
| set(SOURCES ${SOURCES} ${WRAPPER_SOURCES}) |  | ||||||
| 
 |  | ||||||
| add_custom_command( | add_custom_command( | ||||||
|     OUTPUT CSS/PropertyID.h |     OUTPUT CSS/PropertyID.h | ||||||
|     COMMAND ${write_if_different} CSS/PropertyID.h CodeGenerators/Generate_CSS_PropertyID_h ${CMAKE_CURRENT_SOURCE_DIR}/CSS/Properties.json |     COMMAND ${CMAKE_COMMAND} -E make_directory CSS | ||||||
|  |     COMMAND "$<TARGET_FILE:Generate_CSS_PropertyID_h>" "${CMAKE_CURRENT_SOURCE_DIR}/CSS/Properties.json" > CSS/PropertyID.h.tmp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/PropertyID.h.tmp CSS/PropertyID.h | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E remove CSS/PropertyID.h.tmp | ||||||
|     VERBATIM |     VERBATIM | ||||||
|     DEPENDS Generate_CSS_PropertyID_h |     DEPENDS Generate_CSS_PropertyID_h | ||||||
|     MAIN_DEPENDENCY CSS/Properties.json |     MAIN_DEPENDENCY CSS/Properties.json | ||||||
|  | @ -435,15 +415,21 @@ add_custom_target(generate_PropertyID.h DEPENDS CSS/PropertyID.h) | ||||||
| add_custom_command( | add_custom_command( | ||||||
|     OUTPUT CSS/PropertyID.cpp |     OUTPUT CSS/PropertyID.cpp | ||||||
|     COMMAND ${CMAKE_COMMAND} -E make_directory CSS |     COMMAND ${CMAKE_COMMAND} -E make_directory CSS | ||||||
|     COMMAND ${write_if_different} CSS/PropertyID.cpp CodeGenerators/Generate_CSS_PropertyID_cpp ${CMAKE_CURRENT_SOURCE_DIR}/CSS/Properties.json |     COMMAND "$<TARGET_FILE:Generate_CSS_PropertyID_cpp>" "${CMAKE_CURRENT_SOURCE_DIR}/CSS/Properties.json" > CSS/PropertyID.cpp.tmp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/PropertyID.cpp.tmp CSS/PropertyID.cpp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E remove CSS/PropertyID.cpp.tmp | ||||||
|     VERBATIM |     VERBATIM | ||||||
|     DEPENDS Generate_CSS_PropertyID_cpp |     DEPENDS Generate_CSS_PropertyID_cpp | ||||||
|     MAIN_DEPENDENCY CSS/Properties.json |     MAIN_DEPENDENCY CSS/Properties.json | ||||||
| ) | ) | ||||||
|  | add_custom_target(generate_PropertyID.cpp DEPENDS CSS/PropertyID.cpp) | ||||||
| 
 | 
 | ||||||
| add_custom_command( | add_custom_command( | ||||||
|     OUTPUT CSS/ValueID.h |     OUTPUT CSS/ValueID.h | ||||||
|     COMMAND ${write_if_different} CSS/ValueID.h CodeGenerators/Generate_CSS_ValueID_h ${CMAKE_CURRENT_SOURCE_DIR}/CSS/Identifiers.json |     COMMAND "${CMAKE_COMMAND}" -E make_directory CSS | ||||||
|  |     COMMAND "$<TARGET_FILE:Generate_CSS_ValueID_h>" "${CMAKE_CURRENT_SOURCE_DIR}/CSS/Identifiers.json" > CSS/ValueID.h.tmp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/ValueID.h.tmp CSS/ValueID.h | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E remove CSS/ValueID.h.tmp | ||||||
|     VERBATIM |     VERBATIM | ||||||
|     DEPENDS Generate_CSS_ValueID_h |     DEPENDS Generate_CSS_ValueID_h | ||||||
|     MAIN_DEPENDENCY CSS/Identifiers.json |     MAIN_DEPENDENCY CSS/Identifiers.json | ||||||
|  | @ -452,30 +438,38 @@ add_custom_target(generate_ValueID.h DEPENDS CSS/ValueID.h) | ||||||
| 
 | 
 | ||||||
| add_custom_command( | add_custom_command( | ||||||
|     OUTPUT CSS/ValueID.cpp |     OUTPUT CSS/ValueID.cpp | ||||||
|     COMMAND ${CMAKE_COMMAND} -E make_directory CSS |     COMMAND "${CMAKE_COMMAND}" -E make_directory CSS | ||||||
|     COMMAND ${write_if_different} CSS/ValueID.cpp CodeGenerators/Generate_CSS_ValueID_cpp ${CMAKE_CURRENT_SOURCE_DIR}/CSS/Identifiers.json |     COMMAND "$<TARGET_FILE:Generate_CSS_ValueID_cpp>" "${CMAKE_CURRENT_SOURCE_DIR}/CSS/Identifiers.json" > CSS/ValueID.cpp.tmp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/ValueID.cpp.tmp CSS/ValueID.cpp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E remove CSS/ValueID.cpp.tmp | ||||||
|     VERBATIM |     VERBATIM | ||||||
|     DEPENDS Generate_CSS_ValueID_cpp |     DEPENDS Generate_CSS_ValueID_cpp | ||||||
|     MAIN_DEPENDENCY CSS/Identifiers.json |     MAIN_DEPENDENCY CSS/Identifiers.json | ||||||
| ) | ) | ||||||
|  | add_custom_target(generate_ValueID.cpp DEPENDS CSS/ValueID.cpp) | ||||||
| 
 | 
 | ||||||
| add_custom_command( | add_custom_command( | ||||||
|     OUTPUT CSS/DefaultStyleSheetSource.cpp |     OUTPUT CSS/DefaultStyleSheetSource.cpp | ||||||
|     COMMAND ${write_if_different} CSS/DefaultStyleSheetSource.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Scripts/GenerateStyleSheetSource.sh default_stylesheet_source ${CMAKE_CURRENT_SOURCE_DIR}/CSS/Default.css |     COMMAND "${CMAKE_COMMAND}" -E make_directory CSS | ||||||
|  |     COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/Scripts/GenerateStyleSheetSource.sh" default_stylesheet_source "${CMAKE_CURRENT_SOURCE_DIR}/CSS/Default.css" > CSS/DefaultStyleSheetSource.cpp.tmp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/DefaultStyleSheetSource.cpp.tmp CSS/DefaultStyleSheetSource.cpp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E remove CSS/DefaultStyleSheetSource.cpp.tmp | ||||||
|     VERBATIM |     VERBATIM | ||||||
|     DEPENDS Scripts/GenerateStyleSheetSource.sh |     DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/Scripts/GenerateStyleSheetSource.sh" | ||||||
|     MAIN_DEPENDENCY CSS/Default.css |     MAIN_DEPENDENCY CSS/Default.css | ||||||
| ) | ) | ||||||
|  | add_custom_target(generate_DefaultStyleSheetSource.cpp DEPENDS CSS/DefaultStyleSheetSource.cpp) | ||||||
| 
 | 
 | ||||||
| add_custom_command( | add_custom_command( | ||||||
|     OUTPUT CSS/QuirksModeStyleSheetSource.cpp |     OUTPUT CSS/QuirksModeStyleSheetSource.cpp | ||||||
|     COMMAND ${write_if_different} CSS/QuirksModeStyleSheetSource.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Scripts/GenerateStyleSheetSource.sh quirks_mode_stylesheet_source ${CMAKE_CURRENT_SOURCE_DIR}/CSS/QuirksMode.css |     COMMAND "${CMAKE_COMMAND}" -E make_directory CSS | ||||||
|  |     COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/Scripts/GenerateStyleSheetSource.sh" quirks_mode_stylesheet_source "${CMAKE_CURRENT_SOURCE_DIR}/CSS/QuirksMode.css" > CSS/QuirksModeStyleSheetSource.cpp.tmp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/QuirksModeStyleSheetSource.cpp.tmp CSS/QuirksModeStyleSheetSource.cpp | ||||||
|  |     COMMAND "${CMAKE_COMMAND}" -E remove CSS/QuirksModeStyleSheetSource.cpp.tmp | ||||||
|     VERBATIM |     VERBATIM | ||||||
|     DEPENDS Scripts/GenerateStyleSheetSource.sh |     DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/Scripts/GenerateStyleSheetSource.sh" | ||||||
|     MAIN_DEPENDENCY CSS/Default.css |     MAIN_DEPENDENCY CSS/Default.css | ||||||
| ) | ) | ||||||
| 
 | add_custom_target(generate_QuirksModeStyleSheetSource.cpp DEPENDS CSS/QuirksModeStyleSheetSource.cpp) | ||||||
| serenity_lib(LibWeb web) |  | ||||||
| target_link_libraries(LibWeb LibCore LibJS LibMarkdown LibGemini LibGUI LibGfx LibTextCodec LibProtocol LibImageDecoderClient LibWasm) |  | ||||||
| 
 | 
 | ||||||
| add_subdirectory(DumpLayoutTree) | add_subdirectory(DumpLayoutTree) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andrew Kaster
						Andrew Kaster