CodeCompass
/
Functions.cmake
132 строки · 4.8 Кб
1# Generate ODB files from sources
2# @return ODB_CXX_SOURCES - odb cxx source files
3function(generate_odb_files _src)
4set(DEPENDENCY_PLUGIN_INCLUDE_DIRS ${ARGN})
5list(TRANSFORM DEPENDENCY_PLUGIN_INCLUDE_DIRS PREPEND "-I${CMAKE_SOURCE_DIR}/plugins/")
6list(TRANSFORM DEPENDENCY_PLUGIN_INCLUDE_DIRS APPEND "/model/include")
7
8foreach(_file ${_src})
9get_filename_component(_dir ${_file} DIRECTORY)
10get_filename_component(_name ${_file} NAME)
11
12string(REPLACE ".h" "-odb.cxx" _cxx ${_name})
13string(REPLACE ".h" "-odb.hxx" _hxx ${_name})
14string(REPLACE ".h" "-odb.ixx" _ixx ${_name})
15string(REPLACE ".h" "-odb.sql" _sql ${_name})
16
17add_custom_command(
18OUTPUT
19${CMAKE_CURRENT_BINARY_DIR}/${_cxx}
20${CMAKE_CURRENT_BINARY_DIR}/include/model/${_hxx}
21${CMAKE_CURRENT_BINARY_DIR}/include/model/${_ixx}
22${CMAKE_CURRENT_BINARY_DIR}/include/model/${_sql}
23COMMAND
24mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/include/model
25COMMAND
26${ODB_EXECUTABLE} ${ODBFLAGS}
27-o ${CMAKE_CURRENT_BINARY_DIR}/include/model
28-I ${CMAKE_CURRENT_SOURCE_DIR}/include
29-I ${CMAKE_SOURCE_DIR}/model/include
30-I ${CMAKE_SOURCE_DIR}/util/include
31-I ${ODB_INCLUDE_DIRS}
32${DEPENDENCY_PLUGIN_INCLUDE_DIRS}
33${CMAKE_CURRENT_SOURCE_DIR}/${_file}
34COMMAND
35mv ${CMAKE_CURRENT_BINARY_DIR}/include/model/${_cxx}
36${CMAKE_CURRENT_BINARY_DIR}
37DEPENDS
38${CMAKE_CURRENT_SOURCE_DIR}/${_file}
39COMMENT "Generating ODB for ${_file}")
40
41list(APPEND SOURCES ${_cxx})
42endforeach(_file)
43
44set(ODB_CXX_SOURCES ${SOURCES} PARENT_SCOPE)
45endfunction(generate_odb_files)
46
47# Add a new static library target that links against ODB.
48function(add_odb_library _name)
49add_library(${_name} STATIC ${ARGN})
50target_compile_options(${_name} PUBLIC -Wno-unknown-pragmas -fPIC)
51target_link_libraries(${_name} ${ODB_LIBRARIES})
52target_include_directories(${_name} PUBLIC
53${ODB_INCLUDE_DIRS}
54${CMAKE_SOURCE_DIR}/util/include
55${CMAKE_SOURCE_DIR}/model/include
56${CMAKE_CURRENT_SOURCE_DIR}/include
57${CMAKE_CURRENT_BINARY_DIR}/include
58${CMAKE_BINARY_DIR}/model/include)
59endfunction(add_odb_library)
60
61# This function can be used to install the ODB generated .sql files to a
62# specific directory. These files will be used to create database tables before
63# the parsing session.
64function(install_sql)
65install(
66DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/model/
67DESTINATION ${INSTALL_SQL_DIR}
68FILES_MATCHING PATTERN "*.sql"
69PATTERN "CMakeFiles" EXCLUDE)
70endfunction(install_sql)
71
72# This function can be used to install the thrift generated .js files to a
73# specific directory. These files will be used at the gui.
74function(install_js_thrift)
75install(
76DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/gen-js/
77DESTINATION ${INSTALL_GEN_DIR}
78FILES_MATCHING PATTERN "*.js")
79install(
80CODE "execute_process(COMMAND ${CMAKE_SOURCE_DIR}/scripts/remover.sh WORKING_DIRECTORY ${INSTALL_GEN_DIR})")
81endfunction(install_js_thrift)
82
83# Install plugins webgui
84# @parameter _dir - webgui directory of the plugin
85function(install_webplugin _dir)
86# Copy javascript modules
87file(GLOB _js "${_dir}/js/[A-Z]*.js")
88install(FILES ${_js} DESTINATION "${INSTALL_SCRIPTS_DIR}/view/component" )
89
90# Copy javascript plugins
91file(GLOB _js "${_dir}/js/[^A-Z]*.js")
92install(FILES ${_js} DESTINATION "${INSTALL_SCRIPTS_DIR}/view" )
93
94# Copy css files
95file(GLOB _css "${_dir}/css/*.css")
96install(FILES ${_css} DESTINATION "${INSTALL_WEBROOT_DIR}/style" )
97
98# Copy images
99file(GLOB _images "${_dir}/images/*.jpg" "${_dir}/images/*.png")
100install(FILES ${_images} DESTINATION "${INSTALL_WEBROOT_DIR}/images" )
101
102# Collect userguides
103file(GLOB _userguides "${_dir}/userguide/*.md")
104set_property(GLOBAL APPEND PROPERTY USERGUIDES "${_userguides}")
105endfunction(install_webplugin)
106
107# Prints a coloured, and optionally bold message to the console.
108# _colour should be some ANSI colour name, like "blue" or "magenta".
109function(fancy_message _str _colour _isBold)
110set(BOLD_TAG "")
111set(COLOUR_TAG "")
112
113if (_isBold)
114set(BOLD_TAG "--bold")
115endif()
116
117if (NOT (_colour STREQUAL ""))
118set(COLOUR_TAG "--${_colour}")
119endif()
120
121execute_process(COMMAND
122${CMAKE_COMMAND} -E env CLICOLOR_FORCE=1
123${CMAKE_COMMAND} -E cmake_echo_color ${COLOUR_TAG} ${BOLD_TAG} ${_str})
124endfunction(fancy_message)
125
126# Joins a list of elements with a given glue string.
127# See: https://stackoverflow.com/questions/7172670/best-shortest-way-to-join-a-list-in-cmake
128function(join _values _glue _output)
129string (REGEX REPLACE "([^\\]|^);" "\\1${_glue}" _tmpStr "${_values}")
130string (REGEX REPLACE "[\\](.)" "\\1" _tmpStr "${_tmpStr}") #fixes escaping
131set (${_output} "${_tmpStr}" PARENT_SCOPE)
132endfunction(join)