aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBilly O'Neal <bion@microsoft.com>2021-01-07 12:51:46 -0800
committerGitHub <noreply@github.com>2021-01-07 12:51:46 -0800
commitd1ef42c0fd7b9d5ac90be74df62b12e1184d02a1 (patch)
treeb99cc8fdf5271bc5b1413ba83cf972dbf1f9ec65
parent9ddc9173d7858ddb40b2fc0cdc73b529c390ba47 (diff)
downloadvcpkg-d1ef42c0fd7b9d5ac90be74df62b12e1184d02a1.tar.gz
vcpkg-d1ef42c0fd7b9d5ac90be74df62b12e1184d02a1.zip
[vcpkg] Restore embedded git hash behind an option. (#15472)
-rw-r--r--scripts/bootstrap.ps12
-rw-r--r--toolsrc/CMakeLists.txt29
-rw-r--r--toolsrc/include/vcpkg/commands.version.h2
-rw-r--r--toolsrc/src/vcpkg/commands.version.cpp20
4 files changed, 39 insertions, 14 deletions
diff --git a/scripts/bootstrap.ps1 b/scripts/bootstrap.ps1
index 5e750df38..67a4bbbef 100644
--- a/scripts/bootstrap.ps1
+++ b/scripts/bootstrap.ps1
@@ -369,7 +369,7 @@ else
}
$arguments = (
-"`"/p:VCPKG_VERSION=-nohash`"",
+"`"/p:VCPKG_VERSION=-unknownhash`"",
"`"/p:DISABLE_METRICS=$disableMetricsValue`"",
"/p:Configuration=Release",
"/p:Platform=$platform",
diff --git a/toolsrc/CMakeLists.txt b/toolsrc/CMakeLists.txt
index 89c3b3b60..529d79706 100644
--- a/toolsrc/CMakeLists.txt
+++ b/toolsrc/CMakeLists.txt
@@ -15,6 +15,7 @@ option(VCPKG_ALLOW_APPLE_CLANG "Option for allowing apple clang, even versions t
option(VCPKG_DEVELOPMENT_WARNINGS "Option for turning on all warnings" ON)
option(VCPKG_WARNINGS_AS_ERRORS "Set warnings to be errors" ${VCPKG_DEVELOPMENT_WARNINGS})
option(VCPKG_BUILD_FUZZING "Option for enabling vcpkg-fuzz support" OFF)
+option(VCPKG_EMBED_GIT_SHA "Option for to fill in the Git SHA version; off by default to avoid privacy concerns out of official builds" OFF)
CMAKE_DEPENDENT_OPTION(VCPKG_BUILD_BENCHMARKING "Option for enabling benchmarking" OFF
"BUILD_TESTING" OFF)
@@ -51,6 +52,31 @@ vcpkg_detect_compiler()
vcpkg_detect_standard_library()
vcpkg_detect_std_filesystem()
+if (VCPKG_EMBED_GIT_SHA)
+ find_package(Git REQUIRED)
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" status --porcelain=v1
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+ OUTPUT_VARIABLE VCPKG_GIT_STATUS
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ if (VCPKG_GIT_STATUS STREQUAL "")
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" rev-parse HEAD
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+ OUTPUT_VARIABLE VCPKG_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ else()
+ message(WARNING "Skipping embedding SHA due to local changes.")
+ endif()
+endif()
+
+if (VCPKG_VERSION STREQUAL "")
+ set(VCPKG_VERSION "nohash")
+endif()
+
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
@@ -84,7 +110,8 @@ target_include_directories(vcpkglib PUBLIC include)
vcpkg_target_add_warning_options(vcpkglib)
target_compile_definitions(vcpkglib PUBLIC
- VCPKG_USE_STD_FILESYSTEM=$<BOOL:${VCPKG_USE_STD_FILESYSTEM}>)
+ VCPKG_USE_STD_FILESYSTEM=$<BOOL:${VCPKG_USE_STD_FILESYSTEM}>
+ VCPKG_VERSION=${VCPKG_VERSION})
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
diff --git a/toolsrc/include/vcpkg/commands.version.h b/toolsrc/include/vcpkg/commands.version.h
index 0f1717c74..4b05881ba 100644
--- a/toolsrc/include/vcpkg/commands.version.h
+++ b/toolsrc/include/vcpkg/commands.version.h
@@ -5,7 +5,7 @@
namespace vcpkg::Commands::Version
{
const char* base_version();
- const std::string& version();
+ const char* version();
void warn_if_vcpkg_version_mismatch(const VcpkgPaths& paths);
void perform_and_exit(const VcpkgCmdArguments& args, Files::Filesystem& fs);
diff --git a/toolsrc/src/vcpkg/commands.version.cpp b/toolsrc/src/vcpkg/commands.version.cpp
index c7e33ee65..e9ce4286d 100644
--- a/toolsrc/src/vcpkg/commands.version.cpp
+++ b/toolsrc/src/vcpkg/commands.version.cpp
@@ -9,12 +9,12 @@
#define STRINGIFY(...) #__VA_ARGS__
#define MACRO_TO_STRING(X) STRINGIFY(X)
-#if defined(VCPKG_VERSION)
-#define VCPKG_VERSION_AS_STRING MACRO_TO_STRING(VCPKG_VERSION)
-#else
-#define VCPKG_VERSION_AS_STRING "-unknownhash"
+#if !defined(VCPKG_VERSION)
+#error VCPKG_VERSION must be defined
#endif
+#define VCPKG_VERSION_AS_STRING MACRO_TO_STRING(VCPKG_VERSION)
+
namespace vcpkg::Commands::Version
{
const char* base_version()
@@ -24,17 +24,15 @@ namespace vcpkg::Commands::Version
;
}
- const std::string& version()
+ const char* version()
{
- static const std::string S_VERSION =
+ return
#include "../VERSION.txt"
-
- +std::string(VCPKG_VERSION_AS_STRING)
+ "-" VCPKG_VERSION_AS_STRING
#ifndef NDEBUG
- + std::string("-debug")
+ "-debug"
#endif
;
- return S_VERSION;
}
static int scan3(const char* input, const char* pattern, int* a, int* b, int* c)
@@ -55,7 +53,7 @@ namespace vcpkg::Commands::Version
const auto num1 = scan3(version_contents->c_str(), "\"%d.%d.%d\"", &maj1, &min1, &rev1);
int maj2, min2, rev2;
- const auto num2 = scan3(Version::version().c_str(), "%d.%d.%d-", &maj2, &min2, &rev2);
+ const auto num2 = scan3(Version::version(), "%d.%d.%d-", &maj2, &min2, &rev2);
if (num1 == 3 && num2 == 3)
{