From f53ec6999287bfdc4f0dfdb6427baa1853f8952a Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Mon, 15 Jul 2013 23:49:57 +0200 Subject: [PATCH] w32, w64: Add build rule for installer The new rules in Makefile allow building installers for QEMU on Windows using NSIS, a package which is also available for Linux distributions (so cross builds are possible). The rules for NSIS are in qemu.nsi which also uses two new images. Signed-off-by: Stefan Weil --- Makefile | 55 ++++++++++ pc-bios/qemu-nsis.bmp | Bin 0 -> 154542 bytes pc-bios/qemu-nsis.ico | Bin 0 -> 4846 bytes qemu.nsi | 250 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 305 insertions(+) create mode 100644 pc-bios/qemu-nsis.bmp create mode 100644 pc-bios/qemu-nsis.ico create mode 100644 qemu.nsi diff --git a/Makefile b/Makefile index c06bfaba20..29f10436f8 100644 --- a/Makefile +++ b/Makefile @@ -437,6 +437,61 @@ qemu-doc.dvi qemu-doc.html qemu-doc.info qemu-doc.pdf: \ qemu-img.texi qemu-nbd.texi qemu-options.texi \ qemu-monitor.texi qemu-img-cmds.texi +ifdef CONFIG_WIN32 + +INSTALLER = qemu-setup-$(VERSION)$(EXESUF) + +nsisflags = -V2 -NOCD + +ifneq ($(wildcard $(SRC_PATH)/dll),) +ifeq ($(ARCH),x86_64) +# 64 bit executables +DLL_PATH = $(SRC_PATH)/dll/w64 +nsisflags += -DW64 +else +# 32 bit executables +DLL_PATH = $(SRC_PATH)/dll/w32 +endif +endif + +.PHONY: installer +installer: $(INSTALLER) + +INSTDIR=/tmp/qemu-nsis + +$(INSTALLER): $(SRC_PATH)/qemu.nsi + make install prefix=${INSTDIR} +ifdef SIGNCODE + (cd ${INSTDIR}; \ + for i in *.exe; do \ + $(SIGNCODE) $${i}; \ + done \ + ) +endif # SIGNCODE + (cd ${INSTDIR}; \ + for i in qemu-system-*.exe; do \ + arch=$${i%.exe}; \ + arch=$${arch#qemu-system-}; \ + echo Section \"$$arch\" Section_$$arch; \ + echo SetOutPath \"\$$INSTDIR\"; \ + echo File \"\$${BINDIR}\\$$i\"; \ + echo SectionEnd; \ + done \ + ) >${INSTDIR}/system-emulations.nsh + makensis $(nsisflags) \ + $(if $(BUILD_DOCS),-DCONFIG_DOCUMENTATION="y") \ + $(if $(CONFIG_GTK),-DCONFIG_GTK="y") \ + -DBINDIR="${INSTDIR}" \ + $(if $(DLL_PATH),-DDLLDIR="$(DLL_PATH)") \ + -DSRCDIR="$(SRC_PATH)" \ + -DOUTFILE="$(INSTALLER)" \ + $(SRC_PATH)/qemu.nsi + rm -r ${INSTDIR} +ifdef SIGNCODE + $(SIGNCODE) $(INSTALLER) +endif # SIGNCODE +endif # CONFIG_WIN + # Add a dependency on the generated files, so that they are always # rebuilt before other object files ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail)) diff --git a/pc-bios/qemu-nsis.bmp b/pc-bios/qemu-nsis.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ae82cd2697ab688137c1758c724c2e2597cf8121 GIT binary patch literal 154542 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 Tf@p9D6%@V?nE!+L&~OI;Cmz*e literal 0 HcmV?d00001 diff --git a/qemu.nsi b/qemu.nsi new file mode 100644 index 0000000000..1d57455956 --- /dev/null +++ b/qemu.nsi @@ -0,0 +1,250 @@ +;!/usr/bin/makensis + +; This NSIS script creates an installer for QEMU on Windows. + +; Copyright (C) 2006-2012 Stefan Weil +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 2 of the License, or +; (at your option) version 3 or any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program. If not, see . + +; NSIS_WIN32_MAKENSIS + +!define PRODUCT "QEMU" +!define URL "http://www.qemu.org/" + +!define UNINST_EXE "$INSTDIR\qemu-uninstall.exe" +!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}" + +!ifndef BINDIR +!define BINDIR nsis.tmp +!endif +!ifndef SRCDIR +!define SRCDIR . +!endif +!ifndef OUTFILE +!define OUTFILE "qemu-setup.exe" +!endif + +; Optionally install documentation. +!ifndef CONFIG_DOCUMENTATION +!define CONFIG_DOCUMENTATION +!endif + +; Use maximum compression. +SetCompressor /SOLID lzma + +!include "MUI2.nsh" + +; The name of the installer. +Name "QEMU" + +; The file to write +OutFile "${OUTFILE}" + +; The default installation directory. +!ifdef W64 +InstallDir $PROGRAMFILES64\qemu +!else +InstallDir $PROGRAMFILES\qemu +!endif + +; Registry key to check for directory (so if you install again, it will +; overwrite the old one automatically) +InstallDirRegKey HKLM "Software\qemu" "Install_Dir" + +; Request administrator privileges for Windows Vista. +RequestExecutionLevel admin + +;-------------------------------- +; Interface Settings. +;!define MUI_HEADERIMAGE "qemu-nsis.bmp" +; !define MUI_SPECIALBITMAP "qemu.bmp" +!define MUI_ICON "${SRCDIR}\pc-bios\qemu-nsis.ico" +!define MUI_UNICON "${SRCDIR}\pc-bios\qemu-nsis.ico" +!define MUI_WELCOMEFINISHPAGE_BITMAP "${SRCDIR}\pc-bios\qemu-nsis.bmp" +; !define MUI_HEADERIMAGE_BITMAP "qemu-install.bmp" +; !define MUI_HEADERIMAGE_UNBITMAP "qemu-uninstall.bmp" +; !define MUI_COMPONENTSPAGE_SMALLDESC +; !define MUI_WELCOMEPAGE_TEXT "Insert text here.$\r$\n$\r$\n$\r$\n$_CLICK" + +;-------------------------------- +; Pages. + +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_LICENSE "${SRCDIR}\COPYING" +!insertmacro MUI_PAGE_COMPONENTS +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES +!define MUI_FINISHPAGE_LINK "Visit the QEMU Wiki online!" +!define MUI_FINISHPAGE_LINK_LOCATION "${URL}" +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +; Languages. + +!insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "French" +!insertmacro MUI_LANGUAGE "German" + +;-------------------------------- + +; The stuff to install. +Section "${PRODUCT} (required)" + + SectionIn RO + + ; Set output path to the installation directory. + SetOutPath "$INSTDIR" + + File "${SRCDIR}\Changelog" + File "${SRCDIR}\COPYING" + File "${SRCDIR}\COPYING.LIB" + File "${SRCDIR}\README" + File "${SRCDIR}\VERSION" + + File "${BINDIR}\*.bmp" + File "${BINDIR}\*.bin" + File "${BINDIR}\*.dtb" + File "${BINDIR}\*.rom" + File "${BINDIR}\openbios-*" + + File /r "${BINDIR}\keymaps" +!ifdef CONFIG_GTK + File /r "${BINDIR}\share" +!endif + +!ifdef W64 + SetRegView 64 +!endif + + ; Write the installation path into the registry + WriteRegStr HKLM SOFTWARE\${PRODUCT} "Install_Dir" "$INSTDIR" + + ; Write the uninstall keys for Windows + WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "QEMU" + WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" '"${UNINST_EXE}"' + WriteRegDWORD HKLM "${UNINST_KEY}" "NoModify" 1 + WriteRegDWORD HKLM "${UNINST_KEY}" "NoRepair" 1 + WriteUninstaller "qemu-uninstall.exe" +SectionEnd + +Section "Tools" SectionTools + SetOutPath "$INSTDIR" + File "${BINDIR}\qemu-img.exe" + File "${BINDIR}\qemu-io.exe" +SectionEnd + +SectionGroup "System Emulations" SectionSystem + +!include "${BINDIR}\system-emulations.nsh" + +SectionGroupEnd + +!ifdef DLLDIR +Section "Libraries (DLL)" SectionDll + SetOutPath "$INSTDIR" + File "${DLLDIR}\*.dll" +SectionEnd +!endif + +!ifdef CONFIG_DOCUMENTATION +Section "Documentation" SectionDoc + SetOutPath "$INSTDIR" + File "${BINDIR}\qemu-doc.html" + File "${BINDIR}\qemu-tech.html" + CreateDirectory "$SMPROGRAMS\${PRODUCT}" + CreateShortCut "$SMPROGRAMS\${PRODUCT}\User Documentation.lnk" "$INSTDIR\qemu-doc.html" "" "$INSTDIR\qemu-doc.html" 0 + CreateShortCut "$SMPROGRAMS\${PRODUCT}\Technical Documentation.lnk" "$INSTDIR\qemu-tech.html" "" "$INSTDIR\qemu-tech.html" 0 +SectionEnd +!endif + +; Optional section (can be disabled by the user) +Section "Start Menu Shortcuts" SectionMenu + CreateDirectory "$SMPROGRAMS\${PRODUCT}" + CreateShortCut "$SMPROGRAMS\${PRODUCT}\Uninstall.lnk" "${UNINST_EXE}" "" "${UNINST_EXE}" 0 +SectionEnd + +;-------------------------------- + +; Uninstaller + +Section "Uninstall" + ; Remove registry keys +!ifdef W64 + SetRegView 64 +!endif + DeleteRegKey HKLM "${UNINST_KEY}" + DeleteRegKey HKLM SOFTWARE\${PRODUCT} + + ; Remove shortcuts, if any + Delete "$SMPROGRAMS\${PRODUCT}\User Documentation.lnk" + Delete "$SMPROGRAMS\${PRODUCT}\Technical Documentation.lnk" + Delete "$SMPROGRAMS\${PRODUCT}\Uninstall.lnk" + RMDir "$SMPROGRAMS\${PRODUCT}" + + ; Remove files and directories used + Delete "$INSTDIR\Changelog" + Delete "$INSTDIR\COPYING" + Delete "$INSTDIR\COPYING.LIB" + Delete "$INSTDIR\README" + Delete "$INSTDIR\VERSION" + Delete "$INSTDIR\*.bmp" + Delete "$INSTDIR\*.bin" + Delete "$INSTDIR\*.dll" + Delete "$INSTDIR\*.dtb" + Delete "$INSTDIR\*.rom" + Delete "$INSTDIR\openbios-*" + Delete "$INSTDIR\qemu-img.exe" + Delete "$INSTDIR\qemu-io.exe" + Delete "$INSTDIR\qemu.exe" + Delete "$INSTDIR\qemu-system-*.exe" + Delete "$INSTDIR\qemu-doc.html" + Delete "$INSTDIR\qemu-tech.html" + RMDir /r "$INSTDIR\keymaps" + RMDir /r "$INSTDIR\share" + ; Remove generated files + Delete "$INSTDIR\stderr.txt" + Delete "$INSTDIR\stdout.txt" + ; Remove uninstaller + Delete "${UNINST_EXE}" + RMDir "$INSTDIR" +SectionEnd + +;-------------------------------- + +; Descriptions (mouse-over). +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SectionSystem} "System emulation." + !insertmacro MUI_DESCRIPTION_TEXT ${Section_alpha} "Alpha system emulation." + !insertmacro MUI_DESCRIPTION_TEXT ${Section_alphaw} "Alpha system emulation (GUI)." + !insertmacro MUI_DESCRIPTION_TEXT ${Section_i386} "PC i386 system emulation." + !insertmacro MUI_DESCRIPTION_TEXT ${Section_i386w} "PC i386 system emulation (GUI)." + !insertmacro MUI_DESCRIPTION_TEXT ${SectionTools} "Tools." +!ifdef DLLDIR + !insertmacro MUI_DESCRIPTION_TEXT ${SectionDll} "Runtime Libraries (DLL)." +!endif +!ifdef CONFIG_DOCUMENTATION + !insertmacro MUI_DESCRIPTION_TEXT ${SectionDoc} "Documentation." +!endif + !insertmacro MUI_DESCRIPTION_TEXT ${SectionMenu} "Menu entries." +!insertmacro MUI_FUNCTION_DESCRIPTION_END + +;-------------------------------- +; Functions. + +Function .onInit + !insertmacro MUI_LANGDLL_DISPLAY +FunctionEnd