
Hello Folks, Android NDK contains several "platforms", depending on which release one desires to be compatible with. Boost test compiles fine with android-8 and newer, but the older versions have incomplete definition of sigaltstack (they define the structure, but not the function), causing compilation error in boost/test/detail/impl/execution_monitor.ipp. I have fixed it locally by adjusting the condition for defining BOOST_TEST_USE_ALT_STACK, but I am not sure which level of fix would be best suited for integrating in boost. I see 3 options: 1. Leaving it as is and simply saying android is only supported from API level 8 (that's 2.2; we are still compiling for 2.1 (which has no changes in native since 2.0)) 2. Simply disabling BOOST_TEST_USE_ALT_STACK in Android; it's not necessary after all. 3. Being really precise and reading the API version, but that requires including extra header. It would be nice, but I am not sure what is the correct place to include it. Here is a simple patch that just disables sigaltstack for Android: --- a/boost/test/impl/execution_monitor.ipp +++ b/boost/test/impl/execution_monitor.ipp @@ -173,7 +173,7 @@ namespace { void _set_se_translator( void* ) {} } # endif # endif -# if !defined(__CYGWIN__) && !defined(__QNXNTO__) +# if !defined(__CYGWIN__) && !defined(__QNXNTO__) && !defined(__ANDROID__) # define BOOST_TEST_USE_ALT_STACK # endif And here is a more complex patch that on android (the __ANDROID__ macro is predefined by the compiler in Android NDK) reads the api-level and uses it to decide: --- a/boost/test/impl/execution_monitor.ipp +++ b/boost/test/impl/execution_monitor.ipp @@ -173,7 +173,11 @@ namespace { void _set_se_translator( void* ) {} } # endif # endif -# if !defined(__CYGWIN__) && !defined(__QNXNTO__) +# if defined(__ANDROID__) +# include <android/api-level.h> +# endif + +# if !defined(__CYGWIN__) && !defined(__QNXNTO__) && (!defined(__ANDROID__) || __ANDROID_API__ >= 8) # define BOOST_TEST_USE_ALT_STACK # endif -- Jan 'Bulb' Hudec <bulb@ucw.cz>