From d20c719f03939a0e0220429647f5964fe6c8aeb2 Mon Sep 17 00:00:00 2001
From: callum_linden <none@none>
Date: Fri, 17 Oct 2014 16:20:36 -0700
Subject: Update to build on Xcode 6.0: turn off warnings about unused
 functions from clang for tut package

---
 indra/test/lltut.h | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'indra/test/lltut.h')

diff --git a/indra/test/lltut.h b/indra/test/lltut.h
index 243e869be7..5428be3719 100755
--- a/indra/test/lltut.h
+++ b/indra/test/lltut.h
@@ -31,7 +31,12 @@
 
 #include "is_approx_equal_fraction.h" // instead of llmath.h
 
+// turn off warnings about unused functions from clang for tut package
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-function"
 #include <tut/tut.hpp>
+#pragma clang diagnostic pop
+
 #include <cstring>
 
 class LLDate;
-- 
cgit v1.2.3


From 642c334efa2dbd0bafca5b0dbb11a986cd5ab4a9 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Thu, 23 Oct 2014 08:44:42 -0700
Subject: Fix Xcode 6 compile errors relating to tut::ensure_equals()
 overloads. lltut.h declares a number of ensure_equals() overloads for various
 data types, notably the types supported by LLSD. We expect these to be called
 by tut code. But the tut code in question is in a template in tut.hpp --
 which was #included BEFORE the overloads were declared. Previous C++
 compilers have evidently made multiple passes, collecting the relevant
 overloads before attempting to compile the template bodies. clang does not,
 complaining that the overloads must be declared before the tut.hpp template
 code that references them. Reordering parts of lltut.h seems to address that
 problem. For similar reasons, test programs that use StringVec.h and its
 operator<<() must #include StringVec.h before lltut.h. Add
 ensure_equals(const std::string&, const LLSD::Binary&, const LLSD::Binary&)
 overload. The sloppy mix of (const char*, ...) and (const std::string&, ...)
 overloads bothers me, since for many of those ... types we seem to have to
 duplicate them.

---
 indra/test/lltut.h | 95 +++++++++++++++++++++++++++++++-----------------------
 1 file changed, 55 insertions(+), 40 deletions(-)

(limited to 'indra/test/lltut.h')

diff --git a/indra/test/lltut.h b/indra/test/lltut.h
index 5428be3719..6cb670b2a3 100755
--- a/indra/test/lltut.h
+++ b/indra/test/lltut.h
@@ -30,6 +30,60 @@
 #define LL_LLTUT_H
 
 #include "is_approx_equal_fraction.h" // instead of llmath.h
+#include <cstring>
+
+class LLDate;
+class LLSD;
+class LLURI;
+
+namespace tut
+{
+	template <class T,class Q>
+	void ensure_equals(const std::string& msg,
+		const Q& actual,const T& expected)
+		{ ensure_equals(msg.c_str(), actual, expected); }
+
+	void ensure_equals(const char* msg,
+		const LLDate& actual, const LLDate& expected);
+
+	void ensure_equals(const char* msg,
+		const LLURI& actual, const LLURI& expected);
+
+	// std::vector<U8> is the current definition of LLSD::Binary. Because
+	// we're only forward-declaring LLSD in this header file, we can't
+	// directly reference that nested type. If the build complains that
+	// there's no definition for either of these declarations, it could be
+	// that LLSD::Binary has changed, and that these declarations must be
+	// adjusted to match.
+	void ensure_equals(const char* msg,
+		const std::vector<U8>& actual, const std::vector<U8>& expected);
+
+	void ensure_equals(const std::string& msg,
+		const std::vector<U8>& actual, const std::vector<U8>& expected);
+
+	void ensure_equals(const char* msg,
+		const LLSD& actual, const LLSD& expected);
+
+	void ensure_equals(const std::string& msg,
+		const LLSD& actual, const LLSD& expected);
+	
+	void ensure_starts_with(const std::string& msg,
+		const std::string& actual, const std::string& expectedStart);
+
+	void ensure_ends_with(const std::string& msg,
+		const std::string& actual, const std::string& expectedEnd);
+
+	void ensure_contains(const std::string& msg,
+		const std::string& actual, const std::string& expectedSubString);
+
+	void ensure_does_not_contain(const std::string& msg,
+		const std::string& actual, const std::string& expectedSubString);
+}
+
+// This is an odd place to #include an important contributor -- but the usual
+// rules are reversed here. Instead of the overloads above referencing tut.hpp
+// features, we need calls in tut.hpp template functions to dispatch to our
+// overloads declared above.
 
 // turn off warnings about unused functions from clang for tut package
 #pragma clang diagnostic push
@@ -37,12 +91,7 @@
 #include <tut/tut.hpp>
 #pragma clang diagnostic pop
 
