From 20025963af3f465edccc3875dc66351fa5a8851b Mon Sep 17 00:00:00 2001
From: Tristan Walter <twalter@orn.mpg.de>
Date: Tue, 13 Oct 2020 00:14:16 +0200
Subject: [PATCH] some changes with build options

---
 Application/CMakeLists.txt                      | 15 ++++++++-------
 Application/src/GitSHA1.cpp.in                  |  4 ++++
 Application/src/GitSHA1.h                       |  2 ++
 Application/src/commons/common/misc/SpriteMap.h |  7 +++++--
 Application/src/grabber/CMakeLists.txt          |  8 +++++---
 Application/src/tracker/CMakeLists.txt          |  4 +++-
 Application/src/tracker/misc/default_config.cpp | 15 ++++++++++++++-
 conda/bld.bat                                   |  2 +-
 8 files changed, 42 insertions(+), 15 deletions(-)

diff --git a/Application/CMakeLists.txt b/Application/CMakeLists.txt
index 23f5893..ded7f03 100644
--- a/Application/CMakeLists.txt
+++ b/Application/CMakeLists.txt
@@ -70,9 +70,9 @@ if(WIN32)
 	#endif()
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_USE_MATH_DEFINES -DNOMINMAX -DWIN32_LEAN_AND_MEAN -DCURL_STATICLIB")
     #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:MSVCRT")
-    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /bigobj /O2 /GL")
+    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /bigobj /O2")
     set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /bigobj /O0")
-    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /bigobj /O2 /GL")
+    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT /bigobj /O2")
     set(GLEW_STATIC ON)
 else()
     set(BUILD_SHARED_LIBS OFF)
@@ -803,11 +803,12 @@ if(${TREX_BUILD_OPENCV})
    set(OPENCV_CMAKE_ARGS "")
    
    if(TREX_CONDA_PACKAGE_INSTALL)
