orocos_toolchain, support for Xenomai 3

Huy Cong Vu <[email protected]> Fri, 27 Feb 2015 15:24:19 +0100 (CET)
Newsgroups gmane.science.robotics.orocos.devel
Message-ID <[email protected]>

Hello everyone, 

I recently made a Xenomai 3 support patch for orocos toolchain, fuerte branch, that I attach in this message. For now it is compilable against xenomai-3 next branch (need a small patch for Xenomai 3 too, that I also attach in here). However, I dont know which test to run to know if the new toolchain still working properly, and my patch is mainly for Xenomai support, so the flags that I inserted in may corrupt build for other sys & arch. If someone have time to take a look at my patch and do some necessary modifications it will be very helpful for me. I run my 1st test with 1 of my .launch file using deployer-xenomai, and it can't read the args (which indicate some .ops file to run). So there definetely a problem somewhere. 

Some infos about my platform: ROS desktop-full fuerte orocos fuerte, patch with rtt-xenomai-3.patch & ocl-xenomai-3.patch following xenomai-3-next most recent commit, patch with xenomai-3-extras.patch 

Thanks for spend your time to read this :) 

-- 

Huy Cong 
Wandercraft SAS

-- 
Orocos-Dev mailing list
[email protected]
http://lists.mech.kuleuven.be/mailman/listinfo/orocos-dev
ocl-xenomai-3.patch (text/x-patch, 6.8 KB)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b2bb250..b7c670b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -107,11 +107,16 @@ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/config")
 # This is the first in the include path.
 INCLUDE_DIRECTORIES( ${PROJ_SOURCE_DIR} ${PROJ_BINARY_DIR}/ocl )
 
