浏览代码

Merge branch '0.2'

Julius Pfrommer 8 年之前
父节点
当前提交
9f2b7ffcc8

+ 10 - 4
.travis.yml

@@ -85,6 +85,7 @@ before_install:
 - export CHECK_INCLUDE_DIRS=$LOCAL_PKG/include/
 - export CHECK_INCLUDE_DIRS=$LOCAL_PKG/include/
 - export CHECK_LIBRARIES=$LOCAL_PKG/lib/
 - export CHECK_LIBRARIES=$LOCAL_PKG/lib/
 
 
+- sh ./tools/travis/travis_notifications.sh
 - if [ ${TRAVIS_OS_NAME} == "linux" ]; then sh ./tools/travis/travis_linux_before_install.sh; fi
 - if [ ${TRAVIS_OS_NAME} == "linux" ]; then sh ./tools/travis/travis_linux_before_install.sh; fi
 - if [ ${TRAVIS_OS_NAME} == "osx" ]; then sh ./tools/travis/travis_osx_before_install.sh; fi
 - if [ ${TRAVIS_OS_NAME} == "osx" ]; then sh ./tools/travis/travis_osx_before_install.sh; fi
 
 
@@ -104,9 +105,9 @@ before_deploy:
 - git clone https://github.com/raspberrypi/tools
 - git clone https://github.com/raspberrypi/tools
 - cd -
 - cd -
 - export PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/
 - export PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/
-- cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-rpi64.cmake -DUA_ENABLE_AMALGAMATION=ON -DUA_BUILD_SELFSIGNED_CERTIFICATE=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLESERVER=ON -DUA_BUILD_EXAMPLECLIENT=ON ..
-- make 
-- tar -pczf open62541-raspberrypi.tar.gz ../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md server_static server client_static client libopen62541.so open62541.h open62541.c
+- cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-rpi64.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLES=ON ..
+- make
+- tar -pczf open62541-raspberrypi.tar.gz ../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md examples/server examples/client libopen62541.a open62541.h open62541.c
 - cp open62541-raspberrypi.tar.gz ..
 - cp open62541-raspberrypi.tar.gz ..
 - cd ..
 - cd ..
 
 
@@ -114,7 +115,7 @@ deploy:
   provider: releases
   provider: releases
   api_key:
   api_key:
     secure: PKCoA7MBRtHloIbNF4Qj5LQyCafjekfVeFXlMBd9KmC0ynNuef+D7nn38f/jo25/b0Ii7r+hgslkQPezbKyEqo2zcCB8Pn8TWau2hbzKM/dUCPoN90HVaQcRjUi8P2Y+QkouwyPWSujBL35/X5QiAntRotCSbZx4fkyiN8cU95o=
     secure: PKCoA7MBRtHloIbNF4Qj5LQyCafjekfVeFXlMBd9KmC0ynNuef+D7nn38f/jo25/b0Ii7r+hgslkQPezbKyEqo2zcCB8Pn8TWau2hbzKM/dUCPoN90HVaQcRjUi8P2Y+QkouwyPWSujBL35/X5QiAntRotCSbZx4fkyiN8cU95o=
-  file: 
+  file:
     - open62541-win32.zip
     - open62541-win32.zip
     - open62541-win64.zip
     - open62541-win64.zip
     - open62541-linux32.tar.gz
     - open62541-linux32.tar.gz
@@ -127,3 +128,8 @@ deploy:
     repo: open62541/open62541
     repo: open62541/open62541
     tags: true
     tags: true
     condition: $CC = gcc && $ANALYZE = false
     condition: $CC = gcc && $ANALYZE = false
+
+notifications:
+  irc: "chat.freenode.net#open62541"
+  on_success: ${IRC_NOTIFY_SUCCESS} # default: change, variable defined in ./tools/travis/travis_notification.sh
+  on_failure: ${IRC_NOTIFY_FAILURE} # default: always, variable defined in ./tools/travis/travis_notification.sh

+ 134 - 260
CMakeLists.txt

@@ -1,21 +1,17 @@
 cmake_minimum_required(VERSION 2.8.11)
 cmake_minimum_required(VERSION 2.8.11)
 project(open62541 C)
 project(open62541 C)
+set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/tools/cmake")
 # set(CMAKE_VERBOSE_MAKEFILE ON)
 # set(CMAKE_VERBOSE_MAKEFILE ON)
 
 
 ######################
 ######################
 # Check Dependencies #
 # Check Dependencies #
 ######################
 ######################
 
 
-# Find Python
 find_package(PythonInterp REQUIRED)
 find_package(PythonInterp REQUIRED)
-
-# Check for git
 find_package(Git)
 find_package(Git)
 if(GIT_FOUND)
 if(GIT_FOUND)
   execute_process(COMMAND ${GIT_EXECUTABLE} describe --abbrev=7 --dirty --always --tags
   execute_process(COMMAND ${GIT_EXECUTABLE} describe --abbrev=7 --dirty --always --tags
-                  RESULT_VARIABLE res_var
-                  OUTPUT_VARIABLE GIT_COM_ID
-                  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
+                  RESULT_VARIABLE res_var OUTPUT_VARIABLE GIT_COM_ID WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
     if(NOT ${res_var} EQUAL 0)
     if(NOT ${res_var} EQUAL 0)
         set(GIT_COMMIT_ID "unknown--git-commit-id-unknown")
         set(GIT_COMMIT_ID "unknown--git-commit-id-unknown")
         message(STATUS "Git failed (not a repo, or no tags). Build will not contain git revision info." )
         message(STATUS "Git failed (not a repo, or no tags). Build will not contain git revision info." )
@@ -26,81 +22,18 @@ else()
     set(GIT_COMMIT_ID "unknown--no-git-found")
     set(GIT_COMMIT_ID "unknown--no-git-found")
     message(STATUS "Git not found. Build will not contain git revision info." )
     message(STATUS "Git not found. Build will not contain git revision info." )
 endif()
 endif()
-
 message(STATUS "Git version: "  ${GIT_COMMIT_ID})
 message(STATUS "Git version: "  ${GIT_COMMIT_ID})
 
 
-set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/tools/cmake")
-
-####################################
-# Build Type and Compiler Settings #
-####################################
+############
+# Settings #
+############
 
 
 # Set default build type.
 # Set default build type.
 if(NOT CMAKE_BUILD_TYPE)
 if(NOT CMAKE_BUILD_TYPE)
-    message(STATUS "CMAKE_BUILD_TYPE not given; setting to 'Debug'.")
-    set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE)
+    message(STATUS "CMAKE_BUILD_TYPE not given; setting to 'Debug'")
+    set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build" FORCE)
 endif()
 endif()
 
 
-# Collect libraries
-list(APPEND open62541_LIBRARIES "")
-
-# compiler flags
-if(CMAKE_COMPILER_IS_GNUCC OR "x${CMAKE_C_COMPILER_ID}" STREQUAL "xClang")
-    add_definitions(-std=c99 -pipe -Wall -Wextra -Werror -Wformat -Wno-unused-parameter
-                    -Wno-unused-function -Wno-unused-label -Wpointer-arith -Wreturn-type -Wsign-compare
-                    -Wmultichar -Wstrict-overflow -Wcast-qual -Wmissing-prototypes -Wstrict-prototypes
-                    -Winit-self -Wuninitialized -Wformat-security -Wformat-nonliteral)
-
-  # library linking
-  set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # cmake sets -rdynamic by default
-  if(NOT WIN32 AND NOT CYGWIN)
-    add_definitions(-Wshadow -Wconversion -fvisibility=hidden -fPIC)
-    if(NOT APPLE)
-      set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,-z,norelro -Wl,--hash-style=gnu -Wl,--build-id=none")
-    endif()
-  endif()
-
-  # Debug
-  if(CMAKE_BUILD_TYPE STREQUAL "Debug")
-    # add_definitions(-fsanitize=address)
-    # list(APPEND open62541_LIBRARIES asan)
-
-    # add_definitions(-fsanitize=undefined)
-    # list(APPEND open62541_LIBRARIES ubsan)
-
-  elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR
-         CMAKE_BUILD_TYPE STREQUAL "Release")
-    add_definitions(-ffunction-sections -fdata-sections -fno-stack-protector -fno-unwind-tables
-                    -fno-asynchronous-unwind-tables -fno-math-errno -fmerge-all-constants -fno-ident)
-    set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -s")
-    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s")
-    if(APPLE)
-      set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,-dead_strip")
-      set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-dead_strip")
-    else()
-      set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--gc-sections")
-      set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections")
-      if(NOT WIN32 AND NOT CYGWIN)
-        # these settings reduce the binary size by ~2kb
-        set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,-z,norelro -Wl,--hash-style=gnu -Wl,--build-id=none")
-      endif()
-    endif()
-  endif()
-
-  if(APPLE)
-    set(CMAKE_MACOSX_RPATH 1)
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_DARWIN_C_SOURCE=1")
-  endif()
-elseif(MSVC)
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX") # Compiler warnings, error on warning
-  set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
-  set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
-endif()
-
-############
-# Settings #
-############
-
 # Options
 # Options
 set(UA_LOGLEVEL 300 CACHE STRING "Level at which logs shall be reported")
 set(UA_LOGLEVEL 300 CACHE STRING "Level at which logs shall be reported")
 option(UA_ENABLE_METHODCALLS "Enable the Method service set" ON)
 option(UA_ENABLE_METHODCALLS "Enable the Method service set" ON)
@@ -139,23 +72,80 @@ if(UA_ENABLE_NONSTANDARD_UDP)
 endif()
 endif()
 
 
 # Build Targets
 # Build Targets
-option(UA_BUILD_EXAMPLESERVER "Build the example server" OFF)
-option(UA_BUILD_EXAMPLECLIENT "Build a test client" OFF)
-option(UA_BUILD_UNIT_TESTS "Run unit tests after building" OFF)
 option(UA_BUILD_EXAMPLES "Build example servers and clients" OFF)
 option(UA_BUILD_EXAMPLES "Build example servers and clients" OFF)
+option(UA_BUILD_EXAMPLES_NODESET_COMPILER "Generate an OPC UA information model from a nodeset XML (experimental)" OFF)
+option(UA_BUILD_UNIT_TESTS "Build the unit tests" OFF)
 option(UA_BUILD_DOCUMENTATION "Generate doxygen/sphinx documentation" OFF)
 option(UA_BUILD_DOCUMENTATION "Generate doxygen/sphinx documentation" OFF)
 
 
 # Advanced Build Targets
 # Advanced Build Targets
 option(UA_BUILD_SELFSIGNED_CERTIFICATE "Generate self-signed certificate" OFF)
 option(UA_BUILD_SELFSIGNED_CERTIFICATE "Generate self-signed certificate" OFF)
 mark_as_advanced(UA_BUILD_SELFSIGNED_CERTIFICATE)
 mark_as_advanced(UA_BUILD_SELFSIGNED_CERTIFICATE)
 
 
