Merge branch 'inno-setup'
Vicki Pfau vi@endrift.com
Wed, 03 Oct 2018 16:42:06 -0700
5 files changed,
191 insertions(+),
5 deletions(-)
M
CMakeLists.txt
→
CMakeLists.txt
@@ -1003,6 +1003,26 @@
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/core/flags.h.in ${CMAKE_CURRENT_BINARY_DIR}/flags.h) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/flags.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/mgba COMPONENT lib${BINARY_NAME}) +if(WIN32) + set(BIN_DIR ".\\") + string(REGEX REPLACE "[^-A-Za-z0-9_.]" "-" CLEAN_VERSION_STRING "${VERSION_STRING}") + file(RELATIVE_PATH SETUP_DIR_SLASH "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/setup") + file(RELATIVE_PATH RES_DIR_SLASH "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/res") + string(REPLACE "/" "\\" SETUP_DIR "${SETUP_DIR_SLASH}") + string(REPLACE "/" "\\" RES_DIR "${RES_DIR_SLASH}") + if(CMAKE_SYSTEM_PROCESSOR MATCHES ".*64$") + set(WIN_BITS 64) + else() + set(WIN_BITS 32) + endif() + if(GIT_TAG) + set(IS_RELEASE 1) + else() + set(IS_RELEASE 0) + endif() + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/setup/setup.iss.in" ${CMAKE_CURRENT_BINARY_DIR}/setup.iss) +endif() + # Packaging install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/licenses DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT ${BINARY_NAME}) if(EXTRA_LICENSES)@@ -1025,6 +1045,25 @@ add_custom_command(OUTPUT LICENSE.txt COMMAND ${DOS2UNIX} -n "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt" MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
add_custom_target(CHANGES ALL DEPENDS CHANGES.txt) add_custom_target(LICENSE ALL DEPENDS LICENSE.txt) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CHANGES.txt ${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT ${BINARY_NAME}) + if(DISTBUILD AND WIN32) + set(INSTALLER "${PROJECT_NAME}-setup-${CLEAN_VERSION_STRING}-win${WIN_BITS}.exe") + if(CMAKE_CROSSCOMPILING) + find_program(WINE NAMES wine wine-stable wine-development) + find_file(ISCC ISCC.exe HINTS "$ENV{HOME}/.wine/drive_c/Program Files/") + add_custom_command(OUTPUT ${INSTALLER} + COMMAND "${WINE}" "${ISCC}" setup.iss /Q + DEPENDS ${BINARY_NAME}-qt ${BINARY_NAME}-sdl CHANGES LICENSE) + else() + find_program(ISCC NAMES ISSC ISSC.exe) + add_custom_command(OUTPUT ${INSTALLER} + COMMAND "${ISCC}" setup.iss /Q + DEPENDS ${BINARY_NAME}-qt ${BINARY_NAME}-sdl CHANGES LICENSE) + endif() + if(ISCC) + add_custom_target(installer ALL DEPENDS ${INSTALLER}) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${INSTALLER}" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT installer) + endif() + endif() endif() if(MARKDOWN)@@ -1064,11 +1103,11 @@ add_custom_command(TARGET ${BINARY_NAME} POST_BUILD COMMAND "${STRIP}" -S "$<TARGET_FILE:${BINARY_NAME}>")
install(FILES "$<TARGET_FILE:${BINARY_NAME}>.dSYM" DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME}-dbg) endif() endif() - if(WIN32 OR APPLE) + if(APPLE) set(CPACK_COMPONENTS_ALL ${BINARY_NAME} ${BINARY_NAME}-qt ${BINARY_NAME}-sdl ${BINARY_NAME}-qt-dbg ${BINARY_NAME}-sdl-dbg ${BINARY_NAME}-perf) - if(APPLE) - set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) - endif() + set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) + elseif(WIN32) + set(CPACK_COMPONENTS_ALL ${BINARY_NAME} ${BINARY_NAME}-qt ${BINARY_NAME}-sdl ${BINARY_NAME}-qt-dbg ${BINARY_NAME}-sdl-dbg ${BINARY_NAME}-perf installer) elseif(3DS) set(CPACK_COMPONENTS_ALL ${BINARY_NAME} ${BINARY_NAME}-dbg ${BINARY_NAME}-3ds ${BINARY_NAME}-perf) elseif(WII)@@ -1115,7 +1154,7 @@ cpack_add_component_group(sdl PARENT_GROUP base)
cpack_add_component(${BINARY_NAME}-sdl GROUP sdl) endif() -if(DISTBUILD AND CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") +if(DISTBUILD) cpack_add_component_group(debug PARENT_GROUP dev) if(BUILD_SHARED AND NOT IS_EMBEDDED) cpack_add_component(lib${BINARY_NAME}-dbg GROUP debug)@@ -1128,6 +1167,9 @@ cpack_add_component(${BINARY_NAME}-qt-dbg GROUP debug)
endif() if(SDL_FOUND) cpack_add_component(${BINARY_NAME}-sdl-dbg GROUP debug) + endif() + if(WIN32) + cpack_add_component_group(installer PARENT_GROUP base) endif() endif()
M
src/platform/qt/CMakeLists.txt
→
src/platform/qt/CMakeLists.txt
@@ -347,6 +347,10 @@ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
find_program(BASH bash) install(CODE "execute_process(COMMAND \"${BASH}\" \"${CMAKE_SOURCE_DIR}/tools/deploy-win.sh\" \"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.exe\" \"\${CMAKE_INSTALL_PREFIX}\" \"\$ENV{PWD}\" WORKING_DIRECTORY \"${CMAKE_BINARY_DIR}\")" COMPONENT ${BINARY_NAME}-qt) endif() + if(DISTBUILD) + file(WRITE "portable.ini" "") + install(FILES "portable.ini" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT ${BINARY_NAME}-qt) + endif() endif() if(DISTBUILD AND CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
A
src/platform/windows/setup/setup.iss.in
@@ -0,0 +1,140 @@
+#define AppName "${PROJECT_NAME}" +#define AppName2 "${BINARY_NAME}" +#define VerMajor ${LIB_VERSION_MAJOR} +#define VerMinor ${LIB_VERSION_MINOR} +#define VerRev ${LIB_VERSION_PATCH} +#define VerBuild ${GIT_REV} +#define Release ${IS_RELEASE} +#define WinBits "${WIN_BITS}" +#define VersionString "${VERSION_STRING}" +#define CleanVersionString "${CLEAN_VERSION_STRING}" +#define SetupDir "${SETUP_DIR}" +#define BinDir "${BIN_DIR}" +#define ResDir "${RES_DIR}" + +#define FullVersion ParseVersion('{#AppName}.exe', VerMajor, VerMinor, VerRev, VerBuild) +#define AppVer Str(VerMajor) + "." + Str(VerMinor) + "." + Str(VerRev) + +[Setup] +SourceDir={#BinDir} +SetupIconFile={#SetupDir}\setup.ico +WizardImageFile={#SetupDir}\wizard-image.bmp + +AppName={#AppName} +AppVersion={#AppVer} +AppPublisher=Jeffrey Pfau +AppPublisherURL=https://mgba.io +AppSupportURL=https://mgba.io +AppUpdatesURL=https://mgba.io +AppReadmeFile={#BinDir}\README.html +OutputDir=.\ +DefaultDirName={pf}\{#AppName} +DefaultGroupName={#AppName} +AllowNoIcons=yes +DirExistsWarning=no +ChangesAssociations=True +AppendDefaultDirName=False +UninstallDisplayIcon={app}\{#AppName}.exe +MinVersion=0,6.0 +AlwaysShowDirOnReadyPage=True +UsePreviousSetupType=True +UsePreviousTasks=True +AlwaysShowGroupOnReadyPage=True +LicenseFile={#BinDir}\LICENSE.txt +#if Release + #define IsRelease = 'yes' + AppVerName={#AppName} {#AppVer} +#else + #define IsRelease = 'no' + AppVerName={#AppName} {#VersionString} (Development build) +#endif +#if '{#WinBits}' == '64' + ArchitecturesInstallIn64BitMode=x64 + ArchitecturesAllows=x64 +#endif +OutputBaseFilename={#AppName}-setup-{#CleanVersionString}-win{#WinBits} +UsePreviousLanguage=False +DisableWelcomePage=False +VersionInfoDescription={#AppName} is an open-source Game Boy Advance emulator +VersionInfoCopyright=© 2013–2018 Jeffrey Pfau +VersionInfoProductName={#AppName} +VersionInfoVersion={#AppVer} +Compression=lzma2/ultra64 +SolidCompression=True +VersionInfoTextVersion={#AppVer} +VersionInfoProductVersion={#AppVer} +VersionInfoProductTextVersion={#AppVer} + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" +Name: "french"; MessagesFile: "compiler:Languages\French.isl" +Name: "german"; MessagesFile: "compiler:Languages\German.isl" +Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" +Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" +Name: "gbfileassoc"; Description: "{cm:AssocFileExtension,{#AppName},Game Boy}"; GroupDescription: "{cm:FileAssoc}" +Name: "gbcfileassoc"; Description: "{cm:AssocFileExtension,{#AppName},Game Boy Color}"; GroupDescription: "{cm:FileAssoc}" +Name: "sgbfileassoc"; Description: "{cm:AssocFileExtension,{#AppName},Super Game Boy}"; GroupDescription: "{cm:FileAssoc}" +Name: "gbafileassoc"; Description: "{cm:AssocFileExtension,{#AppName},Game Boy Advance}"; GroupDescription: "{cm:FileAssoc}" + +[Files] +Source: "{#BinDir}\qt\{#AppName}.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "{#BinDir}\sdl\{#AppName2}-sdl.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "{#BinDir}\CHANGES.txt"; DestDir: "{app}\"; Flags: ignoreversion isreadme +Source: "{#BinDir}\LICENSE.txt"; DestDir: "{app}\"; Flags: ignoreversion +Source: "{#ResDir}\nointro.dat"; DestDir: "{app}\"; Flags: ignoreversion +Source: "{#BinDir}\README.html"; DestDir: "{app}\"; Flags: ignoreversion isreadme; Languages: english italian spanish +Source: "{#BinDir}\README_DE.html"; DestDir: "{app}\"; DestName: "LIESMICH.html"; Flags: ignoreversion isreadme; Languages: german +Source: "{#ResDir}\shaders\*"; DestDir: "{app}\shaders\"; Flags: ignoreversion recursesubdirs +Source: "{#ResDir}\licenses\*"; DestDir: "{app}\licenses\"; Flags: ignoreversion recursesubdirs + +[Icons] +Name: "{commonstartmenu}\{#AppName}"; Filename: "{app}\{#AppName}.exe" +Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppName}.exe"; Tasks: desktopicon + +[Run] +Filename: "{app}\{#AppName}.exe"; Description: "{cm:LaunchProgram,{#AppName}}"; Flags: nowait postinstall skipifsilent + +[Dirs] +Name: "{app}" + +[CustomMessages] +english.FileAssoc=Register file associations +french.FileAssoc=Register file associations +italian.FileAssoc=Register file associations +spanish.FileAssoc=Register file associations +german.FileAssoc=Dateierweiterungen registrieren + +[Registry] +Root: HKCR; Subkey: ".gb"; ValueType: string; ValueName: ""; ValueData: "Game Boy ROM"; Flags: uninsdeletevalue; Tasks: gbfileassoc +Root: HKCR; Subkey: ".gb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#AppName}.exe,0"; Tasks: gbfileassoc +Root: HKCR; Subkey: ".gb\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#AppName}.exe"" ""%1"""; Tasks: gbfileassoc +Root: HKCR; Subkey: ".gbc"; ValueType: string; ValueName: ""; ValueData: "Game Boy Color ROM"; Flags: uninsdeletevalue; Tasks: gbcfileassoc +Root: HKCR; Subkey: ".gbc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#AppName}.exe,0"; Tasks: gbcfileassoc +Root: HKCR; Subkey: ".gbc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#AppName}.exe"" ""%1"""; Tasks: gbcfileassoc +Root: HKCR; Subkey: ".sgb"; ValueType: string; ValueName: ""; ValueData: "Super Game Boy ROM"; Flags: uninsdeletevalue; Tasks: sgbfileassoc +Root: HKCR; Subkey: ".sgb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#AppName}.exe,0"; Tasks: sgbfileassoc +Root: HKCR; Subkey: ".sgb\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#AppName}.exe"" ""%1"""; Tasks: sgbfileassoc +Root: HKCR; Subkey: ".gba"; ValueType: string; ValueName: ""; ValueData: "Game Boy Advance ROM"; Flags: uninsdeletevalue; Tasks: gbafileassoc +Root: HKCR; Subkey: ".gba\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#AppName}.exe,0"; Tasks: gbafileassoc +Root: HKCR; Subkey: ".gba\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#AppName}.exe"" ""%1"""; Tasks: gbafileassoc + +[Code] +var + noReleaseWarning: String; + +procedure InitializeWizard(); + begin + if ExpandConstant('{#IsRelease}') = 'no' then + begin + if ExpandConstant('{language}') = 'english' then noReleaseWarning := 'You are about to install a development build of {#AppName}.' + #13#10#13#10 + 'Development builds may contain bugs that are not yet discovered. Please report any issues you can find to the GitHub project page.'; + if ExpandConstant('{language}') = 'french' then noReleaseWarning := 'You are about to install a development build of {#AppName}.' + #13#10#13#10 + 'Development builds may contain bugs that are not yet discovered. Please report any issues you can find to the GitHub project page.'; + if ExpandConstant('{language}') = 'italian' then noReleaseWarning := 'You are about to install a development build of {#AppName}.' + #13#10#13#10 + 'Development builds may contain bugs that are not yet discovered. Please report any issues you can find to the GitHub project page.'; + if ExpandConstant('{language}') = 'spanish' then noReleaseWarning := 'You are about to install a development build of {#AppName}.' + #13#10#13#10 + 'Development builds may contain bugs that are not yet discovered. Please report any issues you can find to the GitHub project page.'; + if ExpandConstant('{language}') = 'german' then noReleaseWarning := 'Sie möchten eine Entwicklerversion von {#AppName} installieren.' + #13#10#13#10 + 'Entwicklerversionen können bislang noch nicht endeckte Fehler beinhalten. Bitte melden Sie alle Fehler, die Sie finden können, auf der GitHub-Projektseite.'; + MsgBox(noReleaseWarning, mbInformation, MB_OK); + end; + end; +end.