summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorStefan Radomski <github@mintwerk.de>2016-05-12 13:12:33 (GMT)
committerStefan Radomski <github@mintwerk.de>2016-05-12 13:12:33 (GMT)
commitb62e7979600feee23dc7cdb61042a8fc7673122b (patch)
treef7351372f37979dd2d048e0b68a16a4cd3b2aadb /CMakeLists.txt
parent1b11b310be61e51b3ac5ebb83f7c8a33aef3d6e8 (diff)
downloaduscxml-b62e7979600feee23dc7cdb61042a8fc7673122b.zip
uscxml-b62e7979600feee23dc7cdb61042a8fc7673122b.tar.gz
uscxml-b62e7979600feee23dc7cdb61042a8fc7673122b.tar.bz2
Major Refactoring v2.0
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt1581
1 files changed, 200 insertions, 1381 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 707e991..224d729 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,37 +1,4 @@
-cmake_minimum_required(VERSION 2.8.4)
-
-# TODO:
-# - Have a look at PGO:
-# https://mailman.videolan.org/pipermail/x265-devel/2015-April/007399.html
-
-cmake_policy(PUSH)
-if(POLICY CMP0042)
- # new behavior defaults to ON for MACOSX_RPATH
- cmake_policy(SET CMP0042 NEW)
-endif()
-if(POLICY CMP0045)
- # Error on non-existent target in get_target_property,
- # set to old as we actually use it to check for specific targets
- cmake_policy(SET CMP0045 OLD)
-endif()
-if(POLICY CMP0046)
- # Error on non-existent dependency in add_dependencies
- cmake_policy(SET CMP0046 NEW)
-endif()
-if(POLICY CMP0054)
- # Escape variables in if
- cmake_policy(SET CMP0054 OLD)
-endif()
-if(POLICY CMP0059)
- # Don't treat ``DEFINITIONS`` as a built-in directory property - required for cotire
- cmake_policy(SET CMP0059 OLD)
-endif()
-
-# specify USCXML version
-SET(USCXML_VERSION_MAJOR "0")
-SET(USCXML_VERSION_MINOR "4")
-SET(USCXML_VERSION_PATCH "0")
-SET(USCXML_VERSION ${USCXML_VERSION_MAJOR}.${USCXML_VERSION_MINOR}.${USCXML_VERSION_PATCH})
+cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
# build type has to be set before the project definition
SET(BUILD_TYPE_HELP "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug, Release, RelWithDebInfo, MinSizeRel.")
@@ -41,1353 +8,297 @@ ELSE()
SET(CMAKE_BUILD_TYPE Release CACHE STRING ${BUILD_TYPE_HELP})
ENDIF()
-project(uscxml)
-
-# where to find the cmake modules we distribute
-set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/contrib/cmake)
-include("${CMAKE_MODULE_PATH}/USCXMLMacros.cmake")
-include("${CMAKE_MODULE_PATH}/FunctionExists.cmake")
-include("${CMAKE_MODULE_PATH}/HeaderExists.cmake")
-include("${CMAKE_MODULE_PATH}/BinaryExists.cmake")
-include("${CMAKE_MODULE_PATH}/TryCompile.cmake")
-
-# CMake 2.8.11 reports AMD64 for Windows 64Bit, where earlier versions reported x86
-# we resolve it with a 64bit check later
-if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
- set(CMAKE_SYSTEM_PROCESSOR "x86")
-endif()
-if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386")
- set(CMAKE_SYSTEM_PROCESSOR "x86")
-endif()
-if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
- set(CMAKE_SYSTEM_PROCESSOR "x86")
-endif()
-
-# use folders in the IDEs for the various targets (e.g. Library, Testing, Tools ..)
-set_property(GLOBAL PROPERTY USE_FOLDERS ON)
-
-# lower case version of system name and compiler for library paths
-string(TOLOWER ${CMAKE_SYSTEM_NAME} CMAKE_SYSTEM_NAME_LC)
-string(TOLOWER ${CMAKE_CXX_COMPILER_ID} CMAKE_CXX_COMPILER_ID_LC)
-
-if (WIN32)
- set(CMAKE_CXX_COMPILER_ID_LC ${CMAKE_CXX_COMPILER_ID_LC}${MSVC_VERSION})
-endif()
-
-############################################################
-# Search paths for cross compiling and prebuilds
-############################################################
-
-# this happens when we ssh into windows to build there, see also:
-# http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r1/index.jsp?topic=/com.ibm.websphere.ops.doc/info/odoe_task/tcimgr_sshwin.html
-if (NOT CMAKE_SYSTEM_PROCESSOR)
- set(CMAKE_SYSTEM_PROCESSOR x86)
-endif()
-
-# is this a 64Bit host?
-if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(64BIT_HOST ON)
- set(64BIT_LIB_POSTFIX 64)
- set(64BIT_SUFFIX "_64")
- # additional library paths to be searched
- set(FIND_LIBRARY_USE_LIB64_PATHS ON)
-# LIST(APPEND CMAKE_FIND_ROOT_PATH "/usr/local/lib64")
-# LIST(APPEND CMAKE_FIND_ROOT_PATH "/usr/lib64")
-endif()
-
-if (APPLE)
- set(LIBCPP_NAME "libstdc++") # before mavericks
- # get MacOSX version
- execute_process(COMMAND /usr/bin/sw_vers -productVersion
- OUTPUT_VARIABLE MACOSX_VERSION
- ERROR_VARIABLE MACOSX_VERSION_errors
- RESULT_VARIABLE MACOSX_VERSION_result
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if (MACOSX_VERSION)
- THREE_PART_VERSION_TO_VARS(
- ${MACOSX_VERSION}
- MACOSX_VERSION_MAJOR
- MACOSX_VERSION_MINOR
- MACOSX_VERSION_PATCH)
- endif()
- if (MACOSX_VERSION VERSION_GREATER "10.8.99")
- set(LIBCPP_NAME "libc++") # mavericks
- # LIST(APPEND CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT})
- # make sure that we find libxml2 here first
- set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT} ${CMAKE_FIND_ROOT_PATH})
- endif()
-endif()
-
-if (NOT $ENV{MACOSX_DEPLOYMENT_TARGET} STREQUAL ""
- AND ENV{MACOSX_DEPLOYMENT_TARGET} VERSION_LESS "10.9"
- AND MACOSX_VERSION VERSION_GREATER "10.8.99")
- message(WARNING "\nMACOSX_DEPLOYMENT_TARGET is set to $ENV{MACOSX_DEPLOYMENT_TARGET} implying libstdc++ instead of libc++ - linking against prebuilts from 10.8")
- set(MACOSX_VERSION_MINOR 8)
-endif()
-
-# We use the toolchain file from http://code.google.com/p/android-cmake/
-if (CMAKE_CROSSCOMPILING AND ANDROID_ABI)
- set(ANDROID ON)
- set(CMAKE_CROSSCOMPILING_TARGET android)
- set(CMAKE_SYSTEM_VERSION ${ANDROID_NATIVE_API_LEVEL})
-endif()
-
-if (CMAKE_CROSSCOMPILING)
- if (IOS)
- add_definitions(-DTARGET_OS_IPHONE)
- elseif(IOSSIM)
- add_definitions(-DTARGET_IPHONE_SIMULATOR)
- endif()
-endif()
-
-#
-# Setting the CMAKE_FIND_ROOT_PATH to a list of directories will cause all CMake modules
-# to look in these directories in addition to the system search paths:
-# http://www.vtk.org/Wiki/CMake_Cross_Compiling#Searching_and_finding_external_software
-#
-
-
-#
-# determine platform id
-#
-SET(USCXML_PLATFORM_ID)
-if (CMAKE_SYSTEM_NAME_LC)
- set(USCXML_PLATFORM_ID ${CMAKE_SYSTEM_NAME_LC})
-else()
- set(USCXML_PLATFORM_ID "unknown")
-endif()
-
-if (CMAKE_SYSTEM_PROCESSOR)
- set(USCXML_PLATFORM_ID "${USCXML_PLATFORM_ID}-${CMAKE_SYSTEM_PROCESSOR}${64BIT_SUFFIX}")
-else()
- set(USCXML_PLATFORM_ID "unknown")
-endif()
-
-if (CMAKE_CXX_COMPILER_ID_LC)
- set(USCXML_PLATFORM_ID "${USCXML_PLATFORM_ID}-${CMAKE_CXX_COMPILER_ID_LC}")
-endif()
-
-if (LIBCPP_NAME)
- set(USCXML_PLATFORM_ID "${USCXML_PLATFORM_ID}-${LIBCPP_NAME}")
-endif()
-
-# handle cross compiles
-if (CMAKE_CROSSCOMPILING)
- if (IOS)
- SET(USCXML_PLATFORM_ID "ios-arm-clang")
- SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY "ONLY")
- elseif (ANDROID)
- # handle mips, x86 and arm
- SET(USCXML_PLATFORM_ID "android-${ANDROID_ABI}")
-
- SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY "ONLY") # we need both to find jni - we don't?
- SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM "BOTH")
- SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE "BOTH")
-
- LIST(APPEND CMAKE_PREFIX_PATH "/usr/local/bin") # this is needed to find swig
- LIST(APPEND CMAKE_PREFIX_PATH "/opt/local/bin") # this is needed to find protoc
- endif()
-endif()
-
-SET(USCXML_PREBUILT_LIBRARY_PATH)
-SET(USCXML_PREBUILT_HEADER_PATH "${PROJECT_SOURCE_DIR}/contrib/prebuilt")
-SET(USCXML_PREBUILT_LIBRARY_PATH "${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_PLATFORM_ID}")
-
-SET(USCXML_LIBRARY_HOST_URL_PREFIX "http://uscxml.tk.informatik.tu-darmstadt.de/prebuilt" CACHE STRING "The root path of an URL where to look for prebuilt libraries." FORCE)
-SET(USCXML_LIBRARY_ARCHIVE_NAME "uscxml-prebuilt-${USCXML_PLATFORM_ID}.tgz")
-
-#
-# Download platform independent headers
-#
-
-# delete if too old or unversioned
-if (EXISTS "${PROJECT_SOURCE_DIR}/contrib/prebuilt/include/VERSION.txt")
- file (STRINGS "${PROJECT_SOURCE_DIR}/contrib/prebuilt/include/VERSION.txt" PREBUILT_INCUDES_VERSION)
-endif()
-if (NOT "${USCXML_VERSION}" VERSION_EQUAL "${PREBUILT_INCUDES_VERSION}")
- message(STATUS "Prebuilt headers unversioned, too old or non-existent - deleting and downloading again")
- execute_process(
- COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_SOURCE_DIR}/contrib/prebuilt/include
- )
-endif()
-
-# download if not existing
-if (NOT EXISTS ${PROJECT_SOURCE_DIR}/contrib/prebuilt/include)
- message(STATUS "Downloading ${USCXML_LIBRARY_HOST_URL_PREFIX}/${USCXML_VERSION}/include.tgz")
-
- file(
- DOWNLOAD
- ${USCXML_LIBRARY_HOST_URL_PREFIX}/${USCXML_VERSION}/include.tgz
- ${PROJECT_SOURCE_DIR}/contrib/prebuilt/include.tgz
- INACTIVITY_TIMEOUT 60
- STATUS DOWNLOAD_STATUS
- SHOW_PROGRESS)
-
- list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
- list(GET DOWNLOAD_STATUS 1 STATUS_STRING)
- if(STATUS_CODE EQUAL 0)
- execute_process(
- COMMAND ${CMAKE_COMMAND} -E tar xzf ${PROJECT_SOURCE_DIR}/contrib/prebuilt/include.tgz
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/contrib/prebuilt/
- )
- execute_process(
- COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_SOURCE_DIR}/contrib/prebuilt/include.tgz
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/contrib/prebuilt/
- )
- file(WRITE ${PROJECT_SOURCE_DIR}/contrib/prebuilt/include/VERSION.txt "${USCXML_VERSION}")
- else()
- message(FATAL_ERROR "\nDownloading header files\nFAILED with ${STATUS_STRING} (${STATUS_CODE}) \nThis should not happen, retry?")
- endif()
-endif()
-
-#
-# Download platform dependent headers and libraries
-#
-
-# only delete if too old
-if (EXISTS "${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_PLATFORM_ID}/VERSION.txt")
- file (STRINGS "${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_PLATFORM_ID}/VERSION.txt" PREBUILT_LIBRARIES_VERSION)
- if (NOT "${USCXML_VERSION}" VERSION_EQUAL "${PREBUILT_LIBRARIES_VERSION}")
- message(STATUS "Prebuilt libraries unversioned, too old or non-existent - deleting and downloading again")
- execute_process(
- COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_PLATFORM_ID}
- )
- endif()
-endif()
-
-
-if (NOT EXISTS ${USCXML_PREBUILT_LIBRARY_PATH})
- message(STATUS "Cannot find prebuilt libraries in ${USCXML_PREBUILT_LIBRARY_PATH}")
- message(STATUS "Trying to download ${USCXML_LIBRARY_HOST_URL_PREFIX}/${USCXML_VERSION}/${USCXML_LIBRARY_ARCHIVE_NAME}")
- file(
- DOWNLOAD
- ${USCXML_LIBRARY_HOST_URL_PREFIX}/${USCXML_VERSION}/${USCXML_LIBRARY_ARCHIVE_NAME}
- ${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_LIBRARY_ARCHIVE_NAME}
- INACTIVITY_TIMEOUT 60
- STATUS DOWNLOAD_STATUS
- SHOW_PROGRESS)
-
- list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
- list(GET DOWNLOAD_STATUS 1 STATUS_STRING)
- if(STATUS_CODE EQUAL 0)
- # everything worked out fine! - create dir, unpack and delete
- file(MAKE_DIRECTORY ${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_PLATFORM_ID})
- execute_process(
- COMMAND ${CMAKE_COMMAND} -E tar xzf ${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_LIBRARY_ARCHIVE_NAME}
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_PLATFORM_ID}
- )
- execute_process(
- COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_LIBRARY_ARCHIVE_NAME}
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/contrib/prebuilt/
- )
- file(WRITE ${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_PLATFORM_ID}/VERSION.txt "${USCXML_VERSION}")
- elseif(
- NOT STATUS_CODE EQUAL 19 AND # FTP: Invalid file / file not found
- NOT STATUS_CODE EQUAL 22) # HTTP: HTTP response code
- # server was unreachable, do not create dir to retry
- message(FATAL_ERROR "\nDownloading prebuilt libraries\nFAILED with ${STATUS_STRING} (${STATUS_CODE}) \nThis should not happen, retry?")
- else()
- # we did not know the file, create dir for manual libs
- file(MAKE_DIRECTORY ${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_PLATFORM_ID})
- execute_process(
- COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_LIBRARY_ARCHIVE_NAME}
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/contrib/prebuilt/
- )
- message(FATAL_ERROR "\nPlatform is not supported!\nProvide headers and libraries in\n${PROJECT_SOURCE_DIR}/contrib/prebuilt/${USCXML_PLATFORM_ID}/")
- endif()
-endif()
+PROJECT(uscxml)
-if (CMAKE_CROSSCOMPILING)
- OPTION(BUILD_SHARED_LIBS "Build shared libraries" OFF)
- OPTION(ENABLE_COTIRE "Enable compile time reduction techniques" OFF)
-else()
- OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON)
-endif()
+#################################################
+# General Setup
+#################################################
-if (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
- OPTION(ENABLE_COTIRE "Enable compile time reduction techniques" OFF)
-else()
- OPTION(ENABLE_COTIRE "Enable compile time reduction techniques" ON)
-endif()
+# specify USCXML version
+SET(USCXML_VERSION_MAJOR "2")
+SET(USCXML_VERSION_MINOR "0")
+SET(USCXML_VERSION_PATCH "0")
+SET(USCXML_VERSION ${USCXML_VERSION_MAJOR}.${USCXML_VERSION_MINOR}.${USCXML_VERSION_PATCH})
-if (NOT BUILD_SHARED_LIBS)
- add_definitions("-DUSCXML_STATIC")
-endif()
+# where do libraries and binaries go
+set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-#
-# BUILD_PREFER_PREBUILT_LIBS:
-# Do we want to search system paths or contrib/prebuilt first?
-#
-if (CMAKE_CROSSCOMPILING)
- # always prefer prebuilt libraries for cross-compiling
- OPTION(BUILD_PREFER_PREBUILT_LIBS "Search libraries in contrib/prebuilt first" ON)
- SET(CMAKE_PREFIX_PATH "${USCXML_PREBUILT_LIBRARY_PATH};${USCXML_PREBUILT_HEADER_PATH};${CMAKE_PREFIX_PATH}")
-else()
- OPTION(BUILD_PREFER_PREBUILT_LIBS "Search libraries in contrib/prebuilt first" ON)
- if (BUILD_PREFER_PREBUILT_LIBS)
- # for everything, we start our search in contrib/prebuilt
- SET(CMAKE_PREFIX_PATH "${USCXML_PREBUILT_LIBRARY_PATH};${USCXML_PREBUILT_HEADER_PATH};${CMAKE_PREFIX_PATH}")
- else()
- # using this trick, we search paths from find_* before CMAKE_FIND_ROOT_PATH as '/' is prepended first
- SET(CMAKE_PREFIX_PATH "/;${CMAKE_PREFIX_PATH};${USCXML_PREBUILT_LIBRARY_PATH};${USCXML_PREBUILT_HEADER_PATH}")
- endif()
-endif()
-include_directories(${USCXML_PREBUILT_LIBRARY_PATH}/include)
-
-if (CMAKE_CROSSCOMPILING)
- set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CMAKE_PREFIX_PATH})
-endif()
-# message(STATUS "CMAKE_FIND_ROOT_PATH: ${CMAKE_FIND_ROOT_PATH}")
-# message(STATUS "CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}")
-# message(FATAL_ERROR "")
+# where to find more cmake scripts
+set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/contrib/cmake)
+include("${CMAKE_MODULE_PATH}/USCXMLMacros.cmake")
+# setup header include paths
+include_directories(src)
+include_directories(contrib/src)
+include_directories(${CMAKE_BINARY_DIR})
+include_directories(${PROJECT_SOURCE_DIR}/contrib/src/jsmn)
+include_directories(${PROJECT_SOURCE_DIR}/contrib/src/evws)
if (WIN32)
- set(BUILD_SHARED_LIBS OFF)
include_directories(${PROJECT_SOURCE_DIR}/contrib/src/getopt)
include_directories(${PROJECT_SOURCE_DIR}/contrib/src/inttypes)
endif()
-include_directories(${PROJECT_SOURCE_DIR}/contrib/src/jsmn)
-include_directories(${PROJECT_SOURCE_DIR}/contrib/src/evws)
-#include_directories(${PROJECT_SOURCE_DIR}/contrib/src/google-url)
-############################################################
-# General setup
-############################################################
-
-# enable testing and actual output with tests
-if (CMAKE_CROSSCOMPILING)
- OPTION(BUILD_TESTS "Build USCXML tests" OFF)
-else()
- OPTION(BUILD_TESTS "Build USCXML tests" ON)
- OPTION(BUILD_TESTS_W3C_ECMA "Create W3C ECMAScript tests" ON)
- OPTION(BUILD_TESTS_W3C_XPATH "Create W3C XPath tests" ON)
- OPTION(BUILD_TESTS_W3C_LUA "Create W3C Lua tests" ON)
- OPTION(BUILD_TESTS_W3C_PROLOG "Create W3C Prolog tests" ON)
- OPTION(BUILD_TESTS_W3C_PROMELA "Create W3C Promela tests" ON)
-
- OPTION(BUILD_TESTS_FSM "Build FSM converted W3C tests" OFF)
- OPTION(BUILD_TESTS_FSM_ECMA "Create FSM converted W3C ECMAScript tests" ON)
- OPTION(BUILD_TESTS_FSM_XPATH "Create FSM converted W3C XPath tests" ON)
- OPTION(BUILD_TESTS_FSM_LUA "Create FSM converted W3C Lua tests" ON)
- OPTION(BUILD_TESTS_FSM_PROLOG "Create FSM converted W3C Prolog tests" ON)
- OPTION(BUILD_TESTS_FSM_PROMELA "Create FSM converted W3C Promela tests" ON)
- OPTION(BUILD_TESTS_GENERATED_C "Create tests for generated C machines" ON)
-
-endif()
-OPTION(ENABLE_GCOV "Compile with gcov support" OFF)
-
-OPTION(BUILD_PROFILING "Build with profiling information" OFF)
-OPTION(BUILD_MINIMAL "Build only features mandated by specification" OFF)
+# various options
+# OPTION(BUILD_MINIMAL "Build only features mandated by specification" OFF)
OPTION(BUILD_DM_ECMA "Build with ECMAScript datamodel" ON)
-OPTION(BUILD_DM_XPATH "Build with XPath datamodel" ON)
-OPTION(BUILD_DM_PROLOG "Build with Prolog datamodel" ON)
-OPTION(BUILD_DM_PROMELA "Build with Promela datamodel" ON)
-OPTION(BUILD_DM_LUA "Build with Lua datamodel" ON)
-
-OPTION(BUILD_BINDING_JAVA "Build language bindings for Java" ON)
-OPTION(BUILD_BINDING_CSHARP "Build language bindings for CSharp" ON)
-OPTION(BUILD_BINDING_PHP "Build language bindings for PHP" OFF)
+# OPTION(BUILD_DM_XPATH "Build with XPath datamodel" OFF)
+# OPTION(BUILD_DM_PROLOG "Build with Prolog datamodel" OFF)
+# OPTION(BUILD_DM_PROMELA "Build with Promela datamodel" OFF)
+# OPTION(BUILD_DM_LUA "Build with Lua datamodel" OFF)
-# ccache:
-# http://stackoverflow.com/questions/1815688/how-to-use-ccache-with-cmake
-#
-# see also:
-# http://blogs.s-osg.org/a-conclusion-to-accelerating-your-build-with-clang/
-find_program(CCACHE_FOUND ccache)
-if(CCACHE_FOUND)
- set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
- set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
-endif(CCACHE_FOUND)
+################################
+# Compiler Features and Flags
+# Check for C++11 support
+# message("Your C++ compiler supports these C++ features:")
+# foreach(i ${CMAKE_CXX_COMPILE_FEATURES})
+# message("${i}")
+# endforeach()
-# a dummy target to depend on the targets needed for tests, see:
-# http://stackoverflow.com/questions/733475/cmake-ctest-make-test-doesnt-build-tests
-add_custom_target(ALL_TESTS COMMENT "Building all tests when BUILD_TESTS is enabled")
-if (BUILD_TESTS)
- enable_testing()
- SET(ENV{CTEST_OUTPUT_ON_FAILURE} ON)
+# http://stackoverflow.com/a/25836953/990120
+include(CheckCXXCompilerFlag)
+CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11_FLAG)
+CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X_FLAG)
+if(COMPILER_SUPPORTS_CXX11_FLAG)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+elseif(COMPILER_SUPPORTS_CXX0X_FLAG)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
endif()
-OPTION(DIST_PREPARE "Put libraries into the lib folder of the source tree" OFF)
-
-# we need USCXML_CORE_LIBS here for -lgcov
-set(USCXML_CORE_LIBS)
-set(USCXML_OPT_LIBS)
-set(USCXML_FILES)
-set(USCXML_TRANSFORM_FILES)
-set(USCXML_INCLUDE_DIRS)
+if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
-# some compiler flags
-#message("CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
-
-if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
- execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
-
- # best practices from scott meyers
- # add_definitions(-Weffc++)
-
- # order of arguments of gcc matters again
-# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
- add_definitions(-fPIC)
- #add_definitions(-Wunreachable-code)
-
- if (CMAKE_BUILD_TYPE MATCHES ".*Deb.*" AND ENABLE_GCOV) # when not building for debug
- # coverage information
- add_definitions(-fprofile-arcs)
- add_definitions(-ftest-coverage)
- list (APPEND USCXML_CORE_LIBS "gcov")
- endif()
-
- # all warnings
- add_definitions(-Wall)
-# add_definitions(-Wno-parentheses-equality)
- add_definitions(-Wno-attributes)
- add_definitions(-Wno-unused-variable)
-
- # we cannot tread warning as error with the "narrowing problem"
- # add_definitions(-Werror)
-
- if(GCC_VERSION VERSION_EQUAL 4.7 OR GCC_VERSION VERSION_GREATER 4.7)
- # when compiling as C++11, narrowing is a warning but older compilers complain about the option
- add_definitions(-Wno-narrowing)
- endif()
-
- if(GCC_VERSION VERSION_EQUAL 4.8 OR GCC_VERSION VERSION_GREATER 4.8)
- add_definitions(-Wno-unused-local-typedefs)
- endif()
-
- # swig will throw a warning with optimization otherwise
- add_definitions(-fno-strict-aliasing)
- add_definitions("-Wno-unused-value -Wno-sign-compare")
-# add_definitions(-Wno-unused-function)
- if (NOT CMAKE_BUILD_TYPE MATCHES ".*Deb.*") # when not building for debug
- # add_definitions("-s")
- #set(CMAKE_CXX_FLAGS "-s") ## Strip binary for everything but debug builds
- # set(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections")
- # add_definitions("-mpreferred-stack-boundary=4")
- # add_definitions("-fmerge-constants")
- # add_definitions("-fno-rtti -DBOOST_NO_TYPEID")
- # add_definitions("-fno-exceptions")
- # add_definitions("-fno-inline")
- # add_definitions("-ffunction-sections -fdata-sections")
- else()
- add_definitions(-rdynamic)
- endif()
-elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
- add_definitions("-DZMQ_STATIC")
- add_definitions("-DPCRE_STATIC")
- add_definitions("-DUMUNDO_STATIC")
+elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
+
+elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
add_definitions("-D_SCL_SECURE_NO_WARNINGS")
add_definitions("-D_CRT_SECURE_NO_WARNINGS")
- add_definitions("/bigobj")
-
- # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GL") # /LTCG is implied with /GL.
-
- # be very clear about linking debug / non-debug C++ runtimes
- foreach(FLAGS CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE CMAKE_MODULE_LINKER_FLAGS_RELEASE)
- set(${FLAGS} "${${FLAGS}} /ignore:4099 /NODEFAULTLIB:MSVCRTD")
- endforeach()
-
- # use static MSVCRT
- # if (NOT BUILD_AS_PLUGINS)
- # foreach(FLAGS
- # CMAKE_C_FLAGS
- # CMAKE_CXX_FLAGS
- # CMAKE_C_FLAGS_DEBUG
- # CMAKE_C_FLAGS_MINSIZEREL
- # CMAKE_C_FLAGS_RELEASE
- # CMAKE_C_FLAGS_RELWITHDEBINFO
- # CMAKE_CXX_FLAGS_DEBUG
- # CMAKE_CXX_FLAGS_MINSIZEREL
- # CMAKE_CXX_FLAGS_RELEASE
- # CMAKE_CXX_FLAGS_RELWITHDEBINFO)
- # if(${FLAGS} MATCHES "/MD")
- # string(REGEX REPLACE "/MD" "/MT" ${FLAGS} "${${FLAGS}}")
- # endif()
- # endforeach()
- # endif()
-
-elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-parentheses-equality")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-string-plus-int")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-non-literal-null-conversion")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-null-conversion")
-
- # clang throws these for boost all over the place!
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs")
-
- #SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libstdc++")
-
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
- # set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -read_only_relocs suppress")
- # set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -read_only_relocs suppress")
-
- # not too sure when this happened, 'void' has to be qualified as 'std::type_info' on __cxa_throw
- if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.3)
- set(CXA_THROW_TYPEINFO_SIGNATURE ON)
- endif()
-
else()
- message(FATAL_ERROR "Unknown compiler: ${CMAKE_CXX_COMPILER_ID}")
+ message(STATUS "Unknown compiler: ${CMAKE_CXX_COMPILER_ID}")
endif()
-
set(CMAKE_COMPILER_STRING "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
-if (APPLE)
-# set(CMAKE_OSX_ARCHITECTURES "i386;x86_64")
-endif()
-
-# see http://www.mail-archive.com/cmake@cmake.org/msg23240.html
-if (APPLE)
- if (MACOSX_VERSION VERSION_LESS "10.9")
- # figure out what to do with Mavericks (10.9) later
- # add_definitions("-D_DARWIN_UNLIMITED_SELECT")
- # support leopard and above
- set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
- foreach(FLAGS CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS)
- set(${FLAGS} "${${FLAGS}} -stdlib=libstdc++ -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
- endforeach()
- else()
- set(CMAKE_OSX_DEPLOYMENT_TARGET 10.7)
- foreach(FLAGS CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS)
- set(${FLAGS} "${${FLAGS}} -stdlib=libc++ -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
- endforeach()
- endif()
-endif()
-
-# if (APPLE AND MACOSX_VERSION VERSION_GREATER "10.9.99")
-# set(CMAKE_OSX_DEPLOYMENT_TARGET 10.10) # ?
-# foreach(FLAGS CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS)
-# set(${FLAGS} "${${FLAGS}} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch x86_64")
-# # we get "Illegal Instruction: 4" errors without on yosemite?!
-# # set(${FLAGS} "${${FLAGS}} -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk")
-# endforeach()
-# endif()
-
-if (IOS)
- if (${CMAKE_GENERATOR} STREQUAL "Xcode")
- else()
- set(CMAKE_OSX_DEPLOYMENT_TARGET 4.3)
- foreach(FLAGS CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS)
- set(${FLAGS} "${${FLAGS}} -miphoneos-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
- endforeach()
- endif()
-endif()
-
-############################################################
-# postfixes for all built targets depending on build type
-############################################################
-
-SET(CMAKE_DEBUG_POSTFIX "${64BIT_LIB_POSTFIX}_d")
-SET(CMAKE_RELEASE_POSTFIX "${64BIT_LIB_POSTFIX}")
-SET(CMAKE_RELWITHDEBINFO_POSTFIX "${64BIT_LIB_POSTFIX}_rd")
-SET(CMAKE_MINSIZEREL_POSTFIX "${64BIT_LIB_POSTFIX}_s")
-
-SET(CMAKE_LIBRARY_POSTFIX ${CMAKE_${BUILD_TYPE}_POSTFIX})
-
-if (UNIX)
- add_definitions(-DHAVE_SYS_SOCKET_H)
-endif()
-
-############################################################
-# Library location, type and linking
-############################################################
-
-# built shared or static libraries?
-if(BUILD_SHARED_LIBS)
- add_definitions("-DUSCXML_EXPORT")
-else()
- add_definitions("-DUSCXML_STATIC")
-endif()
-
-# file(GLOB
-# GURL_SOURCE ${PROJECT_SOURCE_DIR}/contrib/src/google-url/googleurl/src/*.cc
-# GURL_SOURCE ${PROJECT_SOURCE_DIR}/contrib/src/google-url/googleurl/src/*.h)
-# list(APPEND USCXML_FILES ${GURL_SOURCE})
-# list(APPEND USCXML_FILES ${PROJECT_SOURCE_DIR}/contrib/src/google-url/base/string16.cc)
-
-
-# library suffix order
-if (IOS)
- LIST(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".dylib")
-endif()
-set(CMAKE_FIND_LIBRARY_SUFFIXES_SHARED ${CMAKE_FIND_LIBRARY_SUFFIXES})
-set(CMAKE_FIND_LIBRARY_SUFFIXES_STATIC .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
-
-if(BUILD_PREFER_STATIC_LIBRARIES)
- SET(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_STATIC})
-endif()
-SET(CMAKE_FIND_LIBRARY_SUFFIXES_ORIG ${CMAKE_FIND_LIBRARY_SUFFIXES})
-
-# where should libraries end up?
-if (DIST_PREPARE)
- if (CMAKE_CROSSCOMPILING)
- string(TOLOWER ${CMAKE_CROSSCOMPILING_TARGET} CMAKE_CROSSCOMPILING_TARGET_LC)
- set(OUTPUT_DIR
- ${PROJECT_SOURCE_DIR}/package/cross-compiled/${CMAKE_CROSSCOMPILING_TARGET_LC}-${CMAKE_SYSTEM_VERSION}/${CMAKE_SYSTEM_PROCESSOR})
- else()
- set(OUTPUT_DIR
- ${PROJECT_SOURCE_DIR}/package/${USCXML_PLATFORM_ID}/${CMAKE_CXX_COMPILER_ID_LC})
- endif()
-else()
- set(OUTPUT_DIR ${PROJECT_BINARY_DIR})
-endif()
-
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${OUTPUT_DIR}/bin" )
-set( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${OUTPUT_DIR}/lib" )
-set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${OUTPUT_DIR}/lib" )
-# do not override configuration specific outputs
-# foreach( OUTPUT_CONFIG ${CMAKE_CONFIGURATION_TYPES} )
-# string( TOUPPER ${OUTPUT_CONFIG} OUTPUT_CONFIG )
-# set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUT_CONFIG} "${OUTPUT_DIR}/bin" )
-# set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUT_CONFIG} "${OUTPUT_DIR}/lib" )
-# set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUT_CONFIG} "${OUTPUT_DIR}/lib" )
-# endforeach()
-
-OPTION(BUILD_AS_PLUGINS "Build invokers, ioprocessors and datamodels as plugins" OFF)
-
-if (BUILD_AS_PLUGINS)
- add_definitions("-DBUILD_AS_PLUGINS")
- include_directories("src/uscxml/plugins")
-# list(APPEND USCXML_FILES "src/uscxml/plugins/Plugins.cpp")
-endif()
-
-# this is where the config.h ends up
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-include_directories(src)
-
-############################################################
-# Dependent libraries
-############################################################
-
-if (NOT WIN32)
- # libxml2
- set(CMAKE_FIND_FRAMEWORK "LAST")
-
- # message("CMAKE_FIND_LIBRARY_SUFFIXES: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
- # message("CMAKE_SYSTEM_PREFIX_PATH: ${CMAKE_SYSTEM_PREFIX_PATH}")
- # message("CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
- # message("CMAKE_SYSTEM_INCLUDE_PATH: ${CMAKE_SYSTEM_INCLUDE_PATH}")
- # message("CMAKE_SYSTEM_LIBRARY_PATH: ${CMAKE_SYSTEM_LIBRARY_PATH}")
- # message("CMAKE_SYSTEM_PROGRAM_PATH: ${CMAKE_SYSTEM_PROGRAM_PATH}")
- # message("CMAKE_FIND_ROOT_PATH: ${CMAKE_FIND_ROOT_PATH}")
-
- # MacOSX Mavericks moved libxml2 into SDK
- if (APPLE AND "${MACOSX_VERSION}" VERSION_LESS "10.9.0")
- set(PC_LIBXML_INCLUDEDIR "/usr/include/libxml2/")
- endif()
+# https://cmake.org/Bug/view.php?id=15361
+set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_CXX11_STANDARD_COMPILE_OPTION})
- find_package(LibXml2 REQUIRED)
- include_directories(${LIBXML2_INCLUDE_DIR})
- list (APPEND USCXML_CORE_LIBS ${LIBXML2_LIBRARIES})
- set(XML_LIBRARIES ${LIBXML2_LIBRARIES})
- list (APPEND USCXML_CORE_LIBS "dl")
- list (APPEND USCXML_CORE_LIBS "pthread")
- if (APPLE)
- find_library(CORELOCATION_LIBRARY CoreLocation)
- if (CORELOCATION_LIBRARY AND OFF)
- list (APPEND USCXML_OPT_LIBS ${CORELOCATION_LIBRARY}/CoreLocation)
- set(CORELOCATION_FOUND ON)
- endif()
- endif()
- if (IOS)
- find_library(COREFOUNDATION_LIBRARY CoreFoundation)
- list (APPEND USCXML_CORE_LIBS ${COREFOUNDATION_LIBRARY}/CoreFoundation)
- find_library(SECURITY_LIBRARY Security)
- list (APPEND USCXML_CORE_LIBS ${SECURITY_LIBRARY}/Security)
- list (APPEND USCXML_CORE_LIBS "z")
- elseif(APPLE)
- find_library(APP_SERVICES_LIBRARY ApplicationServices)
- find_library(COREFOUNDATION_LIBRARY CoreFoundation)
- find_library(FOUNDATION_LIBRARY Foundation)
- list (APPEND USCXML_CORE_LIBS ${APP_SERVICES_LIBRARY})
- list (APPEND USCXML_CORE_LIBS ${COREFOUNDATION_LIBRARY})
- list (APPEND USCXML_CORE_LIBS ${FOUNDATION_LIBRARY})
- endif()
-elseif(WIN32)
- list (APPEND XML_LIBRARIES "Ws2_32")
- list (APPEND XML_LIBRARIES "Winmm")
- list (APPEND XML_LIBRARIES "Iphlpapi")
- list (APPEND XML_LIBRARIES "Netapi32")
- list (APPEND USCXML_CORE_LIBS ${XML_LIBRARIES})
-endif()
-
-# ICU
-# find_package(ICU REQUIRED)
-# include_directories(${ICU_INCLUDE_DIRS})
-# list (APPEND USCXML_CORE_LIBS ${ICU_LIBRARIES})
-
-# CURL
-find_package(CURL REQUIRED)
-include_directories(${CURL_INCLUDE_DIRS})
-list (APPEND USCXML_CORE_LIBS ${CURL_LIBRARIES})
-if (WIN32)
- add_definitions("-DCURL_STATICLIB")
-endif()
include(CheckCXXSourceCompiles)
-
-set(CMAKE_REQUIRED_INCLUDES ${CURL_INCLUDE_DIRS})
-set(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBRARIES})
-
check_cxx_source_compiles("
- #include <curl/curl.h>
- int main(){return CURLOPT_MAIL_RCPT; }
-" CURL_HAS_SMTP)
-
-set(CMAKE_REQUIRED_INCLUDES)
-set(CMAKE_REQUIRED_LIBRARIES)
-
-# GLOG
-# set(ENV{GLOG_SRC} ${CMAKE_SOURCE_DIR}/../glog)
-find_package(GLOG REQUIRED)
-include_directories(${GLOG_INCLUDE_DIR})
-list (APPEND USCXML_CORE_LIBS ${GLOG_LIBRARY})
-add_definitions(-DGLOG_NO_ABBREVIATED_SEVERITIES)
+ #include <thread>
+ int main(){ return 0; }
+" CXX_HAS_THREADS)
+check_cxx_source_compiles("
+ #include <memory>
+ int main(){ std::shared_ptr<void> foo(NULL); return 0; }
+" CXX_HAS_SHARED_PTR)
+check_cxx_source_compiles("
+ int main(){ int foo[10]; auto i = foo[0]; }
+" CXX_HAS_AUTOTYPE)
+check_cxx_source_compiles("
+ int main(){ []{}(); }
+" CXX_HAS_LAMBDAS)
-# ARABICA
-# set($ENV{ARABICA_SRC} ${PROJECT_SOURCE_DIR}/../arabica)
-find_package(Arabica REQUIRED)
-include_directories(${ARABICA_INCLUDE_DIR})
-list (APPEND USCXML_CORE_LIBS ${ARABICA_LIBRARY})
-if (WIN32)
- add_definitions("-DUSE_MSXML")
+set(CXX_MISSING_FEATURES "")
+if (NOT CXX_HAS_LAMBDAS)
+ set(CXX_MISSING_FEATURES "${CXX_MISSING_FEATURES} lambdas")
endif()
-
-# BOOST - header only
-FIND_PATH(Boost_INCLUDE_DIR boost/version.hpp)
-include_directories(${Boost_INCLUDE_DIR})
-
-# LIBEVENT
-#set(ENV{EVENT_SRC} ${CMAKE_SOURCE_DIR}/../libevent)
-find_package(EVENT REQUIRED)
-include_directories(${EVENT_INCLUDE_DIR})
-list (APPEND USCXML_CORE_LIBS ${EVENT_LIBRARY})
-#set(EVENT_SSL_FOUND OFF) # deactivate for now
-
-#################################################
-# Optional libraries
-
-OPTION(DISABLE_ALL "Ignore all optional libraries" OFF)
-if (BUILD_MINIMAL)
- SET(DISABLE_ALL ON)
+if(NOT CXX_HAS_THREADS)
+ set(CXX_MISSING_FEATURES "${CXX_MISSING_FEATURES} threads")
endif()
-
-if (APPLE OR IOS)
- OPTION(DISABLE_AUDIOTOOLBOX "Ignore AudioToolbox" OFF)
- if (NOT DISABLE_AUDIOTOOLBOX AND NOT DISABLE_ALL)
- find_library(AUDIOTOOLBOX AudioToolbox REQUIRED)
- if (MACOSX_VERSION VERSION_GREATER "10.10.99")
- # header files were moved it seems
- list (APPEND USCXML_OPT_LIBS ${AUDIOTOOLBOX})
- else()
- list (APPEND USCXML_OPT_LIBS ${AUDIOTOOLBOX}/AudioToolbox)
- endif()
- set(AUDIOTOOLBOX_FOUND ON)
- else()
- set(AUDIOTOOLBOX_FOUND OFF)
- endif()
- find_library(FOUNDATION_LIBRARY Foundation)
- if (MACOSX_VERSION VERSION_GREATER "10.10.99")
- list (APPEND USCXML_OPT_LIBS ${FOUNDATION_LIBRARY})
- else()
- list (APPEND USCXML_OPT_LIBS ${FOUNDATION_LIBRARY}/Foundation)
- endif()
-
- if (IOS)
- find_library(WTF_LIBRARY WTF)
- find_library(ICU_LIBRARY icucore REQUIRED)
- list (APPEND USCXML_OPT_LIBS ${WTF_LIBRARY})
- list (APPEND USCXML_OPT_LIBS ${ICU_LIBRARY})
- endif()
-
+if(NOT CXX_HAS_AUTOTYPE)
+ set(CXX_MISSING_FEATURES "${CXX_MISSING_FEATURES} autotype")
endif()
-
-OPTION(DISABLE_JSC "Ignore JavaScriptCore" OFF)
-if (NOT DISABLE_JSC AND NOT DISABLE_ALL AND NOT ECMA_FOUND)
- find_package(JSC)
- if (JSC_FOUND)
- set(ECMA_FOUND ON)
- if (NOT APPLE)
- include_directories(${JSC_INCLUDE_DIR})
- endif()
- list (APPEND USCXML_OPT_LIBS ${JSC_LIBRARY})
- endif()
-else()
- set(JSC_FOUND OFF)
+if(NOT CXX_HAS_SHARED_PTR)
+ set(CXX_MISSING_FEATURES "${CXX_MISSING_FEATURES} shared_ptr")
endif()
-OPTION(DISABLE_V8 "Ignore Google's v8" OFF)
-if (NOT DISABLE_V8 AND NOT DISABLE_ALL AND NOT ECMA_FOUND)
- find_package(V8)
- if (V8_FOUND)
- set(ECMA_FOUND ON)
- include_directories(${V8_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${V8_LIBRARY})
- endif()
-else()
- set(V8_FOUND OFF)
+if (CXX_MISSING_FEATURES)
+ message(FATAL_ERROR "Compiler is missing required C++11 features: ${CXX_MISSING_FEATURES}")
endif()
-OPTION(DISABLE_SPIDERMONKEY "Ignore SpiderMonkey" ON)
-if (NOT DISABLE_SPIDERMONKEY AND NOT DISABLE_ALL AND NOT ECMA_FOUND)
- find_package(SpiderMonkey)
- if (SPIDERMONKEY_FOUND)
- set(ECMA_FOUND ON)
- include_directories(${SPIDERMONKEY_INCLUDE_DIR})
- if (UNIX)
- add_definitions(-DXP_UNIX)
- endif()
- list (APPEND USCXML_OPT_LIBS ${SPIDERMONKEY_LIBRARY})
- endif()
+if (CMAKE_CROSSCOMPILING OR WIN32)
+ OPTION(BUILD_SHARED_LIBS "Build shared libraries" OFF)
else()
- set(SPIDERMONKEY_FOUND OFF)
+ OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON)
endif()
-
-OPTION(DISABLE_LUA "Ignore Lua" OFF)
-if (NOT DISABLE_LUA AND NOT DISABLE_ALL)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED})
- find_package(Lua)
- if (LUA_FOUND)
- include_directories (${LUA_INCLUDE_DIR})
- include_directories(${PROJECT_SOURCE_DIR}/contrib/src/LuaBridge)
- list (APPEND USCXML_OPT_LIBS ${LUA_LIBRARIES})
- endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
+# built shared or static libraries?
+if(BUILD_SHARED_LIBS)
+ add_definitions("-DUSCXML_EXPORT")
else()
- set(LUA_FOUND OFF)
+ add_definitions("-DUSCXML_STATIC")
endif()
-OPTION(DISABLE_SSL "Ignore OpenSSL" OFF)
-if (NOT DISABLE_SSL AND NOT DISABLE_ALL)
- find_package(OpenSSL)
- if (OPENSSL_FOUND)
- set(OPENSSL_HAS_ELIPTIC_CURVES OFF)
- include_directories(${OPENSSL_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${OPENSSL_LIBRARIES})
- if (EXISTS ${OPENSSL_INCLUDE_DIR}/openssl/ec.h)
- set(OPENSSL_HAS_ELIPTIC_CURVES ON)
- endif()
- endif()
-else()
- set(OPENSSL_FOUND OFF)
-endif()
-if (EVENT_SSL_FOUND AND OPENSSL_FOUND)
- list (APPEND USCXML_CORE_LIBS ${OPENSSL_LIBRARIES})
-endif()
+#################################################
+# Dependent Libraries
+#################################################
-OPTION(DISABLE_SWI "Ignore SWI Prolog" OFF)
-if (NOT DISABLE_SWI AND NOT DISABLE_ALL)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED})
- find_package(SWI)
- if (SWI_FOUND)
- if (SWI_CPP_INCLUDE_DIR)
- include_directories(${SWI_CPP_INCLUDE_DIR})
- else()
- include_directories(${PROJECT_SOURCE_DIR}/contrib/src/swi-pl)
- endif()
- include_directories(${SWI_INCLUDE_DIR})
- if (BUILD_PREFER_STATIC_LIBRARIES)
- find_package(GMP)
- find_package(Curses)
- if (GMP_FOUND AND CURSES_FOUND)
- list (APPEND USCXML_OPT_LIBS ${SWI_LIBRARY} ${GMP_LIBRARY} ${CURSES_LIBRARIES})
- else()
- message("Not building datamodel with static SWI without NCurses and GMP")
- set(SWI_FOUND OFF)
- endif()
- else()
- list (APPEND USCXML_OPT_LIBS ${SWI_LIBRARY})
- endif()
- endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
-else()
- set(SWI_FOUND OFF)
-endif()
+################################
+# Required
-OPTION(DISABLE_SQLITE "Ignore Sqlite3" OFF)
-if (NOT DISABLE_SQLITE AND NOT DISABLE_ALL)
- find_package(Sqlite3)
- if (SQLITE3_FOUND)
- endif()
-else()
- set(SQLITE3_FOUND OFF)
-endif()
-OPTION(DISABLE_FFMPEG "Ignore FFMpeg" OFF)
-if (NOT DISABLE_FFMPEG AND NOT DISABLE_ALL)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED})
- find_package(FFMPEG)
- if (FFMPEG_FOUND)
- include_directories (${FFMPEG_INCLUDE_DIRS})
- list (APPEND USCXML_OPT_LIBS ${FFMPEG_LIBRARIES})
- # required with static ffmpeg builds
- # set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-Bsymbolic")
- endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
+# CURL
+find_package(CURL)
+if (CURL_FOUND)
+ include_directories(${CURL_INCLUDE_DIRS})
+ list (APPEND USCXML_CORE_LIBS ${CURL_LIBRARIES})
+
+ include(CheckCXXSourceCompiles)
+ set(CMAKE_REQUIRED_INCLUDES ${CURL_INCLUDE_DIRS})
+ set(CMAKE_REQUIRED_LIBRARIES ${CURL_LIBRARIES})
+ check_cxx_source_compiles("
+ #include <curl/curl.h>
+ int main(){ return CURLOPT_MAIL_RCPT; }
+ " CURL_HAS_SMTP)
else()
- set(FFMPEG_FOUND OFF)
-endif()
-
-OPTION(DISABLE_ICAL "Ignore iCal" OFF)
-if (NOT DISABLE_ICAL AND NOT DISABLE_ALL)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED})
- find_package(LIBICAL)
- if (LIBICAL_FOUND)
- include_directories (${LIBICAL_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${LIBICAL_LIBRARIES})
+ message(STATUS "--> will download and compile")
+ include("${CMAKE_MODULE_PATH}/BuildLibCURL.cmake")
+ if (LIBCURL_BUILT)
+ include_directories(${LIBCURL_INCLUDE_DIR})
+ list (APPEND USCXML_CORE_LIBS ${LIBCURL_LIBRARY})
+ set(CURL_HAS_SMTP ON)
+ else()
+ message(FATAL_ERROR "Could neither find nor build CURL")
endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
-
-else()
- set(LIBICAL_FOUND OFF)
endif()
-OPTION(DISABLE_WEBRTC "Ignore libjingle (WebRTC)" OFF)
-if (NOT DISABLE_WEBRTC AND NOT DISABLE_ALL)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED})
- if (NOT DEFINED ENV{LIBJINGLE_ROOT_DIR})
- set(ENV{LIBJINGLE_ROOT_DIR} "/Users/sradomski/Documents/TK/Code/webrtc-work/trunk")
- endif()
- find_package(LibJingle)
- if (LIBJINGLE_FOUND)
- include_directories (${LIBJINGLE_INCLUDE_DIRS})
- list (APPEND USCXML_OPT_LIBS ${LIBJINGLE_LIBRARIES})
- endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
-else()
- set(LIBJINGLE_FOUND OFF)
-endif()
-OPTION(DISABLE_EXPECT "Ignore TCL/Expect" OFF)
-if (NOT DISABLE_EXPECT AND NOT DISABLE_ALL)
- find_package(Expect)
- find_package(TCL)
- if (EXPECT_FOUND AND TCL_FOUND)
- include_directories (${EXPECT_INCLUDE_DIR})
- include_directories (${TCL_INCLUDE_PATH})
- list (APPEND USCXML_OPT_LIBS ${EXPECT_LIBRARY})
- list (APPEND USCXML_OPT_LIBS ${TCL_LIBRARY})
- endif()
+# XercesC
+CheckHasModule(XercesC)
+if (HAS_MODULE_XercesC)
+ find_package(XercesC)
else()
- set(EXPECT_FOUND OFF)
- set(TCL_FOUND OFF)
+ message(STATUS "Could NOT find XercesC (your CMake distribution does not include the FindXercesC module)")
endif()
-
-OPTION(DISABLE_LIBPURPLE "Ignore libpurple (instant messaging)" OFF)
-if (NOT DISABLE_LIBPURPLE AND NOT DISABLE_ALL)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED})
- find_package(LibPurple)
- if (LIBPURPLE_FOUND)
- find_package(ICONV)
- find_package(GLIB2)
- find_package(GObject)
- if (GLIB2_FOUND AND ICONV_FOUND AND GOBJECT_FOUND)
- include_directories (${LIBPURPLE_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${LIBPURPLE_LIBRARY})
- include_directories (${GLIB2_INCLUDE_DIRS})
- list (APPEND USCXML_OPT_LIBS ${GLIB2_LIBRARIES})
- include_directories (${ICONV_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${ICONV_LIBRARIES})
- include_directories (${GOBJECT_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${GOBJECT_LIBRARIES})
- else()
- set(LIBPURPLE_FOUND OFF)
- endif()
- endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
+if (XercesC_FOUND)
+ include_directories(${XercesC_INCLUDE_DIRS})
+ list (APPEND USCXML_CORE_LIBS ${XercesC_LIBRARIES})
else()
- set(LIBPURPLE_FOUND OFF)
-endif()
-
-OPTION(DISABLE_UMUNDO "Ignore uMundo" OFF)
-if (NOT DISABLE_UMUNDO AND NOT DISABLE_ALL)
- if (WIN32)
- find_package(UMUNDO COMPONENTS convenience)
+ message(STATUS "--> will download and compile")
+ include("${CMAKE_MODULE_PATH}/BuildXercesC.cmake")
+ if (XercesC_BUILT)
+ include_directories(${XercesC_INCLUDE_DIRS})
+ list (APPEND USCXML_CORE_LIBS ${XercesC_LIBRARIES})
else()
- find_package(UMUNDO COMPONENTS rpc serial core)
- # find_package(UMUNDO COMPONENTS convenience)
+ message(FATAL_ERROR "Could neither find nor build XercesC")
endif()
- if (UMUNDO_FOUND)
- include_directories (${UMUNDO_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${UMUNDO_LIBRARIES})
- # add_definitions("-DUMUNDO_STATIC")
- endif()
-else()
- set(UMUNDO_FOUND OFF)
endif()
-OPTION(DISABLE_OSG "Ignore OpenSceneGraph" OFF)
-if (NOT DISABLE_OSG AND NOT DISABLE_ALL)
- if (UNIX)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED}) # link dynamically!
- elseif(WIN32)
- if (ENV{OSG_ROOT} STREQUAL "")
- set(ENV{OSG_ROOT} "C:/Program Files/OpenSceneGraph-3.0.1")
- endif()
- endif()
- find_package(OpenSceneGraph COMPONENTS osgViewer osgGA osgText osgFX osgManipulator osgDB osgUtil OpenThreads)
- find_package(OpenGL)
- if (OPENSCENEGRAPH_FOUND AND OPENGL_FOUND)
- include_directories (${OPENSCENEGRAPH_INCLUDE_DIRS})
- include_directories (${OPENGL_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${OPENSCENEGRAPH_LIBRARIES} ${OPENGL_LIBRARIES})
- endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
+# LibEvent
+find_package(LibEvent)
+if (LIBEVENT_FOUND)
+ include_directories(${LIBEVENT_INCLUDE_DIR})
+ list (APPEND USCXML_CORE_LIBS ${LIBEVENT_LIBRARIES})
else()
- set(OPENSCENEGRAPH_FOUND OFF)
- set(OPENGL_FOUND OFF)
-endif()
-
-OPTION(DISABLE_OPENAL "Ignore OpenAL" OFF)
-if (NOT DISABLE_OPENAL AND NOT DISABLE_ALL)
- set(CMAKE_FIND_FRAMEWORK "FIRST")
- find_package(OpenAL)
- if (OPENAL_FOUND)
- list (APPEND USCXML_INCLUDE_DIRS ${OPENAL_INCLUDE_DIR})
- if (APPLE OR IOS)
- if (MACOSX_VERSION VERSION_GREATER "10.10.99")
- list (APPEND USCXML_OPT_LIBS ${OPENAL_LIBRARY})
- else()
- list (APPEND USCXML_OPT_LIBS ${OPENAL_LIBRARY}/OpenAL)
- endif()
- else()
- list (APPEND USCXML_OPT_LIBS ${OPENAL_LIBRARY})
- endif()
+ message(STATUS "--> will download and compile")
+ include("${CMAKE_MODULE_PATH}/BuildLibEvent.cmake")
+ if (LIBEVENT_BUILT)
+ include_directories(${LIBEVENT_INCLUDE_DIR})
+ list (APPEND USCXML_CORE_LIBS ${LIBEVENT_LIBRARIES})
else()
- find_package(OpenALKCAT)
- if (OPENAL_FOUND)
- list (APPEND USCXML_INCLUDE_DIRS ${OPENAL_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${OPENAL_LIBRARY})
- endif()
+ message(FATAL_ERROR "Could neither find nor build libevent")
endif()
- set(CMAKE_FIND_FRAMEWORK "LAST")
-else()
- set(OPENAL_FOUND OFF)
endif()
-if (NOT AUDIOTOOLBOX_FOUND)
- OPTION(DISABLE_LIBSNDFILE "Ignore libsndfile" OFF)
- if (NOT DISABLE_LIBSNDFILE AND NOT DISABLE_ALL)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED})
- find_package(LIBSNDFILE)
- if (LIBSNDFILE_FOUND)
- list (APPEND USCXML_INCLUDE_DIRS ${LIBSNDFILE_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${LIBSNDFILE_LIBRARY})
- endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
- else()
- set(LIBSNDFILE_FOUND OFF)
- endif()
-endif()
-
-OPTION(DISABLE_MILES "Ignore miles" OFF)
-if (NOT DISABLE_MILES AND NOT DISABLE_ALL)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED})
- find_package(MILES)
- #set(JPEG_ROOT_PATH "" CACHE STRING "Where to find libjpeg")
- if (MILES_FOUND)
- if (NOT WIN32)
- # openal is only needed for miles
- find_package(OpenAL)
- find_package(JPEG)
- find_package(ICONV)
-
- if (OPENAL_FOUND AND ICONV_FOUND AND JPEG_FOUND)
- include_directories (${MILES_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${MILES_LIBRARIES})
- include_directories (${ICONV_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${ICONV_LIBRARIES})
- include_directories (${JPEG_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${JPEG_LIBRARIES})
- include_directories (${OPENAL_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${OPENAL_LIBRARY})
- else()
- set(MILES_FOUND OFF)
- endif()
- else()
- include_directories (${MILES_INCLUDE_DIR})
- list (APPEND USCXML_OPT_LIBS ${MILES_LIBRARIES})
- endif()
- endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
-else()
- set(MILES_FOUND OFF)
+if (UNIX)
+ list (APPEND USCXML_CORE_LIBS "pthread")
endif()
-OPTION(DISABLE_PROTOBUF "Ignore protobuf" OFF)
-if (NOT DISABLE_PROTOBUF AND NOT DISABLE_ALL)
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SHARED})
- find_package(Protobuf)
- if (PROTOBUF_FOUND)
- include_directories(${PROTOBUF_INCLUDE_DIRS})
- LIST(APPEND USCXML_OPT_LIBS optimized ${PROTOBUF_LIBRARY})
- LIST(APPEND USCXML_OPT_LIBS debug ${PROTOBUF_LIBRARY_DEBUG})
- endif()
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIG})
+# uriparser
+include("${CMAKE_MODULE_PATH}/BuildURIParser.cmake")
+message(STATUS "Did not look for UriParser")
+message(STATUS "--> will download and compile")
+if (URIPARSER_BUILT)
+ include_directories(${URIPARSER_INCLUDE_DIR})
+ list (APPEND USCXML_CORE_LIBS ${URIPARSER_LIBRARY})
else()
- set(PROTOBUF_FOUND OFF)
+ message(FATAL_ERROR "Could not build uriparser")
endif()
-#################################################
-# Gather source files
-#################################################
-
-# we use include instead of add_subdirectory because
-# source groups do not work otherwise.
-SET(USCXML_INVOKERS)
-SET(USCXML_IOPROCESSORS)
-SET(USCXML_ELEMENTS)
-SET(USCXML_DATAMODELS)
-SET(USCXML_LANGUAGE_BINDINGS)
+################################
+# Optional
-include_directories(${USCXML_INCLUDE_DIRS})
-add_subdirectory(src/uscxml)
-if (WIN32)
- list(APPEND USCXML_FILES "${PROJECT_SOURCE_DIR}/contrib/src/getopt/getopt.c")
-# SET_SOURCE_FILES_PROPERTIES( ${PROJECT_SOURCE_DIR}/contrib/src/getopt/getopt.c PROPERTIES LANGUAGE CXX )
+# JavaScriptCore
+find_package(JSC)
+if (JSC_FOUND)
+ set(ECMA_FOUND ON)
+ if (NOT APPLE)
+ include_directories(${JSC_INCLUDE_DIR})
+ endif()
+ list (APPEND USCXML_OPT_LIBS ${JSC_LIBRARY})
endif()
-if (UNIX AND NOT APPLE)
- list (APPEND USCXML_CORE_LIBS "rt")
+find_package(V8)
+if (V8_FOUND)
+ set(ECMA_FOUND ON)
+ include_directories(${V8_INCLUDE_DIR})
+ list (APPEND USCXML_OPT_LIBS ${V8_LIBRARY})
endif()
-############################################################
-# Binaries and tests
-############################################################
-
-set(ALL_SOURCE_FILES ${USCXML_FILES} ${USCXML_TRANSFORM_FILES})
-list(SORT USCXML_FILES)
-list(SORT USCXML_TRANSFORM_FILES)
-# we cannot define source groups in sub directories!
-foreach( FILE ${ALL_SOURCE_FILES} )
- get_filename_component(PATH ${FILE} PATH)
- get_filename_component(NAME ${FILE} NAME)
-
- # if (${NAME} MATCHES "Factory.cpp")
- # set_property(SOURCE ${FILE} PROPERTY COMPILE_FLAGS -std=c++11)
- # endif()
- # if (${PATH} MATCHES ".*datamodel\\/ecmascript\\/v8\\/*")
- # set_property(SOURCE ${FILE} PROPERTY COMPILE_FLAGS -std=c++11)
- # # message(${FILE})
- # endif()
-
- if (${PATH} MATCHES ".*datamodel\\/ecmascript.*")
- STRING(REGEX MATCH "[^\\/]*$" COMP_NAME ${PATH})
- if (COMP_NAME STREQUAL "ecmascript")
- source_group("Datamodel\\EcmaScript" FILES ${FILE})
- else()
- source_group("Datamodel\\EcmaScript\\${COMP_NAME}" FILES ${FILE})
- endif()
- elseif (${PATH} MATCHES ".*datamodel\\/prolog.*")
- STRING(REGEX MATCH "[^\\/]*$" COMP_NAME ${PATH})
- source_group("Datamodel\\Prolog\\${COMP_NAME}" FILES ${FILE})
- elseif (${PATH} MATCHES ".*datamodel\\/promela.*")
- source_group("Datamodel\\Promela" FILES ${FILE})
- elseif (${PATH} MATCHES ".*datamodel\\/xpath.*")
- source_group("Datamodel\\XPath" FILES ${FILE})
- elseif (${PATH} MATCHES ".*datamodel\\/lua.*")
- source_group("Datamodel\\Lua" FILES ${FILE})
- elseif (${PATH} MATCHES ".*datamodel\\/null.*")
- source_group("Datamodel\\NULL" FILES ${FILE})
-
- elseif (${PATH} MATCHES ".*\\/invoker\\/.*")
- STRING(REGEX MATCH "[^\\/]*$" COMP_NAME ${PATH})
- source_group("Invoker\\${COMP_NAME}" FILES ${FILE})
-
- elseif (${PATH} MATCHES ".*\\/element\\/.*")
- STRING(REGEX MATCH "[^\\/]*$" COMP_NAME ${PATH})
- source_group("Element\\${COMP_NAME}" FILES ${FILE})
-
- elseif (${PATH} MATCHES ".*\\/ioprocessor\\/.*")
- STRING(REGEX MATCH "[^\\/]*$" COMP_NAME ${PATH})
- source_group("IOProcessor\\${COMP_NAME}" FILES ${FILE})
-
- # elseif (${PATH} MATCHES ".*\\/google-url\\/.*")
- # STRING(REGEX MATCH "[^\\/]*$" COMP_NAME ${PATH})
- # source_group("Interpreter\\URL" FILES ${FILE})
-
- elseif (${FILE} MATCHES ".*\\/debug\\/.*")
- source_group("Interpreter\\debug" FILES ${FILE})
- elseif (${FILE} MATCHES ".*\\/plugins\\/.*")
- source_group("Interpreter\\plugins" FILES ${FILE})
- elseif (${FILE} MATCHES ".*\\/transform\\/.*")
- # source_group("Interpreter\\transform" FILES ${FILE})
- elseif (${FILE} MATCHES ".*\\/util\\/.*")
- source_group("Interpreter\\util" FILES ${FILE})
- elseif (${FILE} MATCHES ".*\\/concurrency\\/.*")
- source_group("Interpreter\\concurrency" FILES ${FILE})
- elseif (${FILE} MATCHES ".*\\/server\\/.*")
- source_group("Interpreter\\server" FILES ${FILE})
- elseif (${FILE} MATCHES ".*\\/messages\\/.*")
- source_group("Interpreter\\messages" FILES ${FILE})
+find_package(Lua)
+if (LUA_FOUND)
+ include_directories (${LUA_INCLUDE_DIR})
+ include_directories(${PROJECT_SOURCE_DIR}/contrib/src/LuaBridge)
+ list (APPEND USCXML_OPT_LIBS ${LUA_LIBRARIES})
+endif()
- else ()
- source_group(Interpreter FILES ${FILE})
- endif()
-endforeach()
-# if (V8_FOUND AND BUILD_DM_ECMA)
-# set_property(SOURCE ${ALL_SOURCE_FILES} PROPERTY COMPILE_FLAGS -Wno-c++11-extensions)
+# if(APPLE)
+# find_library(APP_SERVICES_LIBRARY ApplicationServices)
+# find_library(COREFOUNDATION_LIBRARY CoreFoundation)
+# find_library(FOUNDATION_LIBRARY Foundation)
+# list (APPEND USCXML_CORE_LIBS ${APP_SERVICES_LIBRARY})
+# list (APPEND USCXML_CORE_LIBS ${COREFOUNDATION_LIBRARY})
+# list (APPEND USCXML_CORE_LIBS ${FOUNDATION_LIBRARY})
# endif()
-# add compile time reducer
-# see https://github.com/sakra/cotire
-if (ENABLE_COTIRE)
- include(cotire)
-endif()
-
-#
-# We cannot do this in subdirs?!
-#
+add_subdirectory(src/uscxml)
-if (NOT BUILD_MINIMAL)
- # include html template in source file
- find_program(XXD_BINARY xxd)
- if (XXD_BINARY)
- add_custom_command(
- OUTPUT ${CMAKE_SOURCE_DIR}/src/uscxml/plugins/invoker/xhtml/template/xhtml-invoker.inc.h
- COMMAND ${XXD_BINARY} -i template/xhtml-invoker.html template/xhtml-invoker.inc.h
- DEPENDS ${CMAKE_SOURCE_DIR}/src/uscxml/plugins/invoker/xhtml/template/xhtml-invoker.html
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/uscxml/plugins/invoker/xhtml
- COMMENT "Running xxd on uscxml/plugins/invoker/xhtml/template/xhtml-invoker.html"
- )
- LIST(APPEND USCXML_FILES ${CMAKE_SOURCE_DIR}/src/uscxml/plugins/invoker/xhtml/template/xhtml-invoker.inc.h)
- endif()
-endif()
+add_library(uscxml ${USCXML_FILES})
+set_property(TARGET uscxml PROPERTY CXX_STANDARD 11)
+set_property(TARGET uscxml PROPERTY CXX_STANDARD_REQUIRED ON)
+set_property(TARGET uscxml PROPERTY SOVERSION ${USCXML_VERSION})
-# build library
-if (BUILD_AS_PLUGINS)
- add_library(uscxml ${USCXML_FILES})
- target_link_libraries(uscxml ${USCXML_CORE_LIBS})
- set_target_properties(uscxml PROPERTIES COMPILE_FLAGS "-DUSCXML_EXPORT")
-# set_target_properties(uscxml PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS")
- add_definitions(-DPLUMA_EXPORTS)
-else()
- add_library(uscxml ${USCXML_FILES})
- target_link_libraries(uscxml ${USCXML_OPT_LIBS} ${USCXML_CORE_LIBS})
-endif()
-INSTALL_LIBRARY(TARGETS uscxml COMPONENT library)
+add_dependencies(uscxml libevent xerces-c)
+target_link_libraries(uscxml ${USCXML_OPT_LIBS} ${USCXML_CORE_LIBS})
add_library(uscxml_transform ${USCXML_TRANSFORM_FILES})
+set_property(TARGET uscxml_transform PROPERTY CXX_STANDARD 11)
+set_property(TARGET uscxml_transform PROPERTY CXX_STANDARD_REQUIRED ON)
+set_property(TARGET uscxml_transform PROPERTY SOVERSION ${USCXML_VERSION})
target_link_libraries(uscxml_transform uscxml)
-set_target_properties(uscxml_transform PROPERTIES PROJECT_LABEL "transform" FOLDER "uscxml")
-
-INSTALL_LIBRARY(TARGETS uscxml_transform COMPONENT library)
if (NOT CMAKE_CROSSCOMPILING)
- if (ENABLE_COTIRE)
- set_target_properties(uscxml PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT "src/uscxml/pch.h")
- set_target_properties(uscxml PROPERTIES COTIRE_ADD_UNITY_BUILD FALSE)
- cotire(uscxml)
- endif()
+ enable_testing()
+ add_subdirectory(test)
endif()
-if (NOT CMAKE_CROSSCOMPILING)
- if (WIN32)
- add_executable(uscxml-browser apps/uscxml-browser.cpp ${PROJECT_SOURCE_DIR}/contrib/src/getopt/getopt.c)
- else()
- add_executable(uscxml-browser apps/uscxml-browser.cpp)
- endif()
- target_link_libraries(uscxml-browser uscxml)
-
-
- if (NOT CMAKE_CROSSCOMPILING)
- if (ENABLE_COTIRE)
- set_target_properties(uscxml-browser PROPERTIES COTIRE_ADD_UNITY_BUILD FALSE)
- endif()
-# cotire(uscxml-browser)
- endif()
- set_target_properties(uscxml-browser PROPERTIES FOLDER "Apps")
- install_executable(TARGETS uscxml-browser COMPONENT tools)
-
- if (NOT BUILD_MINIMAL)
- if (WIN32)
- add_executable(uscxml-transform apps/uscxml-transform.cpp ${PROJECT_SOURCE_DIR}/contrib/src/getopt/getopt.c)
- else()
- add_executable(uscxml-transform apps/uscxml-transform.cpp)
- endif()
- target_link_libraries(uscxml-transform uscxml uscxml_transform)
- if (NOT CMAKE_CROSSCOMPILING)
- if (ENABLE_COTIRE)
- set_target_properties(uscxml-transform PROPERTIES COTIRE_ADD_UNITY_BUILD FALSE)
- endif()
- endif()
- set_target_properties(uscxml-transform PROPERTIES FOLDER "Apps")
- install_executable(TARGETS uscxml-transform COMPONENT tools)
-
- if (WIN32)
- add_executable(uscxml-analyze apps/uscxml-analyze.cpp ${PROJECT_SOURCE_DIR}/contrib/src/getopt/getopt.c)
- else()
- add_executable(uscxml-analyze apps/uscxml-analyze.cpp)
- endif()
- target_link_libraries(uscxml-analyze uscxml uscxml_transform)
- if (NOT CMAKE_CROSSCOMPILING)
- if (ENABLE_COTIRE)
- set_target_properties(uscxml-analyze PROPERTIES COTIRE_ADD_UNITY_BUILD FALSE)
- endif()
- endif()
- set_target_properties(uscxml-analyze PROPERTIES FOLDER "Apps")
- install_executable(TARGETS uscxml-analyze COMPONENT tools)
-
- if (WIN32)
- add_executable(uscxml-dot apps/uscxml-dot.cpp ${PROJECT_SOURCE_DIR}/contrib/src/getopt/getopt.c)
- else()
- add_executable(uscxml-dot apps/uscxml-dot.cpp)
- endif()
- target_link_libraries(uscxml-dot uscxml)
- if (NOT CMAKE_CROSSCOMPILING)
- if (ENABLE_COTIRE)
- set_target_properties(uscxml-dot PROPERTIES COTIRE_ADD_UNITY_BUILD FALSE)
- endif()
- endif()
- set_target_properties(uscxml-dot PROPERTIES FOLDER "Apps")
- install_executable(TARGETS uscxml-dot COMPONENT tools)
- endif()
-
- if (PROTOBUF_FOUND AND OFF)
- file(GLOB W3C-MMI-COMMON ${PROJECT_SOURCE_DIR}/apps/w3c-mmi/*.cpp ${PROJECT_SOURCE_DIR}/apps/w3c-mmi/*.h)
-
- file(GLOB_RECURSE W3C-MMI-IM ${PROJECT_SOURCE_DIR}/apps/w3c-mmi/im/*.cpp ${PROJECT_SOURCE_DIR}/apps/w3c-mmi/im/*.h)
- add_executable(uscxml-interaction-manager ${W3C-MMI-IM} ${W3C-MMI-COMMON})
- target_link_libraries(uscxml-interaction-manager uscxml)
- set_target_properties(uscxml-interaction-manager PROPERTIES FOLDER "Apps")
- install_executable(TARGETS uscxml-interaction-manager COMPONENT tools)
-
- file(GLOB_RECURSE W3C-MMI-MC ${PROJECT_SOURCE_DIR}/apps/w3c-mmi/mc/*.cpp ${PROJECT_SOURCE_DIR}/apps/w3c-mmi/mc/*.h)
- add_executable(uscxml-modality-component ${W3C-MMI-MC} ${W3C-MMI-COMMON})
- target_link_libraries(uscxml-modality-component uscxml)
- set_target_properties(uscxml-modality-component PROPERTIES FOLDER "Apps")
- install_executable(TARGETS uscxml-modality-component COMPONENT tools)
- endif()
-
- if (BUILD_TESTS)
- add_subdirectory(test)
- endif()
-
- add_subdirectory(src/bindings)
+if (WIN32)
+ add_executable(uscxml-browser apps/uscxml-browser.cpp ${PROJECT_SOURCE_DIR}/contrib/src/getopt/getopt.c)
+ add_executable(uscxml-transform apps/uscxml-transform.cpp ${PROJECT_SOURCE_DIR}/contrib/src/getopt/getopt.c)
+else()
+ add_executable(uscxml-browser apps/uscxml-browser.cpp)
+ add_executable(uscxml-transform apps/uscxml-transform.cpp)
endif()
+set_property(TARGET uscxml-browser PROPERTY CXX_STANDARD 11)
+set_property(TARGET uscxml-browser PROPERTY CXX_STANDARD_REQUIRED ON)
+set_property(TARGET uscxml-transform PROPERTY CXX_STANDARD 11)
+set_property(TARGET uscxml-transform PROPERTY CXX_STANDARD_REQUIRED ON)
-############################################################
-# Header Files
-############################################################
+target_link_libraries(uscxml-browser uscxml)
+target_link_libraries(uscxml-transform uscxml uscxml_transform)
-file(GLOB_RECURSE USCXML_HEADERS
- ${PROJECT_SOURCE_DIR}/src/*.h
- ${PROJECT_SOURCE_DIR}/src/*.hpp
- ${CMAKE_BINARY_DIR}/*.h)
-INSTALL_HEADERS(HEADERS ${USCXML_HEADERS} COMPONENT headers)
############################################################
# Create config.h
############################################################
-# determine path seperator to shorten filenames in Debug.cpp
+# determine path seperator
if (WIN32)
SET(PATH_SEPERATOR "\\\\")
else()
@@ -1400,103 +311,11 @@ elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_BUILD_TYPE_DEBUG ON)
endif()
-
-
# enable config.h style compile time options and add as "uscxml/config.h"
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/uscxml/config.h)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test/ctest/CTestCustom.ctest.in ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.ctest)
-############################################################
-# Some concluding remarks
-############################################################
-
-message(STATUS "Linking against external (check if you need to export in LD_LIBRARY_PATH or PATH):")
-set(SKIP_NEXT OFF)
-foreach(LIBRARY ${USCXML_OPT_LIBS})
- if (LIBRARY MATCHES "debug")
- if(CMAKE_BUILD_TYPE STREQUAL "Release")
- set(SKIP_NEXT ON)
- endif()
- elseif (LIBRARY MATCHES "optimized")
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- set(SKIP_NEXT ON)
- endif()
- elseif (LIBRARY MATCHES "uscxml.*")
- elseif (LIBRARY MATCHES ".*\\.framework.*")
- elseif (LIBRARY MATCHES "mmi_proto.*")
- else()
- if (NOT SKIP_NEXT)
- message(STATUS " ${LIBRARY}")
- else()
- set(SKIP_NEXT OFF)
- endif()
- endif()
-endforeach()
-
-message(STATUS "Targets:")
-message(STATUS " Available datamodels ........... : ${USCXML_DATAMODELS}")
-message(STATUS " Available invokers ............. : ${USCXML_INVOKERS}")
-message(STATUS " Available ioprocessors ......... : ${USCXML_IOPROCESSORS}")
-message(STATUS " Available custom elements ...... : ${USCXML_ELEMENTS}")
-message(STATUS " Available language bindings .... : ${USCXML_LANGUAGE_BINDINGS}")
-if (BUILD_SHARED_LIBS AND BUILD_BINDINGS)
- message(STATUS "")
- message(STATUS " Warning: Building language bindings BUILD_SHARED_LIBS=ON")
- message(STATUS " introduces runtime dependency to libuscxml")
- message(STATUS "")
-endif()
-
-message(STATUS "General information:")
-message(STATUS " Build type ..................... : ${CMAKE_BUILD_TYPE} for ${USCXML_PLATFORM_ID}")
-if (BUILD_SHARED_LIBS)
- if (BUILD_AS_PLUGINS)
- message(STATUS " Building library as ............ : SHARED with plugins")
- else()
- message(STATUS " Building library as ............ : SHARED without plugins")
- endif()
-else()
- if (BUILD_AS_PLUGINS)
- message(STATUS " Building library as ............ : STATIC with plugins")
- else()
- message(STATUS " Building library as ............ : STATIC without plugins")
- endif()
-endif()
-
-if (BUILD_PREFER_STATIC_LIBRARIES)
- message(STATUS " Preferring dependent libraries . : STATIC ")
-else()
- message(STATUS " Preferring dependent libraries . : SHARED")
-endif()
-
-if (BUILD_PREFER_PREBUILT_LIBS)
- STRING(REGEX REPLACE "${PROJECT_SOURCE_DIR}/" "" REL_USCXML_PREBUILT_LIBRARY_PATH ${USCXML_PREBUILT_LIBRARY_PATH})
- message(STATUS " Preferring dependent libraries . : from ${REL_USCXML_PREBUILT_LIBRARY_PATH}")
-else()
- message(STATUS " Preferring dependent libraries . : installed on system")
-endif()
-
-string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
-message(STATUS " CXX Flags : " ${CMAKE_CXX_FLAGS} " " ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UC}})
-message(STATUS " C Flags : " ${CMAKE_C_FLAGS} " " ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UC}})
-
-STRING(REGEX REPLACE "${CMAKE_BINARY_DIR}" "BUILD_DIR" REL_CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
-STRING(REGEX REPLACE "${CMAKE_SOURCE_DIR}" "SOURCE_DIR" REL_CMAKE_LIBRARY_OUTPUT_DIRECTORY ${REL_CMAKE_LIBRARY_OUTPUT_DIRECTORY})
-
-STRING(REGEX REPLACE "${CMAKE_BINARY_DIR}" "BUILD_DIR" REL_CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
-STRING(REGEX REPLACE "${CMAKE_SOURCE_DIR}" "SOURCE_DIR" REL_CMAKE_RUNTIME_OUTPUT_DIRECTORY ${REL_CMAKE_RUNTIME_OUTPUT_DIRECTORY})
-
-message(STATUS " Libraries will end up in ....... : " ${REL_CMAKE_LIBRARY_OUTPUT_DIRECTORY})
-message(STATUS " Binaries will end up in ........ : " ${REL_CMAKE_RUNTIME_OUTPUT_DIRECTORY})
-
-
-############################################################
-# Installation / Provide package target
-############################################################
-
-# see contrib/cmake/CPackUSCXML.cmake
-include(contrib/cmake/CPackUSCXML.cmake)
-
-cmake_policy(POP)
-
-# This must always be last!
-include(CPack)
+# get_cmake_property(_variableNames VARIABLES)
+# foreach (_variableName ${_variableNames})
+# message(STATUS "${_variableName}=${${_variableName}}")
+# endforeach()