+#####################
+# Compiler Settings #
+#####################
+
+list(APPEND open62541_LIBRARIES "") # Collect libraries
+
+if(CMAKE_COMPILER_IS_GNUCC OR "x${CMAKE_C_COMPILER_ID}" STREQUAL "xClang")
+    # Compiler
+    add_definitions(-std=c99 -pipe -Wall -Wextra -Werror -Wformat -Wno-unused-parameter
+                    -Wno-unused-function -Wno-unused-label -Wpointer-arith -Wreturn-type -Wsign-compare
+                    -Wmultichar -Wstrict-overflow -Wcast-qual -Wmissing-prototypes -Wstrict-prototypes
+                    -Winit-self -Wuninitialized -Wformat-security -Wformat-nonliteral)
+    if(NOT WIN32 AND NOT CYGWIN)
+        add_definitions(-Wshadow -Wconversion -fvisibility=hidden -fPIC)
+    endif()
+
+    # Linker
+    set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # cmake sets -rdynamic by default
+
+    # Debug
+    if(CMAKE_BUILD_TYPE STREQUAL "Debug")
+        # add_definitions(-fsanitize=address)
+        # list(APPEND open62541_LIBRARIES asan)
+        # add_definitions(-fsanitize=undefined)
+        # list(APPEND open62541_LIBRARIES ubsan)
+    endif()
+
+    # Strip release builds
+    if(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR CMAKE_BUILD_TYPE STREQUAL "Release")
+        add_definitions(-ffunction-sections -fdata-sections -fno-stack-protector -fno-unwind-tables
+                        -fno-asynchronous-unwind-tables -fno-math-errno -fmerge-all-constants -fno-ident)
+        set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -s")
+        set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s")
+        if(APPLE)
+            set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,-dead_strip")
+            set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-dead_strip")
+        else()
+            set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--gc-sections")
+            set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections")
+        endif()
+        if(NOT WIN32 AND NOT CYGWIN AND NOT APPLE)
+            # these settings reduce the binary size by ~2kb
+            set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,-z,norelro -Wl,--hash-style=gnu -Wl,--build-id=none")
+        endif()
+    endif()
+endif()
+
+if(APPLE)
+    set(CMAKE_MACOSX_RPATH 1)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_DARWIN_C_SOURCE=1")
+endif()
+
+if(MSVC)
+  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX") # Compiler warnings, error on warning
+  set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
+  set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
+endif()
+
 #########################
 #########################
 # Generate Main Library #
 # Generate Main Library #
 #########################
 #########################
 
 
 file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/src_generated")
 file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/src_generated")
-include_directories(${PROJECT_BINARY_DIR}/src_generated) #needed to locate an include of examples/server_nodeset.c
 configure_file("include/ua_config.h.in" "${PROJECT_BINARY_DIR}/src_generated/ua_config.h")
 configure_file("include/ua_config.h.in" "${PROJECT_BINARY_DIR}/src_generated/ua_config.h")
