add_qtc_library(Nanotrace
  PUBLIC_DEFINES NANOTRACE_ENABLED
  PUBLIC_COMPILE_OPTIONS $<$<COMPILE_LANG_AND_ID:CXX,MSVC>:/wd5030>
  SOURCES
    nanotraceglobals.h
    nanotrace.cpp nanotrace.h
    nanotracehr.cpp nanotracehr.h
    nanotracehrfwd.h
    staticstring.h
  PUBLIC_DEPENDS Qt::Core Qt::Gui
  PROPERTIES
    CXX_VISIBILITY_PRESET default
    VISIBILITY_INLINES_HIDDEN OFF
)

option(DESIGNSTUDIO_USE_NANOTRACE
       "Enables collecting performance data with nanotrace for Design Studio" OFF)
extend_qtc_library(Nanotrace
  CONDITION DESIGN_STUDIO_USE_NANOTRACE
  PUBLIC_DEFINES NANOTRACE_DESIGNSTUDIO_ENABLED
)

env_with_default("QTC_ENABLE_SQLITE_TRACING" ENV_QTC_ENABLE_SQLITE_TRACING OFF)
option(ENABLE_SQLITE_TRACING "Enable sqlite tarcing" ${ENV_QTC_ENABLE_SQLITE_TRACING})
add_feature_info("Sqlite tracing" ${ENABLE_SQLITE_TRACING} "")

env_with_default("QTC_ENABLE_PROJECT_STORAGE_TRACING" ENV_QTC_ENABLE_PROJECT_STORAGE_TRACING OFF)
option(ENABLE_PROJECT_STORAGE_TRACING "Enable project storage tracing" ${ENV_QTC_ENABLE_PROJECT_STORAGE_TRACING})
add_feature_info("Project storage tracing" ${ENABLE_PROJECT_STORAGE_TRACING} "")

env_with_default("QTC_ENABLE_SOURCE_PATH_STORAGE_TRACING" ENV_QTC_ENABLE_SOURCE_PATH_STORAGE_TRACING OFF)
option(ENABLE_SOURCE_PATH_STORAGE_TRACING "Enable source path storage tracing" ${ENV_QTC_ENABLE_SOURCE_PATH_STORAGE_TRACING})
add_feature_info("Source path storage tracing" ${ENABLE_SOURCE_PATH_STORAGE_TRACING} "")

env_with_default("QTC_ENABLE_IMAGE_CACHE_TRACING" ENV_QTC_ENABLE_IMAGE_CACHE_TRACING OFF)
option(ENABLE_IMAGE_CACHE_TRACING "Enable image cache tracing" ${ENV_QTC_ENABLE_IMAGE_CACHE_TRACING})
add_feature_info("Image cache tracing" ${ENABLE_IMAGE_CACHE_TRACING} "")

env_with_default("QTC_ENABLE_MODEL_TRACING" ENV_QTC_ENABLE_MODEL_TRACING OFF)
option(ENABLE_MODEL_TRACING "Enable model tracing" ${ENV_QTC_ENABLE_MODEL_TRACING})
add_feature_info("Model tracing" ${ENABLE_MODEL_TRACING} "")

env_with_default("QDS_DESIGNVIEWER_USE_STAGING" ENV_QDS_DESIGNVIEWER_USE_STAGING OFF)
option(QDS_DESIGNVIEWER_USE_STAGING "Use staging API URL for Design Viewer" ${ENV_QDS_DESIGNVIEWER_USE_STAGING})
add_feature_info("Use staging API URL for Design Viewer" ${QDS_DESIGNVIEWER_USE_STAGING} "")

env_with_default("QTC_ENABLE_PROPERTY_EDITOR_TRACING" ENV_QTC_ENABLE_PROPERTY_EDITOR_TRACING OFF)
option(ENABLE_PROPERTY_EDITOR_TRACING "Enable property editor tracing" ${ENV_QTC_ENABLE_PROPERTY_EDITOR_TRACING})
add_feature_info("Property editor tracing" ${ENABLE_PROPERTY_EDITOR_TRACING} "")

env_with_default("QTC_ENABLE_FORM_EDITOR_TRACING" ENV_QTC_ENABLE_FORM_EDITOR_TRACING OFF)
option(ENABLE_FORM_EDITOR_TRACING "Enable form editor tracing" ${ENV_QTC_ENABLE_FORM_EDITOR_TRACING})
add_feature_info("Form editor tracing" ${ENABLE_FORM_EDITOR_TRACING} "")

env_with_default("QTC_ENABLE_NAVIGATOR_TRACING" ENV_QTC_ENABLE_NAVIGATOR_TRACING OFF)
option(ENABLE_NAVIGATOR_TRACING "Enable navigator tracing" ${ENV_QTC_ENABLE_NAVIGATOR_TRACING})
add_feature_info("Navigator tracing" ${ENABLE_NAVIGATOR_TRACING} "")

env_with_default("QTC_ENABLE_ITEM_LIBRARY_TRACING" ENV_QTC_ENABLE_ITEM_LIBRARY_TRACING OFF)
option(ENABLE_ITEM_LIBRARY_TRACING "Enable item library tracing" ${ENV_QTC_ENABLE_ITEM_LIBRARY_TRACING})
add_feature_info("Item library tracing" ${ENABLE_ITEM_LIBRARY_TRACING} "")

env_with_default("QTC_ENABLE_REWRITER_TRACING" ENV_QTC_ENABLE_REWRITER_TRACING OFF)
option(ENABLE_REWRITER_TRACING "Enable rewriter tracing" ${ENV_QTC_ENABLE_REWRITER_TRACING})
add_feature_info("Rewriter tracing" ${ENABLE_REWRITER_TRACING} "")

env_with_default("QTC_ENABLE_PROJECT_MANAGING_TRACING" ENV_QTC_ENABLE_PROJECT_MANAGING_TRACING OFF)
option(ENABLE_PROJECT_MANAGING_TRACING "Enable project manager tracing" ${ENV_QTC_ENABLE_PROJECT_MANAGING_TRACING})
add_feature_info("Project manager tracing" ${ENABLE_PROJECT_MANAGING_TRACING} "")

extend_qtc_library(Nanotrace
  CONDITION SQLITE_TRACING OR ENABLE_PROJECT_STORAGE_TRACING OR ENABLE_SOURCE_PATH_STORAGE_TRACING OR ENABLE_IMAGE_CACHE_TRACING OR ENABLE_MODEL_TRACING OR ENABLE_FORM_EDITOR_TRACING OR ENABLE_PROPERTY_EDITOR_TRACING OR ENABLE_NAVIGATOR_TRACING OR ENABLE_ITEM_LIBRARY_TRACING OR ENABLE_REWRITER_TRACING OR ENABLE_PROJECT_MANAGING_TRACING
  PUBLIC_DEFINES
    ENABLE_TRACING_FILE
  SOURCES
    tracefile.cpp tracefile.h
)
