am 6b265bd4: Merge "Revert "Revert "Fix the mac build."""

* commit '6b265bd4a12e7518a275dddf41c33279bea8e16b':
  Revert "Revert "Fix the mac build.""
diff --git a/srec/include/portable.h b/srec/include/portable.h
index 3d39931..c9cc0ea 100644
--- a/srec/include/portable.h
+++ b/srec/include/portable.h
@@ -38,11 +38,6 @@
 
 #define ASSERT passert
 
-/* QNX defines log in math.h */
-#ifndef log
-#define log(X)          ((X) <= 1e-32 ? -MAX_LOG : log(X))
-/* #define exp(X)          ((X) < FLT_MIN_EXP ? 0.0 : exp(X)) */
-#endif
 /*  Allocation macros
 */
 
diff --git a/tools/grxmlcompile/Android.mk b/tools/grxmlcompile/Android.mk
index 4c9fe44..82d931a 100644
--- a/tools/grxmlcompile/Android.mk
+++ b/tools/grxmlcompile/Android.mk
@@ -63,8 +63,13 @@
 LOCAL_SHARED_LIBRARIES += libfst
 endif
 
+LOCAL_CLANG := true
+
 LOCAL_CPPFLAGS += -std=c++11
 
+# Workaround clang 3.5 bug: b/15319952
+LOCAL_CFLAGS += -O1
+
 LOCAL_STATIC_LIBRARIES := \
 	libtinyxml \
 
@@ -75,4 +80,6 @@
 
 LOCAL_MODULE:= grxmlcompile
 
+include external/libcxx/libcxx.mk
+
 include $(BUILD_HOST_EXECUTABLE)
diff --git a/tools/make_cfst/Android.mk b/tools/make_cfst/Android.mk
index 16470cd..9c7cc5a 100644
--- a/tools/make_cfst/Android.mk
+++ b/tools/make_cfst/Android.mk
@@ -24,6 +24,8 @@
 	$(ASR_GLOBAL_DEFINES) \
 	$(ASR_GLOBAL_CPPFLAGS) \
 
+LOCAL_CLANG := true
+
 LOCAL_CPPFLAGS += -std=c++11
 
 LOCAL_SHARED_LIBRARIES := \
@@ -51,4 +53,6 @@
 
 LOCAL_MODULE:= make_cfst
 
+include external/libcxx/libcxx.mk
+
 include $(BUILD_HOST_EXECUTABLE)
diff --git a/tools/thirdparty/OpenFst/fst/lib/Android.mk b/tools/thirdparty/OpenFst/fst/lib/Android.mk
index 6e89e3c..dfd3686 100644
--- a/tools/thirdparty/OpenFst/fst/lib/Android.mk
+++ b/tools/thirdparty/OpenFst/fst/lib/Android.mk
@@ -16,7 +16,9 @@
 LOCAL_CFLAGS += \
 	-DFST_DL \
 
-LOCAL_CPPFLAGS +=  -std=c++11
+LOCAL_CLANG := true
+
+LOCAL_CPPFLAGS += -std=c++11
 
 LOCAL_SHARED_LIBRARIES := \
 
@@ -24,4 +26,6 @@
 
 LOCAL_MODULE := libfst
 
+include external/libcxx/libcxx.mk
+
 include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/tools/thirdparty/OpenFst/fst/lib/const-fst.h b/tools/thirdparty/OpenFst/fst/lib/const-fst.h
index ebeeb34..01196c9 100644
--- a/tools/thirdparty/OpenFst/fst/lib/const-fst.h
+++ b/tools/thirdparty/OpenFst/fst/lib/const-fst.h
@@ -211,9 +211,11 @@
     strm.write("", 1);
   strm.write(reinterpret_cast<char *>(arcs_), narcs_ * sizeof(A));
   strm.flush();
-  if (!strm)
+  if (!strm) {
     LOG(ERROR) << "ConstFst::Write: Write failed: " << opts.source;
-  return strm;
+    return false;
+  }
+  return true;
 }
 
 // Simple concrete immutable FST.  This class attaches interface to
diff --git a/tools/thirdparty/OpenFst/fst/lib/encode.h b/tools/thirdparty/OpenFst/fst/lib/encode.h
index b577d4a..e21ff20 100644
--- a/tools/thirdparty/OpenFst/fst/lib/encode.h
+++ b/tools/thirdparty/OpenFst/fst/lib/encode.h
@@ -137,9 +137,11 @@
       tuple->weight.Write(strm);
     }
     strm.flush();
