1 Star 0 Fork 1

upczap/vrpn

forked from ianaxe/vrpn 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
CMakeLists.txt 43.08 KB
一键复制 编辑 原始数据 按行查看 历史
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563
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 <[email protected]>")
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)
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_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_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)
if(NOT VRPN_CLIENT_ONLY)
set_property(TARGET
vrpn
PROPERTY
COMPILE_DEFINITIONS
"VRPN_CLIENT_ONLY")
endif()
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)
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()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/jari/vrpn.git
[email protected]:jari/vrpn.git
jari
vrpn
vrpn
master

搜索帮助