[Cmake-commits] CMake branch, next, updated. v3.3.1-2569-g05faeb9
Brad King
brad.king at kitware.com
Thu Aug 27 13:35:41 EDT 2015
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via 05faeb9ad6d27696a5ba92af27f3bbcc8f90c5a1 (commit)
via ac0bb4333d13e633e26d107f288162d7d6a37b3a (commit)
via 92b835ec9d17b190b13da93702f0eb416b665a48 (commit)
from 5328d0bd617c6cdcbed1413924cc434acb32dd0b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=05faeb9ad6d27696a5ba92af27f3bbcc8f90c5a1
commit 05faeb9ad6d27696a5ba92af27f3bbcc8f90c5a1
Merge: 5328d0b ac0bb43
Author: Brad King <brad.king at kitware.com>
AuthorDate: Thu Aug 27 13:35:40 2015 -0400
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Thu Aug 27 13:35:40 2015 -0400
Merge topic 'vs-store-phone-cert-thumbs' into next
ac0bb433 VS: Windows Store/Phone package cert thumbprint
92b835ec Simplify condition for using rpcrt4 library on Windows
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ac0bb4333d13e633e26d107f288162d7d6a37b3a
commit ac0bb4333d13e633e26d107f288162d7d6a37b3a
Author: Gilles Khouzam <gillesk at microsoft.com>
AuthorDate: Fri Aug 21 14:15:38 2015 -0700
Commit: Brad King <brad.king at kitware.com>
CommitDate: Thu Aug 27 13:35:18 2015 -0400
VS: Windows Store/Phone package cert thumbprint
Add the PackageCertificateThumbprint property when there is a
certificate on a WindowsStore or Phone app.
diff --git a/CTestCustom.cmake.in b/CTestCustom.cmake.in
index f29ac70..d3cff51 100644
--- a/CTestCustom.cmake.in
+++ b/CTestCustom.cmake.in
@@ -32,6 +32,7 @@ set(CTEST_CUSTOM_WARNING_EXCEPTION
"remark: .*LOOP WAS VECTORIZED"
"warning .980: wrong number of actual arguments to intrinsic function .std::basic_"
"LINK : warning LNK4089: all references to.*ADVAPI32.dll.*discarded by /OPT:REF"
+ "LINK : warning LNK4089: all references to.*CRYPT32.dll.*discarded by /OPT:REF"
"LINK : warning LNK4089: all references to.*PSAPI.DLL.*discarded by /OPT:REF"
"LINK : warning LNK4089: all references to.*RPCRT4.dll.*discarded by /OPT:REF"
"LINK : warning LNK4089: all references to.*SHELL32.dll.*discarded by /OPT:REF"
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 1886519..16b9ea1 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -558,7 +558,8 @@ endif()
if(WIN32 AND NOT UNIX)
# We need the rpcrt4 library on Windows.
- target_link_libraries(CMakeLib rpcrt4)
+ # We need the crypt32 library on Windows for crypto/cert APIs.
+ target_link_libraries(CMakeLib rpcrt4 crypt32)
endif()
#
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index a117238..583e1d0 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -1013,6 +1013,94 @@ std::string cmSystemTools::ComputeStringMD5(const std::string& input)
#endif
}
+//----------------------------------------------------------------------------
+std::string cmSystemTools::ComputeCertificateThumbprint(
+ const std::string& source)
+{
+ std::string thumbprint;
+
+#ifdef _WIN32
+ BYTE* certData = NULL;
+ CRYPT_INTEGER_BLOB cryptBlob;
+ HCERTSTORE certStore = NULL;
+ PCCERT_CONTEXT certContext = NULL;
+
+ HANDLE certFile = CreateFile(cmsys::Encoding::ToWide(source.c_str()).c_str(),
+ GENERIC_READ,
+ FILE_SHARE_READ,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL);
+
+ if (certFile != INVALID_HANDLE_VALUE && certFile != NULL)
+ {
+ DWORD fileSize = GetFileSize(certFile, NULL);
+ if (fileSize != INVALID_FILE_SIZE)
+ {
+ certData = new BYTE[fileSize];
+ if (certData != NULL)
+ {
+ DWORD dwRead = 0;
+ if (ReadFile(certFile, certData, fileSize, &dwRead, NULL))
+ {
+ cryptBlob.cbData = fileSize;
+ cryptBlob.pbData = certData;
+
+ // Verify that this is a valid cert
+ if (PFXIsPFXBlob(&cryptBlob))
+ {
+ // Open the certificate as a store
+ certStore = PFXImportCertStore(
+ &cryptBlob, NULL, CRYPT_EXPORTABLE);
+ if (certStore != NULL)
+ {
+ // There should only be 1 cert.
+ certContext = CertEnumCertificatesInStore(certStore,
+ certContext);
+ if (certContext != NULL)
+ {
+ // The hash is 20 bytes
+ BYTE hashData[20];
+ DWORD hashLength = 20;
+
+ // Buffer to print the hash. Each byte takes 2 chars +
+ // terminating character
+ char hashPrint[41];
+ char *pHashPrint = hashPrint;
+ // Get the hash property from the certificate
+ if (CertGetCertificateContextProperty(certContext,
+ CERT_HASH_PROP_ID, hashData, &hashLength))
+ {
+ for (DWORD i = 0; i < hashLength; i++)
+ {
+ // Convert each byte to hexadecimal
+ sprintf(pHashPrint, "%02X", hashData[i]);
+ pHashPrint += 2;
+ }
+ *pHashPrint = '\0';
+ thumbprint = hashPrint;
+ }
+ CertFreeCertificateContext(certContext);
+ }
+ CertCloseStore(certStore, 0);
+ }
+ }
+ }
+ delete[] certData;
+ }
+ }
+ CloseHandle(certFile);
+ }
+#else
+ (void)source;
+ cmSystemTools::Message("ComputeCertificateThumbprint is not implemented",
+ "Error");
+#endif
+
+ return thumbprint;
+}
+
void cmSystemTools::Glob(const std::string& directory,
const std::string& regexp,
std::vector<std::string>& files)
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index fb58307..c12a1db 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -194,6 +194,9 @@ public:
/** Compute the md5sum of a string. */
static std::string ComputeStringMD5(const std::string& input);
+ ///! Get the SHA thumbprint for a certificate file
+ static std::string ComputeCertificateThumbprint(const std::string& source);
+
/**
* Run a single executable command
*
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 80b8591..28a0425 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -2893,7 +2893,7 @@ void cmVisualStudio10TargetGenerator::WriteWinRTPackageCertificateKeyFile()
(*this->BuildFileStream) << cmVS10EscapeXML(artifactDir) <<
"\\</AppxPackageArtifactsDir>\n";
this->WriteString("<ProjectPriFullPath>"
- "$(TargetDir)resources.pri</ProjectPriFullPath>", 2);
+ "$(TargetDir)resources.pri</ProjectPriFullPath>\n", 2);
// If we are missing files and we don't have a certificate and
// aren't targeting WP8.0, add a default certificate
@@ -2911,6 +2911,13 @@ void cmVisualStudio10TargetGenerator::WriteWinRTPackageCertificateKeyFile()
this->WriteString("<", 2);
(*this->BuildFileStream) << "PackageCertificateKeyFile>"
<< pfxFile << "</PackageCertificateKeyFile>\n";
+ std::string thumb = cmSystemTools::ComputeCertificateThumbprint(pfxFile);
+ if (!thumb.empty())
+ {
+ this->WriteString("<PackageCertificateThumbprint>", 2);
+ (*this->BuildFileStream) << thumb
+ << "</PackageCertificateThumbprint>\n";
+ }
this->WriteString("</PropertyGroup>\n", 1);
}
else if(!pfxFile.empty())
@@ -2919,6 +2926,13 @@ void cmVisualStudio10TargetGenerator::WriteWinRTPackageCertificateKeyFile()
this->WriteString("<", 2);
(*this->BuildFileStream) << "PackageCertificateKeyFile>"
<< pfxFile << "</PackageCertificateKeyFile>\n";
+ std::string thumb = cmSystemTools::ComputeCertificateThumbprint(pfxFile);
+ if (!thumb.empty())
+ {
+ this->WriteString("<PackageCertificateThumbprint>", 2);
+ (*this->BuildFileStream) << thumb
+ << "</PackageCertificateThumbprint>\n";
+ }
this->WriteString("</PropertyGroup>\n", 1);
}
}
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=92b835ec9d17b190b13da93702f0eb416b665a48
commit 92b835ec9d17b190b13da93702f0eb416b665a48
Author: Brad King <brad.king at kitware.com>
AuthorDate: Mon Aug 24 10:58:42 2015 -0400
Commit: Brad King <brad.king at kitware.com>
CommitDate: Thu Aug 27 13:35:13 2015 -0400
Simplify condition for using rpcrt4 library on Windows
Drop the CMAKE_BUILD_ON_VISUAL_STUDIO variable and hard-code the
condition at its only use.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 36244dd..5e13a7e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -144,17 +144,6 @@ macro(CMAKE_HANDLE_SYSTEM_LIBRARIES)
endmacro()
-
-
-
-if(NOT CMake_TEST_EXTERNAL_CMAKE)
- set(CMAKE_BUILD_ON_VISUAL_STUDIO 0)
- if(WIN32 AND NOT UNIX AND NOT MINGW)
- set(CMAKE_BUILD_ON_VISUAL_STUDIO 1)
- endif()
-endif()
-
-
#-----------------------------------------------------------------------
# a macro to determine the generator and ctest executable to use
# for testing. Simply to improve readability of the main script.
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 428b364..1886519 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -556,8 +556,8 @@ if(APPLE)
target_link_libraries(CMakeLib "-framework CoreFoundation")
endif()
-if(CMAKE_BUILD_ON_VISUAL_STUDIO OR MINGW)
- # We need the rpcrt4 library for at least the VS7-VC10 generators.
+if(WIN32 AND NOT UNIX)
+ # We need the rpcrt4 library on Windows.
target_link_libraries(CMakeLib rpcrt4)
endif()
-----------------------------------------------------------------------
Summary of changes:
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list