[Cmake-commits] CMake branch, next, updated. v2.8.6-1996-g2e84d8e

Brad King brad.king at kitware.com
Tue Nov 22 15:04:39 EST 2011


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  2e84d8e613c22677e30414c236dd4f106fdc9a97 (commit)
       via  0599c5f546c8b3e04c0dd9fcdc19a6b3825849a7 (commit)
       via  0a6705cbda8171667c4b37872136cd102ccc328c (commit)
       via  24b1feb5ca9dbc3461d373e4de30a33157f81375 (commit)
       via  1ec3fa00c920ca0d13ef30965ce2560ecd006e0c (commit)
       via  6495b595c4953ce29e66ff4919d69a74300c3532 (commit)
       via  8302608a744c3a4df3495f8db88784fb3f04660f (commit)
       via  9fb1a9cf1dc45672b38350f2c4ae560359521566 (commit)
       via  b0853b5fae2681f31f023a37d04cea1209b34dbd (commit)
       via  9da8340a6d68ec1dce9248d0d83f59ba6f41003e (commit)
       via  23b3df76a069ab314a4828ad651f1a14319ff660 (commit)
       via  2e9c26cf9616fead92ec65eefc696bcf9761b996 (commit)
       via  293a7f4e2ae9b458d3efefcfe133d0ad5320a1b2 (commit)
       via  46ab0561fc29446a736985816b005200aad9489c (commit)
       via  38771d3bdf51b81d46578e0c81ebddbdea0ce3b2 (commit)
      from  31a91400888841a1dd89a02f5aeef9e1ca8785f7 (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=2e84d8e613c22677e30414c236dd4f106fdc9a97
commit 2e84d8e613c22677e30414c236dd4f106fdc9a97
Merge: 31a9140 0599c5f
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Nov 22 15:04:35 2011 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Nov 22 15:04:35 2011 -0500

    Merge topic 'crypto-hash' into next
    
    0599c5f sha2: Zero entire SHA_CTX structure during cleanup
    0a6705c sha2: Suppress -Wcast-align warning from Clang
    24b1feb sha2: Cast safe conversions to smaller integer types
    1ec3fa0 Merge branch 'update-KWIML' into crypto-hash
    6495b59 cmCryptoHash: Add virtual destructor
    8302608 Fix CMake.File hash test for CRLF checkouts
    9fb1a9c sha2: Wrap long lines in third-party declarations
    b0853b5 Disable file() and string() hash commands during bootstrap
    9da8340 sha2: Suppress Borland warnings in third-party code
    23b3df7 sha2: Use KWIML fixed-size integer constant macros
    2e9c26c Add string(MD5) and string(SHA*) commands to compute hashes
    293a7f4 cmCryptoHash: Provide factory "New" method
    46ab056 sha2: Use "static const" instead of "const static" declarations
    38771d3 Add file(SHA*) commands to compute cryptographic hashes


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0599c5f546c8b3e04c0dd9fcdc19a6b3825849a7
commit 0599c5f546c8b3e04c0dd9fcdc19a6b3825849a7
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 17 11:18:08 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Nov 17 11:18:08 2011 -0500

    sha2: Zero entire SHA_CTX structure during cleanup
    
    Convert lines of the form
    
      MEMSET_BZERO(context, sizeof(context));
    
    to the correct form
    
      MEMSET_BZERO(context, sizeof(*context));
    
    as suggested by Clang.

diff --git a/Source/cm_sha2.c b/Source/cm_sha2.c
index b1798a8..12c39ed 100644
--- a/Source/cm_sha2.c
+++ b/Source/cm_sha2.c
@@ -704,7 +704,7 @@ void SHA1_Final(sha_byte digest[], SHA_CTX* context) {
 		 * No digest buffer, so we can do nothing
 		 * except clean up and go home
 		 */
-		MEMSET_BZERO(context, sizeof(context));
+		MEMSET_BZERO(context, sizeof(*context));
 		return;
 	}
 
@@ -760,7 +760,7 @@ void SHA1_Final(sha_byte digest[], SHA_CTX* context) {
 #endif
 
 	/* Clean up: */
-	MEMSET_BZERO(context, sizeof(context));
+	MEMSET_BZERO(context, sizeof(*context));
 }
 
 char *SHA1_End(SHA_CTX* context, char buffer[]) {
@@ -780,7 +780,7 @@ char *SHA1_End(SHA_CTX* context, char buffer[]) {
 		}
 		*buffer = (char)0;
 	} else {
-		MEMSET_BZERO(context, sizeof(context));
+		MEMSET_BZERO(context, sizeof(*context));
 	}
 	MEMSET_BZERO(digest, SHA1_DIGEST_LENGTH);
 	return buffer;
@@ -1099,7 +1099,7 @@ void SHA256_Final(sha_byte digest[], SHA_CTX* context) {
 	}
 
 	/* Clean up state data: */
-	MEMSET_BZERO(context, sizeof(context));
+	MEMSET_BZERO(context, sizeof(*context));
 }
 
 char *SHA256_End(SHA_CTX* context, char buffer[]) {
@@ -1119,7 +1119,7 @@ char *SHA256_End(SHA_CTX* context, char buffer[]) {
 		}
 		*buffer = (char)0;
 	} else {
-		MEMSET_BZERO(context, sizeof(context));
+		MEMSET_BZERO(context, sizeof(*context));
 	}
 	MEMSET_BZERO(digest, SHA256_DIGEST_LENGTH);
 	return buffer;
@@ -1173,7 +1173,7 @@ void SHA224_Final(sha_byte digest[], SHA_CTX* context) {
 	}
 
 	/* Clean up state data: */
-	MEMSET_BZERO(context, sizeof(context));
+	MEMSET_BZERO(context, sizeof(*context));
 }
 
 char *SHA224_End(SHA_CTX* context, char buffer[]) {
@@ -1193,7 +1193,7 @@ char *SHA224_End(SHA_CTX* context, char buffer[]) {
 		}
 		*buffer = (char)0;
 	} else {
-		MEMSET_BZERO(context, sizeof(context));
+		MEMSET_BZERO(context, sizeof(*context));
 	}
 	MEMSET_BZERO(digest, SHA224_DIGEST_LENGTH);
 	return buffer;
@@ -1508,7 +1508,7 @@ void SHA512_Final(sha_byte digest[], SHA_CTX* context) {
 	}
 
 	/* Zero out state data */
-	MEMSET_BZERO(context, sizeof(context));
+	MEMSET_BZERO(context, sizeof(*context));
 }
 
 char *SHA512_End(SHA_CTX* context, char buffer[]) {
@@ -1528,7 +1528,7 @@ char *SHA512_End(SHA_CTX* context, char buffer[]) {
 		}
 		*buffer = (char)0;
 	} else {
-		MEMSET_BZERO(context, sizeof(context));
+		MEMSET_BZERO(context, sizeof(*context));
 	}
 	MEMSET_BZERO(digest, SHA512_DIGEST_LENGTH);
 	return buffer;
@@ -1578,7 +1578,7 @@ void SHA384_Final(sha_byte digest[], SHA_CTX* context) {
 	}
 
 	/* Zero out state data */
-	MEMSET_BZERO(context, sizeof(context));
+	MEMSET_BZERO(context, sizeof(*context));
 }
 
 char *SHA384_End(SHA_CTX* context, char buffer[]) {
@@ -1598,7 +1598,7 @@ char *SHA384_End(SHA_CTX* context, char buffer[]) {
 		}
 		*buffer = (char)0;
 	} else {
-		MEMSET_BZERO(context, sizeof(context));
+		MEMSET_BZERO(context, sizeof(*context));
 	}
 	MEMSET_BZERO(digest, SHA384_DIGEST_LENGTH);
 	return buffer;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0a6705cbda8171667c4b37872136cd102ccc328c
commit 0a6705cbda8171667c4b37872136cd102ccc328c
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 17 11:12:00 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Nov 17 11:12:00 2011 -0500

    sha2: Suppress -Wcast-align warning from Clang
    
    The code does contain a cast that increases alignment but only for
    pointers into structures known to be sufficiently aligned.

diff --git a/Source/cm_sha2.c b/Source/cm_sha2.c
index 7991d27..b1798a8 100644
--- a/Source/cm_sha2.c
+++ b/Source/cm_sha2.c
@@ -106,6 +106,9 @@ typedef cm_sha2_uint64_t sha_word64;	/* Exactly 8 bytes */
 #if defined(__BORLANDC__)
 # pragma warn -8004 /* variable assigned value that is never used */
 #endif
+#if defined(__clang__)
+# pragma clang diagnostic ignored "-Wcast-align"
+#endif
 
 /*** ENDIAN REVERSAL MACROS *******************************************/
 #if BYTE_ORDER == LITTLE_ENDIAN

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=24b1feb5ca9dbc3461d373e4de30a33157f81375
commit 24b1feb5ca9dbc3461d373e4de30a33157f81375
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 17 11:07:43 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Nov 17 11:07:43 2011 -0500

    sha2: Cast safe conversions to smaller integer types
    
    Add a cast to lines converting "uint64_t" to "unsigned int" that are
    known safe due to use of modulus with a small integer.  This avoids
    compiler warnings such as
    
      conversion from 'cm_sha2_uint64_t' to 'unsigned int',
      possible loss of data
    
    from MSVC.

