CodeCompass

Форк
0
/
Functions.cmake 
132 строки · 4.8 Кб
1
# Generate ODB files from sources
2
# @return ODB_CXX_SOURCES - odb cxx source files
3
function(generate_odb_files _src)
4
  set(DEPENDENCY_PLUGIN_INCLUDE_DIRS ${ARGN})
5
  list(TRANSFORM DEPENDENCY_PLUGIN_INCLUDE_DIRS PREPEND "-I${CMAKE_SOURCE_DIR}/plugins/")
6
  list(TRANSFORM DEPENDENCY_PLUGIN_INCLUDE_DIRS APPEND "/model/include")
7

8
  foreach(_file ${_src})
9
    get_filename_component(_dir ${_file} DIRECTORY)
10
    get_filename_component(_name ${_file} NAME)
11

12
    string(REPLACE ".h" "-odb.cxx" _cxx ${_name})
13
    string(REPLACE ".h" "-odb.hxx" _hxx ${_name})
14
    string(REPLACE ".h" "-odb.ixx" _ixx ${_name})
15
    string(REPLACE ".h" "-odb.sql" _sql ${_name})
16

17
    add_custom_command(
18
      OUTPUT
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}
23
      COMMAND
24
        mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/include/model
25
      COMMAND
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}
34
      COMMAND
35
        mv ${CMAKE_CURRENT_BINARY_DIR}/include/model/${_cxx}
36
           ${CMAKE_CURRENT_BINARY_DIR}
37
      DEPENDS
38
        ${CMAKE_CURRENT_SOURCE_DIR}/${_file}
39
      COMMENT "Generating ODB for ${_file}")
40

41
    list(APPEND SOURCES ${_cxx})
42
  endforeach(_file)
43

44
  set(ODB_CXX_SOURCES ${SOURCES} PARENT_SCOPE)
45
endfunction(generate_odb_files)
46

47
# Add a new static library target that links against ODB.
48
function(add_odb_library _name)
49
  add_library(${_name} STATIC ${ARGN})
50
  target_compile_options(${_name} PUBLIC -Wno-unknown-pragmas -fPIC)
51
  target_link_libraries(${_name} ${ODB_LIBRARIES})
52
  target_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)
59
endfunction(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.
64
function(install_sql)
65
  install(
66
    DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/model/
67
    DESTINATION ${INSTALL_SQL_DIR}
68
    FILES_MATCHING PATTERN "*.sql"
69
    PATTERN "CMakeFiles" EXCLUDE)
70
endfunction(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.
74
function(install_js_thrift)
75
  install(
76
    DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/gen-js/
77
    DESTINATION ${INSTALL_GEN_DIR}
78
    FILES_MATCHING PATTERN "*.js")
79
  install(
80
    CODE "execute_process(COMMAND ${CMAKE_SOURCE_DIR}/scripts/remover.sh WORKING_DIRECTORY ${INSTALL_GEN_DIR})")
81
endfunction(install_js_thrift)
82

83
# Install plugins webgui
84
# @parameter _dir - webgui directory of the plugin
85
function(install_webplugin _dir)
86
  # Copy javascript modules
87
  file(GLOB _js "${_dir}/js/[A-Z]*.js")
88
  install(FILES ${_js} DESTINATION "${INSTALL_SCRIPTS_DIR}/view/component" )
89

90
  # Copy javascript plugins
91
  file(GLOB _js "${_dir}/js/[^A-Z]*.js")
92
  install(FILES ${_js} DESTINATION "${INSTALL_SCRIPTS_DIR}/view" )
93

94
  # Copy css files
95
  file(GLOB _css "${_dir}/css/*.css")
96
  install(FILES ${_css} DESTINATION "${INSTALL_WEBROOT_DIR}/style" )
97

98
  # Copy images
99
  file(GLOB _images "${_dir}/images/*.jpg" "${_dir}/images/*.png")
100
  install(FILES ${_images} DESTINATION "${INSTALL_WEBROOT_DIR}/images" )
101

102
  # Collect userguides
103
  file(GLOB _userguides "${_dir}/userguide/*.md")
104
  set_property(GLOBAL APPEND PROPERTY USERGUIDES "${_userguides}")
105
endfunction(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".
109
function(fancy_message _str _colour _isBold)
110
  set(BOLD_TAG "")
111
  set(COLOUR_TAG "")
112

113
  if (_isBold)
114
    set(BOLD_TAG "--bold")
115
  endif()
116

117
  if (NOT (_colour STREQUAL ""))
118
    set(COLOUR_TAG "--${_colour}")
119
  endif()
120

121
  execute_process(COMMAND
122
    ${CMAKE_COMMAND} -E env CLICOLOR_FORCE=1
123
    ${CMAKE_COMMAND} -E cmake_echo_color ${COLOUR_TAG} ${BOLD_TAG} ${_str})
124
endfunction(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
128
function(join _values _glue _output)
129
  string (REGEX REPLACE "([^\\]|^);" "\\1${_glue}" _tmpStr "${_values}")
130
  string (REGEX REPLACE "[\\](.)" "\\1" _tmpStr "${_tmpStr}") #fixes escaping
131
  set (${_output} "${_tmpStr}" PARENT_SCOPE)
132
endfunction(join)

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.