Skip to content

Commit b9435da

Browse files
committed
handle multiple builtin resource aliases with CMake
1 parent c847d6d commit b9435da

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

src/nbl/builtin/template/CArchive.h.in

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
namespace @_NAMESPACE_@
88
{
9-
constexpr std::string_view path = "@_NAMESPACE_@/@_PATH_PREFIX_@"
109
constexpr std::string_view pathPrefix = "@_PATH_PREFIX_@";
1110
constexpr bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; }
1211

@@ -16,7 +15,7 @@ namespace @_NAMESPACE_@
1615
{
1716
public:
1817
inline CArchive(nbl::system::logger_opt_smart_ptr&& logger)
19-
: nbl::system::CFileArchive(std::move(nbl::system::path(path.data())),std::move(logger), getItemList()) {}
18+
: nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), getItemList()) {}
2019

2120
protected:
2221
file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override

src/nbl/builtin/utils.cmake

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,25 @@
33
# _LBR_PATH_ is a path to builtin resource
44

55
macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_)
6-
set(_OPTIONAL_ALIAS_ "${ARGV2}")
6+
math(EXPR _ALIAS_C_ "${ARGC} - 2" OUTPUT_FORMAT DECIMAL)
7+
set(_ALIAS_ARGS_ ${ARGV})
8+
9+
if("${_ALIAS_C_}" GREATER "0")
10+
list(SUBLIST _ALIAS_ARGS_ "2" "${_ALIAS_C_}" _ALIAS_ARGS_)
11+
12+
foreach(_ALIAS_ IN LISTS _ALIAS_ARGS_)
13+
string(APPEND _OPTIONAL_ALIASES_ ",${_ALIAS_}")
14+
endforeach()
15+
endif()
716

817
list(APPEND ${_BUNDLE_NAME_} "${_LBR_PATH_}")
918
set(${_BUNDLE_NAME_} ${${_BUNDLE_NAME_}} PARENT_SCOPE) # override
1019

11-
list(APPEND _LBR_${_BUNDLE_NAME_}_ "${_LBR_PATH_},${_OPTIONAL_ALIAS_}")
20+
list(APPEND _LBR_${_BUNDLE_NAME_}_ "${_LBR_PATH_}${_OPTIONAL_ALIASES_}")
1221
set(_LBR_${_BUNDLE_NAME_}_ ${_LBR_${_BUNDLE_NAME_}_} PARENT_SCOPE) # override
22+
23+
unset(_OPTIONAL_ALIASES_)
24+
unset(_ALIAS_ARGS_)
1325
endmacro()
1426

1527
# Creates a library with builtin resources for given bundle
@@ -47,8 +59,16 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH
4759
set(_CURRENT_ITEM_ "${X}")
4860
string(FIND "${_CURRENT_ITEM_}" "," _FOUND_ REVERSE)
4961

50-
string(REGEX REPLACE ",.*" "" _CURRENT_PATH_ "${_CURRENT_ITEM_}") # _LBR_PATH_ path for given bundle
51-
string(REGEX REPLACE ".*," "" _CURRENT_ALIAS_ "${_CURRENT_ITEM_}") # optional alias for given builtin resource
62+
63+
string(REPLACE "," ";" _ITEM_DATA_ "${_CURRENT_ITEM_}")
64+
list(LENGTH _ITEM_DATA_ _ITEM_D_SIZE_)
65+
list(GET _ITEM_DATA_ 0 _CURRENT_PATH_) # _LBR_PATH_ path for given bundle
66+
67+
if(_ITEM_D_SIZE_ GREATER 1)
68+
list(SUBLIST _ITEM_DATA_ "1" "${_ITEM_D_SIZE_}" _ITEM_ALIASES_) # optional aliases for given builtin resource
69+
else()
70+
unset(_ITEM_ALIASES_)
71+
endif()
5272

5373
set(NBL_BUILTIN_RESOURCE_ABS_PATH "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") # an absolute path to a builtin resource
5474
list(APPEND NBL_BUILTIN_RESOURCES "${NBL_BUILTIN_RESOURCE_ABS_PATH}")
@@ -63,9 +83,9 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH
6383

6484
LIST_RESOURCE_FOR_ARCHIVER("${_CURRENT_PATH_}" "${_FILE_SIZE_}" "${_ITR_}")
6585

66-
if(_CURRENT_ALIAS_) # if an alias is present list it with the same ID of the current handled builtin resource
86+
foreach(_CURRENT_ALIAS_ IN LISTS _ITEM_ALIASES_)
6787
LIST_RESOURCE_FOR_ARCHIVER("${_CURRENT_ALIAS_}" "${_FILE_SIZE_}" "${_ITR_}")
68-
endif()
88+
endforeach()
6989
else()
7090
message(FATAL_ERROR "!") # TODO: set GENERATED property, therefore we could turn some input into output and list it as builtin resource
7191
endif()

0 commit comments

Comments
 (0)