Fixes the configuration check in port.h.
Fixes a bug introduced in 12280 that incorrectly used xor for multiple
values.
Tested it manually by verifying it would fail for 2, 3, or 4 of them
defined.
Change-Id: I90c2662f4744aceaf0119dbbe072beced3f67c9a
diff --git a/include/ceres/internal/port.h b/include/ceres/internal/port.h
index b567fd5..e4acf35 100644
--- a/include/ceres/internal/port.h
+++ b/include/ceres/internal/port.h
@@ -36,8 +36,24 @@
#include <cstddef>
#include "ceres/internal/config.h"
-#if !(defined(CERES_USE_OPENMP) ^ defined(CERES_USE_TBB) ^ defined(CERES_USE_CXX11_THREADS) ^ defined(CERES_NO_THREADS))
-#error CERES_USE_OPENMP, CERES_USE_TBB, CERES_USE_CXX11_THREADS, and CERES_NO_THREADS are mutually exclusive, but multiple are defined.
+#if defined(CERES_USE_OPENMP)
+# if defined(CERES_USE_TBB) || defined(CERES_USE_CXX11_THREADS) || defined(CERES_NO_THREADS)
+# error CERES_USE_OPENMP is mutually exclusive to CERES_USE_TBB, CERES_USE_CXX11_THREADS, and CERES_NO_THREADS
+# endif
+#elif defined(CERES_USE_TBB)
+# if defined(CERES_USE_OPENMP) || defined(CERES_USE_CXX11_THREADS) || defined(CERES_NO_THREADS)
+# error CERES_USE_TBB is mutually exclusive to CERES_USE_OPENMP, CERES_USE_CXX11_THREADS and CERES_NO_THREADS
+# endif
+#elif defined(CERES_USE_CXX11_THREADS)
+# if defined(CERES_USE_OPENMP) || defined(CERES_USE_TBB) || defined(CERES_NO_THREADS)
+# error CERES_USE_CXX11_THREADS is mutually exclusive to CERES_USE_OPENMP, CERES_USE_CXX11_THREADS and CERES_NO_THREADS
+# endif
+#elif defined(CERES_NO_THREADS)
+# if defined(CERES_USE_OPENMP) || defined(CERES_USE_TBB) || defined(CERES_USE_CXX11_THREADS)
+# error CERES_NO_THREADS is mutually exclusive to CERES_USE_OPENMP, CERES_USE_TBB and CERES_USE_CXX11_THREADS
+# endif
+#else
+# error One of CERES_USE_OPENMP, CERES_USE_TBB,CERES_USE_CXX11_THREADS or CERES_NO_THREADS must be defined.
#endif
#if defined(CERES_TR1_MEMORY_HEADER)