Browse Source

cleanup cmake (#681)

* cleanup cmake

* fix readspeed example

* adjust travis and appveyor; use static lib for release

* fix unit test build

* fix server path

* install check for analysis phase

* fix caching packages

* fix assignment

* fix if then

* fix a variable expansion

* add trace outputs to environment install

* more logging

* fixing.,.

* fix a rm

* fix a typo

* fix path

* notifications only for 0.2 and master

* add missing file

* clean osx before install

* fix notification setting

* fix python

* fix an unit test issue
Julius Pfrommer 8 years ago
parent
commit
33051eaed6

+ 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

+ 135 - 249
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)
-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")
+    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()
 
 
-############
-# 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)
@@ -138,23 +71,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
@@ -250,10 +240,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
@@ -265,11 +254,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)
@@ -278,8 +266,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)
 
 
@@ -288,10 +275,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
@@ -304,8 +291,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})
@@ -313,179 +299,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})
-
-    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()
-endif()
-
 if(UA_BUILD_DOCUMENTATION)
 if(UA_BUILD_DOCUMENTATION)
     add_subdirectory(doc)
     add_subdirectory(doc)
 endif()
 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()
+
+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()

+ 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

+ 53 - 36
examples/CMakeLists.txt

@@ -1,60 +1,77 @@
 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})
+
+####################
+# Feature Examples #
+####################
 
 
-add_executable(server_variable server_variable.c)
+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)
+add_executable(client_firstSteps client_firstSteps.c $<TARGET_OBJECTS:open62541-object>)
 target_link_libraries(client_firstSteps ${LIBS})
 target_link_libraries(client_firstSteps ${LIBS})
 
 
-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})
+add_executable(server_repeated_job server_repeated_job.c $<TARGET_OBJECTS:open62541-object>)
+target_link_libraries(server_repeated_job ${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)
 if(UA_ENABLE_METHODCALLS)
-  add_executable(server_method server_method.c)
+  add_executable(server_method server_method.c $<TARGET_OBJECTS:open62541-object>)
   target_link_libraries(server_method ${LIBS})
   target_link_libraries(server_method ${LIBS})
 endif()
 endif()
+
+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})

+ 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;
 }
 }

+ 0 - 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"

+ 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);

+ 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

+ 16 - 16
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 ..
+        cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-mingw32.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLES=ON ..
         make -j8
         make -j8
-        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
+        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 ..
+        cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-mingw64.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLES=ON ..
         make -j8
         make -j8
-        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
+        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 ..
+        cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/Toolchain-gcc-m32.cmake -DUA_ENABLE_AMALGAMATION=ON -DCMAKE_BUILD_TYPE=Release -DUA_BUILD_EXAMPLES=ON ..
         make -j8
         make -j8
-        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
+        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 ..
+    cmake -DCMAKE_BUILD_TYPE=Release -DUA_ENABLE_AMALGAMATION=ON -DUA_BUILD_EXAMPLES=ON ..
     make -j8
     make -j8
-    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
+    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,17 +97,17 @@ 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_EXAMPLESERVER=ON -DUA_BUILD_EXAMPLES=ON ..
     make -j8
     make -j8
     cd .. && rm build -rf
     cd .. && rm build -rf
 
 
     #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 ..
+    cmake -DCMAKE_BUILD_TYPE=Debug -DUA_BUILD_EXAMPLES=ON -DUA_BUILD_UNIT_TESTS=ON -DUA_ENABLE_COVERAGE=ON ..
     make -j8 && make test ARGS="-V"
     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

+ 5 - 5
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 ..
+    cmake -DCMAKE_BUILD_TYPE=Release -DUA_ENABLE_AMALGAMATION=ON -DUA_BUILD_EXAMPLES=ON -DUA_BUILD_DOCUMENTATION=ON -DUA_GENERATE_SELFSIGNED=ON ..
     make -j8
     make -j8
-    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
+    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,13 +26,13 @@ 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 -j8
     make -j8
     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 ..
+    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
     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);