+include_directories(${PROJECT_BINARY_DIR}/src_generated)
 
 
 set(exported_headers ${PROJECT_BINARY_DIR}/src_generated/ua_config.h
 set(exported_headers ${PROJECT_BINARY_DIR}/src_generated/ua_config.h
                      ${PROJECT_SOURCE_DIR}/include/ua_constants.h
                      ${PROJECT_SOURCE_DIR}/include/ua_constants.h
@@ -251,10 +241,9 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_types_generated
                           ${PROJECT_BINARY_DIR}/src_generated/ua_types_generated_encoding_binary.h
                           ${PROJECT_BINARY_DIR}/src_generated/ua_types_generated_encoding_binary.h
                    PRE_BUILD
                    PRE_BUILD
                    COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_datatypes.py
                    COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_datatypes.py
-                                                --typedescriptions ${PROJECT_SOURCE_DIR}/tools/schema/NodeIds.csv
-                                                --selected_types=${PROJECT_SOURCE_DIR}/tools/schema/datatypes_minimal.txt
-                                                ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.Types.bsd
-                                                ${PROJECT_BINARY_DIR}/src_generated/ua_types
+                           --typedescriptions ${PROJECT_SOURCE_DIR}/tools/schema/NodeIds.csv
+                           --selected_types=${PROJECT_SOURCE_DIR}/tools/schema/datatypes_minimal.txt
+                           ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.Types.bsd ${PROJECT_BINARY_DIR}/src_generated/ua_types
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_datatypes.py
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_datatypes.py
                            ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_minimal.txt
                            ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_minimal.txt
                            ${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/Opc.Ua.Types.bsd
                            ${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/Opc.Ua.Types.bsd
@@ -266,11 +255,10 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_transport_gener
                           ${PROJECT_BINARY_DIR}/src_generated/ua_transport_generated_encoding_binary.h
                           ${PROJECT_BINARY_DIR}/src_generated/ua_transport_generated_encoding_binary.h
                    PRE_BUILD
                    PRE_BUILD
                    COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_datatypes.py
                    COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_datatypes.py
-                                                --namespace=1
-                                                --selected_types=${PROJECT_SOURCE_DIR}/tools/schema/datatypes_transport.txt
-                                                ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.Types.bsd
-                                                ${PROJECT_SOURCE_DIR}/tools/schema/Custom.Opc.Ua.Transport.bsd
-                                                ${PROJECT_BINARY_DIR}/src_generated/ua_transport
+                           --namespace=1 --selected_types=${PROJECT_SOURCE_DIR}/tools/schema/datatypes_transport.txt
+                           ${PROJECT_SOURCE_DIR}/tools/schema/Opc.Ua.Types.bsd
+                           ${PROJECT_SOURCE_DIR}/tools/schema/Custom.Opc.Ua.Transport.bsd
+                           ${PROJECT_BINARY_DIR}/src_generated/ua_transport
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_datatypes.py
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_datatypes.py
                            ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_transport.txt
                            ${PROJECT_SOURCE_DIR}/tools/schema/datatypes_transport.txt
                            ${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/Custom.Opc.Ua.Transport.bsd)
                            ${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/Custom.Opc.Ua.Transport.bsd)
@@ -279,8 +267,7 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_transport_gener
 add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_nodeids.h
 add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_nodeids.h
                    PRE_BUILD
                    PRE_BUILD
                    COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_nodeids.py
                    COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/generate_nodeids.py
-                                                ${PROJECT_SOURCE_DIR}/tools/schema/NodeIds.csv
-                                                ${PROJECT_BINARY_DIR}/src_generated/ua_nodeids
+                           ${PROJECT_SOURCE_DIR}/tools/schema/NodeIds.csv ${PROJECT_BINARY_DIR}/src_generated/ua_nodeids
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_nodeids.py
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_nodeids.py
                            ${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/NodeIds.csv)
                            ${CMAKE_CURRENT_SOURCE_DIR}/tools/schema/NodeIds.csv)
 
 
@@ -289,10 +276,10 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_g
                           ${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated.h
                           ${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated.h
                    PRE_BUILD
                    PRE_BUILD
                    COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
                    COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
-                                                -i ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_AssumeExternal.txt
-                                                -s description -b ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist.txt
-                                                ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/${GENERATE_NAMESPACE0_FILE}
-                                                ${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated
+                           -i ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_AssumeExternal.txt
+                           -s description -b ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist.txt
+                           ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/${GENERATE_NAMESPACE0_FILE}
+                           ${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_generated
                    DEPENDS ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/${GENERATE_NAMESPACE0_FILE}
                    DEPENDS ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/${GENERATE_NAMESPACE0_FILE}
                            ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
                            ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
                            ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/open62541_MacroHelper.py
                            ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/open62541_MacroHelper.py
@@ -305,8 +292,7 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/ua_namespaceinit_g
 add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.h
 add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.h
                    PRE_BUILD
                    PRE_BUILD
                    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py
                    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py
-                                                ${GIT_COMMIT_ID}
-                                                ${CMAKE_CURRENT_BINARY_DIR}/open62541.h ${exported_headers}
+                           ${GIT_COMMIT_ID} ${CMAKE_CURRENT_BINARY_DIR}/open62541.h ${exported_headers}
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py
                    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py
                            ${exported_headers}
                            ${exported_headers}
                            ${internal_headers})
                            ${internal_headers})
@@ -314,191 +300,79 @@ add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.h
 add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.c
 add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/open62541.c
                    PRE_BUILD
                    PRE_BUILD
                    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py
                    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py
-                                                ${GIT_COMMIT_ID}
-                                                ${CMAKE_CURRENT_BINARY_DIR}/open62541.c
-                                                ${internal_headers}
-                                                ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore_hash.inc
-                                                ${lib_sources}
-                   DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py
-                           ${internal_headers}
-                           ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore_hash.inc
-                           ${lib_sources})
-
-#################
-# Build Targets #
-#################
+                           ${GIT_COMMIT_ID} ${CMAKE_CURRENT_BINARY_DIR}/open62541.c ${internal_headers}
+                           ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore_hash.inc ${lib_sources}
+                   DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/amalgamate.py ${internal_headers}
+                           ${PROJECT_SOURCE_DIR}/src/server/ua_nodestore_hash.inc ${lib_sources})
+
+# example information model from nodeset xml
+add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/nodeset.h ${PROJECT_BINARY_DIR}/src_generated/nodeset.c
+                  PRE_BUILD
+                  COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
+                                                -i ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist_FullNS0.txt
+                                                ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/Opc.Ua.NodeSet2.xml
+                                                ${PROJECT_SOURCE_DIR}/examples/server_nodeset.xml
+                                                ${PROJECT_BINARY_DIR}/src_generated/nodeset
+                  DEPENDS ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
+                          ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/open62541_MacroHelper.py
+                          ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_builtin_types.py
+                          ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_constants.py
+                          ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_namespace.py
+                          ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_node_types.py
+                          ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist_FullNS0.txt
+                          ${PROJECT_SOURCE_DIR}/examples/server_nodeset.xml)
+
+#####################
+# Build the Library #
+#####################
 
 
-# build shared library
 if(UA_ENABLE_AMALGAMATION)
 if(UA_ENABLE_AMALGAMATION)
     add_library(open62541-object OBJECT ${PROJECT_BINARY_DIR}/open62541.c ${PROJECT_BINARY_DIR}/open62541.h)
     add_library(open62541-object OBJECT ${PROJECT_BINARY_DIR}/open62541.c ${PROJECT_BINARY_DIR}/open62541.h)
-    include_directories(${PROJECT_BINARY_DIR})
+    target_include_directories(open62541-object PRIVATE ${PROJECT_BINARY_DIR})
 else()
 else()
-    add_definitions(-DUA_NO_AMALGAMATION)
     add_library(open62541-object OBJECT ${lib_sources} ${internal_headers} ${exported_headers})
     add_library(open62541-object OBJECT ${lib_sources} ${internal_headers} ${exported_headers})
-    include_directories(${PROJECT_SOURCE_DIR}/include)
-    include_directories(${PROJECT_SOURCE_DIR}/src)
-    include_directories(${PROJECT_SOURCE_DIR}/plugins)
-    include_directories(${PROJECT_SOURCE_DIR}/deps)
+    target_include_directories(open62541-object PRIVATE ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src
+                                                        ${PROJECT_SOURCE_DIR}/plugins ${PROJECT_SOURCE_DIR}/deps)
 endif()
 endif()
+add_library(open62541 $<TARGET_OBJECTS:open62541-object>)
+target_link_libraries(open62541 ${open62541_LIBRARIES})
+
 target_compile_definitions(open62541-object PRIVATE -DUA_DYNAMIC_LINKING)
 target_compile_definitions(open62541-object PRIVATE -DUA_DYNAMIC_LINKING)
-add_library(open62541 SHARED $<TARGET_OBJECTS:open62541-object>)
-add_library(open62541-static STATIC $<TARGET_OBJECTS:open62541-object>)
 target_compile_definitions(open62541 PRIVATE -DUA_DYNAMIC_LINKING)
 target_compile_definitions(open62541 PRIVATE -DUA_DYNAMIC_LINKING)
-target_compile_definitions(open62541-static PRIVATE -DUA_DYNAMIC_LINKING)
-target_link_libraries(open62541-static ${open62541_LIBRARIES})
-if(WIN32)
-  target_link_libraries(open62541 ws2_32)
-  target_link_libraries(open62541-static ws2_32)
-endif()
+# target_compile_definitions(open62541-static PRIVATE -DUA_DYNAMIC_LINKING)
 
 
-if(UA_BUILD_EXAMPLESERVER)
-    set(server_source $<TARGET_OBJECTS:open62541-object>)
-    add_executable(server_static examples/server.c ${server_source})
-    add_executable(server examples/server.c)
-    target_link_libraries(server ${open62541_LIBRARIES} open62541)
-    target_link_libraries(server_static ${open62541_LIBRARIES})
-	target_compile_definitions(server_static PRIVATE -DUA_DYNAMIC_LINKING)
-    if(WIN32)
-        target_link_libraries(server_static ws2_32)
-        target_link_libraries(server ws2_32)
-    elseif(NOT APPLE)
-        target_link_libraries(server_static rt)
-        target_link_libraries(server rt)
-    endif()
-    if(UA_ENABLE_MULTITHREADING)
-        target_link_libraries(server_static urcu-cds urcu urcu-common pthread)
-        target_link_libraries(server urcu-cds urcu urcu-common pthread)
-    endif()
-
-    if(UA_ENABLE_NONSTANDARD_UDP)
-      add_executable(exampleServerUDP $<TARGET_OBJECTS:open62541-object>
-                                      examples/networklayer_udp.c
-                                      examples/server_udp.c)
-      target_link_libraries(exampleServerUDP ${open62541_LIBRARIES} open62541)
-      if(UA_ENABLE_MULTITHREADING)
-        target_link_libraries(exampleServerUDP urcu-cds urcu urcu-common)
-      endif()
-      if (NOT APPLE)
-        target_link_libraries(exampleServerUDP rt)
-      endif()
-    endif()
+if(WIN32)
+    target_link_libraries(open62541 ws2_32)
 endif()
 endif()
 
 
-if(UA_BUILD_SELFSIGNED_CERTIFICATE)
-    message(STATUS "Enabling self-signed certificates")
-    find_package(OpenSSL REQUIRED)
-    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/server_cert.der
-                              ${PROJECT_BINARY_DIR}/ca.crt
-                   COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/certs/create_self-signed.py ${PROJECT_BINARY_DIR}
-                   DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/certs/create_self-signed.py
-                           ${CMAKE_CURRENT_SOURCE_DIR}/tools/certs/localhost.cnf)
-    add_custom_target(selfsigned ALL DEPENDS ${PROJECT_BINARY_DIR}/server_cert.der ${PROJECT_BINARY_DIR}/ca.crt)
-endif()
+##########################
+# Build Selected Targets #
+##########################
 
 
-if(UA_BUILD_EXAMPLECLIENT)
-    set(client_source $<TARGET_OBJECTS:open62541-object>)
-    add_executable(client_static examples/client.c ${client_source})
-    add_executable(client examples/client.c)
-    target_link_libraries(client_static ${open62541_LIBRARIES})
-	target_compile_definitions(client_static PRIVATE -DUA_DYNAMIC_LINKING)
-    target_link_libraries(client open62541 ${open62541_LIBRARIES})
-    if(WIN32)
-        target_link_libraries(client_static ws2_32)
-        target_link_libraries(client ws2_32)
-    elseif(NOT APPLE)
-        target_link_libraries(client_static rt)
-        target_link_libraries(client rt)
-    endif()
-    if(UA_ENABLE_MULTITHREADING)
-        target_link_libraries(client_static urcu-cds urcu urcu-common pthread)
-        target_link_libraries(client urcu-cds urcu urcu-common pthread)
-    endif()
+if(UA_BUILD_EXAMPLES)
+    add_subdirectory(examples)
 endif()
 endif()
 
 
 if(UA_BUILD_UNIT_TESTS)
 if(UA_BUILD_UNIT_TESTS)
-  add_definitions(-DUA_BUILD_UNIT_TESTS)
+    target_compile_definitions(open62541-object PRIVATE UA_BUILD_UNIT_TESTS) # Export some internal functions
     enable_testing()
     enable_testing()
     add_subdirectory(tests)
     add_subdirectory(tests)
 endif()
 endif()
 
 
-if(UA_BUILD_EXAMPLES)
-    #add_subdirectory(examples)
-    #FIXME: we had problem with static linking for msvs, here a quick and dirty workaround
-    #http://stackoverflow.com/questions/3704374/linking-error-lnk2019-in-msvc-unresolved-symbols-with-imp-prefix-but-shoul
-    #http://stackoverflow.com/questions/1089828/same-header-file-for-both-dll-and-static-library
-    list(APPEND LIBS ${open62541_LIBRARIES})
-    if(NOT WIN32)
-      list(APPEND LIBS pthread)
-      if (NOT APPLE)
-        list(APPEND LIBS rt)
-      endif()
-    else()
-      list(APPEND LIBS ws2_32)
-    endif()
-    if(UA_ENABLE_MULTITHREADING)
-      list(APPEND LIBS urcu-cds urcu urcu-common)
-    endif(UA_ENABLE_MULTITHREADING)
-
-    add_executable(server_variable ${PROJECT_SOURCE_DIR}/examples/server_variable.c $<TARGET_OBJECTS:open62541-object>)
-    target_link_libraries(server_variable ${LIBS})
-
-    add_executable(server_mainloop ${PROJECT_SOURCE_DIR}/examples/server_mainloop.c $<TARGET_OBJECTS:open62541-object>)
-    target_link_libraries(server_mainloop ${LIBS})
-
-    add_executable(server_datasource ${PROJECT_SOURCE_DIR}/examples/server_datasource.c $<TARGET_OBJECTS:open62541-object>)
-    target_link_libraries(server_datasource ${LIBS})
-
-    # add_executable(server_readspeed ${PROJECT_SOURCE_DIR}/examples/server_readspeed.c $<TARGET_OBJECTS:open62541-object>)
-    # target_link_libraries(server_readspeed ${LIBS})
-
-    add_executable(server_firstSteps ${PROJECT_SOURCE_DIR}/examples/server_firstSteps.c $<TARGET_OBJECTS:open62541-object>)
-    target_link_libraries(server_firstSteps ${LIBS})
-
-    add_executable(client_firstSteps ${PROJECT_SOURCE_DIR}/examples/client_firstSteps.c $<TARGET_OBJECTS:open62541-object>)
-    target_link_libraries(client_firstSteps ${LIBS})
-
-    add_executable(server_repeated_job ${PROJECT_SOURCE_DIR}/examples/server_repeated_job.c $<TARGET_OBJECTS:open62541-object>)
-    target_link_libraries(server_repeated_job ${LIBS})
-
-    if(UA_ENABLE_DISCOVERY)
-        add_executable(discovery_server_discovery ${PROJECT_SOURCE_DIR}/examples/discovery/server_discovery.c $<TARGET_OBJECTS:open62541-object>)
-        target_link_libraries(discovery_server_discovery ${LIBS})
-
-        # can currently only be build on linux, because windows is missing pthread support
-        add_executable(discovery_server_register ${PROJECT_SOURCE_DIR}/examples/discovery/server_register.c $<TARGET_OBJECTS:open62541-object>)
-        target_link_libraries(discovery_server_register ${LIBS})
-
-        add_executable(discovery_client_find_servers ${PROJECT_SOURCE_DIR}/examples/discovery/client_find_servers.c $<TARGET_OBJECTS:open62541-object>)
-        target_link_libraries(discovery_client_find_servers ${LIBS})
-    endif()
+if(UA_BUILD_DOCUMENTATION)
+    add_subdirectory(doc)
+endif()
 
 
-    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/nodeset.h ${PROJECT_BINARY_DIR}/src_generated/nodeset.c
-                      PRE_BUILD
-                      COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
-                                                    -i ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist_FullNS0.txt
-                                                    ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/Opc.Ua.NodeSet2.xml
-                                                    ${PROJECT_SOURCE_DIR}/examples/server_nodeset.xml
-                                                    ${PROJECT_BINARY_DIR}/src_generated/nodeset
-                      DEPENDS ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
-                              ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/open62541_MacroHelper.py
-                              ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_builtin_types.py
-                              ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_constants.py
-                              ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_namespace.py
-                              ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_node_types.py
-                              ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist_FullNS0.txt
-                              ${PROJECT_SOURCE_DIR}/examples/server_nodeset.xml)
-
-    add_executable(server_nodeset ${PROJECT_SOURCE_DIR}/examples/server_nodeset.c
-                                  ${PROJECT_BINARY_DIR}/src_generated/nodeset.c
-                                  $<TARGET_OBJECTS:open62541-object>)
-    target_link_libraries(server_nodeset ${LIBS})
-
-    if(UA_ENABLE_METHODCALLS)
-      add_executable(server_method ${PROJECT_SOURCE_DIR}/examples/server_method.c $<TARGET_OBJECTS:open62541-object>)
-      target_link_libraries(server_method ${LIBS})
-    endif()
+if(UA_BUILD_SELFSIGNED_CERTIFICATE)
+    find_package(OpenSSL REQUIRED)
+    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/server_cert.der ${PROJECT_BINARY_DIR}/ca.crt
+                       COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/certs/create_self-signed.py ${PROJECT_BINARY_DIR}
+                       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tools/certs/create_self-signed.py
+                               ${CMAKE_CURRENT_SOURCE_DIR}/tools/certs/localhost.cnf)
+    add_custom_target(selfsigned ALL DEPENDS ${PROJECT_BINARY_DIR}/server_cert.der ${PROJECT_BINARY_DIR}/ca.crt)
 endif()
 endif()
 
 
