diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ac5ce835..cbdb0ff56 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,6 +88,12 @@ if(UNIX) STRING "Search path to use when XDG_DATA_DIRS is unset or empty or the current process is SUID/SGID. Default is freedesktop compliant." ) + set( + SYSTEM_SEARCH_PATH "" + CACHE + STRING + "Search path to always use, after all other search paths." + ) endif() if(UNIX AND NOT APPLE) # i.e.: Linux @@ -184,6 +190,7 @@ if(UNIX) add_definitions(-DFALLBACK_CONFIG_DIRS="${FALLBACK_CONFIG_DIRS}") add_definitions(-DFALLBACK_DATA_DIRS="${FALLBACK_DATA_DIRS}") add_definitions(-DSYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}") + add_definitions(-DSYSTEM_SEARCH_PATH="${SYSTEM_SEARCH_PATH}") # Make sure /etc is searched by the loader if(NOT (CMAKE_INSTALL_FULL_SYSCONFDIR STREQUAL "/etc")) diff --git a/loader/loader.c b/loader/loader.c index 0d3b5a947..abe357004 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -3688,6 +3688,7 @@ static VkResult ReadDataFilesInSearchPaths(const struct loader_instance *inst, e search_path_size += DetermineDataFilePathSize(xdgdatahome, rel_size); search_path_size += DetermineDataFilePathSize(home_root, rel_size); } + search_path_size += DetermineDataFilePathSize(SYSTEM_SEARCH_PATH, rel_size); #endif } } @@ -3737,6 +3738,7 @@ static VkResult ReadDataFilesInSearchPaths(const struct loader_instance *inst, e CopyDataFilePath(xdgdatahome, relative_location, rel_size, &cur_path_ptr); CopyDataFilePath(home_root, relative_location, rel_size, &cur_path_ptr); } + CopyDataFilePath(SYSTEM_SEARCH_PATH, relative_location, rel_size, &cur_path_ptr); } // Remove the last path separator