0030948: Configuration, CMake - problem building with CMake 3.15.2
[occt.git] / adm / cmake / occt_resources.cmake
1 # OCCT resource files generation
2
3 macro (OCCT_GENERATE_CONTENT_ONLY CurrentResource)
4   set (RESOURCE_FILES)
5   set (isResDirectory FALSE)
6   if (IS_DIRECTORY "${CMAKE_SOURCE_DIR}/src/${CurrentResource}")
7     file (STRINGS "${CMAKE_SOURCE_DIR}/src/${CurrentResource}/FILES" RESOURCE_FILES)
8     set (CurrentResource_Directory "${CurrentResource}")
9     set (isResDirectory TRUE)
10   else()
11     get_filename_component (CurrentResource_Name "${CurrentResource}" NAME)
12     list (APPEND RESOURCE_FILES "res:::${CurrentResource_Name}")
13     get_filename_component (CurrentResource_Directory "${CurrentResource}" DIRECTORY)
14   endif()
15
16   # Add current toolkit into RESOURCE_TOOLKITS array to copy it to the BUILD directory
17   list (APPEND RESOURCE_TOOLKITS "${CurrentResource_Directory}")
18   list (REMOVE_DUPLICATES RESOURCE_TOOLKITS)
19
20   if (BUILD_RESOURCES)
21     foreach (RESOURCE_FILE ${RESOURCE_FILES})
22       string (REGEX MATCH "^[^:]+:::" IS_RESOURCE "${RESOURCE_FILE}")
23       if (IS_RESOURCE)
24         string (REGEX REPLACE "[^:]+:+" "" RESOURCE_FILE "${RESOURCE_FILE}")
25
26         get_filename_component (CurrentResource_FileName "${RESOURCE_FILE}" NAME)
27         string (REPLACE "." "_" CurrentResource_FileName "${CurrentResource_FileName}")
28         set (HEADER_FILE_NAME "${CurrentResource_Directory}_${CurrentResource_FileName}.pxx")
29
30         set (toProcessResFile TRUE)
31         if (isResDirectory)
32           list (FIND RESOURCE_FILES "${HEADER_FILE_NAME}" aResIndex)
33           if ("${aResIndex}" STREQUAL "-1")
34             set (toProcessResFile FALSE)
35           endif()
36         endif()
37
38         if (toProcessResFile)
39           message(STATUS "Info. Generating header file from resource file: ${CMAKE_SOURCE_DIR}/src/${CurrentResource_Directory}/${RESOURCE_FILE}")
40
41           # generate content for header file
42           set (OCCT_HEADER_FILE_CONTENT "// This file has been automatically generated from resource file src/${CurrentResource_Directory}/${RESOURCE_FILE}\n\n")
43
44           # read resource file
45           file (STRINGS "${CMAKE_SOURCE_DIR}/src/${CurrentResource_Directory}/${RESOURCE_FILE}" RESOURCE_FILE_LINES_LIST)
46
47           set (OCCT_HEADER_FILE_CONTENT "${OCCT_HEADER_FILE_CONTENT}static const char ${CurrentResource_Directory}_${CurrentResource_FileName}[] =")
48           foreach (line IN LISTS RESOURCE_FILE_LINES_LIST)
49             string (REPLACE "\"" "\\\"" line "${line}")
50             set (OCCT_HEADER_FILE_CONTENT "${OCCT_HEADER_FILE_CONTENT}\n  \"${line}\\n\"")
51           endforeach()
52           set (OCCT_HEADER_FILE_CONTENT "${OCCT_HEADER_FILE_CONTENT};")
53
54           # Save generated content to header file
55           set (HEADER_FILE "${CMAKE_SOURCE_DIR}/src/${CurrentResource_Directory}/${HEADER_FILE_NAME}")
56           if (EXISTS "${HEADER_FILE}")
57             file (REMOVE "${HEADER_FILE}")
58           endif()
59           configure_file ("${CMAKE_SOURCE_DIR}/adm/templates/header.in" "${HEADER_FILE}" @ONLY NEWLINE_STYLE LF)
60         endif()
61       endif()
62     endforeach()
63   endif()
64 endmacro()
65
66
67 FILE_TO_LIST ("adm/RESOURCES" RESOURCES)
68 foreach (CurrentResource ${RESOURCES})
69   get_filename_component (CurrentResource_FileName "${CurrentResource}" NAME)
70   if ("${CurrentResource_FileName}" STREQUAL TObj.msg OR
71       "${CurrentResource_FileName}" STREQUAL BOPAlgo.msg OR
72       "${CurrentResource_FileName}" STREQUAL Units.dat OR
73       "${CurrentResource}" STREQUAL XSMessage OR
74       "${CurrentResource}" STREQUAL SHMessage OR
75       "${CurrentResource}" STREQUAL Shaders)
76     OCCT_GENERATE_CONTENT_ONLY ("${CurrentResource}")
77   endif()
78 endforeach()