+# Xeno-config
+
+execute_process(COMMAND xeno-config --skin=native --ldflags OUTPUT_VARIABLE XENOMAI_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
+execute_process(COMMAND xeno-config --skin=native --cflags OUTPUT_VARIABLE XENOMAI_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
+
 # Put your 'flags' inhere if you want them to apear in the
 # orocos-components.pc file. Various .cmake scripts below do
 # this.
-SET( ENV{OROCOS_COMPONENTS_CFLAGS} "")
-SET( ENV{OROCOS_COMPONENTS_LINKFLAGS} "")
+SET( ENV{OROCOS_COMPONENTS_CFLAGS} "${XENOMAI_CFLAGS}")
+SET( ENV{OROCOS_COMPONENTS_LINKFLAGS} "${XENOMAI_LDFLAGS}")
 SET( ENV{OROCOS_COMPONENTS_REQUIRES} "")
 
 INCLUDE(${PROJ_SOURCE_DIR}/config/component_rules.cmake)
diff --git a/helloworld/CMakeLists.txt b/helloworld/CMakeLists.txt
index 6f33e4e..ddf474c 100644
--- a/helloworld/CMakeLists.txt
+++ b/helloworld/CMakeLists.txt
@@ -6,10 +6,10 @@ IF ( BUILD_HELLOWORLD )
     FILE( GLOB SRCS [^.]*.cpp )
     FILE( GLOB HPPS [^.]*.hpp )
 
-    ADD_EXECUTABLE( helloworld ${SRCS} )
+    orocos_executable( helloworld ${SRCS} )
     orocos_component( orocos-ocl-helloworld ${SRCS} )
     SET_TARGET_PROPERTIES( orocos-ocl-helloworld
-      PROPERTIES COMPILE_FLAGS "-DOCL_COMPONENT_ONLY" )
+       PROPERTIES DEFINE_SYMBOL OCL_COMPONENT_ONLY )
 
     TARGET_LINK_LIBRARIES( helloworld ${OROCOS-RTT_LIBRARIES} orocos-ocl-taskbrowser)
     SET_TARGET_PROPERTIES( helloworld PROPERTIES
diff --git a/lua/CMakeLists.txt b/lua/CMakeLists.txt
index 238cf2c..e43def5 100644
--- a/lua/CMakeLists.txt
+++ b/lua/CMakeLists.txt
@@ -47,7 +47,7 @@ if(BUILD_LUA_RTT)
     orocos_executable(rttlua rtt.cpp LuaComponent.cpp)
     program_add_deps(rttlua lua-repl orocos-ocl-deployment ${LUA_LIBRARIES} ${OROCOS-RTT_LIBRARIES} ${EXTRA_DEPS} ${EXTRA_LIBRARIES} )
     target_link_libraries(orocos-ocl-lua ${LUA_LIBRARIES} ${OROCOS-RTT_LIBRARIES} )
-    set_target_properties(orocos-ocl-lua PROPERTIES COMPILE_FLAGS "-DOCL_COMPONENT_ONLY")
+    set_target_properties(orocos-ocl-lua PROPERTIES DEFINE_SYMBOL OCL_COMPONENT_ONLY)
     install(TARGETS rttlua RUNTIME DESTINATION bin)
     install(PROGRAMS ../bin/rttlua DESTINATION bin) # The shell script
 
@@ -56,20 +56,20 @@ if(BUILD_LUA_RTT)
     # Handle curses/readline
     if(NOT CURSES AND NOT READLINE)
       message(STATUS "Building without readline/curses support. If you want support for this try someting like 'sudo aptitude install libncurses5-dev libreadline5-dev'")
-      set(LUA_REPL_FLAGS "-DLUA_ANSI")
+      set(LUA_REPL_DEFINES LUA_ANSI)
     else(NOT CURSES AND NOT READLINE)
-      set(LUA_REPL_FLAGS "-DLUA_USE_LINUX")
+      set(LUA_REPL_DEFINES LUA_USE_LINUX)
       target_link_libraries(lua-repl "readline" ${CURSES_IMPL} "dl" "history" )
     endif(NOT CURSES AND NOT READLINE)
 
-    set_target_properties(lua-repl PROPERTIES COMPILE_FLAGS "${LUA_REPL_FLAGS}")
+    set_target_properties(lua-repl PROPERTIES DEFINE_SYMBOL "${LUA_REPL_DEFINES}")
 
     # CORBA version
     if(BUILD_LUA_RTT_CORBA AND OROCOS-RTT_CORBA_FOUND)
 
       orocos_executable(rttlua-corba rtt.cpp LuaComponent.cpp)
       program_add_deps(rttlua-corba lua-repl orocos-ocl-deployment ${LUA_LIBRARIES} ${OROCOS-RTT_CORBA_LIBRARIES} orocos-ocl-deployment-corba ${EXTRA_DEPS} ${EXTRA_LIBRARIES} )
-      set_target_properties(rttlua-corba PROPERTIES COMPILE_FLAGS "-DLUA_RTT_CORBA")
+      set_target_properties(rttlua-corba PROPERTIES DEFINE_SYMBOL LUA_RTT_CORBA)
       install(TARGETS rttlua-corba RUNTIME DESTINATION bin)
       install(PROGRAMS ../bin/rttlua DESTINATION bin RENAME rttlua-corba) # The shell script
 
@@ -82,13 +82,14 @@ if(BUILD_LUA_RTT)
       orocos_executable(rttlua-tlsf rtt.cpp LuaComponent.cpp)
       add_library(lua-repl-tlsf STATIC lua-repl.c)
       target_link_libraries(lua-repl-tlsf "readline" ${CURSES_IMPL} "dl" "history" ${LUA_LIBRARIES})
-      set_target_properties(lua-repl-tlsf PROPERTIES COMPILE_FLAGS "-DOROCOS_TARGET=${OROCOS_TARGET} -DLUA_RTT_TLSF ${LUA_REPL_FLAGS}")
+      set_target_properties(lua-repl-tlsf PROPERTIES DEFINE_SYMBOL "OROCOS_TARGET=${OROCOS_TARGET};LUA_RTT_TLSF;${LUA_REPL_DEFINES}")
 
       add_library(tlsf_rtt STATIC tlsf.c tlsf_rtt.c)
       set_target_properties(tlsf_rtt PROPERTIES COMPILE_FLAGS "-DTLSF_STATISTIC -DCHECK_DOUBLE_FREE -fPIC -Wextra -Wall -Werror")
 
-      set_target_properties(orocos-ocl-lua-tlsf PROPERTIES COMPILE_FLAGS "-DOCL_COMPONENT_ONLY -DLUA_RTT_TLSF")
-      set_target_properties(rttlua-tlsf PROPERTIES COMPILE_FLAGS "-DLUA_RTT_TLSF")
+      set_target_properties(orocos-ocl-lua-tlsf PROPERTIES DEFINE_SYMBOL "OCL_COMPONENT_ONLY;LUA_RTT_TLSF")
+
+      set_target_properties(rttlua-tlsf PROPERTIES DEFINE_SYMBOL LUA_RTT_TLSF)
 
       program_add_deps(rttlua-tlsf tlsf_rtt lua-repl-tlsf orocos-ocl-deployment ${LUA_LIBRARIES} ${OROCOS-RTT_LIBRARIES} ${EXTRA_DEPS} ${EXTRA_LIBRARIES} )
       target_link_libraries(orocos-ocl-lua-tlsf tlsf_rtt ${LUA_LIBRARIES} ${OROCOS-RTT_LIBRARIES})
diff --git a/lua/plugins/CMakeLists.txt b/lua/plugins/CMakeLists.txt
index ca02efe..90ea287 100644
--- a/lua/plugins/CMakeLists.txt
+++ b/lua/plugins/CMakeLists.txt
@@ -7,5 +7,5 @@ target_link_libraries(rttlua-plugin ${LUA_LIBRARIES})
 if(BUILD_LUA_RTT_TLSF)
   orocos_plugin( rttlua-tlsf-plugin lua_plugin.cpp ../rtt.cpp)
   target_link_libraries(rttlua-tlsf-plugin tlsf_rtt ${LUA_LIBRARIES})
-  set_target_properties(rttlua-tlsf-plugin PROPERTIES COMPILE_FLAGS "-DLUA_RTT_TLSF")
+  set_target_properties(rttlua-tlsf-plugin PROPERTIES DEFINE_SYMBOL LUA_RTT_TLSF)
 endif(BUILD_LUA_RTT_TLSF)
diff --git a/taskbrowser/TaskBrowser.cpp b/taskbrowser/TaskBrowser.cpp
index 49beca8..7e74447 100644
--- a/taskbrowser/TaskBrowser.cpp
+++ b/taskbrowser/TaskBrowser.cpp
@@ -113,9 +113,10 @@
 #endif
 
 // we need to declare it since Xenomai does not declare it in any header
+// xeno_sigwinch_handler is deprecated in Xenomai 3
 #if defined(USE_SIGNALS) && defined(OROCOS_TARGET_XENOMAI) && CONFIG_XENO_VERSION_MAJOR == 2 && CONFIG_XENO_VERSION_MINOR >= 5
 extern "C"
-int xeno_sigwinch_handler(int sig, siginfo_t *si, void *ctxt);
+int cobalt_sigshadow_handler(int sig, siginfo_t *si, void *ctxt);
 #endif
 namespace OCL
 {
@@ -166,8 +167,9 @@ namespace OCL
 #if defined(USE_SIGNALS)
 
     void TaskBrowser::rl_sigwinch_handler(int sig, siginfo_t *si, void *ctxt) {
+// xeno_sigwinch_handler is deprecated in Xenomai 3
 #if defined(OROCOS_TARGET_XENOMAI) && CONFIG_XENO_VERSION_MAJOR == 2 && CONFIG_XENO_VERSION_MINOR >= 5
-        if (xeno_sigwinch_handler(sig, si, ctxt) == 0)
+        if (cobalt_sigshadow_handler(sig, si, ctxt) == 0)
 #endif
             rl_resize_terminal();
     }
rtt-xenomai-3.patch (text/x-patch, 11.9 KB)
diff --git a/UseOROCOS-RTT.cmake b/UseOROCOS-RTT.cmake
index 6c6e718..dba774f 100644
--- a/UseOROCOS-RTT.cmake
+++ b/UseOROCOS-RTT.cmake
@@ -61,6 +61,14 @@ if(OROCOS-RTT_FOUND)
     set(USE_OROCOS_COMPILE_FLAGS " " )
   endif (MSVC)
 
+  # Xeno-config
+  execute_process(COMMAND xeno-config --skin=native --ldflags OUTPUT_VARIABLE XENOMAI_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
+  execute_process(COMMAND xeno-config --skin=native --cflags OUTPUT_VARIABLE XENOMAI_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+  # set Xenomai flags to use_orocos_compile_flags
+  SET( USE_OROCOS_COMPILE_FLAGS "${USE_OROCOS_COMPILE_FLAGS} ${XENOMAI_CFLAGS}")
+  SET( USE_OROCOS_LINK_FLAGS "${USE_OROCOS_LINK_FLAGS} ${XENOMAI_LDFLAGS}")
+
   # On windows, the CMAKE_INSTALL_PREFIX is forced to the Orocos-RTT path.
   # There's two alternatives to disable this behavior:
   #
@@ -461,6 +469,10 @@ macro( orocos_typekit LIB_TARGET_NAME )
     INSTALL_RPATH_USE_LINK_PATH 1
     INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${CMAKE_INSTALL_PREFIX}/lib/orocos${OROCOS_SUFFIX}/types;${CMAKE_INSTALL_PREFIX}/${AC_INSTALL_DIR}"
     )
+
+  orocos_add_compile_flags(${LIB_TARGET_NAME} ${USE_OROCOS_COMPILE_FLAGS})
+  orocos_add_link_flags(${LIB_TARGET_NAME} ${USE_OROCOS_LINK_FLAGS})
+
   TARGET_LINK_LIBRARIES( ${LIB_TARGET_NAME} ${OROCOS-RTT_LIBRARIES} )
 
   # On win32, typekit runtime (.dll) should go in orocos/types folder
diff --git a/config/FindXenomai.cmake b/config/FindXenomai.cmake
index 8ea44c9..ff864cb 100644
--- a/config/FindXenomai.cmake
+++ b/config/FindXenomai.cmake
@@ -30,24 +30,25 @@ if ( Xenomai_FIND_REQUIRED )
 endif()
 
 # Header files to find
-set(header_NAME    native/task.h)
+set(header_NAME    alchemy/task.h)
 
 # Libraries to find
-set(XENOMAI_NAME   xenomai)
-set(XENOMAI_NATIVE_NAME   native)
+set(XENOMAI_NATIVE_NAME   alchemy)
+set(XENOMAI_COPPERPLATE_NAME   copperplate) # middleware between skin & core posix Xenomai 3
+set(XENOMAI_TRANK_NAME   trank) # for compatibility with Xenomai 2
 
 # Find headers and libraries
 if(XENOMAI_ROOT_DIR)
   # Use location specified by environment variable
   find_program(XENOMAI_XENO_CONFIG NAMES xeno-config  PATHS ${XENOMAI_ROOT_DIR}/bin NO_DEFAULT_PATH)
   find_path(XENOMAI_INCLUDE_DIR        NAMES ${header_NAME}        PATHS ${XENOMAI_ROOT_DIR}/include PATH_SUFFIXES xenomai NO_DEFAULT_PATH)
-  find_library(XENOMAI_LIBRARY         NAMES ${XENOMAI_NAME}       PATHS ${XENOMAI_ROOT_DIR}/lib     NO_DEFAULT_PATH)
   find_library(XENOMAI_NATIVE_LIBRARY         NAMES ${XENOMAI_NATIVE_NAME}       PATHS ${XENOMAI_ROOT_DIR}/lib     NO_DEFAULT_PATH)
+  find_library(XENOMAI_COPPERPLATE_LIBRARY         NAMES ${XENOMAI_COPPERPLATE_NAME}       PATHS ${XENOMAI_ROOT_DIR}/lib     NO_DEFAULT_PATH)
+  find_library(XENOMAI_TRANK_LIBRARY         NAMES ${XENOMAI_TRANK_NAME}       PATHS ${XENOMAI_ROOT_DIR}/lib     NO_DEFAULT_PATH)
 else()
   # Use default CMake search process
   find_program(XENOMAI_XENO_CONFIG NAMES xeno-config )
   find_path(XENOMAI_INCLUDE_DIR       NAMES ${header_NAME} PATH_SUFFIXES xenomai )
-  find_library(XENOMAI_LIBRARY        NAMES ${XENOMAI_NAME})
   find_library(XENOMAI_NATIVE_LIBRARY        NAMES ${XENOMAI_NATIVE_NAME})
 endif()
 
@@ -62,11 +63,11 @@ endif()
 # Set the include dir variables and the libraries and let libfind_process do the rest.
 # NOTE: Singular variables for this library, plural for libraries this this lib depends on.
 set(XENOMAI_PROCESS_INCLUDES XENOMAI_INCLUDE_DIR)
-if ( XENOMAI_LIBRARY )
-  set(XENOMAI_PROCESS_LIBS XENOMAI_NATIVE_LIBRARY XENOMAI_LIBRARY )
-else( XENOMAI_LIBRARY )
+if ( XENOMAI_NATIVE_LIBRARY )
+  set(XENOMAI_PROCESS_LIBS XENOMAI_COPPERPLATE_LIBRARY XENOMAI_NATIVE_LIBRARY XENOMAI_TRANK_LIBRARY)
+else( XENOMAI_NATIVE_LIBRARY )
   set(XENOMAI_PROCESS_LIBS XENOMAI_NATIVE_LIBRARY)
-endif( XENOMAI_LIBRARY )
+endif( XENOMAI_NATIVE_LIBRARY )
 
 
 libfind_process(XENOMAI)
diff --git a/config/FindXenomaiPosix.cmake b/config/FindXenomaiPosix.cmake
index 9422085..80cfe6d 100644
--- a/config/FindXenomaiPosix.cmake
+++ b/config/FindXenomaiPosix.cmake
@@ -30,10 +30,10 @@ if ( XenomaiPosix_FIND_REQUIRED )
 endif()
 
 # Header files to find
-set(header_NAME    pthread.h)
+set(header_NAME    cobalt/pthread.h)
 
 # Libraries to find
-set(XENOMAI_POSIX_NAME   pthread_rt)
+set(XENOMAI_POSIX_NAME   cobalt)
 
 # Find headers and libraries
 if(XENOMAI_ROOT_DIR)
@@ -51,8 +51,8 @@ endif()
 if( XENOMAI_POSIX_LIBRARY AND XENOMAI_POSIX_INCLUDE_DIR AND NOT XENOMAI_XENO_CONFIG )
   message(SEND_ERROR "Your Xenomai installation is broken: I can not determine Xenomai POSIX cflags/ldflags without xeno-config.")
 else()
-  execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --skin=posix --ldflags OUTPUT_VARIABLE XENOMAI_POSIX_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
-  execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --skin=posix --cflags OUTPUT_VARIABLE XENOMAI_POSIX_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
+  execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --compat --skin=cobalt --ldflags OUTPUT_VARIABLE XENOMAI_POSIX_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
+  execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --compat --skin=cobalt --cflags OUTPUT_VARIABLE XENOMAI_POSIX_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
 endif()
 
 # Set the include dir variables and the libraries and let libfind_process do the rest.
diff --git a/rtt/CMakeLists.txt b/rtt/CMakeLists.txt
index 0062859..7e2888e 100644
--- a/rtt/CMakeLists.txt
+++ b/rtt/CMakeLists.txt
@@ -49,8 +49,12 @@ IF ( OS_NOEXCEPTIONS )
   SET( CMAKE_CXX_FLAGS_ADD "${CMAKE_CXX_FLAGS_ADD} -fno-exceptions")
 ENDIF ( OS_NOEXCEPTIONS )
 
+# Xenomai flags set
+SET( CMAKE_CXX_FLAGS_ADD "${CMAKE_CXX_FLAGS_ADD} ${XENOMAI_CFLAGS}")
+SET( CMAKE_LD_FLAGS_ADD "${CMAKE_LD_FLAGS_ADD} ${XENOMAI_LDFLAGS}")
+
 IF ( OS_EMBEDDED )
-  SET( CMAKE_CXX_FLAGS_ADD "${CMAKE_CXX_FLAGS_ADD} -ffunction-sections -fdata-sections")
+  SET( CMAKE_CXX_FLAGS_ADD "${CMAKE_CXX_FLAGS_ADD} ${XENOMAI_CFLAGS} -ffunction-sections -fdata-sections")
 ENDIF ( OS_EMBEDDED )
 
 ### Logger
diff --git a/rtt/extras/IRQActivity.cpp b/rtt/extras/IRQActivity.cpp
index 1a9500c..fdfbfb0 100644
--- a/rtt/extras/IRQActivity.cpp
+++ b/rtt/extras/IRQActivity.cpp
@@ -35,6 +35,7 @@
  *                                                                         *
  ***************************************************************************/
 
+#ifdef ORO_RTT_USE_DEPRECATED
 
 #include "IRQActivity.hpp"
 #include "../ExecutionEngine.hpp"
@@ -156,3 +157,4 @@ void IRQActivity::step()
 
 #endif // OS is xenomai
 
+#endif // Use of deprecated interrupt management of Xenomai 2
diff --git a/rtt/extras/IRQActivity.hpp b/rtt/extras/IRQActivity.hpp
index 1ef15f6..4231e2d 100644
--- a/rtt/extras/IRQActivity.hpp
+++ b/rtt/extras/IRQActivity.hpp
@@ -35,6 +35,7 @@
  *                                                                         *
  ***************************************************************************/
 
+#ifdef ORO_RTT_USE_DEPRECATED
 
 #ifndef IRQ_ACTIVITY_HPP
 #define IRQ_ACTIVITY_HPP
@@ -123,3 +124,5 @@ namespace RTT { namespace extras {
 }}
 
 #endif
+
+#endif //Use of deprecated interrupt management of Xenomai 2
diff --git a/rtt/extras/rtt-extras-fwd.hpp b/rtt/extras/rtt-extras-fwd.hpp
index 6aaed7c..99ca33d 100644
--- a/rtt/extras/rtt-extras-fwd.hpp
+++ b/rtt/extras/rtt-extras-fwd.hpp
@@ -4,7 +4,9 @@
 namespace RTT {
     namespace extras {
         class FileDescriptorActivity;
+#ifdef ORO_RTT_USE_DEPRECATED
         class IRQActivity;
+#endif
         class PeriodicActivity;
         class SequentialActivity;
         class SimulationActivity;
diff --git a/rtt/os/TimeService.cpp b/rtt/os/TimeService.cpp
index 64b6b37..bfebb42 100644
--- a/rtt/os/TimeService.cpp
+++ b/rtt/os/TimeService.cpp
@@ -83,12 +83,12 @@ namespace RTT {
         if ( use_clock == true )
             {
                 // if offset is X, then start counting from X.
-                offset = offset - rtos_get_time_ticks();
+                offset = offset - rt_timer_read();
             }
         else
             {
                 // start counting from _now_ + old offset
-                offset = offset + rtos_get_time_ticks();
+                offset = offset + rt_timer_read();
             }
     }
 
@@ -96,7 +96,7 @@ namespace RTT {
     TimeService::ticks
     TimeService::getTicks() const
     {
-        return use_clock ? rtos_get_time_ticks() + offset : 0 + offset;
+        return use_clock ? rt_timer_read() + offset : 0 + offset;
     }
 
     TimeService::ticks
diff --git a/rtt/os/xenomai/fosi.h b/rtt/os/xenomai/fosi.h
index 61fd919..2614bcb 100644
--- a/rtt/os/xenomai/fosi.h
+++ b/rtt/os/xenomai/fosi.h
@@ -119,20 +119,8 @@ extern "C" {
 #define ORO_SCHED_RT    0 /** Hard real-time */
 #define ORO_SCHED_OTHER 1 /** Soft real-time */
 
-	// hrt is in ticks
-static inline TIME_SPEC ticks2timespec(TICK_TIME hrt)
-{
-	TIME_SPEC timevl;
-	timevl.tv_sec = rt_timer_tsc2ns(hrt) / 1000000000LL;
-	timevl.tv_nsec = rt_timer_tsc2ns(hrt) % 1000000000LL;
-	return timevl;
-}
 
-	// hrt is in ticks
-static inline TICK_TIME timespec2ticks(const TIME_SPEC* ts)
-{
-	return  rt_timer_ns2tsc(ts->tv_nsec + ts->tv_sec*1000000000LL);
-}
+
 
 // turn this on to have maximum detection of valid system calls.
 #ifdef OROSEM_OS_XENO_CHECK
@@ -153,17 +141,14 @@ static inline TICK_TIME timespec2ticks(const TIME_SPEC* ts)
 
 static inline NANO_TIME rtos_get_time_ns(void) { return rt_timer_ticks2ns(rt_timer_read()); }
 
-static inline TICK_TIME rtos_get_time_ticks(void) { return rt_timer_tsc(); }
-
-static inline TICK_TIME ticksPerSec(void) { return rt_timer_ns2tsc( 1000 * 1000 * 1000 ); }
 
 // WARNING: Orocos 'ticks' are 'Xenomai tsc' and Xenomai `ticks' are not
 // used in the Orocos API. Thus Orocos uses `Xenomai tsc' and `Xenomai ns',
 // yet Xenomai requires `Xenomai ticks' at the interface
 // ==> do not use nano2ticks to convert to `Xenomai ticks' because it
 // converts to `Xenomai tsc'.
-static inline TICK_TIME nano2ticks(NANO_TIME t) { return rt_timer_ns2tsc(t); }
-static inline NANO_TIME ticks2nano(TICK_TIME t) { return rt_timer_tsc2ns(t); }
+static inline TICK_TIME nano2ticks(NANO_TIME t) { return rt_timer_ns2ticks(t); }
+static inline NANO_TIME ticks2nano(TICK_TIME t) { return rt_timer_ticks2ns(t); }
 
 static inline int rtos_nanosleep(const TIME_SPEC *rqtp, TIME_SPEC *rmtp)
 	{
@@ -260,15 +245,10 @@ static inline int rtos_nanosleep(const TIME_SPEC *rqtp, TIME_SPEC *rmtp)
     static inline int rtos_mutex_trylock( rt_mutex_t* m)
     {
         CHK_XENO_CALL();
-        struct rt_mutex_info info;
+        RT_MUTEX_INFO info;
         rt_mutex_inquire(m, &info );
-#if ((CONFIG_XENO_VERSION_MAJOR*1000)+(CONFIG_XENO_VERSION_MINOR*100)+CONFIG_XENO_REVISION_LEVEL) >= 2500
-        if (info.locked)
-            return 0;
-#else
-        if (info.lockcnt)
+	if (&(info.owner)==NULL)
             return 0;
-#endif
         // from here on: we're sure our thread didn't lock it
         // now check if any other thread locked it:
         return rt_mutex_acquire(m, TM_NONBLOCK);
diff --git a/rtt/os/xenomai/fosi_internal.cpp b/rtt/os/xenomai/fosi_internal.cpp
index 9e8ee7a..748cde7 100644
--- a/rtt/os/xenomai/fosi_internal.cpp
+++ b/rtt/os/xenomai/fosi_internal.cpp
@@ -441,7 +441,7 @@ namespace RTT
             RT_TASK* tt = mytask->xenoptr;
             if ( tt )
                 if ( rt_task_inquire ( tt, &info) == 0 )
-                    return info.bprio;
+                    return info.prio;
             return -1;
         }
 
diff --git a/rtt/transports/corba/TaskContextProxy.cpp b/rtt/transports/corba/TaskContextProxy.cpp
index cdedc90..662aa79 100644
--- a/rtt/transports/corba/TaskContextProxy.cpp
+++ b/rtt/transports/corba/TaskContextProxy.cpp
@@ -86,7 +86,7 @@ namespace RTT
             deletePropertyBag( *this->properties() );
         }
         this->attributes()->clear();
-        for (list<PortInterface*>::iterator it = port_proxies.begin(); it != port_proxies.end(); ++it)
+        for (std::list<PortInterface*>::iterator it = port_proxies.begin(); it != port_proxies.end(); ++it)
             delete *it;
         proxies.erase(this);
     }
xenomai-3-extras.patch (text/x-patch, 1 KB)
diff --git a/utils/autotune/autotune.c b/utils/autotune/autotune.c
index 99bbb79..11d1733 100644
--- a/utils/autotune/autotune.c
+++ b/utils/autotune/autotune.c
@@ -294,8 +294,11 @@ int main(int argc, char *const argv[])
 		}
 	}
 
-	if (background)
-		daemon(0, 0);
+	if (background) {
+		ret = daemon(0, 0);
+		if (ret)
+			error(1, errno, "daemon failed");
+	}
 
 	fd = open("/dev/rtdm/autotune", O_RDONLY);
 	if (fd < 0)
diff --git a/include/copperplate/debug.h b/include/copperplate/debug.h
index 027f12c..d2516ff 100644
--- a/include/copperplate/debug.h
+++ b/include/copperplate/debug.h
@@ -25,7 +25,7 @@
 
 struct threadobj;
 
-#define debug(__fmt, __args...)						\
+#define xeno_debug(__fmt, __args...)						\
 	do {								\
 		struct threadobj *__thobj = threadobj_current();	\
 		if (__thobj == NULL ||					\
@@ -35,7 +35,7 @@ struct threadobj;
 
 #else /* !CONFIG_XENO_DEBUG */
 
-#define debug(fmt, args...)  do { } while (0)
+#define xeno_debug(fmt, args...)  do { } while (0)
 
 #endif /* !CONFIG_XENO_DEBUG */