-		set(OPENCV_CMAKE_ARGS ${OPENCV_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=Release)
+		set(TREX_CMAKE_BUILD_TYPE Release)
    else()
-		set(OPENCV_CMAKE_ARGS ${OPENCV_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=$<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>)
+		set(TREX_CMAKE_BUILD_TYPE $<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>)
    endif()
    set(OPENCV_CMAKE_ARGS ${OPENCV_CMAKE_ARGS} 
+			-DCMAKE_BUILD_TYPE=${TREX_CMAKE_BUILD_TYPE}
 			-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
             -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
             -DBUILD_DOCS:BOOL=FALSE
@@ -857,9 +858,9 @@ if(${TREX_BUILD_OPENCV})
             GIT_REPOSITORY  https://github.com/opencv/opencv.git
             GIT_TAG 4.3.0
             UPDATE_COMMAND ""
-            CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release -G ${CMAKE_GENERATOR} ${OPENCV_CMAKE_ARGS} ${CMAKE_CURRENT_BINARY_DIR}/opencv/src/CustomOpenCV
-            BUILD_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config $<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>
-            INSTALL_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config $<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug> --target install
+            CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=${TREX_CMAKE_BUILD_TYPE} -G ${CMAKE_GENERATOR} ${OPENCV_CMAKE_ARGS} ${CMAKE_CURRENT_BINARY_DIR}/opencv/src/CustomOpenCV
+            BUILD_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config ${TREX_CMAKE_BUILD_TYPE}
+            INSTALL_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${PKG_CONFIG_PATH}/pkgconfig ${CMAKE_COMMAND} --build . --config ${TREX_CMAKE_BUILD_TYPE} --target install
             CMAKE_ARGS
             ${OPENCV_CMAKE_ARGS})
     else()
diff --git a/Application/src/GitSHA1.cpp.in b/Application/src/GitSHA1.cpp.in
index 0a6c73b..6760caf 100644
--- a/Application/src/GitSHA1.cpp.in
+++ b/Application/src/GitSHA1.cpp.in
@@ -1,2 +1,6 @@
 #define GIT_SHA1 "@GIT_SHA1@"
 extern const char g_GIT_SHA1[] = GIT_SHA1;
+#define TREX_BUILD_TYPE "@TREX_CMAKE_BUILD_TYPE@"
+extern const char g_TREX_BUILD_TYPE[] = TREX_BUILD_TYPE;
+#define TREX_BUILD_CXX_OPTIONS "@CMAKE_CXX_FLAGS@ @CMAKE_CXX_FLAGS_RELEASE@"
+extern const char g_TREX_BUILD_CXX_OPTIONS[] = TREX_BUILD_CXX_OPTIONS;
diff --git a/Application/src/GitSHA1.h b/Application/src/GitSHA1.h
index 8e02c57..2eac607 100644
--- a/Application/src/GitSHA1.h
+++ b/Application/src/GitSHA1.h
@@ -1 +1,3 @@
 extern const char g_GIT_SHA1[];
+extern const char g_TREX_BUILD_TYPE[];
+extern const char g_TREX_BUILD_CXX_OPTIONS[];
\ No newline at end of file
diff --git a/Application/src/commons/common/misc/SpriteMap.h b/Application/src/commons/common/misc/SpriteMap.h
index 2cb1dfc..2fe3203 100644
--- a/Application/src/commons/common/misc/SpriteMap.h
+++ b/Application/src/commons/common/misc/SpriteMap.h
@@ -327,9 +327,12 @@ namespace sprite {
         
         std::vector<std::string> keys() const {
             std::vector<std::string> result;
-            for (auto &p: _props) {
+            result.reserve(_props.size());
+
+            for (auto &p: _props)
                 result.push_back(p.first.name());
-            }
+
+            std::sort(result.begin(), result.end());
             return result;
         }
         
diff --git a/Application/src/grabber/CMakeLists.txt b/Application/src/grabber/CMakeLists.txt
index 306fc06..00894b8 100644
--- a/Application/src/grabber/CMakeLists.txt
+++ b/Application/src/grabber/CMakeLists.txt
@@ -29,8 +29,10 @@ if(APPLE)
     set(SRCS ${SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/gfx/GrabberIcon.icns)
 endif()
 
+set(TREX_ADDITIONAL_SOURCES "")
 if(WITH_GITSHA1)
-    list(APPEND SRCS "${CMAKE_CURRENT_BINARY_DIR}/../GitSHA1.cpp" ../GitSHA1.h)
+	set(TREX_ADDITIONAL_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/../GitSHA1.cpp" ../GitSHA1.h)
+    list(APPEND SRCS ${TREX_ADDITIONAL_SOURCES})
 endif()
 
 if(WIN32)
@@ -59,7 +61,7 @@ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:trex_check_python> $<TARGET_FILE_
 endif()
 add_dependencies(${TGRABS_EXEC_NAME} trex_check_python TRex::OpenCV)
 
-add_executable(pvconvert pvconvert.cpp gif.h)
+add_executable(pvconvert pvconvert.cpp gif.h ${TREX_ADDITIONAL_SOURCES})
 target_link_libraries(pvconvert PUBLIC
     tracker_gui
     pv
@@ -100,7 +102,7 @@ if(WITH_HTTPD)
     add_dependencies(${TGRABS_EXEC_NAME} LibMicroHttpd)
 endif()
 
-add_executable(pvinfo pvinfo.cpp pvinfo_merge.cpp pvinfo_merge.h)
+add_executable(pvinfo pvinfo.cpp pvinfo_merge.cpp pvinfo_merge.h ${TREX_ADDITIONAL_SOURCES})
 
 target_link_libraries(pvinfo PRIVATE
 	cnpy
diff --git a/Application/src/tracker/CMakeLists.txt b/Application/src/tracker/CMakeLists.txt
index 568f659..741ea92 100644
--- a/Application/src/tracker/CMakeLists.txt
+++ b/Application/src/tracker/CMakeLists.txt
@@ -33,8 +33,10 @@ if(WIN32 OR UNIX AND NOT APPLE)
 	set(SRCS ${SRCS} trex.rc)
 endif()
 
+set(TREX_ADDITIONAL_SOURCES "")
 if(WITH_GITSHA1)
-    list(APPEND SRCS "${CMAKE_CURRENT_BINARY_DIR}/../GitSHA1.cpp" ../GitSHA1.h)
+	set(TREX_ADDITIONAL_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/../GitSHA1.cpp" ../GitSHA1.h)
+    list(APPEND SRCS ${TREX_ADDITIONAL_SOURCES})
 endif()
 
 if(NOT WIN32 AND TREX_WITH_TESTS)
diff --git a/Application/src/tracker/misc/default_config.cpp b/Application/src/tracker/misc/default_config.cpp
index 6f3159d..822af08 100644
--- a/Application/src/tracker/misc/default_config.cpp
+++ b/Application/src/tracker/misc/default_config.cpp
@@ -2,6 +2,7 @@
 #include <misc/SpriteMap.h>
 #include <file/Path.h>
 #include <misc/BlobSizeRange.h>
+#include "GitSHA1.h"
 
 #ifndef WIN32
 #include <unistd.h>
@@ -180,6 +181,15 @@ file::Path conda_environment_path() {
 #ifdef WIN32
 #define PYTHON_TIPPS " (containing pythonXX.exe)"
 #endif
+
+
+    constexpr std::string_view is_ndebug_enabled() {
+#ifndef NDEBUG
+        return std::string_view("debug");
+#else
+        return std::string_view("release");
+#endif
+    }
     
     void get(sprite::Map& config, GlobalSettings::docs_map_t& docs, decltype(GlobalSettings::set_access_level)* fn)
     {
@@ -194,6 +204,9 @@ file::Path conda_environment_path() {
         
         CONFIG<std::string>("app_name", "TRex", "Name of the application.", SYSTEM);
         CONFIG("version", std::string("1.0"), "Current application version.", SYSTEM);
+        CONFIG("build_type", std::string(g_TREX_BUILD_TYPE), "The mode the application was built in.", SYSTEM);
+        CONFIG("build_is_debug", std::string(is_ndebug_enabled()), "If built in debug mode, this will show 'debug'.", SYSTEM);
+        CONFIG("build_cxx_options", std::string(g_TREX_BUILD_CXX_OPTIONS), "The mode the application was built in.", SYSTEM);
         CONFIG("build", std::string(), "Current build version", SYSTEM);
         CONFIG("cmd_line", std::string(), "An approximation of the command-line arguments passed to the program.", SYSTEM);
         CONFIG("ffmpeg_path", file::Path(), "Path to an ffmpeg executable file. This is used for converting videos after recording them (from the GUI). It is not a critical component of the software, but mostly for convenience.");
@@ -617,7 +630,7 @@ file::Path conda_environment_path() {
             // UPDATE: write only keys with values that have changed compared
             // to the default options
             if(!config.has(key) || config[key] != GlobalSettings::get(key)) {
-                if((include_build_number && key == "build")
+                if((include_build_number && utils::beginsWith(key, "build"))
                    || (GlobalSettings::access_level(key) <= AccessLevelType::STARTUP
                        && !contains(exclude_fields, key)
                        && !contains(additional_exclusions, key)))
diff --git a/conda/bld.bat b/conda/bld.bat
index 79e1f84..bcab20e 100644
--- a/conda/bld.bat
+++ b/conda/bld.bat
@@ -16,7 +16,7 @@ echo findlib is %findlib%
 
 echo Generator %CMAKE_GENERATOR%
 echo Python %PYTHON%
-cmake .. -DWITH_GITSHA1=ON -DPYTHON_INCLUDE_DIR:FILEPATH=%pythoninclude% -DPYTHON_LIBRARY:FILEPATH=%findlib% -DPYTHON_EXECUTABLE:FILEPATH=%PREFIX%\python -DWITH_PYLON=OFF -G "%CMAKE_GENERATOR%" -DTREX_BUILD_OPENCV=ON -DCMAKE_INSTALL_PREFIX=%PREFIX% -DCMAKE_SKIP_RPATH=ON -DTREX_BUILD_PNG=ON -DTREX_BUILD_ZIP=ON -DTREX_CONDA_PACKAGE_INSTALL=ON -DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=TRUE -DTREX_WITH_TESTS:BOOL=OFF -DTREX_BUILD_GLFW=ON -DTREX_BUILD_ZLIB=ON
+cmake .. -DWITH_GITSHA1=ON -DPYTHON_INCLUDE_DIR:FILEPATH=%pythoninclude% -DPYTHON_LIBRARY:FILEPATH=%findlib% -DPYTHON_EXECUTABLE:FILEPATH=%PREFIX%\python -DWITH_PYLON=OFF -G "%CMAKE_GENERATOR%" -DTREX_BUILD_OPENCV=ON -DCMAKE_INSTALL_PREFIX=%PREFIX% -DCMAKE_SKIP_RPATH=ON -DTREX_BUILD_PNG=ON -DTREX_BUILD_ZIP=ON -DTREX_CONDA_PACKAGE_INSTALL=ON -DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=TRUE -DTREX_WITH_TESTS:BOOL=OFF -DTREX_BUILD_GLFW=ON -DTREX_BUILD_ZLIB=ON -DCMAKE_BUILD_TYPE=Release
 
 cmake --build . --target Z_LIB --config Release
 cmake --build . --target libzip --config Release
-- 
GitLab