From: Peter de Ridder Date: Tue, 26 Apr 2011 23:42:47 +0000 (+0200) Subject: Provide build scripts for win32 releases X-Git-Url: https://spindle.queued.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d36e12f21d297b6ca5bf0daa38b452fccdf318d8;p=midori Provide build scripts for win32 releases --- diff --git a/win32/README_OPENSUSE_MINGW.txt b/win32/README_OPENSUSE_MINGW.txt new file mode 100644 index 00000000..ed8a59ad --- /dev/null +++ b/win32/README_OPENSUSE_MINGW.txt @@ -0,0 +1,92 @@ +This file is licensed under the terms of the LGPL 2.1, see the file COPYING. + + FILES + +README.txt This file, explaining how to build Midori. +midori-0.3.3.nsi The NSIS installer creation script. + +packages.list The suse mingw packages required to build Midori. +x86-mingw32-opensuse/ Install and update script for the opensuse repository. + +makedist/ Scripts to create distribution package + from cross-compiled binaries and libs. + +crossconfig.sh Setup environment for cross build and run + configure script for cross build. + + + INTRODUCTION + +This document will explain how to get Midori compiling for windows, hopefully. + + + REQUIREMENTS + +A working tool chain with the mingw compiler is required. This can either be +native in Windows or a cross-chain. +This tool chain must have the following applications and all applications +needed to build Midori: +- basename, for x86-mingw32-opensuse +- bash, for the shell scripts +- cat, for makedist.midori +- cp, for x86-mingw32-opensuse and makedist.midori +- cpio, for x86-mingw32-opensuse +- echo, for x86-mingw32-opensuse and makedist.midori +- find, for makedist.midori +- git, to get the development sources +- grep, for makedist.midori +- gunzip, for x86-mingw32-opensuse +- head, for x86-mingw32-opensuse +- ls, for makedist.midori +- mkdir, for x86-mingw32-opensuse and makedist.midori +- mktemp, for makedist.midori +- pwd, for makedist.midori +- rm, for x86-mingw32-opensuse and makedist.midori +- rmdir, for makedist.midori +- rpm2cpio, for x86-mingw32-opensuse +- sed, for x86-mingw32-opensuse +- sha1sum, for makedist.midori +- sort, for x86-mingw32-opensuse and makedist.midori +- strings, for makedist.midori +- tar, to unpack the scripts +- touch, for x86-mingw32-opensuse +- uniq, for makedist.midori +- wget, for x86-mingw32-opensuse +- xmlgrep, for x86-mingw32-opensuse +- zip, for makedist.midori + + + PREPARATIONS + +Install all the packages needed by Midori and its dependencies. There are two +ways to do this. Automatically install the dependencies from opensuse.org or +manually install them. +To automatically install the packages use the scripts and change configuration +in header of install.sh file where needed. And run ./install.sh to install all +necessary packages. +This script can be also invoked with "update" argument ./install.sh update +to update the installed packages to newer versions. +To install the dependencies manually install the packages in packages.list. +This are all the packages needed by Midori and its dependencies. + +Get the Midori sources. Either use git to get them or download a snapshot or a +release. See http://git.xfce.org/apps/midori or +http://archive.xfce.org/src/apps/midori/ + + + BUILDING + +Read the instruction in the source tree. For cross compiling the script +crossconfig.sh might help. + + + DISTRIBUTION + +To create a Windows installer for Midori you need NSIS. See +http://nsis.sourceforge.net/Main_Page +Use the makedist.midori script to get all files needed for distribution. Add +the version number as argument to makedist.midori to create a version number +in the distribution package. eg. ./makedist.midori -0.3.3 +To complete the installer unzip the file created by the makedist script. +Compile midori-0.3.3.nsi with NSIS. + diff --git a/win32/crossconfig.sh b/win32/crossconfig.sh new file mode 100644 index 00000000..276bcc9a --- /dev/null +++ b/win32/crossconfig.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +# Copyright (C) 2010-2011 Peter de Ridder +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# See the file COPYING for the full license text. + +export MINGW_PREFIX=/usr/i686-pc-mingw32/sys-root/mingw +export PATH=$MINGW_PREFIX/bin:$PATH +export PKG_CONFIG_PATH=$MINGW_PREFIX/lib/pkgconfig +export PKG_CONFIG_LIBDIR= +export MINGW_BUILD=`gcc -dumpmachine` +export MINGW_TARGET=i386-mingw32 + +CC=i386-mingw32-gcc ./configure --prefix=$MINGW_PREFIX $@ + diff --git a/win32/makedist/dll-recursive.sh b/win32/makedist/dll-recursive.sh new file mode 100644 index 00000000..94424903 --- /dev/null +++ b/win32/makedist/dll-recursive.sh @@ -0,0 +1,31 @@ +#! /bin/sh + +# Copyright (C) 2010-2011 Peter de Ridder +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# See the file COPYING for the full license text. + +temp_file_new=`mktemp` +temp_file_old=`mktemp` + +while [ "$1" ] +do + echo $1 >> $temp_file_new + shift +done + +while [ "x`sha1sum - < $temp_file_new`" != "x`sha1sum - < $temp_file_old`" ] +do + files=`cat $temp_file_new $temp_file_old | sort | uniq -u` + cp $temp_file_new $temp_file_old + strings $files 2> /dev/null | grep \\.dll | cat - $temp_file_old | sort | uniq > $temp_file_new +done + +cat $temp_file_new + +rm $temp_file_new $temp_file_old + diff --git a/win32/makedist/makedist.midori b/win32/makedist/makedist.midori new file mode 100644 index 00000000..e9732c85 --- /dev/null +++ b/win32/makedist/makedist.midori @@ -0,0 +1,96 @@ +#! /bin/sh + +# Copyright (C) 2010-2011 Peter de Ridder +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# See the file COPYING for the full license text. + +# a bit of configuration +root_dir=$MINGW_PREFIX +script_dir=$PWD + +# create temporary working directory +temp_dir=`mktemp -d` + +# generate unique filename +ARCHIVE=midori$1-`date +%Y%m%d%H%M`.zip + +echo -n "Creating $ARCHIVE ." + +# create destination folder +mkdir $temp_dir/midori$1 + +echo -n . + +# auto generate dll list, only of existing files +pushd $root_dir/bin > /dev/null +$script_dir/dll-recursive.sh midori*.exe gspawn-*-helper*.exe libhunspell*.dll > $temp_dir/midori.exe.lst +files=`ls | cat - $temp_dir/midori.exe.lst | sort | uniq -d` +rm $temp_dir/midori.exe.lst +popd > /dev/null + +echo -n . + +# copy auto generate dll list +pushd $root_dir/bin > /dev/null +mkdir $temp_dir/midori$1/bin +cp $files $temp_dir/midori$1/bin +popd > /dev/null + +echo -n . + +# copy etc +pushd $root_dir > /dev/null +find etc "(" -name "*midori*" -o -name "gtkrc" ")" -prune -exec mkdir -p $temp_dir/midori$1/{} ";" -exec rmdir --ignore-fail-on-non-empty $temp_dir/midori$1/{} ";" -exec cp -r {} $temp_dir/midori$1/{} ";" +popd > /dev/null + +echo -n . + +# copy lib +pushd $root_dir > /dev/null +find lib "(" -path "lib/midori/*" -o -path "lib/gtk-2.0/*" -o -path "lib/enchant/*" -o -path "lib/engines/*" ")" -a -name "*.dll" -prune -exec mkdir -p $temp_dir/midori$1/{} ";" -exec rmdir --ignore-fail-on-non-empty $temp_dir/midori$1/{} ";" -exec cp -r {} $temp_dir/midori$1/{} ";" +popd > /dev/null + +echo -n . + +# copy share +pushd $root_dir > /dev/null +find share "(" -name "*midori*" -o -name "icons" -o -name "MS-Windows" -o -name "mime" ")" -prune -exec mkdir -p $temp_dir/midori$1/{} ";" -exec rmdir --ignore-fail-on-non-empty $temp_dir/midori$1/{} ";" -exec cp -r {} $temp_dir/midori$1/{} ";" + +# copy locales for gtk +# so we have translated stock items, file dialogs + +find share "(" -name "midori.mo" ")" > locale.list +mkdir -p $temp_dir/midori$1/share/locale/ +for LOCALE in $(cat locale.list); do + LOCALE=$(echo $LOCALE|awk -F/ '{print $3}') + cp /usr/share/locale/$LOCALE/LC_MESSAGES/gtk20.mo $temp_dir/midori$1/share/locale/$LOCALE/LC_MESSAGES/ +done +rm locale.list +popd > /dev/null + +echo -n . + +# copy doc files to root +cp $temp_dir/midori$1/share/doc/midori/{COPYING,AUTHORS} $temp_dir/midori$1 + +echo -n . + +ARCHIVE=`pwd`/$ARCHIVE + +# store as tar.bz2 file +pushd $temp_dir > /dev/null +zip -rq $ARCHIVE midori$1 +popd > /dev/null + +echo -n . + +# remove working directory +rm -r $temp_dir + +echo " ready" + diff --git a/win32/makedist/midori-0.3.3.nsi b/win32/makedist/midori-0.3.3.nsi new file mode 100644 index 00000000..cb19b2b2 --- /dev/null +++ b/win32/makedist/midori-0.3.3.nsi @@ -0,0 +1,664 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Copyright (C) 2009 Enrico Tröger +; 2010-2011 Peter de Ridder +; +; This library is free software; you can redistribute it and/or +; modify it under the terms of the GNU Lesser General Public +; License as published by the Free Software Foundation; either +; version 2.1 of the License, or (at your option) any later version. +; +; See the file COPYING for the full license text. +; +; Installer script for Midori (Windows Installer) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +; Do a Cyclic Redundancy Check to make sure the installer was not corrupted by the download +CRCCheck force +RequestExecutionLevel user ; set execution level for Windows Vista + +;;;;;;;;;;;;;;;;;;; +; helper defines ; +;;;;;;;;;;;;;;;;;;; +!define PRODUCT_NAME "Midori" +!define PRODUCT_VERSION "0.3.3" +!define PRODUCT_BUILD "0" +!define PRODUCT_VERSION_ID "${PRODUCT_VERSION}.${PRODUCT_BUILD}" +!define PRODUCT_PUBLISHER "Christian Dywan" +!define PRODUCT_WEB_SITE "http://www.twotoasts.de/" +!define PRODUCT_DIR_REGKEY "Software\${PRODUCT_NAME}" +!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" +!define PRODUCT_BROWER_KEY "Software\Clients\StartMenuInternet" +!define PRODUCT_EXE "$INSTDIR\bin\midori.exe" +!define UNINSTALL_EXE "$INSTDIR\uninst.exe" +!define RESOURCEDIR "midori-${PRODUCT_VERSION}" + +;;;;;;;;;;;;;;;;;;;;; +; Version resource ; +;;;;;;;;;;;;;;;;;;;;; +VIProductVersion "${PRODUCT_VERSION_ID}" +VIAddVersionKey "ProductName" "${PRODUCT_NAME}" +VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}" +VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}" +VIAddVersionKey "LegalCopyright" "Copyright 2009 by Christian Dywan" +VIAddVersionKey "FileDescription" "${PRODUCT_NAME} Installer" + +BrandingText "$(^NAME) installer (NSIS ${NSIS_VERSION})" +InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" +Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" +SetCompressor /SOLID lzma +ShowInstDetails hide +ShowUnInstDetails hide +XPStyle on +OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}_setup.exe" + +Var Answer +Var UserName +Var StartmenuFolder +Var UNINSTDIR +Var DefaultBrowser + +;;;;;;;;;;;;;;;; +; MUI Settings ; +;;;;;;;;;;;;;;;; +!include "MUI2.nsh" + +!define MUI_ABORTWARNING +!define MUI_ICON "midori.ico" +!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico" + +; Welcome page +!insertmacro MUI_PAGE_WELCOME +; License page +;!define MUI_LICENSEPAGE_RADIOBUTTONS +!insertmacro MUI_PAGE_LICENSE "${RESOURCEDIR}\COPYING" +; Components page +!insertmacro MUI_PAGE_COMPONENTS +; Directory page +!define MUI_PAGE_CUSTOMFUNCTION_LEAVE OnDirLeave +!insertmacro MUI_PAGE_DIRECTORY +; Start menu page +!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Midori" +!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM +!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" +!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" +!insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} "$StartmenuFolder" +; Instfiles page +!insertmacro MUI_PAGE_INSTFILES +; Finish page +!define MUI_FINISHPAGE_RUN "${PRODUCT_EXE}" +!define MUI_FINISHPAGE_RUN_NOTCHECKED +!define MUI_FINISHPAGE_NOREBOOTSUPPORT +!insertmacro MUI_PAGE_FINISH + +; Uninstaller page +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES +!insertmacro MUI_UNPAGE_FINISH + +; Language file +!insertmacro MUI_LANGUAGE "English" + +;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Sections and InstTypes ; +;;;;;;;;;;;;;;;;;;;;;;;;;;; +InstType "Full" +InstType "Minimal" + +Section "!Program Files" SEC01 + SectionIn RO 1 2 + SetOverwrite ifnewer + + SetOutPath "$INSTDIR" + File "${RESOURCEDIR}\*" + + SetOutPath "$INSTDIR\bin" + File /r "${RESOURCEDIR}\bin\*" + + SetOutPath "$INSTDIR\etc" + File /r "${RESOURCEDIR}\etc\*" + + SetOutPath "$INSTDIR\lib" + File /r /x "midori" "${RESOURCEDIR}\lib\*" + + SetOutPath "$INSTDIR\share" + File /r /x "locale" /x "user" /x "Tango" "${RESOURCEDIR}\share\*" + + SetOutPath "$INSTDIR\share\icons\Tango" + File "${RESOURCEDIR}\share\icons\Tango\index.theme" + + SetOutPath "$INSTDIR" + CreateShortCut "$INSTDIR\Midori.lnk" "${PRODUCT_EXE}" + + !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME} + CreateDirectory "$SMPROGRAMS\$StartmenuFolder" + CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Midori.lnk" "${PRODUCT_EXE}" + !insertmacro MUI_STARTMENU_WRITE_END +SectionEnd + +Section "Extensions" SEC04 + SectionIn 1 + SetOverwrite ifnewer + SetOutPath "$INSTDIR\lib" + File /r "${RESOURCEDIR}\lib\midori" +SectionEnd + +Section "Language Files" SEC02 + SectionIn 1 + SetOutPath "$INSTDIR\share" + File /r "${RESOURCEDIR}\share\locale" +SectionEnd + +Section "FAQ" SEC06 + SectionIn 1 + SetOutPath "$INSTDIR\share\doc\midori" + File "${RESOURCEDIR}\share\doc\midori\faq.css" + File "${RESOURCEDIR}\share\doc\midori\faq.html" +SectionEnd + +!macro InstallTangoIconRenameSmall OPath IPath + File "/oname=16x16\${OPath}.png" "${RESOURCEDIR}\share\icons\Tango\16x16\${IPath}.png" + File "/oname=22x22\${OPath}.png" "${RESOURCEDIR}\share\icons\Tango\22x22\${IPath}.png" + File "/oname=32x32\${OPath}.png" "${RESOURCEDIR}\share\icons\Tango\32x32\${IPath}.png" +!macroend + +!macro InstallTangoIconRename OPath IPath + !insertmacro InstallTangoIconRenameSmall ${OPath} ${IPath} + File "/oname=48x48\${OPath}.png" "${RESOURCEDIR}\share\icons\Tango\48x48\${IPath}.png" + File /nonfatal "/oname=64x64\${OPath}.png" "${RESOURCEDIR}\share\icons\Tango\64x64\${IPath}.png" + File /nonfatal "/oname=72x72\${OPath}.png" "${RESOURCEDIR}\share\icons\Tango\72x72\${IPath}.png" + File /nonfatal "/oname=96x96\${OPath}.png" "${RESOURCEDIR}\share\icons\Tango\96x96\${IPath}.png" + File /nonfatal "/oname=128x128\${OPath}.png" "${RESOURCEDIR}\share\icons\Tango\128x128\${IPath}.png" + File "/oname=scalable\${OPath}.svg" "${RESOURCEDIR}\share\icons\Tango\scalable\${IPath}.svg" + File /nonfatal "/oname=scalable\${OPath}.icon" "${RESOURCEDIR}\share\icons\Tango\scalable\${IPath}.icon" +!macroend + +!macro InstallTangoIconSmall IconPath + !insertmacro InstallTangoIconRenameSmall ${IconPath} ${IconPath} +!macroend + +!macro InstallTangoIcon IconPath + !insertmacro InstallTangoIconRename ${IconPath} ${IconPath} +!macroend + +!macro CreateTangoSectionsSmall SectionPath + CreateDirectory "$INSTDIR\share\icons\Tango\16x16\${SectionPath}" + CreateDirectory "$INSTDIR\share\icons\Tango\22x22\${SectionPath}" + CreateDirectory "$INSTDIR\share\icons\Tango\32x32\${SectionPath}" +!macroend + +!macro CreateTangoSections SectionPath + !insertmacro CreateTangoSectionsSmall ${SectionPath} + CreateDirectory "$INSTDIR\share\icons\Tango\48x48\${SectionPath}" + CreateDirectory "$INSTDIR\share\icons\Tango\64x64\${SectionPath}" + CreateDirectory "$INSTDIR\share\icons\Tango\72x72\${SectionPath}" + CreateDirectory "$INSTDIR\share\icons\Tango\96x96\${SectionPath}" + CreateDirectory "$INSTDIR\share\icons\Tango\128x128\${SectionPath}" + CreateDirectory "$INSTDIR\share\icons\Tango\scalable\${SectionPath}" +!macroend + +Section "Tango icons" SEC07 + SectionIn 1 + SetOutPath "$INSTDIR\share\icons\Tango" + + !insertmacro CreateTangoSections "actions" + !insertmacro CreateTangoSectionsSmall "animations" + !insertmacro CreateTangoSections "apps" + !insertmacro CreateTangoSections "categories" + !insertmacro CreateTangoSections "devices" + !insertmacro CreateTangoSections "emblems" + !insertmacro CreateTangoSections "emotes" + !insertmacro CreateTangoSections "mimetypes" + !insertmacro CreateTangoSections "places" + !insertmacro CreateTangoSections "status" + + !insertmacro InstallTangoIcon "actions\gtk-add" + !insertmacro InstallTangoIcon "actions\gtk-bold" + !insertmacro InstallTangoIcon "actions\gtk-cancel" + !insertmacro InstallTangoIcon "actions\gtk-cancel" + !insertmacro InstallTangoIcon "actions\gtk-clear" + !insertmacro InstallTangoIcon "actions\gtk-copy" + !insertmacro InstallTangoIcon "actions\gtk-cut" + !insertmacro InstallTangoIcon "actions\gtk-delete" + !insertmacro InstallTangoIcon "actions\gtk-find" + !insertmacro InstallTangoIcon "actions\gtk-fullscreen" + !insertmacro InstallTangoIcon "actions\gtk-go-back-ltr" + !insertmacro InstallTangoIcon "actions\gtk-go-back-ltr" + !insertmacro InstallTangoIcon "actions\gtk-go-down" + !insertmacro InstallTangoIcon "actions\gtk-go-forward-ltr" + !insertmacro InstallTangoIcon "actions\gtk-go-forward-ltr" + !insertmacro InstallTangoIcon "actions\gtk-go-up" + !insertmacro InstallTangoIcon "actions\gtk-goto-first-ltr" + !insertmacro InstallTangoIcon "actions\gtk-goto-first-ltr" + !insertmacro InstallTangoIcon "actions\gtk-goto-last-ltr" + !insertmacro InstallTangoIcon "actions\gtk-goto-last-ltr" + !insertmacro InstallTangoIcon "actions\gtk-home" + !insertmacro InstallTangoIcon "actions\gtk-indent-ltr" + !insertmacro InstallTangoIcon "actions\gtk-indent-rtl" + !insertmacro InstallTangoIcon "actions\gtk-italic" + !insertmacro InstallTangoIcon "actions\gtk-jump-to-ltr" + !insertmacro InstallTangoIcon "actions\gtk-jump-to-ltr" + !insertmacro InstallTangoIcon "actions\gtk-media-next-ltr" + !insertmacro InstallTangoIcon "actions\gtk-media-next-rtl" + !insertmacro InstallTangoIcon "actions\gtk-media-previous-ltr" + !insertmacro InstallTangoIcon "actions\gtk-media-previous-rtl" + !insertmacro InstallTangoIcon "actions\gtk-open" + !insertmacro InstallTangoIcon "actions\gtk-paste" + !insertmacro InstallTangoIcon "actions\gtk-print" + !insertmacro InstallTangoIcon "actions\gtk-properties" + !insertmacro InstallTangoIcon "actions\gtk-redo-ltr" + !insertmacro InstallTangoIcon "actions\gtk-refresh" + !insertmacro InstallTangoIcon "actions\gtk-remove" + !insertmacro InstallTangoIcon "actions\gtk-save" + !insertmacro InstallTangoIcon "actions\gtk-save-as" + !insertmacro InstallTangoIcon "actions\gtk-select-all" + !insertmacro InstallTangoIcon "actions\gtk-stop" + !insertmacro InstallTangoIcon "actions\gtk-underline" + !insertmacro InstallTangoIcon "actions\gtk-undo-ltr" + !insertmacro InstallTangoIcon "actions\stock_add-bookmark" + !insertmacro InstallTangoIcon "actions\stock_new-tab" + !insertmacro InstallTangoIcon "actions\stock_new-window" + !insertmacro InstallTangoIconSmall "animations\process-working" + !insertmacro InstallTangoIcon "apps\gnome-settings-theme" + !insertmacro InstallTangoIcon "apps\gtk-help" + !insertmacro InstallTangoIcon "apps\terminal" + !insertmacro InstallTangoIcon "apps\web-browser" + !insertmacro InstallTangoIcon "categories\gtk-preferences" + #!insertmacro InstallTangoIcon "cookie-manager" + #!insertmacro InstallTangoIcon "document-open-recent" + #!insertmacro InstallTangoIcon "extention" + #!insertmacro InstallTangoIcon "feed-panel" + #!insertmacro InstallTangoIcon "gtk-about" + #!insertmacro InstallTangoIcon "gtk-close" + #!insertmacro InstallTangoIcon "gtk-convert" + #!insertmacro InstallTangoIcon "gtk-dialog-authentication" + #!insertmacro InstallTangoIcon "gtk-dnd-multiple" + #!insertmacro InstallTangoIcon "gtk-edit" + #!insertmacro InstallTangoIcon "gtk-execute" + #!insertmacro InstallTangoIcon "gtk-file" + #!insertmacro InstallTangoIcon "gtk-index" + #!insertmacro InstallTangoIcon "gtk-info" + #!insertmacro InstallTangoIcon "gtk-ok" + #!insertmacro InstallTangoIcon "gtk-orientation-portait" + #!insertmacro InstallTangoIcon "gtk-quit" + #!insertmacro InstallTangoIcon "gtk-select-color" + #!insertmacro InstallTangoIcon "gtk-select-font" + #!insertmacro InstallTangoIcon "gtk-sort-ascending" + #!insertmacro InstallTangoIcon "gtk-spell-check" + #!insertmacro InstallTangoIcon "gtk-undelete" + #!insertmacro InstallTangoIcon "gtk-yes" + #!insertmacro InstallTangoIcon "gtk-zoom-100" + #!insertmacro InstallTangoIcon "gtk-zoom-in" + #!insertmacro InstallTangoIcon "gtk-zoom-out" + !insertmacro InstallTangoIcon "mimetypes\gnome-mime-application-x-shockwave-flash" + !insertmacro InstallTangoIcon "mimetypes\gnome-mime-image" + !insertmacro InstallTangoIcon "mimetypes\package" + !insertmacro InstallTangoIcon "mimetypes\stock_script" + !insertmacro InstallTangoIcon "mimetypes\vcard" + #!insertmacro InstallTangoIcon "news-feed" + #!insertmacro InstallTangoIcon "place-holder" + !insertmacro InstallTangoIcon "places\gnome-stock-trash" + !insertmacro InstallTangoIcon "places\gtk-directory" + !insertmacro InstallTangoIcon "places\gtk-network" + !insertmacro InstallTangoIcon "status\gtk-dialog-error" + !insertmacro InstallTangoIcon "status\gtk-dialog-info" + !insertmacro InstallTangoIcon "status\gtk-dialog-warning" + !insertmacro InstallTangoIcon "status\gtk-missing-image" + !insertmacro InstallTangoIcon "status\network-offline" + #!insertmacro InstallTangoIcon "stock_bookmark" + #!insertmacro InstallTangoIcon "stock_mail-send" + #!insertmacro InstallTangoIcon "tab-panel" +SectionEnd + +Section "Desktop Shortcuts" SEC03 + SectionIn 1 + CreateShortCut "$DESKTOP\Midori.lnk" "${PRODUCT_EXE}" + CreateShortCut "$QUICKLAUNCH\Midori.lnk" "${PRODUCT_EXE}" +SectionEnd + +Section "Default Browser" SEC05 + SectionIn 1 + StrCpy $DefaultBrowser "yes" +SectionEnd + +Section -AdditionalIcons + SetOutPath $INSTDIR + !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME} + WriteIniStr "$INSTDIR\Website.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" + CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Website.lnk" "${PRODUCT_EXE}" \ + "${PRODUCT_WEB_SITE}" "${PRODUCT_EXE}" + CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall.lnk" "${UNINSTALL_EXE}" + CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Make Default.lnk" "${UNINSTALL_EXE}" \ + "/S /MAKEDEFAULT" "${PRODUCT_EXE}" + !insertmacro MUI_STARTMENU_WRITE_END +SectionEnd + +Section -Post + WriteUninstaller "${UNINSTALL_EXE}" + WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" Path "$INSTDIR" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder" + ${if} $Answer == "yes" ; if user is admin + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" "${UNINSTALL_EXE}" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "${PRODUCT_EXE}" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLUpdateInfo" "${PRODUCT_WEB_SITE}" + WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" + WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001 + WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001 + + WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE" "" "${PRODUCT_NAME}" + WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\DefaultIcon" "" "${PRODUCT_EXE},0" + WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\shell\open\command" "" "${PRODUCT_EXE}" + WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "HideIconsCommand" '"${UNINSTALL_EXE}" /S /HIDE' + WriteRegDWORD HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "IconsVisible" 0x00000000 + WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "ReinstallCommand" '"${UNINSTALL_EXE}" /S /MAKEDEFAULT' + WriteRegStr HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "ShowIconsCommand" '"${UNINSTALL_EXE}" /S /SHOW' + ${endif} + + ${if} $DefaultBrowser == "yes" + ${if} $Answer == "yes" ; if user is admin + WriteRegDWORD HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "IconsVisible" 0x00000001 + ${endif} + WriteRegStr HKCU "${PRODUCT_BROWER_KEY}" "" "MIDORI.EXE" + WriteRegStr HKCR "http\DefaultIcon" "" "${PRODUCT_EXE},0" + WriteRegStr HKCR "http\shell\open\command" "" '${PRODUCT_EXE} "%1"' + WriteRegStr HKCR "https\DefaultIcon" "" "${PRODUCT_EXE},0" + WriteRegStr HKCR "https\shell\open\command" "" '${PRODUCT_EXE} "%1"' + ${endif} +SectionEnd + +Section Uninstall + Delete "$INSTDIR\Website.url" + Delete "${UNINSTALL_EXE}" + Delete "$INSTDIR\COPYING" + Delete "$INSTDIR\AUTHORS" + Delete "$INSTDIR\Midori.lnk" + + ; delete start menu entry + ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" + RMDir /r "$0" + + Delete "$QUICKLAUNCH\Midori.lnk" + Delete "$DESKTOP\Midori.lnk" + + RMDir /r "$INSTDIR\bin" + RMDir /r "$INSTDIR\etc" + RMDir /r "$INSTDIR\lib" + RMDir /r "$INSTDIR\share" + RMDir "$INSTDIR" + + DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}" + DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}" + DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}" + DeleteRegKey HKCU "${PRODUCT_DIR_REGKEY}" + DeleteRegKey HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE" + + SetAutoClose true +SectionEnd + +;;;;;;;;;;;;;;;;;;;;;;;;; +; Section descriptions ; +;;;;;;;;;;;;;;;;;;;;;;;;; +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN +!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Required program files. You cannot skip these files." +!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Various translations of Midori's interface." +!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "Create shortcuts for Midori on the desktop and in the Quicklaunch Bar" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "Available plugins like 'Advertisement Blocker', 'Form history filler' and 'Mouse Gestures'." +!insertmacro MUI_DESCRIPTION_TEXT ${SEC05} "Make Midori the default browser." +!insertmacro MUI_DESCRIPTION_TEXT ${SEC06} "User manual of the Midori application." +!insertmacro MUI_DESCRIPTION_TEXT ${SEC07} "Better looking icons from the Tango icon theme." +!insertmacro MUI_FUNCTION_DESCRIPTION_END + +;;;;;;;;;;;;;;;;;;;;; +; helper functions ; +;;;;;;;;;;;;;;;;;;;;; + +; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsis/setup.nsi) +!macro IsUserAdmin Result UName + ClearErrors + UserInfo::GetName + IfErrors Win9x + Pop $0 + StrCpy ${UName} $0 + UserInfo::GetAccountType + Pop $1 + ${if} $1 == "Admin" + StrCpy ${Result} "yes" + ${else} + StrCpy ${Result} "no" + ${endif} + Goto done + +Win9x: + StrCpy ${Result} "yes" +done: +!macroend + +; (from http://nsis.sourceforge.net/GetOptions) +Function un.GetOptions + !define GetOptions `!insertmacro GetOptionsCall` + + !macro GetOptionsCall _PARAMETERS _OPTION _RESULT + Push `${_PARAMETERS}` + Push `${_OPTION}` + Call un.GetOptions + Pop ${_RESULT} + !macroend + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + ClearErrors + + StrCpy $2 $1 '' 1 + StrCpy $1 $1 1 + StrLen $3 $2 + StrCpy $7 0 + + begin: + StrCpy $4 -1 + StrCpy $6 '' + + quote: + IntOp $4 $4 + 1 + StrCpy $5 $0 1 $4 + StrCmp $5$7 '0' notfound + StrCmp $5 '' trimright + StrCmp $5 '"' 0 +7 + StrCmp $6 '' 0 +3 + StrCpy $6 '"' + goto quote + StrCmp $6 '"' 0 +3 + StrCpy $6 '' + goto quote + StrCmp $5 `'` 0 +7 + StrCmp $6 `` 0 +3 + StrCpy $6 `'` + goto quote + StrCmp $6 `'` 0 +3 + StrCpy $6 `` + goto quote + StrCmp $5 '`' 0 +7 + StrCmp $6 '' 0 +3 + StrCpy $6 '`' + goto quote + StrCmp $6 '`' 0 +3 + StrCpy $6 '' + goto quote + StrCmp $6 '"' quote + StrCmp $6 `'` quote + StrCmp $6 '`' quote + StrCmp $5 $1 0 quote + StrCmp $7 0 trimleft trimright + + trimleft: + IntOp $4 $4 + 1 + StrCpy $5 $0 $3 $4 + StrCmp $5 '' notfound + StrCmp $5 $2 0 quote + IntOp $4 $4 + $3 + StrCpy $0 $0 '' $4 + StrCpy $4 $0 1 + StrCmp $4 ' ' 0 +3 + StrCpy $0 $0 '' 1 + goto -3 + StrCpy $7 1 + goto begin + + trimright: + StrCpy $0 $0 $4 + StrCpy $4 $0 1 -1 + StrCmp $4 ' ' 0 +3 + StrCpy $0 $0 -1 + goto -3 + StrCpy $3 $0 1 + StrCpy $4 $0 1 -1 + StrCmp $3 $4 0 end + StrCmp $3 '"' +3 + StrCmp $3 `'` +2 + StrCmp $3 '`' 0 end + StrCpy $0 $0 -1 1 + goto end + + notfound: + SetErrors + StrCpy $0 '' + + end: + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 +FunctionEnd + +Function .onInit + StrCpy "$StartmenuFolder" "Midori" + + ; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsis/setup.nsi) + ; If the user does *not* have administrator privileges, abort + StrCpy $Answer "" + StrCpy $UserName "" + !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh + ${if} $Answer == "yes" + SetShellVarContext all ; set that e.g. shortcuts will be created for all users + ${else} + SetShellVarContext current + ; TODO is this really what we want? $PROGRAMFILES is not much better because + ; probably the unprivileged user can't write it anyways + StrCpy $INSTDIR "$PROFILE\$(^Name)" + ${endif} + + ; prevent running multiple instances of the installer + System::Call 'kernel32::CreateMutexA(i 0, i 0, t "midori_installer") i .r1 ?e' + Pop $R0 + StrCmp $R0 0 +3 + MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." /SD IDOK + Abort + ; warn about a new install over an existing installation + ReadRegStr $R0 SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" + StrCmp $R0 "" finish + + MessageBox MB_YESNO|MB_ICONEXCLAMATION \ + "Midori has already been installed. $\nDo you want to remove the previous version before installing $(^Name) ?" \ + /SD IDYES IDYES remove IDNO finish + +remove: + ; run the uninstaller + ClearErrors + ; we read the installation path of the old installation from the Registry + ReadRegStr $UNINSTDIR SHCTX "${PRODUCT_DIR_REGKEY}" "Path" + IfSilent dosilent nonsilent +dosilent: + ExecWait '$R0 /S _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file + Goto finish +nonsilent: + ExecWait '$R0 _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file +finish: +FunctionEnd + +Function un.onInit + StrCpy $Answer "" + !insertmacro IsUserAdmin $Answer $UserName + ${if} $Answer == "yes" + SetShellVarContext all + ${else} + SetShellVarContext current + ${endif} + + ${GetOptions} "$CMDLINE" "/MAKEDEFAULT" $0 + IfErrors 0 +2 + goto makedefault_next + + WriteRegStr HKCU "${PRODUCT_BROWER_KEY}" "" "MIDORI.EXE" + WriteRegStr HKCR "http\DefaultIcon" "" "${PRODUCT_EXE},0" + WriteRegStr HKCR "http\shell\open\command" "" '${PRODUCT_EXE} "%1"' + WriteRegStr HKCR "https\DefaultIcon" "" "${PRODUCT_EXE},0" + WriteRegStr HKCR "https\shell\open\command" "" '${PRODUCT_EXE} "%1"' + Abort +makedefault_next: + + ${GetOptions} "$CMDLINE" "/SHOW" $0 + IfErrors 0 +2 + goto show_next + + ${if} $Answer == "yes" ; if user is admin + WriteRegDWORD HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "IconsVisible" 0x00000001 + ${endif} + CreateShortCut "$DESKTOP\Midori.lnk" "${PRODUCT_EXE}" + CreateShortCut "$QUICKLAUNCH\Midori.lnk" "${PRODUCT_EXE}" + Abort +show_next: + + ${GetOptions} "$CMDLINE" "/HIDE" $0 + IfErrors 0 +2 + goto hide_next + + ${if} $Answer == "yes" ; if user is admin + WriteRegDWORD HKLM "${PRODUCT_BROWER_KEY}\MIDORI.EXE\InstallInfo" "IconsVisible" 0x00000000 + ${endif} + Delete "$QUICKLAUNCH\Midori.lnk" + Delete "$DESKTOP\Midori.lnk" + Abort +hide_next: + + ; If the user does *not* have administrator privileges, abort + ${if} $Answer != "yes" + ; check if the Midori has been installed with admin permisions + ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher" + ${if} $0 != "" + MessageBox MB_OK|MB_ICONSTOP "You need administrator privileges to uninstall Midori!" \ + /SD IDOK + Abort + ${endif} + ${endif} +FunctionEnd + +Function OnDirLeave + ClearErrors + SetOutPath "$INSTDIR" ; what about IfError creating $INSTDIR? + GetTempFileName $1 "$INSTDIR" ; creates tmp file (or fails) + FileOpen $0 "$1" "w" ; error to open? + FileWriteByte $0 "0" + IfErrors notPossible possible + +notPossible: + RMDir "$INSTDIR" ; removes folder if empty + MessageBox MB_OK "The given directory is not writeable. Please choose another one!" /SD IDOK + Abort +possible: + FileClose $0 + Delete "$1" +FunctionEnd diff --git a/win32/x86-mingw32-opensuse/install.sh b/win32/x86-mingw32-opensuse/install.sh new file mode 100644 index 00000000..909a523f --- /dev/null +++ b/win32/x86-mingw32-opensuse/install.sh @@ -0,0 +1,72 @@ +#!/bin/sh + +# Copyright (C) 2010-2011 Peter de Ridder +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# See the file COPYING for the full license text. + +# config variables +REPO_URL=http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_11.2 +REPO_ARCH=noarch +DOWNLOAD_PATH=~/dev/mingw/packages/opensuse +BUILD_PATH=~/tmp/opensuse +INSTALL_PATH=~/dev/mingw/mingw32 + +if [[ "$1" == "update" ]] +then + UPDATE=yes +fi + +# create download and build directory +mkdir -p $DOWNLOAD_PATH +mkdir -p $BUILD_PATH + +rm $DOWNLOAD_PATH/repomd.xml +wget -nc $REPO_URL/repodata/repomd.xml -P $DOWNLOAD_PATH || exit 1 +OTHER_FILE=`xmlgrep -c -f $DOWNLOAD_PATH/repomd.xml repomd.data:type=other.location | sed 's/.*href="\([^"]*\)".*/\1/'` + +wget -nc $REPO_URL/$OTHER_FILE -O $DOWNLOAD_PATH/other.xml.gz || exit 1 +rm $DOWNLOAD_PATH/other.xml +#gunzip -N $DOWNLOAD_PATH/`basename $OTHER_FILE` +gunzip -N $DOWNLOAD_PATH/other.xml + +rm packages.version +touch packages.version + +# downlaod all packages +while read line +do + VERSION=`xmlgrep -c -f $DOWNLOAD_PATH/other.xml otherdata.package:name="$line":arch="$REPO_ARCH" | awk -F\< '{print $2}' |sed -e 'h' -e 's/^.*ver="\([^"]*\)".*$/\1/p' -e 'g' -e 's/^.*rel="\([^"]*\)".*$/\1/' | sed -e N -e 's/\n/-/' | sort -V -r | head -n 1` + FILE=$line-$VERSION.$REPO_ARCH.rpm + test "$UPDATE" == yes || echo $FILE >> packages.version + if [ ! -f $DOWNLOAD_PATH/$FILE ] + then + test "$UPDATE" == yes && echo $FILE >> packages.version + wget -nc $REPO_URL/$REPO_ARCH/$FILE -P $DOWNLOAD_PATH + fi +done < packages.list + +# convert and install packages +while read line +do + pushd $BUILD_PATH + # extract rpm + rpm2cpio $DOWNLOAD_PATH/$line | cpio -i -d + # convert pkgconfig files + if [ -d $BUILD_PATH/usr/i686-pc-mingw32/sys-root/mingw/lib/pkgconfig ] + then + sed -i -e 's@^prefix=.*@prefix='$INSTALL_PATH'@' -e 's@/usr/i686-pc-mingw32/sys-root/mingw@${prefix}@' $BUILD_PATH/usr/i686-pc-mingw32/sys-root/mingw/lib/pkgconfig/*.pc + fi + # install the package + cp -rf $BUILD_PATH/usr/i686-pc-mingw32/sys-root/mingw/* $INSTALL_PATH/ + # remove the extracted file + rm -rf $BUILD_PATH/usr + popd +done < packages.version + +# remove build directory +rm -rf $BUILD_PATH diff --git a/win32/x86-mingw32-opensuse/packages.list b/win32/x86-mingw32-opensuse/packages.list new file mode 100644 index 00000000..5caff203 --- /dev/null +++ b/win32/x86-mingw32-opensuse/packages.list @@ -0,0 +1,79 @@ +This file is licensed under the terms of the LGPL 2.1, see the file COPYING. + +mingw32-atk +mingw32-atk-devel +mingw32-cairo-devel +mingw32-dbus-1 +mingw32-dbus-1-glib +mingw32-dbus-1-glib-devel +mingw32-enchant +mingw32-enchant-devel +mingw32-fontconfig +mingw32-fontconfig-devel +mingw32-freetype +mingw32-freetype-devel +mingw32-gcc-c++ +mingw32-gcc +mingw32-gdk-pixbuf +mingw32-gdk-pixbuf-devel +mingw32-gettext-runtime +mingw32-gettext-tools +mingw32-glib2 +mingw32-glib2-devel +mingw32-gst-plugins-base-devel +mingw32-gstreamer-devel +mingw32-gtk2 +mingw32-gtk2-devel +mingw32-hunspell +mingw32-hunspell-devel +mingw32-libexpat +mingw32-libexpat-devel +mingw32-libgcc +mingw32-libgcrypt +mingw32-libgcrypt-devel +mingw32-libcairo2 +mingw32-libgeoclue +mingw32-libgeoclue-devel +mingw32-libgnutls +mingw32-libgnutls-devel +mingw32-libgpg-error +mingw32-libgpg-error-devel +mingw32-libgstinterfaces +mingw32-libgstreamer +mingw32-libidn +mingw32-libidn-devel +mingw32-libjasper +mingw32-libjasper-devel +mingw32-libjpeg +mingw32-libjpeg-devel +mingw32-libopenssl +mingw32-libopenssl-devel +mingw32-libpng +mingw32-libpng-devel +mingw32-libsoup +mingw32-libsoup-devel +mingw32-libstdc++ +mingw32-libsqlite +mingw32-libsqlite-devel +mingw32-libtasn1 +mingw32-libtasn1-devel +mingw32-libtiff +mingw32-libtiff-devel +mingw32-libwebkit +mingw32-libwebkit-devel +mingw32-libxml2 +mingw32-libxml2-devel +mingw32-libxslt +mingw32-libxslt-devel +mingw32-pango +mingw32-pango-devel +mingw32-pixman +mingw32-pixman-devel +mingw32-pthreads +mingw32-pthreads-devel +mingw32-shared-mime-info +mingw32-shared-mime-info-devel +mingw32-win_iconv +mingw32-win_iconv-devel +mingw32-zlib +mingw32-zlib-devel