-if(UA_BUILD_DOCUMENTATION)
-    add_subdirectory(doc)
+if(UA_BUILD_EXAMPLES_NODESET_COMPILER)
+  add_custom_target(generate_informationmodel ALL
+                    DEPENDS ${PROJECT_BINARY_DIR}/src_generated/nodeset.h ${PROJECT_BINARY_DIR}/src_generated/nodeset.c)
 endif()
 endif()

+ 6 - 6
appveyor.yml

@@ -42,34 +42,34 @@ before_build:
   - set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
   - set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
   - set PATH=C:\MinGW\bin;%PATH%
   - set PATH=C:\MinGW\bin;%PATH%
 
 
-build_script: 
+build_script:
   - cd c:\projects\open62541
   - cd c:\projects\open62541
   - md build
   - md build
   - cd build
   - cd build
   # cygwin cmake stopped working on 05.07.2016 -- commented out until a fix appears
   # cygwin cmake stopped working on 05.07.2016 -- commented out until a fix appears
   #- echo "Testing cygwin"
   #- echo "Testing cygwin"
   #- '%CYG_BASH% --login -lc "/usr/bin/cmake.exe --version"'
   #- '%CYG_BASH% --login -lc "/usr/bin/cmake.exe --version"'
-  #- '%CYG_BASH% --login -lc "cd /cygdrive/c/projects/open62541/build; cmake -DUA_BUILD_EXAMPLESERVER:BOOL=ON -DUA_BUILD_EXAMPLECLIENT:BOOL=ON -DUA_BUILD_EXAMPLES:BOOL=ON -G\"Unix Makefiles\" .."'
+  #- '%CYG_BASH% --login -lc "cd /cygdrive/c/projects/open62541/build; cmake -DUA_BUILD_EXAMPLES:BOOL=ON -G\"Unix Makefiles\" .."'
   #- '%CYG_BASH% --login -lc "cd /cygdrive/c/projects/open62541/build; make -j"'
   #- '%CYG_BASH% --login -lc "cd /cygdrive/c/projects/open62541/build; make -j"'
   - cd ..
   - cd ..
   - rd /s /q build
   - rd /s /q build
   - md build
   - md build
   - cd build
   - cd build
   - echo "Testing MinGW32"
   - echo "Testing MinGW32"
-  - cmake -DUA_BUILD_EXAMPLESERVER:BOOL=ON -DUA_BUILD_EXAMPLECLIENT:BOOL=ON -DUA_BUILD_EXAMPLES:BOOL=ON -G"MinGW Makefiles" ..
+  - cmake -DUA_BUILD_EXAMPLES:BOOL=ON -G"MinGW Makefiles" ..
   - mingw32-make
   - mingw32-make
   - cd ..
   - cd ..
   - rd /s /q build
   - rd /s /q build
   - md build
   - md build
   - cd build
   - cd build
-  - cmake -DUA_BUILD_EXAMPLESERVER:BOOL=ON -DUA_BUILD_EXAMPLECLIENT:BOOL=ON -DUA_BUILD_EXAMPLES:BOOL=ON -G"Visual Studio 12 2013" ..
+  - cmake -DUA_BUILD_EXAMPLES:BOOL=ON -G"Visual Studio 12 2013" ..
   - msbuild open62541.sln /m
   - msbuild open62541.sln /m
   - echo "Testing amalgamation"
   - echo "Testing amalgamation"
   - cd ..
   - cd ..
   - rd /s /q build
   - rd /s /q build
   - md build
   - md build
   - cd build
   - cd build
-  - cmake -DUA_BUILD_EXAMPLESERVER:BOOL=ON -DUA_BUILD_EXAMPLECLIENT:BOOL=ON -DUA_BUILD_EXAMPLES:BOOL=ON -DUA_ENABLE_AMALGAMATION:BOOL=ON -G"Visual Studio 12 2013" ..
+  - cmake -DUA_BUILD_EXAMPLES:BOOL=ON -DUA_ENABLE_AMALGAMATION:BOOL=ON -G"Visual Studio 12 2013" ..
   - msbuild open62541.sln /m
   - msbuild open62541.sln /m
   - copy C:\projects\open62541\build\open62541.c C:\projects\open62541\build\Debug\open62541.c
   - copy C:\projects\open62541\build\open62541.c C:\projects\open62541\build\Debug\open62541.c
   - copy C:\projects\open62541\build\open62541.h C:\projects\open62541\build\Debug\open62541.h
   - copy C:\projects\open62541\build\open62541.h C:\projects\open62541\build\Debug\open62541.h
@@ -77,7 +77,7 @@ build_script:
   - echo "Win 64 build"
   - echo "Win 64 build"
   - md build64
   - md build64
   - cd build64
   - cd build64
-  - cmake -DUA_BUILD_EXAMPLESERVER:BOOL=ON -DUA_BUILD_EXAMPLECLIENT:BOOL=ON -DUA_BUILD_EXAMPLES:BOOL=ON -DUA_ENABLE_AMALGAMATION:BOOL=ON -G"Visual Studio 12 2013 Win64" ..
+  - cmake -DUA_BUILD_EXAMPLES:BOOL=ON -DUA_ENABLE_AMALGAMATION:BOOL=ON -G"Visual Studio 12 2013 Win64" ..
   - msbuild open62541.sln /m
   - msbuild open62541.sln /m
   - copy C:\projects\open62541\build64\open62541.c C:\projects\open62541\build64\Debug\open62541.c
   - copy C:\projects\open62541\build64\open62541.c C:\projects\open62541\build64\Debug\open62541.c
   - copy C:\projects\open62541\build64\open62541.h C:\projects\open62541\build64\Debug\open62541.h
   - copy C:\projects\open62541\build64\open62541.h C:\projects\open62541\build64\Debug\open62541.h

+ 25 - 40
doc/CMakeLists.txt

@@ -1,42 +1,35 @@
 find_package(Sphinx REQUIRED)
 find_package(Sphinx REQUIRED)
 find_package(LATEX)
 find_package(LATEX)
 
 
-
 set(DOC_LATEX_DIR ${PROJECT_BINARY_DIR}/doc_latex)
 set(DOC_LATEX_DIR ${PROJECT_BINARY_DIR}/doc_latex)
-make_directory(${PROJECT_BINARY_DIR}/doc_src)
+set(DOC_HTML_DIR  ${PROJECT_BINARY_DIR}/doc)
+set(DOC_SRC_DIR   ${PROJECT_BINARY_DIR}/doc_src)
+
+make_directory(${DOC_SRC_DIR})
 file(GLOB DOC_SRC "${PROJECT_SOURCE_DIR}/doc/*")
 file(GLOB DOC_SRC "${PROJECT_SOURCE_DIR}/doc/*")
-file(COPY ${DOC_SRC} DESTINATION ${PROJECT_BINARY_DIR}/doc_src)
+file(COPY ${DOC_SRC} DESTINATION ${DOC_SRC_DIR})
 
 
 function(generate_rst in out)
 function(generate_rst in out)
-  add_custom_command(OUTPUT ${out}
-                     DEPENDS ${PROJECT_SOURCE_DIR}/tools/c2rst.py ${in}
-                     PRE_BUILD
-                     COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/c2rst.py ${in} ${out})
+  add_custom_command(OUTPUT ${out} DEPENDS ${PROJECT_SOURCE_DIR}/tools/c2rst.py ${in}
+                     PRE_BUILD COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/c2rst.py ${in} ${out})
 endfunction()
 endfunction()
 
 
-generate_rst(${PROJECT_SOURCE_DIR}/include/ua_types.h ${PROJECT_BINARY_DIR}/doc_src/types.rst)
-generate_rst(${PROJECT_SOURCE_DIR}/include/ua_constants.h ${PROJECT_BINARY_DIR}/doc_src/constants.rst)
-generate_rst(${PROJECT_BINARY_DIR}/src_generated/ua_types_generated.h ${PROJECT_BINARY_DIR}/doc_src/types_generated.rst)
-generate_rst(${PROJECT_SOURCE_DIR}/include/ua_server.h ${PROJECT_BINARY_DIR}/doc_src/server.rst)
-generate_rst(${PROJECT_SOURCE_DIR}/include/ua_client.h ${PROJECT_BINARY_DIR}/doc_src/client.rst)
-generate_rst(${PROJECT_SOURCE_DIR}/include/ua_client_highlevel.h ${PROJECT_BINARY_DIR}/doc_src/client_highlevel.rst)
-generate_rst(${PROJECT_SOURCE_DIR}/include/ua_log.h ${PROJECT_BINARY_DIR}/doc_src/log.rst)
-generate_rst(${PROJECT_SOURCE_DIR}/include/ua_connection.h ${PROJECT_BINARY_DIR}/doc_src/connection.rst)
-generate_rst(${PROJECT_SOURCE_DIR}/src/server/ua_services.h ${PROJECT_BINARY_DIR}/doc_src/services.rst)
-generate_rst(${PROJECT_SOURCE_DIR}/src/server/ua_nodestore.h ${PROJECT_BINARY_DIR}/doc_src/nodestore.rst)
+generate_rst(${PROJECT_SOURCE_DIR}/include/ua_types.h ${DOC_SRC_DIR}/types.rst)
+generate_rst(${PROJECT_SOURCE_DIR}/include/ua_constants.h ${DOC_SRC_DIR}/constants.rst)
+generate_rst(${PROJECT_BINARY_DIR}/src_generated/ua_types_generated.h ${DOC_SRC_DIR}/types_generated.rst)
+generate_rst(${PROJECT_SOURCE_DIR}/include/ua_server.h ${DOC_SRC_DIR}/server.rst)
+generate_rst(${PROJECT_SOURCE_DIR}/include/ua_client.h ${DOC_SRC_DIR}/client.rst)
+generate_rst(${PROJECT_SOURCE_DIR}/include/ua_client_highlevel.h ${DOC_SRC_DIR}/client_highlevel.rst)
+generate_rst(${PROJECT_SOURCE_DIR}/include/ua_log.h ${DOC_SRC_DIR}/log.rst)
+generate_rst(${PROJECT_SOURCE_DIR}/include/ua_connection.h ${DOC_SRC_DIR}/connection.rst)
+generate_rst(${PROJECT_SOURCE_DIR}/src/server/ua_services.h ${DOC_SRC_DIR}/services.rst)
+generate_rst(${PROJECT_SOURCE_DIR}/src/server/ua_nodestore.h ${DOC_SRC_DIR}/nodestore.rst)
 
 
 add_custom_target(doc_latex ${SPHINX_EXECUTABLE}
 add_custom_target(doc_latex ${SPHINX_EXECUTABLE}
-  -b latex -c "${PROJECT_BINARY_DIR}/doc_src" "${PROJECT_BINARY_DIR}/doc_src" "${PROJECT_BINARY_DIR}/doc_latex"
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/types.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/constants.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/types_generated.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/server.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/client.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/client_highlevel.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/log.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/connection.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/services.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/nodestore.rst
+  -b latex "${DOC_SRC_DIR}" "${DOC_LATEX_DIR}"
+  DEPENDS ${DOC_SRC_DIR}/types.rst ${DOC_SRC_DIR}/constants.rst ${DOC_SRC_DIR}/types_generated.rst
+          ${DOC_SRC_DIR}/server.rst ${DOC_SRC_DIR}/client.rst ${DOC_SRC_DIR}/client_highlevel.rst
+          ${DOC_SRC_DIR}/log.rst ${DOC_SRC_DIR}/connection.rst ${DOC_SRC_DIR}/services.rst ${DOC_SRC_DIR}/nodestore.rst
   COMMENT "Building LaTeX sources for documentation with Sphinx")
   COMMENT "Building LaTeX sources for documentation with Sphinx")
 add_dependencies(doc_latex open62541)
 add_dependencies(doc_latex open62541)
 
 
