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