-#include <cstring>
-
-class LLDate;
-class LLSD;
-class LLURI;
-
+// The functions BELOW this point actually consume tut.hpp functionality.
 namespace tut
 {
 	inline void ensure_approximately_equals(const char* msg, F64 actual, F64 expected, U32 frac_bits)
@@ -112,40 +161,6 @@ namespace tut
 	{
 		ensure_not_equals(NULL, actual, expected);
 	}
-	
-	
-	template <class T,class Q>
-	void ensure_equals(const std::string& msg,
-		const Q& actual,const T& expected)
-		{ ensure_equals(msg.c_str(), actual, expected); }
-
-	void ensure_equals(const char* msg,
-		const LLDate& actual, const LLDate& expected);
-
-	void ensure_equals(const char* msg,
-		const LLURI& actual, const LLURI& expected);
-		
-	void ensure_equals(const char* msg,
-		const std::vector<U8>& actual, const std::vector<U8>& expected);
-
-	void ensure_equals(const char* msg,
-		const LLSD& actual, const LLSD& expected);
-
-	void ensure_equals(const std::string& msg,
-		const LLSD& actual, const LLSD& expected);
-	
-	void ensure_starts_with(const std::string& msg,
-		const std::string& actual, const std::string& expectedStart);
-
-	void ensure_ends_with(const std::string& msg,
-		const std::string& actual, const std::string& expectedEnd);
-
-	void ensure_contains(const std::string& msg,
-		const std::string& actual, const std::string& expectedSubString);
-
-	void ensure_does_not_contain(const std::string& msg,
-		const std::string& actual, const std::string& expectedSubString);
 }
 
-
 #endif // LL_LLTUT_H
-- 
cgit v1.2.3


From 918e2b629bd3dadfbe5288c0d72d93bcca1b8cfe Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Thu, 23 Oct 2014 20:23:08 -0700
Subject: Bring in new TUT library build. Clean up ensure_equals() overloads.
 The new TUT library build eliminates the ambiguity about ensure_equals(const
 char*, ...) versus ensure_equals(const std::string&, ...). Now it's all based
 on const std::string&. Remove pointless const char* overloads and ambiguous
 forwarding templates. With clang in Xcode 6, any new datatypes we intend to
 use with ensure_equals() must have operator<<(std::ostream&, datatype)
 declared BEFORE lltut.h #includes tut.hpp. Reorder code in certain test
 source files to guarantee that visibility.

---
 indra/test/lltut.h | 21 +++++----------------
 1 file changed, 5 insertions(+), 16 deletions(-)

(limited to 'indra/test/lltut.h')

diff --git a/indra/test/lltut.h b/indra/test/lltut.h
index 6cb670b2a3..b334fb51e2 100755
--- a/indra/test/lltut.h
+++ b/indra/test/lltut.h
@@ -38,35 +38,24 @@ class LLURI;
 
 namespace tut
 {
-	template <class T,class Q>
 	void ensure_equals(const std::string& msg,
-		const Q& actual,const T& expected)
-		{ ensure_equals(msg.c_str(), actual, expected); }
-
-	void ensure_equals(const char* msg,
 		const LLDate& actual, const LLDate& expected);
 
-	void ensure_equals(const char* msg,
+	void ensure_equals(const std::string& msg,
 		const LLURI& actual, const LLURI& expected);
 
 	// std::vector<U8> is the current definition of LLSD::Binary. Because
 	// we're only forward-declaring LLSD in this header file, we can't
 	// directly reference that nested type. If the build complains that
-	// there's no definition for either of these declarations, it could be
-	// that LLSD::Binary has changed, and that these declarations must be
-	// adjusted to match.
-	void ensure_equals(const char* msg,
-		const std::vector<U8>& actual, const std::vector<U8>& expected);
-
+	// there's no definition for this declaration, it could be that
+	// LLSD::Binary has changed, and that this declaration must be adjusted to
+	// match.
 	void ensure_equals(const std::string& msg,
 		const std::vector<U8>& actual, const std::vector<U8>& expected);
 
-	void ensure_equals(const char* msg,
-		const LLSD& actual, const LLSD& expected);
-
 	void ensure_equals(const std::string& msg,
 		const LLSD& actual, const LLSD& expected);
-	
+
 	void ensure_starts_with(const std::string& msg,
 		const std::string& actual, const std::string& expectedStart);
 
-- 
cgit v1.2.3


From c54d102c8f7f336e3ad2144710e51062b5eeac97 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Fri, 5 Dec 2014 08:48:10 -0500
Subject: Wrap #pragma clang in #if __clang__, else VS produces fatal warnings.

---
 indra/test/lltut.h | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'indra/test/lltut.h')

diff --git a/indra/test/lltut.h b/indra/test/lltut.h
index b334fb51e2..9835565bb6 100755
--- a/indra/test/lltut.h
+++ b/indra/test/lltut.h
@@ -75,10 +75,14 @@ namespace tut
 // overloads declared above.
 
 // turn off warnings about unused functions from clang for tut package
+#if __clang__
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wunused-function"
+#endif
 #include <tut/tut.hpp>
+#if __clang__
 #pragma clang diagnostic pop
+#endif
 
 // The functions BELOW this point actually consume tut.hpp functionality.
 namespace tut
-- 
cgit v1.2.3