diff --git a/Source/cm_sha2.c b/Source/cm_sha2.c
index b89f8fe..7991d27 100644
--- a/Source/cm_sha2.c
+++ b/Source/cm_sha2.c
@@ -652,7 +652,7 @@ void SHA1_Update(SHA_CTX* context, const sha_byte *data, size_t len) {
 	/* Sanity check: */
 	assert(context != (SHA_CTX*)0 && data != (sha_byte*)0);
 
-	usedspace = (context->s1.bitcount >> 3) % 64;
+	usedspace = (unsigned int)((context->s1.bitcount >> 3) % 64);
 	if (usedspace > 0) {
 		/* Calculate how much free space is available in the buffer */
 		freespace = 64 - usedspace;
@@ -705,7 +705,7 @@ void SHA1_Final(sha_byte digest[], SHA_CTX* context) {
 		return;
 	}
 
-	usedspace = (context->s1.bitcount >> 3) % 64;
+	usedspace = (unsigned int)((context->s1.bitcount >> 3) % 64);
 	if (usedspace == 0) {
 		/* Set-up for the last transform: */
 		MEMSET_BZERO(context->s1.buffer, 56);
@@ -992,7 +992,7 @@ void SHA256_Update(SHA_CTX* context, const sha_byte *data, size_t len) {
 	/* Sanity check: */
 	assert(context != (SHA_CTX*)0 && data != (sha_byte*)0);
 
-	usedspace = (context->s256.bitcount >> 3) % 64;
+	usedspace = (unsigned int)((context->s256.bitcount >> 3) % 64);
 	if (usedspace > 0) {
 		/* Calculate how much free space is available in the buffer */
 		freespace = 64 - usedspace;
@@ -1032,7 +1032,7 @@ void SHA256_Update(SHA_CTX* context, const sha_byte *data, size_t len) {
 void SHA256_Internal_Last(SHA_CTX* context) {
 	unsigned int	usedspace;
 
-	usedspace = (context->s256.bitcount >> 3) % 64;
+	usedspace = (unsigned int)((context->s256.bitcount >> 3) % 64);
 #if BYTE_ORDER == LITTLE_ENDIAN
 	/* Convert FROM host byte order */
 	REVERSE64(context->s256.bitcount,context->s256.bitcount);
@@ -1399,7 +1399,7 @@ void SHA512_Update(SHA_CTX* context, const sha_byte *data, size_t len) {
 	/* Sanity check: */
 	assert(context != (SHA_CTX*)0 && data != (sha_byte*)0);
 
-	usedspace = (context->s512.bitcount[0] >> 3) % 128;
+	usedspace = (unsigned int)((context->s512.bitcount[0] >> 3) % 128);
 	if (usedspace > 0) {
 		/* Calculate how much free space is available in the buffer */
 		freespace = 128 - usedspace;
@@ -1439,7 +1439,7 @@ void SHA512_Update(SHA_CTX* context, const sha_byte *data, size_t len) {
 void SHA512_Internal_Last(SHA_CTX* context) {
 	unsigned int	usedspace;
 
-	usedspace = (context->s512.bitcount[0] >> 3) % 128;
+	usedspace = (unsigned int)((context->s512.bitcount[0] >> 3) % 128);
 #if BYTE_ORDER == LITTLE_ENDIAN
 	/* Convert FROM host byte order */
 	REVERSE64(context->s512.bitcount[0],context->s512.bitcount[0]);

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1ec3fa00c920ca0d13ef30965ce2560ecd006e0c
commit 1ec3fa00c920ca0d13ef30965ce2560ecd006e0c
Merge: 6495b59 aaf3765
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Nov 17 10:19:36 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Nov 17 10:19:36 2011 -0500

    Merge branch 'update-KWIML' into crypto-hash


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6495b595c4953ce29e66ff4919d69a74300c3532
commit 6495b595c4953ce29e66ff4919d69a74300c3532
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 16 11:32:01 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 11:32:01 2011 -0500

    cmCryptoHash: Add virtual destructor
    
    Instances of this class are always subclasses.  Use a virtual destructor
    to ensure the subclasses cleanup correctly.

diff --git a/Source/cmCryptoHash.h b/Source/cmCryptoHash.h
index 0a33365..1bea9ab 100644
--- a/Source/cmCryptoHash.h
+++ b/Source/cmCryptoHash.h
@@ -19,6 +19,7 @@
 class cmCryptoHash
 {
 public:
+  virtual ~cmCryptoHash() {}
   static cmsys::auto_ptr<cmCryptoHash> New(const char* algo);
   std::string HashString(const char* input);
   std::string HashFile(const char* file);

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8302608a744c3a4df3495f8db88784fb3f04660f
commit 8302608a744c3a4df3495f8db88784fb3f04660f
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 16 11:26:10 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 11:26:10 2011 -0500

    Fix CMake.File hash test for CRLF checkouts
    
    Use a dedicated test input file for the file() hash API tests.
    Set attribute crlf=input so it is always checked out correctly.

diff --git a/Tests/CMakeTests/.gitattributes b/Tests/CMakeTests/.gitattributes
new file mode 100644
index 0000000..c34e350
--- /dev/null
+++ b/Tests/CMakeTests/.gitattributes
@@ -0,0 +1 @@
+File-HASH-Input.txt crlf=input
diff --git a/Tests/CMakeTests/File-HASH-Input.txt b/Tests/CMakeTests/File-HASH-Input.txt
new file mode 100644
index 0000000..a1d315b
--- /dev/null
+++ b/Tests/CMakeTests/File-HASH-Input.txt
@@ -0,0 +1 @@
+sample input string
diff --git a/Tests/CMakeTests/File-MD5-BadArg2.cmake b/Tests/CMakeTests/File-MD5-BadArg2.cmake
index 68a172f..2acc075 100644
--- a/Tests/CMakeTests/File-MD5-BadArg2.cmake
+++ b/Tests/CMakeTests/File-MD5-BadArg2.cmake
@@ -1 +1 @@
-file(MD5 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake)
+file(MD5 ${CMAKE_CURRENT_LIST_DIR}/File-HASH-Input.txt)
diff --git a/Tests/CMakeTests/File-MD5-BadArg4.cmake b/Tests/CMakeTests/File-MD5-BadArg4.cmake
index a11efcb..79b2755 100644
--- a/Tests/CMakeTests/File-MD5-BadArg4.cmake
+++ b/Tests/CMakeTests/File-MD5-BadArg4.cmake
@@ -1 +1 @@
-file(MD5 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake md5 extra_arg)
+file(MD5 ${CMAKE_CURRENT_LIST_DIR}/File-HASH-Input.txt md5 extra_arg)
diff --git a/Tests/CMakeTests/File-MD5-Works.cmake b/Tests/CMakeTests/File-MD5-Works.cmake
index 2989e98..0fabe54 100644
--- a/Tests/CMakeTests/File-MD5-Works.cmake
+++ b/Tests/CMakeTests/File-MD5-Works.cmake
@@ -1,2 +1,2 @@
-file(MD5 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake md5)
+file(MD5 ${CMAKE_CURRENT_LIST_DIR}/File-HASH-Input.txt md5)
 message("${md5}")
diff --git a/Tests/CMakeTests/File-SHA1-Works.cmake b/Tests/CMakeTests/File-SHA1-Works.cmake
index 03ea3ac..f2ab5d7 100644
--- a/Tests/CMakeTests/File-SHA1-Works.cmake
+++ b/Tests/CMakeTests/File-SHA1-Works.cmake
@@ -1,2 +1,2 @@
-file(SHA1 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha1)
+file(SHA1 ${CMAKE_CURRENT_LIST_DIR}/File-HASH-Input.txt sha1)
 message("${sha1}")
diff --git a/Tests/CMakeTests/File-SHA224-Works.cmake b/Tests/CMakeTests/File-SHA224-Works.cmake
index 0295346..3e86b17 100644
--- a/Tests/CMakeTests/File-SHA224-Works.cmake
+++ b/Tests/CMakeTests/File-SHA224-Works.cmake
@@ -1,2 +1,2 @@
-file(SHA224 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha224)
+file(SHA224 ${CMAKE_CURRENT_LIST_DIR}/File-HASH-Input.txt sha224)
 message("${sha224}")
diff --git a/Tests/CMakeTests/File-SHA256-Works.cmake b/Tests/CMakeTests/File-SHA256-Works.cmake
index 32bc9fe..b72d89e 100644
--- a/Tests/CMakeTests/File-SHA256-Works.cmake
+++ b/Tests/CMakeTests/File-SHA256-Works.cmake
@@ -1,2 +1,2 @@
-file(SHA256 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha256)
+file(SHA256 ${CMAKE_CURRENT_LIST_DIR}/File-HASH-Input.txt sha256)
 message("${sha256}")
diff --git a/Tests/CMakeTests/File-SHA384-Works.cmake b/Tests/CMakeTests/File-SHA384-Works.cmake
index 5c56de2..0eeca33 100644
--- a/Tests/CMakeTests/File-SHA384-Works.cmake
+++ b/Tests/CMakeTests/File-SHA384-Works.cmake
@@ -1,2 +1,2 @@
-file(SHA384 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha384)
+file(SHA384 ${CMAKE_CURRENT_LIST_DIR}/File-HASH-Input.txt sha384)
 message("${sha384}")
diff --git a/Tests/CMakeTests/File-SHA512-Works.cmake b/Tests/CMakeTests/File-SHA512-Works.cmake
index cf10706..d74ee44 100644
--- a/Tests/CMakeTests/File-SHA512-Works.cmake
+++ b/Tests/CMakeTests/File-SHA512-Works.cmake
@@ -1,2 +1,2 @@
-file(SHA512 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha512)
+file(SHA512 ${CMAKE_CURRENT_LIST_DIR}/File-HASH-Input.txt sha512)
 message("${sha512}")
diff --git a/Tests/CMakeTests/FileTest.cmake.in b/Tests/CMakeTests/FileTest.cmake.in
index 824aba7..3c3d85d 100644
--- a/Tests/CMakeTests/FileTest.cmake.in
+++ b/Tests/CMakeTests/FileTest.cmake.in
@@ -21,17 +21,17 @@ set(MD5-BadArg2-STDERR "file MD5 requires a file name and output variable")
 set(MD5-BadArg4-RESULT 1)
 set(MD5-BadArg4-STDERR "file MD5 requires a file name and output variable")
 set(MD5-Works-RESULT 0)
-set(MD5-Works-STDERR "a28a44fb5b58a6acf0cbec46557bc775")
+set(MD5-Works-STDERR "10d20ddb981a6202b84aa1ce1cb7fce3")
 set(SHA1-Works-RESULT 0)
-set(SHA1-Works-STDERR "e0ce452a7e34e9c705b46e4e7c9cd959082c0777")
+set(SHA1-Works-STDERR "83f093e04289b21a9415f408ad50be8b57ad2f34")
 set(SHA224-Works-RESULT 0)
-set(SHA224-Works-STDERR "d1f1c9db3df73586a5a200014505ef03b70da5e0539eb35c11b4ef6f")
+set(SHA224-Works-STDERR "e995a7789922c4ef9279d94e763c8375934180a51baa7147bc48edf7")
 set(SHA256-Works-RESULT 0)
-set(SHA256-Works-STDERR "bb38de1c34713f750a4f84404ef5fb1efb93cf815cb09182db457ba91de19195")
+set(SHA256-Works-STDERR "d1c5915d8b71150726a1eef75a29ec6bea8fd1bef6b7299ef8048760b0402025")
 set(SHA384-Works-RESULT 0)
-set(SHA384-Works-STDERR "2f01d58436bd04a40ec2c938a15f2bb661bf1bf1560a5f2d40a3ebbb716a58e400ab2992c23ba19fa96dc519e0042c26")
+set(SHA384-Works-STDERR "1de9560b4e030e02051ea408200ffc55d70c97ac64ebf822461a5c786f495c36df43259b14483bc8d364f0106f4971ee")
 set(SHA512-Works-RESULT 0)
-set(SHA512-Works-STDERR "349d02e347ddb133afb4557c9e541163f54b6eaa9eb345672bfd7bbce90c9872bf1fad9c6662248eb7b092aef719e4b8c3b8bb1cf47f287abbde12360c073686")
+set(SHA512-Works-STDERR "3982a1b4e651768bec70ab1fb97045cb7a659f4ba7203d501c52ab2e803071f9d5fd272022df15f27727fc67f8cd022e710e29010b2a9c0b467c111e2f6abf51")
 
 include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake")
 check_cmake_test(File

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9fb1a9cf1dc45672b38350f2c4ae560359521566
commit 9fb1a9cf1dc45672b38350f2c4ae560359521566
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 16 11:05:13 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 11:05:13 2011 -0500

    sha2: Wrap long lines in third-party declarations

diff --git a/Source/cm_sha2.h b/Source/cm_sha2.h
index ebe5e5a..71395f0 100644
--- a/Source/cm_sha2.h
+++ b/Source/cm_sha2.h
@@ -102,31 +102,36 @@ void SHA1_Init(SHA_CTX*);
 void SHA1_Update(SHA_CTX*, const cm_sha2_uint8_t*, size_t);
 void SHA1_Final(cm_sha2_uint8_t[SHA1_DIGEST_LENGTH], SHA_CTX*);
 char* SHA1_End(SHA_CTX*, char[SHA1_DIGEST_STRING_LENGTH]);
-char* SHA1_Data(const cm_sha2_uint8_t*, size_t, char[SHA1_DIGEST_STRING_LENGTH]);
+char* SHA1_Data(const cm_sha2_uint8_t*, size_t,
+		char[SHA1_DIGEST_STRING_LENGTH]);
 
 void SHA224_Init(SHA_CTX*);
 void SHA224_Update(SHA_CTX*, const cm_sha2_uint8_t*, size_t);
 void SHA224_Final(cm_sha2_uint8_t[SHA224_DIGEST_LENGTH], SHA_CTX*);
 char* SHA224_End(SHA_CTX*, char[SHA224_DIGEST_STRING_LENGTH]);
-char* SHA224_Data(const cm_sha2_uint8_t*, size_t, char[SHA224_DIGEST_STRING_LENGTH]);
+char* SHA224_Data(const cm_sha2_uint8_t*, size_t,
+		  char[SHA224_DIGEST_STRING_LENGTH]);
 
 void SHA256_Init(SHA_CTX*);
 void SHA256_Update(SHA_CTX*, const cm_sha2_uint8_t*, size_t);
 void SHA256_Final(cm_sha2_uint8_t[SHA256_DIGEST_LENGTH], SHA_CTX*);
 char* SHA256_End(SHA_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
-char* SHA256_Data(const cm_sha2_uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
+char* SHA256_Data(const cm_sha2_uint8_t*, size_t,
+		  char[SHA256_DIGEST_STRING_LENGTH]);
 
 void SHA384_Init(SHA_CTX*);
 void SHA384_Update(SHA_CTX*, const cm_sha2_uint8_t*, size_t);
 void SHA384_Final(cm_sha2_uint8_t[SHA384_DIGEST_LENGTH], SHA_CTX*);
 char* SHA384_End(SHA_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
-char* SHA384_Data(const cm_sha2_uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
+char* SHA384_Data(const cm_sha2_uint8_t*, size_t,
+		  char[SHA384_DIGEST_STRING_LENGTH]);
 
 void SHA512_Init(SHA_CTX*);
 void SHA512_Update(SHA_CTX*, const cm_sha2_uint8_t*, size_t);
 void SHA512_Final(cm_sha2_uint8_t[SHA512_DIGEST_LENGTH], SHA_CTX*);
 char* SHA512_End(SHA_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
-char* SHA512_Data(const cm_sha2_uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
+char* SHA512_Data(const cm_sha2_uint8_t*, size_t,
+		  char[SHA512_DIGEST_STRING_LENGTH]);
 
 #ifdef    __cplusplus
 }

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b0853b5fae2681f31f023a37d04cea1209b34dbd
commit b0853b5fae2681f31f023a37d04cea1209b34dbd
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 16 11:03:30 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 11:03:30 2011 -0500

    Disable file() and string() hash commands during bootstrap
    
    We do not compile support for the cryptographic hashes during bootstrap.
    Disable the APIs that use them.

diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index bab3116..6df5ab3 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -352,6 +352,7 @@ bool cmFileCommand::HandleReadCommand(std::vector<std::string> const& args)
 //----------------------------------------------------------------------------
 bool cmFileCommand::HandleHashCommand(std::vector<std::string> const& args)
 {
+#if defined(CMAKE_BUILD_WITH_CMAKE)
   if(args.size() != 3)
     {
     cmOStringStream e;
@@ -375,6 +376,12 @@ bool cmFileCommand::HandleHashCommand(std::vector<std::string> const& args)
     this->SetError(e.str().c_str());
     }
   return false;
+#else
+  cmOStringStream e;
+  e << args[0] << " not available during bootstrap";
+  this->SetError(e.str().c_str());
+  return false;
+#endif
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx
index f2f2681..ec10d57 100644
--- a/Source/cmStringCommand.cxx
+++ b/Source/cmStringCommand.cxx
@@ -96,6 +96,7 @@ bool cmStringCommand
 //----------------------------------------------------------------------------
 bool cmStringCommand::HandleHashCommand(std::vector<std::string> const& args)
 {
+#if defined(CMAKE_BUILD_WITH_CMAKE)
   if(args.size() != 3)
     {
     cmOStringStream e;
@@ -112,6 +113,12 @@ bool cmStringCommand::HandleHashCommand(std::vector<std::string> const& args)
     return true;
     }
   return false;
+#else
+  cmOStringStream e;
+  e << args[0] << " not available during bootstrap";
+  this->SetError(e.str().c_str());
+  return false;
+#endif
 }
 
 //----------------------------------------------------------------------------

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9da8340a6d68ec1dce9248d0d83f59ba6f41003e
commit 9da8340a6d68ec1dce9248d0d83f59ba6f41003e
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 16 10:54:56 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 10:54:56 2011 -0500

    sha2: Suppress Borland warnings in third-party code
    
    The sha2 implementation performs cleanup on local variables.  Suppress
    the warning instead of fixing it to minimize modification.

diff --git a/Source/cm_sha2.c b/Source/cm_sha2.c
index c64a597..b89f8fe 100644
--- a/Source/cm_sha2.c
+++ b/Source/cm_sha2.c
@@ -103,6 +103,9 @@ typedef cm_sha2_uint32_t sha_word32;	/* Exactly 4 bytes */
 typedef cm_sha2_uint64_t sha_word64;	/* Exactly 8 bytes */
 #define SHA_UINT32_C(x) cmIML_INT_UINT32_C(x)
 #define SHA_UINT64_C(x) cmIML_INT_UINT64_C(x)
+#if defined(__BORLANDC__)
+# pragma warn -8004 /* variable assigned value that is never used */
+#endif
 
 /*** ENDIAN REVERSAL MACROS *******************************************/
 #if BYTE_ORDER == LITTLE_ENDIAN

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=23b3df76a069ab314a4828ad651f1a14319ff660
commit 23b3df76a069ab314a4828ad651f1a14319ff660
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 16 10:48:10 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 10:48:10 2011 -0500

    sha2: Use KWIML fixed-size integer constant macros
    
    Define SHA_UINT32_C and SHA_UINT64_C using the KWIML versions.
    Use them in place of hard-coded UL and ULL constant suffixes.

diff --git a/Source/cm_sha2.c b/Source/cm_sha2.c
index ecb2d9c..c64a597 100644
--- a/Source/cm_sha2.c
+++ b/Source/cm_sha2.c
@@ -101,21 +101,24 @@
 typedef cm_sha2_uint8_t  sha_byte;	/* Exactly 1 byte */
 typedef cm_sha2_uint32_t sha_word32;	/* Exactly 4 bytes */
 typedef cm_sha2_uint64_t sha_word64;	/* Exactly 8 bytes */
+#define SHA_UINT32_C(x) cmIML_INT_UINT32_C(x)
+#define SHA_UINT64_C(x) cmIML_INT_UINT64_C(x)
 
 /*** ENDIAN REVERSAL MACROS *******************************************/
 #if BYTE_ORDER == LITTLE_ENDIAN
 #define REVERSE32(w,x)	{ \
 	sha_word32 tmp = (w); \
 	tmp = (tmp >> 16) | (tmp << 16); \
-	(x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
+	(x) = ((tmp & SHA_UINT32_C(0xff00ff00)) >> 8) | \
+	      ((tmp & SHA_UINT32_C(0x00ff00ff)) << 8); \
 }
 #define REVERSE64(w,x)	{ \
 	sha_word64 tmp = (w); \
 	tmp = (tmp >> 32) | (tmp << 32); \
-	tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
-	      ((tmp & 0x00ff00ff00ff00ffULL) << 8); \
-	(x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
-	      ((tmp & 0x0000ffff0000ffffULL) << 16); \
+	tmp = ((tmp & SHA_UINT64_C(0xff00ff00ff00ff00)) >> 8) | \
+	      ((tmp & SHA_UINT64_C(0x00ff00ff00ff00ff)) << 8); \
+	(x) = ((tmp & SHA_UINT64_C(0xffff0000ffff0000)) >> 16) | \
+	      ((tmp & SHA_UINT64_C(0x0000ffff0000ffff)) << 16); \
 }
 #endif /* BYTE_ORDER == LITTLE_ENDIAN */
 
@@ -222,130 +225,146 @@ void SHA512_Internal_Transform(SHA_CTX*, const sha_word64*);
 /*** SHA2 INITIAL HASH VALUES AND CONSTANTS ***************************/
 
 /* Hash constant words K for SHA-1: */
-#define K1_0_TO_19	0x5a827999UL
-#define K1_20_TO_39	0x6ed9eba1UL
-#define K1_40_TO_59	0x8f1bbcdcUL
-#define K1_60_TO_79	0xca62c1d6UL
+#define K1_0_TO_19	SHA_UINT32_C(0x5a827999)
+#define K1_20_TO_39	SHA_UINT32_C(0x6ed9eba1)
+#define K1_40_TO_59	SHA_UINT32_C(0x8f1bbcdc)
+#define K1_60_TO_79	SHA_UINT32_C(0xca62c1d6)
 
 /* Initial hash value H for SHA-1: */
 static const sha_word32 sha1_initial_hash_value[5] = {
-	0x67452301UL,
-	0xefcdab89UL,
-	0x98badcfeUL,
-	0x10325476UL,
-	0xc3d2e1f0UL
+	SHA_UINT32_C(0x67452301),
+	SHA_UINT32_C(0xefcdab89),
+	SHA_UINT32_C(0x98badcfe),
+	SHA_UINT32_C(0x10325476),
+	SHA_UINT32_C(0xc3d2e1f0)
 };
 
 /* Hash constant words K for SHA-224 and SHA-256: */
 static const sha_word32 K256[64] = {
-	0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
-	0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
-	0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
-	0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
-	0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
-	0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
-	0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
-	0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
-	0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
-	0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
-	0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
-	0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
-	0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
-	0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
-	0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
-	0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
+	SHA_UINT32_C(0x428a2f98), SHA_UINT32_C(0x71374491),
+	SHA_UINT32_C(0xb5c0fbcf), SHA_UINT32_C(0xe9b5dba5),
+	SHA_UINT32_C(0x3956c25b), SHA_UINT32_C(0x59f111f1),
+	SHA_UINT32_C(0x923f82a4), SHA_UINT32_C(0xab1c5ed5),
+	SHA_UINT32_C(0xd807aa98), SHA_UINT32_C(0x12835b01),
+	SHA_UINT32_C(0x243185be), SHA_UINT32_C(0x550c7dc3),
+	SHA_UINT32_C(0x72be5d74), SHA_UINT32_C(0x80deb1fe),
+	SHA_UINT32_C(0x9bdc06a7), SHA_UINT32_C(0xc19bf174),
+	SHA_UINT32_C(0xe49b69c1), SHA_UINT32_C(0xefbe4786),
+	SHA_UINT32_C(0x0fc19dc6), SHA_UINT32_C(0x240ca1cc),
+	SHA_UINT32_C(0x2de92c6f), SHA_UINT32_C(0x4a7484aa),
+	SHA_UINT32_C(0x5cb0a9dc), SHA_UINT32_C(0x76f988da),
+	SHA_UINT32_C(0x983e5152), SHA_UINT32_C(0xa831c66d),
+	SHA_UINT32_C(0xb00327c8), SHA_UINT32_C(0xbf597fc7),
+	SHA_UINT32_C(0xc6e00bf3), SHA_UINT32_C(0xd5a79147),
+	SHA_UINT32_C(0x06ca6351), SHA_UINT32_C(0x14292967),
+	SHA_UINT32_C(0x27b70a85), SHA_UINT32_C(0x2e1b2138),
+	SHA_UINT32_C(0x4d2c6dfc), SHA_UINT32_C(0x53380d13),
+	SHA_UINT32_C(0x650a7354), SHA_UINT32_C(0x766a0abb),
+	SHA_UINT32_C(0x81c2c92e), SHA_UINT32_C(0x92722c85),
+	SHA_UINT32_C(0xa2bfe8a1), SHA_UINT32_C(0xa81a664b),
+	SHA_UINT32_C(0xc24b8b70), SHA_UINT32_C(0xc76c51a3),
+	SHA_UINT32_C(0xd192e819), SHA_UINT32_C(0xd6990624),
+	SHA_UINT32_C(0xf40e3585), SHA_UINT32_C(0x106aa070),
+	SHA_UINT32_C(0x19a4c116), SHA_UINT32_C(0x1e376c08),
+	SHA_UINT32_C(0x2748774c), SHA_UINT32_C(0x34b0bcb5),
+	SHA_UINT32_C(0x391c0cb3), SHA_UINT32_C(0x4ed8aa4a),
+	SHA_UINT32_C(0x5b9cca4f), SHA_UINT32_C(0x682e6ff3),
+	SHA_UINT32_C(0x748f82ee), SHA_UINT32_C(0x78a5636f),
+	SHA_UINT32_C(0x84c87814), SHA_UINT32_C(0x8cc70208),
+	SHA_UINT32_C(0x90befffa), SHA_UINT32_C(0xa4506ceb),
+	SHA_UINT32_C(0xbef9a3f7), SHA_UINT32_C(0xc67178f2)
 };
 
 /* Initial hash value H for SHA-224: */
 static const sha_word32 sha224_initial_hash_value[8] = {
-	0xc1059ed8UL,
-	0x367cd507UL,
-	0x3070dd17UL,
-	0xf70e5939UL,
-	0xffc00b31UL,
-	0x68581511UL,
-	0x64f98fa7UL,
-	0xbefa4fa4UL
+	SHA_UINT32_C(0xc1059ed8),
+	SHA_UINT32_C(0x367cd507),
+	SHA_UINT32_C(0x3070dd17),
+	SHA_UINT32_C(0xf70e5939),
+	SHA_UINT32_C(0xffc00b31),
+	SHA_UINT32_C(0x68581511),
+	SHA_UINT32_C(0x64f98fa7),
+	SHA_UINT32_C(0xbefa4fa4)
 };
 
 /* Initial hash value H for SHA-256: */
 static const sha_word32 sha256_initial_hash_value[8] = {
-	0x6a09e667UL,
-	0xbb67ae85UL,
-	0x3c6ef372UL,
-	0xa54ff53aUL,
-	0x510e527fUL,
-	0x9b05688cUL,
-	0x1f83d9abUL,
-	0x5be0cd19UL
+	SHA_UINT32_C(0x6a09e667),
+	SHA_UINT32_C(0xbb67ae85),
+	SHA_UINT32_C(0x3c6ef372),
+	SHA_UINT32_C(0xa54ff53a),
+	SHA_UINT32_C(0x510e527f),
+	SHA_UINT32_C(0x9b05688c),
+	SHA_UINT32_C(0x1f83d9ab),
+	SHA_UINT32_C(0x5be0cd19)
 };
 
 /* Hash constant words K for SHA-384 and SHA-512: */
 static const sha_word64 K512[80] = {
-	0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
-	0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
-	0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
-	0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
-	0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
-	0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
-	0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
-	0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
-	0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
-	0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
-	0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
-	0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
-	0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
-	0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
-	0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
-	0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
-	0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
-	0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
-	0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
-	0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
-	0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
-	0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
-	0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
-	0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
-	0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
-	0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
-	0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
-	0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
-	0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
-	0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
-	0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
-	0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
-	0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
-	0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
-	0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
-	0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
-	0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
-	0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
-	0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
-	0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
+	SHA_UINT64_C(0x428a2f98d728ae22), SHA_UINT64_C(0x7137449123ef65cd),
+	SHA_UINT64_C(0xb5c0fbcfec4d3b2f), SHA_UINT64_C(0xe9b5dba58189dbbc),
+	SHA_UINT64_C(0x3956c25bf348b538), SHA_UINT64_C(0x59f111f1b605d019),
+	SHA_UINT64_C(0x923f82a4af194f9b), SHA_UINT64_C(0xab1c5ed5da6d8118),
+	SHA_UINT64_C(0xd807aa98a3030242), SHA_UINT64_C(0x12835b0145706fbe),
+	SHA_UINT64_C(0x243185be4ee4b28c), SHA_UINT64_C(0x550c7dc3d5ffb4e2),
+	SHA_UINT64_C(0x72be5d74f27b896f), SHA_UINT64_C(0x80deb1fe3b1696b1),
+	SHA_UINT64_C(0x9bdc06a725c71235), SHA_UINT64_C(0xc19bf174cf692694),
+	SHA_UINT64_C(0xe49b69c19ef14ad2), SHA_UINT64_C(0xefbe4786384f25e3),
+	SHA_UINT64_C(0x0fc19dc68b8cd5b5), SHA_UINT64_C(0x240ca1cc77ac9c65),
+	SHA_UINT64_C(0x2de92c6f592b0275), SHA_UINT64_C(0x4a7484aa6ea6e483),
+	SHA_UINT64_C(0x5cb0a9dcbd41fbd4), SHA_UINT64_C(0x76f988da831153b5),
+	SHA_UINT64_C(0x983e5152ee66dfab), SHA_UINT64_C(0xa831c66d2db43210),
+	SHA_UINT64_C(0xb00327c898fb213f), SHA_UINT64_C(0xbf597fc7beef0ee4),
+	SHA_UINT64_C(0xc6e00bf33da88fc2), SHA_UINT64_C(0xd5a79147930aa725),
+	SHA_UINT64_C(0x06ca6351e003826f), SHA_UINT64_C(0x142929670a0e6e70),
+	SHA_UINT64_C(0x27b70a8546d22ffc), SHA_UINT64_C(0x2e1b21385c26c926),
+	SHA_UINT64_C(0x4d2c6dfc5ac42aed), SHA_UINT64_C(0x53380d139d95b3df),
+	SHA_UINT64_C(0x650a73548baf63de), SHA_UINT64_C(0x766a0abb3c77b2a8),
+	SHA_UINT64_C(0x81c2c92e47edaee6), SHA_UINT64_C(0x92722c851482353b),
+	SHA_UINT64_C(0xa2bfe8a14cf10364), SHA_UINT64_C(0xa81a664bbc423001),
+	SHA_UINT64_C(0xc24b8b70d0f89791), SHA_UINT64_C(0xc76c51a30654be30),
+	SHA_UINT64_C(0xd192e819d6ef5218), SHA_UINT64_C(0xd69906245565a910),
+	SHA_UINT64_C(0xf40e35855771202a), SHA_UINT64_C(0x106aa07032bbd1b8),
+	SHA_UINT64_C(0x19a4c116b8d2d0c8), SHA_UINT64_C(0x1e376c085141ab53),
+	SHA_UINT64_C(0x2748774cdf8eeb99), SHA_UINT64_C(0x34b0bcb5e19b48a8),
+	SHA_UINT64_C(0x391c0cb3c5c95a63), SHA_UINT64_C(0x4ed8aa4ae3418acb),
+	SHA_UINT64_C(0x5b9cca4f7763e373), SHA_UINT64_C(0x682e6ff3d6b2b8a3),
+	SHA_UINT64_C(0x748f82ee5defb2fc), SHA_UINT64_C(0x78a5636f43172f60),
+	SHA_UINT64_C(0x84c87814a1f0ab72), SHA_UINT64_C(0x8cc702081a6439ec),
+	SHA_UINT64_C(0x90befffa23631e28), SHA_UINT64_C(0xa4506cebde82bde9),
+	SHA_UINT64_C(0xbef9a3f7b2c67915), SHA_UINT64_C(0xc67178f2e372532b),
+	SHA_UINT64_C(0xca273eceea26619c), SHA_UINT64_C(0xd186b8c721c0c207),
+	SHA_UINT64_C(0xeada7dd6cde0eb1e), SHA_UINT64_C(0xf57d4f7fee6ed178),
+	SHA_UINT64_C(0x06f067aa72176fba), SHA_UINT64_C(0x0a637dc5a2c898a6),
+	SHA_UINT64_C(0x113f9804bef90dae), SHA_UINT64_C(0x1b710b35131c471b),
+	SHA_UINT64_C(0x28db77f523047d84), SHA_UINT64_C(0x32caab7b40c72493),
+	SHA_UINT64_C(0x3c9ebe0a15c9bebc), SHA_UINT64_C(0x431d67c49c100d4c),
+	SHA_UINT64_C(0x4cc5d4becb3e42b6), SHA_UINT64_C(0x597f299cfc657e2a),
+	SHA_UINT64_C(0x5fcb6fab3ad6faec), SHA_UINT64_C(0x6c44198c4a475817)
 };
 
 /* Initial hash value H for SHA-384 */
 static const sha_word64 sha384_initial_hash_value[8] = {
-	0xcbbb9d5dc1059ed8ULL,
-	0x629a292a367cd507ULL,
-	0x9159015a3070dd17ULL,
-	0x152fecd8f70e5939ULL,
-	0x67332667ffc00b31ULL,
-	0x8eb44a8768581511ULL,
-	0xdb0c2e0d64f98fa7ULL,
-	0x47b5481dbefa4fa4ULL
+	SHA_UINT64_C(0xcbbb9d5dc1059ed8),
+	SHA_UINT64_C(0x629a292a367cd507),
+	SHA_UINT64_C(0x9159015a3070dd17),
+	SHA_UINT64_C(0x152fecd8f70e5939),
+	SHA_UINT64_C(0x67332667ffc00b31),
+	SHA_UINT64_C(0x8eb44a8768581511),
+	SHA_UINT64_C(0xdb0c2e0d64f98fa7),
+	SHA_UINT64_C(0x47b5481dbefa4fa4)
 };
 
 /* Initial hash value H for SHA-512 */
 static const sha_word64 sha512_initial_hash_value[8] = {
-	0x6a09e667f3bcc908ULL,
-	0xbb67ae8584caa73bULL,
-	0x3c6ef372fe94f82bULL,
-	0xa54ff53a5f1d36f1ULL,
-	0x510e527fade682d1ULL,
-	0x9b05688c2b3e6c1fULL,
-	0x1f83d9abfb41bd6bULL,
-	0x5be0cd19137e2179ULL
+	SHA_UINT64_C(0x6a09e667f3bcc908),
+	SHA_UINT64_C(0xbb67ae8584caa73b),
+	SHA_UINT64_C(0x3c6ef372fe94f82b),
+	SHA_UINT64_C(0xa54ff53a5f1d36f1),
+	SHA_UINT64_C(0x510e527fade682d1),
+	SHA_UINT64_C(0x9b05688c2b3e6c1f),
+	SHA_UINT64_C(0x1f83d9abfb41bd6b),
+	SHA_UINT64_C(0x5be0cd19137e2179)
 };
 
 /*

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2e9c26cf9616fead92ec65eefc696bcf9761b996
commit 2e9c26cf9616fead92ec65eefc696bcf9761b996
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 16 10:12:18 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 10:29:35 2011 -0500

    Add string(MD5) and string(SHA*) commands to compute hashes
    
    Provide a CMake-language binding to these cryptographic hashes.  Add a
    string() command API for MD5, SHA1, SHA224, SHA256, SHA384, and SHA512.

diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx
index d239c06..f2f2681 100644
--- a/Source/cmStringCommand.cxx
+++ b/Source/cmStringCommand.cxx
@@ -10,6 +10,8 @@
   See the License for more information.
 ============================================================================*/
 #include "cmStringCommand.h"
+#include "cmCryptoHash.h"
+
 #include <cmsys/RegularExpression.hxx>
 #include <cmsys/SystemTools.hxx>
 
@@ -36,6 +38,15 @@ bool cmStringCommand
     {
     return this->HandleReplaceCommand(args);
     }
+  else if ( subCommand == "MD5" ||
+            subCommand == "SHA1" ||
+            subCommand == "SHA224" ||
+            subCommand == "SHA256" ||
+            subCommand == "SHA384" ||
+            subCommand == "SHA512" )
+    {
+    return this->HandleHashCommand(args);
+    }
   else if(subCommand == "TOLOWER")
     {
     return this->HandleToUpperLowerCommand(args, false);
@@ -83,6 +94,27 @@ bool cmStringCommand
 }
 
 //----------------------------------------------------------------------------
+bool cmStringCommand::HandleHashCommand(std::vector<std::string> const& args)
+{
+  if(args.size() != 3)
+    {
+    cmOStringStream e;
+    e << args[0] << " requires an output variable and an input string";
+    this->SetError(e.str().c_str());
+    return false;
+    }
+
+  cmsys::auto_ptr<cmCryptoHash> hash(cmCryptoHash::New(args[0].c_str()));
+  if(hash.get())
+    {
+    std::string out = hash->HashString(args[2].c_str());
+    this->Makefile->AddDefinition(args[1].c_str(), out.c_str());
+    return true;
+    }
+  return false;
+}
+
+//----------------------------------------------------------------------------
 bool cmStringCommand::HandleToUpperLowerCommand(
   std::vector<std::string> const& args, bool toUpper)
 {
diff --git a/Source/cmStringCommand.h b/Source/cmStringCommand.h
index 52b83d9..452f4a1 100644
--- a/Source/cmStringCommand.h
+++ b/Source/cmStringCommand.h
@@ -76,6 +76,8 @@ public:
       "  string(REPLACE <match_string>\n"
       "         <replace_string> <output variable>\n"
       "         <input> [<input>...])\n"
+      "  string(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512>\n"
+      "         <output variable> <input>)\n"
       "  string(COMPARE EQUAL <string1> <string2> <output variable>)\n"
       "  string(COMPARE NOTEQUAL <string1> <string2> <output variable>)\n"
       "  string(COMPARE LESS <string1> <string2> <output variable>)\n"
@@ -103,6 +105,8 @@ public:
       "backslash through argument parsing.\n"
       "REPLACE will replace all occurrences of match_string in the input with "
       "replace_string and store the result in the output.\n"
+      "MD5, SHA1, SHA224, SHA256, SHA384, and SHA512 "
+      "will compute a cryptographic hash of the input string.\n"
       "COMPARE EQUAL/NOTEQUAL/LESS/GREATER will compare the strings and "
       "store true or false in the output variable.\n"
       "ASCII will convert all numbers into corresponding ASCII characters.\n"
@@ -150,6 +154,7 @@ protected:
   bool RegexMatch(std::vector<std::string> const& args);
   bool RegexMatchAll(std::vector<std::string> const& args);
   bool RegexReplace(std::vector<std::string> const& args);
+  bool HandleHashCommand(std::vector<std::string> const& args);
   bool HandleToUpperLowerCommand(std::vector<std::string> const& args,
                                  bool toUpper);
   bool HandleCompareCommand(std::vector<std::string> const& args);
diff --git a/Tests/CMakeTests/String-MD5-BadArg1.cmake b/Tests/CMakeTests/String-MD5-BadArg1.cmake
new file mode 100644
index 0000000..8946476
--- /dev/null
+++ b/Tests/CMakeTests/String-MD5-BadArg1.cmake
@@ -0,0 +1 @@
+string(MD5)
diff --git a/Tests/CMakeTests/String-MD5-BadArg2.cmake b/Tests/CMakeTests/String-MD5-BadArg2.cmake
new file mode 100644
index 0000000..abbbf87
--- /dev/null
+++ b/Tests/CMakeTests/String-MD5-BadArg2.cmake
@@ -0,0 +1 @@
+string(MD5 md5)
diff --git a/Tests/CMakeTests/String-MD5-BadArg4.cmake b/Tests/CMakeTests/String-MD5-BadArg4.cmake
new file mode 100644
index 0000000..edd4427
--- /dev/null
+++ b/Tests/CMakeTests/String-MD5-BadArg4.cmake
@@ -0,0 +1 @@
+string(MD5 md5 input extra_arg)
diff --git a/Tests/CMakeTests/String-MD5-Works.cmake b/Tests/CMakeTests/String-MD5-Works.cmake
new file mode 100644
index 0000000..4ef7a07
--- /dev/null
+++ b/Tests/CMakeTests/String-MD5-Works.cmake
@@ -0,0 +1,2 @@
+string(MD5 md5 "sample input string\n")
+message("${md5}")
diff --git a/Tests/CMakeTests/String-SHA1-Works.cmake b/Tests/CMakeTests/String-SHA1-Works.cmake
new file mode 100644
index 0000000..2f3b51b
--- /dev/null
+++ b/Tests/CMakeTests/String-SHA1-Works.cmake
@@ -0,0 +1,2 @@
+string(SHA1 sha1 "sample input string\n")
+message("${sha1}")
diff --git a/Tests/CMakeTests/String-SHA224-Works.cmake b/Tests/CMakeTests/String-SHA224-Works.cmake
new file mode 100644
index 0000000..5b7f880
--- /dev/null
+++ b/Tests/CMakeTests/String-SHA224-Works.cmake
@@ -0,0 +1,2 @@
+string(SHA224 sha224 "sample input string\n")
+message("${sha224}")
diff --git a/Tests/CMakeTests/String-SHA256-Works.cmake b/Tests/CMakeTests/String-SHA256-Works.cmake
new file mode 100644
index 0000000..e3e89ae
--- /dev/null
+++ b/Tests/CMakeTests/String-SHA256-Works.cmake
@@ -0,0 +1,2 @@
+string(SHA256 sha256 "sample input string\n")
+message("${sha256}")
diff --git a/Tests/CMakeTests/String-SHA384-Works.cmake b/Tests/CMakeTests/String-SHA384-Works.cmake
new file mode 100644
index 0000000..828a190
--- /dev/null
+++ b/Tests/CMakeTests/String-SHA384-Works.cmake
@@ -0,0 +1,2 @@
+string(SHA384 sha384 "sample input string\n")
+message("${sha384}")
diff --git a/Tests/CMakeTests/String-SHA512-Works.cmake b/Tests/CMakeTests/String-SHA512-Works.cmake
new file mode 100644
index 0000000..e17db5c
--- /dev/null
+++ b/Tests/CMakeTests/String-SHA512-Works.cmake
@@ -0,0 +1,2 @@
+string(SHA512 sha512 "sample input string\n")
+message("${sha512}")
diff --git a/Tests/CMakeTests/StringTest.cmake.in b/Tests/CMakeTests/StringTest.cmake.in
index 6bb60f4..49e7dc9 100644
--- a/Tests/CMakeTests/StringTest.cmake.in
+++ b/Tests/CMakeTests/StringTest.cmake.in
@@ -1,3 +1,35 @@
+set(MD5-BadArg1-RESULT 1)
+set(MD5-BadArg1-STDERR "string MD5 requires an output variable")
+set(MD5-BadArg2-RESULT 1)
+set(MD5-BadArg2-STDERR "string MD5 requires an output variable and an input string")
+set(MD5-BadArg4-RESULT 1)
+set(MD5-BadArg4-STDERR "string MD5 requires an output variable and an input string")
+set(MD5-Works-RESULT 0)
+set(MD5-Works-STDERR "10d20ddb981a6202b84aa1ce1cb7fce3")
+set(SHA1-Works-RESULT 0)
+set(SHA1-Works-STDERR "83f093e04289b21a9415f408ad50be8b57ad2f34")
+set(SHA224-Works-RESULT 0)
+set(SHA224-Works-STDERR "e995a7789922c4ef9279d94e763c8375934180a51baa7147bc48edf7")
+set(SHA256-Works-RESULT 0)
+set(SHA256-Works-STDERR "d1c5915d8b71150726a1eef75a29ec6bea8fd1bef6b7299ef8048760b0402025")
+set(SHA384-Works-RESULT 0)
+set(SHA384-Works-STDERR "1de9560b4e030e02051ea408200ffc55d70c97ac64ebf822461a5c786f495c36df43259b14483bc8d364f0106f4971ee")
+set(SHA512-Works-RESULT 0)
+set(SHA512-Works-STDERR "3982a1b4e651768bec70ab1fb97045cb7a659f4ba7203d501c52ab2e803071f9d5fd272022df15f27727fc67f8cd022e710e29010b2a9c0b467c111e2f6abf51")
+
+include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake")
+check_cmake_test(String
+  MD5-BadArg1
+  MD5-BadArg2
+  MD5-BadArg4
+  MD5-Works
+  SHA1-Works
+  SHA224-Works
+  SHA256-Works
+  SHA384-Works
+  SHA512-Works
+  )
+
 # Execute each test listed in StringTestScript.cmake:
 #
 set(scriptname "@CMAKE_CURRENT_SOURCE_DIR@/StringTestScript.cmake")

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=293a7f4e2ae9b458d3efefcfe133d0ad5320a1b2
commit 293a7f4e2ae9b458d3efefcfe133d0ad5320a1b2
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 16 10:04:41 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 10:15:44 2011 -0500

    cmCryptoHash: Provide factory "New" method
    
    Construct a cmCryptoHash subclass instance based on the name of the
    desired hash algorithm.

diff --git a/Source/cmCryptoHash.cxx b/Source/cmCryptoHash.cxx
index 411da58..a1505bd 100644
--- a/Source/cmCryptoHash.cxx
+++ b/Source/cmCryptoHash.cxx
@@ -15,6 +15,25 @@
 #include "cm_sha2.h"
 
 //----------------------------------------------------------------------------
+cmsys::auto_ptr<cmCryptoHash> cmCryptoHash::New(const char* algo)
+{
+  if(strcmp(algo,"MD5") == 0)
+    { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashMD5); }
+  else if(strcmp(algo,"SHA1") == 0)
+    { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA1); }
+  else if(strcmp(algo,"SHA224") == 0)
+    { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA224); }
+  else if(strcmp(algo,"SHA256") == 0)
+    { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA256); }
+  else if(strcmp(algo,"SHA384") == 0)
+    { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA384); }
+  else if(strcmp(algo,"SHA512") == 0)
+    { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA512); }
+  else
+    { return cmsys::auto_ptr<cmCryptoHash>(0); }
+}
+
+//----------------------------------------------------------------------------
 std::string cmCryptoHash::HashString(const char* input)
 {
   this->Initialize();
diff --git a/Source/cmCryptoHash.h b/Source/cmCryptoHash.h
index c17104b..0a33365 100644
--- a/Source/cmCryptoHash.h
+++ b/Source/cmCryptoHash.h
@@ -14,9 +14,12 @@
 
 #include "cmStandardIncludes.h"
 
+#include <cmsys/auto_ptr.hxx>
+
 class cmCryptoHash
 {
 public:
+  static cmsys::auto_ptr<cmCryptoHash> New(const char* algo);
   std::string HashString(const char* input);
   std::string HashFile(const char* file);
 protected:
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 35c743d..bab3116 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -360,19 +360,7 @@ bool cmFileCommand::HandleHashCommand(std::vector<std::string> const& args)
     return false;
     }
 
-  cmsys::auto_ptr<cmCryptoHash> hash;
-  if(args[0] == "MD5")
-    { hash.reset(new cmCryptoHashMD5); }
-  else if(args[0] == "SHA1")
-    { hash.reset(new cmCryptoHashSHA1); }
-  else if(args[0] == "SHA224")
-    { hash.reset(new cmCryptoHashSHA224); }
-  else if(args[0] == "SHA256")
-    { hash.reset(new cmCryptoHashSHA256); }
-  else if(args[0] == "SHA384")
-    { hash.reset(new cmCryptoHashSHA384); }
-  else if(args[0] == "SHA512")
-    { hash.reset(new cmCryptoHashSHA512); }
+  cmsys::auto_ptr<cmCryptoHash> hash(cmCryptoHash::New(args[0].c_str()));
   if(hash.get())
     {
     std::string out = hash->HashFile(args[1].c_str());

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=46ab0561fc29446a736985816b005200aad9489c
commit 46ab0561fc29446a736985816b005200aad9489c
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Nov 16 07:56:31 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 10:15:44 2011 -0500

    sha2: Use "static const" instead of "const static" declarations
    
    Fix old-style declarations in the original code.

diff --git a/Source/cm_sha2.c b/Source/cm_sha2.c
index 0bf62f2..ecb2d9c 100644
--- a/Source/cm_sha2.c
+++ b/Source/cm_sha2.c
@@ -228,7 +228,7 @@ void SHA512_Internal_Transform(SHA_CTX*, const sha_word64*);
 #define K1_60_TO_79	0xca62c1d6UL
 
 /* Initial hash value H for SHA-1: */
-const static sha_word32 sha1_initial_hash_value[5] = {
+static const sha_word32 sha1_initial_hash_value[5] = {
 	0x67452301UL,
 	0xefcdab89UL,
 	0x98badcfeUL,
@@ -237,7 +237,7 @@ const static sha_word32 sha1_initial_hash_value[5] = {
 };
 
 /* Hash constant words K for SHA-224 and SHA-256: */
-const static sha_word32 K256[64] = {
+static const sha_word32 K256[64] = {
 	0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
 	0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
 	0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
@@ -257,7 +257,7 @@ const static sha_word32 K256[64] = {
 };
 
 /* Initial hash value H for SHA-224: */
-const static sha_word32 sha224_initial_hash_value[8] = {
+static const sha_word32 sha224_initial_hash_value[8] = {
 	0xc1059ed8UL,
 	0x367cd507UL,
 	0x3070dd17UL,
@@ -269,7 +269,7 @@ const static sha_word32 sha224_initial_hash_value[8] = {
 };
 
 /* Initial hash value H for SHA-256: */
-const static sha_word32 sha256_initial_hash_value[8] = {
+static const sha_word32 sha256_initial_hash_value[8] = {
 	0x6a09e667UL,
 	0xbb67ae85UL,
 	0x3c6ef372UL,
@@ -281,7 +281,7 @@ const static sha_word32 sha256_initial_hash_value[8] = {
 };
 
 /* Hash constant words K for SHA-384 and SHA-512: */
-const static sha_word64 K512[80] = {
+static const sha_word64 K512[80] = {
 	0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
 	0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
 	0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
@@ -325,7 +325,7 @@ const static sha_word64 K512[80] = {
 };
 
 /* Initial hash value H for SHA-384 */
-const static sha_word64 sha384_initial_hash_value[8] = {
+static const sha_word64 sha384_initial_hash_value[8] = {
 	0xcbbb9d5dc1059ed8ULL,
 	0x629a292a367cd507ULL,
 	0x9159015a3070dd17ULL,
@@ -337,7 +337,7 @@ const static sha_word64 sha384_initial_hash_value[8] = {
 };
 
 /* Initial hash value H for SHA-512 */
-const static sha_word64 sha512_initial_hash_value[8] = {
+static const sha_word64 sha512_initial_hash_value[8] = {
 	0x6a09e667f3bcc908ULL,
 	0xbb67ae8584caa73bULL,
 	0x3c6ef372fe94f82bULL,

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=38771d3bdf51b81d46578e0c81ebddbdea0ce3b2
commit 38771d3bdf51b81d46578e0c81ebddbdea0ce3b2
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Nov 15 20:32:43 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Nov 16 10:15:44 2011 -0500

    Add file(SHA*) commands to compute cryptographic hashes
    
    Add a file() command API for SHA1, SHA224, SHA256, SHA384, and SHA512.

diff --git a/Source/cmCryptoHash.cxx b/Source/cmCryptoHash.cxx
index 3a73398..411da58 100644
--- a/Source/cmCryptoHash.cxx
+++ b/Source/cmCryptoHash.cxx
@@ -12,6 +12,7 @@
 #include "cmCryptoHash.h"
 
 #include <cmsys/MD5.h>
+#include "cm_sha2.h"
 
 //----------------------------------------------------------------------------
 std::string cmCryptoHash::HashString(const char* input)
@@ -88,3 +89,23 @@ std::string cmCryptoHashMD5::Finalize()
   cmsysMD5_FinalizeHex(this->MD5, md5out);
   return std::string(md5out, 32);
 }
+
+
+#define cmCryptoHash_SHA_CLASS_IMPL(SHA) \
+cmCryptoHash##SHA::cmCryptoHash##SHA(): SHA(new SHA_CTX) {} \
+cmCryptoHash##SHA::~cmCryptoHash##SHA() { delete this->SHA; } \
+void cmCryptoHash##SHA::Initialize() { SHA##_Init(this->SHA); } \
+void cmCryptoHash##SHA::Append(unsigned char const* buf, int sz) \
+{ SHA##_Update(this->SHA, buf, sz); } \
+std::string cmCryptoHash##SHA::Finalize() \
+{ \
+  char out[SHA##_DIGEST_STRING_LENGTH]; \
+  SHA##_End(this->SHA, out); \
+  return std::string(out, SHA##_DIGEST_STRING_LENGTH-1); \
+}
+
+cmCryptoHash_SHA_CLASS_IMPL(SHA1)
+cmCryptoHash_SHA_CLASS_IMPL(SHA224)
+cmCryptoHash_SHA_CLASS_IMPL(SHA256)
+cmCryptoHash_SHA_CLASS_IMPL(SHA384)
+cmCryptoHash_SHA_CLASS_IMPL(SHA512)
diff --git a/Source/cmCryptoHash.h b/Source/cmCryptoHash.h
index 670624c..c17104b 100644
--- a/Source/cmCryptoHash.h
+++ b/Source/cmCryptoHash.h
@@ -37,4 +37,25 @@ protected:
   virtual std::string Finalize();
 };
 
+#define cmCryptoHash_SHA_CLASS_DECL(SHA) \
+  class cmCryptoHash##SHA: public cmCryptoHash \
+  { \
+    union _SHA_CTX* SHA; \
+  public: \
+    cmCryptoHash##SHA(); \
+    ~cmCryptoHash##SHA(); \
+  protected: \
+    virtual void Initialize(); \
+    virtual void Append(unsigned char const* buf, int sz); \
+    virtual std::string Finalize(); \
+  }
+
+cmCryptoHash_SHA_CLASS_DECL(SHA1);
+cmCryptoHash_SHA_CLASS_DECL(SHA224);
+cmCryptoHash_SHA_CLASS_DECL(SHA256);
+cmCryptoHash_SHA_CLASS_DECL(SHA384);
+cmCryptoHash_SHA_CLASS_DECL(SHA512);
+
+#undef cmCryptoHash_SHA_CLASS_DECL
+
 #endif
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 32454f5..35c743d 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -85,7 +85,12 @@ bool cmFileCommand
     {
     return this->HandleReadCommand(args);
     }
-  else if ( subCommand == "MD5" )
+  else if ( subCommand == "MD5" ||
+            subCommand == "SHA1" ||
+            subCommand == "SHA224" ||
+            subCommand == "SHA256" ||
+            subCommand == "SHA384" ||
+            subCommand == "SHA512" )
     {
     return this->HandleHashCommand(args);
     }
@@ -358,6 +363,16 @@ bool cmFileCommand::HandleHashCommand(std::vector<std::string> const& args)
   cmsys::auto_ptr<cmCryptoHash> hash;
   if(args[0] == "MD5")
     { hash.reset(new cmCryptoHashMD5); }
+  else if(args[0] == "SHA1")
+    { hash.reset(new cmCryptoHashSHA1); }
+  else if(args[0] == "SHA224")
+    { hash.reset(new cmCryptoHashSHA224); }
+  else if(args[0] == "SHA256")
+    { hash.reset(new cmCryptoHashSHA256); }
+  else if(args[0] == "SHA384")
+    { hash.reset(new cmCryptoHashSHA384); }
+  else if(args[0] == "SHA512")
+    { hash.reset(new cmCryptoHashSHA512); }
   if(hash.get())
     {
     std::string out = hash->HashFile(args[1].c_str());
diff --git a/Source/cmFileCommand.h b/Source/cmFileCommand.h
index dce6478..9e2ed0f 100644
--- a/Source/cmFileCommand.h
+++ b/Source/cmFileCommand.h
@@ -65,7 +65,7 @@ public:
       "  file(WRITE filename \"message to write\"... )\n"
       "  file(APPEND filename \"message to write\"... )\n"
       "  file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX])\n"
-      "  file(MD5 filename variable)\n"
+      "  file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> filename variable)\n"
       "  file(STRINGS filename variable [LIMIT_COUNT num]\n"
       "       [LIMIT_INPUT numBytes] [LIMIT_OUTPUT numBytes]\n"
       "       [LENGTH_MINIMUM numBytes] [LENGTH_MAXIMUM numBytes]\n"
@@ -95,7 +95,7 @@ public:
       "variable. It will start at the given offset and read up to numBytes. "
       "If the argument HEX is given, the binary data will be converted to "
       "hexadecimal representation and this will be stored in the variable.\n"
-      "MD5 "
+      "MD5, SHA1, SHA224, SHA256, SHA384, and SHA512 "
       "will compute a cryptographic hash of the content of a file.\n"
       "STRINGS will parse a list of ASCII strings from a file and "
       "store it in a variable. Binary data in the file are ignored. Carriage "
diff --git a/Tests/CMakeTests/File-SHA1-Works.cmake b/Tests/CMakeTests/File-SHA1-Works.cmake
new file mode 100644
index 0000000..03ea3ac
--- /dev/null
+++ b/Tests/CMakeTests/File-SHA1-Works.cmake
@@ -0,0 +1,2 @@
+file(SHA1 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha1)
+message("${sha1}")
diff --git a/Tests/CMakeTests/File-SHA224-Works.cmake b/Tests/CMakeTests/File-SHA224-Works.cmake
new file mode 100644
index 0000000..0295346
--- /dev/null
+++ b/Tests/CMakeTests/File-SHA224-Works.cmake
@@ -0,0 +1,2 @@
+file(SHA224 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha224)
+message("${sha224}")
diff --git a/Tests/CMakeTests/File-SHA256-Works.cmake b/Tests/CMakeTests/File-SHA256-Works.cmake
new file mode 100644
index 0000000..32bc9fe
--- /dev/null
+++ b/Tests/CMakeTests/File-SHA256-Works.cmake
@@ -0,0 +1,2 @@
+file(SHA256 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha256)
+message("${sha256}")
diff --git a/Tests/CMakeTests/File-SHA384-Works.cmake b/Tests/CMakeTests/File-SHA384-Works.cmake
new file mode 100644
index 0000000..5c56de2
--- /dev/null
+++ b/Tests/CMakeTests/File-SHA384-Works.cmake
@@ -0,0 +1,2 @@
+file(SHA384 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha384)
+message("${sha384}")
diff --git a/Tests/CMakeTests/File-SHA512-Works.cmake b/Tests/CMakeTests/File-SHA512-Works.cmake
new file mode 100644
index 0000000..cf10706
--- /dev/null
+++ b/Tests/CMakeTests/File-SHA512-Works.cmake
@@ -0,0 +1,2 @@
+file(SHA512 ${CMAKE_CURRENT_LIST_DIR}/File-Copy-NoDest.cmake sha512)
+message("${sha512}")
diff --git a/Tests/CMakeTests/FileTest.cmake.in b/Tests/CMakeTests/FileTest.cmake.in
index 3aa88a7..824aba7 100644
--- a/Tests/CMakeTests/FileTest.cmake.in
+++ b/Tests/CMakeTests/FileTest.cmake.in
@@ -22,6 +22,16 @@ set(MD5-BadArg4-RESULT 1)
 set(MD5-BadArg4-STDERR "file MD5 requires a file name and output variable")
 set(MD5-Works-RESULT 0)
 set(MD5-Works-STDERR "a28a44fb5b58a6acf0cbec46557bc775")
+set(SHA1-Works-RESULT 0)
+set(SHA1-Works-STDERR "e0ce452a7e34e9c705b46e4e7c9cd959082c0777")
+set(SHA224-Works-RESULT 0)
+set(SHA224-Works-STDERR "d1f1c9db3df73586a5a200014505ef03b70da5e0539eb35c11b4ef6f")
+set(SHA256-Works-RESULT 0)
+set(SHA256-Works-STDERR "bb38de1c34713f750a4f84404ef5fb1efb93cf815cb09182db457ba91de19195")
+set(SHA384-Works-RESULT 0)
+set(SHA384-Works-STDERR "2f01d58436bd04a40ec2c938a15f2bb661bf1bf1560a5f2d40a3ebbb716a58e400ab2992c23ba19fa96dc519e0042c26")
+set(SHA512-Works-RESULT 0)
+set(SHA512-Works-STDERR "349d02e347ddb133afb4557c9e541163f54b6eaa9eb345672bfd7bbce90c9872bf1fad9c6662248eb7b092aef719e4b8c3b8bb1cf47f287abbde12360c073686")
 
 include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake")
 check_cmake_test(File
@@ -37,6 +47,11 @@ check_cmake_test(File
   MD5-BadArg2
   MD5-BadArg4
   MD5-Works
+  SHA1-Works
+  SHA224-Works
+  SHA256-Works
+  SHA384-Works
+  SHA512-Works
   )
 
 # Also execute each test listed in FileTestScript.cmake:

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list