Changed backtrace conditionals to use a feature switch 83/27183/3
authorDavid Steele <david.steele@partner.samsung.com>
Fri, 5 Sep 2014 18:20:56 +0000 (19:20 +0100)
committerAdeel Kazmi <adeel.kazmi@samsung.com>
Tue, 9 Sep 2014 14:26:38 +0000 (07:26 -0700)
[Problem] backtrace(), backtrace_symbols() and demangle are gcc specific features which aren't
present on other platforms.
[Cause]   Works for base linux
[Solution] Ensure that the feature is wrapped with a Dali feature flag in configure. It is
enabled by default (logging the backtrace on exception), but can be disabled at configuration
time by using
 ./configure --disable-backtrace

Change-Id: Ia8032b057489a563d1ba5339ed2cab7687906c1b
Signed-off-by: David Steele <david.steele@partner.samsung.com>
build/tizen/configure.ac
dali/public-api/common/dali-common.cpp

index f61fcd0..67d743a 100644 (file)
@@ -48,6 +48,12 @@ AC_ARG_ENABLE([emscripten],
               [enable_emscripten=$enableval],
               [enable_emscripten=no])
 
+AC_ARG_ENABLE([backtrace],
+              [AC_HELP_STRING([--enable-backtrace],
+                              [Backtrace for exceptions])],
+              [enable_backtrace=$enableval],
+              [enable_backtrace=yes])
+
 AC_ARG_ENABLE([dynamics],
               [AC_HELP_STRING([--enable-dynamics],
                               [Builds with dynamics support])],
@@ -55,7 +61,7 @@ AC_ARG_ENABLE([dynamics],
               [dynamics_support=no])
 
 if test "x$enable_debug" = "xyes"; then
-  DALI_CFLAGS="$DALI_CFLAGS -DDEBUG_ENABLED -DDEBUG_BACKTRACE"
+  DALI_CFLAGS="$DALI_CFLAGS -DDEBUG_ENABLED"
 fi
 
 if test "x$enable_debug" = "xno" -a "x$enable_exportall" = "xno"; then
@@ -64,12 +70,19 @@ fi
 
 if test "x$enable_emscripten" = "xyes"; then
   DALI_CFLAGS="$DALI_CFLAGS -DEMSCRIPTEN -std=c++11"
+  # Automatically turn off backtrace support
+  enable_backtrace="no"
 fi
 
 if test "x$dynamics_support" = "xyes"; then
   DALI_CFLAGS="$DALI_CFLAGS -DDYNAMICS_SUPPORT"
 fi
 
+# Must come after Emscripten feature test
+if test "x$enable_backtrace" = "xyes"; then
+  DALI_CFLAGS="$DALI_CFLAGS -DBACKTRACE_ENABLED"
+fi
+
 AM_CONDITIONAL([DYNAMICS_SUPPORT], [test x$dynamics_support = xyes])
 
 AC_ARG_ENABLE([performance-monitor],
@@ -123,4 +136,5 @@ Configuration
   Data Dir (Read/Write):            $dataReadWriteDir
   Data Dir (Read Only):             $dataReadOnlyDir
   Emscripten:                       $enable_emscripten
+  Backtrace:                        $enable_backtrace
 "
index 90c8e61..9f458b7 100644 (file)
@@ -42,7 +42,7 @@ const size_t C_SYMBOL_LENGTH = 4096;
 namespace Dali
 {
 
-#ifndef EMSCRIPTEN
+#if defined(BACKTRACE_ENABLED)
 
 std::string Demangle(const char* symbol)
 {
@@ -94,10 +94,6 @@ std::string Demangle(const char* symbol)
   return result;
 }
 
-#endif // EMSCRIPTEN
-
-#ifndef EMSCRIPTEN
-
 DALI_EXPORT_API DaliException::DaliException(const char *location, const char* condition)
 : mLocation(location), mCondition(condition)
 {
@@ -121,7 +117,9 @@ DALI_EXPORT_API DaliException::DaliException(const char *location, const char* c
   free(symbols);
 }
 
-#else
+
+#else // BACKTRACE_ENABLED
+
 
 DALI_EXPORT_API DaliException::DaliException(const char *location, const char* condition)
 : mLocation(location), mCondition(condition)
@@ -129,7 +127,9 @@ DALI_EXPORT_API DaliException::DaliException(const char *location, const char* c
   printf("Exception: \n%s\n thrown at %s\nSee dlog for backtrace\n", mCondition.c_str(), mLocation.c_str());
 }
 
-#endif // EMSCRIPTEN
+
+#endif // BACKTRACE_ENABLED
+
 
 DALI_EXPORT_API void DaliAssertMessage(const char* condition, const char* file, int line)
 {