diff --git a/.travis.yml b/.travis.yml index d76208f5..ee084237 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,13 +9,12 @@ os: - osx install: - - wget 'https://googletest.googlecode.com/files/gtest-1.7.0.zip' - - unzip gtest-1.7.0.zip - - ln -s gtest-1.7.0 gtest - sudo pip install BeautifulSoup - sudo pip install html5lib==0.95 script: + - cd third_party/gtest && cmake . && make && cd ../../ + - mkdir build && cd build && cmake .. && make && make test && cd .. - ./autogen.sh && ./configure && make && make check - python python/gumbo/gumboc_test.py - python python/gumbo/html5lib_adapter_test.py diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..133758d8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,126 @@ +cmake_minimum_required(VERSION 3.1) + +project(gumbo VERSION 0.10.1) + +set(CMAKE_C_STANDARD_REQUIRED true) +set(CMAKE_C_STANDARD 99) + +set(SRC + src/attribute.c + src/char_ref.c + src/error.c + src/parser.c + src/string_buffer.c + src/string_piece.c + src/tag.c + src/tokenizer.c + src/utf8.c + src/util.c + src/vector.c) + +set(HEADERS + src/attribute.h + src/char_ref.h + src/error.h + src/gumbo.h + src/insertion_mode.h + src/parser.h + src/string_buffer.h + src/string_piece.h + src/tag_enum.h + src/tag_gperf.h + src/tag_sizes.h + src/tag_strings.h + src/tokenizer.h + src/tokenizer_states.h + src/token_type.h + src/utf8.h + src/util.h + src/vector.h) + +add_library(gumbo ${SRC}) +target_include_directories(gumbo PUBLIC + $) + +if(MSVC) + list(APPEND HEADERS visualc/include/strings.h) + target_include_directories(gumbo PUBLIC + $) +endif() + +# Installation (https://github.com/forexample/package-example) + +# Layout. This works for all platforms: +# * /lib/cmake/ +# * /lib/ +# * /include/ +set(config_install_dir "lib/cmake/${PROJECT_NAME}") +set(include_install_dir "include") + +set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") + +# Configuration +set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake") +set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake") +set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") +set(namespace "${PROJECT_NAME}::") + +# Include module with fuction 'write_basic_package_version_file' +include(CMakePackageConfigHelpers) + +# Configure 'ConfigVersion.cmake' +# Use: +# * PROJECT_VERSION +write_basic_package_version_file( + "${version_config}" COMPATIBILITY SameMajorVersion +) + +# Configure 'Config.cmake' +# Use variables: +# * TARGETS_EXPORT_NAME +# * PROJECT_NAME +configure_package_config_file( + "cmake/Config.cmake.in" + "${project_config}" + INSTALL_DESTINATION "${config_install_dir}" +) + +# Targets: +# * /lib/libgumbo.a +# * header location after install: /include/gumbo.h +install( + TARGETS gumbo + EXPORT "${TARGETS_EXPORT_NAME}" + LIBRARY DESTINATION "lib" + ARCHIVE DESTINATION "lib" + RUNTIME DESTINATION "bin" + INCLUDES DESTINATION "${include_install_dir}" +) + +# Headers: +# * src/gumbo.h -> /include/gumbo.h +install( + FILES ${HEADERS} + DESTINATION "${include_install_dir}" +) + +# Config +# * /lib/cmake/gumbo/gumboConfig.cmake +# * /lib/cmake/gumbo/gumboConfigVersion.cmake +install( + FILES "${project_config}" "${version_config}" + DESTINATION "${config_install_dir}" +) + +# Config +# * /lib/cmake/gumbo/gumboTargets.cmake +install( + EXPORT "${TARGETS_EXPORT_NAME}" + NAMESPACE "${namespace}" + DESTINATION "${config_install_dir}" +) + +include(CTest) +if(BUILD_TESTING) + add_subdirectory(tests) +endif() diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in new file mode 100644 index 00000000..38bbde7b --- /dev/null +++ b/cmake/Config.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake") +check_required_components("@PROJECT_NAME@") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 00000000..49a60a7e --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,19 @@ +set(GTEST_ROOT "${PROJECT_SOURCE_DIR}/third_party/gtest") +find_package(GTest REQUIRED) + +add_executable(gumbo_parser_unittests + attribute.cc + char_ref.cc + parser.cc + string_buffer.cc + string_piece.cc + test_utils.cc + tokenizer.cc + utf8.cc + vector.cc) + +target_include_directories(gumbo_parser_unittests + PUBLIC "${PROJECT_SOURCE_DIR}/src" + ${CMAKE_CURRENT_SOURCE_DIR}) +target_link_libraries(gumbo_parser_unittests gumbo GTest::GTest GTest::Main) +add_test(gumbo_parser_unittests gumbo_parser_unittests)