diff --git a/CMakeLists.txt b/CMakeLists.txt index de82689..74c5918 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -270,117 +270,122 @@ configure_file( "${PROJECT_BINARY_DIR}/generated/module.cpp" ) -# Packaging -if("${CMAKE_PACKAGE_SUFFIX_OVERRIDE}" STREQUAL "") - set(_PACKAGE_SUFFIX_OVERRIDE "${VERSION_STRING}") -else() - set(_PACKAGE_SUFFIX_OVERRIDE "${CMAKE_PACKAGE_SUFFIX_OVERRIDE}") -endif() -set(_PACKAGE_FULL_NAME "${CMAKE_PACKAGE_PREFIX}/${CMAKE_PACKAGE_NAME}-${_PACKAGE_SUFFIX_OVERRIDE}") - -# Windows -if(WIN32) - ## Installer (InnoSetup) - get_filename_component(ISS_FILES_DIR "${CMAKE_INSTALL_PREFIX}" ABSOLUTE) - file(TO_NATIVE_PATH "${ISS_FILES_DIR}" ISS_FILES_DIR) - get_filename_component(ISS_PACKAGE_DIR "${CMAKE_PACKAGE_PREFIX}" ABSOLUTE) - file(TO_NATIVE_PATH "${ISS_PACKAGE_DIR}" ISS_PACKAGE_DIR) - get_filename_component(ISS_SOURCE_DIR "${PROJECT_SOURCE_DIR}" ABSOLUTE) - file(TO_NATIVE_PATH "${ISS_SOURCE_DIR}" ISS_SOURCE_DIR) - configure_file( - "cmake/installer.iss.in" - "${PROJECT_BINARY_DIR}/installer.iss" - ) - - # Windows Specific Resource Definition - set(PROJECT_PRODUCT_NAME "${PROJECT_FULL_NAME}") - set(PROJECT_COMPANY_NAME "${PROJECT_AUTHORS}") - set(PROJECT_COPYRIGHT "${PROJECT_AUTHORS} © ${PROJECT_COPYRIGHT_YEARS}") - set(PROJECT_LEGAL_TRADEMARKS_1 "") - set(PROJECT_LEGAL_TRADEMARKS_2 "") - - configure_file( - "cmake/version.rc.in" - "${PROJECT_BINARY_DIR}/generated/version.rc" - @ONLY - ) -endif() - -# Download OBS Studio and OBS Dependencies -if(${PropertyPrefix}OBS_DOWNLOAD) - include("DownloadProject") - - set(OBS_DOWNLOAD_VERSION "25.0.3-fe-ci") - if(WIN32) - # Windows - set(OBS_DEPENDENCIES_VERSION "25.0.0") - set(OBS_QT_VERSION "5.10.1") - - download_project( - PROJ libobs - URL https://github.com/Xaymar/obs-studio/releases/download/${OBS_DOWNLOAD_VERSION}/obs-studio-${ARCH}-0.0.0.0-vs2019.7z - UPDATE_DISCONNECTED 1 - ) - - download_project( - PROJ obsdeps - URL https://cdn.xaymar.com/obs/dependencies_${OBS_DEPENDENCIES_VERSION}.7z - UPDATE_DISCONNECTED 1 - ) - elseif(UNIX) - # Unix, Linux - download_project( - PROJ libobs - URL https://github.com/Xaymar/obs-studio/releases/download/${OBS_DOWNLOAD_VERSION}/obs-studio-${ARCH}-0.0.0.0-ubuntu1804.7z - UPDATE_DISCONNECTED 1 - ) - - # Dependencies must be installed like normal OBS Studio - message("Linux builds require your install the necessary development packages, take a look at the obs-studio build guide for them.") +if(NOT TARGET libobs) + # Packaging + if("${CMAKE_PACKAGE_SUFFIX_OVERRIDE}" STREQUAL "") + set(_PACKAGE_SUFFIX_OVERRIDE "${VERSION_STRING}") else() - # Other OS - message(FATAL "Unable to download libOBS as this Operating System is not yet supported.") + set(_PACKAGE_SUFFIX_OVERRIDE "${CMAKE_PACKAGE_SUFFIX_OVERRIDE}") endif() -endif() + set(_PACKAGE_FULL_NAME "${CMAKE_PACKAGE_PREFIX}/${CMAKE_PACKAGE_NAME}-${_PACKAGE_SUFFIX_OVERRIDE}") -# Load OBS Studio & Dependencies -if(${PropertyPrefix}OBS_PACKAGE) - include("${OBS_STUDIO_DIR}/cmake/LibObs/LibObsConfig.cmake") - if (EXISTS "${OBS_STUDIO_DIR}/cmake/obs-frontend-api/obs-frontend-apiConfig.cmake") - include("${OBS_STUDIO_DIR}/cmake/obs-frontend-api/obs-frontend-apiConfig.cmake") - set(HAVE_OBS_FRONTEND TRUE) - endif() -elseif(${PropertyPrefix}OBS_REFERENCE) - set(obsPath "${OBS_STUDIO_DIR}") - include("${OBS_STUDIO_DIR}/cmake/external/FindLibobs.cmake") -elseif(${PropertyPrefix}OBS_DOWNLOAD) - set(_INCLUDE_PREFIX "") + # Windows if(WIN32) - set(_INCLUDE_PREFIX "${libobs_SOURCE_DIR}/cmake") - elseif(UNIX) - set(_INCLUDE_PREFIX "${libobs_SOURCE_DIR}/usr/local/lib/cmake") - else() - endif() - - include("${_INCLUDE_PREFIX}/LibObs/LibObsConfig.cmake") - if (EXISTS "${_INCLUDE_PREFIX}/obs-frontend-api/obs-frontend-apiConfig.cmake") - include("${_INCLUDE_PREFIX}/obs-frontend-api/obs-frontend-apiConfig.cmake") + ## Installer (InnoSetup) + get_filename_component(ISS_FILES_DIR "${CMAKE_INSTALL_PREFIX}" ABSOLUTE) + file(TO_NATIVE_PATH "${ISS_FILES_DIR}" ISS_FILES_DIR) + get_filename_component(ISS_PACKAGE_DIR "${CMAKE_PACKAGE_PREFIX}" ABSOLUTE) + file(TO_NATIVE_PATH "${ISS_PACKAGE_DIR}" ISS_PACKAGE_DIR) + get_filename_component(ISS_SOURCE_DIR "${PROJECT_SOURCE_DIR}" ABSOLUTE) + file(TO_NATIVE_PATH "${ISS_SOURCE_DIR}" ISS_SOURCE_DIR) + get_filename_component(ISS_MSVCHELPER_PATH "${msvc-redist-helper_BUILD_DIR}" ABSOLUTE) + file(TO_NATIVE_PATH "${ISS_MSVCHELPER_PATH}" ISS_MSVCHELPER_PATH) + configure_file( + "cmake/installer.iss.in" + "${PROJECT_BINARY_DIR}/installer.iss" + ) + + # Windows Specific Resource Definition + set(PROJECT_PRODUCT_NAME "${PROJECT_FULL_NAME}") + set(PROJECT_COMPANY_NAME "${PROJECT_AUTHORS}") + set(PROJECT_COPYRIGHT "${PROJECT_AUTHORS} © ${PROJECT_COPYRIGHT_YEARS}") + set(PROJECT_LEGAL_TRADEMARKS_1 "") + set(PROJECT_LEGAL_TRADEMARKS_2 "") + configure_file( + "cmake/version.rc.in" + "${PROJECT_BINARY_DIR}/generated/version.rc" + @ONLY + ) + + endif() + + # Download OBS Studio and OBS Dependencies + if(${PropertyPrefix}OBS_DOWNLOAD) + include("DownloadProject") + + set(OBS_DOWNLOAD_VERSION "25.0.3-fe-ci") if(WIN32) + # Windows + set(OBS_DEPENDENCIES_VERSION "25.0.0") + set(OBS_QT_VERSION "5.10.1") + download_project( - PROJ qt - URL https://cdn.xaymar.com/obs/qt_${OBS_QT_VERSION}.7z + PROJ libobs + URL https://github.com/Xaymar/obs-studio/releases/download/${OBS_DOWNLOAD_VERSION}/obs-studio-${ARCH}-0.0.0.0-vs2019.7z UPDATE_DISCONNECTED 1 ) - set(Qt5_DIR "${qt_SOURCE_DIR}" CACHE STRING "Path to Qt5") - if("${BITS}" STREQUAL "32") - CacheSet(Qt5_DIR "${qt_SOURCE_DIR}/msvc2017/lib/cmake/Qt5/") - else() - CacheSet(Qt5_DIR "${qt_SOURCE_DIR}/msvc2017_64/lib/cmake/Qt5/") - endif() + download_project( + PROJ obsdeps + URL https://cdn.xaymar.com/obs/dependencies_${OBS_DEPENDENCIES_VERSION}.7z + UPDATE_DISCONNECTED 1 + ) + elseif(UNIX) + # Unix, Linux + download_project( + PROJ libobs + URL https://github.com/Xaymar/obs-studio/releases/download/${OBS_DOWNLOAD_VERSION}/obs-studio-${ARCH}-0.0.0.0-ubuntu1804.7z + UPDATE_DISCONNECTED 1 + ) + + # Dependencies must be installed like normal OBS Studio + message("Linux builds require your install the necessary development packages, take a look at the obs-studio build guide for them.") + else() + # Other OS + message(FATAL "Unable to download libOBS as this Operating System is not yet supported.") + endif() + endif() + + # Load OBS Studio & Dependencies + if(${PropertyPrefix}OBS_PACKAGE) + include("${OBS_STUDIO_DIR}/cmake/LibObs/LibObsConfig.cmake") + if (EXISTS "${OBS_STUDIO_DIR}/cmake/obs-frontend-api/obs-frontend-apiConfig.cmake") + include("${OBS_STUDIO_DIR}/cmake/obs-frontend-api/obs-frontend-apiConfig.cmake") + set(HAVE_OBS_FRONTEND TRUE) + endif() + elseif(${PropertyPrefix}OBS_REFERENCE) + set(obsPath "${OBS_STUDIO_DIR}") + include("${OBS_STUDIO_DIR}/cmake/external/FindLibobs.cmake") + elseif(${PropertyPrefix}OBS_DOWNLOAD) + set(_INCLUDE_PREFIX "") + if(WIN32) + set(_INCLUDE_PREFIX "${libobs_SOURCE_DIR}/cmake") + elseif(UNIX) + set(_INCLUDE_PREFIX "${libobs_SOURCE_DIR}/usr/local/lib/cmake") + else() + endif() + + include("${_INCLUDE_PREFIX}/LibObs/LibObsConfig.cmake") + if (EXISTS "${_INCLUDE_PREFIX}/obs-frontend-api/obs-frontend-apiConfig.cmake") + include("${_INCLUDE_PREFIX}/obs-frontend-api/obs-frontend-apiConfig.cmake") + + if(WIN32) + download_project( + PROJ qt + URL https://cdn.xaymar.com/obs/qt_${OBS_QT_VERSION}.7z + UPDATE_DISCONNECTED 1 + ) + + set(Qt5_DIR "${qt_SOURCE_DIR}" CACHE STRING "Path to Qt5") + if("${BITS}" STREQUAL "32") + CacheSet(Qt5_DIR "${qt_SOURCE_DIR}/msvc2017/lib/cmake/Qt5/") + else() + CacheSet(Qt5_DIR "${qt_SOURCE_DIR}/msvc2017_64/lib/cmake/Qt5/") + endif() + endif() + set(HAVE_OBS_FRONTEND TRUE) endif() - set(HAVE_OBS_FRONTEND TRUE) endif() endif() diff --git a/cmake/installer.iss.in b/cmake/installer.iss.in index e9f0c59..428a3c0 100644 --- a/cmake/installer.iss.in +++ b/cmake/installer.iss.in @@ -10,31 +10,41 @@ ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) + +; app Information AppId={{DE56A03A-C8A4-474B-83B0-CFD270262D38}} AppName={#MyAppName} AppVersion={#MyAppVersion} -;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} +AppMutex={#MyAppName} +VersionInfoVersion={#MyAppVersion} +VersionInfoCompany={#MyAppPublisher} +VersionInfoDescription={#MyAppName} Setup +; Compression +Compression=lzma2/ultra64 +SolidCompression=yes +LZMAAlgorithm=1 +; Other Information DefaultDirName={code:GetDirName} DefaultGroupName={#MyAppName} AllowNoIcons=yes LicenseFile="@ISS_SOURCE_DIR@/LICENSE" OutputDir="@ISS_PACKAGE_DIR@" OutputBaseFilename=@CMAKE_PACKAGE_NAME@-@_PACKAGE_SUFFIX_OVERRIDE@ -Compression=lzma -SolidCompression=yes -VersionInfoVersion={#MyAppVersion} -VersionInfoCompany={#MyAppPublisher} -VersionInfoDescription={#MyAppName} Setup +; Wizard Information +WizardStyle=modern +WizardResizable=yes +SetupIconFile="@PROJECT_SOURCE_DIR@/media/icon.ico" [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Files] Source: "@ISS_FILES_DIR@/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "@PROJECT_SOURCE_DIR@/third-party/msvc-redist-helper.exe"; DestDir: "{app}"; DestName: "msvc-redist-helper.exe"; Flags: ignoreversion dontcopy noencryption ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] @@ -93,7 +103,7 @@ begin sUnInstallString := GetUninstallString(); if sUnInstallString <> '' then begin sUnInstallString := RemoveQuotes(sUnInstallString); - if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then + if Exec(sUnInstallString, '/VERYSILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then Result := 3 else Result := 2; @@ -103,6 +113,8 @@ end; ///////////////////////////////////////////////////////////////////// procedure CurStepChanged(CurStep: TSetupStep); +var + ResultCode: Integer; begin if (CurStep=ssInstall) then begin @@ -111,4 +123,9 @@ begin UnInstallOldVersion(); end; end; + if (CurStep=ssPostInstall) then + begin + ExtractTemporaryFile('msvc-redist-helper.exe'); + Exec(ExpandConstant('{tmp}\msvc-redist-helper.exe'), '2019', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); + end; end; diff --git a/media/icon.ico b/media/icon.ico new file mode 100644 index 0000000..6d0dbae Binary files /dev/null and b/media/icon.ico differ diff --git a/third-party/msvc-redist-helper.exe b/third-party/msvc-redist-helper.exe new file mode 100644 index 0000000..e9f7bd6 Binary files /dev/null and b/third-party/msvc-redist-helper.exe differ