summaryrefslogtreecommitdiff
path: root/libs/litehtml/CMakeLists.txt
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2024-03-18 12:13:54 +0300
committerGeorge Hazan <george.hazan@gmail.com>2024-03-18 12:13:54 +0300
commit705c4d24c9c61edffc82864bf9c24384dc29a8d7 (patch)
tree4d21f87671db36b99402da3221d45b64c257c1fe /libs/litehtml/CMakeLists.txt
parent5784fc3a62b9136c6690ed45ec7b505f35512e08 (diff)
litehtml - lightweight html renderer
Diffstat (limited to 'libs/litehtml/CMakeLists.txt')
-rw-r--r--libs/litehtml/CMakeLists.txt251
1 files changed, 251 insertions, 0 deletions
diff --git a/libs/litehtml/CMakeLists.txt b/libs/litehtml/CMakeLists.txt
new file mode 100644
index 0000000000..056bba6c9d
--- /dev/null
+++ b/libs/litehtml/CMakeLists.txt
@@ -0,0 +1,251 @@
+cmake_minimum_required(VERSION 3.11)
+
+project(litehtml LANGUAGES C CXX)
+
+
+option(LITEHTML_BUILD_TESTING "enable testing for litehtml" ON)
+
+if(LITEHTML_BUILD_TESTING)
+ include(CTest)
+ enable_testing()
+endif()
+
+# Soname
+# MAJOR is incremented when symbols are removed or changed in an incompatible way
+# MINOR is incremented when new symbols are added
+set(PROJECT_MAJOR 0)
+set(PROJECT_MINOR 0)
+
+option(EXTERNAL_GUMBO "Link against external gumbo instead of shipping a bundled copy" OFF)
+
+if(NOT EXTERNAL_GUMBO)
+ add_subdirectory(src/gumbo)
+endif()
+
+set(SOURCE_LITEHTML
+ src/codepoint.cpp
+ src/css_length.cpp
+ src/css_selector.cpp
+ src/document.cpp
+ src/document_container.cpp
+ src/el_anchor.cpp
+ src/el_base.cpp
+ src/el_before_after.cpp
+ src/el_body.cpp
+ src/el_break.cpp
+ src/el_cdata.cpp
+ src/el_comment.cpp
+ src/el_div.cpp
+ src/element.cpp
+ src/el_font.cpp
+ src/el_image.cpp
+ src/el_link.cpp
+ src/el_para.cpp
+ src/el_script.cpp
+ src/el_space.cpp
+ src/el_style.cpp
+ src/el_table.cpp
+ src/el_td.cpp
+ src/el_text.cpp
+ src/el_title.cpp
+ src/el_tr.cpp
+ src/html.cpp
+ src/html_tag.cpp
+ src/iterators.cpp
+ src/media_query.cpp
+ src/style.cpp
+ src/stylesheet.cpp
+ src/table.cpp
+ src/tstring_view.cpp
+ src/url.cpp
+ src/url_path.cpp
+ src/utf8_strings.cpp
+ src/web_color.cpp
+ src/num_cvt.cpp
+ src/strtod.cpp
+ src/string_id.cpp
+ src/css_properties.cpp
+ src/line_box.cpp
+ src/css_borders.cpp
+ src/render_item.cpp
+ src/render_block_context.cpp
+ src/render_block.cpp
+ src/render_inline_context.cpp
+ src/render_table.cpp
+ src/render_flex.cpp
+ src/render_image.cpp
+ src/formatting_context.cpp
+ src/flex_item.cpp
+ src/flex_line.cpp)
+
+set(HEADER_LITEHTML
+ include/litehtml.h
+ include/litehtml/background.h
+ include/litehtml/borders.h
+ include/litehtml/codepoint.h
+ include/litehtml/css_length.h
+ include/litehtml/css_margins.h
+ include/litehtml/css_offsets.h
+ include/litehtml/css_position.h
+ include/litehtml/css_selector.h
+ include/litehtml/document.h
+ include/litehtml/document_container.h
+ include/litehtml/el_anchor.h
+ include/litehtml/el_base.h
+ include/litehtml/el_before_after.h
+ include/litehtml/el_body.h
+ include/litehtml/el_break.h
+ include/litehtml/el_cdata.h
+ include/litehtml/el_comment.h
+ include/litehtml/el_div.h
+ include/litehtml/el_font.h
+ include/litehtml/el_image.h
+ include/litehtml/el_link.h
+ include/litehtml/el_para.h
+ include/litehtml/el_script.h
+ include/litehtml/el_space.h
+ include/litehtml/el_style.h
+ include/litehtml/el_table.h
+ include/litehtml/el_td.h
+ include/litehtml/el_text.h
+ include/litehtml/el_title.h
+ include/litehtml/el_tr.h
+ include/litehtml/element.h
+ include/litehtml/html.h
+ include/litehtml/html_tag.h
+ include/litehtml/iterators.h
+ include/litehtml/media_query.h
+ include/litehtml/os_types.h
+ include/litehtml/style.h
+ include/litehtml/stylesheet.h
+ include/litehtml/table.h
+ include/litehtml/tstring_view.h
+ include/litehtml/types.h
+ include/litehtml/url.h
+ include/litehtml/url_path.h
+ include/litehtml/utf8_strings.h
+ include/litehtml/web_color.h
+ include/litehtml/num_cvt.h
+ include/litehtml/css_properties.h
+ include/litehtml/line_box.h
+ include/litehtml/render_item.h
+ include/litehtml/render_flex.h
+ include/litehtml/render_image.h
+ include/litehtml/render_inline.h
+ include/litehtml/render_table.h
+ include/litehtml/render_inline_context.h
+ include/litehtml/render_block_context.h
+ include/litehtml/render_block.h
+ include/litehtml/master_css.h
+ include/litehtml/string_id.h
+ include/litehtml/formatting_context.h
+ include/litehtml/flex_item.h
+ include/litehtml/flex_line.h
+)
+
+set(TEST_LITEHTML
+ test/cssTest.cpp
+ test/mediaQueryTest.cpp
+ test/codepoint_test.cpp
+ test/tstring_view_test.cpp
+ test/url_test.cpp
+ test/url_path_test.cpp
+ test/render_test.cpp
+ containers/test/test_container.cpp
+ containers/test/Font.cpp
+ containers/test/Bitmap.cpp
+ containers/test/lodepng.cpp
+)
+
+set(PROJECT_LIB_VERSION ${PROJECT_MAJOR}.${PROJECT_MINOR}.0)
+set(PROJECT_SO_VERSION ${PROJECT_MAJOR})
+
+if (MSVC)
+ # warning level 4
+ add_compile_options(/W4)
+else()
+ # additional warnings
+ add_compile_options(-Wall -Wextra -Wpedantic)
+endif()
+
+add_library(${PROJECT_NAME} ${SOURCE_LITEHTML})
+set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_LIB_VERSION} SOVERSION ${PROJECT_SO_VERSION})
+
+set_target_properties(${PROJECT_NAME} PROPERTIES
+ CXX_STANDARD 11
+ C_STANDARD 99
+ PUBLIC_HEADER "${HEADER_LITEHTML}"
+)
+
+# Export litehtml includes.
+target_include_directories(${PROJECT_NAME} PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:include/${PROJECT_NAME}>)
+target_include_directories(${PROJECT_NAME} PRIVATE include/${PROJECT_NAME})
+
+# Gumbo
+target_link_libraries(${PROJECT_NAME} PUBLIC gumbo)
+
+# install and export
+install(TARGETS ${PROJECT_NAME}
+ EXPORT litehtmlTargets
+ RUNTIME DESTINATION bin COMPONENT libraries
+ ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT libraries
+ LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT libraries
+ PUBLIC_HEADER DESTINATION include/litehtml
+)
+install(FILES cmake/litehtmlConfig.cmake DESTINATION lib${LIB_SUFFIX}/cmake/litehtml)
+install(EXPORT litehtmlTargets FILE litehtmlTargets.cmake DESTINATION lib${LIB_SUFFIX}/cmake/litehtml)
+
+# Tests
+
+if (LITEHTML_BUILD_TESTING)
+ option(EXTERNAL_GTEST "Use external GoogleTest instead of fetching from GitHub" OFF)
+
+ if (EXTERNAL_GTEST)
+ link_libraries("-Wl,--copy-dt-needed-entries")
+ else()
+ include(FetchContent)
+ FetchContent_Declare(
+ googletest
+ URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip
+ )
+ # For Windows: Prevent overriding the parent project's compiler/linker settings
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+ FetchContent_GetProperties(googletest)
+ if(NOT googletest_POPULATED)
+ FetchContent_Populate(googletest)
+ add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
+ endif()
+ endif()
+
+ enable_testing()
+
+ set(TEST_NAME ${PROJECT_NAME}_tests)
+
+ add_executable(
+ ${TEST_NAME}
+ ${TEST_LITEHTML}
+ )
+
+ set_target_properties(${TEST_NAME} PROPERTIES
+ CXX_STANDARD 11
+ C_STANDARD 99
+ PUBLIC_HEADER "${HEADER_LITEHTML}"
+ )
+
+ target_include_directories(
+ ${TEST_NAME}
+ PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/containers
+ )
+
+ target_link_libraries(
+ ${TEST_NAME}
+ ${PROJECT_NAME}
+ gtest_main
+ )
+
+ include(GoogleTest)
+ gtest_discover_tests(${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test)
+endif()