From 79ad5776cc3822f84f2ba3ae01d4cfcde0fe05c2 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sun, 5 Feb 2023 23:24:12 +0100 Subject: [PATCH] CMake cleanup (#2489) * CMake Cleanup * Warning suppression with CEF * Use SGCT tinyxml in skybrowser for now * Disable warnings about missing field initializers --- CMakeLists.txt | 97 +- apps/OpenSpace-MinVR/CMakeLists.txt | 8 +- apps/OpenSpace/CMakeLists.txt | 24 +- apps/OpenSpace/ext/launcher/CMakeLists.txt | 7 +- .../launcher/src/profile/horizonsdialog.cpp | 4 +- .../ext/launcher/src/profile/timedialog.cpp | 3 +- apps/OpenSpace/ext/sgct | 2 +- apps/Sync/CMakeLists.txt | 4 +- apps/TaskRunner/CMakeLists.txt | 4 +- ext/CMakeLists.txt | 10 +- ext/ghoul | 2 +- modules/CMakeLists.txt | 10 +- modules/atmosphere/CMakeLists.txt | 2 +- modules/base/CMakeLists.txt | 2 +- modules/base/rendering/renderablemodel.cpp | 4 +- modules/cefwebgui/CMakeLists.txt | 2 +- modules/debugging/CMakeLists.txt | 2 +- modules/digitaluniverse/CMakeLists.txt | 4 +- .../rendering/renderableplanescloud.h | 1 - modules/exoplanets/CMakeLists.txt | 2 +- modules/fieldlines/CMakeLists.txt | 2 +- modules/fieldlinessequence/CMakeLists.txt | 2 +- modules/fitsfilereader/CMakeLists.txt | 34 +- modules/gaia/CMakeLists.txt | 8 +- .../gaia/rendering/renderablegaiastars.cpp | 2 +- modules/galaxy/CMakeLists.txt | 6 +- modules/globebrowsing/CMakeLists.txt | 2 +- modules/globebrowsing/globebrowsingmodule.cpp | 2 +- modules/globebrowsing/src/layermanager.cpp | 2 +- modules/globebrowsing/src/renderableglobe.cpp | 2 +- modules/imgui/CMakeLists.txt | 6 +- modules/imgui/src/guipropertycomponent.cpp | 8 - modules/iswa/CMakeLists.txt | 2 +- modules/kameleon/CMakeLists.txt | 29 +- modules/kameleonvolume/CMakeLists.txt | 2 +- modules/multiresvolume/CMakeLists.txt | 2 +- modules/server/CMakeLists.txt | 2 +- modules/server/servermodule.cpp | 2 +- modules/server/src/topics/cameratopic.cpp | 1 - modules/skybrowser/CMakeLists.txt | 9 +- modules/skybrowser/ext/tinyxml2/tinyxml2.cpp | 3008 ----------------- modules/skybrowser/ext/tinyxml2/tinyxml2.h | 2380 ------------- .../include/screenspaceskybrowser.h | 1 - modules/skybrowser/include/wwtcommunicator.h | 2 +- modules/skybrowser/skybrowsermodule.cpp | 2 +- .../skybrowser/src/screenspaceskybrowser.cpp | 2 +- modules/skybrowser/src/targetbrowserpair.cpp | 2 +- modules/skybrowser/src/utility.cpp | 4 +- modules/skybrowser/src/wwtcommunicator.cpp | 9 +- modules/skybrowser/src/wwtdatahandler.cpp | 13 +- modules/space/CMakeLists.txt | 2 +- modules/space/labelscomponent.cpp | 6 - .../renderableconstellationlines.cpp | 4 +- .../renderableconstellationsbase.cpp | 6 +- .../rendering/renderableorbitalkepler.cpp | 2 +- .../space/rendering/renderableorbitalkepler.h | 1 - modules/space/translation/gptranslation.cpp | 2 +- modules/spacecraftinstruments/CMakeLists.txt | 4 +- .../rendering/renderableplanetprojection.cpp | 3 - modules/spout/CMakeLists.txt | 2 +- modules/statemachine/CMakeLists.txt | 2 +- modules/sync/CMakeLists.txt | 2 +- modules/touch/CMakeLists.txt | 7 +- modules/toyvolume/CMakeLists.txt | 2 +- modules/vislab/CMakeLists.txt | 2 +- modules/volume/CMakeLists.txt | 2 +- modules/webbrowser/CMakeLists.txt | 15 +- modules/webbrowser/src/eventhandler.cpp | 4 +- modules/webgui/CMakeLists.txt | 2 +- src/CMakeLists.txt | 726 ++-- src/interaction/joystickcamerastates.cpp | 2 +- src/interaction/mousecamerastates.cpp | 6 +- src/properties/property.cpp | 2 - src/scene/scene.cpp | 2 +- src/util/coordinateconversion.cpp | 2 +- support/cmake/application_definition.cmake | 27 +- support/cmake/module_common.cmake | 2 +- support/cmake/module_definition.cmake | 11 +- support/cmake/packaging.cmake | 30 +- .../set_openspace_compile_settings.cmake | 26 +- support/coding/codegen | 2 +- tests/CMakeLists.txt | 2 +- tests/test_spicemanager.cpp | 6 +- 83 files changed, 608 insertions(+), 6050 deletions(-) delete mode 100644 modules/skybrowser/ext/tinyxml2/tinyxml2.cpp delete mode 100644 modules/skybrowser/ext/tinyxml2/tinyxml2.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c35dfa48b4..09410db6b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,8 +22,8 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -cmake_minimum_required(VERSION 3.10 FATAL_ERROR) -cmake_policy(SET CMP0120 NEW) +cmake_minimum_required(VERSION 3.25 FATAL_ERROR) +cmake_policy(VERSION 3.25) project(OpenSpace) @@ -32,18 +32,12 @@ set(OPENSPACE_VERSION_MINOR 19) set(OPENSPACE_VERSION_PATCH 0) set(OPENSPACE_VERSION_STRING "") -set(OPENSPACE_BASE_DIR "${PROJECT_SOURCE_DIR}") -set(OPENSPACE_CMAKE_EXT_DIR "${OPENSPACE_BASE_DIR}/support/cmake") -set(GHOUL_BASE_DIR "${OPENSPACE_BASE_DIR}/ext/ghoul") - -include(${OPENSPACE_CMAKE_EXT_DIR}/module_common.cmake) -include(${GHOUL_BASE_DIR}/support/cmake/copy_shared_libraries.cmake) -include(${GHOUL_BASE_DIR}/support/cmake/handle_external_library.cmake) -include(${GHOUL_BASE_DIR}/support/cmake/message_macros.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_common.cmake) +include(${PROJECT_SOURCE_DIR}/ext/ghoul/support/cmake/message_macros.cmake) begin_header("Configuring OpenSpace project") -# Bail out if the user tries to generate a 32 bit project. +# Bail out if the user tries to generate a 32 bit project if (NOT ${CMAKE_SIZEOF_VOID_P} EQUAL 8) message(FATAL_ERROR "OpenSpace can only be generated for 64 bit architectures.") endif () @@ -51,9 +45,7 @@ endif () ########################################################################################## # Cleanup project # ########################################################################################## -set(OPENSPACE_APPS_DIR "${OPENSPACE_BASE_DIR}/apps") - -if (NOT EXISTS "${OPENSPACE_BASE_DIR}/ext/ghoul/CMakeLists.txt") +if (NOT EXISTS "${PROJECT_SOURCE_DIR}/ext/ghoul/CMakeLists.txt") message(FATAL_ERROR "Git submodules are missing. Please run " "git submodule update --init --recursive to download the missing dependencies." ) @@ -68,11 +60,13 @@ mark_as_advanced(CMAKE_BACKWARDS_COMPATIBILITY CMAKE_BUILD_TYPE CMAKE_DEBUG_POST ) # Set build output directories -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${OPENSPACE_CMAKE_EXT_DIR}) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OPENSPACE_BASE_DIR}/bin) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/support/cmake) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) -# "OpenSpace Helper" is not a valid CMake target name under OLD -cmake_policy(SET CMP0037 NEW) +if (MSVC) + # Force all builds to be multi-threaded and increase number of sections in obj files + add_definitions(/MP /bigobj) +endif () ########################################################################################## # Main # @@ -106,8 +100,6 @@ else () set(OPENSPACE_GIT_STATUS "") endif () -option(OPENSPACE_WARNINGS_AS_ERRORS "Treat warnings as errors" OFF) - if (MSVC) option(OPENSPACE_BREAK_ON_FLOATING_POINT_EXCEPTION "Raise exceptions when encountering Inf's or Nan's in floating point numbers" OFF) @@ -134,31 +126,26 @@ if (MSVC) set(GHOUL_OPTIMIZATION_ENABLE_OTHER_OPTIMIZATIONS ${OPENSPACE_OPTIMIZATION_ENABLE_OTHER_OPTIMIZATIONS} CACHE BOOL "" FORCE) endif () -if (UNIX) - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -stdlib=libc++") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -lc++ -lc++abi") - else () - if (NOT CMAKE_BUILD_TYPE) - #Can set to "RelWithDebInfo" or "Debug" also, but problems occur if this is blank by default - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Default build type" FORCE) - endif () - if (NOT DEFINED CMAKE_CXX_FLAGS OR CMAKE_CXX_FLAGS MATCHES "") - set(CMAKE_CXX_FLAGS " ") - endif () - STRING(FIND ${CMAKE_CXX_FLAGS} "GLM_ENABLE_EXPERIMENTAL" GLM_FLAG_POS) - if (${GLM_FLAG_POS} EQUAL -1) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGLM_ENABLE_EXPERIMENTAL" CACHE STRING "" FORCE) - endif () - set(OpenGL_GL_PREFERENCE "GLVND" CACHE STRING "OpenGL Preference setting necessary for linux" FORCE) - #Fix for gcc tolerating space in target name - if (NOT DEFINED CMAKE_C_FLAGS OR CMAKE_C_FLAGS MATCHES "") - set(CMAKE_C_FLAGS " ") - endif () - STRING(FIND ${CMAKE_C_FLAGS} "_GNU_SOURCE" GNUSOURCE_FLAG_POS) - if (${GNUSOURCE_FLAG_POS} EQUAL -1) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE" CACHE STRING "" FORCE) - endif () +if (UNIX AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") + if (NOT CMAKE_BUILD_TYPE) + # Can set to "RelWithDebInfo" or "Debug" also, but problems occur if this is blank by default + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Default build type" FORCE) + endif () + if (NOT DEFINED CMAKE_CXX_FLAGS OR CMAKE_CXX_FLAGS MATCHES "") + set(CMAKE_CXX_FLAGS " ") + endif () + STRING(FIND ${CMAKE_CXX_FLAGS} "GLM_ENABLE_EXPERIMENTAL" GLM_FLAG_POS) + if (${GLM_FLAG_POS} EQUAL -1) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGLM_ENABLE_EXPERIMENTAL" CACHE STRING "" FORCE) + endif () + set(OpenGL_GL_PREFERENCE "GLVND" CACHE STRING "OpenGL Preference setting necessary for linux" FORCE) + # Fix for GCC tolerating space in target name + if (NOT DEFINED CMAKE_C_FLAGS OR CMAKE_C_FLAGS MATCHES "") + set(CMAKE_C_FLAGS " ") + endif () + STRING(FIND ${CMAKE_C_FLAGS} "_GNU_SOURCE" GNUSOURCE_FLAG_POS) + if (${GNUSOURCE_FLAG_POS} EQUAL -1) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE" CACHE STRING "" FORCE) endif () endif () @@ -176,12 +163,12 @@ add_custom_target( add_dependencies(run_codegen codegen) add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/__codegen.h" - COMMAND codegen ARGS "${OPENSPACE_BASE_DIR}/modules" "${OPENSPACE_BASE_DIR}/src" + COMMAND codegen ARGS "${PROJECT_SOURCE_DIR}/modules" "${PROJECT_SOURCE_DIR}/src" VERBATIM ) -set_folder_location(codegen-lib "support") -set_folder_location(codegen "support") -set_folder_location(run_codegen "support") +set_target_properties(codegen-lib PROPERTIES FOLDER "support") +set_target_properties(codegen PROPERTIES FOLDER "support") +set_target_properties(run_codegen PROPERTIES FOLDER "support") # Qt @@ -218,12 +205,12 @@ end_header("End: Configuring Modules") add_subdirectory(support/coding/codegen/tests) -set_folder_location(run_test_codegen "Unit Tests/support") -set_folder_location(codegentest "Unit Tests") +set_target_properties(run_test_codegen PROPERTIES FOLDER "Unit Tests/support") +set_target_properties(codegentest PROPERTIES FOLDER "Unit Tests") begin_header("Configuring Applications") -add_subdirectory("${OPENSPACE_APPS_DIR}") +add_subdirectory(apps) end_header("End: Configuring Applications") @@ -235,7 +222,7 @@ endif () option(OPENSPACE_HAVE_TESTS "Activate the OpenSpace unit tests" ON) if (OPENSPACE_HAVE_TESTS) begin_header("Generating OpenSpace unit test") - add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/tests") + add_subdirectory(tests) end_header() endif (OPENSPACE_HAVE_TESTS) @@ -250,7 +237,7 @@ if (OPENSPACE_MODULE_WEBBROWSER AND CEF_ROOT) set(PROJECT_ARCH "x86_64") if (WIN32) - set(RESOURCE_FILE ${OPENSPACE_APPS_DIR}/OpenSpace/openspace.rc) + set(RESOURCE_FILE openspace.rc) endif () # Add the CEF binary distribution's cmake/ directory to the module path and @@ -266,6 +253,6 @@ endif () ########################################################################################## # Manage the CPack packaging -include(${OPENSPACE_CMAKE_EXT_DIR}/packaging.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/packaging.cmake) end_header("End: Configuring OpenSpace project") diff --git a/apps/OpenSpace-MinVR/CMakeLists.txt b/apps/OpenSpace-MinVR/CMakeLists.txt index ae592d8d42..4f9e59fd48 100644 --- a/apps/OpenSpace-MinVR/CMakeLists.txt +++ b/apps/OpenSpace-MinVR/CMakeLists.txt @@ -22,9 +22,9 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${GHOUL_BASE_DIR}/support/cmake/copy_shared_libraries.cmake) -include(${OPENSPACE_CMAKE_EXT_DIR}/application_definition.cmake) -include(${OPENSPACE_CMAKE_EXT_DIR}/global_variables.cmake) +include(${PROJECT_SOURCE_DIR}/ext/ghoul/support/cmake/copy_shared_libraries.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/application_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/global_variables.cmake) set(MACOSX_BUNDLE_ICON_FILE openspace.icns) @@ -57,7 +57,7 @@ target_link_libraries(OpenSpace-MinVR PUBLIC openspace-core MinVR) # target as of July 2017, which is needed. if (OPENSPACE_MODULE_WEBBROWSER AND CEF_ROOT) if (WIN32) - set(RESOURCE_FILE ${OPENSPACE_APPS_DIR}/OpenSpace-MinVR/openspace.rc) + set(RESOURCE_FILE openspace.rc) endif () # Add the CEF binary distribution's cmake/ directory to the module path and diff --git a/apps/OpenSpace/CMakeLists.txt b/apps/OpenSpace/CMakeLists.txt index 9dd334e0f9..80670c427e 100644 --- a/apps/OpenSpace/CMakeLists.txt +++ b/apps/OpenSpace/CMakeLists.txt @@ -22,9 +22,8 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${GHOUL_BASE_DIR}/support/cmake/copy_shared_libraries.cmake) -include(${GHOUL_BASE_DIR}/support/cmake/message_macros.cmake) -include(${OPENSPACE_CMAKE_EXT_DIR}/application_definition.cmake) +include(${PROJECT_SOURCE_DIR}/ext/ghoul/support/cmake/message_macros.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/application_definition.cmake) # We are getting all_enabled_modules from the handle_applications.cmake file which gets # it from the main CMakeLists file @@ -43,14 +42,14 @@ if (OPENSPACE_OPENVR_SUPPORT) if (WIN32) find_path(SGCT_OPENVR_INCLUDE_DIRECTORY NAMES SGCTOpenVR.h - PATHS ${OPENSPACE_BASE_DIR}/ext/sgct/additional_includes/openvr NO_DEFAULT_PATH + PATHS ${PROJECT_SOURCE_DIR}/ext/sgct/additional_includes/openvr NO_DEFAULT_PATH REQUIRED ) else () find_path(SGCT_OPENVR_INCLUDE_DIRECTORY NAMES SGCTOpenVR.h PATH_SUFFIXES SGCTOpenVR - PATHS ${OPENSPACE_BASE_DIR}/ext/sgct/additional_includes/openvr + PATHS ${PROJECT_SOURCE_DIR}/ext/sgct/additional_includes/openvr REQUIRED ) endif () @@ -115,19 +114,14 @@ set(SGCT_TEXT OFF CACHE BOOL "" FORCE) set(SGCT_DEP_INCLUDE_FREETYPE OFF CACHE BOOL "" FORCE) set(SGCT_DEP_INCLUDE_FMT OFF CACHE BOOL "" FORCE) set(SGCT_DEP_INCLUDE_SCN OFF CACHE BOOL "" FORCE) +set(SGCT_DEP_INCLUDE_CATCH2 OFF CACHE BOOL "" FORCE) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ext/sgct) target_link_libraries(OpenSpace PRIVATE sgct) -set_folder_location(sgct "External") -set_folder_location(glfw "External") -set_folder_location(miniziplibstatic "External") -set_folder_location(png16_static "External") -set_folder_location(quat "External") -set_folder_location(tinyxml2static "External") -set_folder_location(vrpn "External") -set_folder_location(zlibstatic "External") -set_folder_location(SGCTTest "Unit Tests") +set_target_properties(sgct PROPERTIES FOLDER "External") +set_target_properties(glfw PROPERTIES FOLDER "External") +set_target_properties(SGCTTest PROPERTIES FOLDER "External") if (UNIX AND (NOT APPLE)) target_link_libraries(OpenSpace PRIVATE Xcursor Xinerama X11) @@ -161,7 +155,7 @@ if (OPENSPACE_MODULE_WEBBROWSER AND CEF_ROOT) set(PROJECT_ARCH "x86_64") if (WIN32) - set(RESOURCE_FILE ${OPENSPACE_APPS_DIR}/OpenSpace/openspace.rc) + set(RESOURCE_FILE openspace.rc) endif () # Add the CEF binary distribution's cmake/ directory to the module path and diff --git a/apps/OpenSpace/ext/launcher/CMakeLists.txt b/apps/OpenSpace/ext/launcher/CMakeLists.txt index c31f3087db..b1c87bfe64 100644 --- a/apps/OpenSpace/ext/launcher/CMakeLists.txt +++ b/apps/OpenSpace/ext/launcher/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/set_openspace_compile_settings.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/set_openspace_compile_settings.cmake) set(HEADER_FILES include/filesystemaccess.h @@ -113,8 +113,9 @@ target_include_directories( openspace-ui-launcher PUBLIC include - ${OPENSPACE_APPS_DIR}/OpenSpace/ext/sgct/include - ${OPENSPACE_APPS_DIR}/OpenSpace/ext/sgct/sgct/ext/glm + # @TODO: This should be handled in a better way + ../sgct/include + ../sgct/sgct/ext/glm ) target_link_libraries( openspace-ui-launcher diff --git a/apps/OpenSpace/ext/launcher/src/profile/horizonsdialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/horizonsdialog.cpp index d47e31338c..ba6027adc6 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/horizonsdialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/horizonsdialog.cpp @@ -457,8 +457,8 @@ bool HorizonsDialog::isValidInput() { // Range 1 to 2147483647 (max of 32 bit int). // Horizons read the step size into a 32 bit int, but verifies the input on their // website as a uint32_t. If step size over 32 bit int is sent, this error message is - // recived: Cannot read numeric value -- re-enter - if (step < 1 || step > std::numeric_limits::max()) { + // received: Cannot read numeric value -- re-enter + if (step < 1) { _errorMsg->setText(QString::fromStdString(fmt::format( "Step size is outside valid range 1 to '{}'", std::numeric_limits::max() diff --git a/apps/OpenSpace/ext/launcher/src/profile/timedialog.cpp b/apps/OpenSpace/ext/launcher/src/profile/timedialog.cpp index 63557a3dcd..0eeae0a527 100644 --- a/apps/OpenSpace/ext/launcher/src/profile/timedialog.cpp +++ b/apps/OpenSpace/ext/launcher/src/profile/timedialog.cpp @@ -52,7 +52,8 @@ TimeDialog::TimeDialog(QWidget* parent, std::optional* if (_timeData.value.empty()) { _timeData.value = "0d"; } - _relativeEdit->setSelection(0, _relativeEdit->text().length()); + int len = static_cast(_relativeEdit->text().length()); + _relativeEdit->setSelection(0, len); } else { _absoluteEdit->setSelectedSection(QDateTimeEdit::YearSection); diff --git a/apps/OpenSpace/ext/sgct b/apps/OpenSpace/ext/sgct index 65ba2fd03b..5a42316a64 160000 --- a/apps/OpenSpace/ext/sgct +++ b/apps/OpenSpace/ext/sgct @@ -1 +1 @@ -Subproject commit 65ba2fd03b48b337aeaff1443eeda65a51a1dcf6 +Subproject commit 5a42316a648c7402cf6d20ec49dd56da14b7ca4a diff --git a/apps/Sync/CMakeLists.txt b/apps/Sync/CMakeLists.txt index 9aca731357..63800783e1 100644 --- a/apps/Sync/CMakeLists.txt +++ b/apps/Sync/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/application_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/application_definition.cmake) set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/openspace.icns @@ -47,7 +47,7 @@ if (OPENSPACE_MODULE_WEBBROWSER AND CEF_ROOT) set(CMAKE_BUILD_TYPE Debug CACHE STRING "CMAKE_BUILD_TYPE") if (WIN32) - set(RESOURCE_FILE ${OPENSPACE_APPS_DIR}/OpenSpace/openspace.rc) + set(RESOURCE_FILE openspace.rc) endif () # Add the CEF binary distribution's cmake/ directory to the module path and diff --git a/apps/TaskRunner/CMakeLists.txt b/apps/TaskRunner/CMakeLists.txt index 017ee293c7..d22fd966fa 100644 --- a/apps/TaskRunner/CMakeLists.txt +++ b/apps/TaskRunner/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/application_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/application_definition.cmake) set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/openspace.icns @@ -47,7 +47,7 @@ if (OPENSPACE_MODULE_WEBBROWSER AND CEF_ROOT) set(CMAKE_BUILD_TYPE Debug CACHE STRING "CMAKE_BUILD_TYPE") if (WIN32) - set(RESOURCE_FILE ${OPENSPACE_APPS_DIR}/OpenSpace/openspace.rc) + set(RESOURCE_FILE openspace.rc) endif () # Add the CEF binary distribution's cmake/ directory to the module path and diff --git a/ext/CMakeLists.txt b/ext/CMakeLists.txt index b696061e25..3bb558417a 100644 --- a/ext/CMakeLists.txt +++ b/ext/CMakeLists.txt @@ -22,8 +22,6 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/set_openspace_compile_settings.cmake) - # System libraries if (APPLE) begin_dependency("Core Libraries") @@ -48,16 +46,14 @@ endif () # Ghoul add_subdirectory(ghoul) -set_folder_location(Lua "External") -set_folder_location(lz4 "External") -set_folder_location(GhoulTest "Unit Tests") +set_target_properties(GhoulTest PROPERTIES FOLDER "Unit Tests") # Spice begin_dependency("Spice") set(SPICE_BUILD_SHARED_LIBRARY OFF CACHE BOOL "" FORCE) -add_subdirectory(spice) +add_subdirectory(spice SYSTEM) target_compile_features(spice PUBLIC cxx_std_20) -set_folder_location(spice "External") +set_target_properties(spice PROPERTIES FOLDER "External") end_dependency() # Curl diff --git a/ext/ghoul b/ext/ghoul index 21115932ce..742730cd05 160000 --- a/ext/ghoul +++ b/ext/ghoul @@ -1 +1 @@ -Subproject commit 21115932cebd960d289f75a463c21aacee4041e5 +Subproject commit 742730cd05262ddab2e050e2e707d9c1853edc04 diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index c3d48ba749..4473f38255 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -22,8 +22,8 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/global_variables.cmake) -include(${GHOUL_BASE_DIR}/support/cmake/message_macros.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/global_variables.cmake) +include(${PROJECT_SOURCE_DIR}/ext/ghoul/support/cmake/message_macros.cmake) # This function takes a list of module paths and returns the list of include paths that @@ -164,7 +164,7 @@ endfunction () set(OPENSPACE_EXTERNAL_MODULES_PATHS "" CACHE STRING "List of external modules") -set(internal_module_path "${OPENSPACE_BASE_DIR}/modules") +set(internal_module_path "${PROJECT_SOURCE_DIR}/modules") set(all_enabled_modules "") @@ -378,12 +378,12 @@ if (NOT "${MODULE_PATHS}" STREQUAL "") endif () configure_file( - ${OPENSPACE_CMAKE_EXT_DIR}/module_registration.template + ${PROJECT_SOURCE_DIR}/support/cmake/module_registration.template ${CMAKE_BINARY_DIR}/_generated/include/openspace/moduleregistration.h ) configure_file( - ${OPENSPACE_CMAKE_EXT_DIR}/module_path.template + ${PROJECT_SOURCE_DIR}/support/cmake/module_path.template ${CMAKE_BINARY_DIR}/_generated/include/openspace/modulepath.h ) diff --git a/modules/atmosphere/CMakeLists.txt b/modules/atmosphere/CMakeLists.txt index 7c0815ae26..abc62c3d4c 100644 --- a/modules/atmosphere/CMakeLists.txt +++ b/modules/atmosphere/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES rendering/atmospheredeferredcaster.h diff --git a/modules/base/CMakeLists.txt b/modules/base/CMakeLists.txt index 220360e2a9..f37c8bc1a0 100644 --- a/modules/base/CMakeLists.txt +++ b/modules/base/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES dashboard/dashboarditemangle.h diff --git a/modules/base/rendering/renderablemodel.cpp b/modules/base/rendering/renderablemodel.cpp index 434e02d217..8f6a826150 100644 --- a/modules/base/rendering/renderablemodel.cpp +++ b/modules/base/rendering/renderablemodel.cpp @@ -732,7 +732,7 @@ void RenderableModel::update(const UpdateData& data) { // starts again // s/\/\/\/\ ... relativeTime = - duration - abs(fmod(now - startTime, 2 * duration) - duration); + duration - std::abs(fmod(now - startTime, 2 * duration) - duration); break; case AnimationMode::BounceInfinitely: { // Bounce both before and after the start time where the model is @@ -742,7 +742,7 @@ void RenderableModel::update(const UpdateData& data) { if (modulo < 0.0) { modulo += 2 * duration; } - relativeTime = duration - abs(modulo - duration); + relativeTime = duration - std::abs(modulo - duration); break; } case AnimationMode::Once: diff --git a/modules/cefwebgui/CMakeLists.txt b/modules/cefwebgui/CMakeLists.txt index 6b8cf42711..531702b264 100644 --- a/modules/cefwebgui/CMakeLists.txt +++ b/modules/cefwebgui/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) include(../webbrowser/cmake/webbrowser_helpers.cmake) set(CEFWEBGUI_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "CEFWEBGUI_MODULE_PATH") diff --git a/modules/debugging/CMakeLists.txt b/modules/debugging/CMakeLists.txt index 2495cf69fa..b72d237135 100644 --- a/modules/debugging/CMakeLists.txt +++ b/modules/debugging/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES debuggingmodule.h diff --git a/modules/digitaluniverse/CMakeLists.txt b/modules/digitaluniverse/CMakeLists.txt index aa2a475a0e..252b33d460 100644 --- a/modules/digitaluniverse/CMakeLists.txt +++ b/modules/digitaluniverse/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES rendering/renderablepoints.h @@ -34,7 +34,7 @@ source_group("Header Files" FILES ${HEADER_FILES}) set(SOURCE_FILES rendering/renderablepoints.cpp - rendering/renderabledumeshes.cpp + rendering/renderabledumeshes.cpp rendering/renderablebillboardscloud.cpp rendering/renderableplanescloud.cpp ) diff --git a/modules/digitaluniverse/rendering/renderableplanescloud.h b/modules/digitaluniverse/rendering/renderableplanescloud.h index a9f057a8c8..4ee824e228 100644 --- a/modules/digitaluniverse/rendering/renderableplanescloud.h +++ b/modules/digitaluniverse/rendering/renderableplanescloud.h @@ -87,7 +87,6 @@ private: bool _hasSpeckFile = false; bool _dataIsDirty = true; - bool _textColorIsDirty = true; bool _hasLabels = false; properties::FloatProperty _scaleFactor; diff --git a/modules/exoplanets/CMakeLists.txt b/modules/exoplanets/CMakeLists.txt index 6e82ca21a1..a803fa179b 100644 --- a/modules/exoplanets/CMakeLists.txt +++ b/modules/exoplanets/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES exoplanetshelper.h diff --git a/modules/fieldlines/CMakeLists.txt b/modules/fieldlines/CMakeLists.txt index 288a72eb15..8951237b92 100644 --- a/modules/fieldlines/CMakeLists.txt +++ b/modules/fieldlines/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES rendering/renderablefieldlines.h diff --git a/modules/fieldlinessequence/CMakeLists.txt b/modules/fieldlinessequence/CMakeLists.txt index 72ec2ca260..e04a63f744 100644 --- a/modules/fieldlinessequence/CMakeLists.txt +++ b/modules/fieldlinessequence/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES rendering/renderablefieldlinessequence.h diff --git a/modules/fitsfilereader/CMakeLists.txt b/modules/fitsfilereader/CMakeLists.txt index f45670eeb9..d534344961 100644 --- a/modules/fitsfilereader/CMakeLists.txt +++ b/modules/fitsfilereader/CMakeLists.txt @@ -22,8 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) -include(${GHOUL_BASE_DIR}/support/cmake/handle_external_library.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES fitsfilereadermodule.h @@ -31,7 +30,7 @@ set(HEADER_FILES ) source_group("Header Files" FILES ${HEADER_FILES}) -set(SOURCE_FILES +set(SOURCE_FILES fitsfilereadermodule.cpp src/fitsfilereader.cpp ) @@ -44,25 +43,28 @@ create_new_module( ${SOURCE_FILES} ) -# Set root directories for external libraries. -set(CFITSIO_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ext/cfitsio/") -set(CCFITS_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ext/CCfits/") -set(INCLUDES_FOR_TARGET ${CCFITS_ROOT_DIR} "${CCFITS_ROOT_DIR}/../" ${CFITSIO_ROOT_DIR}) -set(MODULE_NAME openspace-module-fitsfilereader) - # CCfits is dependent on cfitsio, let it handle the internal linking -add_subdirectory(${CFITSIO_ROOT_DIR}) -set_folder_location(cfitsio "External") +add_subdirectory(ext/cfitsio SYSTEM) +set_target_properties(cfitsio PROPERTIES FOLDER "External") set(cfitsio_BUILD_SHARED_LIBS OFF) -add_subdirectory(${CCFITS_ROOT_DIR}) -set_folder_location(CCfits "External") +add_subdirectory(ext/CCfits SYSTEM) +set_target_properties(CCfits PROPERTIES FOLDER "External") set(CCfits_BUILD_SHARED_LIBS OFF) -disable_external_warnings(cfitsio) -disable_external_warnings(CCfits) +if (MSVC) + target_compile_options(cfitsio PRIVATE "/W0") + target_compile_definitions(cfitsio PRIVATE "_SCL_SECURE_NO_WARNINGS") -target_include_directories(openspace-module-fitsfilereader SYSTEM PRIVATE ${INCLUDES_FOR_TARGET}) + target_compile_options(CCfits PRIVATE "/W0") + target_compile_definitions(CCfits PRIVATE "_SCL_SECURE_NO_WARNINGS") +else () + target_compile_options(cfitsio PRIVATE "-w") + target_compile_options(CCfits PRIVATE "-w") +endif () + + +target_include_directories(openspace-module-fitsfilereader SYSTEM PRIVATE ext ext/CCfits ext/cfitsio) target_link_libraries(openspace-module-fitsfilereader PRIVATE cfitsio CCfits) target_precompile_headers(CCfits PRIVATE diff --git a/modules/gaia/CMakeLists.txt b/modules/gaia/CMakeLists.txt index a6ce4bab27..dae14a125a 100644 --- a/modules/gaia/CMakeLists.txt +++ b/modules/gaia/CMakeLists.txt @@ -22,17 +22,17 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES gaiamodule.h rendering/renderablegaiastars.h rendering/octreemanager.h rendering/octreeculler.h - tasks/readfilejob.h - tasks/readfitstask.h + tasks/readfilejob.h + tasks/readfitstask.h tasks/readspecktask.h - tasks/constructoctreetask.h + tasks/constructoctreetask.h rendering/gaiaoptions.h ) source_group("Header Files" FILES ${HEADER_FILES}) diff --git a/modules/gaia/rendering/renderablegaiastars.cpp b/modules/gaia/rendering/renderablegaiastars.cpp index ccea1a00bf..0058529543 100644 --- a/modules/gaia/rendering/renderablegaiastars.cpp +++ b/modules/gaia/rendering/renderablegaiastars.cpp @@ -928,7 +928,7 @@ void RenderableGaiaStars::render(const RenderData& data, RendererTasks&) { glm::vec2 screenSize = glm::vec2(global::renderEngine->renderingResolution()); // Wait until camera has stabilized before we traverse the Octree/stream from files. - const double rotationDiff = abs(length(_previousCameraRotation) - + const double rotationDiff = std::abs(length(_previousCameraRotation) - length(data.camera.rotationQuaternion())); if (_firstDrawCalls && rotationDiff > 1e-10) { _previousCameraRotation = data.camera.rotationQuaternion(); diff --git a/modules/galaxy/CMakeLists.txt b/modules/galaxy/CMakeLists.txt index d730d45842..0aeb7134cc 100644 --- a/modules/galaxy/CMakeLists.txt +++ b/modules/galaxy/CMakeLists.txt @@ -22,10 +22,10 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES - galaxymodule.h + galaxymodule.h rendering/galaxyraycaster.h rendering/renderablegalaxy.h tasks/milkywayconversiontask.h @@ -34,7 +34,7 @@ set(HEADER_FILES source_group("Header Files" FILES ${HEADER_FILES}) set(SOURCE_FILES - galaxymodule.cpp + galaxymodule.cpp rendering/galaxyraycaster.cpp rendering/renderablegalaxy.cpp tasks/milkywayconversiontask.cpp diff --git a/modules/globebrowsing/CMakeLists.txt b/modules/globebrowsing/CMakeLists.txt index 24e84d32d9..1bc921acf4 100644 --- a/modules/globebrowsing/CMakeLists.txt +++ b/modules/globebrowsing/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES globebrowsingmodule.h diff --git a/modules/globebrowsing/globebrowsingmodule.cpp b/modules/globebrowsing/globebrowsingmodule.cpp index f353633f99..97e7f28a4b 100644 --- a/modules/globebrowsing/globebrowsingmodule.cpp +++ b/modules/globebrowsing/globebrowsingmodule.cpp @@ -146,7 +146,7 @@ namespace { std::fill(IdentifierBuffer.begin(), IdentifierBuffer.end(), '\0'); int ret = sscanf( subDatasets[i], - "SUBDATASET_%i_%256[^=]", + "SUBDATASET_%i_%255[^=]", &iDataset, IdentifierBuffer.data() ); diff --git a/modules/globebrowsing/src/layermanager.cpp b/modules/globebrowsing/src/layermanager.cpp index d8afc32605..ad6e514f8c 100644 --- a/modules/globebrowsing/src/layermanager.cpp +++ b/modules/globebrowsing/src/layermanager.cpp @@ -145,7 +145,7 @@ std::array LayerManager::layerGroups( ZoneScoped std::array res = {}; - for (int i = 0; i < NumLayerGroups; ++i) { + for (size_t i = 0; i < NumLayerGroups; ++i) { res[i] = _layerGroups[i].get(); } return res; diff --git a/modules/globebrowsing/src/renderableglobe.cpp b/modules/globebrowsing/src/renderableglobe.cpp index 89c2b8c908..b23bc233ae 100644 --- a/modules/globebrowsing/src/renderableglobe.cpp +++ b/modules/globebrowsing/src/renderableglobe.cpp @@ -1713,7 +1713,7 @@ void RenderableGlobe::recompileShaders() { } ghoul::Dictionary layerGroupNames; - for (int i = 0; i < layers::Groups.size(); ++i) { + for (size_t i = 0; i < layers::Groups.size(); ++i) { layerGroupNames.setValue( std::to_string(i), std::string(layers::Groups[i].identifier) diff --git a/modules/imgui/CMakeLists.txt b/modules/imgui/CMakeLists.txt index 29b5eb4487..4cb0a0b834 100644 --- a/modules/imgui/CMakeLists.txt +++ b/modules/imgui/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES include/guiactioncomponent.h @@ -74,4 +74,6 @@ create_new_module( ${HEADER_FILES} ${SOURCE_FILES} ${SHADER_FILES} ) -include_external_library(${imgui_module} PUBLIC Imgui ${CMAKE_CURRENT_SOURCE_DIR}/ext/imgui) +add_subdirectory(ext/imgui SYSTEM) +target_link_libraries(${imgui_module} PUBLIC Imgui) +set_target_properties(Imgui PROPERTIES FOLDER "External") diff --git a/modules/imgui/src/guipropertycomponent.cpp b/modules/imgui/src/guipropertycomponent.cpp index 78ceae63b3..9c3e0b87eb 100644 --- a/modules/imgui/src/guipropertycomponent.cpp +++ b/modules/imgui/src/guipropertycomponent.cpp @@ -53,14 +53,6 @@ namespace { "elements not listed" }; - constexpr openspace::properties::Property::PropertyInfo IgnoreHiddenInfo = { - "IgnoreHidden", - "Ignore Hidden Hint", - "If this value is 'true', all 'Hidden' hints passed into the SceneGraphNodes are " - "ignored and thus all SceneGraphNodes are displayed. If this value is 'false', " - "the hidden hints are followed" - }; - int nVisibleProperties(const std::vector& props) { using Visibility = openspace::properties::Property::Visibility; diff --git a/modules/iswa/CMakeLists.txt b/modules/iswa/CMakeLists.txt index c580e3297a..6031ea4eff 100644 --- a/modules/iswa/CMakeLists.txt +++ b/modules/iswa/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES rendering/datacygnet.h diff --git a/modules/kameleon/CMakeLists.txt b/modules/kameleon/CMakeLists.txt index eacbf68dea..08ea00b1be 100644 --- a/modules/kameleon/CMakeLists.txt +++ b/modules/kameleon/CMakeLists.txt @@ -22,12 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) -include(${GHOUL_BASE_DIR}/support/cmake/handle_external_library.cmake) - -# Use _ROOT variables -# https://cmake.org/cmake/help/git-stage/policy/CMP0074.html -cmake_policy(SET CMP0074 NEW) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES include/kameleonwrapper.h @@ -58,17 +53,22 @@ mark_as_advanced(BUILD_SHARED_LIBS) # Change to set instead of option option(KAMELEON_USE_HDF5 "Kameleon use HDF5" OFF) set(KAMELEON_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ext/kameleon) set(KAMELEON_INCLUDES ${KAMELEON_ROOT_DIR}/src) -add_subdirectory(${KAMELEON_ROOT_DIR}) +add_subdirectory(${KAMELEON_ROOT_DIR} SYSTEM) target_include_directories(${kameleon_module} SYSTEM PUBLIC ${KAMELEON_INCLUDES}) target_link_libraries(${kameleon_module} PRIVATE ccmc) mark_as_advanced(CDF_BUILD_ZLIB CDF_INCLUDES CDF_LIBRARY CDF_USE_STATIC_LIBS CDF_USE_ZLIB HDF5_DIR HDF5_USE_STATIC_LIBRARIES KAMELEON_LIBRARY_ONLY KAMELEON_USE_HDF5 ) -disable_external_warnings(ccmc) -set_folder_location(ccmc "External") +set_target_properties(ccmc PROPERTIES FOLDER "External") if (TARGET cdf) - disable_external_warnings(cdf) - set_folder_location(cdf "External") + if (MSVC) + target_compile_options(cdf PRIVATE "/W0") + target_compile_definitions(cdf PRIVATE "_SCL_SECURE_NO_WARNINGS") + else () + target_compile_options(cdf PRIVATE "-w") + endif () + + set_target_properties(cdf PROPERTIES FOLDER "External") endif () target_precompile_headers(cdf PRIVATE @@ -84,10 +84,3 @@ target_precompile_headers(ccmc PRIVATE "$<$:vector>" "$<$:boost/unordered_map.hpp>" ) - -if (WIN32) - target_compile_options(ccmc PRIVATE /MP) - if (TARGET cdf) - target_compile_options(cdf PRIVATE /MP) - endif () -endif () diff --git a/modules/kameleonvolume/CMakeLists.txt b/modules/kameleonvolume/CMakeLists.txt index b90b6cf4d2..7d475fb2a4 100644 --- a/modules/kameleonvolume/CMakeLists.txt +++ b/modules/kameleonvolume/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES kameleonvolumereader.h diff --git a/modules/multiresvolume/CMakeLists.txt b/modules/multiresvolume/CMakeLists.txt index 493d45d72c..33414e7b08 100644 --- a/modules/multiresvolume/CMakeLists.txt +++ b/modules/multiresvolume/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES rendering/atlasmanager.h diff --git a/modules/server/CMakeLists.txt b/modules/server/CMakeLists.txt index b0db73d896..f4ce6e93ed 100644 --- a/modules/server/CMakeLists.txt +++ b/modules/server/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) set(HEADER_FILES diff --git a/modules/server/servermodule.cpp b/modules/server/servermodule.cpp index 1ecde412c6..3d02d87cc8 100644 --- a/modules/server/servermodule.cpp +++ b/modules/server/servermodule.cpp @@ -56,7 +56,7 @@ ServerModule::ServerModule() // Trigger callbacks using K = CallbackHandle; using V = CallbackFunction; - for (const std::pair& it : _preSyncCallbacks) { + for (const std::pair& it : _preSyncCallbacks) { it.second(); // call function } }); diff --git a/modules/server/src/topics/cameratopic.cpp b/modules/server/src/topics/cameratopic.cpp index 82c4950f69..2dc5b6a01e 100644 --- a/modules/server/src/topics/cameratopic.cpp +++ b/modules/server/src/topics/cameratopic.cpp @@ -37,7 +37,6 @@ namespace { constexpr std::string_view SubscribeEvent = "start_subscription"; - constexpr std::string_view UnsubscribeEvent = "stop_subscription"; } // namespace using nlohmann::json; diff --git a/modules/skybrowser/CMakeLists.txt b/modules/skybrowser/CMakeLists.txt index 7ea6ef0161..7673e2f661 100644 --- a/modules/skybrowser/CMakeLists.txt +++ b/modules/skybrowser/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES skybrowsermodule.h @@ -33,7 +33,6 @@ set(HEADER_FILES include/wwtcommunicator.h include/browser.h include/screenspaceskybrowser.h - ext/tinyxml2/tinyxml2.h ) source_group("Header Files" FILES ${HEADER_FILES}) @@ -47,7 +46,6 @@ set(SOURCE_FILES src/wwtcommunicator.cpp src/browser.cpp src/screenspaceskybrowser.cpp - ext/tinyxml2/tinyxml2.cpp ) source_group("Source Files" FILES ${SOURCE_FILES}) @@ -67,3 +65,8 @@ target_precompile_headers(${skybrowser_module} PRIVATE [["include/cef_accessibility_handler.h"]] [["include/cef_render_handler.h"]] ) + +# This introduces a dependency into SGCT, but the way it is handled is not great right now +# This will break when we remove tinyxml2 from SGCT and then we can move the submodule +# over into this ext folder and fix it well +target_link_libraries(${skybrowser_module} PRIVATE tinyxml2) diff --git a/modules/skybrowser/ext/tinyxml2/tinyxml2.cpp b/modules/skybrowser/ext/tinyxml2/tinyxml2.cpp deleted file mode 100644 index cb04585ff2..0000000000 --- a/modules/skybrowser/ext/tinyxml2/tinyxml2.cpp +++ /dev/null @@ -1,3008 +0,0 @@ -/* -Original code by Lee Thomason (www.grinninglizard.com) - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must -not claim that you wrote the original software. If you use this -software in a product, an acknowledgment in the product documentation -would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. -*/ - -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" -#pragma GCC diagnostic ignored "-Wsuggest-override" -#pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" -#endif - -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wold-style-cast" -#pragma clang diagnostic ignored "-Wsuggest-override" -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" -#endif - -#include "tinyxml2.h" - -#include // yes, this one new style header, is in the Android SDK. -#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__) -# include -# include -#else -# include -# include -#endif - -#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE) - // Microsoft Visual Studio, version 2005 and higher. Not WinCE. - /*int _snprintf_s( - char *buffer, - size_t sizeOfBuffer, - size_t count, - const char *format [, - argument] ... - );*/ - static inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... ) - { - va_list va; - va_start( va, format ); - const int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); - va_end( va ); - return result; - } - - static inline int TIXML_VSNPRINTF( char* buffer, size_t size, const char* format, va_list va ) - { - const int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); - return result; - } - - #define TIXML_VSCPRINTF _vscprintf - #define TIXML_SSCANF sscanf_s -#elif defined _MSC_VER - // Microsoft Visual Studio 2003 and earlier or WinCE - #define TIXML_SNPRINTF _snprintf - #define TIXML_VSNPRINTF _vsnprintf - #define TIXML_SSCANF sscanf - #if (_MSC_VER < 1400 ) && (!defined WINCE) - // Microsoft Visual Studio 2003 and not WinCE. - #define TIXML_VSCPRINTF _vscprintf // VS2003's C runtime has this, but VC6 C runtime or WinCE SDK doesn't have. - #else - // Microsoft Visual Studio 2003 and earlier or WinCE. - static inline int TIXML_VSCPRINTF( const char* format, va_list va ) - { - int len = 512; - for (;;) { - len = len*2; - char* str = new char[len](); - const int required = _vsnprintf(str, len, format, va); - delete[] str; - if ( required != -1 ) { - TIXMLASSERT( required >= 0 ); - len = required; - break; - } - } - TIXMLASSERT( len >= 0 ); - return len; - } - #endif -#else - // GCC version 3 and higher - //#warning( "Using sn* functions." ) - #define TIXML_SNPRINTF snprintf - #define TIXML_VSNPRINTF vsnprintf - static inline int TIXML_VSCPRINTF( const char* format, va_list va ) - { - int len = vsnprintf( 0, 0, format, va ); - TIXMLASSERT( len >= 0 ); - return len; - } - #define TIXML_SSCANF sscanf -#endif - -#if defined(_WIN64) - #define TIXML_FSEEK _fseeki64 - #define TIXML_FTELL _ftelli64 -#elif defined(__APPLE__) || defined(__FreeBSD__) - #define TIXML_FSEEK fseeko - #define TIXML_FTELL ftello -#elif defined(__unix__) && defined(__x86_64__) - #define TIXML_FSEEK fseeko64 - #define TIXML_FTELL ftello64 -#else - #define TIXML_FSEEK fseek - #define TIXML_FTELL ftell -#endif - - -static const char LINE_FEED = static_cast(0x0a); // all line endings are normalized to LF -static const char LF = LINE_FEED; -static const char CARRIAGE_RETURN = static_cast(0x0d); // CR gets filtered out -static const char CR = CARRIAGE_RETURN; -static const char SINGLE_QUOTE = '\''; -static const char DOUBLE_QUOTE = '\"'; - -// Bunch of unicode info at: -// http://www.unicode.org/faq/utf_bom.html -// ef bb bf (Microsoft "lead bytes") - designates UTF-8 - -static const unsigned char TIXML_UTF_LEAD_0 = 0xefU; -static const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; -static const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; - -namespace tinyxml2 -{ - -struct Entity { - const char* pattern; - int length; - char value; -}; - -static const int NUM_ENTITIES = 5; -static const Entity entities[NUM_ENTITIES] = { - { "quot", 4, DOUBLE_QUOTE }, - { "amp", 3, '&' }, - { "apos", 4, SINGLE_QUOTE }, - { "lt", 2, '<' }, - { "gt", 2, '>' } -}; - - -StrPair::~StrPair() -{ - Reset(); -} - - -void StrPair::TransferTo( StrPair* other ) -{ - if ( this == other ) { - return; - } - // This in effect implements the assignment operator by "moving" - // ownership (as in auto_ptr). - - TIXMLASSERT( other != 0 ); - TIXMLASSERT( other->_flags == 0 ); - TIXMLASSERT( other->_start == 0 ); - TIXMLASSERT( other->_end == 0 ); - - other->Reset(); - - other->_flags = _flags; - other->_start = _start; - other->_end = _end; - - _flags = 0; - _start = 0; - _end = 0; -} - - -void StrPair::Reset() -{ - if ( _flags & NEEDS_DELETE ) { - delete [] _start; - } - _flags = 0; - _start = 0; - _end = 0; -} - - -void StrPair::SetStr( const char* str, int flags ) -{ - TIXMLASSERT( str ); - Reset(); - size_t len = strlen( str ); - TIXMLASSERT( _start == 0 ); - _start = new char[ len+1 ]; - memcpy( _start, str, len+1 ); - _end = _start + len; - _flags = flags | NEEDS_DELETE; -} - - -char* StrPair::ParseText( char* p, const char* endTag, int strFlags, int* curLineNumPtr ) -{ - TIXMLASSERT( p ); - TIXMLASSERT( endTag && *endTag ); - TIXMLASSERT(curLineNumPtr); - - char* start = p; - const char endChar = *endTag; - size_t length = strlen( endTag ); - - // Inner loop of text parsing. - while ( *p ) { - if ( *p == endChar && strncmp( p, endTag, length ) == 0 ) { - Set( start, p, strFlags ); - return p + length; - } else if (*p == '\n') { - ++(*curLineNumPtr); - } - ++p; - TIXMLASSERT( p ); - } - return 0; -} - - -char* StrPair::ParseName( char* p ) -{ - if ( !p || !(*p) ) { - return 0; - } - if ( !XMLUtil::IsNameStartChar( (unsigned char) *p ) ) { - return 0; - } - - char* const start = p; - ++p; - while ( *p && XMLUtil::IsNameChar( (unsigned char) *p ) ) { - ++p; - } - - Set( start, p, 0 ); - return p; -} - - -void StrPair::CollapseWhitespace() -{ - // Adjusting _start would cause undefined behavior on delete[] - TIXMLASSERT( ( _flags & NEEDS_DELETE ) == 0 ); - // Trim leading space. - _start = XMLUtil::SkipWhiteSpace( _start, 0 ); - - if ( *_start ) { - const char* p = _start; // the read pointer - char* q = _start; // the write pointer - - while( *p ) { - if ( XMLUtil::IsWhiteSpace( *p )) { - p = XMLUtil::SkipWhiteSpace( p, 0 ); - if ( *p == 0 ) { - break; // don't write to q; this trims the trailing space. - } - *q = ' '; - ++q; - } - *q = *p; - ++q; - ++p; - } - *q = 0; - } -} - - -const char* StrPair::GetStr() -{ - TIXMLASSERT( _start ); - TIXMLASSERT( _end ); - if ( _flags & NEEDS_FLUSH ) { - *_end = 0; - _flags ^= NEEDS_FLUSH; - - if ( _flags ) { - const char* p = _start; // the read pointer - char* q = _start; // the write pointer - - while( p < _end ) { - if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == CR ) { - // CR-LF pair becomes LF - // CR alone becomes LF - // LF-CR becomes LF - if ( *(p+1) == LF ) { - p += 2; - } - else { - ++p; - } - *q = LF; - ++q; - } - else if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == LF ) { - if ( *(p+1) == CR ) { - p += 2; - } - else { - ++p; - } - *q = LF; - ++q; - } - else if ( (_flags & NEEDS_ENTITY_PROCESSING) && *p == '&' ) { - // Entities handled by tinyXML2: - // - special entities in the entity table [in/out] - // - numeric character reference [in] - // 中 or 中 - - if ( *(p+1) == '#' ) { - const int buflen = 10; - char buf[buflen] = { 0 }; - int len = 0; - const char* adjusted = const_cast( XMLUtil::GetCharacterRef( p, buf, &len ) ); - if ( adjusted == 0 ) { - *q = *p; - ++p; - ++q; - } - else { - TIXMLASSERT( 0 <= len && len <= buflen ); - TIXMLASSERT( q + len <= adjusted ); - p = adjusted; - memcpy( q, buf, len ); - q += len; - } - } - else { - bool entityFound = false; - for( int i = 0; i < NUM_ENTITIES; ++i ) { - const Entity& entity = entities[i]; - if ( strncmp( p + 1, entity.pattern, entity.length ) == 0 - && *( p + entity.length + 1 ) == ';' ) { - // Found an entity - convert. - *q = entity.value; - ++q; - p += entity.length + 2; - entityFound = true; - break; - } - } - if ( !entityFound ) { - // fixme: treat as error? - ++p; - ++q; - } - } - } - else { - *q = *p; - ++p; - ++q; - } - } - *q = 0; - } - // The loop below has plenty going on, and this - // is a less useful mode. Break it out. - if ( _flags & NEEDS_WHITESPACE_COLLAPSING ) { - CollapseWhitespace(); - } - _flags = (_flags & NEEDS_DELETE); - } - TIXMLASSERT( _start ); - return _start; -} - - - - -// --------- XMLUtil ----------- // - -const char* XMLUtil::writeBoolTrue = "true"; -const char* XMLUtil::writeBoolFalse = "false"; - -void XMLUtil::SetBoolSerialization(const char* writeTrue, const char* writeFalse) -{ - static const char* defTrue = "true"; - static const char* defFalse = "false"; - - writeBoolTrue = (writeTrue) ? writeTrue : defTrue; - writeBoolFalse = (writeFalse) ? writeFalse : defFalse; -} - - -const char* XMLUtil::ReadBOM( const char* p, bool* bom ) -{ - TIXMLASSERT( p ); - TIXMLASSERT( bom ); - *bom = false; - const unsigned char* pu = reinterpret_cast(p); - // Check for BOM: - if ( *(pu+0) == TIXML_UTF_LEAD_0 - && *(pu+1) == TIXML_UTF_LEAD_1 - && *(pu+2) == TIXML_UTF_LEAD_2 ) { - *bom = true; - p += 3; - } - TIXMLASSERT( p ); - return p; -} - - -void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ) -{ - const unsigned long BYTE_MASK = 0xBF; - const unsigned long BYTE_MARK = 0x80; - const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - - if (input < 0x80) { - *length = 1; - } - else if ( input < 0x800 ) { - *length = 2; - } - else if ( input < 0x10000 ) { - *length = 3; - } - else if ( input < 0x200000 ) { - *length = 4; - } - else { - *length = 0; // This code won't convert this correctly anyway. - return; - } - - output += *length; - - // Scary scary fall throughs are annotated with carefully designed comments - // to suppress compiler warnings such as -Wimplicit-fallthrough in gcc - switch (*length) { - case 4: - --output; - *output = static_cast((input | BYTE_MARK) & BYTE_MASK); - input >>= 6; - //fall through - case 3: - --output; - *output = static_cast((input | BYTE_MARK) & BYTE_MASK); - input >>= 6; - //fall through - case 2: - --output; - *output = static_cast((input | BYTE_MARK) & BYTE_MASK); - input >>= 6; - //fall through - case 1: - --output; - *output = static_cast(input | FIRST_BYTE_MARK[*length]); - break; - default: - TIXMLASSERT( false ); - } -} - - -const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length ) -{ - // Presume an entity, and pull it out. - *length = 0; - - if ( *(p+1) == '#' && *(p+2) ) { - unsigned long ucs = 0; - TIXMLASSERT( sizeof( ucs ) >= 4 ); - ptrdiff_t delta = 0; - unsigned mult = 1; - static const char SEMICOLON = ';'; - - if ( *(p+2) == 'x' ) { - // Hexadecimal. - const char* q = p+3; - if ( !(*q) ) { - return 0; - } - - q = strchr( q, SEMICOLON ); - - if ( !q ) { - return 0; - } - TIXMLASSERT( *q == SEMICOLON ); - - delta = q-p; - --q; - - while ( *q != 'x' ) { - unsigned int digit = 0; - - if ( *q >= '0' && *q <= '9' ) { - digit = *q - '0'; - } - else if ( *q >= 'a' && *q <= 'f' ) { - digit = *q - 'a' + 10; - } - else if ( *q >= 'A' && *q <= 'F' ) { - digit = *q - 'A' + 10; - } - else { - return 0; - } - TIXMLASSERT( digit < 16 ); - TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit ); - const unsigned int digitScaled = mult * digit; - TIXMLASSERT( ucs <= ULONG_MAX - digitScaled ); - ucs += digitScaled; - TIXMLASSERT( mult <= UINT_MAX / 16 ); - mult *= 16; - --q; - } - } - else { - // Decimal. - const char* q = p+2; - if ( !(*q) ) { - return 0; - } - - q = strchr( q, SEMICOLON ); - - if ( !q ) { - return 0; - } - TIXMLASSERT( *q == SEMICOLON ); - - delta = q-p; - --q; - - while ( *q != '#' ) { - if ( *q >= '0' && *q <= '9' ) { - const unsigned int digit = *q - '0'; - TIXMLASSERT( digit < 10 ); - TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit ); - const unsigned int digitScaled = mult * digit; - TIXMLASSERT( ucs <= ULONG_MAX - digitScaled ); - ucs += digitScaled; - } - else { - return 0; - } - TIXMLASSERT( mult <= UINT_MAX / 10 ); - mult *= 10; - --q; - } - } - // convert the UCS to UTF-8 - ConvertUTF32ToUTF8( ucs, value, length ); - return p + delta + 1; - } - return p+1; -} - - -void XMLUtil::ToStr( int v, char* buffer, int bufferSize ) -{ - TIXML_SNPRINTF( buffer, bufferSize, "%d", v ); -} - - -void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize ) -{ - TIXML_SNPRINTF( buffer, bufferSize, "%u", v ); -} - - -void XMLUtil::ToStr( bool v, char* buffer, int bufferSize ) -{ - TIXML_SNPRINTF( buffer, bufferSize, "%s", v ? writeBoolTrue : writeBoolFalse); -} - -/* - ToStr() of a number is a very tricky topic. - https://github.com/leethomason/tinyxml2/issues/106 -*/ -void XMLUtil::ToStr( float v, char* buffer, int bufferSize ) -{ - TIXML_SNPRINTF( buffer, bufferSize, "%.8g", v ); -} - - -void XMLUtil::ToStr( double v, char* buffer, int bufferSize ) -{ - TIXML_SNPRINTF( buffer, bufferSize, "%.17g", v ); -} - - -void XMLUtil::ToStr( int64_t v, char* buffer, int bufferSize ) -{ - // horrible syntax trick to make the compiler happy about %lld - TIXML_SNPRINTF(buffer, bufferSize, "%lld", static_cast(v)); -} - -void XMLUtil::ToStr( uint64_t v, char* buffer, int bufferSize ) -{ - // horrible syntax trick to make the compiler happy about %llu - TIXML_SNPRINTF(buffer, bufferSize, "%llu", (long long)v); -} - -bool XMLUtil::ToInt(const char* str, int* value) -{ - if (IsPrefixHex(str)) { - unsigned v; - if (TIXML_SSCANF(str, "%x", &v) == 1) { - *value = static_cast(v); - return true; - } - } - else { - if (TIXML_SSCANF(str, "%d", value) == 1) { - return true; - } - } - return false; -} - -bool XMLUtil::ToUnsigned(const char* str, unsigned* value) -{ - if (TIXML_SSCANF(str, IsPrefixHex(str) ? "%x" : "%u", value) == 1) { - return true; - } - return false; -} - -bool XMLUtil::ToBool( const char* str, bool* value ) -{ - int ival = 0; - if ( ToInt( str, &ival )) { - *value = (ival==0) ? false : true; - return true; - } - static const char* TRUE_VALS[] = { "true", "True", "TRUE", 0 }; - static const char* FALSE_VALS[] = { "false", "False", "FALSE", 0 }; - - for (int i = 0; TRUE_VALS[i]; ++i) { - if (StringEqual(str, TRUE_VALS[i])) { - *value = true; - return true; - } - } - for (int i = 0; FALSE_VALS[i]; ++i) { - if (StringEqual(str, FALSE_VALS[i])) { - *value = false; - return true; - } - } - return false; -} - - -bool XMLUtil::ToFloat( const char* str, float* value ) -{ - if ( TIXML_SSCANF( str, "%f", value ) == 1 ) { - return true; - } - return false; -} - - -bool XMLUtil::ToDouble( const char* str, double* value ) -{ - if ( TIXML_SSCANF( str, "%lf", value ) == 1 ) { - return true; - } - return false; -} - - -bool XMLUtil::ToInt64(const char* str, int64_t* value) -{ - if (IsPrefixHex(str)) { - unsigned long long v = 0; // horrible syntax trick to make the compiler happy about %llx - if (TIXML_SSCANF(str, "%llx", &v) == 1) { - *value = static_cast(v); - return true; - } - } - else { - long long v = 0; // horrible syntax trick to make the compiler happy about %lld - if (TIXML_SSCANF(str, "%lld", &v) == 1) { - *value = static_cast(v); - return true; - } - } - return false; -} - - -bool XMLUtil::ToUnsigned64(const char* str, uint64_t* value) { - unsigned long long v = 0; // horrible syntax trick to make the compiler happy about %llu - if(TIXML_SSCANF(str, IsPrefixHex(str) ? "%llx" : "%llu", &v) == 1) { - *value = (uint64_t)v; - return true; - } - return false; -} - - -char* XMLDocument::Identify( char* p, XMLNode** node ) -{ - TIXMLASSERT( node ); - TIXMLASSERT( p ); - char* const start = p; - int const startLine = _parseCurLineNum; - p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum ); - if( !*p ) { - *node = 0; - TIXMLASSERT( p ); - return p; - } - - // These strings define the matching patterns: - static const char* xmlHeader = { "( _commentPool ); - returnNode->_parseLineNum = _parseCurLineNum; - p += xmlHeaderLen; - } - else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) { - returnNode = CreateUnlinkedNode( _commentPool ); - returnNode->_parseLineNum = _parseCurLineNum; - p += commentHeaderLen; - } - else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) { - XMLText* text = CreateUnlinkedNode( _textPool ); - returnNode = text; - returnNode->_parseLineNum = _parseCurLineNum; - p += cdataHeaderLen; - text->SetCData( true ); - } - else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) { - returnNode = CreateUnlinkedNode( _commentPool ); - returnNode->_parseLineNum = _parseCurLineNum; - p += dtdHeaderLen; - } - else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) { - returnNode = CreateUnlinkedNode( _elementPool ); - returnNode->_parseLineNum = _parseCurLineNum; - p += elementHeaderLen; - } - else { - returnNode = CreateUnlinkedNode( _textPool ); - returnNode->_parseLineNum = _parseCurLineNum; // Report line of first non-whitespace character - p = start; // Back it up, all the text counts. - _parseCurLineNum = startLine; - } - - TIXMLASSERT( returnNode ); - TIXMLASSERT( p ); - *node = returnNode; - return p; -} - - -bool XMLDocument::Accept( XMLVisitor* visitor ) const -{ - TIXMLASSERT( visitor ); - if ( visitor->VisitEnter( *this ) ) { - for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) { - if ( !node->Accept( visitor ) ) { - break; - } - } - } - return visitor->VisitExit( *this ); -} - - -// --------- XMLNode ----------- // - -XMLNode::XMLNode( XMLDocument* doc ) : - _document( doc ), - _parent( 0 ), - _value(), - _parseLineNum( 0 ), - _firstChild( 0 ), _lastChild( 0 ), - _prev( 0 ), _next( 0 ), - _userData( 0 ), - _memPool( 0 ) -{ -} - - -XMLNode::~XMLNode() -{ - DeleteChildren(); - if ( _parent ) { - _parent->Unlink( this ); - } -} - -const char* XMLNode::Value() const -{ - // Edge case: XMLDocuments don't have a Value. Return null. - if ( this->ToDocument() ) - return 0; - return _value.GetStr(); -} - -void XMLNode::SetValue( const char* str, bool staticMem ) -{ - if ( staticMem ) { - _value.SetInternedStr( str ); - } - else { - _value.SetStr( str ); - } -} - -XMLNode* XMLNode::DeepClone(XMLDocument* target) const -{ - XMLNode* clone = this->ShallowClone(target); - if (!clone) return 0; - - for (const XMLNode* child = this->FirstChild(); child; child = child->NextSibling()) { - XMLNode* childClone = child->DeepClone(target); - TIXMLASSERT(childClone); - clone->InsertEndChild(childClone); - } - return clone; -} - -void XMLNode::DeleteChildren() -{ - while( _firstChild ) { - TIXMLASSERT( _lastChild ); - DeleteChild( _firstChild ); - } - _firstChild = _lastChild = 0; -} - - -void XMLNode::Unlink( XMLNode* child ) -{ - TIXMLASSERT( child ); - TIXMLASSERT( child->_document == _document ); - TIXMLASSERT( child->_parent == this ); - if ( child == _firstChild ) { - _firstChild = _firstChild->_next; - } - if ( child == _lastChild ) { - _lastChild = _lastChild->_prev; - } - - if ( child->_prev ) { - child->_prev->_next = child->_next; - } - if ( child->_next ) { - child->_next->_prev = child->_prev; - } - child->_next = 0; - child->_prev = 0; - child->_parent = 0; -} - - -void XMLNode::DeleteChild( XMLNode* node ) -{ - TIXMLASSERT( node ); - TIXMLASSERT( node->_document == _document ); - TIXMLASSERT( node->_parent == this ); - Unlink( node ); - TIXMLASSERT(node->_prev == 0); - TIXMLASSERT(node->_next == 0); - TIXMLASSERT(node->_parent == 0); - DeleteNode( node ); -} - - -XMLNode* XMLNode::InsertEndChild( XMLNode* addThis ) -{ - TIXMLASSERT( addThis ); - if ( addThis->_document != _document ) { - TIXMLASSERT( false ); - return 0; - } - InsertChildPreamble( addThis ); - - if ( _lastChild ) { - TIXMLASSERT( _firstChild ); - TIXMLASSERT( _lastChild->_next == 0 ); - _lastChild->_next = addThis; - addThis->_prev = _lastChild; - _lastChild = addThis; - - addThis->_next = 0; - } - else { - TIXMLASSERT( _firstChild == 0 ); - _firstChild = _lastChild = addThis; - - addThis->_prev = 0; - addThis->_next = 0; - } - addThis->_parent = this; - return addThis; -} - - -XMLNode* XMLNode::InsertFirstChild( XMLNode* addThis ) -{ - TIXMLASSERT( addThis ); - if ( addThis->_document != _document ) { - TIXMLASSERT( false ); - return 0; - } - InsertChildPreamble( addThis ); - - if ( _firstChild ) { - TIXMLASSERT( _lastChild ); - TIXMLASSERT( _firstChild->_prev == 0 ); - - _firstChild->_prev = addThis; - addThis->_next = _firstChild; - _firstChild = addThis; - - addThis->_prev = 0; - } - else { - TIXMLASSERT( _lastChild == 0 ); - _firstChild = _lastChild = addThis; - - addThis->_prev = 0; - addThis->_next = 0; - } - addThis->_parent = this; - return addThis; -} - - -XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addThis ) -{ - TIXMLASSERT( addThis ); - if ( addThis->_document != _document ) { - TIXMLASSERT( false ); - return 0; - } - - TIXMLASSERT( afterThis ); - - if ( afterThis->_parent != this ) { - TIXMLASSERT( false ); - return 0; - } - if ( afterThis == addThis ) { - // Current state: BeforeThis -> AddThis -> OneAfterAddThis - // Now AddThis must disappear from it's location and then - // reappear between BeforeThis and OneAfterAddThis. - // So just leave it where it is. - return addThis; - } - - if ( afterThis->_next == 0 ) { - // The last node or the only node. - return InsertEndChild( addThis ); - } - InsertChildPreamble( addThis ); - addThis->_prev = afterThis; - addThis->_next = afterThis->_next; - afterThis->_next->_prev = addThis; - afterThis->_next = addThis; - addThis->_parent = this; - return addThis; -} - - - - -const XMLElement* XMLNode::FirstChildElement( const char* name ) const -{ - for( const XMLNode* node = _firstChild; node; node = node->_next ) { - const XMLElement* element = node->ToElementWithName( name ); - if ( element ) { - return element; - } - } - return 0; -} - - -const XMLElement* XMLNode::LastChildElement( const char* name ) const -{ - for( const XMLNode* node = _lastChild; node; node = node->_prev ) { - const XMLElement* element = node->ToElementWithName( name ); - if ( element ) { - return element; - } - } - return 0; -} - - -const XMLElement* XMLNode::NextSiblingElement( const char* name ) const -{ - for( const XMLNode* node = _next; node; node = node->_next ) { - const XMLElement* element = node->ToElementWithName( name ); - if ( element ) { - return element; - } - } - return 0; -} - - -const XMLElement* XMLNode::PreviousSiblingElement( const char* name ) const -{ - for( const XMLNode* node = _prev; node; node = node->_prev ) { - const XMLElement* element = node->ToElementWithName( name ); - if ( element ) { - return element; - } - } - return 0; -} - - -char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) -{ - // This is a recursive method, but thinking about it "at the current level" - // it is a pretty simple flat list: - // - // - // - // With a special case: - // - // - // - // - // Where the closing element (/foo) *must* be the next thing after the opening - // element, and the names must match. BUT the tricky bit is that the closing - // element will be read by the child. - // - // 'endTag' is the end tag for this node, it is returned by a call to a child. - // 'parentEnd' is the end tag for the parent, which is filled in and returned. - - XMLDocument::DepthTracker tracker(_document); - if (_document->Error()) - return 0; - - while( p && *p ) { - XMLNode* node = 0; - - p = _document->Identify( p, &node ); - TIXMLASSERT( p ); - if ( node == 0 ) { - break; - } - - const int initialLineNum = node->_parseLineNum; - - StrPair endTag; - p = node->ParseDeep( p, &endTag, curLineNumPtr ); - if ( !p ) { - DeleteNode( node ); - if ( !_document->Error() ) { - _document->SetError( XML_ERROR_PARSING, initialLineNum, 0); - } - break; - } - - const XMLDeclaration* const decl = node->ToDeclaration(); - if ( decl ) { - // Declarations are only allowed at document level - // - // Multiple declarations are allowed but all declarations - // must occur before anything else. - // - // Optimized due to a security test case. If the first node is - // a declaration, and the last node is a declaration, then only - // declarations have so far been added. - bool wellLocated = false; - - if (ToDocument()) { - if (FirstChild()) { - wellLocated = - FirstChild() && - FirstChild()->ToDeclaration() && - LastChild() && - LastChild()->ToDeclaration(); - } - else { - wellLocated = true; - } - } - if ( !wellLocated ) { - _document->SetError( XML_ERROR_PARSING_DECLARATION, initialLineNum, "XMLDeclaration value=%s", decl->Value()); - DeleteNode( node ); - break; - } - } - - XMLElement* ele = node->ToElement(); - if ( ele ) { - // We read the end tag. Return it to the parent. - if ( ele->ClosingType() == XMLElement::CLOSING ) { - if ( parentEndTag ) { - ele->_value.TransferTo( parentEndTag ); - } - node->_memPool->SetTracked(); // created and then immediately deleted. - DeleteNode( node ); - return p; - } - - // Handle an end tag returned to this level. - // And handle a bunch of annoying errors. - bool mismatch = false; - if ( endTag.Empty() ) { - if ( ele->ClosingType() == XMLElement::OPEN ) { - mismatch = true; - } - } - else { - if ( ele->ClosingType() != XMLElement::OPEN ) { - mismatch = true; - } - else if ( !XMLUtil::StringEqual( endTag.GetStr(), ele->Name() ) ) { - mismatch = true; - } - } - if ( mismatch ) { - _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, initialLineNum, "XMLElement name=%s", ele->Name()); - DeleteNode( node ); - break; - } - } - InsertEndChild( node ); - } - return 0; -} - -/*static*/ void XMLNode::DeleteNode( XMLNode* node ) -{ - if ( node == 0 ) { - return; - } - TIXMLASSERT(node->_document); - if (!node->ToDocument()) { - node->_document->MarkInUse(node); - } - - MemPool* pool = node->_memPool; - node->~XMLNode(); - pool->Free( node ); -} - -void XMLNode::InsertChildPreamble( XMLNode* insertThis ) const -{ - TIXMLASSERT( insertThis ); - TIXMLASSERT( insertThis->_document == _document ); - - if (insertThis->_parent) { - insertThis->_parent->Unlink( insertThis ); - } - else { - insertThis->_document->MarkInUse(insertThis); - insertThis->_memPool->SetTracked(); - } -} - -const XMLElement* XMLNode::ToElementWithName( const char* name ) const -{ - const XMLElement* element = this->ToElement(); - if ( element == 0 ) { - return 0; - } - if ( name == 0 ) { - return element; - } - if ( XMLUtil::StringEqual( element->Name(), name ) ) { - return element; - } - return 0; -} - -// --------- XMLText ---------- // -char* XMLText::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) -{ - if ( this->CData() ) { - p = _value.ParseText( p, "]]>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); - if ( !p ) { - _document->SetError( XML_ERROR_PARSING_CDATA, _parseLineNum, 0 ); - } - return p; - } - else { - int flags = _document->ProcessEntities() ? StrPair::TEXT_ELEMENT : StrPair::TEXT_ELEMENT_LEAVE_ENTITIES; - if ( _document->WhitespaceMode() == COLLAPSE_WHITESPACE ) { - flags |= StrPair::NEEDS_WHITESPACE_COLLAPSING; - } - - p = _value.ParseText( p, "<", flags, curLineNumPtr ); - if ( p && *p ) { - return p-1; - } - if ( !p ) { - _document->SetError( XML_ERROR_PARSING_TEXT, _parseLineNum, 0 ); - } - } - return 0; -} - - -XMLNode* XMLText::ShallowClone( XMLDocument* doc ) const -{ - if ( !doc ) { - doc = _document; - } - XMLText* text = doc->NewText( Value() ); // fixme: this will always allocate memory. Intern? - text->SetCData( this->CData() ); - return text; -} - - -bool XMLText::ShallowEqual( const XMLNode* compare ) const -{ - TIXMLASSERT( compare ); - const XMLText* text = compare->ToText(); - return ( text && XMLUtil::StringEqual( text->Value(), Value() ) ); -} - - -bool XMLText::Accept( XMLVisitor* visitor ) const -{ - TIXMLASSERT( visitor ); - return visitor->Visit( *this ); -} - - -// --------- XMLComment ---------- // - -XMLComment::XMLComment( XMLDocument* doc ) : XMLNode( doc ) -{ -} - - -XMLComment::~XMLComment() -{ -} - - -char* XMLComment::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) -{ - // Comment parses as text. - p = _value.ParseText( p, "-->", StrPair::COMMENT, curLineNumPtr ); - if ( p == 0 ) { - _document->SetError( XML_ERROR_PARSING_COMMENT, _parseLineNum, 0 ); - } - return p; -} - - -XMLNode* XMLComment::ShallowClone( XMLDocument* doc ) const -{ - if ( !doc ) { - doc = _document; - } - XMLComment* comment = doc->NewComment( Value() ); // fixme: this will always allocate memory. Intern? - return comment; -} - - -bool XMLComment::ShallowEqual( const XMLNode* compare ) const -{ - TIXMLASSERT( compare ); - const XMLComment* comment = compare->ToComment(); - return ( comment && XMLUtil::StringEqual( comment->Value(), Value() )); -} - - -bool XMLComment::Accept( XMLVisitor* visitor ) const -{ - TIXMLASSERT( visitor ); - return visitor->Visit( *this ); -} - - -// --------- XMLDeclaration ---------- // - -XMLDeclaration::XMLDeclaration( XMLDocument* doc ) : XMLNode( doc ) -{ -} - - -XMLDeclaration::~XMLDeclaration() -{ - //printf( "~XMLDeclaration\n" ); -} - - -char* XMLDeclaration::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) -{ - // Declaration parses as text. - p = _value.ParseText( p, "?>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); - if ( p == 0 ) { - _document->SetError( XML_ERROR_PARSING_DECLARATION, _parseLineNum, 0 ); - } - return p; -} - - -XMLNode* XMLDeclaration::ShallowClone( XMLDocument* doc ) const -{ - if ( !doc ) { - doc = _document; - } - XMLDeclaration* dec = doc->NewDeclaration( Value() ); // fixme: this will always allocate memory. Intern? - return dec; -} - - -bool XMLDeclaration::ShallowEqual( const XMLNode* compare ) const -{ - TIXMLASSERT( compare ); - const XMLDeclaration* declaration = compare->ToDeclaration(); - return ( declaration && XMLUtil::StringEqual( declaration->Value(), Value() )); -} - - - -bool XMLDeclaration::Accept( XMLVisitor* visitor ) const -{ - TIXMLASSERT( visitor ); - return visitor->Visit( *this ); -} - -// --------- XMLUnknown ---------- // - -XMLUnknown::XMLUnknown( XMLDocument* doc ) : XMLNode( doc ) -{ -} - - -XMLUnknown::~XMLUnknown() -{ -} - - -char* XMLUnknown::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) -{ - // Unknown parses as text. - p = _value.ParseText( p, ">", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); - if ( !p ) { - _document->SetError( XML_ERROR_PARSING_UNKNOWN, _parseLineNum, 0 ); - } - return p; -} - - -XMLNode* XMLUnknown::ShallowClone( XMLDocument* doc ) const -{ - if ( !doc ) { - doc = _document; - } - XMLUnknown* text = doc->NewUnknown( Value() ); // fixme: this will always allocate memory. Intern? - return text; -} - - -bool XMLUnknown::ShallowEqual( const XMLNode* compare ) const -{ - TIXMLASSERT( compare ); - const XMLUnknown* unknown = compare->ToUnknown(); - return ( unknown && XMLUtil::StringEqual( unknown->Value(), Value() )); -} - - -bool XMLUnknown::Accept( XMLVisitor* visitor ) const -{ - TIXMLASSERT( visitor ); - return visitor->Visit( *this ); -} - -// --------- XMLAttribute ---------- // - -const char* XMLAttribute::Name() const -{ - return _name.GetStr(); -} - -const char* XMLAttribute::Value() const -{ - return _value.GetStr(); -} - -char* XMLAttribute::ParseDeep( char* p, bool processEntities, int* curLineNumPtr ) -{ - // Parse using the name rules: bug fix, was using ParseText before - p = _name.ParseName( p ); - if ( !p || !*p ) { - return 0; - } - - // Skip white space before = - p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); - if ( *p != '=' ) { - return 0; - } - - ++p; // move up to opening quote - p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); - if ( *p != '\"' && *p != '\'' ) { - return 0; - } - - const char endTag[2] = { *p, 0 }; - ++p; // move past opening quote - - p = _value.ParseText( p, endTag, processEntities ? StrPair::ATTRIBUTE_VALUE : StrPair::ATTRIBUTE_VALUE_LEAVE_ENTITIES, curLineNumPtr ); - return p; -} - - -void XMLAttribute::SetName( const char* n ) -{ - _name.SetStr( n ); -} - - -XMLError XMLAttribute::QueryIntValue( int* value ) const -{ - if ( XMLUtil::ToInt( Value(), value )) { - return XML_SUCCESS; - } - return XML_WRONG_ATTRIBUTE_TYPE; -} - - -XMLError XMLAttribute::QueryUnsignedValue( unsigned int* value ) const -{ - if ( XMLUtil::ToUnsigned( Value(), value )) { - return XML_SUCCESS; - } - return XML_WRONG_ATTRIBUTE_TYPE; -} - - -XMLError XMLAttribute::QueryInt64Value(int64_t* value) const -{ - if (XMLUtil::ToInt64(Value(), value)) { - return XML_SUCCESS; - } - return XML_WRONG_ATTRIBUTE_TYPE; -} - - -XMLError XMLAttribute::QueryUnsigned64Value(uint64_t* value) const -{ - if(XMLUtil::ToUnsigned64(Value(), value)) { - return XML_SUCCESS; - } - return XML_WRONG_ATTRIBUTE_TYPE; -} - - -XMLError XMLAttribute::QueryBoolValue( bool* value ) const -{ - if ( XMLUtil::ToBool( Value(), value )) { - return XML_SUCCESS; - } - return XML_WRONG_ATTRIBUTE_TYPE; -} - - -XMLError XMLAttribute::QueryFloatValue( float* value ) const -{ - if ( XMLUtil::ToFloat( Value(), value )) { - return XML_SUCCESS; - } - return XML_WRONG_ATTRIBUTE_TYPE; -} - - -XMLError XMLAttribute::QueryDoubleValue( double* value ) const -{ - if ( XMLUtil::ToDouble( Value(), value )) { - return XML_SUCCESS; - } - return XML_WRONG_ATTRIBUTE_TYPE; -} - - -void XMLAttribute::SetAttribute( const char* v ) -{ - _value.SetStr( v ); -} - - -void XMLAttribute::SetAttribute( int v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - _value.SetStr( buf ); -} - - -void XMLAttribute::SetAttribute( unsigned v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - _value.SetStr( buf ); -} - - -void XMLAttribute::SetAttribute(int64_t v) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr(v, buf, BUF_SIZE); - _value.SetStr(buf); -} - -void XMLAttribute::SetAttribute(uint64_t v) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr(v, buf, BUF_SIZE); - _value.SetStr(buf); -} - - -void XMLAttribute::SetAttribute( bool v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - _value.SetStr( buf ); -} - -void XMLAttribute::SetAttribute( double v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - _value.SetStr( buf ); -} - -void XMLAttribute::SetAttribute( float v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - _value.SetStr( buf ); -} - - -// --------- XMLElement ---------- // -XMLElement::XMLElement( XMLDocument* doc ) : XMLNode( doc ), - _closingType( OPEN ), - _rootAttribute( 0 ) -{ -} - - -XMLElement::~XMLElement() -{ - while( _rootAttribute ) { - XMLAttribute* next = _rootAttribute->_next; - DeleteAttribute( _rootAttribute ); - _rootAttribute = next; - } -} - - -const XMLAttribute* XMLElement::FindAttribute( const char* name ) const -{ - for( XMLAttribute* a = _rootAttribute; a; a = a->_next ) { - if ( XMLUtil::StringEqual( a->Name(), name ) ) { - return a; - } - } - return 0; -} - - -const char* XMLElement::Attribute( const char* name, const char* value ) const -{ - const XMLAttribute* a = FindAttribute( name ); - if ( !a ) { - return 0; - } - if ( !value || XMLUtil::StringEqual( a->Value(), value )) { - return a->Value(); - } - return 0; -} - -int XMLElement::IntAttribute(const char* name, int defaultValue) const -{ - int i = defaultValue; - QueryIntAttribute(name, &i); - return i; -} - -unsigned XMLElement::UnsignedAttribute(const char* name, unsigned defaultValue) const -{ - unsigned i = defaultValue; - QueryUnsignedAttribute(name, &i); - return i; -} - -int64_t XMLElement::Int64Attribute(const char* name, int64_t defaultValue) const -{ - int64_t i = defaultValue; - QueryInt64Attribute(name, &i); - return i; -} - -uint64_t XMLElement::Unsigned64Attribute(const char* name, uint64_t defaultValue) const -{ - uint64_t i = defaultValue; - QueryUnsigned64Attribute(name, &i); - return i; -} - -bool XMLElement::BoolAttribute(const char* name, bool defaultValue) const -{ - bool b = defaultValue; - QueryBoolAttribute(name, &b); - return b; -} - -double XMLElement::DoubleAttribute(const char* name, double defaultValue) const -{ - double d = defaultValue; - QueryDoubleAttribute(name, &d); - return d; -} - -float XMLElement::FloatAttribute(const char* name, float defaultValue) const -{ - float f = defaultValue; - QueryFloatAttribute(name, &f); - return f; -} - -const char* XMLElement::GetText() const -{ - /* skip comment node */ - const XMLNode* node = FirstChild(); - while (node) { - if (node->ToComment()) { - node = node->NextSibling(); - continue; - } - break; - } - - if ( node && node->ToText() ) { - return node->Value(); - } - return 0; -} - - -void XMLElement::SetText( const char* inText ) -{ - if ( FirstChild() && FirstChild()->ToText() ) - FirstChild()->SetValue( inText ); - else { - XMLText* theText = GetDocument()->NewText( inText ); - InsertFirstChild( theText ); - } -} - - -void XMLElement::SetText( int v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - SetText( buf ); -} - - -void XMLElement::SetText( unsigned v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - SetText( buf ); -} - - -void XMLElement::SetText(int64_t v) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr(v, buf, BUF_SIZE); - SetText(buf); -} - -void XMLElement::SetText(uint64_t v) { - char buf[BUF_SIZE]; - XMLUtil::ToStr(v, buf, BUF_SIZE); - SetText(buf); -} - - -void XMLElement::SetText( bool v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - SetText( buf ); -} - - -void XMLElement::SetText( float v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - SetText( buf ); -} - - -void XMLElement::SetText( double v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - SetText( buf ); -} - - -XMLError XMLElement::QueryIntText( int* ival ) const -{ - if ( FirstChild() && FirstChild()->ToText() ) { - const char* t = FirstChild()->Value(); - if ( XMLUtil::ToInt( t, ival ) ) { - return XML_SUCCESS; - } - return XML_CAN_NOT_CONVERT_TEXT; - } - return XML_NO_TEXT_NODE; -} - - -XMLError XMLElement::QueryUnsignedText( unsigned* uval ) const -{ - if ( FirstChild() && FirstChild()->ToText() ) { - const char* t = FirstChild()->Value(); - if ( XMLUtil::ToUnsigned( t, uval ) ) { - return XML_SUCCESS; - } - return XML_CAN_NOT_CONVERT_TEXT; - } - return XML_NO_TEXT_NODE; -} - - -XMLError XMLElement::QueryInt64Text(int64_t* ival) const -{ - if (FirstChild() && FirstChild()->ToText()) { - const char* t = FirstChild()->Value(); - if (XMLUtil::ToInt64(t, ival)) { - return XML_SUCCESS; - } - return XML_CAN_NOT_CONVERT_TEXT; - } - return XML_NO_TEXT_NODE; -} - - -XMLError XMLElement::QueryUnsigned64Text(uint64_t* ival) const -{ - if(FirstChild() && FirstChild()->ToText()) { - const char* t = FirstChild()->Value(); - if(XMLUtil::ToUnsigned64(t, ival)) { - return XML_SUCCESS; - } - return XML_CAN_NOT_CONVERT_TEXT; - } - return XML_NO_TEXT_NODE; -} - - -XMLError XMLElement::QueryBoolText( bool* bval ) const -{ - if ( FirstChild() && FirstChild()->ToText() ) { - const char* t = FirstChild()->Value(); - if ( XMLUtil::ToBool( t, bval ) ) { - return XML_SUCCESS; - } - return XML_CAN_NOT_CONVERT_TEXT; - } - return XML_NO_TEXT_NODE; -} - - -XMLError XMLElement::QueryDoubleText( double* dval ) const -{ - if ( FirstChild() && FirstChild()->ToText() ) { - const char* t = FirstChild()->Value(); - if ( XMLUtil::ToDouble( t, dval ) ) { - return XML_SUCCESS; - } - return XML_CAN_NOT_CONVERT_TEXT; - } - return XML_NO_TEXT_NODE; -} - - -XMLError XMLElement::QueryFloatText( float* fval ) const -{ - if ( FirstChild() && FirstChild()->ToText() ) { - const char* t = FirstChild()->Value(); - if ( XMLUtil::ToFloat( t, fval ) ) { - return XML_SUCCESS; - } - return XML_CAN_NOT_CONVERT_TEXT; - } - return XML_NO_TEXT_NODE; -} - -int XMLElement::IntText(int defaultValue) const -{ - int i = defaultValue; - QueryIntText(&i); - return i; -} - -unsigned XMLElement::UnsignedText(unsigned defaultValue) const -{ - unsigned i = defaultValue; - QueryUnsignedText(&i); - return i; -} - -int64_t XMLElement::Int64Text(int64_t defaultValue) const -{ - int64_t i = defaultValue; - QueryInt64Text(&i); - return i; -} - -uint64_t XMLElement::Unsigned64Text(uint64_t defaultValue) const -{ - uint64_t i = defaultValue; - QueryUnsigned64Text(&i); - return i; -} - -bool XMLElement::BoolText(bool defaultValue) const -{ - bool b = defaultValue; - QueryBoolText(&b); - return b; -} - -double XMLElement::DoubleText(double defaultValue) const -{ - double d = defaultValue; - QueryDoubleText(&d); - return d; -} - -float XMLElement::FloatText(float defaultValue) const -{ - float f = defaultValue; - QueryFloatText(&f); - return f; -} - - -XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name ) -{ - XMLAttribute* last = 0; - XMLAttribute* attrib = 0; - for( attrib = _rootAttribute; - attrib; - last = attrib, attrib = attrib->_next ) { - if ( XMLUtil::StringEqual( attrib->Name(), name ) ) { - break; - } - } - if ( !attrib ) { - attrib = CreateAttribute(); - TIXMLASSERT( attrib ); - if ( last ) { - TIXMLASSERT( last->_next == 0 ); - last->_next = attrib; - } - else { - TIXMLASSERT( _rootAttribute == 0 ); - _rootAttribute = attrib; - } - attrib->SetName( name ); - } - return attrib; -} - - -void XMLElement::DeleteAttribute( const char* name ) -{ - XMLAttribute* prev = 0; - for( XMLAttribute* a=_rootAttribute; a; a=a->_next ) { - if ( XMLUtil::StringEqual( name, a->Name() ) ) { - if ( prev ) { - prev->_next = a->_next; - } - else { - _rootAttribute = a->_next; - } - DeleteAttribute( a ); - break; - } - prev = a; - } -} - - -char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr ) -{ - XMLAttribute* prevAttribute = 0; - - // Read the attributes. - while( p ) { - p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); - if ( !(*p) ) { - _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, "XMLElement name=%s", Name() ); - return 0; - } - - // attribute. - if (XMLUtil::IsNameStartChar( (unsigned char) *p ) ) { - XMLAttribute* attrib = CreateAttribute(); - TIXMLASSERT( attrib ); - attrib->_parseLineNum = _document->_parseCurLineNum; - - const int attrLineNum = attrib->_parseLineNum; - - p = attrib->ParseDeep( p, _document->ProcessEntities(), curLineNumPtr ); - if ( !p || Attribute( attrib->Name() ) ) { - DeleteAttribute( attrib ); - _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, attrLineNum, "XMLElement name=%s", Name() ); - return 0; - } - // There is a minor bug here: if the attribute in the source xml - // document is duplicated, it will not be detected and the - // attribute will be doubly added. However, tracking the 'prevAttribute' - // avoids re-scanning the attribute list. Preferring performance for - // now, may reconsider in the future. - if ( prevAttribute ) { - TIXMLASSERT( prevAttribute->_next == 0 ); - prevAttribute->_next = attrib; - } - else { - TIXMLASSERT( _rootAttribute == 0 ); - _rootAttribute = attrib; - } - prevAttribute = attrib; - } - // end of the tag - else if ( *p == '>' ) { - ++p; - break; - } - // end of the tag - else if ( *p == '/' && *(p+1) == '>' ) { - _closingType = CLOSED; - return p+2; // done; sealed element. - } - else { - _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, 0 ); - return 0; - } - } - return p; -} - -void XMLElement::DeleteAttribute( XMLAttribute* attribute ) -{ - if ( attribute == 0 ) { - return; - } - MemPool* pool = attribute->_memPool; - attribute->~XMLAttribute(); - pool->Free( attribute ); -} - -XMLAttribute* XMLElement::CreateAttribute() -{ - TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() ); - XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute(); - TIXMLASSERT( attrib ); - attrib->_memPool = &_document->_attributePool; - attrib->_memPool->SetTracked(); - return attrib; -} - - -XMLElement* XMLElement::InsertNewChildElement(const char* name) -{ - XMLElement* node = _document->NewElement(name); - return InsertEndChild(node) ? node : 0; -} - -XMLComment* XMLElement::InsertNewComment(const char* comment) -{ - XMLComment* node = _document->NewComment(comment); - return InsertEndChild(node) ? node : 0; -} - -XMLText* XMLElement::InsertNewText(const char* text) -{ - XMLText* node = _document->NewText(text); - return InsertEndChild(node) ? node : 0; -} - -XMLDeclaration* XMLElement::InsertNewDeclaration(const char* text) -{ - XMLDeclaration* node = _document->NewDeclaration(text); - return InsertEndChild(node) ? node : 0; -} - -XMLUnknown* XMLElement::InsertNewUnknown(const char* text) -{ - XMLUnknown* node = _document->NewUnknown(text); - return InsertEndChild(node) ? node : 0; -} - - - -// -// -// foobar -// -char* XMLElement::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) -{ - // Read the element name. - p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); - - // The closing element is the form. It is - // parsed just like a regular element then deleted from - // the DOM. - if ( *p == '/' ) { - _closingType = CLOSING; - ++p; - } - - p = _value.ParseName( p ); - if ( _value.Empty() ) { - return 0; - } - - p = ParseAttributes( p, curLineNumPtr ); - if ( !p || !*p || _closingType != OPEN ) { - return p; - } - - p = XMLNode::ParseDeep( p, parentEndTag, curLineNumPtr ); - return p; -} - - - -XMLNode* XMLElement::ShallowClone( XMLDocument* doc ) const -{ - if ( !doc ) { - doc = _document; - } - XMLElement* element = doc->NewElement( Value() ); // fixme: this will always allocate memory. Intern? - for( const XMLAttribute* a=FirstAttribute(); a; a=a->Next() ) { - element->SetAttribute( a->Name(), a->Value() ); // fixme: this will always allocate memory. Intern? - } - return element; -} - - -bool XMLElement::ShallowEqual( const XMLNode* compare ) const -{ - TIXMLASSERT( compare ); - const XMLElement* other = compare->ToElement(); - if ( other && XMLUtil::StringEqual( other->Name(), Name() )) { - - const XMLAttribute* a=FirstAttribute(); - const XMLAttribute* b=other->FirstAttribute(); - - while ( a && b ) { - if ( !XMLUtil::StringEqual( a->Value(), b->Value() ) ) { - return false; - } - a = a->Next(); - b = b->Next(); - } - if ( a || b ) { - // different count - return false; - } - return true; - } - return false; -} - - -bool XMLElement::Accept( XMLVisitor* visitor ) const -{ - TIXMLASSERT( visitor ); - if ( visitor->VisitEnter( *this, _rootAttribute ) ) { - for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) { - if ( !node->Accept( visitor ) ) { - break; - } - } - } - return visitor->VisitExit( *this ); -} - - -// --------- XMLDocument ----------- // - -// Warning: List must match 'enum XMLError' -const char* XMLDocument::_errorNames[XML_ERROR_COUNT] = { - "XML_SUCCESS", - "XML_NO_ATTRIBUTE", - "XML_WRONG_ATTRIBUTE_TYPE", - "XML_ERROR_FILE_NOT_FOUND", - "XML_ERROR_FILE_COULD_NOT_BE_OPENED", - "XML_ERROR_FILE_READ_ERROR", - "XML_ERROR_PARSING_ELEMENT", - "XML_ERROR_PARSING_ATTRIBUTE", - "XML_ERROR_PARSING_TEXT", - "XML_ERROR_PARSING_CDATA", - "XML_ERROR_PARSING_COMMENT", - "XML_ERROR_PARSING_DECLARATION", - "XML_ERROR_PARSING_UNKNOWN", - "XML_ERROR_EMPTY_DOCUMENT", - "XML_ERROR_MISMATCHED_ELEMENT", - "XML_ERROR_PARSING", - "XML_CAN_NOT_CONVERT_TEXT", - "XML_NO_TEXT_NODE", - "XML_ELEMENT_DEPTH_EXCEEDED" -}; - - -XMLDocument::XMLDocument( bool processEntities, Whitespace whitespaceMode ) : - XMLNode( 0 ), - _writeBOM( false ), - _processEntities( processEntities ), - _errorID(XML_SUCCESS), - _whitespaceMode( whitespaceMode ), - _errorStr(), - _errorLineNum( 0 ), - _charBuffer( 0 ), - _parseCurLineNum( 0 ), - _parsingDepth(0), - _unlinked(), - _elementPool(), - _attributePool(), - _textPool(), - _commentPool() -{ - // avoid VC++ C4355 warning about 'this' in initializer list (C4355 is off by default in VS2012+) - _document = this; -} - - -XMLDocument::~XMLDocument() -{ - Clear(); -} - - -void XMLDocument::MarkInUse(const XMLNode* const node) -{ - TIXMLASSERT(node); - TIXMLASSERT(node->_parent == 0); - - for (int i = 0; i < _unlinked.Size(); ++i) { - if (node == _unlinked[i]) { - _unlinked.SwapRemove(i); - break; - } - } -} - -void XMLDocument::Clear() -{ - DeleteChildren(); - while( _unlinked.Size()) { - DeleteNode(_unlinked[0]); // Will remove from _unlinked as part of delete. - } - -#ifdef TINYXML2_DEBUG - const bool hadError = Error(); -#endif - ClearError(); - - delete [] _charBuffer; - _charBuffer = 0; - _parsingDepth = 0; - -#if 0 - _textPool.Trace( "text" ); - _elementPool.Trace( "element" ); - _commentPool.Trace( "comment" ); - _attributePool.Trace( "attribute" ); -#endif - -#ifdef TINYXML2_DEBUG - if ( !hadError ) { - TIXMLASSERT( _elementPool.CurrentAllocs() == _elementPool.Untracked() ); - TIXMLASSERT( _attributePool.CurrentAllocs() == _attributePool.Untracked() ); - TIXMLASSERT( _textPool.CurrentAllocs() == _textPool.Untracked() ); - TIXMLASSERT( _commentPool.CurrentAllocs() == _commentPool.Untracked() ); - } -#endif -} - - -void XMLDocument::DeepCopy(XMLDocument* target) const -{ - TIXMLASSERT(target); - if (target == this) { - return; // technically success - a no-op. - } - - target->Clear(); - for (const XMLNode* node = this->FirstChild(); node; node = node->NextSibling()) { - target->InsertEndChild(node->DeepClone(target)); - } -} - -XMLElement* XMLDocument::NewElement( const char* name ) -{ - XMLElement* ele = CreateUnlinkedNode( _elementPool ); - ele->SetName( name ); - return ele; -} - - -XMLComment* XMLDocument::NewComment( const char* str ) -{ - XMLComment* comment = CreateUnlinkedNode( _commentPool ); - comment->SetValue( str ); - return comment; -} - - -XMLText* XMLDocument::NewText( const char* str ) -{ - XMLText* text = CreateUnlinkedNode( _textPool ); - text->SetValue( str ); - return text; -} - - -XMLDeclaration* XMLDocument::NewDeclaration( const char* str ) -{ - XMLDeclaration* dec = CreateUnlinkedNode( _commentPool ); - dec->SetValue( str ? str : "xml version=\"1.0\" encoding=\"UTF-8\"" ); - return dec; -} - - -XMLUnknown* XMLDocument::NewUnknown( const char* str ) -{ - XMLUnknown* unk = CreateUnlinkedNode( _commentPool ); - unk->SetValue( str ); - return unk; -} - -static FILE* callfopen( const char* filepath, const char* mode ) -{ - TIXMLASSERT( filepath ); - TIXMLASSERT( mode ); -#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE) - FILE* fp = 0; - const errno_t err = fopen_s( &fp, filepath, mode ); - if ( err ) { - return 0; - } -#else - FILE* fp = fopen( filepath, mode ); -#endif - return fp; -} - -void XMLDocument::DeleteNode( XMLNode* node ) { - TIXMLASSERT( node ); - TIXMLASSERT(node->_document == this ); - if (node->_parent) { - node->_parent->DeleteChild( node ); - } - else { - // Isn't in the tree. - // Use the parent delete. - // Also, we need to mark it tracked: we 'know' - // it was never used. - node->_memPool->SetTracked(); - // Call the static XMLNode version: - XMLNode::DeleteNode(node); - } -} - - -XMLError XMLDocument::LoadFile( const char* filename ) -{ - if ( !filename ) { - TIXMLASSERT( false ); - SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); - return _errorID; - } - - Clear(); - FILE* fp = callfopen( filename, "rb" ); - if ( !fp ) { - SetError( XML_ERROR_FILE_NOT_FOUND, 0, "filename=%s", filename ); - return _errorID; - } - LoadFile( fp ); - fclose( fp ); - return _errorID; -} - -XMLError XMLDocument::LoadFile( FILE* fp ) -{ - Clear(); - - TIXML_FSEEK( fp, 0, SEEK_SET ); - if ( fgetc( fp ) == EOF && ferror( fp ) != 0 ) { - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); - return _errorID; - } - - TIXML_FSEEK( fp, 0, SEEK_END ); - - unsigned long long filelength; - { - const long long fileLengthSigned = TIXML_FTELL( fp ); - TIXML_FSEEK( fp, 0, SEEK_SET ); - if ( fileLengthSigned == -1L ) { - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); - return _errorID; - } - TIXMLASSERT( fileLengthSigned >= 0 ); - filelength = static_cast(fileLengthSigned); - } - - const size_t maxSizeT = static_cast(-1); - // We'll do the comparison as an unsigned long long, because that's guaranteed to be at - // least 8 bytes, even on a 32-bit platform. - if ( filelength >= static_cast(maxSizeT) ) { - // Cannot handle files which won't fit in buffer together with null terminator - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); - return _errorID; - } - - if ( filelength == 0 ) { - SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); - return _errorID; - } - - const size_t size = static_cast(filelength); - TIXMLASSERT( _charBuffer == 0 ); - _charBuffer = new char[size+1]; - const size_t read = fread( _charBuffer, 1, size, fp ); - if ( read != size ) { - SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); - return _errorID; - } - - _charBuffer[size] = 0; - - Parse(); - return _errorID; -} - - -XMLError XMLDocument::SaveFile( const char* filename, bool compact ) -{ - if ( !filename ) { - TIXMLASSERT( false ); - SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); - return _errorID; - } - - FILE* fp = callfopen( filename, "w" ); - if ( !fp ) { - SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=%s", filename ); - return _errorID; - } - SaveFile(fp, compact); - fclose( fp ); - return _errorID; -} - - -XMLError XMLDocument::SaveFile( FILE* fp, bool compact ) -{ - // Clear any error from the last save, otherwise it will get reported - // for *this* call. - ClearError(); - XMLPrinter stream( fp, compact ); - Print( &stream ); - return _errorID; -} - - -XMLError XMLDocument::Parse( const char* p, size_t len ) -{ - Clear(); - - if ( len == 0 || !p || !*p ) { - SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); - return _errorID; - } - if ( len == static_cast(-1) ) { - len = strlen( p ); - } - TIXMLASSERT( _charBuffer == 0 ); - _charBuffer = new char[ len+1 ]; - memcpy( _charBuffer, p, len ); - _charBuffer[len] = 0; - - Parse(); - if ( Error() ) { - // clean up now essentially dangling memory. - // and the parse fail can put objects in the - // pools that are dead and inaccessible. - DeleteChildren(); - _elementPool.Clear(); - _attributePool.Clear(); - _textPool.Clear(); - _commentPool.Clear(); - } - return _errorID; -} - - -void XMLDocument::Print( XMLPrinter* streamer ) const -{ - if ( streamer ) { - Accept( streamer ); - } - else { - XMLPrinter stdoutStreamer( stdout ); - Accept( &stdoutStreamer ); - } -} - - -void XMLDocument::ClearError() { - _errorID = XML_SUCCESS; - _errorLineNum = 0; - _errorStr.Reset(); -} - - -void XMLDocument::SetError( XMLError error, int lineNum, const char* format, ... ) -{ - TIXMLASSERT( error >= 0 && error < XML_ERROR_COUNT ); - _errorID = error; - _errorLineNum = lineNum; - _errorStr.Reset(); - - const size_t BUFFER_SIZE = 1000; - char* buffer = new char[BUFFER_SIZE]; - - TIXMLASSERT(sizeof(error) <= sizeof(int)); - TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d", ErrorIDToName(error), int(error), int(error), lineNum); - - if (format) { - size_t len = strlen(buffer); - TIXML_SNPRINTF(buffer + len, BUFFER_SIZE - len, ": "); - len = strlen(buffer); - - va_list va; - va_start(va, format); - TIXML_VSNPRINTF(buffer + len, BUFFER_SIZE - len, format, va); - va_end(va); - } - _errorStr.SetStr(buffer); - delete[] buffer; -} - - -/*static*/ const char* XMLDocument::ErrorIDToName(XMLError errorID) -{ - TIXMLASSERT( errorID >= 0 && errorID < XML_ERROR_COUNT ); - const char* errorName = _errorNames[errorID]; - TIXMLASSERT( errorName && errorName[0] ); - return errorName; -} - -const char* XMLDocument::ErrorStr() const -{ - return _errorStr.Empty() ? "" : _errorStr.GetStr(); -} - - -void XMLDocument::PrintError() const -{ - printf("%s\n", ErrorStr()); -} - -const char* XMLDocument::ErrorName() const -{ - return ErrorIDToName(_errorID); -} - -void XMLDocument::Parse() -{ - TIXMLASSERT( NoChildren() ); // Clear() must have been called previously - TIXMLASSERT( _charBuffer ); - _parseCurLineNum = 1; - _parseLineNum = 1; - char* p = _charBuffer; - p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum ); - p = const_cast( XMLUtil::ReadBOM( p, &_writeBOM ) ); - if ( !*p ) { - SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); - return; - } - ParseDeep(p, 0, &_parseCurLineNum ); -} - -void XMLDocument::PushDepth() -{ - _parsingDepth++; - if (_parsingDepth == TINYXML2_MAX_ELEMENT_DEPTH) { - SetError(XML_ELEMENT_DEPTH_EXCEEDED, _parseCurLineNum, "Element nesting is too deep." ); - } -} - -void XMLDocument::PopDepth() -{ - TIXMLASSERT(_parsingDepth > 0); - --_parsingDepth; -} - -XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) : - _elementJustOpened( false ), - _stack(), - _firstElement( true ), - _fp( file ), - _depth( depth ), - _textDepth( -1 ), - _processEntities( true ), - _compactMode( compact ), - _buffer() -{ - for( int i=0; i(entityValue); - TIXMLASSERT( flagIndex < ENTITY_RANGE ); - _entityFlag[flagIndex] = true; - } - _restrictedEntityFlag[static_cast('&')] = true; - _restrictedEntityFlag[static_cast('<')] = true; - _restrictedEntityFlag[static_cast('>')] = true; // not required, but consistency is nice - _buffer.Push( 0 ); -} - - -void XMLPrinter::Print( const char* format, ... ) -{ - va_list va; - va_start( va, format ); - - if ( _fp ) { - vfprintf( _fp, format, va ); - } - else { - const int len = TIXML_VSCPRINTF( format, va ); - // Close out and re-start the va-args - va_end( va ); - TIXMLASSERT( len >= 0 ); - va_start( va, format ); - TIXMLASSERT( _buffer.Size() > 0 && _buffer[_buffer.Size() - 1] == 0 ); - char* p = _buffer.PushArr( len ) - 1; // back up over the null terminator. - TIXML_VSNPRINTF( p, len+1, format, va ); - } - va_end( va ); -} - - -void XMLPrinter::Write( const char* data, size_t size ) -{ - if ( _fp ) { - fwrite ( data , sizeof(char), size, _fp); - } - else { - char* p = _buffer.PushArr( static_cast(size) ) - 1; // back up over the null terminator. - memcpy( p, data, size ); - p[size] = 0; - } -} - - -void XMLPrinter::Putc( char ch ) -{ - if ( _fp ) { - fputc ( ch, _fp); - } - else { - char* p = _buffer.PushArr( sizeof(char) ) - 1; // back up over the null terminator. - p[0] = ch; - p[1] = 0; - } -} - - -void XMLPrinter::PrintSpace( int depth ) -{ - for( int i=0; i 0 && *q < ENTITY_RANGE ) { - // Check for entities. If one is found, flush - // the stream up until the entity, write the - // entity, and keep looking. - if ( flag[static_cast(*q)] ) { - while ( p < q ) { - const size_t delta = q - p; - const int toPrint = ( INT_MAX < delta ) ? INT_MAX : static_cast(delta); - Write( p, toPrint ); - p += toPrint; - } - bool entityPatternPrinted = false; - for( int i=0; i(delta); - Write( p, toPrint ); - } - } - else { - Write( p ); - } -} - - -void XMLPrinter::PushHeader( bool writeBOM, bool writeDec ) -{ - if ( writeBOM ) { - static const unsigned char bom[] = { TIXML_UTF_LEAD_0, TIXML_UTF_LEAD_1, TIXML_UTF_LEAD_2, 0 }; - Write( reinterpret_cast< const char* >( bom ) ); - } - if ( writeDec ) { - PushDeclaration( "xml version=\"1.0\"" ); - } -} - -void XMLPrinter::PrepareForNewNode( bool compactMode ) -{ - SealElementIfJustOpened(); - - if ( compactMode ) { - return; - } - - if ( _firstElement ) { - PrintSpace (_depth); - } else if ( _textDepth < 0) { - Putc( '\n' ); - PrintSpace( _depth ); - } - - _firstElement = false; -} - -void XMLPrinter::OpenElement( const char* name, bool compactMode ) -{ - PrepareForNewNode( compactMode ); - _stack.Push( name ); - - Write ( "<" ); - Write ( name ); - - _elementJustOpened = true; - ++_depth; -} - - -void XMLPrinter::PushAttribute( const char* name, const char* value ) -{ - TIXMLASSERT( _elementJustOpened ); - Putc ( ' ' ); - Write( name ); - Write( "=\"" ); - PrintString( value, false ); - Putc ( '\"' ); -} - - -void XMLPrinter::PushAttribute( const char* name, int v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - PushAttribute( name, buf ); -} - - -void XMLPrinter::PushAttribute( const char* name, unsigned v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - PushAttribute( name, buf ); -} - - -void XMLPrinter::PushAttribute(const char* name, int64_t v) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr(v, buf, BUF_SIZE); - PushAttribute(name, buf); -} - - -void XMLPrinter::PushAttribute(const char* name, uint64_t v) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr(v, buf, BUF_SIZE); - PushAttribute(name, buf); -} - - -void XMLPrinter::PushAttribute( const char* name, bool v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - PushAttribute( name, buf ); -} - - -void XMLPrinter::PushAttribute( const char* name, double v ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( v, buf, BUF_SIZE ); - PushAttribute( name, buf ); -} - - -void XMLPrinter::CloseElement( bool compactMode ) -{ - --_depth; - const char* name = _stack.Pop(); - - if ( _elementJustOpened ) { - Write( "/>" ); - } - else { - if ( _textDepth < 0 && !compactMode) { - Putc( '\n' ); - PrintSpace( _depth ); - } - Write ( "" ); - } - - if ( _textDepth == _depth ) { - _textDepth = -1; - } - if ( _depth == 0 && !compactMode) { - Putc( '\n' ); - } - _elementJustOpened = false; -} - - -void XMLPrinter::SealElementIfJustOpened() -{ - if ( !_elementJustOpened ) { - return; - } - _elementJustOpened = false; - Putc( '>' ); -} - - -void XMLPrinter::PushText( const char* text, bool cdata ) -{ - _textDepth = _depth-1; - - SealElementIfJustOpened(); - if ( cdata ) { - Write( "" ); - } - else { - PrintString( text, true ); - } -} - - -void XMLPrinter::PushText( int64_t value ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( value, buf, BUF_SIZE ); - PushText( buf, false ); -} - - -void XMLPrinter::PushText( uint64_t value ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr(value, buf, BUF_SIZE); - PushText(buf, false); -} - - -void XMLPrinter::PushText( int value ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( value, buf, BUF_SIZE ); - PushText( buf, false ); -} - - -void XMLPrinter::PushText( unsigned value ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( value, buf, BUF_SIZE ); - PushText( buf, false ); -} - - -void XMLPrinter::PushText( bool value ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( value, buf, BUF_SIZE ); - PushText( buf, false ); -} - - -void XMLPrinter::PushText( float value ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( value, buf, BUF_SIZE ); - PushText( buf, false ); -} - - -void XMLPrinter::PushText( double value ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( value, buf, BUF_SIZE ); - PushText( buf, false ); -} - - -void XMLPrinter::PushComment( const char* comment ) -{ - PrepareForNewNode( _compactMode ); - - Write( "" ); -} - - -void XMLPrinter::PushDeclaration( const char* value ) -{ - PrepareForNewNode( _compactMode ); - - Write( "" ); -} - - -void XMLPrinter::PushUnknown( const char* value ) -{ - PrepareForNewNode( _compactMode ); - - Write( "' ); -} - - -bool XMLPrinter::VisitEnter( const XMLDocument& doc ) -{ - _processEntities = doc.ProcessEntities(); - if ( doc.HasBOM() ) { - PushHeader( true, false ); - } - return true; -} - - -bool XMLPrinter::VisitEnter( const XMLElement& element, const XMLAttribute* attribute ) -{ - const XMLElement* parentElem = 0; - if ( element.Parent() ) { - parentElem = element.Parent()->ToElement(); - } - const bool compactMode = parentElem ? CompactMode( *parentElem ) : _compactMode; - OpenElement( element.Name(), compactMode ); - while ( attribute ) { - PushAttribute( attribute->Name(), attribute->Value() ); - attribute = attribute->Next(); - } - return true; -} - - -bool XMLPrinter::VisitExit( const XMLElement& element ) -{ - CloseElement( CompactMode(element) ); - return true; -} - - -bool XMLPrinter::Visit( const XMLText& text ) -{ - PushText( text.Value(), text.CData() ); - return true; -} - - -bool XMLPrinter::Visit( const XMLComment& comment ) -{ - PushComment( comment.Value() ); - return true; -} - -bool XMLPrinter::Visit( const XMLDeclaration& declaration ) -{ - PushDeclaration( declaration.Value() ); - return true; -} - - -bool XMLPrinter::Visit( const XMLUnknown& unknown ) -{ - PushUnknown( unknown.Value() ); - return true; -} - -} // namespace tinyxml2 - -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif - -#if defined(__clang__) -#pragma clang diagnostic pop -#endif diff --git a/modules/skybrowser/ext/tinyxml2/tinyxml2.h b/modules/skybrowser/ext/tinyxml2/tinyxml2.h deleted file mode 100644 index d257966c97..0000000000 --- a/modules/skybrowser/ext/tinyxml2/tinyxml2.h +++ /dev/null @@ -1,2380 +0,0 @@ -/* -Original code by Lee Thomason (www.grinninglizard.com) - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must -not claim that you wrote the original software. If you use this -software in a product, an acknowledgment in the product documentation -would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. -*/ - -#ifndef TINYXML2_INCLUDED -#define TINYXML2_INCLUDED - -#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__) -# include -# include -# include -# include -# include -# if defined(__PS3__) -# include -# endif -#else -# include -# include -# include -# include -# include -#endif -#include - -/* - TODO: intern strings instead of allocation. -*/ -/* - gcc: - g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe - - Formatting, Artistic Style: - AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h -*/ - -#if defined( _DEBUG ) || defined (__DEBUG__) -# ifndef TINYXML2_DEBUG -# define TINYXML2_DEBUG -# endif -#endif - -#ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable: 4251) -#endif - -#ifdef _WIN32 -# ifdef TINYXML2_EXPORT -# define TINYXML2_LIB __declspec(dllexport) -# elif defined(TINYXML2_IMPORT) -# define TINYXML2_LIB __declspec(dllimport) -# else -# define TINYXML2_LIB -# endif -#elif __GNUC__ >= 4 -# define TINYXML2_LIB __attribute__((visibility("default"))) -#else -# define TINYXML2_LIB -#endif - - -#if !defined(TIXMLASSERT) -#if defined(TINYXML2_DEBUG) -# if defined(_MSC_VER) -# // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like -# define TIXMLASSERT( x ) if ( !((void)0,(x))) { __debugbreak(); } -# elif defined (ANDROID_NDK) -# include -# define TIXMLASSERT( x ) if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); } -# else -# include -# define TIXMLASSERT assert -# endif -#else -# define TIXMLASSERT( x ) {} -#endif -#endif - -/* Versioning, past 1.0.14: - http://semver.org/ -*/ -static const int TIXML2_MAJOR_VERSION = 8; -static const int TIXML2_MINOR_VERSION = 0; -static const int TIXML2_PATCH_VERSION = 0; - -#define TINYXML2_MAJOR_VERSION 8 -#define TINYXML2_MINOR_VERSION 0 -#define TINYXML2_PATCH_VERSION 0 - -// A fixed element depth limit is problematic. There needs to be a -// limit to avoid a stack overflow. However, that limit varies per -// system, and the capacity of the stack. On the other hand, it's a trivial -// attack that can result from ill, malicious, or even correctly formed XML, -// so there needs to be a limit in place. -static const int TINYXML2_MAX_ELEMENT_DEPTH = 100; - -namespace tinyxml2 -{ -class XMLDocument; -class XMLElement; -class XMLAttribute; -class XMLComment; -class XMLText; -class XMLDeclaration; -class XMLUnknown; -class XMLPrinter; - -/* - A class that wraps strings. Normally stores the start and end - pointers into the XML file itself, and will apply normalization - and entity translation if actually read. Can also store (and memory - manage) a traditional char[] - - Isn't clear why TINYXML2_LIB is needed; but seems to fix #719 -*/ -class TINYXML2_LIB StrPair -{ -public: - enum Mode { - NEEDS_ENTITY_PROCESSING = 0x01, - NEEDS_NEWLINE_NORMALIZATION = 0x02, - NEEDS_WHITESPACE_COLLAPSING = 0x04, - - TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION, - TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION, - ATTRIBUTE_NAME = 0, - ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION, - ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION, - COMMENT = NEEDS_NEWLINE_NORMALIZATION - }; - - StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {} - ~StrPair(); - - void Set( char* start, char* end, int flags ) { - TIXMLASSERT( start ); - TIXMLASSERT( end ); - Reset(); - _start = start; - _end = end; - _flags = flags | NEEDS_FLUSH; - } - - const char* GetStr(); - - bool Empty() const { - return _start == _end; - } - - void SetInternedStr( const char* str ) { - Reset(); - _start = const_cast(str); - } - - void SetStr( const char* str, int flags=0 ); - - char* ParseText( char* in, const char* endTag, int strFlags, int* curLineNumPtr ); - char* ParseName( char* in ); - - void TransferTo( StrPair* other ); - void Reset(); - -private: - void CollapseWhitespace(); - - enum { - NEEDS_FLUSH = 0x100, - NEEDS_DELETE = 0x200 - }; - - int _flags; - char* _start; - char* _end; - - StrPair( const StrPair& other ); // not supported - void operator=( const StrPair& other ); // not supported, use TransferTo() -}; - - -/* - A dynamic array of Plain Old Data. Doesn't support constructors, etc. - Has a small initial memory pool, so that low or no usage will not - cause a call to new/delete -*/ -template -class DynArray -{ -public: - DynArray() : - _mem( _pool ), - _allocated( INITIAL_SIZE ), - _size( 0 ) - { - } - - ~DynArray() { - if ( _mem != _pool ) { - delete [] _mem; - } - } - - void Clear() { - _size = 0; - } - - void Push( T t ) { - TIXMLASSERT( _size < INT_MAX ); - EnsureCapacity( _size+1 ); - _mem[_size] = t; - ++_size; - } - - T* PushArr( int count ) { - TIXMLASSERT( count >= 0 ); - TIXMLASSERT( _size <= INT_MAX - count ); - EnsureCapacity( _size+count ); - T* ret = &_mem[_size]; - _size += count; - return ret; - } - - T Pop() { - TIXMLASSERT( _size > 0 ); - --_size; - return _mem[_size]; - } - - void PopArr( int count ) { - TIXMLASSERT( _size >= count ); - _size -= count; - } - - bool Empty() const { - return _size == 0; - } - - T& operator[](int i) { - TIXMLASSERT( i>= 0 && i < _size ); - return _mem[i]; - } - - const T& operator[](int i) const { - TIXMLASSERT( i>= 0 && i < _size ); - return _mem[i]; - } - - const T& PeekTop() const { - TIXMLASSERT( _size > 0 ); - return _mem[ _size - 1]; - } - - int Size() const { - TIXMLASSERT( _size >= 0 ); - return _size; - } - - int Capacity() const { - TIXMLASSERT( _allocated >= INITIAL_SIZE ); - return _allocated; - } - - void SwapRemove(int i) { - TIXMLASSERT(i >= 0 && i < _size); - TIXMLASSERT(_size > 0); - _mem[i] = _mem[_size - 1]; - --_size; - } - - const T* Mem() const { - TIXMLASSERT( _mem ); - return _mem; - } - - T* Mem() { - TIXMLASSERT( _mem ); - return _mem; - } - -private: - DynArray( const DynArray& ); // not supported - void operator=( const DynArray& ); // not supported - - void EnsureCapacity( int cap ) { - TIXMLASSERT( cap > 0 ); - if ( cap > _allocated ) { - TIXMLASSERT( cap <= INT_MAX / 2 ); - const int newAllocated = cap * 2; - T* newMem = new T[newAllocated]; - TIXMLASSERT( newAllocated >= _size ); - memcpy( newMem, _mem, sizeof(T)*_size ); // warning: not using constructors, only works for PODs - if ( _mem != _pool ) { - delete [] _mem; - } - _mem = newMem; - _allocated = newAllocated; - } - } - - T* _mem; - T _pool[INITIAL_SIZE]; - int _allocated; // objects allocated - int _size; // number objects in use -}; - - -/* - Parent virtual class of a pool for fast allocation - and deallocation of objects. -*/ -class MemPool -{ -public: - MemPool() {} - virtual ~MemPool() {} - - virtual int ItemSize() const = 0; - virtual void* Alloc() = 0; - virtual void Free( void* ) = 0; - virtual void SetTracked() = 0; -}; - - -/* - Template child class to create pools of the correct type. -*/ -template< int ITEM_SIZE > -class MemPoolT : public MemPool -{ -public: - MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {} - ~MemPoolT() { - MemPoolT< ITEM_SIZE >::Clear(); - } - - void Clear() { - // Delete the blocks. - while( !_blockPtrs.Empty()) { - Block* lastBlock = _blockPtrs.Pop(); - delete lastBlock; - } - _root = 0; - _currentAllocs = 0; - _nAllocs = 0; - _maxAllocs = 0; - _nUntracked = 0; - } - - virtual int ItemSize() const { - return ITEM_SIZE; - } - int CurrentAllocs() const { - return _currentAllocs; - } - - virtual void* Alloc() { - if ( !_root ) { - // Need a new block. - Block* block = new Block(); - _blockPtrs.Push( block ); - - Item* blockItems = block->items; - for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) { - blockItems[i].next = &(blockItems[i + 1]); - } - blockItems[ITEMS_PER_BLOCK - 1].next = 0; - _root = blockItems; - } - Item* const result = _root; - TIXMLASSERT( result != 0 ); - _root = _root->next; - - ++_currentAllocs; - if ( _currentAllocs > _maxAllocs ) { - _maxAllocs = _currentAllocs; - } - ++_nAllocs; - ++_nUntracked; - return result; - } - - virtual void Free( void* mem ) { - if ( !mem ) { - return; - } - --_currentAllocs; - Item* item = static_cast( mem ); -#ifdef TINYXML2_DEBUG - memset( item, 0xfe, sizeof( *item ) ); -#endif - item->next = _root; - _root = item; - } - void Trace( const char* name ) { - printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n", - name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs, - ITEM_SIZE, _nAllocs, _blockPtrs.Size() ); - } - - void SetTracked() { - --_nUntracked; - } - - int Untracked() const { - return _nUntracked; - } - - // This number is perf sensitive. 4k seems like a good tradeoff on my machine. - // The test file is large, 170k. - // Release: VS2010 gcc(no opt) - // 1k: 4000 - // 2k: 4000 - // 4k: 3900 21000 - // 16k: 5200 - // 32k: 4300 - // 64k: 4000 21000 - // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK - // in private part if ITEMS_PER_BLOCK is private - enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE }; - -private: - MemPoolT( const MemPoolT& ); // not supported - void operator=( const MemPoolT& ); // not supported - - union Item { - Item* next; - char itemData[ITEM_SIZE]; - }; - struct Block { - Item items[ITEMS_PER_BLOCK]; - }; - DynArray< Block*, 10 > _blockPtrs; - Item* _root; - - int _currentAllocs; - int _nAllocs; - int _maxAllocs; - int _nUntracked; -}; - - - -/** - Implements the interface to the "Visitor pattern" (see the Accept() method.) - If you call the Accept() method, it requires being passed a XMLVisitor - class to handle callbacks. For nodes that contain other nodes (Document, Element) - you will get called with a VisitEnter/VisitExit pair. Nodes that are always leafs - are simply called with Visit(). - - If you return 'true' from a Visit method, recursive parsing will continue. If you return - false, no children of this node or its siblings will be visited. - - All flavors of Visit methods have a default implementation that returns 'true' (continue - visiting). You need to only override methods that are interesting to you. - - Generally Accept() is called on the XMLDocument, although all nodes support visiting. - - You should never change the document from a callback. - - @sa XMLNode::Accept() -*/ -class TINYXML2_LIB XMLVisitor -{ -public: - virtual ~XMLVisitor() {} - - /// Visit a document. - virtual bool VisitEnter( const XMLDocument& /*doc*/ ) { - return true; - } - /// Visit a document. - virtual bool VisitExit( const XMLDocument& /*doc*/ ) { - return true; - } - - /// Visit an element. - virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) { - return true; - } - /// Visit an element. - virtual bool VisitExit( const XMLElement& /*element*/ ) { - return true; - } - - /// Visit a declaration. - virtual bool Visit( const XMLDeclaration& /*declaration*/ ) { - return true; - } - /// Visit a text node. - virtual bool Visit( const XMLText& /*text*/ ) { - return true; - } - /// Visit a comment node. - virtual bool Visit( const XMLComment& /*comment*/ ) { - return true; - } - /// Visit an unknown node. - virtual bool Visit( const XMLUnknown& /*unknown*/ ) { - return true; - } -}; - -// WARNING: must match XMLDocument::_errorNames[] -enum XMLError { - XML_SUCCESS = 0, - XML_NO_ATTRIBUTE, - XML_WRONG_ATTRIBUTE_TYPE, - XML_ERROR_FILE_NOT_FOUND, - XML_ERROR_FILE_COULD_NOT_BE_OPENED, - XML_ERROR_FILE_READ_ERROR, - XML_ERROR_PARSING_ELEMENT, - XML_ERROR_PARSING_ATTRIBUTE, - XML_ERROR_PARSING_TEXT, - XML_ERROR_PARSING_CDATA, - XML_ERROR_PARSING_COMMENT, - XML_ERROR_PARSING_DECLARATION, - XML_ERROR_PARSING_UNKNOWN, - XML_ERROR_EMPTY_DOCUMENT, - XML_ERROR_MISMATCHED_ELEMENT, - XML_ERROR_PARSING, - XML_CAN_NOT_CONVERT_TEXT, - XML_NO_TEXT_NODE, - XML_ELEMENT_DEPTH_EXCEEDED, - - XML_ERROR_COUNT -}; - - -/* - Utility functionality. -*/ -class TINYXML2_LIB XMLUtil -{ -public: - static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr ) { - TIXMLASSERT( p ); - - while( IsWhiteSpace(*p) ) { - if (curLineNumPtr && *p == '\n') { - ++(*curLineNumPtr); - } - ++p; - } - TIXMLASSERT( p ); - return p; - } - static char* SkipWhiteSpace( char* const p, int* curLineNumPtr ) { - return const_cast( SkipWhiteSpace( const_cast(p), curLineNumPtr ) ); - } - - // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't - // correct, but simple, and usually works. - static bool IsWhiteSpace( char p ) { - return !IsUTF8Continuation(p) && isspace( static_cast(p) ); - } - - inline static bool IsNameStartChar( unsigned char ch ) { - if ( ch >= 128 ) { - // This is a heuristic guess in attempt to not implement Unicode-aware isalpha() - return true; - } - if ( isalpha( ch ) ) { - return true; - } - return ch == ':' || ch == '_'; - } - - inline static bool IsNameChar( unsigned char ch ) { - return IsNameStartChar( ch ) - || isdigit( ch ) - || ch == '.' - || ch == '-'; - } - - inline static bool IsPrefixHex( const char* p) { - p = SkipWhiteSpace(p, 0); - return p && *p == '0' && ( *(p + 1) == 'x' || *(p + 1) == 'X'); - } - - inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) { - if ( p == q ) { - return true; - } - TIXMLASSERT( p ); - TIXMLASSERT( q ); - TIXMLASSERT( nChar >= 0 ); - return strncmp( p, q, nChar ) == 0; - } - - inline static bool IsUTF8Continuation( const char p ) { - return ( p & 0x80 ) != 0; - } - - static const char* ReadBOM( const char* p, bool* hasBOM ); - // p is the starting location, - // the UTF-8 value of the entity will be placed in value, and length filled in. - static const char* GetCharacterRef( const char* p, char* value, int* length ); - static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); - - // converts primitive types to strings - static void ToStr( int v, char* buffer, int bufferSize ); - static void ToStr( unsigned v, char* buffer, int bufferSize ); - static void ToStr( bool v, char* buffer, int bufferSize ); - static void ToStr( float v, char* buffer, int bufferSize ); - static void ToStr( double v, char* buffer, int bufferSize ); - static void ToStr(int64_t v, char* buffer, int bufferSize); - static void ToStr(uint64_t v, char* buffer, int bufferSize); - - // converts strings to primitive types - static bool ToInt( const char* str, int* value ); - static bool ToUnsigned( const char* str, unsigned* value ); - static bool ToBool( const char* str, bool* value ); - static bool ToFloat( const char* str, float* value ); - static bool ToDouble( const char* str, double* value ); - static bool ToInt64(const char* str, int64_t* value); - static bool ToUnsigned64(const char* str, uint64_t* value); - // Changes what is serialized for a boolean value. - // Default to "true" and "false". Shouldn't be changed - // unless you have a special testing or compatibility need. - // Be careful: static, global, & not thread safe. - // Be sure to set static const memory as parameters. - static void SetBoolSerialization(const char* writeTrue, const char* writeFalse); - -private: - static const char* writeBoolTrue; - static const char* writeBoolFalse; -}; - - -/** XMLNode is a base class for every object that is in the - XML Document Object Model (DOM), except XMLAttributes. - Nodes have siblings, a parent, and children which can - be navigated. A node is always in a XMLDocument. - The type of a XMLNode can be queried, and it can - be cast to its more defined type. - - A XMLDocument allocates memory for all its Nodes. - When the XMLDocument gets deleted, all its Nodes - will also be deleted. - - @verbatim - A Document can contain: Element (container or leaf) - Comment (leaf) - Unknown (leaf) - Declaration( leaf ) - - An Element can contain: Element (container or leaf) - Text (leaf) - Attributes (not on tree) - Comment (leaf) - Unknown (leaf) - - @endverbatim -*/ -class TINYXML2_LIB XMLNode -{ - friend class XMLDocument; - friend class XMLElement; -public: - - /// Get the XMLDocument that owns this XMLNode. - const XMLDocument* GetDocument() const { - TIXMLASSERT( _document ); - return _document; - } - /// Get the XMLDocument that owns this XMLNode. - XMLDocument* GetDocument() { - TIXMLASSERT( _document ); - return _document; - } - - /// Safely cast to an Element, or null. - virtual XMLElement* ToElement() { - return 0; - } - /// Safely cast to Text, or null. - virtual XMLText* ToText() { - return 0; - } - /// Safely cast to a Comment, or null. - virtual XMLComment* ToComment() { - return 0; - } - /// Safely cast to a Document, or null. - virtual XMLDocument* ToDocument() { - return 0; - } - /// Safely cast to a Declaration, or null. - virtual XMLDeclaration* ToDeclaration() { - return 0; - } - /// Safely cast to an Unknown, or null. - virtual XMLUnknown* ToUnknown() { - return 0; - } - - virtual const XMLElement* ToElement() const { - return 0; - } - virtual const XMLText* ToText() const { - return 0; - } - virtual const XMLComment* ToComment() const { - return 0; - } - virtual const XMLDocument* ToDocument() const { - return 0; - } - virtual const XMLDeclaration* ToDeclaration() const { - return 0; - } - virtual const XMLUnknown* ToUnknown() const { - return 0; - } - - /** The meaning of 'value' changes for the specific type. - @verbatim - Document: empty (NULL is returned, not an empty string) - Element: name of the element - Comment: the comment text - Unknown: the tag contents - Text: the text string - @endverbatim - */ - const char* Value() const; - - /** Set the Value of an XML node. - @sa Value() - */ - void SetValue( const char* val, bool staticMem=false ); - - /// Gets the line number the node is in, if the document was parsed from a file. - int GetLineNum() const { return _parseLineNum; } - - /// Get the parent of this node on the DOM. - const XMLNode* Parent() const { - return _parent; - } - - XMLNode* Parent() { - return _parent; - } - - /// Returns true if this node has no children. - bool NoChildren() const { - return !_firstChild; - } - - /// Get the first child node, or null if none exists. - const XMLNode* FirstChild() const { - return _firstChild; - } - - XMLNode* FirstChild() { - return _firstChild; - } - - /** Get the first child element, or optionally the first child - element with the specified name. - */ - const XMLElement* FirstChildElement( const char* name = 0 ) const; - - XMLElement* FirstChildElement( const char* name = 0 ) { - return const_cast(const_cast(this)->FirstChildElement( name )); - } - - /// Get the last child node, or null if none exists. - const XMLNode* LastChild() const { - return _lastChild; - } - - XMLNode* LastChild() { - return _lastChild; - } - - /** Get the last child element or optionally the last child - element with the specified name. - */ - const XMLElement* LastChildElement( const char* name = 0 ) const; - - XMLElement* LastChildElement( const char* name = 0 ) { - return const_cast(const_cast(this)->LastChildElement(name) ); - } - - /// Get the previous (left) sibling node of this node. - const XMLNode* PreviousSibling() const { - return _prev; - } - - XMLNode* PreviousSibling() { - return _prev; - } - - /// Get the previous (left) sibling element of this node, with an optionally supplied name. - const XMLElement* PreviousSiblingElement( const char* name = 0 ) const ; - - XMLElement* PreviousSiblingElement( const char* name = 0 ) { - return const_cast(const_cast(this)->PreviousSiblingElement( name ) ); - } - - /// Get the next (right) sibling node of this node. - const XMLNode* NextSibling() const { - return _next; - } - - XMLNode* NextSibling() { - return _next; - } - - /// Get the next (right) sibling element of this node, with an optionally supplied name. - const XMLElement* NextSiblingElement( const char* name = 0 ) const; - - XMLElement* NextSiblingElement( const char* name = 0 ) { - return const_cast(const_cast(this)->NextSiblingElement( name ) ); - } - - /** - Add a child node as the last (right) child. - If the child node is already part of the document, - it is moved from its old location to the new location. - Returns the addThis argument or 0 if the node does not - belong to the same document. - */ - XMLNode* InsertEndChild( XMLNode* addThis ); - - XMLNode* LinkEndChild( XMLNode* addThis ) { - return InsertEndChild( addThis ); - } - /** - Add a child node as the first (left) child. - If the child node is already part of the document, - it is moved from its old location to the new location. - Returns the addThis argument or 0 if the node does not - belong to the same document. - */ - XMLNode* InsertFirstChild( XMLNode* addThis ); - /** - Add a node after the specified child node. - If the child node is already part of the document, - it is moved from its old location to the new location. - Returns the addThis argument or 0 if the afterThis node - is not a child of this node, or if the node does not - belong to the same document. - */ - XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis ); - - /** - Delete all the children of this node. - */ - void DeleteChildren(); - - /** - Delete a child of this node. - */ - void DeleteChild( XMLNode* node ); - - /** - Make a copy of this node, but not its children. - You may pass in a Document pointer that will be - the owner of the new Node. If the 'document' is - null, then the node returned will be allocated - from the current Document. (this->GetDocument()) - - Note: if called on a XMLDocument, this will return null. - */ - virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0; - - /** - Make a copy of this node and all its children. - - If the 'target' is null, then the nodes will - be allocated in the current document. If 'target' - is specified, the memory will be allocated is the - specified XMLDocument. - - NOTE: This is probably not the correct tool to - copy a document, since XMLDocuments can have multiple - top level XMLNodes. You probably want to use - XMLDocument::DeepCopy() - */ - XMLNode* DeepClone( XMLDocument* target ) const; - - /** - Test if 2 nodes are the same, but don't test children. - The 2 nodes do not need to be in the same Document. - - Note: if called on a XMLDocument, this will return false. - */ - virtual bool ShallowEqual( const XMLNode* compare ) const = 0; - - /** Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the - XML tree will be conditionally visited and the host will be called back - via the XMLVisitor interface. - - This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse - the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this - interface versus any other.) - - The interface has been based on ideas from: - - - http://www.saxproject.org/ - - http://c2.com/cgi/wiki?HierarchicalVisitorPattern - - Which are both good references for "visiting". - - An example of using Accept(): - @verbatim - XMLPrinter printer; - tinyxmlDoc.Accept( &printer ); - const char* xmlcstr = printer.CStr(); - @endverbatim - */ - virtual bool Accept( XMLVisitor* visitor ) const = 0; - - /** - Set user data into the XMLNode. TinyXML-2 in - no way processes or interprets user data. - It is initially 0. - */ - void SetUserData(void* userData) { _userData = userData; } - - /** - Get user data set into the XMLNode. TinyXML-2 in - no way processes or interprets user data. - It is initially 0. - */ - void* GetUserData() const { return _userData; } - -protected: - explicit XMLNode( XMLDocument* ); - virtual ~XMLNode(); - - virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr); - - XMLDocument* _document; - XMLNode* _parent; - mutable StrPair _value; - int _parseLineNum; - - XMLNode* _firstChild; - XMLNode* _lastChild; - - XMLNode* _prev; - XMLNode* _next; - - void* _userData; - -private: - MemPool* _memPool; - void Unlink( XMLNode* child ); - static void DeleteNode( XMLNode* node ); - void InsertChildPreamble( XMLNode* insertThis ) const; - const XMLElement* ToElementWithName( const char* name ) const; - - XMLNode( const XMLNode& ); // not supported - XMLNode& operator=( const XMLNode& ); // not supported -}; - - -/** XML text. - - Note that a text node can have child element nodes, for example: - @verbatim - This is bold - @endverbatim - - A text node can have 2 ways to output the next. "normal" output - and CDATA. It will default to the mode it was parsed from the XML file and - you generally want to leave it alone, but you can change the output mode with - SetCData() and query it with CData(). -*/ -class TINYXML2_LIB XMLText : public XMLNode -{ - friend class XMLDocument; -public: - virtual bool Accept( XMLVisitor* visitor ) const; - - virtual XMLText* ToText() { - return this; - } - virtual const XMLText* ToText() const { - return this; - } - - /// Declare whether this should be CDATA or standard text. - void SetCData( bool isCData ) { - _isCData = isCData; - } - /// Returns true if this is a CDATA text element. - bool CData() const { - return _isCData; - } - - virtual XMLNode* ShallowClone( XMLDocument* document ) const; - virtual bool ShallowEqual( const XMLNode* compare ) const; - -protected: - explicit XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {} - virtual ~XMLText() {} - - char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); - -private: - bool _isCData; - - XMLText( const XMLText& ); // not supported - XMLText& operator=( const XMLText& ); // not supported -}; - - -/** An XML Comment. */ -class TINYXML2_LIB XMLComment : public XMLNode -{ - friend class XMLDocument; -public: - virtual XMLComment* ToComment() { - return this; - } - virtual const XMLComment* ToComment() const { - return this; - } - - virtual bool Accept( XMLVisitor* visitor ) const; - - virtual XMLNode* ShallowClone( XMLDocument* document ) const; - virtual bool ShallowEqual( const XMLNode* compare ) const; - -protected: - explicit XMLComment( XMLDocument* doc ); - virtual ~XMLComment(); - - char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr); - -private: - XMLComment( const XMLComment& ); // not supported - XMLComment& operator=( const XMLComment& ); // not supported -}; - - -/** In correct XML the declaration is the first entry in the file. - @verbatim - - @endverbatim - - TinyXML-2 will happily read or write files without a declaration, - however. - - The text of the declaration isn't interpreted. It is parsed - and written as a string. -*/ -class TINYXML2_LIB XMLDeclaration : public XMLNode -{ - friend class XMLDocument; -public: - virtual XMLDeclaration* ToDeclaration() { - return this; - } - virtual const XMLDeclaration* ToDeclaration() const { - return this; - } - - virtual bool Accept( XMLVisitor* visitor ) const; - - virtual XMLNode* ShallowClone( XMLDocument* document ) const; - virtual bool ShallowEqual( const XMLNode* compare ) const; - -protected: - explicit XMLDeclaration( XMLDocument* doc ); - virtual ~XMLDeclaration(); - - char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); - -private: - XMLDeclaration( const XMLDeclaration& ); // not supported - XMLDeclaration& operator=( const XMLDeclaration& ); // not supported -}; - - -/** Any tag that TinyXML-2 doesn't recognize is saved as an - unknown. It is a tag of text, but should not be modified. - It will be written back to the XML, unchanged, when the file - is saved. - - DTD tags get thrown into XMLUnknowns. -*/ -class TINYXML2_LIB XMLUnknown : public XMLNode -{ - friend class XMLDocument; -public: - virtual XMLUnknown* ToUnknown() { - return this; - } - virtual const XMLUnknown* ToUnknown() const { - return this; - } - - virtual bool Accept( XMLVisitor* visitor ) const; - - virtual XMLNode* ShallowClone( XMLDocument* document ) const; - virtual bool ShallowEqual( const XMLNode* compare ) const; - -protected: - explicit XMLUnknown( XMLDocument* doc ); - virtual ~XMLUnknown(); - - char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); - -private: - XMLUnknown( const XMLUnknown& ); // not supported - XMLUnknown& operator=( const XMLUnknown& ); // not supported -}; - - - -/** An attribute is a name-value pair. Elements have an arbitrary - number of attributes, each with a unique name. - - @note The attributes are not XMLNodes. You may only query the - Next() attribute in a list. -*/ -class TINYXML2_LIB XMLAttribute -{ - friend class XMLElement; -public: - /// The name of the attribute. - const char* Name() const; - - /// The value of the attribute. - const char* Value() const; - - /// Gets the line number the attribute is in, if the document was parsed from a file. - int GetLineNum() const { return _parseLineNum; } - - /// The next attribute in the list. - const XMLAttribute* Next() const { - return _next; - } - - /** IntValue interprets the attribute as an integer, and returns the value. - If the value isn't an integer, 0 will be returned. There is no error checking; - use QueryIntValue() if you need error checking. - */ - int IntValue() const { - int i = 0; - QueryIntValue(&i); - return i; - } - - int64_t Int64Value() const { - int64_t i = 0; - QueryInt64Value(&i); - return i; - } - - uint64_t Unsigned64Value() const { - uint64_t i = 0; - QueryUnsigned64Value(&i); - return i; - } - - /// Query as an unsigned integer. See IntValue() - unsigned UnsignedValue() const { - unsigned i=0; - QueryUnsignedValue( &i ); - return i; - } - /// Query as a boolean. See IntValue() - bool BoolValue() const { - bool b=false; - QueryBoolValue( &b ); - return b; - } - /// Query as a double. See IntValue() - double DoubleValue() const { - double d=0; - QueryDoubleValue( &d ); - return d; - } - /// Query as a float. See IntValue() - float FloatValue() const { - float f=0; - QueryFloatValue( &f ); - return f; - } - - /** QueryIntValue interprets the attribute as an integer, and returns the value - in the provided parameter. The function will return XML_SUCCESS on success, - and XML_WRONG_ATTRIBUTE_TYPE if the conversion is not successful. - */ - XMLError QueryIntValue( int* value ) const; - /// See QueryIntValue - XMLError QueryUnsignedValue( unsigned int* value ) const; - /// See QueryIntValue - XMLError QueryInt64Value(int64_t* value) const; - /// See QueryIntValue - XMLError QueryUnsigned64Value(uint64_t* value) const; - /// See QueryIntValue - XMLError QueryBoolValue( bool* value ) const; - /// See QueryIntValue - XMLError QueryDoubleValue( double* value ) const; - /// See QueryIntValue - XMLError QueryFloatValue( float* value ) const; - - /// Set the attribute to a string value. - void SetAttribute( const char* value ); - /// Set the attribute to value. - void SetAttribute( int value ); - /// Set the attribute to value. - void SetAttribute( unsigned value ); - /// Set the attribute to value. - void SetAttribute(int64_t value); - /// Set the attribute to value. - void SetAttribute(uint64_t value); - /// Set the attribute to value. - void SetAttribute( bool value ); - /// Set the attribute to value. - void SetAttribute( double value ); - /// Set the attribute to value. - void SetAttribute( float value ); - -private: - enum { BUF_SIZE = 200 }; - - XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {} - virtual ~XMLAttribute() {} - - XMLAttribute( const XMLAttribute& ); // not supported - void operator=( const XMLAttribute& ); // not supported - void SetName( const char* name ); - - char* ParseDeep( char* p, bool processEntities, int* curLineNumPtr ); - - mutable StrPair _name; - mutable StrPair _value; - int _parseLineNum; - XMLAttribute* _next; - MemPool* _memPool; -}; - - -/** The element is a container class. It has a value, the element name, - and can contain other elements, text, comments, and unknowns. - Elements also contain an arbitrary number of attributes. -*/ -class TINYXML2_LIB XMLElement : public XMLNode -{ - friend class XMLDocument; -public: - /// Get the name of an element (which is the Value() of the node.) - const char* Name() const { - return Value(); - } - /// Set the name of the element. - void SetName( const char* str, bool staticMem=false ) { - SetValue( str, staticMem ); - } - - virtual XMLElement* ToElement() { - return this; - } - virtual const XMLElement* ToElement() const { - return this; - } - virtual bool Accept( XMLVisitor* visitor ) const; - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none - exists. For example: - - @verbatim - const char* value = ele->Attribute( "foo" ); - @endverbatim - - The 'value' parameter is normally null. However, if specified, - the attribute will only be returned if the 'name' and 'value' - match. This allow you to write code: - - @verbatim - if ( ele->Attribute( "foo", "bar" ) ) callFooIsBar(); - @endverbatim - - rather than: - @verbatim - if ( ele->Attribute( "foo" ) ) { - if ( strcmp( ele->Attribute( "foo" ), "bar" ) == 0 ) callFooIsBar(); - } - @endverbatim - */ - const char* Attribute( const char* name, const char* value=0 ) const; - - /** Given an attribute name, IntAttribute() returns the value - of the attribute interpreted as an integer. The default - value will be returned if the attribute isn't present, - or if there is an error. (For a method with error - checking, see QueryIntAttribute()). - */ - int IntAttribute(const char* name, int defaultValue = 0) const; - /// See IntAttribute() - unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const; - /// See IntAttribute() - int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const; - /// See IntAttribute() - uint64_t Unsigned64Attribute(const char* name, uint64_t defaultValue = 0) const; - /// See IntAttribute() - bool BoolAttribute(const char* name, bool defaultValue = false) const; - /// See IntAttribute() - double DoubleAttribute(const char* name, double defaultValue = 0) const; - /// See IntAttribute() - float FloatAttribute(const char* name, float defaultValue = 0) const; - - /** Given an attribute name, QueryIntAttribute() returns - XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion - can't be performed, or XML_NO_ATTRIBUTE if the attribute - doesn't exist. If successful, the result of the conversion - will be written to 'value'. If not successful, nothing will - be written to 'value'. This allows you to provide default - value: - - @verbatim - int value = 10; - QueryIntAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10 - @endverbatim - */ - XMLError QueryIntAttribute( const char* name, int* value ) const { - const XMLAttribute* a = FindAttribute( name ); - if ( !a ) { - return XML_NO_ATTRIBUTE; - } - return a->QueryIntValue( value ); - } - - /// See QueryIntAttribute() - XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const { - const XMLAttribute* a = FindAttribute( name ); - if ( !a ) { - return XML_NO_ATTRIBUTE; - } - return a->QueryUnsignedValue( value ); - } - - /// See QueryIntAttribute() - XMLError QueryInt64Attribute(const char* name, int64_t* value) const { - const XMLAttribute* a = FindAttribute(name); - if (!a) { - return XML_NO_ATTRIBUTE; - } - return a->QueryInt64Value(value); - } - - /// See QueryIntAttribute() - XMLError QueryUnsigned64Attribute(const char* name, uint64_t* value) const { - const XMLAttribute* a = FindAttribute(name); - if(!a) { - return XML_NO_ATTRIBUTE; - } - return a->QueryUnsigned64Value(value); - } - - /// See QueryIntAttribute() - XMLError QueryBoolAttribute( const char* name, bool* value ) const { - const XMLAttribute* a = FindAttribute( name ); - if ( !a ) { - return XML_NO_ATTRIBUTE; - } - return a->QueryBoolValue( value ); - } - /// See QueryIntAttribute() - XMLError QueryDoubleAttribute( const char* name, double* value ) const { - const XMLAttribute* a = FindAttribute( name ); - if ( !a ) { - return XML_NO_ATTRIBUTE; - } - return a->QueryDoubleValue( value ); - } - /// See QueryIntAttribute() - XMLError QueryFloatAttribute( const char* name, float* value ) const { - const XMLAttribute* a = FindAttribute( name ); - if ( !a ) { - return XML_NO_ATTRIBUTE; - } - return a->QueryFloatValue( value ); - } - - /// See QueryIntAttribute() - XMLError QueryStringAttribute(const char* name, const char** value) const { - const XMLAttribute* a = FindAttribute(name); - if (!a) { - return XML_NO_ATTRIBUTE; - } - *value = a->Value(); - return XML_SUCCESS; - } - - - - /** Given an attribute name, QueryAttribute() returns - XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion - can't be performed, or XML_NO_ATTRIBUTE if the attribute - doesn't exist. It is overloaded for the primitive types, - and is a generally more convenient replacement of - QueryIntAttribute() and related functions. - - If successful, the result of the conversion - will be written to 'value'. If not successful, nothing will - be written to 'value'. This allows you to provide default - value: - - @verbatim - int value = 10; - QueryAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10 - @endverbatim - */ - XMLError QueryAttribute( const char* name, int* value ) const { - return QueryIntAttribute( name, value ); - } - - XMLError QueryAttribute( const char* name, unsigned int* value ) const { - return QueryUnsignedAttribute( name, value ); - } - - XMLError QueryAttribute(const char* name, int64_t* value) const { - return QueryInt64Attribute(name, value); - } - - XMLError QueryAttribute(const char* name, uint64_t* value) const { - return QueryUnsigned64Attribute(name, value); - } - - XMLError QueryAttribute( const char* name, bool* value ) const { - return QueryBoolAttribute( name, value ); - } - - XMLError QueryAttribute( const char* name, double* value ) const { - return QueryDoubleAttribute( name, value ); - } - - XMLError QueryAttribute( const char* name, float* value ) const { - return QueryFloatAttribute( name, value ); - } - - XMLError QueryAttribute(const char* name, const char** value) const { - return QueryStringAttribute(name, value); - } - - /// Sets the named attribute to value. - void SetAttribute( const char* name, const char* value ) { - XMLAttribute* a = FindOrCreateAttribute( name ); - a->SetAttribute( value ); - } - /// Sets the named attribute to value. - void SetAttribute( const char* name, int value ) { - XMLAttribute* a = FindOrCreateAttribute( name ); - a->SetAttribute( value ); - } - /// Sets the named attribute to value. - void SetAttribute( const char* name, unsigned value ) { - XMLAttribute* a = FindOrCreateAttribute( name ); - a->SetAttribute( value ); - } - - /// Sets the named attribute to value. - void SetAttribute(const char* name, int64_t value) { - XMLAttribute* a = FindOrCreateAttribute(name); - a->SetAttribute(value); - } - - /// Sets the named attribute to value. - void SetAttribute(const char* name, uint64_t value) { - XMLAttribute* a = FindOrCreateAttribute(name); - a->SetAttribute(value); - } - - /// Sets the named attribute to value. - void SetAttribute( const char* name, bool value ) { - XMLAttribute* a = FindOrCreateAttribute( name ); - a->SetAttribute( value ); - } - /// Sets the named attribute to value. - void SetAttribute( const char* name, double value ) { - XMLAttribute* a = FindOrCreateAttribute( name ); - a->SetAttribute( value ); - } - /// Sets the named attribute to value. - void SetAttribute( const char* name, float value ) { - XMLAttribute* a = FindOrCreateAttribute( name ); - a->SetAttribute( value ); - } - - /** - Delete an attribute. - */ - void DeleteAttribute( const char* name ); - - /// Return the first attribute in the list. - const XMLAttribute* FirstAttribute() const { - return _rootAttribute; - } - /// Query a specific attribute in the list. - const XMLAttribute* FindAttribute( const char* name ) const; - - /** Convenience function for easy access to the text inside an element. Although easy - and concise, GetText() is limited compared to getting the XMLText child - and accessing it directly. - - If the first child of 'this' is a XMLText, the GetText() - returns the character string of the Text node, else null is returned. - - This is a convenient method for getting the text of simple contained text: - @verbatim - This is text - const char* str = fooElement->GetText(); - @endverbatim - - 'str' will be a pointer to "This is text". - - Note that this function can be misleading. If the element foo was created from - this XML: - @verbatim - This is text - @endverbatim - - then the value of str would be null. The first child node isn't a text node, it is - another element. From this XML: - @verbatim - This is text - @endverbatim - GetText() will return "This is ". - */ - const char* GetText() const; - - /** Convenience function for easy access to the text inside an element. Although easy - and concise, SetText() is limited compared to creating an XMLText child - and mutating it directly. - - If the first child of 'this' is a XMLText, SetText() sets its value to - the given string, otherwise it will create a first child that is an XMLText. - - This is a convenient method for setting the text of simple contained text: - @verbatim - This is text - fooElement->SetText( "Hullaballoo!" ); - Hullaballoo! - @endverbatim - - Note that this function can be misleading. If the element foo was created from - this XML: - @verbatim - This is text - @endverbatim - - then it will not change "This is text", but rather prefix it with a text element: - @verbatim - Hullaballoo!This is text - @endverbatim - - For this XML: - @verbatim - - @endverbatim - SetText() will generate - @verbatim - Hullaballoo! - @endverbatim - */ - void SetText( const char* inText ); - /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText( int value ); - /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText( unsigned value ); - /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText(int64_t value); - /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText(uint64_t value); - /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText( bool value ); - /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText( double value ); - /// Convenience method for setting text inside an element. See SetText() for important limitations. - void SetText( float value ); - - /** - Convenience method to query the value of a child text node. This is probably best - shown by example. Given you have a document is this form: - @verbatim - - 1 - 1.4 - - @endverbatim - - The QueryIntText() and similar functions provide a safe and easier way to get to the - "value" of x and y. - - @verbatim - int x = 0; - float y = 0; // types of x and y are contrived for example - const XMLElement* xElement = pointElement->FirstChildElement( "x" ); - const XMLElement* yElement = pointElement->FirstChildElement( "y" ); - xElement->QueryIntText( &x ); - yElement->QueryFloatText( &y ); - @endverbatim - - @returns XML_SUCCESS (0) on success, XML_CAN_NOT_CONVERT_TEXT if the text cannot be converted - to the requested type, and XML_NO_TEXT_NODE if there is no child text to query. - - */ - XMLError QueryIntText( int* ival ) const; - /// See QueryIntText() - XMLError QueryUnsignedText( unsigned* uval ) const; - /// See QueryIntText() - XMLError QueryInt64Text(int64_t* uval) const; - /// See QueryIntText() - XMLError QueryUnsigned64Text(uint64_t* uval) const; - /// See QueryIntText() - XMLError QueryBoolText( bool* bval ) const; - /// See QueryIntText() - XMLError QueryDoubleText( double* dval ) const; - /// See QueryIntText() - XMLError QueryFloatText( float* fval ) const; - - int IntText(int defaultValue = 0) const; - - /// See QueryIntText() - unsigned UnsignedText(unsigned defaultValue = 0) const; - /// See QueryIntText() - int64_t Int64Text(int64_t defaultValue = 0) const; - /// See QueryIntText() - uint64_t Unsigned64Text(uint64_t defaultValue = 0) const; - /// See QueryIntText() - bool BoolText(bool defaultValue = false) const; - /// See QueryIntText() - double DoubleText(double defaultValue = 0) const; - /// See QueryIntText() - float FloatText(float defaultValue = 0) const; - - /** - Convenience method to create a new XMLElement and add it as last (right) - child of this node. Returns the created and inserted element. - */ - XMLElement* InsertNewChildElement(const char* name); - /// See InsertNewChildElement() - XMLComment* InsertNewComment(const char* comment); - /// See InsertNewChildElement() - XMLText* InsertNewText(const char* text); - /// See InsertNewChildElement() - XMLDeclaration* InsertNewDeclaration(const char* text); - /// See InsertNewChildElement() - XMLUnknown* InsertNewUnknown(const char* text); - - - // internal: - enum ElementClosingType { - OPEN, // - CLOSED, // - CLOSING // - }; - ElementClosingType ClosingType() const { - return _closingType; - } - virtual XMLNode* ShallowClone( XMLDocument* document ) const; - virtual bool ShallowEqual( const XMLNode* compare ) const; - -protected: - char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); - -private: - XMLElement( XMLDocument* doc ); - virtual ~XMLElement(); - XMLElement( const XMLElement& ); // not supported - void operator=( const XMLElement& ); // not supported - - XMLAttribute* FindOrCreateAttribute( const char* name ); - char* ParseAttributes( char* p, int* curLineNumPtr ); - static void DeleteAttribute( XMLAttribute* attribute ); - XMLAttribute* CreateAttribute(); - - enum { BUF_SIZE = 200 }; - ElementClosingType _closingType; - // The attribute list is ordered; there is no 'lastAttribute' - // because the list needs to be scanned for dupes before adding - // a new attribute. - XMLAttribute* _rootAttribute; -}; - - -enum Whitespace { - PRESERVE_WHITESPACE, - COLLAPSE_WHITESPACE -}; - - -/** A Document binds together all the functionality. - It can be saved, loaded, and printed to the screen. - All Nodes are connected and allocated to a Document. - If the Document is deleted, all its Nodes are also deleted. -*/ -class TINYXML2_LIB XMLDocument : public XMLNode -{ - friend class XMLElement; - // Gives access to SetError and Push/PopDepth, but over-access for everything else. - // Wishing C++ had "internal" scope. - friend class XMLNode; - friend class XMLText; - friend class XMLComment; - friend class XMLDeclaration; - friend class XMLUnknown; -public: - /// constructor - XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE ); - ~XMLDocument(); - - virtual XMLDocument* ToDocument() { - TIXMLASSERT( this == _document ); - return this; - } - virtual const XMLDocument* ToDocument() const { - TIXMLASSERT( this == _document ); - return this; - } - - /** - Parse an XML file from a character string. - Returns XML_SUCCESS (0) on success, or - an errorID. - - You may optionally pass in the 'nBytes', which is - the number of bytes which will be parsed. If not - specified, TinyXML-2 will assume 'xml' points to a - null terminated string. - */ - XMLError Parse( const char* xml, size_t nBytes=static_cast(-1) ); - - /** - Load an XML file from disk. - Returns XML_SUCCESS (0) on success, or - an errorID. - */ - XMLError LoadFile( const char* filename ); - - /** - Load an XML file from disk. You are responsible - for providing and closing the FILE*. - - NOTE: The file should be opened as binary ("rb") - not text in order for TinyXML-2 to correctly - do newline normalization. - - Returns XML_SUCCESS (0) on success, or - an errorID. - */ - XMLError LoadFile( FILE* ); - - /** - Save the XML file to disk. - Returns XML_SUCCESS (0) on success, or - an errorID. - */ - XMLError SaveFile( const char* filename, bool compact = false ); - - /** - Save the XML file to disk. You are responsible - for providing and closing the FILE*. - - Returns XML_SUCCESS (0) on success, or - an errorID. - */ - XMLError SaveFile( FILE* fp, bool compact = false ); - - bool ProcessEntities() const { - return _processEntities; - } - Whitespace WhitespaceMode() const { - return _whitespaceMode; - } - - /** - Returns true if this document has a leading Byte Order Mark of UTF8. - */ - bool HasBOM() const { - return _writeBOM; - } - /** Sets whether to write the BOM when writing the file. - */ - void SetBOM( bool useBOM ) { - _writeBOM = useBOM; - } - - /** Return the root element of DOM. Equivalent to FirstChildElement(). - To get the first node, use FirstChild(). - */ - XMLElement* RootElement() { - return FirstChildElement(); - } - const XMLElement* RootElement() const { - return FirstChildElement(); - } - - /** Print the Document. If the Printer is not provided, it will - print to stdout. If you provide Printer, this can print to a file: - @verbatim - XMLPrinter printer( fp ); - doc.Print( &printer ); - @endverbatim - - Or you can use a printer to print to memory: - @verbatim - XMLPrinter printer; - doc.Print( &printer ); - // printer.CStr() has a const char* to the XML - @endverbatim - */ - void Print( XMLPrinter* streamer=0 ) const; - virtual bool Accept( XMLVisitor* visitor ) const; - - /** - Create a new Element associated with - this Document. The memory for the Element - is managed by the Document. - */ - XMLElement* NewElement( const char* name ); - /** - Create a new Comment associated with - this Document. The memory for the Comment - is managed by the Document. - */ - XMLComment* NewComment( const char* comment ); - /** - Create a new Text associated with - this Document. The memory for the Text - is managed by the Document. - */ - XMLText* NewText( const char* text ); - /** - Create a new Declaration associated with - this Document. The memory for the object - is managed by the Document. - - If the 'text' param is null, the standard - declaration is used.: - @verbatim - - @endverbatim - */ - XMLDeclaration* NewDeclaration( const char* text=0 ); - /** - Create a new Unknown associated with - this Document. The memory for the object - is managed by the Document. - */ - XMLUnknown* NewUnknown( const char* text ); - - /** - Delete a node associated with this document. - It will be unlinked from the DOM. - */ - void DeleteNode( XMLNode* node ); - - /// Clears the error flags. - void ClearError(); - - /// Return true if there was an error parsing the document. - bool Error() const { - return _errorID != XML_SUCCESS; - } - /// Return the errorID. - XMLError ErrorID() const { - return _errorID; - } - const char* ErrorName() const; - static const char* ErrorIDToName(XMLError errorID); - - /** Returns a "long form" error description. A hopefully helpful - diagnostic with location, line number, and/or additional info. - */ - const char* ErrorStr() const; - - /// A (trivial) utility function that prints the ErrorStr() to stdout. - void PrintError() const; - - /// Return the line where the error occurred, or zero if unknown. - int ErrorLineNum() const - { - return _errorLineNum; - } - - /// Clear the document, resetting it to the initial state. - void Clear(); - - /** - Copies this document to a target document. - The target will be completely cleared before the copy. - If you want to copy a sub-tree, see XMLNode::DeepClone(). - - NOTE: that the 'target' must be non-null. - */ - void DeepCopy(XMLDocument* target) const; - - // internal - char* Identify( char* p, XMLNode** node ); - - // internal - void MarkInUse(const XMLNode* const); - - virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const { - return 0; - } - virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const { - return false; - } - -private: - XMLDocument( const XMLDocument& ); // not supported - void operator=( const XMLDocument& ); // not supported - - bool _writeBOM; - bool _processEntities; - XMLError _errorID; - Whitespace _whitespaceMode; - mutable StrPair _errorStr; - int _errorLineNum; - char* _charBuffer; - int _parseCurLineNum; - int _parsingDepth; - // Memory tracking does add some overhead. - // However, the code assumes that you don't - // have a bunch of unlinked nodes around. - // Therefore it takes less memory to track - // in the document vs. a linked list in the XMLNode, - // and the performance is the same. - DynArray _unlinked; - - MemPoolT< sizeof(XMLElement) > _elementPool; - MemPoolT< sizeof(XMLAttribute) > _attributePool; - MemPoolT< sizeof(XMLText) > _textPool; - MemPoolT< sizeof(XMLComment) > _commentPool; - - static const char* _errorNames[XML_ERROR_COUNT]; - - void Parse(); - - void SetError( XMLError error, int lineNum, const char* format, ... ); - - // Something of an obvious security hole, once it was discovered. - // Either an ill-formed XML or an excessively deep one can overflow - // the stack. Track stack depth, and error out if needed. - class DepthTracker { - public: - explicit DepthTracker(XMLDocument * document) { - this->_document = document; - document->PushDepth(); - } - ~DepthTracker() { - _document->PopDepth(); - } - private: - XMLDocument * _document; - }; - void PushDepth(); - void PopDepth(); - - template - NodeType* CreateUnlinkedNode( MemPoolT& pool ); -}; - -template -inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT& pool ) -{ - TIXMLASSERT( sizeof( NodeType ) == PoolElementSize ); - TIXMLASSERT( sizeof( NodeType ) == pool.ItemSize() ); - NodeType* returnNode = new (pool.Alloc()) NodeType( this ); - TIXMLASSERT( returnNode ); - returnNode->_memPool = &pool; - - _unlinked.Push(returnNode); - return returnNode; -} - -/** - A XMLHandle is a class that wraps a node pointer with null checks; this is - an incredibly useful thing. Note that XMLHandle is not part of the TinyXML-2 - DOM structure. It is a separate utility class. - - Take an example: - @verbatim - - - - - - - @endverbatim - - Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very - easy to write a *lot* of code that looks like: - - @verbatim - XMLElement* root = document.FirstChildElement( "Document" ); - if ( root ) - { - XMLElement* element = root->FirstChildElement( "Element" ); - if ( element ) - { - XMLElement* child = element->FirstChildElement( "Child" ); - if ( child ) - { - XMLElement* child2 = child->NextSiblingElement( "Child" ); - if ( child2 ) - { - // Finally do something useful. - @endverbatim - - And that doesn't even cover "else" cases. XMLHandle addresses the verbosity - of such code. A XMLHandle checks for null pointers so it is perfectly safe - and correct to use: - - @verbatim - XMLHandle docHandle( &document ); - XMLElement* child2 = docHandle.FirstChildElement( "Document" ).FirstChildElement( "Element" ).FirstChildElement().NextSiblingElement(); - if ( child2 ) - { - // do something useful - @endverbatim - - Which is MUCH more concise and useful. - - It is also safe to copy handles - internally they are nothing more than node pointers. - @verbatim - XMLHandle handleCopy = handle; - @endverbatim - - See also XMLConstHandle, which is the same as XMLHandle, but operates on const objects. -*/ -class TINYXML2_LIB XMLHandle -{ -public: - /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. - explicit XMLHandle( XMLNode* node ) : _node( node ) { - } - /// Create a handle from a node. - explicit XMLHandle( XMLNode& node ) : _node( &node ) { - } - /// Copy constructor - XMLHandle( const XMLHandle& ref ) : _node( ref._node ) { - } - /// Assignment - XMLHandle& operator=( const XMLHandle& ref ) { - _node = ref._node; - return *this; - } - - /// Get the first child of this handle. - XMLHandle FirstChild() { - return XMLHandle( _node ? _node->FirstChild() : 0 ); - } - /// Get the first child element of this handle. - XMLHandle FirstChildElement( const char* name = 0 ) { - return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 ); - } - /// Get the last child of this handle. - XMLHandle LastChild() { - return XMLHandle( _node ? _node->LastChild() : 0 ); - } - /// Get the last child element of this handle. - XMLHandle LastChildElement( const char* name = 0 ) { - return XMLHandle( _node ? _node->LastChildElement( name ) : 0 ); - } - /// Get the previous sibling of this handle. - XMLHandle PreviousSibling() { - return XMLHandle( _node ? _node->PreviousSibling() : 0 ); - } - /// Get the previous sibling element of this handle. - XMLHandle PreviousSiblingElement( const char* name = 0 ) { - return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 ); - } - /// Get the next sibling of this handle. - XMLHandle NextSibling() { - return XMLHandle( _node ? _node->NextSibling() : 0 ); - } - /// Get the next sibling element of this handle. - XMLHandle NextSiblingElement( const char* name = 0 ) { - return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 ); - } - - /// Safe cast to XMLNode. This can return null. - XMLNode* ToNode() { - return _node; - } - /// Safe cast to XMLElement. This can return null. - XMLElement* ToElement() { - return ( _node ? _node->ToElement() : 0 ); - } - /// Safe cast to XMLText. This can return null. - XMLText* ToText() { - return ( _node ? _node->ToText() : 0 ); - } - /// Safe cast to XMLUnknown. This can return null. - XMLUnknown* ToUnknown() { - return ( _node ? _node->ToUnknown() : 0 ); - } - /// Safe cast to XMLDeclaration. This can return null. - XMLDeclaration* ToDeclaration() { - return ( _node ? _node->ToDeclaration() : 0 ); - } - -private: - XMLNode* _node; -}; - - -/** - A variant of the XMLHandle class for working with const XMLNodes and Documents. It is the - same in all regards, except for the 'const' qualifiers. See XMLHandle for API. -*/ -class TINYXML2_LIB XMLConstHandle -{ -public: - explicit XMLConstHandle( const XMLNode* node ) : _node( node ) { - } - explicit XMLConstHandle( const XMLNode& node ) : _node( &node ) { - } - XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) { - } - - XMLConstHandle& operator=( const XMLConstHandle& ref ) { - _node = ref._node; - return *this; - } - - const XMLConstHandle FirstChild() const { - return XMLConstHandle( _node ? _node->FirstChild() : 0 ); - } - const XMLConstHandle FirstChildElement( const char* name = 0 ) const { - return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 ); - } - const XMLConstHandle LastChild() const { - return XMLConstHandle( _node ? _node->LastChild() : 0 ); - } - const XMLConstHandle LastChildElement( const char* name = 0 ) const { - return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 ); - } - const XMLConstHandle PreviousSibling() const { - return XMLConstHandle( _node ? _node->PreviousSibling() : 0 ); - } - const XMLConstHandle PreviousSiblingElement( const char* name = 0 ) const { - return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 ); - } - const XMLConstHandle NextSibling() const { - return XMLConstHandle( _node ? _node->NextSibling() : 0 ); - } - const XMLConstHandle NextSiblingElement( const char* name = 0 ) const { - return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 ); - } - - - const XMLNode* ToNode() const { - return _node; - } - const XMLElement* ToElement() const { - return ( _node ? _node->ToElement() : 0 ); - } - const XMLText* ToText() const { - return ( _node ? _node->ToText() : 0 ); - } - const XMLUnknown* ToUnknown() const { - return ( _node ? _node->ToUnknown() : 0 ); - } - const XMLDeclaration* ToDeclaration() const { - return ( _node ? _node->ToDeclaration() : 0 ); - } - -private: - const XMLNode* _node; -}; - - -/** - Printing functionality. The XMLPrinter gives you more - options than the XMLDocument::Print() method. - - It can: - -# Print to memory. - -# Print to a file you provide. - -# Print XML without a XMLDocument. - - Print to Memory - - @verbatim - XMLPrinter printer; - doc.Print( &printer ); - SomeFunction( printer.CStr() ); - @endverbatim - - Print to a File - - You provide the file pointer. - @verbatim - XMLPrinter printer( fp ); - doc.Print( &printer ); - @endverbatim - - Print without a XMLDocument - - When loading, an XML parser is very useful. However, sometimes - when saving, it just gets in the way. The code is often set up - for streaming, and constructing the DOM is just overhead. - - The Printer supports the streaming case. The following code - prints out a trivially simple XML file without ever creating - an XML document. - - @verbatim - XMLPrinter printer( fp ); - printer.OpenElement( "foo" ); - printer.PushAttribute( "foo", "bar" ); - printer.CloseElement(); - @endverbatim -*/ -class TINYXML2_LIB XMLPrinter : public XMLVisitor -{ -public: - /** Construct the printer. If the FILE* is specified, - this will print to the FILE. Else it will print - to memory, and the result is available in CStr(). - If 'compact' is set to true, then output is created - with only required whitespace and newlines. - */ - XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 ); - virtual ~XMLPrinter() {} - - /** If streaming, write the BOM and declaration. */ - void PushHeader( bool writeBOM, bool writeDeclaration ); - /** If streaming, start writing an element. - The element must be closed with CloseElement() - */ - void OpenElement( const char* name, bool compactMode=false ); - /// If streaming, add an attribute to an open element. - void PushAttribute( const char* name, const char* value ); - void PushAttribute( const char* name, int value ); - void PushAttribute( const char* name, unsigned value ); - void PushAttribute( const char* name, int64_t value ); - void PushAttribute( const char* name, uint64_t value ); - void PushAttribute( const char* name, bool value ); - void PushAttribute( const char* name, double value ); - /// If streaming, close the Element. - virtual void CloseElement( bool compactMode=false ); - - /// Add a text node. - void PushText( const char* text, bool cdata=false ); - /// Add a text node from an integer. - void PushText( int value ); - /// Add a text node from an unsigned. - void PushText( unsigned value ); - /// Add a text node from a signed 64bit integer. - void PushText( int64_t value ); - /// Add a text node from an unsigned 64bit integer. - void PushText( uint64_t value ); - /// Add a text node from a bool. - void PushText( bool value ); - /// Add a text node from a float. - void PushText( float value ); - /// Add a text node from a double. - void PushText( double value ); - - /// Add a comment - void PushComment( const char* comment ); - - void PushDeclaration( const char* value ); - void PushUnknown( const char* value ); - - virtual bool VisitEnter( const XMLDocument& /*doc*/ ); - virtual bool VisitExit( const XMLDocument& /*doc*/ ) { - return true; - } - - virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute ); - virtual bool VisitExit( const XMLElement& element ); - - virtual bool Visit( const XMLText& text ); - virtual bool Visit( const XMLComment& comment ); - virtual bool Visit( const XMLDeclaration& declaration ); - virtual bool Visit( const XMLUnknown& unknown ); - - /** - If in print to memory mode, return a pointer to - the XML file in memory. - */ - const char* CStr() const { - return _buffer.Mem(); - } - /** - If in print to memory mode, return the size - of the XML file in memory. (Note the size returned - includes the terminating null.) - */ - int CStrSize() const { - return _buffer.Size(); - } - /** - If in print to memory mode, reset the buffer to the - beginning. - */ - void ClearBuffer( bool resetToFirstElement = true ) { - _buffer.Clear(); - _buffer.Push(0); - _firstElement = resetToFirstElement; - } - -protected: - virtual bool CompactMode( const XMLElement& ) { return _compactMode; } - - /** Prints out the space before an element. You may override to change - the space and tabs used. A PrintSpace() override should call Print(). - */ - virtual void PrintSpace( int depth ); - virtual void Print( const char* format, ... ); - virtual void Write( const char* data, size_t size ); - virtual void Putc( char ch ); - - inline void Write(const char* data) { Write(data, strlen(data)); } - - void SealElementIfJustOpened(); - bool _elementJustOpened; - DynArray< const char*, 10 > _stack; - -private: - /** - Prepares to write a new node. This includes sealing an element that was - just opened, and writing any whitespace necessary if not in compact mode. - */ - void PrepareForNewNode( bool compactMode ); - void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities. - - bool _firstElement; - FILE* _fp; - int _depth; - int _textDepth; - bool _processEntities; - bool _compactMode; - - enum { - ENTITY_RANGE = 64, - BUF_SIZE = 200 - }; - bool _entityFlag[ENTITY_RANGE]; - bool _restrictedEntityFlag[ENTITY_RANGE]; - - DynArray< char, 20 > _buffer; - - // Prohibit cloning, intentionally not implemented - XMLPrinter( const XMLPrinter& ); - XMLPrinter& operator=( const XMLPrinter& ); -}; - - -} // tinyxml2 - -#if defined(_MSC_VER) -# pragma warning(pop) -#endif - -#endif // TINYXML2_INCLUDED diff --git a/modules/skybrowser/include/screenspaceskybrowser.h b/modules/skybrowser/include/screenspaceskybrowser.h index 2c96e2574f..e2feeebe63 100644 --- a/modules/skybrowser/include/screenspaceskybrowser.h +++ b/modules/skybrowser/include/screenspaceskybrowser.h @@ -75,7 +75,6 @@ private: void bindTexture() override; // Flags - bool _isSyncedWithWwt = false; bool _isInitialized = false; bool _radiusIsDirty = false; int _borderRadiusTimer = -1; diff --git a/modules/skybrowser/include/wwtcommunicator.h b/modules/skybrowser/include/wwtcommunicator.h index 2ab394f598..b7e26c040f 100644 --- a/modules/skybrowser/include/wwtcommunicator.h +++ b/modules/skybrowser/include/wwtcommunicator.h @@ -43,7 +43,7 @@ public: void selectImage(const std::string& url, int i); void addImageLayerToWwt(const std::string& url, int i); void removeSelectedImage(int i); - void setImageOrder(int i, int order); + void setImageOrder(int image, int order); void loadImageCollection(const std::string& collection); void setImageOpacity(int i, float opacity); void hideChromeInterface() const; diff --git a/modules/skybrowser/skybrowsermodule.cpp b/modules/skybrowser/skybrowsermodule.cpp index bcbcd191a9..55f6c41cc0 100644 --- a/modules/skybrowser/skybrowsermodule.cpp +++ b/modules/skybrowser/skybrowsermodule.cpp @@ -182,7 +182,7 @@ SkyBrowserModule::SkyBrowserModule() // Set callback functions global::callback::mouseButton->emplace( global::callback::mouseButton->begin(), - [&](MouseButton button, MouseAction action, KeyModifier, IsGuiWindow) -> bool { + [&](MouseButton, MouseAction action, KeyModifier, IsGuiWindow) -> bool { if (action == MouseAction::Press) { _cameraRotation.stop(); } diff --git a/modules/skybrowser/src/screenspaceskybrowser.cpp b/modules/skybrowser/src/screenspaceskybrowser.cpp index 7b76684f3e..2fc5e59a42 100644 --- a/modules/skybrowser/src/screenspaceskybrowser.cpp +++ b/modules/skybrowser/src/screenspaceskybrowser.cpp @@ -187,7 +187,7 @@ void ScreenSpaceSkyBrowser::setIsInitialized(bool isInitialized) { void ScreenSpaceSkyBrowser::updateTextureResolution() { // Check if texture quality has changed. If it has, adjust accordingly - if (abs(_textureQuality.value() - _lastTextureQuality) > glm::epsilon()) { + if (std::abs(_textureQuality.value() - _lastTextureQuality) > glm::epsilon()) { float diffTextureQuality = _textureQuality / _lastTextureQuality; glm::vec2 newRes = glm::vec2(_browserDimensions.value()) * diffTextureQuality; _browserDimensions = glm::ivec2(newRes); diff --git a/modules/skybrowser/src/targetbrowserpair.cpp b/modules/skybrowser/src/targetbrowserpair.cpp index 8b63b54ec9..01542b8f40 100644 --- a/modules/skybrowser/src/targetbrowserpair.cpp +++ b/modules/skybrowser/src/targetbrowserpair.cpp @@ -319,7 +319,7 @@ void TargetBrowserPair::startAnimation(glm::dvec3 galacticCoords, double fovEnd) SkyBrowserModule* module = global::moduleEngine->module(); double fovSpeed = module->browserAnimationSpeed(); // The speed is given degrees /sec - double fovTime = abs(_browser->verticalFov() - fovEnd) / fovSpeed; + double fovTime = std::abs(_browser->verticalFov() - fovEnd) / fovSpeed; // Fov animation _fovAnimation = skybrowser::Animation(_browser->verticalFov(), fovEnd, fovTime); diff --git a/modules/skybrowser/src/utility.cpp b/modules/skybrowser/src/utility.cpp index 53e3c1a1f5..e6c276a48a 100644 --- a/modules/skybrowser/src/utility.cpp +++ b/modules/skybrowser/src/utility.cpp @@ -170,7 +170,9 @@ bool isCoordinateInView(const glm::dvec3& equatorial) { double r = windowRatio(); bool isCoordInView = - abs(coordsScreen.x) < r && abs(coordsScreen.y) < 1.f && coordsScreen.z < 0.f; + std::abs(coordsScreen.x) < r && + std::abs(coordsScreen.y) < 1.f && + coordsScreen.z < 0.f; return isCoordInView; } diff --git a/modules/skybrowser/src/wwtcommunicator.cpp b/modules/skybrowser/src/wwtcommunicator.cpp index 00b0d503c8..6fd099b2d5 100644 --- a/modules/skybrowser/src/wwtcommunicator.cpp +++ b/modules/skybrowser/src/wwtcommunicator.cpp @@ -290,11 +290,10 @@ glm::dvec2 WwtCommunicator::equatorialAim() const { return _equatorialAim; } -void WwtCommunicator::setImageOrder(int i, int order) { +void WwtCommunicator::setImageOrder(int image, int order) { // Find in selected images list - auto current = findSelectedImage(i); - int currentIndex = std::distance(_selectedImages.begin(), current); - int difference = order - currentIndex; + auto current = findSelectedImage(image); + int currentIndex = static_cast(std::distance(_selectedImages.begin(), current)); std::deque> newDeque; @@ -319,7 +318,7 @@ void WwtCommunicator::setImageOrder(int i, int order) { _selectedImages = newDeque; int reverseOrder = static_cast(_selectedImages.size()) - order - 1; - ghoul::Dictionary message = setLayerOrderMessage(std::to_string(i), reverseOrder); + ghoul::Dictionary message = setLayerOrderMessage(std::to_string(image), reverseOrder); sendMessageToWwt(message); } diff --git a/modules/skybrowser/src/wwtdatahandler.cpp b/modules/skybrowser/src/wwtdatahandler.cpp index a4394f06ed..916ca88ab5 100644 --- a/modules/skybrowser/src/wwtdatahandler.cpp +++ b/modules/skybrowser/src/wwtdatahandler.cpp @@ -28,18 +28,7 @@ #include #include #include - -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wsuggest-override" -#pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" -#endif - -#include - -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif +#include namespace { constexpr std::string_view _loggerCat = "WwtDataHandler"; diff --git a/modules/space/CMakeLists.txt b/modules/space/CMakeLists.txt index 46f8df42ed..1c5295ce21 100644 --- a/modules/space/CMakeLists.txt +++ b/modules/space/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES horizonsfile.h diff --git a/modules/space/labelscomponent.cpp b/modules/space/labelscomponent.cpp index 973c575ba3..25fa08aee6 100644 --- a/modules/space/labelscomponent.cpp +++ b/modules/space/labelscomponent.cpp @@ -45,12 +45,6 @@ namespace { "The speck label file with the data for the labels" }; - constexpr openspace::properties::Property::PropertyInfo UnitInfo = { - "Unit", - "Unit", - "Distance unit for the label data" - }; - constexpr openspace::properties::Property::PropertyInfo OpacityInfo = { "Opacity", "Opacity", diff --git a/modules/space/rendering/renderableconstellationlines.cpp b/modules/space/rendering/renderableconstellationlines.cpp index 2efe096ab1..f2d8a64b85 100644 --- a/modules/space/rendering/renderableconstellationlines.cpp +++ b/modules/space/rendering/renderableconstellationlines.cpp @@ -103,8 +103,8 @@ documentation::Documentation RenderableConstellationLines::Documentation() { RenderableConstellationLines::RenderableConstellationLines( const ghoul::Dictionary& dictionary) : RenderableConstellationsBase(dictionary) - , _speckFile(SpeckInfo) , _drawElements(DrawElementsInfo, true) + , _speckFile(SpeckInfo) { const Parameters p = codegen::bake(dictionary); @@ -382,7 +382,6 @@ bool RenderableConstellationLines::readSpeckFile() { // Try to read three values for the position glm::vec3 pos; - bool success = true; auto reading = scn::scan(line, "{} {} {}", pos.x, pos.y, pos.z); if (reading) { pos *= scale; @@ -391,7 +390,6 @@ bool RenderableConstellationLines::readSpeckFile() { constellationLine.vertices.push_back(pos.z); } else { - success = false; LERROR(fmt::format( "Failed reading position on line {} of mesh {} in file: '{}'. " "Stopped reading constellation data", l, lineIndex, fileName diff --git a/modules/space/rendering/renderableconstellationsbase.cpp b/modules/space/rendering/renderableconstellationsbase.cpp index f782b8f3df..f6d5d87d16 100644 --- a/modules/space/rendering/renderableconstellationsbase.cpp +++ b/modules/space/rendering/renderableconstellationsbase.cpp @@ -98,10 +98,10 @@ documentation::Documentation RenderableConstellationsBase::Documentation() { RenderableConstellationsBase::RenderableConstellationsBase( const ghoul::Dictionary& dictionary) : Renderable(dictionary) - , _drawLabels(DrawLabelInfo, false) , _lineWidth(LineWidthInfo, 2.f, 1.f, 16.f) - , _namesFilename(NamesFileInfo) , _selection(SelectionInfo) + , _drawLabels(DrawLabelInfo, false) + , _namesFilename(NamesFileInfo) { const Parameters p = codegen::bake(dictionary); @@ -188,7 +188,7 @@ void RenderableConstellationsBase::loadConstellationFile() { } void RenderableConstellationsBase::fillSelectionProperty() { - for (const std::pair& pair : _namesTranslation) { + for (const std::pair& pair : _namesTranslation) { _selection.addOption(pair.second); } } diff --git a/modules/space/rendering/renderableorbitalkepler.cpp b/modules/space/rendering/renderableorbitalkepler.cpp index 6bde01ef0e..1fc6416164 100644 --- a/modules/space/rendering/renderableorbitalkepler.cpp +++ b/modules/space/rendering/renderableorbitalkepler.cpp @@ -304,7 +304,7 @@ void RenderableOrbitalKepler::updateBuffers() { _numObjects = parameters.size(); - if (_startRenderIdx < 0 || _startRenderIdx >= _numObjects) { + if (_startRenderIdx >= _numObjects) { throw ghoul::RuntimeError(fmt::format( "Start index {} out of range [0, {}]", _startRenderIdx, _numObjects )); diff --git a/modules/space/rendering/renderableorbitalkepler.h b/modules/space/rendering/renderableorbitalkepler.h index f6d51752a1..42e1e59bfc 100644 --- a/modules/space/rendering/renderableorbitalkepler.h +++ b/modules/space/rendering/renderableorbitalkepler.h @@ -57,7 +57,6 @@ private: void updateBuffers(); bool _updateDataBuffersAtNextRender = false; - bool _isFileReadinitialized = false; std::streamoff _numObjects; std::vector _segmentSize; properties::UIntProperty _segmentQuality; diff --git a/modules/space/translation/gptranslation.cpp b/modules/space/translation/gptranslation.cpp index e6395f7a90..1133627ee8 100644 --- a/modules/space/translation/gptranslation.cpp +++ b/modules/space/translation/gptranslation.cpp @@ -70,7 +70,7 @@ GPTranslation::GPTranslation(const ghoul::Dictionary& dictionary) { p.file, codegen::map(p.format) ); - if (parameters.size() < element) { + if (element >= static_cast(parameters.size())) { throw ghoul::RuntimeError(fmt::format( "Requested element {} but only {} are available", element, parameters.size() )); diff --git a/modules/spacecraftinstruments/CMakeLists.txt b/modules/spacecraftinstruments/CMakeLists.txt index fe1b84716a..a45da7f0fc 100644 --- a/modules/spacecraftinstruments/CMakeLists.txt +++ b/modules/spacecraftinstruments/CMakeLists.txt @@ -22,9 +22,9 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) -set(HEADER_FILES +set(HEADER_FILES dashboard/dashboarditeminstruments.h rendering/renderablecrawlingline.h rendering/renderablefov.h diff --git a/modules/spacecraftinstruments/rendering/renderableplanetprojection.cpp b/modules/spacecraftinstruments/rendering/renderableplanetprojection.cpp index bd4730c157..4aad6ce2a9 100644 --- a/modules/spacecraftinstruments/rendering/renderableplanetprojection.cpp +++ b/modules/spacecraftinstruments/rendering/renderableplanetprojection.cpp @@ -39,8 +39,6 @@ #include namespace { - constexpr std::string_view _loggerCat = "RenderablePlanetProjection"; - constexpr std::array MainUniformNames = { "sun_pos", "modelTransform", "modelViewProjectionTransform", "hasBaseMap", "hasHeightMap", "heightExaggeration", "meridianShift", "ambientBrightness", @@ -52,7 +50,6 @@ namespace { "boresight", "radius", "segments" }; - constexpr std::string_view KeyRadius = "Geometry.Radius"; constexpr std::string_view NoImageText = "No Image"; constexpr openspace::properties::Property::PropertyInfo ColorTexturePathsInfo = { diff --git a/modules/spout/CMakeLists.txt b/modules/spout/CMakeLists.txt index 8874b449a4..8cbb806213 100644 --- a/modules/spout/CMakeLists.txt +++ b/modules/spout/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES renderableplanespout.h diff --git a/modules/statemachine/CMakeLists.txt b/modules/statemachine/CMakeLists.txt index 36c3ea6b87..55b3d8aa31 100644 --- a/modules/statemachine/CMakeLists.txt +++ b/modules/statemachine/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/state.h diff --git a/modules/sync/CMakeLists.txt b/modules/sync/CMakeLists.txt index c3341a2057..fd88a89ebb 100644 --- a/modules/sync/CMakeLists.txt +++ b/modules/sync/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES syncmodule.h diff --git a/modules/touch/CMakeLists.txt b/modules/touch/CMakeLists.txt index 0c0d8dca37..778c756fda 100644 --- a/modules/touch/CMakeLists.txt +++ b/modules/touch/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES ext/levmarq.h @@ -57,5 +57,6 @@ create_new_module( ${HEADER_FILES} ${SOURCE_FILES} ${SHADER_FILES} ) -include_external_library(${touch_module} PRIVATE libTUIO11 ${CMAKE_CURRENT_SOURCE_DIR}/ext) -disable_external_warnings_for_file(${CMAKE_CURRENT_SOURCE_DIR}/ext/levmarq.cpp) +add_subdirectory(ext SYSTEM) +target_link_libraries(${touch_module} PRIVATE libTUIO11) +set_target_properties(libTUIO11 PROPERTIES FOLDER "External") diff --git a/modules/toyvolume/CMakeLists.txt b/modules/toyvolume/CMakeLists.txt index b1ee1f7bde..03ab3be8c4 100644 --- a/modules/toyvolume/CMakeLists.txt +++ b/modules/toyvolume/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES rendering/renderabletoyvolume.h diff --git a/modules/vislab/CMakeLists.txt b/modules/vislab/CMakeLists.txt index dacf117beb..05e583dfb5 100644 --- a/modules/vislab/CMakeLists.txt +++ b/modules/vislab/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES rendering/renderabledistancelabel.h diff --git a/modules/volume/CMakeLists.txt b/modules/volume/CMakeLists.txt index 2486bfcb83..782f19a0a5 100644 --- a/modules/volume/CMakeLists.txt +++ b/modules/volume/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) set(HEADER_FILES envelope.h diff --git a/modules/webbrowser/CMakeLists.txt b/modules/webbrowser/CMakeLists.txt index f165745009..46cf185070 100644 --- a/modules/webbrowser/CMakeLists.txt +++ b/modules/webbrowser/CMakeLists.txt @@ -22,10 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -cmake_minimum_required(VERSION 3.12 FATAL_ERROR) - -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) -include(${GHOUL_BASE_DIR}/support/cmake/handle_external_library.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) include(cmake/webbrowser_helpers.cmake) set(WEBBROWSER_MODULE_NAME WebBrowser) @@ -90,14 +87,11 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CEF_ROOT}/cmake") find_package(CEF REQUIRED) # Include the libcef_dll_wrapper target (executes libcef_dll/CMakeLists.txt). -add_subdirectory(${CEF_LIBCEF_DLL_WRAPPER_PATH} libcef_dll_wrapper) +add_subdirectory(${CEF_LIBCEF_DLL_WRAPPER_PATH} libcef_dll_wrapper SYSTEM) mark_as_advanced(CEF_DEBUG_INFO_FLAG USE_ATL USE_OFFICIAL_BUILD_SANDBOX USE_SANDBOX) -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - # The CEF DLL wrapper is raising a lot of warnings on GCC - target_compile_options(libcef_dll_wrapper PRIVATE "-w") -endif () +target_compile_options(libcef_dll_wrapper PRIVATE "-w") target_precompile_headers(libcef_dll_wrapper PRIVATE [["include/cef_client.h"]] @@ -266,8 +260,7 @@ target_precompile_headers(${webbrowser_module} PRIVATE ) -set_folder_location(libcef_dll_wrapper "Helper") -set_folder_location(openspace_web_helper "Helper") +set_target_properties(libcef_dll_wrapper PROPERTIES FOLDER "Helper") # Display CEF configuration settings. # PRINT_CEF_CONFIG() diff --git a/modules/webbrowser/src/eventhandler.cpp b/modules/webbrowser/src/eventhandler.cpp index 5d81cb3295..ab174007b4 100644 --- a/modules/webbrowser/src/eventhandler.cpp +++ b/modules/webbrowser/src/eventhandler.cpp @@ -373,8 +373,8 @@ bool EventHandler::isDoubleClick(const MouseButtonState& button) const { // check position const float maxDist = maxDoubleClickDistance() / 2.f; - const bool x = abs(_mousePosition.x - button.lastClickPosition.x) < maxDist; - const bool y = abs(_mousePosition.y - button.lastClickPosition.y) < maxDist; + const bool x = std::abs(_mousePosition.x - button.lastClickPosition.x) < maxDist; + const bool y = std::abs(_mousePosition.y - button.lastClickPosition.y) < maxDist; return x && y; } diff --git a/modules/webgui/CMakeLists.txt b/modules/webgui/CMakeLists.txt index efe6fce462..94b5a7c2cd 100644 --- a/modules/webgui/CMakeLists.txt +++ b/modules/webgui/CMakeLists.txt @@ -22,7 +22,7 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_definition.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) include(../webbrowser/cmake/webbrowser_helpers.cmake) set(WEBGUI_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "WEBGUI_MODULE_PATH") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a459b29ed0..4c8d61a145 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,378 +22,378 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/set_openspace_compile_settings.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/set_openspace_compile_settings.cmake) set(OPENSPACE_SOURCE - ${OPENSPACE_BASE_DIR}/src/openspace.cpp - ${OPENSPACE_BASE_DIR}/src/camera/camera.cpp - ${OPENSPACE_BASE_DIR}/src/documentation/core_registration.cpp - ${OPENSPACE_BASE_DIR}/src/documentation/documentation.cpp - ${OPENSPACE_BASE_DIR}/src/documentation/documentationengine.cpp - ${OPENSPACE_BASE_DIR}/src/documentation/documentationgenerator.cpp - ${OPENSPACE_BASE_DIR}/src/documentation/verifier.cpp - ${OPENSPACE_BASE_DIR}/src/engine/configuration.cpp - ${OPENSPACE_BASE_DIR}/src/engine/downloadmanager.cpp - ${OPENSPACE_BASE_DIR}/src/engine/globals.cpp - ${OPENSPACE_BASE_DIR}/src/engine/globalscallbacks.cpp - ${OPENSPACE_BASE_DIR}/src/engine/logfactory.cpp - ${OPENSPACE_BASE_DIR}/src/engine/moduleengine.cpp - ${OPENSPACE_BASE_DIR}/src/engine/moduleengine_lua.inl - ${OPENSPACE_BASE_DIR}/src/engine/openspaceengine.cpp - ${OPENSPACE_BASE_DIR}/src/engine/openspaceengine_lua.inl - ${OPENSPACE_BASE_DIR}/src/engine/syncengine.cpp - ${OPENSPACE_BASE_DIR}/src/events/event.cpp - ${OPENSPACE_BASE_DIR}/src/events/eventengine.cpp - ${OPENSPACE_BASE_DIR}/src/events/eventengine_lua.inl - ${OPENSPACE_BASE_DIR}/src/interaction/actionmanager.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/actionmanager_lua.inl - ${OPENSPACE_BASE_DIR}/src/interaction/camerainteractionstates.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/interactionmonitor.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/mouseinputstate.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/joystickinputstate.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/joystickcamerastates.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/keybindingmanager.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/keybindingmanager_lua.inl - ${OPENSPACE_BASE_DIR}/src/interaction/keyboardinputstate.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/mousecamerastates.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/scriptcamerastates.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/sessionrecording.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/sessionrecording_lua.inl - ${OPENSPACE_BASE_DIR}/src/interaction/websocketinputstate.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/websocketcamerastates.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/tasks/convertrecfileversiontask.cpp - ${OPENSPACE_BASE_DIR}/src/interaction/tasks/convertrecformattask.cpp - ${OPENSPACE_BASE_DIR}/src/mission/mission.cpp - ${OPENSPACE_BASE_DIR}/src/mission/missionmanager.cpp - ${OPENSPACE_BASE_DIR}/src/mission/missionmanager_lua.inl - ${OPENSPACE_BASE_DIR}/src/navigation/pathcurves/avoidcollisioncurve.cpp - ${OPENSPACE_BASE_DIR}/src/navigation/pathcurves/zoomoutoverviewcurve.cpp - ${OPENSPACE_BASE_DIR}/src/navigation/keyframenavigator.cpp - ${OPENSPACE_BASE_DIR}/src/navigation/navigationhandler.cpp - ${OPENSPACE_BASE_DIR}/src/navigation/navigationhandler_lua.inl - ${OPENSPACE_BASE_DIR}/src/navigation/navigationstate.cpp - ${OPENSPACE_BASE_DIR}/src/navigation/orbitalnavigator.cpp - ${OPENSPACE_BASE_DIR}/src/navigation/path.cpp - ${OPENSPACE_BASE_DIR}/src/navigation/pathcurve.cpp - ${OPENSPACE_BASE_DIR}/src/navigation/pathnavigator.cpp - ${OPENSPACE_BASE_DIR}/src/navigation/pathnavigator_lua.inl - ${OPENSPACE_BASE_DIR}/src/navigation/waypoint.cpp - ${OPENSPACE_BASE_DIR}/src/network/messagestructureshelper.cpp - ${OPENSPACE_BASE_DIR}/src/network/parallelconnection.cpp - ${OPENSPACE_BASE_DIR}/src/network/parallelpeer.cpp - ${OPENSPACE_BASE_DIR}/src/network/parallelpeer_lua.inl - ${OPENSPACE_BASE_DIR}/src/properties/optionproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/propertyowner.cpp - ${OPENSPACE_BASE_DIR}/src/properties/selectionproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/stringproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/triggerproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/list/doublelistproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/list/intlistproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/list/stringlistproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/matrix/dmat2property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/matrix/dmat3property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/matrix/dmat4property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/matrix/mat2property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/matrix/mat3property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/matrix/mat4property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/scalar/boolproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/scalar/doubleproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/scalar/floatproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/scalar/intproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/scalar/longproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/scalar/shortproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/scalar/uintproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/scalar/ulongproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/scalar/ushortproperty.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/dvec2property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/dvec3property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/dvec4property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/ivec2property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/ivec3property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/ivec4property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/uvec2property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/uvec3property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/uvec4property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/vec2property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/vec3property.cpp - ${OPENSPACE_BASE_DIR}/src/properties/vector/vec4property.cpp - ${OPENSPACE_BASE_DIR}/src/query/query.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/dashboard.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/dashboard_lua.inl - ${OPENSPACE_BASE_DIR}/src/rendering/dashboarditem.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/dashboardtextitem.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/framebufferrenderer.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/deferredcastermanager.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/helper.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/loadingscreen.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/luaconsole.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/raycastermanager.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/renderable.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/renderengine.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/renderengine_lua.inl - ${OPENSPACE_BASE_DIR}/src/rendering/screenspacerenderable.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/texturecomponent.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/transferfunction.cpp - ${OPENSPACE_BASE_DIR}/src/rendering/volumeraycaster.cpp - ${OPENSPACE_BASE_DIR}/src/scene/asset.cpp - ${OPENSPACE_BASE_DIR}/src/scene/assetmanager.cpp - ${OPENSPACE_BASE_DIR}/src/scene/assetmanager_lua.inl - ${OPENSPACE_BASE_DIR}/src/scene/lightsource.cpp - ${OPENSPACE_BASE_DIR}/src/scene/profile.cpp - ${OPENSPACE_BASE_DIR}/src/scene/profile_lua.inl - ${OPENSPACE_BASE_DIR}/src/scene/rotation.cpp - ${OPENSPACE_BASE_DIR}/src/scene/scale.cpp - ${OPENSPACE_BASE_DIR}/src/scene/scene.cpp - ${OPENSPACE_BASE_DIR}/src/scene/scene_lua.inl - ${OPENSPACE_BASE_DIR}/src/scene/sceneinitializer.cpp - ${OPENSPACE_BASE_DIR}/src/scene/scenelicensewriter.cpp - ${OPENSPACE_BASE_DIR}/src/scene/scenegraphnode.cpp - ${OPENSPACE_BASE_DIR}/src/scene/timeframe.cpp - ${OPENSPACE_BASE_DIR}/src/scene/translation.cpp - ${OPENSPACE_BASE_DIR}/src/scripting/lualibrary.cpp - ${OPENSPACE_BASE_DIR}/src/scripting/scriptengine.cpp - ${OPENSPACE_BASE_DIR}/src/scripting/scriptengine_lua.inl - ${OPENSPACE_BASE_DIR}/src/scripting/scriptscheduler.cpp - ${OPENSPACE_BASE_DIR}/src/scripting/scriptscheduler_lua.inl - ${OPENSPACE_BASE_DIR}/src/scripting/systemcapabilitiesbinding.cpp - ${OPENSPACE_BASE_DIR}/src/scripting/systemcapabilitiesbinding_lua.inl - ${OPENSPACE_BASE_DIR}/src/util/blockplaneintersectiongeometry.cpp - ${OPENSPACE_BASE_DIR}/src/util/boxgeometry.cpp - ${OPENSPACE_BASE_DIR}/src/util/collisionhelper.cpp - ${OPENSPACE_BASE_DIR}/src/util/coordinateconversion.cpp - ${OPENSPACE_BASE_DIR}/src/util/distanceconversion.cpp - ${OPENSPACE_BASE_DIR}/src/util/factorymanager.cpp - ${OPENSPACE_BASE_DIR}/src/util/httprequest.cpp - ${OPENSPACE_BASE_DIR}/src/util/json_helper.cpp - ${OPENSPACE_BASE_DIR}/src/util/keys.cpp - ${OPENSPACE_BASE_DIR}/src/util/openspacemodule.cpp - ${OPENSPACE_BASE_DIR}/src/util/planegeometry.cpp - ${OPENSPACE_BASE_DIR}/src/util/progressbar.cpp - ${OPENSPACE_BASE_DIR}/src/util/resourcesynchronization.cpp - ${OPENSPACE_BASE_DIR}/src/util/screenlog.cpp - ${OPENSPACE_BASE_DIR}/src/util/sphere.cpp - ${OPENSPACE_BASE_DIR}/src/util/spicemanager.cpp - ${OPENSPACE_BASE_DIR}/src/util/spicemanager_lua.inl - ${OPENSPACE_BASE_DIR}/src/util/syncbuffer.cpp - ${OPENSPACE_BASE_DIR}/src/util/tstring.cpp - ${OPENSPACE_BASE_DIR}/src/util/histogram.cpp - ${OPENSPACE_BASE_DIR}/src/util/task.cpp - ${OPENSPACE_BASE_DIR}/src/util/taskloader.cpp - ${OPENSPACE_BASE_DIR}/src/util/threadpool.cpp - ${OPENSPACE_BASE_DIR}/src/util/time.cpp - ${OPENSPACE_BASE_DIR}/src/util/timeconversion.cpp - ${OPENSPACE_BASE_DIR}/src/util/timeline.cpp - ${OPENSPACE_BASE_DIR}/src/util/timemanager.cpp - ${OPENSPACE_BASE_DIR}/src/util/time_lua.inl - ${OPENSPACE_BASE_DIR}/src/util/timerange.cpp - ${OPENSPACE_BASE_DIR}/src/util/touch.cpp - ${OPENSPACE_BASE_DIR}/src/util/transformationmanager.cpp - ${OPENSPACE_BASE_DIR}/src/util/universalhelpers.cpp - ${OPENSPACE_BASE_DIR}/src/util/versionchecker.cpp + openspace.cpp + camera/camera.cpp + documentation/core_registration.cpp + documentation/documentation.cpp + documentation/documentationengine.cpp + documentation/documentationgenerator.cpp + documentation/verifier.cpp + engine/configuration.cpp + engine/downloadmanager.cpp + engine/globals.cpp + engine/globalscallbacks.cpp + engine/logfactory.cpp + engine/moduleengine.cpp + engine/moduleengine_lua.inl + engine/openspaceengine.cpp + engine/openspaceengine_lua.inl + engine/syncengine.cpp + events/event.cpp + events/eventengine.cpp + events/eventengine_lua.inl + interaction/actionmanager.cpp + interaction/actionmanager_lua.inl + interaction/camerainteractionstates.cpp + interaction/interactionmonitor.cpp + interaction/mouseinputstate.cpp + interaction/joystickinputstate.cpp + interaction/joystickcamerastates.cpp + interaction/keybindingmanager.cpp + interaction/keybindingmanager_lua.inl + interaction/keyboardinputstate.cpp + interaction/mousecamerastates.cpp + interaction/scriptcamerastates.cpp + interaction/sessionrecording.cpp + interaction/sessionrecording_lua.inl + interaction/websocketinputstate.cpp + interaction/websocketcamerastates.cpp + interaction/tasks/convertrecfileversiontask.cpp + interaction/tasks/convertrecformattask.cpp + mission/mission.cpp + mission/missionmanager.cpp + mission/missionmanager_lua.inl + navigation/pathcurves/avoidcollisioncurve.cpp + navigation/pathcurves/zoomoutoverviewcurve.cpp + navigation/keyframenavigator.cpp + navigation/navigationhandler.cpp + navigation/navigationhandler_lua.inl + navigation/navigationstate.cpp + navigation/orbitalnavigator.cpp + navigation/path.cpp + navigation/pathcurve.cpp + navigation/pathnavigator.cpp + navigation/pathnavigator_lua.inl + navigation/waypoint.cpp + network/messagestructureshelper.cpp + network/parallelconnection.cpp + network/parallelpeer.cpp + network/parallelpeer_lua.inl + properties/optionproperty.cpp + properties/property.cpp + properties/propertyowner.cpp + properties/selectionproperty.cpp + properties/stringproperty.cpp + properties/triggerproperty.cpp + properties/list/doublelistproperty.cpp + properties/list/intlistproperty.cpp + properties/list/stringlistproperty.cpp + properties/matrix/dmat2property.cpp + properties/matrix/dmat3property.cpp + properties/matrix/dmat4property.cpp + properties/matrix/mat2property.cpp + properties/matrix/mat3property.cpp + properties/matrix/mat4property.cpp + properties/scalar/boolproperty.cpp + properties/scalar/doubleproperty.cpp + properties/scalar/floatproperty.cpp + properties/scalar/intproperty.cpp + properties/scalar/longproperty.cpp + properties/scalar/shortproperty.cpp + properties/scalar/uintproperty.cpp + properties/scalar/ulongproperty.cpp + properties/scalar/ushortproperty.cpp + properties/vector/dvec2property.cpp + properties/vector/dvec3property.cpp + properties/vector/dvec4property.cpp + properties/vector/ivec2property.cpp + properties/vector/ivec3property.cpp + properties/vector/ivec4property.cpp + properties/vector/uvec2property.cpp + properties/vector/uvec3property.cpp + properties/vector/uvec4property.cpp + properties/vector/vec2property.cpp + properties/vector/vec3property.cpp + properties/vector/vec4property.cpp + query/query.cpp + rendering/dashboard.cpp + rendering/dashboard_lua.inl + rendering/dashboarditem.cpp + rendering/dashboardtextitem.cpp + rendering/framebufferrenderer.cpp + rendering/deferredcastermanager.cpp + rendering/helper.cpp + rendering/loadingscreen.cpp + rendering/luaconsole.cpp + rendering/raycastermanager.cpp + rendering/renderable.cpp + rendering/renderengine.cpp + rendering/renderengine_lua.inl + rendering/screenspacerenderable.cpp + rendering/texturecomponent.cpp + rendering/transferfunction.cpp + rendering/volumeraycaster.cpp + scene/asset.cpp + scene/assetmanager.cpp + scene/assetmanager_lua.inl + scene/lightsource.cpp + scene/profile.cpp + scene/profile_lua.inl + scene/rotation.cpp + scene/scale.cpp + scene/scene.cpp + scene/scene_lua.inl + scene/sceneinitializer.cpp + scene/scenelicensewriter.cpp + scene/scenegraphnode.cpp + scene/timeframe.cpp + scene/translation.cpp + scripting/lualibrary.cpp + scripting/scriptengine.cpp + scripting/scriptengine_lua.inl + scripting/scriptscheduler.cpp + scripting/scriptscheduler_lua.inl + scripting/systemcapabilitiesbinding.cpp + scripting/systemcapabilitiesbinding_lua.inl + util/blockplaneintersectiongeometry.cpp + util/boxgeometry.cpp + util/collisionhelper.cpp + util/coordinateconversion.cpp + util/distanceconversion.cpp + util/factorymanager.cpp + util/httprequest.cpp + util/json_helper.cpp + util/keys.cpp + util/openspacemodule.cpp + util/planegeometry.cpp + util/progressbar.cpp + util/resourcesynchronization.cpp + util/screenlog.cpp + util/sphere.cpp + util/spicemanager.cpp + util/spicemanager_lua.inl + util/syncbuffer.cpp + util/tstring.cpp + util/histogram.cpp + util/task.cpp + util/taskloader.cpp + util/threadpool.cpp + util/time.cpp + util/timeconversion.cpp + util/timeline.cpp + util/timemanager.cpp + util/time_lua.inl + util/timerange.cpp + util/touch.cpp + util/transformationmanager.cpp + util/universalhelpers.cpp + util/versionchecker.cpp ) if (APPLE) set(OPENSPACE_SOURCE ${OPENSPACE_SOURCE} - ${OPENSPACE_BASE_DIR}/src/interaction/touchbar.mm + interaction/touchbar.mm ) set_source_files_properties( - ${OPENSPACE_BASE_DIR}/src/interaction/touchbar.mm + interaction/touchbar.mm PROPERTIES SKIP_PRECOMPILE_HEADERS ON ) endif () set(OPENSPACE_HEADER - ${OPENSPACE_BASE_DIR}/include/openspace/json.h - ${OPENSPACE_BASE_DIR}/include/openspace/camera/camera.h - ${OPENSPACE_BASE_DIR}/include/openspace/camera/camerapose.h - ${OPENSPACE_BASE_DIR}/include/openspace/documentation/core_registration.h - ${OPENSPACE_BASE_DIR}/include/openspace/documentation/documentation.h - ${OPENSPACE_BASE_DIR}/include/openspace/documentation/documentationengine.h - ${OPENSPACE_BASE_DIR}/include/openspace/documentation/documentationgenerator.h - ${OPENSPACE_BASE_DIR}/include/openspace/documentation/verifier.h - ${OPENSPACE_BASE_DIR}/include/openspace/documentation/verifier.inl - ${OPENSPACE_BASE_DIR}/include/openspace/engine/configuration.h - ${OPENSPACE_BASE_DIR}/include/openspace/engine/downloadmanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/engine/globals.h - ${OPENSPACE_BASE_DIR}/include/openspace/engine/globalscallbacks.h - ${OPENSPACE_BASE_DIR}/include/openspace/engine/logfactory.h - ${OPENSPACE_BASE_DIR}/include/openspace/engine/moduleengine.h - ${OPENSPACE_BASE_DIR}/include/openspace/engine/moduleengine.inl - ${OPENSPACE_BASE_DIR}/include/openspace/engine/openspaceengine.h - ${OPENSPACE_BASE_DIR}/include/openspace/engine/syncengine.h - ${OPENSPACE_BASE_DIR}/include/openspace/engine/windowdelegate.h - ${OPENSPACE_BASE_DIR}/include/openspace/events/event.h - ${OPENSPACE_BASE_DIR}/include/openspace/events/eventengine.h - ${OPENSPACE_BASE_DIR}/include/openspace/events/eventengine.inl - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/action.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/actionmanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/delayedvariable.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/delayedvariable.inl - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/camerainteractionstates.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/mouseinputstate.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/interactionmonitor.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/interpolator.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/interpolator.inl - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/joystickinputstate.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/joystickcamerastates.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/keybindingmanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/keyboardinputstate.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/mousecamerastates.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/scriptcamerastates.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/sessionrecording.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/sessionrecording.inl - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/websocketinputstate.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/websocketcamerastates.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/tasks/convertrecfileversiontask.h - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/tasks/convertrecformattask.h - ${OPENSPACE_BASE_DIR}/include/openspace/mission/mission.h - ${OPENSPACE_BASE_DIR}/include/openspace/mission/missionmanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/pathcurves/avoidcollisioncurve.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/pathcurves/zoomoutoverviewcurve.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/keyframenavigator.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/navigationhandler.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/navigationstate.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/orbitalnavigator.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/path.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/pathcurve.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/pathnavigator.h - ${OPENSPACE_BASE_DIR}/include/openspace/navigation/waypoint.h - ${OPENSPACE_BASE_DIR}/include/openspace/network/parallelconnection.h - ${OPENSPACE_BASE_DIR}/include/openspace/network/parallelpeer.h - ${OPENSPACE_BASE_DIR}/include/openspace/network/messagestructures.h - ${OPENSPACE_BASE_DIR}/include/openspace/network/messagestructureshelper.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/listproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/listproperty.inl - ${OPENSPACE_BASE_DIR}/include/openspace/properties/numericalproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/numericalproperty.inl - ${OPENSPACE_BASE_DIR}/include/openspace/properties/optionproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/propertyowner.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/selectionproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/stringproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/templateproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/templateproperty.inl - ${OPENSPACE_BASE_DIR}/include/openspace/properties/triggerproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/list/doublelistproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/list/intlistproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/list/stringlistproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/matrix/dmat2property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/matrix/dmat3property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/matrix/dmat4property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/matrix/mat2property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/matrix/mat3property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/matrix/mat4property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/scalar/boolproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/scalar/doubleproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/scalar/floatproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/scalar/intproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/scalar/longproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/scalar/shortproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/scalar/uintproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/scalar/ulongproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/scalar/ushortproperty.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/dvec2property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/dvec3property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/dvec4property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/ivec2property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/ivec3property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/ivec4property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/uvec2property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/uvec3property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/uvec4property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/vec2property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/vec3property.h - ${OPENSPACE_BASE_DIR}/include/openspace/properties/vector/vec4property.h - ${OPENSPACE_BASE_DIR}/include/openspace/query/query.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/dashboard.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/dashboarditem.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/dashboardtextitem.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/framebufferrenderer.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/deferredcaster.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/deferredcasterlistener.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/deferredcastermanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/loadingscreen.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/luaconsole.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/helper.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/raycasterlistener.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/raycastermanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/renderable.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/renderengine.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/screenspacerenderable.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/texturecomponent.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/transferfunction.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/volume.h - ${OPENSPACE_BASE_DIR}/include/openspace/rendering/volumeraycaster.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/asset.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/assetmanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/lightsource.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/profile.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/rotation.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/scale.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/scene.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/sceneinitializer.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/scenelicensewriter.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/scenegraphnode.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/timeframe.h - ${OPENSPACE_BASE_DIR}/include/openspace/scene/translation.h - ${OPENSPACE_BASE_DIR}/include/openspace/scripting/lualibrary.h - ${OPENSPACE_BASE_DIR}/include/openspace/scripting/scriptengine.h - ${OPENSPACE_BASE_DIR}/include/openspace/scripting/scriptscheduler.h - ${OPENSPACE_BASE_DIR}/include/openspace/scripting/systemcapabilitiesbinding.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/blockplaneintersectiongeometry.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/boxgeometry.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/collisionhelper.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/concurrentjobmanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/concurrentjobmanager.inl - ${OPENSPACE_BASE_DIR}/include/openspace/util/concurrentqueue.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/concurrentqueue.inl - ${OPENSPACE_BASE_DIR}/include/openspace/util/coordinateconversion.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/distanceconstants.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/distanceconversion.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/factorymanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/factorymanager.inl - ${OPENSPACE_BASE_DIR}/include/openspace/util/httprequest.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/job.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/json_helper.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/json_helper.inl - ${OPENSPACE_BASE_DIR}/include/openspace/util/keys.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/memorymanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/mouse.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/openspacemodule.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/planegeometry.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/progressbar.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/resourcesynchronization.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/screenlog.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/sphere.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/spicemanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/syncable.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/syncbuffer.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/syncbuffer.inl - ${OPENSPACE_BASE_DIR}/include/openspace/util/syncdata.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/syncdata.inl - ${OPENSPACE_BASE_DIR}/include/openspace/util/task.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/taskloader.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/time.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/timeconversion.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/timeline.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/timeline.inl - ${OPENSPACE_BASE_DIR}/include/openspace/util/timemanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/timerange.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/touch.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/tstring.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/universalhelpers.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/updatestructures.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/versionchecker.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/transformationmanager.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/threadpool.h - ${OPENSPACE_BASE_DIR}/include/openspace/util/histogram.h + ${PROJECT_SOURCE_DIR}/include/openspace/json.h + ${PROJECT_SOURCE_DIR}/include/openspace/camera/camera.h + ${PROJECT_SOURCE_DIR}/include/openspace/camera/camerapose.h + ${PROJECT_SOURCE_DIR}/include/openspace/documentation/core_registration.h + ${PROJECT_SOURCE_DIR}/include/openspace/documentation/documentation.h + ${PROJECT_SOURCE_DIR}/include/openspace/documentation/documentationengine.h + ${PROJECT_SOURCE_DIR}/include/openspace/documentation/documentationgenerator.h + ${PROJECT_SOURCE_DIR}/include/openspace/documentation/verifier.h + ${PROJECT_SOURCE_DIR}/include/openspace/documentation/verifier.inl + ${PROJECT_SOURCE_DIR}/include/openspace/engine/configuration.h + ${PROJECT_SOURCE_DIR}/include/openspace/engine/downloadmanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/engine/globals.h + ${PROJECT_SOURCE_DIR}/include/openspace/engine/globalscallbacks.h + ${PROJECT_SOURCE_DIR}/include/openspace/engine/logfactory.h + ${PROJECT_SOURCE_DIR}/include/openspace/engine/moduleengine.h + ${PROJECT_SOURCE_DIR}/include/openspace/engine/moduleengine.inl + ${PROJECT_SOURCE_DIR}/include/openspace/engine/openspaceengine.h + ${PROJECT_SOURCE_DIR}/include/openspace/engine/syncengine.h + ${PROJECT_SOURCE_DIR}/include/openspace/engine/windowdelegate.h + ${PROJECT_SOURCE_DIR}/include/openspace/events/event.h + ${PROJECT_SOURCE_DIR}/include/openspace/events/eventengine.h + ${PROJECT_SOURCE_DIR}/include/openspace/events/eventengine.inl + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/action.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/actionmanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/delayedvariable.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/delayedvariable.inl + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/camerainteractionstates.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/mouseinputstate.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/interactionmonitor.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/interpolator.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/interpolator.inl + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/joystickinputstate.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/joystickcamerastates.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/keybindingmanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/keyboardinputstate.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/mousecamerastates.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/scriptcamerastates.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/sessionrecording.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/sessionrecording.inl + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/websocketinputstate.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/websocketcamerastates.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/tasks/convertrecfileversiontask.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/tasks/convertrecformattask.h + ${PROJECT_SOURCE_DIR}/include/openspace/mission/mission.h + ${PROJECT_SOURCE_DIR}/include/openspace/mission/missionmanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/pathcurves/avoidcollisioncurve.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/pathcurves/zoomoutoverviewcurve.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/keyframenavigator.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/navigationhandler.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/navigationstate.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/orbitalnavigator.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/path.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/pathcurve.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/pathnavigator.h + ${PROJECT_SOURCE_DIR}/include/openspace/navigation/waypoint.h + ${PROJECT_SOURCE_DIR}/include/openspace/network/parallelconnection.h + ${PROJECT_SOURCE_DIR}/include/openspace/network/parallelpeer.h + ${PROJECT_SOURCE_DIR}/include/openspace/network/messagestructures.h + ${PROJECT_SOURCE_DIR}/include/openspace/network/messagestructureshelper.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/listproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/listproperty.inl + ${PROJECT_SOURCE_DIR}/include/openspace/properties/numericalproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/numericalproperty.inl + ${PROJECT_SOURCE_DIR}/include/openspace/properties/optionproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/propertyowner.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/selectionproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/stringproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/templateproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/templateproperty.inl + ${PROJECT_SOURCE_DIR}/include/openspace/properties/triggerproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/list/doublelistproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/list/intlistproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/list/stringlistproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/matrix/dmat2property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/matrix/dmat3property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/matrix/dmat4property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/matrix/mat2property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/matrix/mat3property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/matrix/mat4property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/scalar/boolproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/scalar/doubleproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/scalar/floatproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/scalar/intproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/scalar/longproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/scalar/shortproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/scalar/uintproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/scalar/ulongproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/scalar/ushortproperty.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/dvec2property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/dvec3property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/dvec4property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/ivec2property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/ivec3property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/ivec4property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/uvec2property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/uvec3property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/uvec4property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/vec2property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/vec3property.h + ${PROJECT_SOURCE_DIR}/include/openspace/properties/vector/vec4property.h + ${PROJECT_SOURCE_DIR}/include/openspace/query/query.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/dashboard.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/dashboarditem.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/dashboardtextitem.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/framebufferrenderer.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/deferredcaster.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/deferredcasterlistener.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/deferredcastermanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/loadingscreen.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/luaconsole.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/helper.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/raycasterlistener.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/raycastermanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/renderable.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/renderengine.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/screenspacerenderable.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/texturecomponent.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/transferfunction.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/volume.h + ${PROJECT_SOURCE_DIR}/include/openspace/rendering/volumeraycaster.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/asset.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/assetmanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/lightsource.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/profile.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/rotation.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/scale.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/scene.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/sceneinitializer.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/scenelicensewriter.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/scenegraphnode.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/timeframe.h + ${PROJECT_SOURCE_DIR}/include/openspace/scene/translation.h + ${PROJECT_SOURCE_DIR}/include/openspace/scripting/lualibrary.h + ${PROJECT_SOURCE_DIR}/include/openspace/scripting/scriptengine.h + ${PROJECT_SOURCE_DIR}/include/openspace/scripting/scriptscheduler.h + ${PROJECT_SOURCE_DIR}/include/openspace/scripting/systemcapabilitiesbinding.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/blockplaneintersectiongeometry.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/boxgeometry.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/collisionhelper.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/concurrentjobmanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/concurrentjobmanager.inl + ${PROJECT_SOURCE_DIR}/include/openspace/util/concurrentqueue.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/concurrentqueue.inl + ${PROJECT_SOURCE_DIR}/include/openspace/util/coordinateconversion.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/distanceconstants.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/distanceconversion.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/factorymanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/factorymanager.inl + ${PROJECT_SOURCE_DIR}/include/openspace/util/httprequest.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/job.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/json_helper.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/json_helper.inl + ${PROJECT_SOURCE_DIR}/include/openspace/util/keys.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/memorymanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/mouse.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/openspacemodule.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/planegeometry.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/progressbar.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/resourcesynchronization.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/screenlog.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/sphere.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/spicemanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/syncable.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/syncbuffer.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/syncbuffer.inl + ${PROJECT_SOURCE_DIR}/include/openspace/util/syncdata.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/syncdata.inl + ${PROJECT_SOURCE_DIR}/include/openspace/util/task.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/taskloader.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/time.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/timeconversion.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/timeline.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/timeline.inl + ${PROJECT_SOURCE_DIR}/include/openspace/util/timemanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/timerange.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/touch.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/tstring.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/universalhelpers.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/updatestructures.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/versionchecker.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/transformationmanager.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/threadpool.h + ${PROJECT_SOURCE_DIR}/include/openspace/util/histogram.h ) if (APPLE) set(OPENSPACE_HEADER ${OPENSPACE_HEADER} - ${OPENSPACE_BASE_DIR}/include/openspace/interaction/touchbar.h + ${PROJECT_SOURCE_DIR}/include/openspace/interaction/touchbar.h ) endif () @@ -401,8 +401,8 @@ endif () foreach (file ${OPENSPACE_SOURCE} ${OPENSPACE_HEADER}) # Remove prefixes from the files set(original_file ${file}) - string(REPLACE "${OPENSPACE_BASE_DIR}/src/" "" file ${file}) - string(REPLACE "${OPENSPACE_BASE_DIR}/include/openspace/" "" file ${file}) + string(REPLACE "${PROJECT_SOURCE_DIR}/src/" "" file ${file}) + string(REPLACE "${PROJECT_SOURCE_DIR}/include/openspace/" "" file ${file}) get_filename_component(directory ${file} DIRECTORY) if (NOT directory STREQUAL "") # Visual Studio wants '\' for the path separator @@ -427,22 +427,22 @@ add_library(openspace-core STATIC ${OPENSPACE_HEADER} ${OPENSPACE_SOURCE}) target_include_directories(openspace-core SYSTEM PUBLIC # In order to use the date library - ${OPENSPACE_BASE_DIR}/ext/date/include + ${PROJECT_SOURCE_DIR}/ext/date/include # In order to use the nlohmann JSON library - ${OPENSPACE_BASE_DIR}/ext + ${PROJECT_SOURCE_DIR}/ext ) target_include_directories(openspace-core PUBLIC # In order to be able to include openspace-core files - ${OPENSPACE_BASE_DIR}/include + ${PROJECT_SOURCE_DIR}/include # In order to be able to include the module_registration file ${CMAKE_BINARY_DIR}/_generated/include PRIVATE # In order to be able to include module files. This is a temporary fix as this # introduces a dependency from the opnspace-core onto the modules - ${OPENSPACE_BASE_DIR} + ${PROJECT_SOURCE_DIR} ) target_precompile_headers(openspace-core PRIVATE @@ -474,14 +474,14 @@ target_precompile_headers(openspace-core PRIVATE add_dependencies(openspace-core run_codegen) configure_file( - ${OPENSPACE_CMAKE_EXT_DIR}/openspace_header.template + ${PROJECT_SOURCE_DIR}/support/cmake/openspace_header.template ${CMAKE_BINARY_DIR}/_generated/include/openspace/openspace.h @ONLY IMMEDIATE ) configure_file( - ${OPENSPACE_CMAKE_EXT_DIR}/commit.template - ${OPENSPACE_BASE_DIR}/COMMIT.md + ${PROJECT_SOURCE_DIR}/support/cmake/commit.template + ${PROJECT_SOURCE_DIR}/COMMIT.md @ONLY IMMEDIATE ) diff --git a/src/interaction/joystickcamerastates.cpp b/src/interaction/joystickcamerastates.cpp index 8970fe73f3..0ca0273b6a 100644 --- a/src/interaction/joystickcamerastates.cpp +++ b/src/interaction/joystickcamerastates.cpp @@ -73,7 +73,7 @@ void JoystickCameraStates::updateStateFromInput( int nAxes = joystickInputStates.numAxes(joystickInputState.name); for (int i = 0; - i < std::min(static_cast(nAxes), joystick->axisMapping.size()); + i < std::min(nAxes, static_cast(joystick->axisMapping.size())); ++i) { AxisInformation t = joystick->axisMapping[i]; diff --git a/src/interaction/mousecamerastates.cpp b/src/interaction/mousecamerastates.cpp index 3a722cde79..3d8be3a6cb 100644 --- a/src/interaction/mousecamerastates.cpp +++ b/src/interaction/mousecamerastates.cpp @@ -52,11 +52,11 @@ void MouseCameraStates::updateStateFromInput(const MouseInputState& mouseinputSt bool primaryPressed = mouseinputState.isMouseButtonPressed(primary); bool secondaryPressed = mouseinputState.isMouseButtonPressed(secondary); bool button3Pressed = mouseinputState.isMouseButtonPressed(MouseButton::Button3); - bool keyCtrlPressed = keyboardinputState.isKeyPressed(Key::LeftControl) | + bool keyCtrlPressed = keyboardinputState.isKeyPressed(Key::LeftControl) || keyboardinputState.isKeyPressed(Key::RightControl); - bool keyShiftPressed = keyboardinputState.isKeyPressed(Key::LeftShift) | + bool keyShiftPressed = keyboardinputState.isKeyPressed(Key::LeftShift) || keyboardinputState.isKeyPressed(Key::RightShift); - bool keyAltPressed = keyboardinputState.isKeyPressed(Key::LeftAlt) | + bool keyAltPressed = keyboardinputState.isKeyPressed(Key::LeftAlt) || keyboardinputState.isKeyPressed(Key::RightAlt); // Update the mouse states diff --git a/src/properties/property.cpp b/src/properties/property.cpp index 7ca893f124..31df2d52b0 100644 --- a/src/properties/property.cpp +++ b/src/properties/property.cpp @@ -40,8 +40,6 @@ namespace { constexpr std::string_view IdentifierKey = "Identifier"; constexpr std::string_view NameKey = "Name"; constexpr std::string_view TypeKey = "Type"; - constexpr std::string_view DescriptionKey = "Description"; - constexpr std::string_view JsonValueKey = "Value"; constexpr std::string_view MetaDataKey = "MetaData"; constexpr std::string_view AdditionalDataKey = "AdditionalData"; } // namespace diff --git a/src/scene/scene.cpp b/src/scene/scene.cpp index 6c3d14caef..b9d3b229c1 100644 --- a/src/scene/scene.cpp +++ b/src/scene/scene.cpp @@ -466,7 +466,7 @@ void Scene::addPropertyInterpolation(properties::Property* prop, float durationS if (info.prop == prop) { info.beginTime = now; info.durationSeconds = durationSeconds; - info.postScript = std::move(postScript), + info.postScript = std::move(postScript); info.easingFunction = func; // If we found it, we can break since we make sure that each property is only // represented once in this diff --git a/src/util/coordinateconversion.cpp b/src/util/coordinateconversion.cpp index 27f58c359a..31526a63f5 100644 --- a/src/util/coordinateconversion.cpp +++ b/src/util/coordinateconversion.cpp @@ -301,7 +301,7 @@ std::pair decimalDegreesToIcrs(double ra, double dec) // Calculate Dec int decDegrees = static_cast(std::trunc(decDeg)); - double decMinutesFull = (abs(decDeg) - abs(decDegrees)) * 60.0; + double decMinutesFull = (std::abs(decDeg) - std::abs(decDegrees)) * 60.0; int decMinutes = static_cast(std::trunc(decMinutesFull)); double decSeconds = (decMinutesFull - decMinutes) * 60.0; diff --git a/support/cmake/application_definition.cmake b/support/cmake/application_definition.cmake index effda193ce..caeb2666bd 100644 --- a/support/cmake/application_definition.cmake +++ b/support/cmake/application_definition.cmake @@ -22,14 +22,37 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/global_variables.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/global_variables.cmake) + +function (copy_files target) + # Add the copy command + foreach (file_i ${ARGN}) + if (IS_DIRECTORY "${file_i}") + # copy_if_different doesn't handle directories well and just copies them without + # contents. So if the path is a directory, we need to issue a different copy + # command + get_filename_component(folder ${file_i} NAME) + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory "${file_i}" "$/${folder}" + ) + else () + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${file_i}" $ + ) + endif () + endforeach () +endfunction () function (create_new_application application_name) add_executable(${application_name} MACOSX_BUNDLE ${ARGN}) set_openspace_compile_settings(${application_name}) if (WIN32) get_external_library_dependencies(ext_lib) - ghl_copy_files(${application_name} ${ext_lib}) + copy_files(${application_name} ${ext_lib}) endif () target_link_libraries(${application_name} PUBLIC openspace-module-base) diff --git a/support/cmake/module_common.cmake b/support/cmake/module_common.cmake index ee77dc1227..a2306feda5 100644 --- a/support/cmake/module_common.cmake +++ b/support/cmake/module_common.cmake @@ -39,7 +39,7 @@ endfunction () function (create_module_header_filepath module_name module_path header_filepath) string(TOLOWER ${module_name} module_name) - string(REPLACE "${OPENSPACE_BASE_DIR}/" "" module_path ${module_path}) + string(REPLACE "${PROJECT_SOURCE_DIR}/" "" module_path ${module_path}) set(header_filepath "${module_path}/${module_name}module.h" PARENT_SCOPE) endfunction () diff --git a/support/cmake/module_definition.cmake b/support/cmake/module_definition.cmake index 6f295822bc..d5d458bc7d 100644 --- a/support/cmake/module_definition.cmake +++ b/support/cmake/module_definition.cmake @@ -22,9 +22,8 @@ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ########################################################################################## -include(${OPENSPACE_CMAKE_EXT_DIR}/module_common.cmake) -include(${OPENSPACE_CMAKE_EXT_DIR}/set_openspace_compile_settings.cmake) -include(${GHOUL_BASE_DIR}/support/cmake/handle_external_library.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/module_common.cmake) +include(${PROJECT_SOURCE_DIR}/support/cmake/set_openspace_compile_settings.cmake) include(GenerateExportHeader) @@ -33,7 +32,7 @@ include(GenerateExportHeader) # The library will have the name openspace-module- and has all of their # dependencies set correctly. # The 'library_mode' determines whether the module is linked STATIC or SHARED -# Dependencies will have to be set in a file called "include.cmake" +# Dependencies will have to be set in a file called "include.cmake" function (create_new_module module_name output_library_name library_mode) # Create a library name of the style: openspace-module-${name} create_library_name(${module_name} library_name) @@ -47,7 +46,7 @@ function (create_new_module module_name output_library_name library_mode) # Set compile settings that are common to all modules set_openspace_compile_settings(${library_name}) - target_include_directories(${library_name} PUBLIC ${OPENSPACE_BASE_DIR}) + target_include_directories(${library_name} PUBLIC ${PROJECT_SOURCE_DIR}) create_define_name(${module_name} define_name) target_compile_definitions(${library_name} PUBLIC "${define_name}") @@ -68,7 +67,7 @@ function (create_new_module module_name output_library_name library_mode) # instead # This value is used in handle_modules.cmake::handle_modules set_property(GLOBAL PROPERTY CurrentModuleClassName "${module_name}Module") - + set(${output_library_name} ${library_name} PARENT_SCOPE) endfunction () diff --git a/support/cmake/packaging.cmake b/support/cmake/packaging.cmake index 0d190f2cbc..528309880a 100644 --- a/support/cmake/packaging.cmake +++ b/support/cmake/packaging.cmake @@ -27,8 +27,8 @@ set(CPACK_MONOLITHIC_INSTALL TRUE) include(InstallRequiredSystemLibraries) set(CPACK_PACKAGE_NAME "OpenSpace") -set(CPACK_PACKAGE_DESCRIPTION_FILE "${OPENSPACE_BASE_DIR}/README.md") -set(CPACK_RESOURCE_FILE_LICENSE "${OPENSPACE_BASE_DIR}/LICENSE.md") +set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.md") +set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.md") set(CPACK_PACKAGE_VERSION_MAJOR "${OPENSPACE_VERSION_MAJOR}") set(CPACK_PACKAGE_VERSION_MINOR "${OPENSPACE_VERSION_MINOR}") set(CPACK_PACKAGE_VERSION_PATCH "${OPENSPACE_VERSION_PATCH}") @@ -42,15 +42,15 @@ set(CPACK_PACKAGE_FILE_NAME set(CPACK_STRIP_FILES 1) install(DIRECTORY - ${OPENSPACE_BASE_DIR}/bin/${CMAKE_BUILD_TYPE}/ + ${PROJECT_SOURCE_DIR}/bin/${CMAKE_BUILD_TYPE}/ DESTINATION bin USE_SOURCE_PERMISSIONS ) -install(DIRECTORY ${OPENSPACE_BASE_DIR}/config/ DESTINATION config) +install(DIRECTORY ${PROJECT_SOURCE_DIR}/config/ DESTINATION config) -install(DIRECTORY ${OPENSPACE_BASE_DIR}/data/ DESTINATION data) +install(DIRECTORY ${PROJECT_SOURCE_DIR}/data/ DESTINATION data) -install(DIRECTORY ${OPENSPACE_BASE_DIR}/modules/ +install(DIRECTORY ${PROJECT_SOURCE_DIR}/modules/ DESTINATION modules FILES_MATCHING PATTERN "*.glsl" @@ -59,25 +59,25 @@ install(DIRECTORY ${OPENSPACE_BASE_DIR}/modules/ PATTERN "*.vs" PATTERN "*.lua" ) -install(DIRECTORY ${OPENSPACE_BASE_DIR}/scripts/ DESTINATION scripts) -install(DIRECTORY ${OPENSPACE_BASE_DIR}/shaders/ DESTINATION shaders) +install(DIRECTORY ${PROJECT_SOURCE_DIR}/scripts/ DESTINATION scripts) +install(DIRECTORY ${PROJECT_SOURCE_DIR}/shaders/ DESTINATION shaders) install(FILES - ${OPENSPACE_BASE_DIR}/openspace.cfg - ${OPENSPACE_BASE_DIR}/CREDITS.md - ${OPENSPACE_BASE_DIR}/LICENSE.md - ${OPENSPACE_BASE_DIR}/README.md + ${PROJECT_SOURCE_DIR}/openspace.cfg + ${PROJECT_SOURCE_DIR}/CREDITS.md + ${PROJECT_SOURCE_DIR}/LICENSE.md + ${PROJECT_SOURCE_DIR}/README.md DESTINATION . ) if (WIN32) set(CPACK_GENERATOR ZIP) # Need backslash for correct subdirectory paths - set(CPACK_PACKAGE_ICON "${OPENSPACE_BASE_DIR}\\\\apps\\\\OpenSpace\\\\openspace.png") + set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}\\\\apps\\\\OpenSpace\\\\openspace.png") set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}\\\\${OPENSPACE_VERSION_NUMBER} ${OPENSPACE_VERSION_STRING}") else () set(CPACK_GENERATOR TGZ) - set(CPACK_PACKAGE_ICON "${OPENSPACE_BASE_DIR}/apps/OpenSpace/openspace.png") + set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/apps/OpenSpace/openspace.png") set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}/${OPENSPACE_VERSION_NUMBER} ${OPENSPACE_VERSION_STRING}") endif () @@ -97,7 +97,7 @@ if (OPENSPACE_CREATE_INSTALLER) # Delete the desktop link set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "Delete '$DESKTOP\\\\${CPACK_NSIS_DISPLAY_NAME}.lnk' ") # The icon to start the application. - set(CPACK_NSIS_MUI_ICON "${OPENSPACE_BASE_DIR}\\\\apps\\\\OpenSpace\\\\openspace.ico") + set(CPACK_NSIS_MUI_ICON "${PROJECT_SOURCE_DIR}\\\\apps\\\\OpenSpace\\\\openspace.ico") # Add a link to the application website in the startup menu. set(CPACK_NSIS_MENU_LINKS "http://openspaceproject.com/" "OpenSpace Homepage") # Set the icon for the application in the Add/Remove programs section. diff --git a/support/cmake/set_openspace_compile_settings.cmake b/support/cmake/set_openspace_compile_settings.cmake index d7a3a301b0..1c3768c2a6 100644 --- a/support/cmake/set_openspace_compile_settings.cmake +++ b/support/cmake/set_openspace_compile_settings.cmake @@ -31,13 +31,9 @@ function (set_openspace_compile_settings target) "/wd4127" # conditional expression is constant [raised by: websocketpp] "/wd4201" # nonstandard extension used : nameless struct/union [raised by: GLM] "/wd5030" # attribute 'attribute' is not recognized [raised by: codegen] - "/std:c++latest" "/permissive-" "/Zc:__cplusplus" # Correctly set the __cplusplus macro ) - if (OPENSPACE_WARNINGS_AS_ERRORS) - set(MSVC_WARNINGS ${MSVC_WARNINGS} "/WX") - endif () if (OPENSPACE_OPTIMIZATION_ENABLE_AVX) set(MSVC_WARNINGS ${MSVC_WARNINGS} "/arch:AVX") endif () @@ -61,12 +57,11 @@ function (set_openspace_compile_settings target) endif () set(CLANG_WARNINGS - "-stdlib=libc++" "-Wall" "-Wextra" "-Wmost" "-Wpedantic" - + "-Wabstract-vbase-init" "-Walloca" "-Wanon-enum-enum-conversion" @@ -141,14 +136,11 @@ function (set_openspace_compile_settings target) "-Wvariadic-macros" "-Wvla" "-Wzero-as-null-pointer-constant" - + "-Wno-attributes" "-Wno-missing-braces" "-Wno-unknown-attributes" ) - if (OPENSPACE_WARNINGS_AS_ERRORS) - set(CLANG_WARNINGS ${CLANG_WARNINGS} "-Werror") - endif () set(GCC_WARNINGS @@ -177,17 +169,15 @@ function (set_openspace_compile_settings target) "-Wuninitialized" "-Wvla" "-Wzero-as-null-pointer-constant" - + "-Wno-attributes" "-Wno-deprecated-copy" "-Wno-float-equal" "-Wno-long-long" + "-Wno-missing-field-initializers" "-Wno-unknown-attributes" "-Wno-write-strings" ) - if (OPENSPACE_WARNINGS_AS_ERRORS) - set(GCC_WARNINGS ${CLANG_WARNINGS} "-Werror") - endif () if (MSVC) target_compile_options(${target} PRIVATE ${MSVC_WARNINGS}) @@ -198,16 +188,12 @@ function (set_openspace_compile_settings target) target_compile_definitions(${target} PRIVATE "WIN32_LEAN_AND_MEAN") target_compile_definitions(${target} PRIVATE "VC_EXTRALEAN") elseif (NOT LINUX AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") - if (OPENSPACE_WARNINGS_AS_ERRORS) - target_compile_options(${target} PRIVATE "-Werror") - endif () - # Apple has "deprecated" OpenGL and offers nothing by warnings instead + # Apple has "deprecated" OpenGL and offers nothing but warnings instead target_compile_definitions(${target} PRIVATE "GL_SILENCE_DEPRECATION") target_compile_options(${target} PRIVATE ${CLANG_WARNINGS}) elseif (UNIX AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") - target_compile_options(${target} PRIVATE ${CLANG_WARNINGS} "-std=c++17") - target_link_libraries(${target} PRIVATE "c++" "c++abi") + target_compile_options(${target} PRIVATE ${CLANG_WARNINGS}) elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") target_compile_options(${target} PRIVATE ${GCC_WARNINGS}) else () diff --git a/support/coding/codegen b/support/coding/codegen index 107f662bff..c078531087 160000 --- a/support/coding/codegen +++ b/support/coding/codegen @@ -1 +1 @@ -Subproject commit 107f662bffb90aca6fcc4e97e34834352838ec94 +Subproject commit c07853108775739727d837fb4974763f798d0b2c diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 06c09091a0..b2d5e9f9cb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -73,4 +73,4 @@ if (OPENSPACE_MODULE_WEBBROWSER AND CEF_ROOT) run_cef_platform_config("${CEF_ROOT}" "${CEF_TARGET}" "${WEBBROWSER_MODULE_PATH}") endif () -set_folder_location(OpenSpaceTest "Unit Tests") +set_target_properties(OpenSpaceTest PROPERTIES FOLDER "Unit Tests") diff --git a/tests/test_spicemanager.cpp b/tests/test_spicemanager.cpp index 981b1d455a..debf12a936 100644 --- a/tests/test_spicemanager.cpp +++ b/tests/test_spicemanager.cpp @@ -239,7 +239,7 @@ TEST_CASE("SpiceManager: Get Value From ID 1D", "[spicemanager]") { std::string target = "EARTH"; std::string value1D = "MAG_NORTH_POLE_LAT"; - double return1D; + double return1D = 0.0; CHECK_NOTHROW(openspace::SpiceManager::ref().getValue(target, value1D, return1D)); CHECK(return1D == 78.565); @@ -291,8 +291,8 @@ TEST_CASE("SpiceManager: String To Ephemeris Time", "[spicemanager]") { loadLSKKernel(); - double ephemerisTime; - double control_ephemerisTime; + double ephemerisTime = -1.0; + double control_ephemerisTime = 0.0; char date[SRCLEN] = "Thu Mar 20 12:53:29 PST 1997"; str2et_c(date, &control_ephemerisTime);