-    if (!strm)
+    if (!strm) {
       LOG(ERROR) << "EncodeTable::Write: write failed: " << source;
-    return strm;
+      return false;
+    }
+    return true;
   }
 
   bool Read(istream &strm, const string &source) {
@@ -166,9 +168,11 @@
       encode_tuples_.push_back(tuple);
       encode_hash_[encode_tuples_.back()] = encode_tuples_.size();
     }
-    if (!strm)
+    if (!strm) {
       LOG(ERROR) << "EncodeTable::Read: read failed: " << source;
-    return strm;
+      return false;
+    }
+    return true;
   }
 
   uint32 flags() const { return flags_; }
diff --git a/tools/thirdparty/OpenFst/fst/lib/fst-decl.h b/tools/thirdparty/OpenFst/fst/lib/fst-decl.h
index a5cdc75..0a18b38 100644
--- a/tools/thirdparty/OpenFst/fst/lib/fst-decl.h
+++ b/tools/thirdparty/OpenFst/fst/lib/fst-decl.h
@@ -27,8 +27,8 @@
 class LogWeight;
 class TropicalWeight;
 
-class LogArc;
-class StdArc;
+struct LogArc;
+struct StdArc;
 
 template <class A> class ConstFst;
 template <class A> class ExpandedFst;
diff --git a/tools/thirdparty/OpenFst/fst/lib/fst.cpp b/tools/thirdparty/OpenFst/fst/lib/fst.cpp
index 3b8c9ef..6ec0884 100644
--- a/tools/thirdparty/OpenFst/fst/lib/fst.cpp
+++ b/tools/thirdparty/OpenFst/fst/lib/fst.cpp
@@ -65,9 +65,11 @@
   ReadType(strm, &start_);
   ReadType(strm, &numstates_);
   ReadType(strm, &numarcs_);
-  if (!strm)
+  if (!strm) {
     LOG(ERROR) << "FstHeader::Read: read failed: " << source;
-  return strm;
+    return false;
+  }
+  return true;
 }
 
 // Write Fst magic number and Fst header.
@@ -81,9 +83,11 @@
   WriteType(strm, start_);
   WriteType(strm, numstates_);
   WriteType(strm, numarcs_);
-  if (!strm)
+  if (!strm) {
     LOG(ERROR) << "FstHeader::Write: write failed: " << source;
-  return strm;
+    return false;
+  }
+  return true;
 }
 
 }
diff --git a/tools/thirdparty/OpenFst/fst/lib/symbol-table.cpp b/tools/thirdparty/OpenFst/fst/lib/symbol-table.cpp
index d4715da..a27d3cf 100644
--- a/tools/thirdparty/OpenFst/fst/lib/symbol-table.cpp
+++ b/tools/thirdparty/OpenFst/fst/lib/symbol-table.cpp
@@ -138,9 +138,11 @@
     WriteType(strm, it->second);
   }
   strm.flush();
-  if (!strm)
+  if (!strm) {
     LOG(ERROR) << "SymbolTable::Write: write failed";
-  return strm;
+    return false;
+  }
+  return true;
 }
 
 bool SymbolTableImpl::WriteText(ostream &strm) const {
@@ -150,9 +152,11 @@
     strm.write(line, strlen(line));
   }
   strm.flush();
-  if (!strm)
+  if (!strm) {
     LOG(ERROR) << "SymbolTable::WriteText: write failed";
-  return strm;
+    return false;
+  }
+  return true;
 }
 
 }  // namespace fst
diff --git a/tools/thirdparty/OpenFst/fst/lib/vector-fst.h b/tools/thirdparty/OpenFst/fst/lib/vector-fst.h
index fde934a..b5603d6 100644
--- a/tools/thirdparty/OpenFst/fst/lib/vector-fst.h
+++ b/tools/thirdparty/OpenFst/fst/lib/vector-fst.h
@@ -440,9 +440,11 @@
     }
   }
   strm.flush();
-  if (!strm)
+  if (!strm) {
     LOG(ERROR) << "VectorFst::Write: write failed: " << opts.source;
-  return strm;
+    return false;
+  }
+  return true;
 }
 
 // Simple concrete, mutable FST. Supports additional operations: