Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
.gitignore
.vscode/
__*__
build*/
ignore/
python/src/xstudio.egg-info/
python/test/xstudio.log
docs/conf.py
python/src/xstudio/version.py
.vs/
.DS_Store
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "extern/otio/OpenTimelineIO"]
path = extern/otio/OpenTimelineIO
url = https://github.com/AcademySoftwareFoundation/OpenTimelineIO
1 change: 0 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@

208 changes: 139 additions & 69 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,44 +1,37 @@
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)

option(USE_VCPKG "Use Vcpkg for package management" OFF)
if(WIN32)
set(USE_VCPKG ON)
endif()

if (USE_VCPKG)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/vcpkg.cmake)
endif()
cmake_minimum_required(VERSION 3.26 FATAL_ERROR)
cmake_policy(VERSION 3.26)

set(XSTUDIO_GLOBAL_VERSION "0.11.2" CACHE STRING "Version string")
set(XSTUDIO_GLOBAL_VERSION "1.0.0" CACHE STRING "Version string")
set(XSTUDIO_GLOBAL_NAME xStudio)

project(${XSTUDIO_GLOBAL_NAME} VERSION ${XSTUDIO_GLOBAL_VERSION} LANGUAGES CXX)
set(CMAKE_OSX_DEPLOYMENT_TARGET "14.5" CACHE STRING "Minimum OS X deployment version" FORCE)

cmake_policy(VERSION 3.26)
project(${XSTUDIO_GLOBAL_NAME} VERSION ${XSTUDIO_GLOBAL_VERSION} LANGUAGES CXX)

option(BUILD_TESTING "Build tests" OFF)
option(INSTALL_PYTHON_MODULE "Install python module" ON)
option(INSTALL_XSTUDIO "Install xstudio" ON)
option(BUILD_DOCS "Build xStudio documentation" OFF)
option(BUILD_DOCS "Build xStudio documentation" ON)
option(ENABLE_CLANG_TIDY "Enable clang-tidy, ninja clang-tidy." OFF)
option(ENABLE_CLANG_FORMAT "Enable clang format, ninja clangformat." OFF)
option(FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." TRUE)
option(OPTIMIZE_FOR_NATIVE "Build with -march=native" OFF)
option(BUILD_RESKIN "Build xstudio reskin binary" ON)

option(OTIO_SUBMODULE "Automatically build OpenTimelineIO as a submodule" OFF)
option(USE_VCPKG "Use Vcpkg for package management" OFF)
option(BUILD_PYSIDE_WIDGETS "Build xstudio player as PySide widget" OFF)

if(WIN32)
set(CMAKE_CXX_FLAGS_DEBUG "/Zi /Ob0 /Od /Oy-")
set(USE_VCPKG ON)
#include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/vcpkg.cmake)
set(CMAKE_CXX_FLAGS_DEBUG "/Zi /Ob0 /Od /Oy-")
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP>)
# enable UUID System Generator
# enable UUID System Generator
add_definitions(-DUUID_SYSTEM_GENERATOR=ON)
endif()

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")

set(STUDIO_PLUGINS "" CACHE STRING "Enable compilation of SITE plugins")


if (("${CMAKE_GENERATOR}" MATCHES "Makefiles" OR ("${CMAKE_GENERATOR}" MATCHES "Ninja" AND NOT WIN32)) AND NOT __CHECKED_CXX_FLAGS)
set(__CHECKED_CXX_FLAGS TRUE CACHE INTERNAL "Whether we checked the CXX flags already")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMMON_GCC}" CACHE STRING "" FORCE)
Expand All @@ -49,7 +42,12 @@ if (("${CMAKE_GENERATOR}" MATCHES "Makefiles" OR ("${CMAKE_GENERATOR}" MATCHES "
endif()

set(CXXOPTS_BUILD_TESTS OFF CACHE BOOL "Enable or disable cxxopts' tests")
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")

if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic -fdiagnostics-color=always")
endif()

if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic -fmax-errors=5 -fdiagnostics-color=always")
endif()

Expand All @@ -71,9 +69,8 @@ if (NOT ${GCC_MARCH_OVERRIDE} STREQUAL "")
endif()
endif()

if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fpic")
endif()

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fpic")

set(TEST_RESOURCE "${CMAKE_CURRENT_SOURCE_DIR}/test_resource")
set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
Expand Down Expand Up @@ -169,7 +166,7 @@ if(WIN32)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

# When moving to Qt6 or greater, we might be able to use qt_generate_deploy_app_script
#set(deploy_script "${Qt5_DIR}/../../../windeployqt.exe )
#set(deploy_script "${Qt6_DIR}/../../../windeployqt.exe )
endif()

if(MSVC)
Expand All @@ -178,33 +175,46 @@ if(MSVC)

endif()

# Add the necessary libraries from Vcpkg if Vcpkg integration is enabled
if(USE_VCPKG)
if (USE_VCPKG)

# When building with VCPKG, we will use OTIO submodule
set(OTIO_SUBMODULE true)
add_subdirectory("extern/otio")

set(VCPKG_INTEGRATION ON)
# Set Python in VCPKG
set(Python_EXECUTABLE "${VCPKG_DIRECTORY}/../vcpkg_installed/x64-windows/tools/python3/python.exe")

# Install pip and sphinx
find_package(Python COMPONENTS Interpreter Development)

message("Python_RUNTIME_LIBRARY_DIRS ${Python_RUNTIME_LIBRARY_DIRS}")

execute_process(
COMMAND "${CMAKE_COMMAND}" -E env "PATH=${VCPKG_DIRECTORY}/../vcpkg_installed/x64-windows/tools/python3" python.exe -m ensurepip --upgrade
COMMAND "${Python_EXECUTABLE}" -m ensurepip --upgrade
RESULT_VARIABLE ENSUREPIP_RESULT
)

if(ENSUREPIP_RESULT)
message(FATAL_ERROR "Failed to ensurepip.")
else()
execute_process(
COMMAND "${CMAKE_COMMAND}" -E env "PATH=${VCPKG_DIRECTORY}/../vcpkg_installed/x64-windows/tools/python3" python.exe -m pip install setuptools sphinx breathe sphinx-rtd-theme OpenTimelineIO importlib_metadata zipp
COMMAND "${Python_EXECUTABLE}" -m pip install setuptools sphinx breathe sphinx-rtd-theme OpenTimelineIO importlib_metadata zipp
RESULT_VARIABLE PIP_RESULT
)
if(PIP_RESULT)
message(FATAL_ERROR "Failed to install Sphinx using pip.")
endif()
endif()
# append vcpkg packages
list(APPEND CMAKE_PREFIX_PATH "${VCPKG_DIRECTORY}/../vcpkg_installed/x64-windows")


else()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
if(${OTIO_SUBMODULE})
add_subdirectory("extern/otio")
endif()
find_package(PkgConfig REQUIRED)
endif()

# Add the necessary libraries from Vcpkg if Vcpkg integration is enabled

find_package(nlohmann_json CONFIG REQUIRED)
include(CTest)

Expand All @@ -226,59 +236,119 @@ add_subdirectory(src)

if(INSTALL_XSTUDIO)


# add extern libs that are build-time dependencies of xstudio
if (UNIX)
add_subdirectory("extern/reproc")
endif()
add_subdirectory("extern/quickfuture")
add_subdirectory("extern/quickpromise")

add_subdirectory(share/preference)
add_subdirectory(share/snippets)
add_subdirectory(share/fonts)
# build quickpromise
add_subdirectory(extern/quickpromise)
add_subdirectory(extern/quickfuture)

install(DIRECTORY include/xstudio
DESTINATION include)

INSTALL(DIRECTORY extern/ DESTINATION extern)

add_subdirectory(share/preference)
add_subdirectory(share/snippets)
add_subdirectory(share/fonts)

if(BUILD_DOCS)
if(NOT INSTALL_PYTHON_MODULE)
add_subdirectory(python)
endif ()
add_subdirectory(docs)
else()
install(DIRECTORY share/docs/ DESTINATION share/xstudio/docs)
if (APPLE)
install(DIRECTORY share/docs/ DESTINATION ${CMAKE_BINARY_DIR}/xSTUDIO.app/Contents/Resources/docs)
else()
install(DIRECTORY share/docs/ DESTINATION share/xstudio/docs)
endif()
endif ()

include(CMakePackageConfigHelpers)
if (NOT APPLE)

configure_package_config_file(xStudioConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/xStudioConfig.cmake
INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
)
write_basic_package_version_file("xStudioConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
include(CMakePackageConfigHelpers)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/xStudioConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/xStudioConfigVersion.cmake
DESTINATION lib/cmake/${PROJECT_NAME}
)
configure_package_config_file(xStudioConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/xStudioConfig.cmake
INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
)
write_basic_package_version_file("xStudioConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)

install(EXPORT xstudio
DESTINATION lib/cmake/${PROJECT_NAME}
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE xstudio::
EXPORT_LINK_INTERFACE_LIBRARIES
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/xStudioConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/xStudioConfigVersion.cmake
DESTINATION lib/cmake/${PROJECT_NAME}
)

install(EXPORT xstudio
DESTINATION lib/cmake/${PROJECT_NAME}
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE xstudio::
EXPORT_LINK_INTERFACE_LIBRARIES
)

endif()

endif ()

if(USE_VCPKG)
# To provide reliable ordering, we need to make this install script happen in a subdirectory.
# Otherwise, Qt deploy will happen before we have the rest of the application deployed.
add_subdirectory("scripts/qt_install")
endif()
endif()

if (WIN32)

include(InstallRequiredSystemLibraries)

set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_VENDOR "DNEG / Academy Software Foundation")
set (CPACK_NSIS_MUI_ICON
"${CMAKE_CURRENT_SOURCE_DIR}/ui/icons\\\\xstudio_app.ico")
set (CPACK_PACKAGE_NAME "xSTUDIO")
set (CPACK_NSIS_PACKAGE_NAME "xSTUDIO")
set (CPACK_PACKAGE_ICON
"${CMAKE_CURRENT_SOURCE_DIR}/ui/icons\\\\xstudio_app.ico")
set (CPACK_RESOURCE_FILE_LICENSE
"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
set (CPACK_CREATE_DESKTOP_LINKS xstudio)
set (CPACK_NSIS_MENU_LINKS
"share/docs/index.html"
"xSTUDIO Help")

if("${STUDIO_PLUGINS}" STREQUAL "dneg")
# for dneg deployment, we add some CLI args to pick up our customised facility preferences thus:
set(CPACK_NSIS_CREATE_ICONS_EXTRA
"CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\xSTUDIO.lnk' '$INSTDIR\\\\bin\\\\xstudio.exe' '--pref N:\\\\SITE\\\\data\\\\xStudio\\\\dneg_defaults.json --pref N:\\\\SITE\\\\data\\\\xStudio\\\\windows_extra_config\\\\dneg_windows_defaults.json'"
)
else()
set(CPACK_NSIS_CREATE_ICONS_EXTRA
"CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\xSTUDIO.lnk' '$INSTDIR\\\\bin\\\\xstudio.exe'"
)
endif()

#set (CPACK_PACKAGE_EXECUTABLES "xstudio" "xSTUDIO" )

set (CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
WriteRegStr HKCR '.xst' '' 'XStudioSession'
WriteRegStr HKCR 'XStudioSession' '' 'xSTUDIO Session File'
WriteRegStr HKCR 'XStudioSession\\\\shell' '' 'open'
WriteRegStr HKCR 'XStudioSession\\\\DefaultIcon' \\\\
'' '$INSTDIR\\\\bin\\\\xstudio.exe,0'
WriteRegStr HKCR 'XStudioSession\\\\shell\\\\open\\\\command' \\\\
'' '$INSTDIR\\\\bin\\\\xstudio.exe \\"%1\\"'
WriteRegStr HKCR 'XStudioSession\\\\shell\\\\edit' \\\\
'' 'Edit xSTUDIO Session File'
WriteRegStr HKCR 'XStudioSession\\\\shell\\\\edit\\\\command' \\\\
'' '$INSTDIR\\\\bin\\\\xstudio.exe \\"%1\\"'
System::Call \\\\
'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
")

set (CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
DeleteRegKey HKCR '.xst'
DeleteRegKey HKCR 'XStudioSession'
")

include(CPack)
endif()
Loading