1712 lines
49 KiB
Diff
1712 lines
49 KiB
Diff
diff -Naur a/atmellib/CMakeLists.txt b/atmellib/CMakeLists.txt
|
|
--- a/atmellib/CMakeLists.txt 2022-05-30 10:26:37.000000000 -0700
|
|
+++ b/atmellib/CMakeLists.txt 2023-10-28 09:03:00.892526682 -0700
|
|
@@ -21,6 +21,12 @@
|
|
PROPERTY
|
|
FOLDER
|
|
"Library")
|
|
+set_target_properties(vrpn_atmel
|
|
+ PROPERTIES
|
|
+ VERSION
|
|
+ ${CPACK_PACKAGE_VERSION}
|
|
+ SOVERSION
|
|
+ ${CPACK_PACKAGE_VERSION_MAJOR})
|
|
if(VRPN_INSTALL)
|
|
install(TARGETS
|
|
vrpn_atmel
|
|
diff -Naur a/CMakeLists.txt b/CMakeLists.txt
|
|
--- a/CMakeLists.txt 2022-05-30 10:26:37.000000000 -0700
|
|
+++ b/CMakeLists.txt 2023-10-28 09:03:00.891526671 -0700
|
|
@@ -1316,6 +1316,12 @@
|
|
PROPERTY
|
|
LINK_FLAGS
|
|
${SERVER_LINK_FLAGS})
|
|
+ set_target_properties(vrpnserver
|
|
+ PROPERTIES
|
|
+ VERSION
|
|
+ ${CPACK_PACKAGE_VERSION}
|
|
+ SOVERSION
|
|
+ ${CPACK_PACKAGE_VERSION_MAJOR})
|
|
|
|
if(UNIX)
|
|
add_subdirectory(atmellib)
|
|
@@ -1369,6 +1375,12 @@
|
|
PROPERTY
|
|
FOLDER
|
|
"Library")
|
|
+ set_target_properties(vrpn
|
|
+ PROPERTIES
|
|
+ VERSION
|
|
+ ${CPACK_PACKAGE_VERSION}
|
|
+ SOVERSION
|
|
+ ${CPACK_PACKAGE_VERSION_MAJOR})
|
|
|
|
if(VRPN_INSTALL)
|
|
install(TARGETS
|
|
diff -Naur a/CMakeLists.txt.orig b/CMakeLists.txt.orig
|
|
--- a/CMakeLists.txt.orig 1969-12-31 16:00:00.000000000 -0800
|
|
+++ b/CMakeLists.txt.orig 2022-05-30 10:26:37.000000000 -0700
|
|
@@ -0,0 +1,1565 @@
|
|
+cmake_minimum_required(VERSION 2.8.3)
|
|
+project(VRPN)
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# XXX Things to make better.
|
|
+#
|
|
+# Repeat for all other configurable headers/libraries - see below for a list
|
|
+# Move the shared-library code over to CMake's normal definition
|
|
+# Improve this CPack installer.
|
|
+
|
|
+###
|
|
+# Local CMake Modules - keep this first
|
|
+###
|
|
+list(APPEND CMAKE_MODULE_PATH ${VRPN_SOURCE_DIR}/cmake)
|
|
+include(UseBackportedModules)
|
|
+include(MSVCMultipleProcessCompile)
|
|
+include(CppcheckTargets)
|
|
+include(SetDefaultBuildType)
|
|
+include(OptionRequires)
|
|
+include(CTest)
|
|
+include(CheckIncludeFileCXX)
|
|
+
|
|
+if((NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) OR VRPN_SUBPROJECT_BUILD)
|
|
+ # If you're using this as a subproject and want things installed, set VRPN_INSTALL TRUE.
|
|
+ set(SUBPROJECT TRUE)
|
|
+ set(DEFAULT_OFF_IF_SUBPROJECT OFF_BY_DEFAULT)
|
|
+ set(TRUE_UNLESS_SUBPROJECT FALSE)
|
|
+ set(QUIET_IF_SUBPROJECT QUIET) # silently search for optional deps as a subproject
|
|
+ set(BUILD_TESTING FALSE) # don't build testing or create dashboard scripts if a subproject
|
|
+else()
|
|
+ set(VRPN_INSTALL TRUE)
|
|
+ set(SUBPROJECT FALSE)
|
|
+ set(DEFAULT_OFF_IF_SUBPROJECT)
|
|
+ set(TRUE_UNLESS_SUBPROJECT TRUE)
|
|
+ set(QUIET_IF_SUBPROJECT)
|
|
+ include(CreateDashboardScripts)
|
|
+endif()
|
|
+
|
|
+###
|
|
+# On Windows 7, it does not work to install in the default location,
|
|
+# which is the Program Files directory, because you have to not only have
|
|
+# file permission to write there but also "run as administrator." This
|
|
+# means that "make install" from a Visual Studio project fails. To get
|
|
+# around that, we need to set CMAKE_INSTALL_PREFIX to something other
|
|
+# than the default. However, it is a cache variable that has already been
|
|
+# set. If we make a local variable, it uses this rather than the cache
|
|
+# variable and never tells the poor user what happened (the GUI location
|
|
+# looks standard but the files end up somewhere else). If we make it a
|
|
+# non-forced cache variable, it already has a value so does not change.
|
|
+# If we make it a forced cache variable, it gets overwritten every time
|
|
+# and the user cannot change it on the GUI. So we have a workaround here.
|
|
+# We make a cache variable that records whether we have ever forced the
|
|
+# install prefix. If not, we force it. If so, we don't force it again.
|
|
+# This has the effect of setting it the first time cmake is run, showing
|
|
+# the change in the GUI, and also letting the user change the value in
|
|
+# the GUI if they don't like what we did. If I knew how to do this only
|
|
+# happen on Windows 7, I'd make the if(WIN32) more specific.
|
|
+if(WIN32 AND NOT SUBPROJECT)
|
|
+ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
|
|
+ AND
|
|
+ (NOT
|
|
+ ONCE_SET_CMAKE_INSTALL_PREFIX))
|
|
+ set(ONCE_SET_CMAKE_INSTALL_PREFIX
|
|
+ true
|
|
+ CACHE
|
|
+ INTERNAL
|
|
+ "Have we set the install prefix yet?"
|
|
+ FORCE)
|
|
+ set(CMAKE_INSTALL_PREFIX
|
|
+ C:/usr/local
|
|
+ CACHE
|
|
+ PATH
|
|
+ "Install path prefix, prepended onto install directories"
|
|
+ FORCE)
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+
|
|
+###
|
|
+# Basic packaging options and versioning
|
|
+
|
|
+if (VRPN_INSTALL)
|
|
+ include("${CMAKE_CURRENT_SOURCE_DIR}/ParseVersion.cmake")
|
|
+
|
|
+ message(STATUS
|
|
+ "Configuring the VRPN suite version ${CPACK_PACKAGE_VERSION} using the CMake-based build system\n")
|
|
+
|
|
+ set(CPACK_PACKAGE_VENDOR
|
|
+ "VRPN Community led by Sensics, Inc.")
|
|
+ set(CPACK_PACKAGE_FILE_NAME
|
|
+ "${PROJECT_NAME}-${CPACK_PACKAGE_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
|
|
+ set(CPACK_SOURCE_PACKAGE_FILE_NAME
|
|
+ "${PROJECT_NAME}-${CPACK_PACKAGE_VERSION}-src")
|
|
+ set(CPACK_PACKAGE_CONTACT "Sensics VRPN Contact <vrpn@sensics.com>")
|
|
+endif()
|
|
+
|
|
+if (NOT SUBPROJECT)
|
|
+ #-----------------------------------------------------------------------------
|
|
+ # Compiler flags we got from Hans for Windows and from Sheldon Andrews
|
|
+ # for other architectures.
|
|
+ if(MSVC) # MS-Windows Visual Studio, both 32 and 64 bits
|
|
+ set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
|
|
+ if(MSVC_VERSION GREATER 1310) # This compiler flag needs newer than VS.NET 2003 (7.1)
|
|
+ # Choose fast, possibly less accurate floating point
|
|
+ # See http://msdn.microsoft.com/en-us/library/e7s85ffb(v=vs.80).aspx
|
|
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fp:fast")
|
|
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast")
|
|
+ endif()
|
|
+
|
|
+ # Do not assume fixed base address (probably for DLL integration?)
|
|
+ # http://msdn.microsoft.com/en-us/library/w368ysh2(v=vs.80).aspx
|
|
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /FIXED:NO")
|
|
+ else()
|
|
+ # GCC compilers on 64-bit machines require -fPIC for shared libraries or libs
|
|
+ # linked into shared libraries.
|
|
+
|
|
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS}")
|
|
+ set(CMAKE_CXX_FLAGS
|
|
+ "${CMAKE_CXX_FLAGS} ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}")
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+set(SERVER_EXTRA_LIBS)
|
|
+set(SERVER_LINK_FLAGS)
|
|
+
|
|
+# Set up correct defines for Windows header compilation:
|
|
+# This theoretically sets the lower-bound on operating system compatibility
|
|
+# http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx
|
|
+# NT4 0x0400
|
|
+# Win2k 0x0500
|
|
+# WinXP 0x0501
|
|
+# WS2003SP1/WinXPSP2 0x0502
|
|
+# Vista 0x0600
|
|
+# Win7 0x0601
|
|
+# Win8 0x0602
|
|
+# Win8.1 0x0603 (though some docs say 0x0602 with NTDDI_VERSION 0x06030000)
|
|
+if(WIN32)
|
|
+ set(WIN_MIN_VER 0x0500) # Default to Windows 2000
|
|
+ if(MSVC AND MSVC_VERSION GREATER 1699)
|
|
+ # VS2012: defaults to vista+, update 1 added XP support in additional toolset.
|
|
+ if("${CMAKE_VS_PLATFORM_TOOLSET}" MATCHES "_xp")
|
|
+ set(WIN_MIN_VER 0x0501) # WinXP
|
|
+ else()
|
|
+ set(WIN_MIN_VER 0x0600) # Vista
|
|
+ endif()
|
|
+ endif()
|
|
+ add_definitions("-D_WIN32_WINNT=${WIN_MIN_VER}" "-DNTDDI_VERSION=${WIN_MIN_VER}0000")
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Options that control what gets built and how.
|
|
+
|
|
+if(NOT SUBPROJECT)
|
|
+ # We can build two configurations (passing defs to the compile lines) - which ones do we want?
|
|
+ # Note that we can build both now, if desired!
|
|
+ option(VRPN_BUILD_CLIENT_LIBRARY
|
|
+ "Build the vrpn library including only client code"
|
|
+ ON)
|
|
+ option(VRPN_BUILD_SERVER_LIBRARY
|
|
+ "Build the vrpnserver library including client and server code"
|
|
+ ON)
|
|
+
|
|
+ # Build various applications if we want them.
|
|
+ option(VRPN_BUILD_CLIENTS "Build VRPN client apps and tests" ON)
|
|
+ option(VRPN_BUILD_SERVERS "Build VRPN servers" ON)
|
|
+
|
|
+ # Development tools
|
|
+ if(MSVC_IDE AND MSVC_VERSION LESS 1600)
|
|
+ # VS 2012 Express and newer has folder support...
|
|
+ option(VRPN_BUILD_WITH_PROJECT_FOLDERS
|
|
+ "Use project folders in build system - not compatible with Visual C++ Express editions!"
|
|
+ OFF)
|
|
+ else()
|
|
+ set(VRPN_BUILD_WITH_PROJECT_FOLDERS ON)
|
|
+ endif()
|
|
+
|
|
+ set_property(GLOBAL
|
|
+ PROPERTY
|
|
+ USE_FOLDERS
|
|
+ ${VRPN_BUILD_WITH_PROJECT_FOLDERS})
|
|
+
|
|
+ # Set a default build type
|
|
+ set_default_build_type("RelWithDebInfo")
|
|
+
|
|
+endif()
|
|
+
|
|
+# Force use of our CMake-processed configuration header before the stock one.
|
|
+include_directories("${PROJECT_BINARY_DIR}")
|
|
+
|
|
+
|
|
+# Include directory needed by all of the files
|
|
+include_directories(${VRPN_SOURCE_DIR}
|
|
+ ${VRPN_SOURCE_DIR}/atmellib
|
|
+ ${VRPN_SOURCE_DIR}/quat)
|
|
+
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Libraries we need to do our thing.
|
|
+#
|
|
+# CMake variables:
|
|
+# SERVER_EXTRA_LIBS - libraries to link against when building the server lib
|
|
+# EXTRA_LIBS - libraries to link against when building any VRPN lib
|
|
+#
|
|
+# Note that library linking is, by default, transitive:
|
|
+# Specify linking here (even though static libraries might not use it
|
|
+# directly - think of shared libs and your fellow developer) rather than
|
|
+# in the included apps.
|
|
+
|
|
+###
|
|
+# Quatlib
|
|
+###
|
|
+add_subdirectory(quat)
|
|
+list(APPEND EXTRA_LIBS quat)
|
|
+
|
|
+###
|
|
+# Threading (not on win32)
|
|
+###
|
|
+if(NOT WIN32)
|
|
+ find_package(Threads REQUIRED ${QUIET_IF_SUBPROJECT})
|
|
+ list(APPEND EXTRA_LIBS ${CMAKE_THREAD_LIBS_INIT})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Windows-specific (non-Cygwin) dependencies
|
|
+###
|
|
+if(WIN32 AND NOT UNIX)
|
|
+ # Winsock - needed for endianness conversion
|
|
+ list(APPEND EXTRA_LIBS ws2_32)
|
|
+
|
|
+ # Windows multimedia - needed for joywin32
|
|
+ list(APPEND EXTRA_LIBS winmm)
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Optional packages
|
|
+###
|
|
+if(NOT SUBPROJECT)
|
|
+ message(STATUS
|
|
+ "Now searching for auto-configurable optional packages...\n")
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Submodules - bundled libraries/sources
|
|
+###
|
|
+add_subdirectory(submodules)
|
|
+
|
|
+###
|
|
+# SWIG and Python Libs (for python wrappers)
|
|
+###
|
|
+find_package(SWIG ${QUIET_IF_SUBPROJECT})
|
|
+
|
|
+set(CurrentPythonSettings
|
|
+ "${VRPN_BUILD_PYTHON}${VRPN_BUILD_PYTHON_HANDCODED_2X}${VRPN_BUILD_PYTHON_HANDCODED_3X}")
|
|
+if(NOT CurrentPythonSettings STREQUAL _VRPN_PYTHON_SETTINGS)
|
|
+ set(vrpn_python_versionsearch)
|
|
+ set(vrpn_python_versionsearchargs)
|
|
+ if(VRPN_BUILD_PYTHON)
|
|
+ # Swig wants 2.x, I assume
|
|
+ set(vrpn_python_versionsearch 2)
|
|
+ set(Python_ADDITIONAL_VERSIONS "")
|
|
+ if(VRPN_BUILD_PYTHON_HANDCODED_3X)
|
|
+ message(FATAL_ERROR
|
|
+ "Can't build both SWIG (2.x) and hand-coded 3.x Python bindings. Disable either VRPN_BUILD_PYTHON or VRPN_BUILD_PYTHON_HANDCODED_3X.")
|
|
+ endif()
|
|
+ elseif(VRPN_BUILD_PYTHON_HANDCODED_3X
|
|
+ AND
|
|
+ VRPN_BUILD_PYTHON_HANDCODED_2X)
|
|
+ message(FATAL_ERROR
|
|
+ "Can't build handcoded Python bindings for both 2.x and 3.x versions. Pick one, please.")
|
|
+ elseif(VRPN_BUILD_PYTHON_HANDCODED_2X
|
|
+ AND
|
|
+ NOT
|
|
+ VRPN_BUILD_PYTHON_HANDCODED_3X)
|
|
+ set(vrpn_python_versionsearch 2)
|
|
+ set(Python_ADDITIONAL_VERSIONS "")
|
|
+ elseif(VRPN_BUILD_PYTHON_HANDCODED_3X
|
|
+ AND
|
|
+ NOT
|
|
+ VRPN_BUILD_PYTHON_HANDCODED_2X)
|
|
+ set(vrpn_python_versionsearch 3)
|
|
+ set(Python_ADDITIONAL_VERSIONS 3.4)
|
|
+ endif()
|
|
+ unset(PYTHON_INCLUDE_DIR CACHE)
|
|
+ unset(PYTHON_INCLUDE_DIR)
|
|
+ unset(PYTHON_LIBRARY CACHE)
|
|
+ unset(PYTHON_LIBRARY)
|
|
+
|
|
+ set(_VRPN_PYTHON_VERSIONSEARCH
|
|
+ ${vrpn_python_versionsearch}
|
|
+ CACHE
|
|
+ INTERNAL
|
|
+ ""
|
|
+ FORCE)
|
|
+ set(_VRPN_PYTHON_SETTINGS
|
|
+ ${CurrentPythonSettings}
|
|
+ CACHE
|
|
+ INTERNAL
|
|
+ ""
|
|
+ FORCE)
|
|
+endif()
|
|
+
|
|
+# Passing just the major version works with as desired multi-python-capable find module such
|
|
+# as in latest CMake (2.8.9)
|
|
+find_package(PythonLibs ${_VRPN_PYTHON_VERSIONSEARCH} ${QUIET_IF_SUBPROJECT})
|
|
+if(PYTHONLIBS_FOUND)
|
|
+ if(PYTHONLIBS_VERSION_STRING)
|
|
+ string(SUBSTRING
|
|
+ ${PYTHONLIBS_VERSION_STRING}
|
|
+ 0
|
|
+ 1
|
|
+ vrpn_python_majorver)
|
|
+ set(PYTHON${vrpn_python_majorver}_FOUND ON)
|
|
+ elseif(PYTHON_LIBRARY MATCHES "python([23])")
|
|
+ set(PYTHON${CMAKE_MATCH_1}_FOUND ON)
|
|
+ elseif(_VRPN_PYTHON_VERSIONSEARCH)
|
|
+ set(PYTHON${_VRPN_PYTHON_VERSIONSEARCH}_FOUND ON)
|
|
+ else()
|
|
+ message(STATUS
|
|
+ "Warning: found python but couldn't determine which version. Please set either VRPN_PYTHON_IS_3 or VRPN_PYTHON_IS_2")
|
|
+ option(VRPN_PYTHON_IS_3 "Python found is version 3.x" OFF)
|
|
+ option(VRPN_PYTHON_IS_2 "Python found is version 2.x" OFF)
|
|
+ if(VRPN_PYTHON_IS_3 AND VRPN_PYTHON_IS_2)
|
|
+ unset(VRPN_PYTHON_IS_2 CACHE)
|
|
+ unset(VRPN_PYTHON_IS_3 CACHE)
|
|
+ message(FATAL_ERROR
|
|
+ "If needed, please set either VRPN_PYTHON_IS_3 or VRPN_PYTHON_IS_2, not both!")
|
|
+ elseif(VRPN_PYTHON_IS_3)
|
|
+ set(PYTHON3_FOUND ON)
|
|
+ elseif(VRPN_PYTHON_IS_2)
|
|
+ set(PYTHON2_FOUND ON)
|
|
+ endif()
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+# If MSVC, and we don't have a debug lib, default to off, or the default (debug runtime) build is broken.
|
|
+if(MSVC AND NOT PYTHON_LIBRARY_DEBUG)
|
|
+ set(PYTHON_DEFAULT_OFF OFF_BY_DEFAULT)
|
|
+else()
|
|
+ set(PYTHON_DEFAULT_OFF ${DEFAULT_OFF_IF_SUBPROJECT})
|
|
+endif()
|
|
+option_requires(VRPN_BUILD_PYTHON
|
|
+ "Build VRPN Python 2.x SWIG-based bindings"
|
|
+ ${PYTHON_DEFAULT_OFF}
|
|
+ SWIG_FOUND
|
|
+ PYTHON2_FOUND)
|
|
+
|
|
+option_requires(VRPN_BUILD_PYTHON_HANDCODED_2X
|
|
+ "Build VRPN Python handcoded bindings for Python 2.x"
|
|
+ ${PYTHON_DEFAULT_OFF}
|
|
+ PYTHON2_FOUND)
|
|
+
|
|
+option_requires(VRPN_BUILD_PYTHON_HANDCODED_3X
|
|
+ "Build VRPN Python handcoded bindings for Python 3.x"
|
|
+ ${PYTHON_DEFAULT_OFF}
|
|
+ PYTHON3_FOUND)
|
|
+
|
|
+###
|
|
+# javac, jar, and javah (for java wrapper)
|
|
+###
|
|
+if(ANDROID AND DEFINED find_host_package)
|
|
+ find_host_package(Java COMPONENTS Development)
|
|
+ find_host_package(JNI)
|
|
+ find_host_program(JAVAH_EXECUTABLE NAMES javah)
|
|
+else()
|
|
+ find_package(Java COMPONENTS Development ${QUIET_IF_SUBPROJECT})
|
|
+ find_package(JNI ${QUIET_IF_SUBPROJECT})
|
|
+ find_program(JAVAH_EXECUTABLE NAMES javah)
|
|
+endif()
|
|
+mark_as_advanced(JAVAH_EXECUTABLE)
|
|
+option_requires(VRPN_BUILD_JAVA
|
|
+ "Build VRPN Java bindings"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ Java_JAVAC_EXECUTABLE
|
|
+ Java_JAR_EXECUTABLE
|
|
+ JNI_FOUND
|
|
+ JAVAH_EXECUTABLE)
|
|
+
|
|
+###
|
|
+# MPI
|
|
+###
|
|
+find_package(MPI ${QUIET_IF_SUBPROJECT})
|
|
+# XXX Safe to enable by default if we find it?
|
|
+option_requires(VRPN_USE_MPI
|
|
+ "Build with MPI support"
|
|
+ OFF_BY_DEFAULT
|
|
+ MPI_FOUND)
|
|
+
|
|
+if(VRPN_USE_MPI)
|
|
+ # XXX what else needs to be done here?
|
|
+ add_definitions(${MPI_COMPILE_FLAGS})
|
|
+ include_directories(${MPI_INCLUDE_PATH})
|
|
+ list(APPEND EXTRA_LIBS ${MPI_LIBRARIES})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Modbus library
|
|
+###
|
|
+find_package(Modbus ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_MODBUS
|
|
+ "Build with Modbus support"
|
|
+ OFF_BY_DEFAULT
|
|
+ MODBUS_FOUND)
|
|
+
|
|
+if(VRPN_USE_MODBUS)
|
|
+ # XXX what else needs to be done here?
|
|
+ include_directories(${MODBUS_INCLUDE_DIR})
|
|
+ list(APPEND EXTRA_LIBS ${MODBUS_LIBRARY})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Libusb1
|
|
+###
|
|
+find_package(Libusb1 ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_LIBUSB_1_0
|
|
+ "Attempt to use LibUSB-1.0 to talk directly to USB devices."
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ LIBUSB1_FOUND)
|
|
+
|
|
+if(VRPN_USE_LIBUSB_1_0)
|
|
+ include_directories(${LIBUSB1_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${LIBUSB1_LIBRARIES})
|
|
+endif()
|
|
+
|
|
+
|
|
+###
|
|
+# HID and HIDAPI
|
|
+###
|
|
+
|
|
+# Setting up the local HIDAPI was handled above, in the submodules directory
|
|
+if(NOT VRPN_USE_LOCAL_HIDAPI)
|
|
+ find_package(HIDAPI ${QUIET_IF_SUBPROJECT})
|
|
+endif()
|
|
+
|
|
+# HID requires either local or system-installed HIDAPI
|
|
+# Both set HIDAPI_FOUND, HIDAPI_LIBRARIES, and HIDAPI_INCLUDE_DIRS
|
|
+# If the user chose VRPN_USE_LOCAL_HIDAPI, the HIDAPI_SOURCES
|
|
+# variable, as included in the source list below, will also be set.
|
|
+option_requires(VRPN_USE_HID
|
|
+ "Build with support for HID devices using HIDAPI"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ HIDAPI_FOUND)
|
|
+
|
|
+if(VRPN_USE_HID)
|
|
+ include_directories(${HIDAPI_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${HIDAPI_LIBRARIES})
|
|
+ option(VRPN_BUILD_HID_GUI
|
|
+ "Should we build a GUI for analyzing live HID streams?"
|
|
+ OFF)
|
|
+ option(VRPN_HID_DEBUGGING
|
|
+ "Should verbose debugging messages be displayed during HID interactions?"
|
|
+ off)
|
|
+ if(VRPN_HID_DEBUGGING)
|
|
+ add_definitions(-DVRPN_HID_DEBUGGING)
|
|
+ endif()
|
|
+else()
|
|
+ # Clear this variable if they don't want HID after all.
|
|
+ if (VRPN_USE_LOCAL_HIDAPI)
|
|
+ message(STATUS
|
|
+ "NOTE: You have VRPN_USE_LOCAL_HIDAPI enabled, but "
|
|
+ "VRPN_USE_HID disabled: HIDAPI will only be built if you enable HID support for VRPN")
|
|
+ endif()
|
|
+ set(HIDAPI_SOURCES)
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Sensable "OpenHaptics" HDAPI/HLAPI
|
|
+###
|
|
+find_package(OpenHaptics ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_HDAPI
|
|
+ "Allow SensAble Phantom support through HDAPI/HLAPI - VRPN_USE_PHANTOM_SERVER must still be set"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ OPENHAPTICS_FOUND)
|
|
+if(VRPN_USE_HDAPI)
|
|
+ set(PHANTOM_POSSIBLE ON)
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Sensable GHOST
|
|
+###
|
|
+if(NOT VRPN_USE_HDAPI)
|
|
+ find_package(GHOST ${QUIET_IF_SUBPROJECT})
|
|
+ option_requires(VRPN_USE_GHOST
|
|
+ "Allow SensAble Phantom support through GHOST - VRPN_USE_PHANTOM_SERVER must still be set"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ GHOST_FOUND)
|
|
+ if(VRPN_USE_GHOST)
|
|
+ if(NOT ${GHOST_LIBRARIES} MATCHES ".*40.*")
|
|
+ message(STATUS "GHOST pre-4.0 detected - calling it 3.1.")
|
|
+ set(VRPN_USE_GHOST_31 ON)
|
|
+ endif()
|
|
+ set(PHANTOM_POSSIBLE ON)
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Sensable PHANToM Support - Overall Option
|
|
+###
|
|
+option_requires(VRPN_USE_PHANTOM_SERVER
|
|
+ "Build with SensAble Phantom support"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ PHANTOM_POSSIBLE)
|
|
+
|
|
+if(VRPN_USE_PHANTOM_SERVER)
|
|
+ if(VRPN_USE_HDAPI)
|
|
+ include_directories(${OPENHAPTICS_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${OPENHAPTICS_LIBRARIES})
|
|
+ else()
|
|
+ # VRPN_USE_GHOST
|
|
+ include_directories(${GHOST_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${GHOST_LIBRARIES})
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+
|
|
+###
|
|
+# libi2c-dev
|
|
+###
|
|
+find_package(libi2c-dev ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_I2CDEV
|
|
+ "Build devices requiring libi2c-dev"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ I2CDEV_FOUND)
|
|
+
|
|
+if(VRPN_USE_I2CDEV)
|
|
+ include_directories(AFTER ${I2CDEV_INCLUDE_DIRS})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# WiiUse
|
|
+###
|
|
+find_package(WiiUse ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_WIIUSE
|
|
+ "Build with WiiUse library support (makes servers GPL)"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ WIIUSE_FOUND)
|
|
+
|
|
+if(VRPN_USE_WIIUSE)
|
|
+ include_directories(${WIIUSE_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${WIIUSE_LIBRARIES})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# JsonCpp
|
|
+##
|
|
+## Setting up the local JSONCPP was handled above, in the submodules directory
|
|
+if(NOT VRPN_USE_LOCAL_JSONCPP)
|
|
+ find_package(JsonCpp ${QUIET_IF_SUBPROJECT})
|
|
+endif()
|
|
+option_requires(VRPN_USE_JSONNET
|
|
+ "Build with JSONCPP (for Android widgets and other UDP JSON-based APIs)"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ JSONCPP_FOUND)
|
|
+
|
|
+if(VRPN_USE_JSONNET)
|
|
+ include_directories(BEFORE ${JSONCPP_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${JSONCPP_LIBRARY})
|
|
+else()
|
|
+ set(JSONCPP_SOURCES)
|
|
+endif()
|
|
+
|
|
+###
|
|
+# libnifalcon
|
|
+###
|
|
+find_package(LibNifalcon ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_LIBNIFALCON
|
|
+ "Build with libnifalcon support to access Novint Falcon devices"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ LIBNIFALCON_FOUND)
|
|
+
|
|
+if(VRPN_USE_LIBNIFALCON)
|
|
+ include_directories(${LIBNIFALCON_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${LIBNIFALCON_LIBRARIES})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# DirectInput and XInput
|
|
+###
|
|
+if(WIN32)
|
|
+ find_package(DirectX ${QUIET_IF_SUBPROJECT})
|
|
+ option_requires(VRPN_USE_DIRECTINPUT
|
|
+ "Build with Microsoft DirectInput support"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ DIRECTX_DXGUID_LIBRARY
|
|
+ DIRECTX_DINPUT_LIBRARY
|
|
+ DIRECTX_DINPUT_INCLUDE_DIR
|
|
+ DIRECTX_SDK_SUPPORTS_COMPILER)
|
|
+ if(VRPN_USE_DIRECTINPUT)
|
|
+ include_directories(${DIRECTX_INCLUDE_DIRS})
|
|
+ list(APPEND
|
|
+ SERVER_EXTRA_LIBS
|
|
+ ${DIRECTX_DXGUID_LIBRARY}
|
|
+ ${DIRECTX_DINPUT_LIBRARY})
|
|
+ if(MSVC)
|
|
+ # Delay-load DirectInput DLL
|
|
+ # TODO is this always the right name
|
|
+ # TODO how to do this with MinGW? Can we? Do we need to?
|
|
+ list(APPEND SERVER_LINK_FLAGS "/DELAYLOAD:dinput8.dll")
|
|
+ list(APPEND SERVER_EXTRA_LIBS "delayimp.lib")
|
|
+ endif()
|
|
+ endif()
|
|
+
|
|
+ # XInput - enhanced API for XBOX 360 controllers and more.
|
|
+ find_directx_include(DIRECTX_XINPUT_INCLUDE_DIR
|
|
+ xinput.h)
|
|
+ option_requires(VRPN_USE_WINDOWS_XINPUT
|
|
+ "Build with Microsoft XInput support"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ DIRECTX_XINPUT_INCLUDE_DIR
|
|
+ DIRECTX_XINPUT_LIBRARY
|
|
+ DIRECTX_SDK_SUPPORTS_COMPILER) #TODO will this be a valid check here?
|
|
+ if(VRPN_USE_WINDOWS_XINPUT)
|
|
+ list(APPEND
|
|
+ SERVER_EXTRA_LIBS
|
|
+ ${DIRECTX_XINPUT_LIBRARY})
|
|
+ mark_as_advanced(DIRECTX_XINPUT_INCLUDE_DIR)
|
|
+
|
|
+ # Get name of DLL to delay-load.
|
|
+ include(GetDefineString)
|
|
+ get_define_string(NAME XINPUT_DLL
|
|
+ INCLUDES windows.h xinput.h
|
|
+ DEFINES "-D_WIN32_WINNT=${WIN_MIN_VER}"
|
|
+ INCLUDE_DIRS ${DIRECTX_DINPUT_INCLUDE_DIR} ${DIRECTX_XINPUT_INCLUDE_DIR}
|
|
+ RESULT VRPN_XINPUT_DLL)
|
|
+ if(VRPN_XINPUT_DLL AND MSVC)
|
|
+ # Delay-load XInput DLL
|
|
+ # TODO how to do this with MinGW? Can we? Do we need to?
|
|
+ list(APPEND SERVER_LINK_FLAGS "/DELAYLOAD:${VRPN_XINPUT_DLL}")
|
|
+ list(APPEND SERVER_EXTRA_LIBS "delayimp.lib")
|
|
+ endif()
|
|
+ endif()
|
|
+
|
|
+ # ATL is used for the vrpn_Tracker_zSight (which is based on DirectInput)
|
|
+ # to provide a smart pointer, but ATL isn't always available.
|
|
+ include(CheckIncludeFileCXX)
|
|
+ check_include_file_cxx(atlbase.h VRPN_HAVE_ATLBASE)
|
|
+endif()
|
|
+
|
|
+
|
|
+###
|
|
+# DirectShow
|
|
+###
|
|
+# Note that header removal makes this harder for VS10 and later - you need an earlier
|
|
+# version of MSVC also installed or an older Windows/Platform SDK with qedit.h in it.
|
|
+if(MSVC)
|
|
+ if(MSVC_VERSION GREATER 1500)
|
|
+ set(DIRECTSHOW_OFF_BY_DEFAULT OFF_BY_DEFAULT)
|
|
+ else()
|
|
+ set(DIRECTSHOW_OFF_BY_DEFAULT)
|
|
+ endif()
|
|
+ find_package(DirectShow ${QUIET_IF_SUBPROJECT})
|
|
+ option_requires(VRPN_USE_DIRECTSHOW
|
|
+ "Build with Microsoft DirectShow support"
|
|
+ ${DIRECTSHOW_OFF_BY_DEFAULT}
|
|
+ DIRECTSHOW_FOUND)
|
|
+ option_requires(VRPN_BUILD_DIRECTSHOW_VIDEO_SERVER
|
|
+ "Enable to build DirectShow Video Server (Windows)"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ VRPN_BUILD_DIRECTSHOW_VIDEO_SERVER
|
|
+ DIRECTSHOW_FOUND)
|
|
+endif()
|
|
+
|
|
+###
|
|
+# GPM
|
|
+###
|
|
+if(UNIX)
|
|
+ find_package(GPM ${QUIET_IF_SUBPROJECT})
|
|
+ option_requires(VRPN_USE_GPM_MOUSE
|
|
+ "Build with GPM Linux mouse interface support (makes servers GPL)"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ GPM_FOUND)
|
|
+endif()
|
|
+
|
|
+if(VRPN_USE_GPM_MOUSE)
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${GPM_LIBRARIES})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# INTERSENSE
|
|
+###
|
|
+find_package(InterSense ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_INCLUDE_INTERSENSE
|
|
+ "Build with InterSense support"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ INTERSENSE_FOUND)
|
|
+
|
|
+if(VRPN_INCLUDE_INTERSENSE)
|
|
+ include_directories(${INTERSENSE_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${INTERSENSE_LIBRARIES})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# THALMICLABSMYO
|
|
+###
|
|
+if(WIN32)
|
|
+ find_package(ThalmicLabsMyo ${QUIET_IF_SUBPROJECT})
|
|
+ option_requires(VRPN_INCLUDE_THALMICLABSMYO
|
|
+ "Build with Thalmic Labs' Myo support"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ THALMICLABSMYO_FOUND)
|
|
+ if(VRPN_INCLUDE_THALMICLABSMYO)
|
|
+ include_directories(${THALMICLABSMYO_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${THALMICLABSMYO_LIBRARIES})
|
|
+ add_definitions(-DVRPN_INCLUDE_THALMICLABSMYO)
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+###
|
|
+# NIDAQMX
|
|
+###
|
|
+find_package(NIDAQmx ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_NATIONAL_INSTRUMENTS_MX
|
|
+ "Build with National Instruments NIDAQMX support"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ NIDAQMX_FOUND)
|
|
+
|
|
+if(VRPN_USE_NATIONAL_INSTRUMENTS_MX)
|
|
+ include_directories(${NIDAQMX_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${NIDAQMX_LIBRARIES})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Arrington Research ViewPoint EyeTracker
|
|
+###
|
|
+find_package(ViewPoint ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_VIEWPOINT
|
|
+ "Build with support for ViewPoint EyeTracker"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ VIEWPOINT_FOUND)
|
|
+
|
|
+if(VRPN_USE_VIEWPOINT)
|
|
+ include_directories(${VIEWPOINT_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${VIEWPOINT_LIBRARIES})
|
|
+
|
|
+ # Needed for the config file, apparently - it was added to the non-CMake one.
|
|
+ get_filename_component(VRPN_VIEWPOINT_LIB_PATH
|
|
+ "${VIEWPOINT_LIBRARY}"
|
|
+ PATH)
|
|
+ file(TO_CMAKE_PATH
|
|
+ "${VRPN_VIEWPOINT_LIB_PATH}"
|
|
+ VRPN_VIEWPOINT_LIB_PATH)
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Adrienne timecode boards
|
|
+###
|
|
+if(WIN32 OR CYGWIN)
|
|
+ find_package(Adrienne ${QUIET_IF_SUBPROJECT})
|
|
+ option_requires(VRPN_INCLUDE_TIMECODE_SERVER
|
|
+ "Build with support for Adrienne timecode server"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ ADRIENNE_FOUND)
|
|
+else()
|
|
+ set(VRPN_INCLUDEE_TIMECODE_SERVER OFF)
|
|
+endif()
|
|
+
|
|
+if(VRPN_INCLUDE_TIMECODE_SERVER)
|
|
+ set(VRPN_ADRIENNE_INCLUDE_FILENAME "${ADRIENNE_INCLUDE_FILENAME}")
|
|
+ set(VRPN_ADRIENNE_INCLUDE_HAS_EXTERN_C
|
|
+ ${ADRIENNE_INCLUDE_HAS_EXTERN_C})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Linux kernel joystick interface
|
|
+###
|
|
+if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
+ check_include_file_cxx(linux/joystick.h HAVE_LINUX_JOYSTICK_H)
|
|
+ option_requires(VRPN_USE_JOYLIN
|
|
+ "Build with support for Linux kernel joystick interface (Uses kernel header - may make servers GPL)"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ HAVE_LINUX_JOYSTICK_H)
|
|
+else()
|
|
+ set(VRPN_USE_JOYLIN OFF)
|
|
+endif()
|
|
+
|
|
+###
|
|
+# /dev/input kernel joystick interface
|
|
+###
|
|
+if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
+ check_include_file_cxx(linux/input.h HAVE_LINUX_INPUT_H)
|
|
+ option_requires(VRPN_USE_DEV_INPUT
|
|
+ "Build with flags to enable the use of DevInput. (Uses kernel header - may make servers GPL)"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ HAVE_LINUX_INPUT_H)
|
|
+else()
|
|
+ set(VRPN_USE_DEV_INPUT OFF)
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Perl, for vrpn_rpc_gen
|
|
+###
|
|
+if(NOT WIN32)
|
|
+ # TODO - a bit of a compatibility hack
|
|
+ # MiKTeX 2.9's perl is broken - missing libgcc-s-sjlj-1.dll -
|
|
+ # and can't seem to work around it without popping up dialogs
|
|
+ # which is no fun for automated builds.
|
|
+ find_package(Perl ${QUIET_IF_SUBPROJECT})
|
|
+ find_package(PerlModules ${QUIET_IF_SUBPROJECT} COMPONENTS Parse::RecDescent)
|
|
+endif()
|
|
+
|
|
+option_requires(VRPN_BUILD_TEST_RPC_GENERATION
|
|
+ "Build VRPN RPC generation"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ PERL_FOUND
|
|
+ PERLMODULES_FOUND)
|
|
+
|
|
+###
|
|
+# Polhemus PDI library
|
|
+###
|
|
+# TODO Generalize this to use a FindPDI.cmake - someone with access
|
|
+# to this library must do it.
|
|
+# Make this also work with debug (use PDID)
|
|
+option(VRPN_USE_PDI
|
|
+ "Build with flags to enable the use of Polhemus DVI library."
|
|
+ OFF)
|
|
+if(VRPN_USE_PDI)
|
|
+ find_path(POLHEMUS_PDI_DIR NAMES "Inc" "Lib" PATH_SUFFIXES "PDI_140" "PDI_110" "PDI_90" PATHS "C:/Polhemus/PDI" "C:/Program Files (x86)/Polhemus/PDI" NO_DEFAULT_PATH)
|
|
+ include_directories(${POLHEMUS_PDI_DIR}/Inc)
|
|
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
+ list(APPEND SERVER_EXTRA_LIBS "${POLHEMUS_PDI_DIR}/Lib/x64/PDI.lib")
|
|
+ else()
|
|
+ list(APPEND SERVER_EXTRA_LIBS "${POLHEMUS_PDI_DIR}/Lib/Win32/PDI.lib")
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+###
|
|
+# PhaseSpace API
|
|
+###
|
|
+# TODO Actually do a proper search for the PhaseSpace API headers and libraries
|
|
+# and not use link_directories.
|
|
+option(VRPN_INCLUDE_PHASESPACE
|
|
+ "Build with PhaseSpace library support"
|
|
+ OFF)
|
|
+set(PHASESPACE_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/phasespace" CACHE PATH "location of PhaseSpace headers")
|
|
+set(PHASESPACE_LIBRARY_DIR "${CMAKE_SOURCE_DIR}/phasespace" CACHE PATH "location of PhaseSpace libraries (libowlsock.so, etc")
|
|
+if(VRPN_INCLUDE_PHASESPACE)
|
|
+ include_directories(${PHASESPACE_INCLUDE_DIR})
|
|
+ link_directories(${PHASESPACE_LIBRARY_DIR})
|
|
+ if(WIN32)
|
|
+ list(APPEND SERVER_EXTRA_LIBS libowlsock)
|
|
+ else()
|
|
+ list(APPEND SERVER_EXTRA_LIBS owlsock)
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Hillcrest Labs' Freespace
|
|
+###
|
|
+find_package(LibFreespace ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_FREESPACE
|
|
+ "Build with Hillcrest Labs' Freespace devices support"
|
|
+ ${DEFAULT_OFF_IF_SUBPROJECT}
|
|
+ LIBFREESPACE_FOUND)
|
|
+
|
|
+if(VRPN_USE_FREESPACE)
|
|
+ include_directories(${LIBFREESPACE_INCLUDE_DIRS})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${LIBFREESPACE_LIBRARIES})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# MotionNode tracker support. Loads shared library dynamically if available
|
|
+###
|
|
+option(VRPN_USE_MOTIONNODE
|
|
+ "Build with MotionNode tracker support"
|
|
+ OFF)
|
|
+if(VRPN_USE_MOTIONNODE)
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${CMAKE_DL_LIBS})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# Trivisio ColibriAPI
|
|
+###
|
|
+find_package(ColibriApi ${QUIET_IF_SUBPROJECT})
|
|
+option_requires(VRPN_USE_COLIBRIAPI
|
|
+ "Build with Trivisio ColibriAPI support"
|
|
+ OFF_BY_DEFAULT
|
|
+ COLIBRIAPI_FOUND)
|
|
+if(VRPN_USE_COLIBRIAPI)
|
|
+ include_directories(${COLIBRIAPI_INCLUDE_DIR})
|
|
+ list(APPEND SERVER_EXTRA_LIBS ${COLIBRIAPI_LIBRARIES})
|
|
+endif()
|
|
+
|
|
+###
|
|
+# XXX Other libraries needing detection and handling (TODO)
|
|
+###
|
|
+# National Instruments Nidaq traditional
|
|
+# US Digital SEI/A2
|
|
+# microscribe3D library
|
|
+#
|
|
+# All include paths should be moved out of at least vrpn_Configure.h.cmake_in
|
|
+# as well as all #pragma comment (lib, "" ) lines, since cmake replaces
|
|
+# them more flexibly (include_directories and target_link_libraries)
|
|
+
|
|
+
|
|
+# Configuration options controlling what gets included in the build.
|
|
+# These are the default options for libraries we can't yet detect -
|
|
+# if a library can be detected above it will be pre-set to an appropriate
|
|
+# value by default.
|
|
+option(VRPN_USE_NATIONAL_INSTRUMENTS
|
|
+ "Build with National Instruments (old library) support"
|
|
+ OFF)
|
|
+option(VRPN_USE_NIDAQ "Build with NIDAQ support ca. 1999" OFF)
|
|
+option(VRPN_USE_USDIGITAL
|
|
+ "Build with US Digital SEI/A2 library support"
|
|
+ OFF)
|
|
+option(VRPN_USE_MICROSCRIBE
|
|
+ "Build with MicroScribe3D library support"
|
|
+ OFF)
|
|
+option(VRPN_USE_TRIVISIOCOLIBRI
|
|
+ "(OBSOLETE) Build with support for TrivisioColibri tracker"
|
|
+ OFF)
|
|
+if(WIN32)
|
|
+ option(VRPN_USE_WINSOCK2
|
|
+ "Use Winsock2 library, rather than Winsock."
|
|
+ OFF)
|
|
+ option(VRPN_USE_SHARED_LIBRARY
|
|
+ "Enable to use DLLs on Windows (see vrpn_Configure.h for more info)"
|
|
+ OFF)
|
|
+endif()
|
|
+
|
|
+if(UNIX)
|
|
+ option(VRPN_BUILD_PROFILING_SUPPORT
|
|
+ "Build with flags to enable profiling."
|
|
+ OFF)
|
|
+ if(VRPN_BUILD_PROFILING_SUPPORT)
|
|
+ include(EnableProfiling)
|
|
+ globally_enable_profiling()
|
|
+ endif()
|
|
+
|
|
+endif()
|
|
+
|
|
+if(WIN32 AND NOT CYGWIN)
|
|
+ # Only intended for Windows, known not needed on Cygwin,
|
|
+ # but potentially hazardous on other Windows build environments.
|
|
+ option(VRPN_EXPORT_GETTIMEOFDAY "Use a #define to make gettimeofday a synonym for vrpn_gettimeofday." OFF)
|
|
+else()
|
|
+ set(VRPN_EXPORT_GETTIMEOFDAY OFF)
|
|
+endif()
|
|
+
|
|
+# This will only work on compilers that support C++-11.
|
|
+# We could check for this and turn it on by default.
|
|
+set(VRPN_CHRONO_DEFAULT OFF)
|
|
+if(MSVC AND MSVC_VERSION GREATER 1800)
|
|
+ # On MSVC 2015 and newer, std::chrono provides the best time implementation.
|
|
+ set(VRPN_CHRONO_DEFAULT ON)
|
|
+endif()
|
|
+
|
|
+option(VRPN_USE_STD_CHRONO "Use the std::chrono class for time" ${VRPN_CHRONO_DEFAULT})
|
|
+
|
|
+option(VRPN_USE_STATIC_ASSERTIONS "Use some compile-time assertions" ON)
|
|
+option(VRPN_BUILD_EXTRA_COMPILER_WARNINGS
|
|
+ "Build with flags to enable extra warnings."
|
|
+ OFF)
|
|
+if(VRPN_BUILD_EXTRA_COMPILER_WARNINGS)
|
|
+ include(EnableExtraCompilerWarnings)
|
|
+ globally_enable_extra_compiler_warnings()
|
|
+ if(NOT MSVC)
|
|
+ # shadowing virtual functions is pretty much unavoidable with the
|
|
+ # multiple inheritance design and methods like "report_changes"
|
|
+ check_cxx_compiler_flag(-Wno-overloaded-virtual SUPPORTS_WNO_OVERLOADED_VIRTUAL_FLAG)
|
|
+ if(SUPPORTS_WNO_OVERLOADED_VIRTUAL_FLAG)
|
|
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-overloaded-virtual")
|
|
+ endif()
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+set(VRPN_CLIENT_ONLY OFF)
|
|
+if(VRPN_BUILD_CLIENT_LIBRARY AND NOT VRPN_BUILD_SERVER_LIBRARY)
|
|
+ # We can define VRPN_CLIENT_ONLY in the header in this case!
|
|
+ set(VRPN_CLIENT_ONLY ON)
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# configure a header file to pass some of the CMake settings
|
|
+# to the source code
|
|
+configure_file("${PROJECT_SOURCE_DIR}/vrpn_Configure.h.cmake_in"
|
|
+ "${PROJECT_BINARY_DIR}/vrpn_Configure.h")
|
|
+set(VRPN_PATH_TO_CMAKE_CONFIG "${PROJECT_BINARY_DIR}/vrpn_Configure.h")
|
|
+add_definitions("-DVRPN_USING_CMAKE=\"${VRPN_PATH_TO_CMAKE_CONFIG}\"")
|
|
+
|
|
+if(SUBPROJECT)
|
|
+ set(BUILD_TESTING FALSE)
|
|
+endif()
|
|
+
|
|
+if(APPLE)
|
|
+ # XXX Is this still needed?
|
|
+ if(NOT CMAKE_INSTALL_NAME_DIR)
|
|
+ set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Build the library itself and declare what bits need to be installed
|
|
+
|
|
+set(VRPN_CLIENT_SOURCES
|
|
+ vrpn_Analog.C
|
|
+ vrpn_Analog_Output.C
|
|
+ vrpn_Assert.C
|
|
+ vrpn_Auxiliary_Logger.C
|
|
+ vrpn_BaseClass.C
|
|
+ vrpn_Button.C
|
|
+ vrpn_Connection.C
|
|
+ vrpn_Dial.C
|
|
+ vrpn_EndpointContainer.C
|
|
+ vrpn_FileConnection.C
|
|
+ vrpn_FileController.C
|
|
+ vrpn_ForceDevice.C
|
|
+ vrpn_Forwarder.C
|
|
+ vrpn_ForwarderController.C
|
|
+ vrpn_FunctionGenerator.C
|
|
+ vrpn_Imager.C
|
|
+ vrpn_LamportClock.C
|
|
+ vrpn_Mutex.C
|
|
+ vrpn_Poser.C
|
|
+ vrpn_RedundantTransmission.C
|
|
+ vrpn_Serial.C
|
|
+ vrpn_SerialPort.C
|
|
+ vrpn_Shared.C
|
|
+ vrpn_SharedObject.C
|
|
+ vrpn_Sound.C
|
|
+ vrpn_Text.C
|
|
+ vrpn_Thread.C
|
|
+ vrpn_Tracker.C)
|
|
+
|
|
+set(VRPN_CLIENT_PUBLIC_HEADERS
|
|
+ "${PROJECT_BINARY_DIR}/vrpn_Configure.h"
|
|
+ vrpn_Analog.h
|
|
+ vrpn_Analog_Output.h
|
|
+ vrpn_Assert.h
|
|
+ vrpn_Auxiliary_Logger.h
|
|
+ vrpn_BaseClass.h
|
|
+ vrpn_Button.h
|
|
+ vrpn_Connection.h
|
|
+ vrpn_ConnectionPtr.h
|
|
+ vrpn_Dial.h
|
|
+ vrpn_EndpointContainer.h
|
|
+ vrpn_FileConnection.h
|
|
+ vrpn_FileController.h
|
|
+ vrpn_ForceDevice.h
|
|
+ vrpn_ForwarderController.h
|
|
+ vrpn_Forwarder.h
|
|
+ vrpn_FunctionGenerator.h
|
|
+ vrpn_Imager.h
|
|
+ vrpn_LamportClock.h
|
|
+ vrpn_Log.h
|
|
+ vrpn_MainloopContainer.h
|
|
+ vrpn_MainloopObject.h
|
|
+ vrpn_Mutex.h
|
|
+ vrpn_OwningPtr.h
|
|
+ vrpn_RedundantTransmission.h
|
|
+ vrpn_SendTextMessageStreamProxy.h
|
|
+ vrpn_Serial.h
|
|
+ vrpn_SerialPort.h
|
|
+ vrpn_Shared.h
|
|
+ vrpn_SharedObject.h
|
|
+ vrpn_Sound.h
|
|
+ vrpn_Text.h
|
|
+ vrpn_Thread.h
|
|
+ vrpn_Tracker.h
|
|
+ vrpn_Types.h
|
|
+ vrpn_WindowsH.h)
|
|
+
|
|
+set(VRPN_SERVER_SOURCES
|
|
+ ${VRPN_CLIENT_SOURCES}
|
|
+ vrpn_3DConnexion.C
|
|
+ vrpn_3DMicroscribe.C
|
|
+ vrpn_3Space.C
|
|
+ vrpn_5DT16.C
|
|
+ vrpn_Adafruit.C
|
|
+ vrpn_ADBox.C
|
|
+ vrpn_Analog_5dt.C
|
|
+ vrpn_Analog_5dtUSB.C
|
|
+ vrpn_Analog_Radamec_SPI.C
|
|
+ vrpn_Analog_USDigital_A2.C
|
|
+ vrpn_Atmel.C
|
|
+ vrpn_BiosciencesTools.C
|
|
+ vrpn_Button_NI_DIO24.C
|
|
+ vrpn_Button_USB.cpp
|
|
+ vrpn_CerealBox.C
|
|
+ vrpn_CHProducts_Controller_Raw.C
|
|
+ vrpn_Contour.C
|
|
+ vrpn_DevInput.C
|
|
+ vrpn_DirectXFFJoystick.C
|
|
+ vrpn_DirectXRumblePad.C
|
|
+ vrpn_DreamCheeky.C
|
|
+ vrpn_Dyna.C
|
|
+ vrpn_Event_Analog.C
|
|
+ vrpn_Event.C
|
|
+ vrpn_Event_Mouse.C
|
|
+ vrpn_Flock.C
|
|
+ vrpn_Flock_Parallel.C
|
|
+ vrpn_ForceDeviceServer.C
|
|
+ vrpn_Freespace.C
|
|
+ vrpn_FunctionGenerator.C
|
|
+ vrpn_Futaba.C
|
|
+ vrpn_GlobalHapticsOrb.C
|
|
+ vrpn_Griffin.C
|
|
+ vrpn_HumanInterface.C
|
|
+ vrpn_IDEA.C
|
|
+ vrpn_Imager_Stream_Buffer.C
|
|
+ vrpn_ImmersionBox.C
|
|
+ vrpn_inertiamouse.C
|
|
+ vrpn_JoyFly.C
|
|
+ vrpn_Joylin.C
|
|
+ vrpn_Joywin32.C
|
|
+ vrpn_Keyboard.C
|
|
+ vrpn_Laputa.C
|
|
+ vrpn_LUDL.C
|
|
+ vrpn_Logitech_Controller_Raw.C
|
|
+ vrpn_Magellan.C
|
|
+ vrpn_Microsoft_Controller_Raw.C
|
|
+ vrpn_Mouse.C
|
|
+ vrpn_NationalInstruments.C
|
|
+ vrpn_Nidaq.C
|
|
+ vrpn_nikon_controls.C
|
|
+ vrpn_nVidia_shield_controller.C
|
|
+ vrpn_Oculus.C
|
|
+ vrpn_OzzMaker.C
|
|
+ vrpn_OmegaTemperature.C
|
|
+ vrpn_Poser_Analog.C
|
|
+ vrpn_Poser_Tek4662.C
|
|
+ vrpn_raw_sgibox.C
|
|
+ vrpn_Retrolink.C
|
|
+ vrpn_Saitek_Controller_Raw.C
|
|
+ vrpn_sgibox.C
|
|
+ vrpn_Spaceball.C
|
|
+ vrpn_Streaming_Arduino.C
|
|
+ vrpn_Tng3.C
|
|
+ vrpn_Tracker_3DMouse.C
|
|
+ vrpn_Tracker_AnalogFly.C
|
|
+ vrpn_Tracker_ButtonFly.C
|
|
+ vrpn_Tracker_Crossbow.C
|
|
+ vrpn_Tracker_DTrack.C
|
|
+ vrpn_Tracker_Fastrak.C
|
|
+ vrpn_Tracker_Filter.C
|
|
+ vrpn_Tracker_GameTrak.C
|
|
+ vrpn_Tracker_GPS.C
|
|
+ vrpn_Tracker_IMU.C
|
|
+ vrpn_Tracker_isense.C
|
|
+ vrpn_Tracker_Isotrak.C
|
|
+ vrpn_Tracker_JsonNet.C
|
|
+ vrpn_Tracker_Liberty.C
|
|
+ vrpn_Tracker_MotionNode.C
|
|
+ vrpn_Tracker_NDI_Polaris.C
|
|
+ vrpn_Tracker_NovintFalcon.C
|
|
+ vrpn_Tracker_OSVRHackerDevKit.C
|
|
+ vrpn_Tracker_PDI.C
|
|
+ vrpn_Tracker_PhaseSpace.C
|
|
+ vrpn_Tracker_RazerHydra.C
|
|
+ vrpn_Tracker_ThalmicLabsMyo.C
|
|
+ vrpn_Tracker_SpacePoint.C
|
|
+ vrpn_Tracker_Wintracker.C
|
|
+ vrpn_Tracker_Colibri.C
|
|
+ vrpn_Tracker_TrivisioColibri.C
|
|
+ vrpn_Tracker_WiimoteHead.C
|
|
+ vrpn_Tracker_zSight.C
|
|
+ vrpn_Tracker_ViewPoint.C
|
|
+ vrpn_UNC_Joystick.C
|
|
+ vrpn_VPJoystick.C
|
|
+ vrpn_Wanda.C
|
|
+ vrpn_WiiMote.C
|
|
+ vrpn_XInputGamepad.C
|
|
+ vrpn_Xkeys.C
|
|
+ vrpn_Tracker_LibertyHS.C
|
|
+ vrpn_Vality.C
|
|
+ vrpn_YEI_3Space.C
|
|
+ vrpn_Zaber.C
|
|
+ server_src/vrpn_Generic_server_object.C
|
|
+ ${HIDAPI_SOURCES}
|
|
+ ${JSONCPP_SOURCES}
|
|
+ ${PDI_SOURCES})
|
|
+
|
|
+set(VRPN_SERVER_PUBLIC_HEADERS
|
|
+ ${VRPN_CLIENT_PUBLIC_HEADERS}
|
|
+ vrpn_3DConnexion.h
|
|
+ vrpn_3DMicroscribe.h
|
|
+ vrpn_3Space.h
|
|
+ vrpn_5DT16.h
|
|
+ vrpn_Adafruit.h
|
|
+ vrpn_ADBox.h
|
|
+ vrpn_Analog_5dt.h
|
|
+ vrpn_Analog_5dtUSB.h
|
|
+ vrpn_Analog_Radamec_SPI.h
|
|
+ vrpn_Analog_USDigital_A2.h
|
|
+ vrpn_Atmel.h
|
|
+ vrpn_BiosciencesTools.h
|
|
+ vrpn_Button_NI_DIO24.h
|
|
+ vrpn_Button_USB.h
|
|
+ vrpn_CerealBox.h
|
|
+ vrpn_CHProducts_Controller_Raw.h
|
|
+ vrpn_Contour.h
|
|
+ vrpn_DevInput.h
|
|
+ vrpn_DirectXFFJoystick.h
|
|
+ vrpn_DirectXRumblePad.h
|
|
+ vrpn_DreamCheeky.h
|
|
+ vrpn_Dyna.h
|
|
+ vrpn_Event_Analog.h
|
|
+ vrpn_Event.h
|
|
+ vrpn_Event_Mouse.h
|
|
+ vrpn_Flock.h
|
|
+ vrpn_Flock_Parallel.h
|
|
+ vrpn_ForceDeviceServer.h
|
|
+ vrpn_Freespace.h
|
|
+ vrpn_FunctionGenerator.h
|
|
+ vrpn_Futaba.h
|
|
+ vrpn_GlobalHapticsOrb.h
|
|
+ vrpn_Griffin.h
|
|
+ vrpn_HashST.h
|
|
+ vrpn_HumanInterface.h
|
|
+ vrpn_IDEA.h
|
|
+ vrpn_Imager_Stream_Buffer.h
|
|
+ vrpn_ImmersionBox.h
|
|
+ vrpn_inertiamouse.h
|
|
+ vrpn_JoyFly.h
|
|
+ vrpn_Joylin.h
|
|
+ vrpn_Joywin32.h
|
|
+ vrpn_Keyboard.h
|
|
+ vrpn_Logitech_Controller_Raw.h
|
|
+ vrpn_Laputa.h
|
|
+ vrpn_LUDL.h
|
|
+ vrpn_Magellan.h
|
|
+ vrpn_MessageMacros.h
|
|
+ vrpn_Microsoft_Controller_Raw.h
|
|
+ vrpn_Mouse.h
|
|
+ vrpn_NationalInstruments.h
|
|
+ vrpn_Nidaq.h
|
|
+ vrpn_nikon_controls.h
|
|
+ vrpn_nVidia_shield_controller.h
|
|
+ vrpn_Oculus.h
|
|
+ vrpn_OmegaTemperature.h
|
|
+ vrpn_OneEuroFilter.h
|
|
+ vrpn_OzzMaker.h
|
|
+ vrpn_Poser_Analog.h
|
|
+ vrpn_Poser.h
|
|
+ vrpn_Poser_Tek4662.h
|
|
+ vrpn_raw_sgibox.h
|
|
+ vrpn_Retrolink.h
|
|
+ vrpn_Saitek_Controller_Raw.h
|
|
+ vrpn_sgibox.h
|
|
+ vrpn_Spaceball.h
|
|
+ vrpn_Streaming_Arduino.h
|
|
+ vrpn_Tng3.h
|
|
+ vrpn_Tracker_3DMouse.h
|
|
+ vrpn_Tracker_AnalogFly.h
|
|
+ vrpn_Tracker_ButtonFly.h
|
|
+ vrpn_Tracker_Crossbow.h
|
|
+ vrpn_Tracker_DTrack.h
|
|
+ vrpn_Tracker_Fastrak.h
|
|
+ vrpn_Tracker_Filter.h
|
|
+ vrpn_Tracker_GameTrak.h
|
|
+ vrpn_Tracker_GPS.h
|
|
+ vrpn_Tracker_IMU.h
|
|
+ vrpn_Tracker_isense.h
|
|
+ vrpn_Tracker_Isotrak.h
|
|
+ vrpn_Tracker_JsonNet.h
|
|
+ vrpn_Tracker_Liberty.h
|
|
+ vrpn_Tracker_MotionNode.h
|
|
+ vrpn_Tracker_NDI_Polaris.h
|
|
+ vrpn_Tracker_NovintFalcon.h
|
|
+ vrpn_Tracker_OSVRHackerDevKit.h
|
|
+ vrpn_Tracker_PDI.h
|
|
+ vrpn_Tracker_PhaseSpace.h
|
|
+ vrpn_Tracker_RazerHydra.h
|
|
+ vrpn_Tracker_ThalmicLabsMyo.h
|
|
+ vrpn_Tracker_SpacePoint.h
|
|
+ vrpn_Tracker_Wintracker.h
|
|
+ vrpn_Tracker_Colibri.h
|
|
+ vrpn_Tracker_TrivisioColibri.h
|
|
+ vrpn_Tracker_WiimoteHead.h
|
|
+ vrpn_Tracker_zSight.h
|
|
+ vrpn_Tracker_ViewPoint.h
|
|
+ vrpn_UNC_Joystick.h
|
|
+ vrpn_VPJoystick.h
|
|
+ vrpn_Wanda.h
|
|
+ vrpn_WiiMote.h
|
|
+ vrpn_XInputGamepad.h
|
|
+ vrpn_Xkeys.h
|
|
+ vrpn_Tracker_LibertyHS.h
|
|
+ vrpn_Vality.h
|
|
+ vrpn_YEI_3Space.h
|
|
+ vrpn_Zaber.h
|
|
+ server_src/vrpn_Generic_server_object.h)
|
|
+
|
|
+set(VRPN_SERVER_LIBRARY)
|
|
+set(VRPN_CLIENT_LIBRARY)
|
|
+
|
|
+if(VRPN_BUILD_SERVER_LIBRARY)
|
|
+ add_library(vrpnserver
|
|
+ ${VRPN_SERVER_SOURCES}
|
|
+ ${VRPN_SERVER_PUBLIC_HEADERS})
|
|
+ target_link_libraries(vrpnserver ${EXTRA_LIBS} ${SERVER_EXTRA_LIBS})
|
|
+ set(VRPN_CLIENT_LIBRARY vrpnserver)
|
|
+ set(VRPN_SERVER_LIBRARY vrpnserver)
|
|
+ set_property(TARGET
|
|
+ vrpnserver
|
|
+ PROPERTY
|
|
+ PUBLIC_HEADER
|
|
+ ${VRPN_SERVER_PUBLIC_HEADERS})
|
|
+ set_property(TARGET
|
|
+ vrpnserver
|
|
+ PROPERTY
|
|
+ SOVERSION
|
|
+ 0)
|
|
+ set_property(TARGET
|
|
+ vrpnserver
|
|
+ PROPERTY
|
|
+ PROJECT_LABEL
|
|
+ "Core VRPN Server Library")
|
|
+ set_property(TARGET
|
|
+ vrpnserver
|
|
+ PROPERTY
|
|
+ FOLDER
|
|
+ "Library")
|
|
+ string(REPLACE ";" " " SERVER_LINK_FLAGS "${SERVER_LINK_FLAGS}")
|
|
+ set_property(TARGET
|
|
+ vrpnserver
|
|
+ PROPERTY
|
|
+ LINK_FLAGS
|
|
+ ${SERVER_LINK_FLAGS})
|
|
+
|
|
+ if(UNIX)
|
|
+ add_subdirectory(atmellib)
|
|
+ target_link_libraries(vrpnserver vrpn_atmel)
|
|
+ endif()
|
|
+
|
|
+ add_subdirectory(gpsnmealib)
|
|
+ target_link_libraries(vrpnserver gpsnmea)
|
|
+ if(VRPN_INSTALL)
|
|
+ install(TARGETS
|
|
+ vrpnserver
|
|
+ RUNTIME DESTINATION bin COMPONENT serversdk
|
|
+ LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT serversdk
|
|
+ ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT serversdk
|
|
+ PUBLIC_HEADER DESTINATION include COMPONENT serversdk)
|
|
+ endif()
|
|
+ add_cppcheck(vrpnserver STYLE UNUSED_FUNCTIONS)
|
|
+endif()
|
|
+
|
|
+
|
|
+if(VRPN_BUILD_CLIENT_LIBRARY)
|
|
+ add_library(vrpn ${VRPN_CLIENT_SOURCES} ${VRPN_CLIENT_PUBLIC_HEADERS})
|
|
+ target_link_libraries(vrpn ${EXTRA_LIBS})
|
|
+ set(VRPN_CLIENT_LIBRARY vrpn)
|
|
+
|
|
+ set_property(TARGET
|
|
+ vrpn
|
|
+ PROPERTY
|
|
+ PUBLIC_HEADER
|
|
+ ${VRPN_CLIENT_PUBLIC_HEADERS})
|
|
+ set_property(TARGET
|
|
+ vrpn
|
|
+ PROPERTY
|
|
+ SOVERSION
|
|
+ 0)
|
|
+
|
|
+ # Always compile code the client library with VRPN_CLIENT_ONLY defined.
|
|
+ set_property(TARGET
|
|
+ vrpn
|
|
+ PROPERTY
|
|
+ COMPILE_DEFINITIONS
|
|
+ "VRPN_CLIENT_ONLY")
|
|
+
|
|
+ set_property(TARGET
|
|
+ vrpn
|
|
+ PROPERTY
|
|
+ PROJECT_LABEL
|
|
+ "Core VRPN Client Library")
|
|
+ set_property(TARGET
|
|
+ vrpn
|
|
+ PROPERTY
|
|
+ FOLDER
|
|
+ "Library")
|
|
+
|
|
+ if(VRPN_INSTALL)
|
|
+ install(TARGETS
|
|
+ vrpn
|
|
+ RUNTIME DESTINATION bin COMPONENT clientsdk
|
|
+ LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT clientsdk
|
|
+ ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT clientsdk
|
|
+ PUBLIC_HEADER DESTINATION include COMPONENT clientsdk)
|
|
+ endif()
|
|
+ add_cppcheck(vrpn STYLE UNUSED_FUNCTIONS)
|
|
+endif()
|
|
+
|
|
+add_subdirectory(client_src)
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Set some internal cache variables to make life easier if we're a subproject
|
|
+
|
|
+set(VRPN_DEFINITIONS "-DVRPN_USING_CMAKE=\"${CMAKE_CURRENT_BINARY_DIR}/vrpn_Configure.h\""
|
|
+ CACHE INTERNAL "Definition to add if using as a subproject" FORCE)
|
|
+set(VRPN_CLIENT_LIBRARY ${VRPN_CLIENT_LIBRARY} CACHE INTERNAL "" FORCE)
|
|
+set(VRPN_SERVER_LIBRARY ${VRPN_SERVER_LIBRARY} CACHE INTERNAL "" FORCE)
|
|
+set(VRPN_SERVER_LINK_FLAGS ${SERVER_LINK_FLAGS} CACHE INTERNAL "" FORCE)
|
|
+set(VRPN_INCLUDE_DIRS
|
|
+ "${CMAKE_CURRENT_BINARY_DIR}"
|
|
+ "${VRPN_SOURCE_DIR}"
|
|
+ "${VRPN_SOURCE_DIR}/atmellib"
|
|
+ "${VRPN_SOURCE_DIR}/quat"
|
|
+ CACHE INTERNAL "" FORCE)
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Build the server applications if we've been asked to and we didn't build
|
|
+# the library client-only.
|
|
+
|
|
+if(VRPN_BUILD_SERVERS AND VRPN_BUILD_SERVER_LIBRARY)
|
|
+ add_subdirectory(server_src)
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Build the RPC generation if we've been asked to
|
|
+
|
|
+if(VRPN_BUILD_TEST_RPC_GENERATION)
|
|
+ add_subdirectory(util/gen_rpc)
|
|
+endif()
|
|
+
|
|
+if(VRPN_BUILD_CLIENTS)
|
|
+ add_subdirectory(util/printStream)
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Create documentation
|
|
+if(NOT SUBPROJECT)
|
|
+ add_subdirectory(doxygen)
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Python wrappers
|
|
+add_subdirectory(python_vrpn)
|
|
+add_subdirectory(python)
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Java wrappers
|
|
+add_subdirectory(java_vrpn)
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# HID Gui
|
|
+if(VRPN_BUILD_HID_GUI)
|
|
+ add_subdirectory(hid_gui)
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Testing applications that live in the main directory.
|
|
+if(BUILD_TESTING AND NOT VRPN_CLIENT_ONLY)
|
|
+ foreach(SOURCE time_test.cpp)
|
|
+ get_filename_component(APP ${SOURCE} NAME_WE)
|
|
+ add_executable(${APP} ${SOURCE})
|
|
+ target_link_libraries(${APP} vrpnserver)
|
|
+ set_target_properties(${APP} PROPERTIES FOLDER Tests)
|
|
+ if(VRPN_INSTALL)
|
|
+ install(TARGETS ${APP} RUNTIME DESTINATION bin COMPONENT tests)
|
|
+ endif()
|
|
+ endforeach()
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Do a little check for GPL and GPL-incompatible libraries
|
|
+
|
|
+# What flags cause us to link against GPL libraries?
|
|
+
|
|
+# TODO: Figure out about the kernel headers we use.
|
|
+# Conflicting stories:
|
|
+# ML post by Linus: https://lkml.org/lkml/2003/12/5/13
|
|
+# Interview of Linus: http://www.itworld.com/open-source/140916/android-sued-microsoft-not-linux
|
|
+
|
|
+set(ALL_GPL_SERVER_FLAGS
|
|
+ #VRPN_USE_DEV_INPUT # Kernel header: GPL2
|
|
+ #VRPN_USE_JOYLIN # Kernel header: GPL2
|
|
+ VRPN_USE_GPM_MOUSE # GPL2+
|
|
+ VRPN_USE_WIIUSE # GPL3
|
|
+)
|
|
+
|
|
+# What flags cause us to link against GPL-incompatible libraries?
|
|
+set(ALL_GPLINCOMPAT_SERVER_FLAGS
|
|
+ VRPN_INCLUDE_INTERSENSE
|
|
+ VRPN_INCLUDE_TIMECODE_SERVER
|
|
+ VRPN_USE_PHANTOM_SERVER)
|
|
+
|
|
+set(GPL_SERVER_FLAGS)
|
|
+foreach(POSSIBLE_GPL_FLAG ${ALL_GPL_SERVER_FLAGS})
|
|
+ if(${POSSIBLE_GPL_FLAG})
|
|
+ list(APPEND GPL_SERVER_FLAGS "${POSSIBLE_GPL_FLAG}")
|
|
+ endif()
|
|
+endforeach()
|
|
+
|
|
+set(GPLINCOMPAT_SERVER_FLAGS)
|
|
+foreach(POSSIBLE_GPLINCOMPAT_FLAG ${ALL_GPLINCOMPAT_SERVER_FLAGS})
|
|
+ if(${POSSIBLE_GPLINCOMPAT_FLAG})
|
|
+ list(APPEND GPLINCOMPAT_SERVER_FLAGS "${POSSIBLE_GPLINCOMPAT_FLAG}")
|
|
+ endif()
|
|
+endforeach()
|
|
+
|
|
+
|
|
+if(GPL_SERVER_FLAGS)
|
|
+ # Some GPL options are enabled
|
|
+ message(STATUS "")
|
|
+ message(STATUS
|
|
+ "NOTE: The following build options may produce a GPL-licensed server library/binary.")
|
|
+ message(STATUS " ${GPL_SERVER_FLAGS}")
|
|
+ message(STATUS
|
|
+ "NOTE: I am not a lawyer, and this is not legal advice!")
|
|
+
|
|
+ option(VRPN_GPL_SERVER
|
|
+ "Check this to accept the possibility of linking GPL libraries with the server."
|
|
+ OFF)
|
|
+endif()
|
|
+
|
|
+if(GPLINCOMPAT_SERVER_FLAGS)
|
|
+ # Some GPL-incompatible options are enabled
|
|
+ message(STATUS "")
|
|
+ message(STATUS
|
|
+ "NOTE: The following build options may produce a server library/binary")
|
|
+ message(STATUS
|
|
+ " that is incompatible with the GPL/undistributable if linked with GPL libraries.")
|
|
+ message(STATUS " ${GPLINCOMPAT_SERVER_FLAGS}")
|
|
+ message(STATUS
|
|
+ "NOTE: I am not a lawyer, and this is not legal advice!")
|
|
+endif()
|
|
+
|
|
+# Check for errors.
|
|
+if(VRPN_BUILD_SERVER_LIBRARY)
|
|
+ if(GPL_SERVER_FLAGS AND NOT VRPN_GPL_SERVER)
|
|
+ message(STATUS "")
|
|
+ message(STATUS "Selected build options produce a GPL server library.")
|
|
+ message(STATUS
|
|
+ "You may disable them, otherwise set VRPN_GPL_SERVER to acknowledge this and build anyway.")
|
|
+ message(FATAL_ERROR
|
|
+ "Need VRPN_GPL_SERVER to build server library with GPL options enabled!")
|
|
+ endif()
|
|
+
|
|
+ if(GPL_SERVER_FLAGS AND GPLINCOMPAT_SERVER_FLAGS)
|
|
+ message(STATUS "")
|
|
+ message(STATUS "IMPORTANT LICENSING NOTE!")
|
|
+ message(STATUS
|
|
+ "Building with the current settings may produce a legally non-distributable server binary!")
|
|
+ message(STATUS
|
|
+ "NOTE: I am not a lawyer, and this is not legal advice!")
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# Enable testing/dashboards
|
|
+if(NOT SUBPROJECT)
|
|
+ create_dashboard_scripts("${CMAKE_CURRENT_SOURCE_DIR}/DashboardBuildInitialCache.cmake.in")
|
|
+endif()
|
|
+
|
|
+#-----------------------------------------------------------------------------
|
|
+# If we succeeded, we can go on and include packaging!
|
|
+if(VRPN_INSTALL)
|
|
+ include(CPack)
|
|
+ cpack_add_component(serversdk
|
|
+ DISPLAY_NAME
|
|
+ "VRPN Server Library and C++ Headers")
|
|
+ cpack_add_component(clientsdk
|
|
+ DISPLAY_NAME
|
|
+ "VRPN Client Library and C++ Headers")
|
|
+ cpack_add_component(tests DISPLAY_NAME "Test applications")
|
|
+ cpack_add_component(clients DISPLAY_NAME "Client applications")
|
|
+ cpack_add_component(servers DISPLAY_NAME "Server applications")
|
|
+ cpack_add_component(mainserver
|
|
+ DISPLAY_NAME
|
|
+ "VRPN main server application")
|
|
+ cpack_add_component(python DISPLAY_NAME "Python bindings")
|
|
+ cpack_add_component(java DISPLAY_NAME "Java bindings")
|
|
+ cpack_add_component(doc DISPLAY_NAME "C++ API Documentation")
|
|
+endif()
|
|
diff -Naur a/gpsnmealib/CMakeLists.txt b/gpsnmealib/CMakeLists.txt
|
|
--- a/gpsnmealib/CMakeLists.txt 2022-05-30 10:26:37.000000000 -0700
|
|
+++ b/gpsnmealib/CMakeLists.txt 2023-10-28 09:03:00.886526616 -0700
|
|
@@ -21,6 +21,10 @@
|
|
PUBLIC_HEADER
|
|
${GPSNMEALIB_PUBLIC_HEADERS})
|
|
set_property(TARGET gpsnmea PROPERTY FOLDER "Library")
|
|
+set_target_properties(gpsnmea
|
|
+ PROPERTIES
|
|
+ VERSION ${CPACK_PACKAGE_VERSION}
|
|
+ SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})
|
|
|
|
if(VRPN_INSTALL)
|
|
install(TARGETS
|
|
diff -Naur a/quat/CMakeLists.txt b/quat/CMakeLists.txt
|
|
--- a/quat/CMakeLists.txt 2022-05-30 10:26:37.000000000 -0700
|
|
+++ b/quat/CMakeLists.txt 2023-10-28 09:03:00.887526627 -0700
|
|
@@ -18,6 +18,10 @@
|
|
endif()
|
|
set_property(TARGET quat PROPERTY PUBLIC_HEADER ${QUATLIB_HEADER})
|
|
set_target_properties(quat PROPERTIES FOLDER Library)
|
|
+set_target_properties(quat
|
|
+ PROPERTIES
|
|
+ VERSION ${CPACK_PACKAGE_VERSION}
|
|
+ SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})
|
|
if(VRPN_INSTALL)
|
|
install(TARGETS
|
|
quat
|
|
diff -Naur a/quat/CMakeLists.txt.orig b/quat/CMakeLists.txt.orig
|
|
--- a/quat/CMakeLists.txt.orig 1969-12-31 16:00:00.000000000 -0800
|
|
+++ b/quat/CMakeLists.txt.orig 2022-05-30 10:26:37.000000000 -0700
|
|
@@ -0,0 +1,36 @@
|
|
+cmake_minimum_required(VERSION 2.6)
|
|
+project(quatlib)
|
|
+
|
|
+if(APPLE)
|
|
+ # XXX Is this still needed?
|
|
+ if(NOT CMAKE_INSTALL_NAME_DIR)
|
|
+ set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+set(QUATLIB_SOURCES matrix.c quat.c vector.c xyzquat.c)
|
|
+set(QUATLIB_HEADER quat.h)
|
|
+
|
|
+# Build the library itself and declare what bits need to be installed
|
|
+add_library(quat ${QUATLIB_SOURCES} ${QUATLIB_HEADER})
|
|
+if(UNIX)
|
|
+ target_link_libraries(quat -lm)
|
|
+endif()
|
|
+set_property(TARGET quat PROPERTY PUBLIC_HEADER ${QUATLIB_HEADER})
|
|
+set_target_properties(quat PROPERTIES FOLDER Library)
|
|
+if(VRPN_INSTALL)
|
|
+ install(TARGETS
|
|
+ quat
|
|
+ RUNTIME DESTINATION bin COMPONENT serversdk
|
|
+ LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT serversdk
|
|
+ ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT serversdk
|
|
+ PUBLIC_HEADER DESTINATION include COMPONENT serversdk)
|
|
+ install(TARGETS
|
|
+ quat
|
|
+ RUNTIME DESTINATION bin COMPONENT clientsdk
|
|
+ LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT clientsdk
|
|
+ ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT clientsdk
|
|
+ PUBLIC_HEADER DESTINATION include COMPONENT clientsdk)
|
|
+endif()
|
|
+
|
|
+add_subdirectory(testapps)
|
|
diff -Naur a/server_src/CMakeLists.txt b/server_src/CMakeLists.txt
|
|
--- a/server_src/CMakeLists.txt 2022-05-30 10:26:37.000000000 -0700
|
|
+++ b/server_src/CMakeLists.txt 2023-10-28 09:03:00.888526638 -0700
|
|
@@ -59,6 +59,10 @@
|
|
PUBLIC_HEADER
|
|
${PHANTOM_HEADERS})
|
|
set_target_properties(vrpn_phantom PROPERTIES FOLDER Library)
|
|
+ set_target_properties(vrpn_phantom
|
|
+ PROPERTIES
|
|
+ VERSION ${CPACK_PACKAGE_VERSION}
|
|
+ SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})
|
|
|
|
if(VRPN_INSTALL)
|
|
install(TARGETS
|
|
diff -Naur a/server_src/timecode_generator_server/CMakeLists.txt b/server_src/timecode_generator_server/CMakeLists.txt
|
|
--- a/server_src/timecode_generator_server/CMakeLists.txt 2022-05-30 10:26:37.000000000 -0700
|
|
+++ b/server_src/timecode_generator_server/CMakeLists.txt 2023-10-28 09:03:00.889526649 -0700
|
|
@@ -20,7 +20,11 @@
|
|
set_target_properties(vrpn_timecode_generator
|
|
PROPERTIES
|
|
FOLDER
|
|
- "Main Server")
|
|
+ "Main Server"
|
|
+ VERSION
|
|
+ ${CPACK_PACKAGE_VERSION}
|
|
+ SOVERSION
|
|
+ ${CPACK_PACKAGE_VERSION_MAJOR})
|
|
|
|
if(VRPN_INSTALL)
|
|
install(TARGETS
|