Don't rely on awk/sed in cmake build. Closes #1430

* It's theoretically possible to have a bash shell without awk or sed available
  (though very strange), so we can use cmake string processing & configure_file
  to get the same effect.
This commit is contained in:
baldurk
2019-07-01 14:55:53 +01:00
parent 10f83298be
commit 8ba6a72a70
5 changed files with 31 additions and 29 deletions
+14 -12
View File
@@ -188,24 +188,26 @@ endif()
message(STATUS "Calculating version")
execute_process(
COMMAND awk "{ if (/_MAJOR [0-9]/) { print $3 } }" renderdoc/api/replay/version.h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE RENDERDOC_VERSION_MAJOR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
file(READ ${CMAKE_SOURCE_DIR}/renderdoc/api/replay/version.h VERSION_CONTENTS)
execute_process(
COMMAND awk "{ if (/_MINOR [0-9]/) { print $3 } }" renderdoc/api/replay/version.h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE RENDERDOC_VERSION_MINOR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX MATCH "_MAJOR [0-9]+" MAJOR_VERSION_LINE "${VERSION_CONTENTS}")
string(REGEX MATCH "[0-9]+" RENDERDOC_VERSION_MAJOR "${MAJOR_VERSION_LINE}")
string(REGEX MATCH "_MINOR [0-9]+" MINOR_VERSION_LINE "${VERSION_CONTENTS}")
string(REGEX MATCH "[0-9]+" RENDERDOC_VERSION_MINOR "${MINOR_VERSION_LINE}")
set(RENDERDOC_VERSION "${RENDERDOC_VERSION_MAJOR}.${RENDERDOC_VERSION_MINOR}")
message(STATUS "Building RenderDoc version ${RENDERDOC_VERSION}")
if(RENDERDOC_VERSION_MAJOR STREQUAL "")
message(FATAL_ERROR "Couldn't calculate major version")
endif()
if(RENDERDOC_VERSION_MINOR STREQUAL "")
message(FATAL_ERROR "Couldn't calculate minor version")
endif()
if(APPLE)
message(STATUS "Disabling GLES driver on apple")
set(ENABLE_GLES OFF CACHE BOOL "" FORCE)
+8 -8
View File
@@ -91,12 +91,12 @@ elseif(ENABLE_GGP)
list(APPEND sources vk_posix.cpp vk_ggp.cpp)
add_definitions(-DVK_USE_PLATFORM_GGP)
set(VULKAN_LAYER_MODULE_PATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}librenderdoc.so")
set(json_in ${CMAKE_CURRENT_SOURCE_DIR}/renderdoc.json)
set(json_out ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/renderdoc_capture.json)
add_custom_command(OUTPUT ${json_out}
COMMAND sed '{s%\\[MAJOR\\]%${RENDERDOC_VERSION_MAJOR}%\; s%\\[MINOR\\]%${RENDERDOC_VERSION_MINOR}%\; s%...renderdoc.dll%${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}librenderdoc.so%}' < ${json_in} > ${json_out}
DEPENDS ${json_in})
add_custom_target(generate-json ALL DEPENDS ${json_out})
configure_file(${json_in} ${json_out})
install (FILES ${json_out} DESTINATION ${VULKAN_LAYER_FOLDER})
elseif(UNIX)
@@ -110,12 +110,12 @@ elseif(UNIX)
add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
endif()
set(VULKAN_LAYER_MODULE_PATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}librenderdoc.so")
set(json_in ${CMAKE_CURRENT_SOURCE_DIR}/renderdoc.json)
set(json_out ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/renderdoc_capture.json)
add_custom_command(OUTPUT ${json_out}
COMMAND sed '{s%\\[MAJOR\\]%${RENDERDOC_VERSION_MAJOR}%\; s%\\[MINOR\\]%${RENDERDOC_VERSION_MINOR}%\; s%...renderdoc.dll%${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${LIB_SUBFOLDER_TRAIL_SLASH}librenderdoc.so%}' < ${json_in} > ${json_out}
DEPENDS ${json_in})
add_custom_target(generate-json ALL DEPENDS ${json_out})
configure_file(${json_in} ${json_out})
install (FILES ${json_out} DESTINATION ${VULKAN_LAYER_FOLDER})
endif()
+3 -3
View File
@@ -3,9 +3,9 @@
"layer" : {
"name": "VK_LAYER_RENDERDOC_Capture",
"type": "GLOBAL",
"library_path": ".\\renderdoc.dll",
"library_path": "@VULKAN_LAYER_MODULE_PATH@",
"api_version": "1.1.73",
"implementation_version": "[MINOR]",
"implementation_version": "@RENDERDOC_VERSION_MINOR@",
"description": "Debugging capture layer for RenderDoc",
"functions": {
"vkGetInstanceProcAddr": "VK_LAYER_RENDERDOC_CaptureGetInstanceProcAddr",
@@ -37,7 +37,7 @@
"ENABLE_VULKAN_RENDERDOC_CAPTURE": "1"
},
"disable_environment": {
"DISABLE_VULKAN_RENDERDOC_CAPTURE_[MAJOR]_[MINOR]": "1"
"DISABLE_VULKAN_RENDERDOC_CAPTURE_@RENDERDOC_VERSION_MAJOR@_@RENDERDOC_VERSION_MINOR@": "1"
}
}
}
@@ -220,7 +220,7 @@
<Message Text="Processing layer JSON file for RenderDoc $(MajorVersion).$(MinorVersion)" Importance="High" />
<!-- Read the template json, replace the major/minor versions -->
<PropertyGroup>
<JSONContents>$([System.IO.File]::ReadAllText('$(ProjectDir)renderdoc.json').Replace('[MAJOR]', '$(MajorVersion)').Replace('[MINOR]', '$(MinorVersion)'))</JSONContents>
<JSONContents>$([System.IO.File]::ReadAllText('$(ProjectDir)renderdoc.json').Replace('@RENDERDOC_VERSION_MAJOR@', '$(MajorVersion)').Replace('@RENDERDOC_VERSION_MINOR@', '$(MinorVersion)').Replace('@VULKAN_LAYER_MODULE_PATH@', '.\\renderdoc.dll'))</JSONContents>
</PropertyGroup>
<!-- Write it out to the output directory -->
<WriteLinesToFile File="$(OutDir)renderdoc.json" Lines="$(JSONContents)" Overwrite="true" />
+5 -5
View File
@@ -228,13 +228,13 @@ static std::string GenerateJSON(const std::string &sopath)
std::string json = std::string(txt, txt + len);
const char dllPathString[] = ".\\\\renderdoc.dll";
const char modulePathString[] = "@VULKAN_LAYER_MODULE_PATH@";
size_t idx = json.find(dllPathString);
size_t idx = json.find(modulePathString);
json = json.substr(0, idx) + sopath + json.substr(idx + sizeof(dllPathString) - 1);
json = json.substr(0, idx) + sopath + json.substr(idx + sizeof(modulePathString) - 1);
const char majorString[] = "[MAJOR]";
const char majorString[] = "@RENDERDOC_VERSION_MAJOR@";
idx = json.find(majorString);
while(idx != std::string::npos)
@@ -245,7 +245,7 @@ static std::string GenerateJSON(const std::string &sopath)
idx = json.find(majorString);
}
const char minorString[] = "[MINOR]";
const char minorString[] = "@RENDERDOC_VERSION_MINOR@";
idx = json.find(minorString);
while(idx != std::string::npos)