@@ -50,17 +43,9 @@ add_custom_target(doc_pdf ${PDFLATEX_COMPILER} -q "open62541.tex"
 add_dependencies(doc_pdf doc_latex)
 add_dependencies(doc_pdf doc_latex)
 
 
 add_custom_target(doc ${SPHINX_EXECUTABLE}
 add_custom_target(doc ${SPHINX_EXECUTABLE}
-  -b html -c "${PROJECT_BINARY_DIR}/doc_src" "${PROJECT_BINARY_DIR}/doc_src" "${PROJECT_BINARY_DIR}/doc"
-  COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_BINARY_DIR}/doc_src/open62541_html.png" "${PROJECT_BINARY_DIR}/doc/_static/"
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/types.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/constants.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/types_generated.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/server.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/client.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/client_highlevel.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/log.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/connection.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/services.rst
-  DEPENDS ${PROJECT_BINARY_DIR}/doc_src/nodestore.rst
+  -b html "${DOC_SRC_DIR}" "${DOC_HTML_DIR}"
+  DEPENDS ${DOC_SRC_DIR}/types.rst ${DOC_SRC_DIR}/constants.rst ${DOC_SRC_DIR}/types_generated.rst
+          ${DOC_SRC_DIR}/server.rst ${DOC_SRC_DIR}/client.rst ${DOC_SRC_DIR}/client_highlevel.rst
+          ${DOC_SRC_DIR}/log.rst ${DOC_SRC_DIR}/connection.rst ${DOC_SRC_DIR}/services.rst ${DOC_SRC_DIR}/nodestore.rst
   COMMENT "Building HTML documentation with Sphinx")
   COMMENT "Building HTML documentation with Sphinx")
 add_dependencies(doc open62541)
 add_dependencies(doc open62541)

+ 2 - 2
doc/conf.py

@@ -127,7 +127,7 @@ html_theme = 'sphinx_rtd_theme'
 
 
 # The name of an image file (relative to this directory) to place at the top
 # The name of an image file (relative to this directory) to place at the top
 # of the sidebar.
 # of the sidebar.
-html_logo = "doc/open62541_html.png"
+html_logo = "open62541_html.png"
 
 
 # The name of an image file (within the static path) to use as favicon of the
 # The name of an image file (within the static path) to use as favicon of the
 # docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
 # docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
@@ -137,7 +137,7 @@ html_logo = "doc/open62541_html.png"
 # Add any paths that contain custom static files (such as style sheets) here,
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
 # so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
+html_static_path = ['.']
 
 
 # Add any extra paths that contain custom files (such as robots.txt or
 # Add any extra paths that contain custom files (such as robots.txt or
 # .htaccess) here, relative to this directory. These files are copied
 # .htaccess) here, relative to this directory. These files are copied

+ 63 - 47
examples/CMakeLists.txt

@@ -1,72 +1,88 @@
 include_directories(${PROJECT_SOURCE_DIR}/include)
 include_directories(${PROJECT_SOURCE_DIR}/include)
-include_directories(${PROJECT_BINARY_DIR}/src_generated)
+include_directories(${PROJECT_SOURCE_DIR}/plugins)
 
 
-set(LIBS open62541-static)
+if(UA_ENABLE_AMALGAMATION)
+    include_directories(${PROJECT_BINARY_DIR}) # contain open62541.h
+else()
+    add_definitions(-DUA_NO_AMALGAMATION)
+endif()
+
+list(APPEND LIBS ${open62541_LIBRARIES})
 if(NOT WIN32)
 if(NOT WIN32)
-    list(APPEND LIBS pthread)
-    if (NOT APPLE)
-        list(APPEND LIBS rt)
-    endif()
+  list(APPEND LIBS pthread)
+  if (NOT APPLE)
+    list(APPEND LIBS rt)
+  endif()
 else()
 else()
-    list(APPEND LIBS ws2_32)
+  list(APPEND LIBS ws2_32)
 endif()
 endif()
 if(UA_ENABLE_MULTITHREADING)
 if(UA_ENABLE_MULTITHREADING)
-    list(APPEND LIBS urcu-cds urcu urcu-common)
+  list(APPEND LIBS urcu-cds urcu urcu-common)
+endif(UA_ENABLE_MULTITHREADING)
+
+##################
+# Example Server #
+##################
+
+add_executable(server server.c $<TARGET_OBJECTS:open62541-object>)
+target_link_libraries(server ${LIBS})
+
+if(UA_ENABLE_NONSTANDARD_UDP)
+  add_executable(server_udp server_udp.c $<TARGET_OBJECTS:open62541-object> ${PROJECT_SOURCE_DIR}/plugins/networklayer_udp.c)
+  target_link_libraries(server_udp ${LIBS})
 endif()
 endif()
 
 
-# add_executable(server_readspeed server_readspeed.c)
-# target_link_libraries(server_readspeed ${LIBS})
+##################
+# Example Client #
+##################
+
+add_executable(client client.c $<TARGET_OBJECTS:open62541-object>)
+target_link_libraries(client ${LIBS})
 
 
-add_executable(server_variable server_variable.c)
+####################
+# Feature Examples #
+####################
+
+add_executable(server_variable server_variable.c $<TARGET_OBJECTS:open62541-object>)
 target_link_libraries(server_variable ${LIBS})
 target_link_libraries(server_variable ${LIBS})
 
 
-add_executable(server_mainloop server_mainloop.c)
+add_executable(server_mainloop server_mainloop.c $<TARGET_OBJECTS:open62541-object>)
 target_link_libraries(server_mainloop ${LIBS})
 target_link_libraries(server_mainloop ${LIBS})
 
 
-add_executable(server_datasource server_datasource.c)
+add_executable(server_datasource server_datasource.c $<TARGET_OBJECTS:open62541-object>)
 target_link_libraries(server_datasource ${LIBS})
 target_link_libraries(server_datasource ${LIBS})
 
 
-add_executable(server_firstSteps server_firstSteps.c)
+add_executable(server_firstSteps server_firstSteps.c $<TARGET_OBJECTS:open62541-object>)
 target_link_libraries(server_firstSteps ${LIBS})
 target_link_libraries(server_firstSteps ${LIBS})
 
 
