]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
1 | cmake_minimum_required(VERSION 3.5.1) |
2 | project(libctemplate C CXX) | |
3 | ||
4 | # find_package(PythonInterp) | |
5 | if(NOT PYTHON_EXECUTABLE) | |
6 | message(FATAL_ERROR "PYTHON_EXECUTABLE must be set") | |
7 | endif() | |
8 | ||
9 | if(MSVC) | |
10 | add_compile_options(/W3 /wd4005 /wd4996 /wd4018 -D_CRT_SECURE_NO_WARNINGS) | |
11 | add_definitions(-D_VARIADIC_MAX=10) | |
12 | endif() | |
13 | ||
14 | set(SOURCE_PATH ${PROJECT_SOURCE_DIR}/src) | |
15 | set(BASE_SOURCE_PATH ${SOURCE_PATH}/base) | |
16 | set(WINDOWS_SOURCE_PATH ${SOURCE_PATH}/windows) | |
17 | set(HTMLPARSER_SOURCE_PATH ${SOURCE_PATH}/htmlparser) | |
18 | ||
19 | set(COMMON_INCLUDES ${PROJECT_BINARY_DIR}/include) | |
20 | ||
21 | set(HTMLPARSER_CONFIG ${HTMLPARSER_SOURCE_PATH}/htmlparser_fsm.config) | |
22 | set(JSPASPER_CONFIG ${HTMLPARSER_SOURCE_PATH}/jsparser_fsm.config) | |
23 | set(FSM_GENERATOR ${HTMLPARSER_SOURCE_PATH}/generate_fsm.py) | |
24 | ||
25 | set(BASE_HEADERS | |
26 | "${BASE_SOURCE_PATH}/arena.h" | |
27 | "${BASE_SOURCE_PATH}/manual_constructor.h" | |
28 | "${BASE_SOURCE_PATH}/mutex.h" | |
29 | "${BASE_SOURCE_PATH}/small_map.h" | |
30 | "${BASE_SOURCE_PATH}/thread_annotations.h" | |
31 | "${BASE_SOURCE_PATH}/util.h" | |
32 | "${BASE_SOURCE_PATH}/arena-inl.h" | |
33 | ) | |
34 | ||
35 | set( | |
36 | HTMLPARSER_HEADERS | |
37 | "${HTMLPARSER_SOURCE_PATH}/htmlparser.h" | |
38 | "${HTMLPARSER_SOURCE_PATH}/htmlparser_cpp.h" | |
39 | "${HTMLPARSER_SOURCE_PATH}/jsparser.h" | |
40 | "${HTMLPARSER_SOURCE_PATH}/statemachine.h" | |
41 | ) | |
42 | set(SRC_FILES | |
43 | "${SOURCE_PATH}/base/arena.cc" | |
44 | "${SOURCE_PATH}/htmlparser/htmlparser.cc" | |
45 | "${SOURCE_PATH}/htmlparser/jsparser.cc" | |
46 | "${SOURCE_PATH}/htmlparser/statemachine.cc" | |
47 | "${SOURCE_PATH}/per_expand_data.cc" | |
48 | "${SOURCE_PATH}/template.cc" | |
49 | "${SOURCE_PATH}/template_annotator.cc" | |
50 | "${SOURCE_PATH}/template_cache.cc" | |
51 | "${SOURCE_PATH}/template_dictionary.cc" | |
52 | "${SOURCE_PATH}/template_modifiers.cc" | |
53 | "${SOURCE_PATH}/template_namelist.cc" | |
54 | "${SOURCE_PATH}/template_pathops.cc" | |
55 | "${SOURCE_PATH}/template_string.cc" | |
56 | "${SOURCE_PATH}/windows/port.cc" | |
57 | ) | |
58 | ||
59 | file(COPY "${WINDOWS_SOURCE_PATH}/" DESTINATION ${COMMON_INCLUDES}) | |
60 | file(COPY "${WINDOWS_SOURCE_PATH}/config.h" DESTINATION ${COMMON_INCLUDES}/windows) | |
61 | file(COPY "${WINDOWS_SOURCE_PATH}/port.h" DESTINATION ${COMMON_INCLUDES}/windows) | |
62 | file(COPY ${HTMLPARSER_HEADERS} DESTINATION ${COMMON_INCLUDES}/htmlparser) | |
63 | file(COPY ${BASE_HEADERS} DESTINATION ${COMMON_INCLUDES}/base) | |
64 | ||
65 | execute_process( | |
66 | COMMAND ${PYTHON_EXECUTABLE} ${FSM_GENERATOR} ${HTMLPARSER_CONFIG} | |
67 | WORKING_DIRECTORY ${COMMON_INCLUDES}/htmlparser | |
68 | OUTPUT_VARIABLE HTMLPARSER_CONFIG_H | |
69 | ) | |
70 | execute_process( | |
71 | COMMAND ${PYTHON_EXECUTABLE} ${FSM_GENERATOR} ${JSPASPER_CONFIG} | |
72 | WORKING_DIRECTORY ${COMMON_INCLUDES}/htmlparser | |
73 | OUTPUT_VARIABLE JSPASPER_CONFIG_H | |
74 | ) | |
75 | ||
76 | file(WRITE "${COMMON_INCLUDES}/htmlparser/htmlparser_fsm.h" "${HTMLPARSER_CONFIG_H}") | |
77 | file(WRITE "${COMMON_INCLUDES}/htmlparser/jsparser_fsm.h" "${JSPASPER_CONFIG_H}") | |
78 | ||
79 | include_directories(${COMMON_INCLUDES}) | |
80 | ||
81 | add_library(libctemplate ${SRC_FILES}) | |
82 | if(NOT BUILD_SHARED_LIBS) | |
83 | # Note: CTEMPLATE_DLL_DECL should be empty to build static file | |
84 | target_compile_definitions(libctemplate PRIVATE -DCTEMPLATE_DLL_DECL=) | |
85 | endif() | |
86 | ||
87 | install( | |
88 | TARGETS libctemplate | |
89 | RUNTIME DESTINATION bin | |
90 | LIBRARY DESTINATION lib | |
91 | ARCHIVE DESTINATION lib | |
92 | ) | |
93 | ||
94 | if(NOT DISABLE_INSTALL_HEADERS) | |
95 | install(DIRECTORY "${COMMON_INCLUDES}/ctemplate" DESTINATION include FILES_MATCHING PATTERN "*.h") | |
96 | endif() |