-add_executable(client_firstSteps client_firstSteps.c)
-target_link_libraries(client_firstSteps ${LIBS})
+add_executable(server_repeated_job server_repeated_job.c $<TARGET_OBJECTS:open62541-object>)
+target_link_libraries(server_repeated_job ${LIBS})
+
+add_executable(server_readspeed server_readspeed.c $<TARGET_OBJECTS:open62541-object>)
+target_include_directories(server_readspeed PRIVATE ${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/deps) # needs an internal header
+target_link_libraries(server_readspeed ${LIBS})
+
+if(UA_ENABLE_METHODCALLS)
+  add_executable(server_method server_method.c $<TARGET_OBJECTS:open62541-object>)
+  target_link_libraries(server_method ${LIBS})
+endif()
 
 
 if(UA_ENABLE_DISCOVERY)
 if(UA_ENABLE_DISCOVERY)
-	add_executable(discovery_server_discovery discovery/server_discovery.c)
-	target_link_libraries(discovery_server_discovery ${LIBS})
+    add_executable(discovery_server_discovery discovery/server_discovery.c)
+    target_link_libraries(discovery_server_discovery ${LIBS})
 
 
-	# can currently only be build on linux, because windows is missing pthread support
-	add_executable(discovery_server_register discovery/server_register.c)
-	target_link_libraries(discovery_server_register ${LIBS})
+    add_executable(discovery_server_register discovery/server_register.c)
+    target_link_libraries(discovery_server_register ${LIBS})
 
 
-	add_executable(discovery_client_find_servers discovery/client_find_servers.c)
-	target_link_libraries(discovery_client_find_servers ${LIBS})
+    add_executable(discovery_client_find_servers discovery/client_find_servers.c)
+    target_link_libraries(discovery_client_find_servers ${LIBS})
 endif()
 endif()
 
 
-if(NOT UA_ENABLE_AMALGAMATION)
-	add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/nodeset.h ${PROJECT_BINARY_DIR}/src_generated/nodeset.c
-		               PRE_BUILD
-		               COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
-                                                    -i ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist_FullNS0.txt
-                                                    ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/Opc.Ua.NodeSet2.xml
-                                                    ${PROJECT_SOURCE_DIR}/examples/server_nodeset.xml
-                                                    ${PROJECT_BINARY_DIR}/src_generated/nodeset
-   		                DEPENDS ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
-		                        ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/logger.py
-		                        ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/open62541_MacroHelper.py
-		                        ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_builtin_types.py
-		                        ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_constants.py
-		                        ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_namespace.py
-		                        ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_node_types.py
-		                        ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist_FullNS0.txt
-		                        ${PROJECT_SOURCE_DIR}/examples/server_nodeset.xml)
-		                      
-	add_executable(server_nodeset server_nodeset.c ${PROJECT_BINARY_DIR}/src_generated/nodeset.c)
-	target_link_libraries(server_nodeset ${LIBS})
+if(UA_BUILD_EXAMPLES_NODESET_COMPILER)
+  add_executable(server_nodeset server_nodeset.c ${PROJECT_BINARY_DIR}/src_generated/nodeset.c $<TARGET_OBJECTS:open62541-object>)
+  target_link_libraries(server_nodeset ${LIBS})
+  target_include_directories(server_nodeset PRIVATE ${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/deps) # needs an internal header
 endif()
 endif()
 
 
-if(UA_ENABLE_METHODCALLS)
-  add_executable(server_method server_method.c)
-  target_link_libraries(server_method ${LIBS})
-endif()
+add_executable(client_firstSteps client_firstSteps.c $<TARGET_OBJECTS:open62541-object>)
+target_link_libraries(client_firstSteps ${LIBS})

+ 0 - 1
examples/client.c

@@ -8,7 +8,6 @@
 # include "ua_nodeids.h"
 # include "ua_nodeids.h"
 # include "ua_network_tcp.h"
 # include "ua_network_tcp.h"
 # include "ua_config_standard.h"
 # include "ua_config_standard.h"
-# include "ua_types_encoding_binary.h"
 #else
 #else
 # include "open62541.h"
 # include "open62541.h"
 # include <string.h>
 # include <string.h>

+ 13 - 26
examples/server_readspeed.c

@@ -1,40 +1,31 @@
-/*
- * This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- */
+/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
+ * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
 
 
-#include <signal.h>
+/* This example is just to see how fast we can process messages. The server does
+   not open a TCP port. */
+
+#include <time.h>
+#include <stdio.h>
 
 
 #ifdef UA_NO_AMALGAMATION
 #ifdef UA_NO_AMALGAMATION
 # include "ua_types.h"
 # include "ua_types.h"
 # include "ua_types_generated.h"
 # include "ua_types_generated.h"
 # include "ua_server.h"
 # include "ua_server.h"
 # include "ua_config_standard.h"
 # include "ua_config_standard.h"
-# include "networklayer_tcp.h"
 #else
 #else
 # include "open62541.h"
 # include "open62541.h"
+/* include guards to prevent double definitions with open62541.h */
+# define UA_TYPES_H_
+# define UA_SERVER_H_
+# define UA_CONNECTION_H_
+# define UA_TYPES_GENERATED_H_
 #endif
 #endif
 
 
-#include <time.h>
-#include <stdio.h>
 #include "server/ua_services.h"
 #include "server/ua_services.h"
 #include "ua_types_encoding_binary.h"
 #include "ua_types_encoding_binary.h"
 
 
-UA_Boolean running = true;
-UA_Logger logger = Logger_Stdout;
-
-static void stopHandler(int sign) {
-    UA_LOG_INFO(logger, UA_LOGCATEGORY_SERVER, "received ctrl-c");
-    running = false;
-}
-
 int main(int argc, char** argv) {
 int main(int argc, char** argv) {
-    signal(SIGINT, stopHandler); /* catches ctrl-c */
-
     UA_ServerConfig config = UA_ServerConfig_standard;
     UA_ServerConfig config = UA_ServerConfig_standard;
-    UA_ServerNetworkLayer nl = UA_ServerNetworkLayerTCP(UA_ConnectionConfig_standard, 16664);
-    config.networkLayers = &nl;
-    config.networkLayersSize = 1;
     UA_Server *server = UA_Server_new(config);
     UA_Server *server = UA_Server_new(config);
 
 
     /* add a variable node to the address space */
     /* add a variable node to the address space */
@@ -70,7 +61,7 @@ int main(int argc, char** argv) {
     retval |= UA_ByteString_allocBuffer(&response_msg, 1000);
     retval |= UA_ByteString_allocBuffer(&response_msg, 1000);
     size_t offset = 0;
     size_t offset = 0;
     retval |= UA_encodeBinary(&request, &UA_TYPES[UA_TYPES_READREQUEST], NULL, NULL, &request_msg, &offset);
     retval |= UA_encodeBinary(&request, &UA_TYPES[UA_TYPES_READREQUEST], NULL, NULL, &request_msg, &offset);
-    
+
     clock_t begin, end;
     clock_t begin, end;
     begin = clock();
     begin = clock();
 
 
@@ -98,10 +89,6 @@ int main(int argc, char** argv) {
 
 
     UA_ByteString_deleteMembers(&request_msg);
     UA_ByteString_deleteMembers(&request_msg);
     UA_ByteString_deleteMembers(&response_msg);
     UA_ByteString_deleteMembers(&response_msg);
-
-    retval |= UA_Server_run(server, &running);
     UA_Server_delete(server);
     UA_Server_delete(server);
-    nl.deleteMembers(&nl);
-
     return (int)retval;
     return (int)retval;
 }
 }

+ 1 - 3
src/server/ua_services.h

@@ -5,9 +5,6 @@
 extern "C" {
 extern "C" {
 #endif
 #endif
 
 
-#include "ua_util.h"
-#include "ua_types.h"
-#include "ua_types_generated.h"
 #include "ua_server.h"
 #include "ua_server.h"
 #include "ua_session.h"
 #include "ua_session.h"
 #include "ua_nodes.h"
 #include "ua_nodes.h"
@@ -194,6 +191,7 @@ void Service_RegisterNodes(UA_Server *server, UA_Session *session,
 void Service_UnregisterNodes(UA_Server *server, UA_Session *session,
 void Service_UnregisterNodes(UA_Server *server, UA_Session *session,
                              const UA_UnregisterNodesRequest *request,
                              const UA_UnregisterNodesRequest *request,
                              UA_UnregisterNodesResponse *response);
                              UA_UnregisterNodesResponse *response);
+
 /**
 /**
  * Query Service Set
  * Query Service Set
  * -----------------
  * -----------------

+ 2 - 1
src/server/ua_services_subscription.c

@@ -190,7 +190,8 @@ Service_CreateMonitoredItems_single(UA_Server *server, UA_Session *session, UA_S
     LIST_INSERT_HEAD(&sub->MonitoredItems, newMon, listEntry);
     LIST_INSERT_HEAD(&sub->MonitoredItems, newMon, listEntry);
 
 
     /* Create the first sample */
     /* Create the first sample */
-    UA_MoniteredItem_SampleCallback(server, newMon);
+    if(request->monitoringMode == UA_MONITORINGMODE_REPORTING)
+        UA_MoniteredItem_SampleCallback(server, newMon);
 
 
     /* Prepare the response */
     /* Prepare the response */
     UA_String_copy(&request->itemToMonitor.indexRange, &newMon->indexRange);
     UA_String_copy(&request->itemToMonitor.indexRange, &newMon->indexRange);

+ 12 - 12
src/ua_securechannel.h

@@ -83,32 +83,32 @@ UA_StatusCode UA_SecureChannel_processSequenceNumber (UA_UInt32 SequenceNumber,
  * ---------- */
  * ---------- */
 #define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG, ...)                 \
 #define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG, ...)                 \
     UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
     UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
-                 (CHANNEL->connection ? CHANNEL->connection->sockfd : 0), \
-                 CHANNEL->securityToken.channelId, ##__VA_ARGS__);
+                 ((CHANNEL)->connection ? CHANNEL->connection->sockfd : 0), \
+                 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__);
 
 
 #define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG, ...)                 \
 #define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG, ...)                 \
     UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
     UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
-                 (CHANNEL->connection ? CHANNEL->connection->sockfd : 0), \
-                 CHANNEL->securityToken.channelId, ##__VA_ARGS__);
+                 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \
+                 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__);
 
 
 #define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG, ...)                   \
 #define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG, ...)                   \
     UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
     UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
-                (CHANNEL->connection ? CHANNEL->connection->sockfd : 0), \
-                CHANNEL->securityToken.channelId, ##__VA_ARGS__);
+                ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \
+                (CHANNEL)->securityToken.channelId, ##__VA_ARGS__);
 
 
 #define UA_LOG_WARNING_CHANNEL(LOGGER, CHANNEL, MSG, ...)               \
 #define UA_LOG_WARNING_CHANNEL(LOGGER, CHANNEL, MSG, ...)               \
     UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
     UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
-                   (CHANNEL->connection ? CHANNEL->connection->sockfd : 0), \
-                   CHANNEL->securityToken.channelId, ##__VA_ARGS__);
+                   ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \
+                   (CHANNEL)->securityToken.channelId, ##__VA_ARGS__);
 
 
 #define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG, ...)                 \
 #define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG, ...)                 \
     UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
     UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
-                 (CHANNEL->connection ? CHANNEL->connection->sockfd : 0), \
-                 CHANNEL->securityToken.channelId, ##__VA_ARGS__);
+                 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \
+                 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__);
 
 
 #define UA_LOG_FATAL_CHANNEL(LOGGER, CHANNEL, MSG, ...)                 \
 #define UA_LOG_FATAL_CHANNEL(LOGGER, CHANNEL, MSG, ...)                 \
     UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
     UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \
-                 (CHANNEL->connection ? CHANNEL->connection->sockfd : 0), \
-                 CHANNEL->securityToken.channelId, ##__VA_ARGS__);
+                 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \
+                 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__);
 
 
 #endif /* UA_SECURECHANNEL_H_ */
 #endif /* UA_SECURECHANNEL_H_ */

+ 1 - 1
tests/check_builtin.c

@@ -1322,7 +1322,7 @@ START_TEST(UA_Variant_copyShallWorkOn1DArrayExample) {
     srcArray[2] = UA_STRING_ALLOC("opc ua");
     srcArray[2] = UA_STRING_ALLOC("opc ua");
 
 
     UA_Int32 *dimensions;
     UA_Int32 *dimensions;
-    dimensions = UA_malloc(sizeof(UA_UInt32));
+    dimensions = UA_malloc(sizeof(UA_Int32));
     dimensions[0] = 3;
     dimensions[0] = 3;
 
 
     UA_Variant value, copiedValue;
     UA_Variant value, copiedValue;

+ 77 - 61
tools/travis/travis_linux_before_install.sh

@@ -1,71 +1,87 @@
 #!/bin/bash
 #!/bin/bash
 set -ev
 set -ev
 
 
-if [ $ANALYZE = "true" ]; then
-    cd $LOCAL_PKG
-    # travis caches the $LOCAL_PKG dir. If it is loaded, we don't need to reinstall the packages
-    if [ "$CC" = "clang" ]; then
-        clang --version
-    else
-        if [ ! -f $LOCAL_PKG/.cached_analyze ]; then
-            # Install newer cppcheck
-            wget https://github.com/danmar/cppcheck/archive/1.73.tar.gz -O cppcheck-1.73.tar.gz
-            tar xf cppcheck-1.73.tar.gz
-            cd $LOCAL_PKG/cppcheck-1.73
-            make SRCDIR=build CFGDIR="$LOCAL_PKG/cppcheck-1.73/cfg" HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function" -j8
-            ln -s $LOCAL_PKG/cppcheck-1.73/cppcheck $LOCAL_PKG/cppcheck
-            # create cached flag
-            touch $LOCAL_PKG/.cached_analyze
-        else
-            echo "\n## Using local packages from cache\n"
-        fi
-        g++ --version
-        cppcheck --version
-    fi
-else
-    cd $LOCAL_PKG
+echo "=== Updating the build environment in $LOCAL_PKG ==="
 
 
-    # travis caches the $LOCAL_PKG dir. If it is loaded, we don't need to reinstall the packages
-    if [ ! -f $LOCAL_PKG/.cached ]; then
+echo "=== Installing python packages ==="
+pip install --user cpp-coveralls
+pip install --user sphinx
+pip install --user sphinx_rtd_theme
 
 
-        # Install newer valgrind
-        mkdir -p $LOCAL_PKG/package && cd $LOCAL_PKG/package
-        wget http://valgrind.org/downloads/valgrind-3.11.0.tar.bz2
-        tar xf valgrind-3.11.0.tar.bz2
-        cd valgrind-3.11.0
-        ./configure --prefix=$LOCAL_PKG
-        make -s -j8 install
-        echo "\n### Installed valgrind version: $(valgrind --version)"
-        cd $LOCAL_PKG
+# Increase the environment version to force a rebuild of the packages
+# The version is writen to the cache file after every build of the dependencies
+ENV_VERSION="1"
+ENV_INSTALLED=""
+if [ -e $LOCAL_PKG/.build_env ]; then
+    echo "=== No cached build environment ==="
+    read -r ENV_INSTALLED < $LOCAL_PKG/.build_env
+fi
+
+# travis caches the $LOCAL_PKG dir. If it is loaded, we don't need to reinstall the packages
+if [ "$ENV_VERSION" = "$ENV_INSTALLED" ]; then
+    echo "=== The build environment is current ==="
+    # Print version numbers
+    clang --version
+    g++ --version
+    cppcheck --version
+    valgrind --version
+    exit 0
+fi
 
 
-        # Install specific check version which is not yet in the apt package
-        wget http://ftp.de.debian.org/debian/pool/main/c/check/check_0.10.0-3_amd64.deb
-        dpkg -x check_0.10.0-3_amd64.deb $LOCAL_PKG/package
-        # change pkg-config file path
-        sed -i "s|prefix=/usr|prefix=${LOCAL_PKG}|g" $LOCAL_PKG/package/usr/lib/x86_64-linux-gnu/pkgconfig/check.pc
-        sed -i 's|libdir=.*|libdir=${prefix}/lib|g' $LOCAL_PKG/package/usr/lib/x86_64-linux-gnu/pkgconfig/check.pc
-        # move files to globally included dirs
-        cp -R $LOCAL_PKG/package/usr/lib/x86_64-linux-gnu/* $LOCAL_PKG/lib/
-        cp -R $LOCAL_PKG/package/usr/include/* $LOCAL_PKG/include/
-        cp -R $LOCAL_PKG/package/usr/bin/* $LOCAL_PKG/
+echo "=== The build environment is outdated ==="
 
 
-        # Install specific liburcu version which is not yet in the apt package
-        wget https://launchpad.net/ubuntu/+source/liburcu/0.8.5-1ubuntu1/+build/6513813/+files/liburcu2_0.8.5-1ubuntu1_amd64.deb
-        wget https://launchpad.net/ubuntu/+source/liburcu/0.8.5-1ubuntu1/+build/6513813/+files/liburcu-dev_0.8.5-1ubuntu1_amd64.deb
-        dpkg -x liburcu2_0.8.5-1ubuntu1_amd64.deb $LOCAL_PKG/package
-        dpkg -x liburcu-dev_0.8.5-1ubuntu1_amd64.deb $LOCAL_PKG/package
-        # move files to globally included dirs
-        cp -R $LOCAL_PKG/package/usr/lib/x86_64-linux-gnu/* $LOCAL_PKG/lib/
-        cp -R $LOCAL_PKG/package/usr/include/* $LOCAL_PKG/include/
+# Clean up
+rm -rf $LOCAL_PKG/*
 
 
-        # create cached flag
-        touch $LOCAL_PKG/.cached
+# Install newer valgrind
+echo "=== Installing valgrind ==="
+wget http://valgrind.org/downloads/valgrind-3.11.0.tar.bz2
+tar xf valgrind-3.11.0.tar.bz2
+cd valgrind-3.11.0
+./configure --prefix=$LOCAL_PKG
+make -s -j8 install
+cd ..
 
 
-    else
-        echo "\n## Using local packages from cache\n"
-    fi
+# Install specific check version which is not yet in the apt package
+echo "=== Installing check ==="
+mkdir tmp_check
+wget http://ftp.de.debian.org/debian/pool/main/c/check/check_0.10.0-3_amd64.deb
+dpkg -x check_0.10.0-3_amd64.deb ./tmp_check
+# change pkg-config file path
+sed -i "s|prefix=/usr|prefix=${LOCAL_PKG}|g" ./tmp_check/usr/lib/x86_64-linux-gnu/pkgconfig/check.pc
+sed -i 's|libdir=.*|libdir=${prefix}/lib|g' ./tmp_check/usr/lib/x86_64-linux-gnu/pkgconfig/check.pc
+# move files to globally included dirs
+cp -R ./tmp_check/usr/lib/x86_64-linux-gnu/* $LOCAL_PKG/lib/
+cp -R ./tmp_check/usr/include/* $LOCAL_PKG/include/
+cp -R ./tmp_check/usr/bin/* $LOCAL_PKG/
 
 
-    pip install --user cpp-coveralls
-    pip install --user sphinx
-    pip install --user sphinx_rtd_theme
-fi
+# Install specific liburcu version which is not yet in the apt package
+echo "=== Installing liburcu ==="
+mkdir tmp_liburcu
+wget https://launchpad.net/ubuntu/+source/liburcu/0.8.5-1ubuntu1/+build/6513813/+files/liburcu2_0.8.5-1ubuntu1_amd64.deb
+wget https://launchpad.net/ubuntu/+source/liburcu/0.8.5-1ubuntu1/+build/6513813/+files/liburcu-dev_0.8.5-1ubuntu1_amd64.deb
+dpkg -x liburcu2_0.8.5-1ubuntu1_amd64.deb ./tmp_liburcu
+dpkg -x liburcu-dev_0.8.5-1ubuntu1_amd64.deb ./tmp_liburcu
+# move files to globally included dirs
+cp -R ./tmp_liburcu/usr/lib/x86_64-linux-gnu/* $LOCAL_PKG/lib/
+cp -R ./tmp_liburcu/usr/include/* $LOCAL_PKG/include/
+
+# Install newer cppcheck
+echo "=== Installing cppcheck ==="
+wget https://github.com/danmar/cppcheck/archive/1.73.tar.gz -O cppcheck-1.73.tar.gz
+tar xf cppcheck-1.73.tar.gz
+cd cppcheck-1.73
+make PREFIX="$LOCAL_PKG" SRCDIR=build CFGDIR="$LOCAL_PKG/cppcheck-cfg" HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function" -j8
+make PREFIX="$LOCAL_PKG" SRCDIR=build CFGDIR="$LOCAL_PKG/cppcheck-cfg" HAVE_RULES=yes install
+cd ..
+
+# create cached flag
+echo "=== Store cache flag ==="
+echo $ENV_VERSION > $LOCAL_PKG/.build_env
+
+# Print version numbers
+echo "=== Installed versions are ==="
+clang --version
+g++ --version
+cppcheck --version
+valgrind --version

+ 21 - 22
tools/travis/travis_linux_script.sh

@@ -2,11 +2,11 @@
 set -ev
 set -ev
 
 
 if [ $ANALYZE = "true" ]; then
 if [ $ANALYZE = "true" ]; then
-    echo "\n=== Running static code analysis ==="
+    echo "=== Running static code analysis ==="
     if [ "$CC" = "clang" ]; then
     if [ "$CC" = "clang" ]; then
         mkdir -p build
         mkdir -p build
         cd build
         cd build
-        scan-build cmake -G "Unix Makefiles" ..
+        scan-build cmake -G "Unix Makefiles" -DUA_BUILD_EXAMPLES=ON -DUA_BUILD_UNIT_TESTS=ON ..
         scan-build -enable-checker security.FloatLoopCounter \
         scan-build -enable-checker security.FloatLoopCounter \
           -enable-checker security.insecureAPI.UncheckedReturn \
           -enable-checker security.insecureAPI.UncheckedReturn \
           --status-bugs -v \
           --status-bugs -v \
@@ -28,18 +28,18 @@ if [ $ANALYZE = "true" ]; then
             --suppress=invalidscanf --inline-suppr \
             --suppress=invalidscanf --inline-suppr \
             -I include src plugins 2> cppcheck.txt
             -I include src plugins 2> cppcheck.txt
         if [ -s cppcheck.txt ]; then
         if [ -s cppcheck.txt ]; then
-            echo "\n\n====== CPPCHECK Static Analysis Errors ======"
+            echo "====== CPPCHECK Static Analysis Errors ======"
             cat cppcheck.txt
             cat cppcheck.txt
             exit 1
             exit 1
         fi
         fi
     fi
     fi
 else
 else
-    echo "\n=== Building ==="
+    echo "=== Building ==="
 
 
     echo "Documentation and certificate build"
     echo "Documentation and certificate build"
     mkdir -p build
     mkdir -p build
     cd build
     cd build
-    cmake -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLESERVER=ON -DUA_BUILD_EXAMPLECLIENT=ON -DUA_BUILD_EXAMPLES=ON -DUA_BUILD_DOCUMENTATION=ON -DUA_BUILD_SELFSIGNED_CERTIFICATE=ON ..
+    cmake -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLES=ON -DUA_BUILD_DOCUMENTATION=ON -DUA_BUILD_SELFSIGNED_CERTIFICATE=ON ..
     make doc
     make doc
     make selfsigned
     make selfsigned
     cp -r doc ../../
     cp -r doc ../../
@@ -50,34 +50,34 @@ else
     if [ "$CC" = "gcc" ]; then
     if [ "$CC" = "gcc" ]; then
         echo "Cross compile release build for MinGW 32 bit"
         echo "Cross compile release build for MinGW 32 bit"
         mkdir -p build && cd build
         mkdir -p build && cd build
-        cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-mingw32.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLESERVER=ON -DUA_BUILD_EXAMPLECLIENT=ON -DUA_BUILD_EXAMPLES=ON ..
-        make -j
-        zip -r open62541-win32.zip ../../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md server_static.exe server.exe client.exe client_static.exe libopen62541.dll libopen62541.dll.a open62541.h open62541.c
+        cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-mingw32.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLES=ON ..
+        make -j8
+        zip -r open62541-win32.zip ../../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md examples/server.exe examples/client.exe libopen62541.dll.a open62541.h open62541.c
         cp open62541-win32.zip ..
         cp open62541-win32.zip ..
         cd .. && rm build -rf
         cd .. && rm build -rf
 
 
         echo "Cross compile release build for MinGW 64 bit"
         echo "Cross compile release build for MinGW 64 bit"
         mkdir -p build && cd build
         mkdir -p build && cd build
-        cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-mingw64.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLESERVER=ON -DUA_BUILD_EXAMPLECLIENT=ON -DUA_BUILD_EXAMPLES=ON ..
-        make -j
-        zip -r open62541-win64.zip ../../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md server_static.exe server.exe client.exe client_static.exe libopen62541.dll libopen62541.dll.a open62541.h open62541.c
+        cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-mingw64.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLES=ON ..
+        make -j8
+        zip -r open62541-win64.zip ../../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md examples/server.exe examples/client.exe libopen62541.dll.a open62541.h open62541.c
         cp open62541-win64.zip ..
         cp open62541-win64.zip ..
         cd .. && rm build -rf
         cd .. && rm build -rf
 
 
         echo "Cross compile release build for 32-bit linux"
         echo "Cross compile release build for 32-bit linux"
         mkdir -p build && cd build
         mkdir -p build && cd build
-        cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-gcc-m32.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLESERVER=ON -DUA_BUILD_EXAMPLECLIENT=ON ..
-        make -j
-        tar -pczf open62541-linux32.tar.gz ../../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md server_static server client_static client libopen62541.so open62541.h open62541.c
+        cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-gcc-m32.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLES=ON ..
+        make -j8
+        tar -pczf open62541-linux32.tar.gz ../../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md examples/server examples/client libopen62541.a open62541.h open62541.c
         cp open62541-linux32.tar.gz ..
         cp open62541-linux32.tar.gz ..
         cd .. && rm build -rf
         cd .. && rm build -rf
     fi
     fi
 
 
     echo "Compile release build for 64-bit linux"
     echo "Compile release build for 64-bit linux"
     mkdir -p build && cd build
     mkdir -p build && cd build
-    cmake -DCMAKE_BUILD_TYPE=Release -DUA_ENABLE_AMALGAMATION=ON -DUA_BUILD_EXAMPLESERVER=ON -DUA_BUILD_EXAMPLECLIENT=ON ..
-    make -j
-    tar -pczf open62541-linux64.tar.gz ../../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md server_static server client_static client libopen62541.so open62541.h open62541.c
+    cmake -DCMAKE_BUILD_TYPE=Release -DUA_ENABLE_AMALGAMATION=ON -DUA_BUILD_EXAMPLES=ON ..
+    make -j8
+    tar -pczf open62541-linux64.tar.gz ../../doc ../../server_cert.der ../LICENSE ../AUTHORS ../README.md examples/server examples/client libopen62541.a open62541.h open62541.c
     cp open62541-linux64.tar.gz ..
     cp open62541-linux64.tar.gz ..
     cp open62541.h .. # copy single file-release
     cp open62541.h .. # copy single file-release
     cp open62541.c .. # copy single file-release
     cp open62541.c .. # copy single file-release
@@ -97,7 +97,7 @@ else
 
 
     echo "Compile multithreaded version"
     echo "Compile multithreaded version"
     mkdir -p build && cd build
     mkdir -p build && cd build
-    cmake -DUA_ENABLE_MULTITHREADING=ON -DUA_BUILD_EXAMPLESERVER=ON ..
+    cmake -DUA_ENABLE_MULTITHREADING=ON -DUA_BUILD_EXAMPLES=ON ..
     make -j
     make -j
     cd .. && rm build -rf
     cd .. && rm build -rf
 
 
@@ -110,11 +110,10 @@ else
     #this run inclides full examples and methodcalls
     #this run inclides full examples and methodcalls
     echo "Debug build and unit tests (64 bit)"
     echo "Debug build and unit tests (64 bit)"
     mkdir -p build && cd build
     mkdir -p build && cd build
-    cmake -DCMAKE_BUILD_TYPE=Debug -DUA_BUILD_EXAMPLES=ON -DUA_ENABLE_METHODCALLS=ON -DUA_BUILD_UNIT_TESTS=ON -DUA_BUILD_EXAMPLESERVER=ON -DUA_ENABLE_COVERAGE=ON ..
-    make -j && make test ARGS="-V"
+    cmake -DCMAKE_BUILD_TYPE=Debug -DUA_BUILD_EXAMPLES=ON -DUA_BUILD_UNIT_TESTS=ON -DUA_ENABLE_COVERAGE=ON ..
+    make -j8 && make test ARGS="-V"
     echo "Run valgrind to see if the server leaks memory (just starting up and closing..)"
     echo "Run valgrind to see if the server leaks memory (just starting up and closing..)"
-    (valgrind --leak-check=yes --error-exitcode=3 ./server & export pid=$!; sleep 2; kill -INT $pid; wait $pid);
-    
+    (valgrind --leak-check=yes --error-exitcode=3 ./examples/server & export pid=$!; sleep 2; kill -INT $pid; wait $pid);
     # only run coveralls on main repo, otherwise it fails uploading the files
     # only run coveralls on main repo, otherwise it fails uploading the files
     echo "-> Current repo: ${TRAVIS_REPO_SLUG}"
     echo "-> Current repo: ${TRAVIS_REPO_SLUG}"
     if ([ "$CC" = "gcc-4.8" ] || [ "$CC" = "gcc" ]) && [ "${TRAVIS_REPO_SLUG}" = "open62541/open62541" ]; then
     if ([ "$CC" = "gcc-4.8" ] || [ "$CC" = "gcc" ]) && [ "${TRAVIS_REPO_SLUG}" = "open62541/open62541" ]; then

+ 12 - 0
tools/travis/travis_notifications.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+set -ev
+
+IRC_NOTIFY_SUCCESS="never"
+IRC_NOTIFY_FAILURE="never"
+
+if [ ${TRAVIS_OS_NAME} == "linux" ] && [ ${CC} == "gcc" ]; then
+    if [ ${TRAVIS_BRANCH} == "0.2" ] || [ ${TRAVIS_BRANCH} == "master" ]; then
+        IRC_NOTIFY_SUCCESS="always"
+        IRC_NOTIFY_FAILURE="always"
+    fi
+fi

+ 8 - 10
tools/travis/travis_osx_before_install.sh

@@ -2,16 +2,14 @@
 set -ev
 set -ev
 
 
 if [ $ANALYZE = "true" ]; then
 if [ $ANALYZE = "true" ]; then
-	echo "Skipping static analysis for OS X"
-	exit 0
+    echo "Skipping static analysis for OS X"
+    exit 0
 else
 else
-	brew install check
-	brew install libxml2
-	brew install userspace-rcu
-	brew install valgrind
-
-	pip install --user sphinx
-	pip install --user breathe
-	pip install --user sphinx_rtd_theme
+    brew install check
+    brew install userspace-rcu
+    brew install valgrind
 
 
+    pip install --user sphinx
+    pip install --user breathe
+    pip install --user sphinx_rtd_theme
 fi
 fi

+ 8 - 8
tools/travis/travis_osx_script.sh

@@ -9,16 +9,16 @@ else
 
 
     echo "Create certificate for OS X build"
     echo "Create certificate for OS X build"
     mkdir -p build && cd build
     mkdir -p build && cd build
-    cmake -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLESERVER=OFF -DUA_BUILD_EXAMPLECLIENT=OFF -DUA_BUILD_EXAMPLES=OFF -DUA_BUILD_DOCUMENTATION=OFF -DUA_BUILD_SELFSIGNED_CERTIFICATE=ON ..
+    cmake -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_SELFSIGNED_CERTIFICATE=ON ..
     make selfsigned
     make selfsigned
     cp server_cert.der ../
     cp server_cert.der ../
     cd .. && rm -rf build
     cd .. && rm -rf build
 
 
     echo "Compile release build for OS X"
     echo "Compile release build for OS X"
     mkdir -p build && cd build
     mkdir -p build && cd build
-    cmake -DCMAKE_BUILD_TYPE=Release -DUA_ENABLE_AMALGAMATION=ON -DUA_BUILD_EXAMPLESERVER=ON -DUA_BUILD_EXAMPLECLIENT=ON -DUA_BUILD_DOCUMENTATION=ON -DUA_GENERATE_SELFSIGNED=ON ..
-    make -j
-    tar -pczf open62541-osx.tar.gz ../doc ../server_cert.der ../LICENSE ../AUTHORS ../README.md server_static server client_static client libopen62541.dylib open62541.h open62541.c
+    cmake -DCMAKE_BUILD_TYPE=Release -DUA_ENABLE_AMALGAMATION=ON -DUA_BUILD_EXAMPLES=ON -DUA_BUILD_DOCUMENTATION=ON -DUA_GENERATE_SELFSIGNED=ON ..
+    make -j8
+    tar -pczf open62541-osx.tar.gz ../doc ../server_cert.der ../LICENSE ../AUTHORS ../README.md examples/server examples/client libopen62541.a open62541.h open62541.c
     cp open62541-osx.tar.gz ..
     cp open62541-osx.tar.gz ..
     cp open62541.h .. #copy single file-release
     cp open62541.h .. #copy single file-release
     cp open62541.c .. #copy single file-release
     cp open62541.c .. #copy single file-release
@@ -26,20 +26,20 @@ else
 
 
     echo "Compile multithreaded version"
     echo "Compile multithreaded version"
     mkdir -p build && cd build
     mkdir -p build && cd build
-    cmake -DUA_ENABLE_MULTITHREADING=ON -DUA_BUILD_EXAMPLESERVER=ON ..
+    cmake -DUA_ENABLE_MULTITHREADING=ON -DUA_BUILD_EXAMPLES=ON ..
     make -j
     make -j
     cd .. && rm -rf build
     cd .. && rm -rf build
 
 
     echo "Compile without discovery version"
     echo "Compile without discovery version"
     mkdir -p build && cd build
     mkdir -p build && cd build
-    cmake -DUA_ENABLE_DISCOVERY=OFF -DUA_BUILD_EXAMPLESERVER=ON ..
+    cmake -DUA_ENABLE_DISCOVERY=OFF -DUA_BUILD_EXAMPLES=ON ..
     make -j
     make -j
     cd .. && rm -rf build
     cd .. && rm -rf build
 
 
     echo "Debug build and unit tests (64 bit)"
     echo "Debug build and unit tests (64 bit)"
     mkdir -p build && cd build
     mkdir -p build && cd build
-    cmake -DCMAKE_BUILD_TYPE=Debug -DUA_BUILD_DEMO_NODESET=ON -DUA_BUILD_UNIT_TESTS=ON -DUA_BUILD_EXAMPLESERVER=ON -DUA_ENABLE_COVERAGE=ON ..
-    make -j && make test
+    cmake -DCMAKE_BUILD_TYPE=Debug -DUA_BUILD_DEMO_NODESET=ON -DUA_BUILD_UNIT_TESTS=ON -DUA_BUILD_EXAMPLES=ON -DUA_ENABLE_COVERAGE=ON ..
+    make -j8 && make test
     echo "Run valgrind to see if the server leaks memory (just starting up and closing..)"
     echo "Run valgrind to see if the server leaks memory (just starting up and closing..)"
     (valgrind --error-exitcode=3 ./server & export pid=$!; sleep 2; kill -INT $pid; wait $pid);
     (valgrind --error-exitcode=3 ./server & export pid=$!; sleep 2; kill -INT $pid; wait $pid);
     cd .. && rm -rf build
     cd .. && rm -rf build