Switch to using MSYS2 for Windows build

This commit is contained in:
Philipp Hörist 2017-05-10 17:16:14 +02:00
parent 94be050aa6
commit 6c9e68548b
156 changed files with 8946 additions and 825 deletions

1
.gitignore vendored
View File

@ -19,6 +19,7 @@ stamp-h1
Makefile
__pycache__/
src/gtk/
win/_build_root
syntax: regexp
^config\.*

View File

@ -1,8 +1,7 @@
environment:
matrix:
- PYTHON: "C:\\Python34"
- MSYS: "C:\\msys64\\mingw32.exe"
branches:
only:
@ -10,49 +9,36 @@ branches:
clone_depth: 1
# init:
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
install:
- git clone --depth=1 --branch=gtk3 https://dev.gajim.org/gajim/gajim-plugins.git c:\projects\gajim-plugins
# Download & Install Dependencys
- ps: c:\\projects\\gajim\\dependencys.ps1
- ps: |
function bash($command) {
Write-Host $command -NoNewline
cmd /c start /wait C:\msys64\usr\bin\sh.exe --login -c $command
Write-Host " - OK" -ForegroundColor Green
}
- set PATH=C:\\MinGW\\bin;%PATH%
- "%PYTHON%\\python.exe -m pip install --upgrade pip"
- "%PYTHON%\\python.exe -m pip install -r c:\\projects\\gajim\\requirements.txt"
bash 'pacman -Sy --noconfirm git'
bash 'git clone https://dev.gajim.org/lovetox/gajim.git'
- ps: Add-Content C:\Python34\Lib\site-packages\google\__init__.py " "
- "%PYTHON%\\python.exe -m pip install --no-dependencies python-axolotl"
- "%PYTHON%\\python.exe -m pip install --global-option=build_ext --global-option --compiler=mingw32 python-axolotl-curve25519"
# Prepare Build Dir
- cd c:\\projects\\gajim\\
- xcopy . ..\gajim_built /e /i
- cd ..\gajim_built
# Copy Shipped Plugins
- xcopy ..\gajim-plugins\plugin_installer plugins\plugin_installer /e /i
# Compile Translation Strings
- cmd: for %%l in (po\*.po) do mkdir po\%%~nl & mkdir po\%%~nl\LC_MESSAGES & msgfmt -o po\%%~nl\LC_MESSAGES\gajim.mo %%l
# Make Gajim.exe
- "%PYTHON%\\python.exe setup_win32.py build_exe"
- move build\exe.win32-3.4 .
- rmdir build
- rename exe.win32-3.4 build
# Make Installer
- ps: '& "C:\Program Files (x86)\NSIS\makensis.exe" gajim.nsi'
- ps: '& "C:\Program Files (x86)\NSIS\makensis.exe" gajim-portable.nsi'
- cmd: '%MSYS% C:/msys64/home/appveyor/gajim/win/build.sh'
# Ugly workaround, because i found no way to tell when mingw32.exe returns
- cmd: timeout 900
# Push Installer Exe
- ps: $env:TIME_STRING=(get-date -UFormat "%Y-%m-%d").ToString()
- ps: Push-AppveyorArtifact Gajim.exe -FileName "Gajim-default-$($env:TIME_STRING).exe"
- ps: Push-AppveyorArtifact Gajim-Portable.exe -FileName "Gajim-portable-default-$($env:TIME_STRING).exe"
- ps: $env:BUILDROOT="C:\msys64\home\appveyor\gajim\win\_build_root"
- ps: Push-AppveyorArtifact "$($env:BUILDROOT)/Gajim.exe" -FileName "Gajim-Master-$($env:TIME_STRING).exe"
- ps: Push-AppveyorArtifact "$($env:BUILDROOT)/Gajim-Portable.exe" -FileName "Gajim-Portable-Master-$($env:TIME_STRING).exe"
build: off
# on_finish:
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
deploy:
# FTP deployment provider settings
- provider: FTP

View File

@ -1,26 +0,0 @@
rmdir /S /Q ..\gajim_built
xcopy . ..\gajim_built /e /i
cd ..
cd gajim_built
xcopy ..\gajim-plugins\plugin_installer plugins\plugin_installer /e /i
rem copy C:\Python34\Lib\site-packages\gnome\msgfmt.exe gajim_built
rem copy C:\Windows\System32\msvcr100.dll gajim_built
for %%l in (po\*.po) do mkdir po\%%~nl & mkdir po\%%~nl\LC_MESSAGES & msgfmt -o po\%%~nl\LC_MESSAGES\gajim.mo %%l
"c:\python34\python.exe" setup_win32.py build_exe
move build\exe.win32-3.4 .
rmdir build
rename exe.win32-3.4 build
rem xcopy ..\win32com build\win32com /e /i
"C:\Program Files (x86)\NSIS\makensis" gajim.nsi
cd ..
pause

View File

@ -1,11 +0,0 @@
# Download the file to a specific location
$clnt = new-object System.Net.WebClient
$url = "https://gajim.org/downloads/snap/win/build/site-packages.zip"
$file = "c:\site-packages.zip"
$clnt.DownloadFile($url,$file)
# Unzip the file to specified location
$shell_app=new-object -com shell.application
$zip_file = $shell_app.namespace($file)
$destination = $shell_app.namespace("C:\Python34\Lib\site-packages")
$destination.Copyhere($zip_file.items())

View File

@ -1,3 +0,0 @@
cd src
python gajim.py
cd ..

View File

@ -1,15 +0,0 @@
setuptools
git+https://dev.gajim.org/gajim/python-nbxmpp.git
protobuf
pycryptodome
cryptography
cx_freeze
keyring
pypiwin32
pyopenssl
python-gnupg
pillow
pycurl
docutils
qrcode
certifi

View File

@ -1,137 +0,0 @@
# setup_win32.py (run me as python setup_win32.py py2exe -O2)
#
# Copyright (C) 2003-2014 Yann Leboulanger <asterix AT lagaule.org>
# Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com>
# Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
#
# This file is part of Gajim.
#
# Gajim 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; version 3 only.
#
# Gajim 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 Gajim. If not, see <http://www.gnu.org/licenses/>.
#
import sys
import os
import site
from cx_Freeze import setup, Executable
SITEDIR = site.getsitepackages()[1]
INCLUDE_DLL_PATH = os.path.join(SITEDIR, "gnome")
sys.path.append('src')
# Collect the list of missing dll when cx_freeze builds the app
MISSING_DLL = ['libgtk-3-0.dll',
'libgdk-3-0.dll',
'libatk-1.0-0.dll',
'libgdk_pixbuf-2.0-0.dll',
'libjpeg-8.dll',
'libpango-1.0-0.dll',
'libpangocairo-1.0-0.dll',
'libpangoft2-1.0-0.dll',
'libpangowin32-1.0-0.dll',
'libgnutls-28.dll',
'libp11-kit-0.dll',
'libgstrtp-1.0-0.dll',
'libgstrtsp-1.0-0.dll',
'libgstrtspserver-1.0-0.dll',
'libfarstream-0.2-5.dll',
'libgstsdp-1.0-0.dll',
'libgsttag-1.0-0.dll',
'libgssdp-1.0-3.dll',
'libgstvideo-1.0-0.dll',
'libgstapp-1.0-0.dll',
'libgupnp-1.0-4.dll',
'libgstaudio-1.0-0.dll',
'libgupnp-igd-1.0-4.dll',
'libgstbase-1.0-0.dll',
'libnice-10.dll',
'librsvg-2-2.dll',
'libvisual-0.4-0.dll',
'libwebp-5.dll',
'libgstriff-1.0-0.dll',
'libepoxy-0.dll',
'libharfbuzz-0.dll',
'libtiff-5.dll',
'libjasper-1.dll',
'libgstpbutils-1.0-0.dll',
'liborc-0.4-0.dll',
'libgstnet-1.0-0.dll',
'libsoup-2.4-1.dll',
'liborc-test-0.4-0.dll',
'libavcodec-57.dll',
'libavutil-55.dll',
'libswresample-2.dll',
'libavformat-57.dll',
'libavfilter-6.dll',
'libgssapi-3.dll',
'libopenssl.dll',
'libsqlite3-0.dll',
'libproxy.dll',
'libstdc++.dll',
'libgstfft-1.0-0.dll']
# We need to add all the libraries too (for themes, etc..)
GTK_LIBS = {
'etc': ['dbus-1', 'fonts', 'gtk-3.0', 'pango'],
'lib': ['farstream-0.2', 'gdbus-2.0',
'gdk-pixbuf-2.0', 'gio', 'girepository-1.0',
'gstreamer-1.0', 'gtk-3.0'],
'share': ['dbus-1', 'farstream', 'fonts',
'glib-2.0',
'gst-plugins-base', 'gstreamer-1.0', 'gupnp-av',
'gupnp-dlna-2.0', 'icons', 'ssl', 'themes', 'xml']
}
# Create the list of includes as cx_freeze likes
INCLUDE_FILES = []
for dll in MISSING_DLL:
INCLUDE_FILES.append((os.path.join(INCLUDE_DLL_PATH, dll), dll))
# Let's add gtk libraries folders and files
for folder in GTK_LIBS:
for lib in GTK_LIBS[folder]:
folder_lib = os.path.join(folder, lib)
INCLUDE_FILES.append((os.path.join(INCLUDE_DLL_PATH, folder_lib),
folder_lib))
#Let's add gtk locales that we support in Gajim
for language in next(os.walk('po'))[1]:
target_dir = os.path.join('share', 'locale', language)
language_dir = os.path.join(INCLUDE_DLL_PATH, target_dir)
if os.path.isdir(language_dir):
INCLUDE_FILES.append((language_dir, target_dir))
OPTIONS = {
'build_exe': {
'includes': ['gi', 'numbers', 'win32com.client', 'win32com.server'],
'packages': ['gi', 'cffi', 'cryptography', 'google', 'axolotl',
'pkg_resources', 'Crypto', 'pycparser', 'keyring',
'PIL', 'idna', 'qrcode', 'certifi'],
'include_files': INCLUDE_FILES,
}
}
setup(
name='Gajim',
version='0.16.10',
description='A full featured Jabber client',
author='Gajim Development Team',
url='http://gajim.org/',
download_url='http://gajim.org/downloads.php',
license='GPL',
options=OPTIONS,
executables=[Executable('src/gajim.py', icon='data/pixmaps/gajim.ico',
base='Win32GUI')],
)

32
win/README.md Normal file
View File

@ -0,0 +1,32 @@
# Windows Installer
We use [msys2](http://www.msys2.org/) for creating the Windows installer
and development on Windows.
### Development
-----------
Download [msys2](http://www.msys2.org/) (msys2-x86_64-xxx.exe) and follow the install instructions on the [msys2](http://www.msys2.org/) startpage (**Important!**)
* Fork the master branch on dev.gajim.org
* Execute ``C:\msys64\mingw32.exe``
* Run ``pacman -S git`` to install git
* Run ``git clone https://dev.gajim.org/USERNAME/gajim.git``
* Run ``cd gajim/win`` to end up where this README exists.
* Execute ``./dev_env.sh`` to install all the needed dependencies.
* Now go to the git root dir ``cd ..``
* Launch Gajim ``./launch.sh``
### Build Gajim / Creating an Installer
---------------------
Follow the steps in the Development section, but instead of ``./dev_env.sh`` execute ``./build.sh``.
You can supply a git tag ``./build.sh [git-tag]``.
Or dont supply it, then current HEAD is build.
Both the installer and the portable installer should appear in ``C:\msys64\home\USER\gajim\win\_build_root``.

321
win/_base.sh Normal file
View File

@ -0,0 +1,321 @@
#!/usr/bin/env bash
# Copyright 2016 Christoph Reiter
# Copyright 2017 Philipp Hörist
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
set -e
DIR="$( cd "$( dirname "$0" )" && pwd )"
cd "${DIR}"
# CONFIG START
ARCH="i686"
PYTHON_VERSION="3"
BUILD_VERSION="0"
# CONFIG END
MISC="${DIR}"/misc
PYTHON_ID="python${PYTHON_VERSION}"
MINGW="mingw32"
QL_VERSION="0.0.0"
QL_VERSION_DESC="UNKNOWN"
function set_build_root {
BUILD_ROOT="$1"
REPO_CLONE="${BUILD_ROOT}/${MINGW}"/gajim
MINGW_ROOT="${BUILD_ROOT}/${MINGW}"
}
set_build_root "${DIR}/_build_root"
function build_pacman {
pacman --root "${BUILD_ROOT}" "$@"
}
function build_pip {
"${BUILD_ROOT}"/"${MINGW}"/bin/"${PYTHON_ID}".exe -m pip "$@"
}
function build_python {
"${BUILD_ROOT}"/"${MINGW}"/bin/"${PYTHON_ID}".exe "$@"
}
function build_compileall {
build_python -m compileall -b "$@"
}
function install_pre_deps {
pacman -S --needed --noconfirm p7zip git \
mingw-w64-"${ARCH}"-nsis wget intltool mingw-w64-"${ARCH}"-toolchain \
mingw-w64-i686-python3
}
function create_root {
mkdir -p "${BUILD_ROOT}"
mkdir -p "${BUILD_ROOT}"/var/lib/pacman
mkdir -p "${BUILD_ROOT}"/var/log
mkdir -p "${BUILD_ROOT}"/tmp
build_pacman -Syu
build_pacman --noconfirm -S base
}
function install_deps {
build_pacman --noconfirm -S mingw-w64-"${ARCH}"-gtk3 mingw-w64-"${ARCH}"-"${PYTHON_ID}" \
mingw-w64-"${ARCH}"-"${PYTHON_ID}"-gobject \
mingw-w64-"${ARCH}"-"${PYTHON_ID}"-pip \
mingw-w64-"${ARCH}"-gstreamer \
mingw-w64-"${ARCH}"-adwaita-icon-theme
build_pip install setuptools_scm
PIP_REQUIREMENTS="\
pyasn1
certifi
git+https://dev.gajim.org/gajim/python-nbxmpp.git
protobuf
git+https://github.com/dlitz/pycrypto.git
cryptography
pyopenssl
python-gnupg
docutils
qrcode
keyring
"
build_pip install --no-binary ":all:" \
--force-reinstall $(echo "$PIP_REQUIREMENTS" | tr ["\\n"] [" "])
build_pip install python-axolotl
build_pacman --noconfirm -Rdd mingw-w64-"${ARCH}"-shared-mime-info \
mingw-w64-"${ARCH}"-"${PYTHON_ID}"-pip mingw-w64-"${ARCH}"-ncurses || true
build_pacman --noconfirm -Rdd mingw-w64-"${ARCH}"-tk || true
build_pacman --noconfirm -Rdd mingw-w64-"${ARCH}"-tcl || true
build_pacman --noconfirm -Rdd mingw-w64-"${ARCH}"-gnome-common || true
build_pacman --noconfirm -Rdd mingw-w64-"${ARCH}"-gsl || true
build_pacman --noconfirm -Rdd mingw-w64-"${ARCH}"-libvpx || true
# remove the large png icons, they should be used rarely and svg works fine
rm -Rf "${MINGW_ROOT}/share/icons/Adwaita/512x512"
rm -Rf "${MINGW_ROOT}/share/icons/Adwaita/256x256"
rm -Rf "${MINGW_ROOT}/share/icons/Adwaita/96x96"
rm -Rf "${MINGW_ROOT}/share/icons/Adwaita/64x64"
rm -Rf "${MINGW_ROOT}/share/icons/Adwaita/48x48"
"${MINGW_ROOT}"/bin/gtk-update-icon-cache-3.0.exe --force \
"${MINGW_ROOT}/share/icons/Adwaita"
}
function install_gajim {
[ -z "$1" ] && (echo "Missing arg"; exit 1)
rm -Rf "${REPO_CLONE}"
git clone "${DIR}"/.. "${REPO_CLONE}"
(cd "${REPO_CLONE}" && git checkout "$1") || exit 1
if [ "$1" = "master" ]
then
local GIT_REV=$(git rev-list --count HEAD)
local GIT_HASH=$(git rev-parse --short HEAD)
QL_VERSION_DESC="QL_VERSION-rev$GIT_REV-$GIT_HASH"
else
QL_VERSION_DESC=$1
QL_VERSION=$1
fi
# Create launchers
build_python "${MISC}"/create-launcher.py \
"${QL_VERSION}" "${MINGW_ROOT}"/bin
# Install plugin installer
wget -P "${REPO_CLONE}/plugins" -c https://ftp.gajim.org/plugins_1/plugin_installer.zip
7z x -o"${REPO_CLONE}"/plugins "${REPO_CLONE}"/plugins/plugin_installer.zip
rm -f "${REPO_CLONE}"/plugins/plugin_installer.zip
# Install themes
rm -Rf "${MINGW_ROOT}"/etc
rm -Rf "${MINGW_ROOT}"/share/themes
mv "${REPO_CLONE}"/win/etc "${MINGW_ROOT}"
mv "${REPO_CLONE}"/win/themes "${MINGW_ROOT}"/share
# Install our own icons
rm -Rf "${MINGW_ROOT}/share/icons/hicolor"
mv "${REPO_CLONE}"/icons/hicolor "${MINGW_ROOT}"/share/icons
# we installed our app icons into hicolor
"${MINGW_ROOT}"/bin/gtk-update-icon-cache-3.0.exe --force \
"${MINGW_ROOT}/share/icons/hicolor"
# Create translation files
for f in "${REPO_CLONE}"/po/*.po; do
fullfilename=$(basename "$f")
filename="${fullfilename%.*}"
directory="${MINGW_ROOT}"/share/locale/"$filename"
if [ ! -d "$directory" ]; then
printf "create dir\n"
mkdir -p "${directory}"/LC_MESSAGES
fi
printf "compile $filename\n"
msgfmt -o "${directory}"/LC_MESSAGES/gajim.mo "$f"
done
}
function cleanup_install {
#delete translations we don't support
for d in "${MINGW_ROOT}"/share/locale/*/LC_MESSAGES; do
if [ ! -f "${d}"/gajim.mo ]; then
rm -Rf "${d}"
fi
done
find "${MINGW_ROOT}" -regextype "posix-extended" -name "*.exe" -a ! \
-iregex ".*/(gajim|python|history_manager)[^/]*\\.exe" \
-exec rm -f {} \;
rm -Rf "${REPO_CLONE}"/.git
rm -Rf "${REPO_CLONE}"/debian
rm -Rf "${REPO_CLONE}"/doc
rm -Rf "${REPO_CLONE}"/m4
rm -Rf "${REPO_CLONE}"/scripts
rm -Rf "${REPO_CLONE}"/test
rm -Rf "${REPO_CLONE}"/win
rm -Rf "${REPO_CLONE}"/icons
rm -Rf "${REPO_CLONE}"/po
rm -Rf "${REPO_CLONE}"/plugins/acronyms_expander
rm -Rf "${REPO_CLONE}"/plugins/dbus_plugin
rm -Rf "${REPO_CLONE}"/plugins/events_dump
rm -Rf "${REPO_CLONE}"/plugins/new_events_example
rm -Rf "${REPO_CLONE}"/plugins/roster_buttons
find "${REPO_CLONE}"/* -maxdepth 0 -type f ! -regex ".*/\(AUTHORS\|COPYING\|THANKS\|THANKS.artists\)" -exec rm -f {} \;
find "${REPO_CLONE}"/data/* -maxdepth 0 -type f -exec rm -f {} \;
rm -Rf "${MINGW_ROOT}"/libexec
rm -Rf "${MINGW_ROOT}"/share/gtk-doc
rm -Rf "${MINGW_ROOT}"/include
rm -Rf "${MINGW_ROOT}"/var
rm -Rf "${MINGW_ROOT}"/share/zsh
rm -Rf "${MINGW_ROOT}"/share/pixmaps
rm -Rf "${MINGW_ROOT}"/share/gnome-shell
rm -Rf "${MINGW_ROOT}"/share/dbus-1
rm -Rf "${MINGW_ROOT}"/share/gir-1.0
rm -Rf "${MINGW_ROOT}"/share/doc
rm -Rf "${MINGW_ROOT}"/share/man
rm -Rf "${MINGW_ROOT}"/share/info
rm -Rf "${MINGW_ROOT}"/share/mime
rm -Rf "${MINGW_ROOT}"/share/gettext
rm -Rf "${MINGW_ROOT}"/share/libtool
rm -Rf "${MINGW_ROOT}"/share/licenses
rm -Rf "${MINGW_ROOT}"/share/appdata
rm -Rf "${MINGW_ROOT}"/share/aclocal
rm -Rf "${MINGW_ROOT}"/share/ffmpeg
rm -Rf "${MINGW_ROOT}"/share/vala
rm -Rf "${MINGW_ROOT}"/share/readline
rm -Rf "${MINGW_ROOT}"/share/xml
rm -Rf "${MINGW_ROOT}"/share/bash-completion
rm -Rf "${MINGW_ROOT}"/share/common-lisp
rm -Rf "${MINGW_ROOT}"/share/emacs
rm -Rf "${MINGW_ROOT}"/share/gdb
rm -Rf "${MINGW_ROOT}"/share/libcaca
rm -Rf "${MINGW_ROOT}"/share/gettext
rm -Rf "${MINGW_ROOT}"/share/gst-plugins-base
rm -Rf "${MINGW_ROOT}"/share/gtk-3.0
rm -Rf "${MINGW_ROOT}"/share/nghttp2
rm -Rf "${MINGW_ROOT}"/share/fontconfig
rm -Rf "${MINGW_ROOT}"/share/gettext-*
rm -Rf "${MINGW_ROOT}"/share/gstreamer-1.0
find "${MINGW_ROOT}"/share/glib-2.0 -type f ! \
-name "*.compiled" -exec rm -f {} \;
rm -Rf "${MINGW_ROOT}"/lib/"${PYTHON_ID}".*/test
rm -Rf "${MINGW_ROOT}"/lib/cmake
rm -Rf "${MINGW_ROOT}"/lib/gettext
rm -Rf "${MINGW_ROOT}"/lib/gtk-3.0
rm -Rf "${MINGW_ROOT}"/lib/mpg123
rm -Rf "${MINGW_ROOT}"/lib/p11-kit
rm -Rf "${MINGW_ROOT}"/lib/ruby
rm -Rf "${MINGW_ROOT}"/lib/tcl8
rm -Rf "${MINGW_ROOT}"/lib/tcl8.6
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstvpx.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstdaala.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstdvdread.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstopenal.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstopenexr.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstopenh264.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstresindvd.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstassrender.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstx265.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstwebp.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstopengl.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstmxf.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstfaac.dll
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstschro.dll
rm -f "${MINGW_ROOT}"/bin/libharfbuzz-icu-0.dll
rm -f "${MINGW_ROOT}"/lib/"${PYTHON_ID}".*/lib-dynload/_tkinter*
rm -f "${MINGW_ROOT}"/lib/gstreamer-1.0/libgstcacasink.dll
rm -Rf "${MINGW_ROOT}"/lib/python2.*
find "${MINGW_ROOT}" -name "*.a" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.whl" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.h" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.la" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.sh" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.jar" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.def" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.cmd" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.cmake" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.pc" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.desktop" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.manifest" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.pyo" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "*.am" -exec rm -f {} \;
find "${MINGW_ROOT}" -name ".gitignore" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "pylint.rc" -exec rm -f {} \;
find "${MINGW_ROOT}"/bin -name "*-config" -exec rm -f {} \;
find "${MINGW_ROOT}"/bin -name "easy_install*" -exec rm -f {} \;
find "${MINGW_ROOT}" -regex ".*/bin/[^.]+" -exec rm -f {} \;
find "${MINGW_ROOT}" -regex ".*/bin/[^.]+\\.[0-9]+" -exec rm -f {} \;
find "${MINGW_ROOT}" -name "gtk30-properties.mo" -exec rm -rf {} \;
find "${MINGW_ROOT}" -name "gettext-tools.mo" -exec rm -rf {} \;
find "${MINGW_ROOT}" -name "old_root.pem" -exec rm -rf {} \;
find "${MINGW_ROOT}" -name "weak.pem" -exec rm -rf {} \;
find "${MINGW_ROOT}"/lib/"${PYTHON_ID}".* -type d -name "test*" \
-prune -exec rm -rf {} \;
find "${MINGW_ROOT}"/lib/"${PYTHON_ID}".* -type d -name "*_test*" \
-prune -exec rm -rf {} \;
find "${MINGW_ROOT}"/bin -name "*.pyo" -exec rm -f {} \;
find "${MINGW_ROOT}"/bin -name "*.pyc" -exec rm -f {} \;
build_compileall -q "${MINGW_ROOT}"
find "${MINGW_ROOT}" -name "*.py" ! -name "gajim.py" ! -name "history_manager.py" -exec rm -f {} \;
find "${MINGW_ROOT}"/bin -name "*.pyc" -exec rm -f {} \;
find "${MINGW_ROOT}" -type d -name "__pycache__" -prune -exec rm -rf {} \;
build_python "${MISC}/depcheck.py"
find "${MINGW_ROOT}" -type d -empty -delete
}
function build_installer {
(cd "$BUILD_ROOT" && makensis -NOCD -DVERSION="$QL_VERSION_DESC" "${MISC}"/gajim.nsi)
(cd "$BUILD_ROOT" && makensis -NOCD -DVERSION="$QL_VERSION_DESC" "${MISC}"/gajim-portable.nsi)
}

31
win/build.sh Normal file
View File

@ -0,0 +1,31 @@
#!/usr/bin/env bash
# Copyright 2016 Christoph Reiter
#
# 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) any later version.
DIR="$( cd "$( dirname "$0" )" && pwd )"
source "$DIR"/_base.sh
function main {
local GIT_TAG=${1:-"master"}
[[ -d "${BUILD_ROOT}" ]] && (echo "${BUILD_ROOT} already exists"; exit 1)
# started from the wrong env -> switch
if [ $(echo "$MSYSTEM" | tr '[A-Z]' '[a-z]') != "$MINGW" ]; then
"/${MINGW}.exe" "$0"
exit $?
fi
install_pre_deps
create_root
install_deps
install_gajim "$GIT_TAG"
cleanup_install
build_installer
}
main "$@";

41
win/dev_env.sh Normal file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -e
function main {
pacman --noconfirm -S --needed \
git \
mingw-w64-i686-toolchain \
mingw-w64-i686-gdk-pixbuf2 \
mingw-w64-i686-gtk3 \
mingw-w64-i686-gstreamer \
intltool \
mingw-w64-i686-sqlite3 \
mingw-w64-i686-python3 \
mingw-w64-i686-python3-gobject \
mingw-w64-i686-python3-pip
pip3 install setuptools_scm
PIP_REQUIREMENTS="\
pyasn1
certifi
git+https://dev.gajim.org/gajim/python-nbxmpp.git
protobuf
git+https://github.com/dlitz/pycrypto.git
cryptography
pyopenssl
python-gnupg
docutils
qrcode
keyring
"
pip3 install --no-binary ":all:" \
--force-reinstall $(echo "$PIP_REQUIREMENTS" | tr ["\\n"] [" "])
pip3 install python-axolotl
}
main;

View File

@ -0,0 +1,2 @@
[Settings]
gtk-theme-name=VimixLight

204
win/misc/create-launcher.py Normal file
View File

@ -0,0 +1,204 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright 2016 Christoph Reiter
#
# 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) any later version.
"""Creates simple Python .exe launchers for gui and cli apps
./create-launcher.py "3.8.0" <target-dir>
"""
import os
import sys
import subprocess
import shlex
import tempfile
import shutil
import struct
from distutils.spawn import find_executable
def build_resource(rc_path, out_path):
"""Raises subprocess.CalledProcessError"""
def is_64bit():
return struct.calcsize("P") == 8
subprocess.check_call(
["windres", "-O", "coff", "-F",
"pe-x86-64" if is_64bit() else "pe-i386", rc_path,
"-o", out_path])
def get_build_args():
python_name = os.path.splitext(os.path.basename(sys.executable))[0]
python_config = os.path.join(
os.path.dirname(sys.executable), python_name + "-config")
cflags = subprocess.check_output(
["sh", python_config, "--cflags"]).strip()
libs = subprocess.check_output(
["sh", python_config, "--libs"]).strip()
cflags = os.fsdecode(cflags)
libs = os.fsdecode(libs)
return shlex.split(cflags) + shlex.split(libs)
def build_exe(source_path, resource_path, is_gui, out_path):
args = ["gcc", "-s"]
if is_gui:
args.append("-mwindows")
args.extend(["-o", out_path, source_path, resource_path])
args.extend(get_build_args())
subprocess.check_call(args)
def get_launcher_code(entry_point):
template = """\
#include "Python.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
int result;
LPWSTR *szArglist;
int nArgs;
int i;
szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
if( NULL == szArglist )
{
printf("CommandLineToArgvW failed");
return 0;
}
Py_NoUserSiteDirectory = 1;
Py_IgnoreEnvironmentFlag = 1;
Py_DontWriteBytecodeFlag = 1;
Py_FrozenFlag = 1;
Py_Initialize();
PySys_SetArgvEx(__argc, szArglist, 0);
FILE* file = fopen("../gajim/src/%(filename)s", "r");
PyRun_SimpleString("import sys; import os;"
"os.chdir('../gajim/src');"
"sys.path.append(os.getcwd());"
"sys.frozen=True;"
);
result = PyRun_SimpleFile(file, "../gajim/src/%(filename)s");
Py_Finalize();
return result;
}
"""
return template % {"filename": entry_point}
def get_resouce_code(filename, file_version, file_desc, icon_path,
product_name, product_version, company_name):
template = """\
1 ICON "%(icon_path)s"
1 VERSIONINFO
FILEVERSION %(file_version_list)s
PRODUCTVERSION %(product_version_list)s
FILEOS 0x4
FILETYPE 0x1
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "%(company_name)s"
VALUE "FileDescription", "%(file_desc)s"
VALUE "FileVersion", "%(file_version)s"
VALUE "InternalName", "%(internal_name)s"
VALUE "OriginalFilename", "%(filename)s"
VALUE "ProductName", "%(product_name)s"
VALUE "ProductVersion", "%(product_version)s"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
"""
def to_ver_list(v):
return ",".join(map(str, (list(map(int, v.split("."))) + [0] * 4)[:4]))
file_version_list = to_ver_list(file_version)
product_version_list = to_ver_list(product_version)
return template % {
"icon_path": icon_path, "file_version_list": file_version_list,
"product_version_list": product_version_list,
"file_version": file_version, "product_version": product_version,
"company_name": company_name, "filename": filename,
"internal_name": os.path.splitext(filename)[0],
"product_name": product_name, "file_desc": file_desc,
}
def build_launcher(out_path, icon_path, file_desc, product_name, product_version,
company_name, entry_point, is_gui):
src_ico = os.path.abspath(icon_path)
target = os.path.abspath(out_path)
file_version = product_version
dir_ = os.getcwd()
temp = tempfile.mkdtemp()
try:
os.chdir(temp)
with open("launcher.c", "w") as h:
h.write(get_launcher_code(entry_point))
shutil.copyfile(src_ico, "launcher.ico")
with open("launcher.rc", "w") as h:
h.write(get_resouce_code(
os.path.basename(target), file_version, file_desc,
"launcher.ico", product_name, product_version, company_name))
build_resource("launcher.rc", "launcher.res")
build_exe("launcher.c", "launcher.res", is_gui, target)
finally:
os.chdir(dir_)
shutil.rmtree(temp)
def main():
argv = sys.argv
version = argv[1]
target = argv[2]
company_name = "Gajim"
misc = os.path.dirname(os.path.realpath(__file__))
build_launcher(
os.path.join(target, "Gajim.exe"),
os.path.join(misc, "gajim.ico"), "Gajim", "Gajim",
version, company_name, 'gajim.py', True)
build_launcher(
os.path.join(target, "Gajim-Debug.exe"),
os.path.join(misc, "gajim.ico"), "Gajim", "Gajim",
version, company_name, 'gajim.py', False)
build_launcher(
os.path.join(target, "history_manager.exe"),
os.path.join(misc, "gajim.ico"), "History Manager", "History Manager",
version, company_name, 'history_manager.py', True)
if __name__ == "__main__":
main()

104
win/misc/depcheck.py Normal file
View File

@ -0,0 +1,104 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Christoph Reiter
#
# 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) any later version.
"""
Deletes unneeded DLLs and checks DLL dependencies.
Execute with the build python, will figure out the rest.
"""
import subprocess
import os
import sys
import gi
gi.require_version("GIRepository", "2.0")
from gi.repository import GIRepository
def get_required_by_typelibs():
deps = set()
repo = GIRepository.Repository()
for tl in os.listdir(repo.get_search_path()[0]):
namespace, version = os.path.splitext(tl)[0].split("-", 1)
repo.require(namespace, version, 0)
lib = repo.get_shared_library(namespace)
if lib:
deps.update(lib.split(","))
return deps
EXTENSIONS = [".exe", ".pyd", ".dll"]
SYSTEM_LIBS = ['advapi32.dll',
"cabinet.dll", "comctl32.dll", "comdlg32.dll", "crypt32.dll", "d3d9.dll",
"dnsapi.dll", "dsound.dll", "dwmapi.dll", "gdi32.dll", "imm32.dll",
"iphlpapi.dll", "kernel32.dll", "ksuser.dll", "msi.dll", "msimg32.dll",
"msvcr71.dll", "msvcr80.dll", "msvcrt.dll", "ole32.dll", "oleaut32.dll",
"opengl32.dll", "rpcrt4.dll", "setupapi.dll", "shell32.dll", "user32.dll",
"usp10.dll", "winmm.dll", "winspool.drv", "wldap32.dll", "ws2_32.dll",
"wsock32.dll", "shlwapi.dll"
]
def get_dependencies(filename):
deps = []
data = subprocess.check_output(["objdump", "-p", filename])
data = data.decode("utf-8")
for line in data.splitlines():
line = line.strip()
if line.startswith("DLL Name:"):
deps.append(line.split(":", 1)[-1].strip().lower())
return deps
def find_lib(root, name):
search_path = os.path.join(root, "bin")
if os.path.exists(os.path.join(search_path, name)):
return os.path.join(search_path, name)
elif name in SYSTEM_LIBS:
return name
def get_things_to_delete(root):
all_libs = set()
needed = set()
for base, dirs, files in os.walk(root):
for f in files:
path = os.path.join(base, f)
if os.path.splitext(path)[-1].lower() in EXTENSIONS:
all_libs.add(f.lower())
for lib in get_dependencies(path):
all_libs.add(lib)
needed.add(lib)
if not find_lib(root, lib):
print("MISSING:", path, lib)
for lib in get_required_by_typelibs():
needed.add(lib)
if not find_lib(root, lib):
print("MISSING:", path, lib)
# get rid of things not in the search path,
# maybe loaded through other means?
not_needed = filter(
lambda l: find_lib(root, l) and \
os.path.splitext(l)[-1].lower() != ".exe", all_libs - needed)
return [find_lib(root, l) for l in not_needed]
def main():
libs = get_things_to_delete(sys.prefix)
while libs:
for l in libs:
print("DELETE:", l)
os.unlink(l)
libs = get_things_to_delete(sys.prefix)
if __name__ == "__main__":
main()

View File

@ -6,6 +6,7 @@ Unicode true
Name "Gajim"
OutFile "Gajim-Portable.exe"
SetCompressor /final /solid lzma
SetCompressorDictSize 32
!define myAppName "Gajim"
@ -14,14 +15,14 @@ RequestExecutionLevel user
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "data\pixmaps\nsis_header.bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP "data\pixmaps\nsis_wizard.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "data\pixmaps\nsis_wizard.bmp"
!define MUI_HEADERIMAGE_BITMAP "mingw32\gajim\data\pixmaps\nsis_header.bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP "mingw32\gajim\data\pixmaps\nsis_wizard.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "mingw32\gajim\data\pixmaps\nsis_wizard.bmp"
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_ABORTWARNING
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "COPYING"
!insertmacro MUI_PAGE_LICENSE "mingw32\gajim\COPYING"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
@ -100,163 +101,16 @@ Section "Gajim" SecGajim
SectionIn RO
SetOutPath "$INSTDIR"
File "AUTHORS"
File "COPYING"
File "THANKS"
File "THANKS.artists"
File /r "build"
File /r "mingw32\*.*"
SetOutPath "$INSTDIR\data"
File /r "data\gui"
File /r "data\moods"
File /r "data\activities"
File /r "data\other"
File /r "data\pixmaps"
File /r "data\sounds"
SetOutPath "$INSTDIR\icons"
File /r "icons\hicolor"
SetOutPath "$INSTDIR\build"
CreateShortCut "$INSTDIR\Gajim-Portable.lnk" "$INSTDIR\build\Gajim.exe" \
"-c ..\UserData" "" "" SW_SHOWNORMAL "" "Gajim Portable"
SetOutPath "$INSTDIR\bin"
CreateShortCut "$INSTDIR\Gajim-Portable.lnk" "$INSTDIR\bin\Gajim.exe" \
"-c ..\..\UserData" "" "" SW_SHOWNORMAL "" "Gajim Portable"
CreateShortCut "$INSTDIR\Gajim-Portable-Debug.lnk" "$INSTDIR\bin\Gajim-Debug.exe" \
"-c ..\..\UserData" "" "" SW_SHOWNORMAL "" "Gajim Portable Debug"
SectionEnd
Section "Plugins" SecPlugins
SetOutPath "$INSTDIR\plugins"
File /r "plugins\plugin_installer"
SectionEnd
SectionGroup $(NAME_Emoticons)
Section "animated" SecEmoticonsAnimated
SetOutPath "$INSTDIR\data\emoticons"
File /r "data\emoticons\animated"
SectionEnd
Section "static" SecEmoticonsStatic
SectionIn RO
SetOutPath "$INSTDIR\data\emoticons"
File /r "data\emoticons\static"
SectioNEnd
Section "static-big" SecEmoticonsStaticBig
SetOutPath "$INSTDIR\data\emoticons"
File /r "data\emoticons\static-big"
SectionEnd
SectionGroupEnd
SectionGroup $(NAME_Iconsets)
Section "dcraven" SecIconsetsDcraven
SectionIn RO
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\dcraven"
SectionEnd
Section "gnome" SecIconsetsGnome
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\gnome"
SectionEnd
Section "goojim" SecIconsetsGoojim
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\goojim"
SectionEnd
Section "gota" SecIconsetsGota
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\gota"
SectionEnd
Section "jabberbulb" SecIconsetsJabberbulb
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\jabberbulb"
SectionEnd
Section "sun" SecIconsetsSun
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\sun"
SectionEnd
Section "wroop" SecIconsetsWroop
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\wroop"
SectionEnd
Section "transports" SecIconsetsTransports
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\transports"
SectionIn Ro
SectionEnd
SectionGroupEnd
SectionGroup $(NAME_Languages)
Section "English (UK)" SecLanguagesEnglishUK
SetOutPath "$INSTDIR\po"
File /r "po\en_GB"
SectionEnd
Section "French" SecLanguagesFrench
SetOutPath "$INSTDIR\po"
File /r "po\fr"
SectionEnd
Section "German" SecLanguagesGerman
SetOutPath "$INSTDIR\po"
File /r "po\de"
SectionEnd
Section "Italian" SecLanguagesItalian
SetOutPath "$INSTDIR\po"
File /r "po\it"
SectionEnd
Section "Spanish" SecLanguagesSpanish
SetOutPath "$INSTDIR\po"
File /r "po\es"
SectionEnd
Section "Russian" SecLanguagesRussian
SetOutPath "$INSTDIR\po"
File /r "po\ru"
SectionEnd
Section $(NAME_SecLanguagesOther) SecLanguagesOther
SetOutPath "$INSTDIR\po"
File /r "po\be"
File /r "po\be@latin"
File /r "po\bg"
File /r "po\br"
File /r "po\cs"
File /r "po\da"
File /r "po\el"
File /r "po\eo"
File /r "po\eu"
File /r "po\gl"
File /r "po\he"
File /r "po\hr"
File /r "po\lt"
File /r "po\nb"
File /r "po\nl"
File /r "po\no"
File /r "po\pl"
File /r "po\pt"
File /r "po\pt_BR"
File /r "po\sk"
File /r "po\sr"
File /r "po\sr@Latn"
File /r "po\sv"
File /r "po\uk"
File /r "po\zh_CN"
SectionEnd
SectionGroupEnd
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecGajim} $(DESC_SecGajim)
!insertmacro MUI_FUNCTION_DESCRIPTION_END

BIN
win/misc/gajim.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

View File

@ -1,441 +1,262 @@
; File encoding 'UTF-8 with BOM'
Unicode true
!include "MUI2.nsh"
Name "Gajim"
OutFile "Gajim.exe"
SetCompressor /final /solid lzma
!define myAppName "Gajim"
InstallDir "$PROGRAMFILES\Gajim"
InstallDirRegKey HKCU "Software\Gajim" ""
RequestExecutionLevel admin
Var StartMenuFolder
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "data\pixmaps\nsis_header.bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP "data\pixmaps\nsis_wizard.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "data\pixmaps\nsis_wizard.bmp"
;!define MUI_COMPONENTSPAGE_CHECKBITMAP "${NSISDIR}\Contrib\Graphics\Checks\colorful.bmp"
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_ABORTWARNING
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "COPYING"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Gajim"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN "$INSTDIR\build\Gajim.exe"
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
;Show all languages, despite user's codepage
!define MUI_LANGDLL_ALLLANGUAGES
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "Italian"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "Hebrew"
!insertmacro MUI_RESERVEFILE_LANGDLL
; English
LangString NAME_Emoticons ${LANG_ENGLISH} "Emoticons"
LangString NAME_Iconsets ${LANG_ENGLISH} "Iconsets"
LangString NAME_Languages ${LANG_ENGLISH} "Languages"
LangString NAME_SecLanguagesOther ${LANG_ENGLISH} "Other"
LangString NAME_Themes ${LANG_ENGLISH} "Themes"
LangString NAME_SecDesktopIcon ${LANG_ENGLISH} "Create icon on desktop"
LangString NAME_SecAutostart ${LANG_ENGLISH} "Start Gajim when Windows starts"
LangString DESC_SecGajim ${LANG_ENGLISH} "Installs the main Gajim files."
LangString DESC_SecDesktopIcon ${LANG_ENGLISH} "If set, a shortcut for Gajim will be created on the desktop."
LangString DESC_SecAutostart ${LANG_ENGLISH} "If set, Gajim will be automatically started when Windows starts."
LangString STR_Installed ${LANG_ENGLISH} "Apparently, Gajim is already installed. Uninstall it?"
LangString STR_Running ${LANG_ENGLISH} "It appears that Gajim is currently running.$\n\
Please quit Gajim and restart the uninstaller."
; French
LangString NAME_Emoticons ${LANG_FRENCH} "Emoticônes"
LangString NAME_Iconsets ${LANG_FRENCH} "Bibliothèque d'icônes"
LangString NAME_Languages ${LANG_FRENCH} "Langues"
LangString NAME_SecLanguagesOther ${LANG_FRENCH} "Autre"
LangString NAME_Themes ${LANG_FRENCH} "Thèmes"
LangString NAME_SecDesktopIcon ${LANG_FRENCH} "Créer une icône sur le bureau"
LangString NAME_SecAutostart ${LANG_FRENCH} "Lancer Gajim au démarrage de Windows"
LangString DESC_SecGajim ${LANG_FRENCH} "Installer les fichiers principaux de Gajim."
LangString DESC_SecDesktopIcon ${LANG_FRENCH} "Si selectionné, un raccourci pour Gajim sera créé sur le bureau."
LangString DESC_SecAutostart ${LANG_FRENCH} "Si activé, Gajim sera automatiquement lancé au démarrage de Windows."
LangString STR_Installed ${LANG_FRENCH} "Gajim est apparement déjà installé. Lancer la désinstallation ?"
LangString STR_Running ${LANG_FRENCH} "Gajim est apparament lancé.$\n\
Fermez-le et redémarrez le désinstallateur."
; German
LangString NAME_Emoticons ${LANG_GERMAN} "Emoticons"
LangString NAME_Iconsets ${LANG_GERMAN} "Symbolsets"
LangString NAME_Languages ${LANG_GERMAN} "Sprachen"
LangString NAME_SecLanguagesOther ${LANG_GERMAN} "Sonstige"
LangString NAME_Themes ${LANG_GERMAN} "Designs"
LangString NAME_SecDesktopIcon ${LANG_GERMAN} "Desktop-Icon erstellen"
LangString NAME_SecAutostart ${LANG_GERMAN} "Gajim mit Windows starten"
LangString DESC_SecGajim ${LANG_GERMAN} "Installiert die Hauptdateien von Gajim."
LangString DESC_SecDesktopIcon ${LANG_GERMAN} "Wenn dies aktiviert wird, wird ein Icon für Gajim auf dem Desktop erstellt."
LangString DESC_SecAutostart ${LANG_GERMAN} "Gajim wird automatisch gestartet, sowie Windows startet, wenn dies aktivier wird."
LangString STR_Installed ${LANG_GERMAN} "Gajim is apparently already installed. Uninstall it?"
LangString STR_Running ${LANG_GERMAN} "Es scheint, dass Gajim bereits läuft.$\n\
Bitte beenden Sie es und starten Sie den Installer erneut.."
; Italian
LangString NAME_Emoticons ${LANG_ITALIAN} "Emoticons"
LangString NAME_Iconsets ${LANG_ITALIAN} "Set di icone"
LangString NAME_Languages ${LANG_ITALIAN} "Lingue"
LangString NAME_SecLanguagesOther ${LANG_ITALIAN} "Altre"
LangString NAME_Themes ${LANG_ITALIAN} "Temi"
LangString NAME_SecDesktopIcon ${LANG_ITALIAN} "Crea un'icona sul desktop"
LangString NAME_SecAutostart ${LANG_ITALIAN} "Lancia Gajim quando parte Windows"
LangString DESC_SecGajim ${LANG_ITALIAN} "Installa i file principali di Gajim."
LangString DESC_SecDesktopIcon ${LANG_ITALIAN} "Se selezionato, un'icona verrà creata sul desktop."
LangString DESC_SecAutostart ${LANG_ITALIAN} "Se selezionato, Gajim sarà eseguito all'avvio di Windows."
LangString STR_Installed ${LANG_ITALIAN} "Gajim is apparently already installed. Uninstall it?"
LangString STR_Running ${LANG_ITALIAN} "It appears that Gajim is currently running.$\n\
Close it and restart uninstaller."
; Russian
LangString NAME_Emoticons ${LANG_RUSSIAN} "Смайлики"
LangString NAME_Iconsets ${LANG_RUSSIAN} "Темы иконок"
LangString NAME_Languages ${LANG_RUSSIAN} "Языки"
LangString NAME_SecLanguagesOther ${LANG_RUSSIAN} "Другое"
LangString NAME_Themes ${LANG_RUSSIAN} "Темы"
LangString NAME_SecDesktopIcon ${LANG_RUSSIAN} "Создать я лык на абочем столе"
LangString NAME_SecAutostart ${LANG_RUSSIAN} "Запускать Gajim при загрузке Windows"
LangString DESC_SecGajim ${LANG_RUSSIAN} "Установка основных файлов Gajim."
LangString DESC_SecDesktopIcon ${LANG_RUSSIAN} "Если отмечено, на рабочем столе будет создан ярлык Gajim."
LangString DESC_SecAutostart ${LANG_RUSSIAN} "Если отмечено, Gajim будет автоматически запускаться при загрузке Windows."
LangString STR_Installed ${LANG_RUSSIAN} "Похоже, Gajim уже установлен. Деинсталлировать установленную версию?"
LangString STR_Running ${LANG_RUSSIAN} "Похоже, Gajim уже запущен.$\n\
Закройте его и запустите деинсталлятор снова."
; Hebrew
LangString NAME_Emoticons ${LANG_HEBREW} "רגשונים"
LangString NAME_Iconsets ${LANG_HEBREW} "מערכי צלמית"
LangString NAME_Languages ${LANG_HEBREW} "שפות"
LangString NAME_SecLanguagesOther ${LANG_HEBREW} "אחרות"
LangString NAME_Themes ${LANG_HEBREW} "ערכאות נושא"
LangString NAME_SecDesktopIcon ${LANG_HEBREW} "צור סמל בשולחן עבודה"
LangString NAME_SecAutostart ${LANG_HEBREW} "הפעל את Gajim כאשר Windows מתחיל"
LangString DESC_SecGajim ${LANG_HEBREW} "מתקין קבצי Gajim עיקריים."
LangString DESC_SecDesktopIcon ${LANG_HEBREW} "במידה ונקבעת, קיצור דרך עבור Gajim יושם על שולחן העבודה."
LangString DESC_SecAutostart ${LANG_HEBREW} "במידה ונקבעת, Gajim יופעל אוטומטית כאשר Windows מתחיל."
LangString STR_Installed ${LANG_HEBREW} "כפי הנראה, Gajim כבר מותקן. להסיר אותו?"
LangString STR_Running ${LANG_HEBREW} "נראה שהתוכנית Gajim מורצת כעת.$\n\
אנא צא מן Gajim ואתחל את מסיר ההתקנה."
Section "Gajim" SecGajim
SectionIn RO
SetOutPath "$INSTDIR"
File "AUTHORS"
File "COPYING"
File "THANKS"
File "THANKS.artists"
File /r "build"
SetOutPath "$INSTDIR\build"
WriteRegStr HKCU "Software\Gajim" "" $INSTDIR
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayName" "Gajim"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "UninstallString" "$INSTDIR\Uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayIcon" "$INSTDIR\build\Gajim.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayVersion" "0.16.10"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "URLInfoAbout" "http://www.gajim.org/"
WriteUninstaller "$INSTDIR\Uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
SetShellVarContext current
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Gajim.lnk" "$INSTDIR\build\Gajim.exe"
SetShellVarContext all
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Gajim.lnk" "$INSTDIR\build\Gajim.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SetOutPath "$INSTDIR\data"
File /r "data\gui"
File /r "data\moods"
File /r "data\activities"
File /r "data\other"
File /r "data\pixmaps"
File /r "data\sounds"
SetOutPath "$INSTDIR\icons"
File /r "icons\hicolor"
SectionEnd
Section "Plugins" SecPlugins
SetOutPath "$INSTDIR\plugins"
File /r "plugins\plugin_installer"
SectionEnd
SectionGroup $(NAME_Emoticons)
Section "animated" SecEmoticonsAnimated
SetOutPath "$INSTDIR\data\emoticons"
File /r "data\emoticons\animated"
SectionEnd
Section "static" SecEmoticonsStatic
SectionIn RO
SetOutPath "$INSTDIR\data\emoticons"
File /r "data\emoticons\static"
SectioNEnd
Section "static-big" SecEmoticonsStaticBig
SetOutPath "$INSTDIR\data\emoticons"
File /r "data\emoticons\static-big"
SectionEnd
SectionGroupEnd
SectionGroup $(NAME_Iconsets)
Section "dcraven" SecIconsetsDcraven
SectionIn RO
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\dcraven"
SectionEnd
Section "gnome" SecIconsetsGnome
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\gnome"
SectionEnd
Section "goojim" SecIconsetsGoojim
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\goojim"
SectionEnd
Section "gota" SecIconsetsGota
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\gota"
SectionEnd
Section "jabberbulb" SecIconsetsJabberbulb
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\jabberbulb"
SectionEnd
Section "sun" SecIconsetsSun
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\sun"
SectionEnd
Section "wroop" SecIconsetsWroop
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\wroop"
SectionEnd
Section "transports" SecIconsetsTransports
SetOutPath "$INSTDIR\data\iconsets"
File /r "data\iconsets\transports"
SectionIn Ro
SectionEnd
SectionGroupEnd
SectionGroup $(NAME_Languages)
Section "English (UK)" SecLanguagesEnglishUK
SetOutPath "$INSTDIR\po"
File /r "po\en_GB"
SectionEnd
Section "French" SecLanguagesFrench
SetOutPath "$INSTDIR\po"
File /r "po\fr"
SectionEnd
Section "German" SecLanguagesGerman
SetOutPath "$INSTDIR\po"
File /r "po\de"
SectionEnd
Section "Italian" SecLanguagesItalian
SetOutPath "$INSTDIR\po"
File /r "po\it"
SectionEnd
Section "Spanish" SecLanguagesSpanish
SetOutPath "$INSTDIR\po"
File /r "po\es"
SectionEnd
Section "Russian" SecLanguagesRussian
SetOutPath "$INSTDIR\po"
File /r "po\ru"
SectionEnd
Section $(NAME_SecLanguagesOther) SecLanguagesOther
SetOutPath "$INSTDIR\po"
File /r "po\be"
File /r "po\be@latin"
File /r "po\bg"
File /r "po\br"
File /r "po\cs"
File /r "po\da"
File /r "po\el"
File /r "po\eo"
File /r "po\eu"
File /r "po\gl"
File /r "po\he"
File /r "po\hr"
File /r "po\lt"
File /r "po\nb"
File /r "po\nl"
File /r "po\no"
File /r "po\pl"
File /r "po\pt"
File /r "po\pt_BR"
File /r "po\sk"
File /r "po\sr"
File /r "po\sr@Latn"
File /r "po\sv"
File /r "po\uk"
File /r "po\zh_CN"
SectionEnd
SectionGroupEnd
Section $(NAME_SecDesktopIcon) SecDesktopIcon
SetShellVarContext current
SetOutPath "$INSTDIR\build"
CreateShortCut "$DESKTOP\Gajim.lnk" "$INSTDIR\build\Gajim.exe"
SectionEnd
Section $(NAME_SecAutostart) SecAutostart
SetShellVarContext current
SetOutPath "$INSTDIR\build"
CreateShortCut "$SMSTARTUP\Gajim.lnk" "$INSTDIR\build\Gajim.exe"
SectionEnd
Section "Uninstall"
RMDir "$INSTDIR\bin\win32com"
RMDir /r "$INSTDIR\build"
RMDir /r "$INSTDIR\data\gui"
RMDir /r "$INSTDIR\data\moods"
RMDir /r "$INSTDIR\data\activities"
RMDir /r "$INSTDIR\data\other"
RMDir /r "$INSTDIR\data\pixmaps"
RMDir /r "$INSTDIR\data\sounds"
RMDir /r "$INSTDIR\data\emoticons\animated"
RMDir /r "$INSTDIR\data\emoticons\static"
RMDir /r "$INSTDIR\data\emoticons\static-big"
RMDir "$INSTDIR\data\emoticons"
RMDir /r "$INSTDIR\data\iconsets\dcraven"
RMDir /r "$INSTDIR\data\iconsets\gnome"
RMDir /r "$INSTDIR\data\iconsets\goojim"
RMDir /r "$INSTDIR\data\iconsets\gota"
RMDir /r "$INSTDIR\data\iconsets\jabberbulb"
RMDir /r "$INSTDIR\data\iconsets\sun"
RMDir /r "$INSTDIR\data\iconsets\wroop"
RMDir /r "$INSTDIR\data\iconsets\transports"
RMDir "$INSTDIR\data\iconsets"
RMDir "$INSTDIR\data"
RMDir /r "$INSTDIR\plugins\plugin_installer"
RMDir "$INSTDIR\plugins"
RMDir /r "$INSTDIR\icons\hicolor"
RMDir "$INSTDIR\icons"
RMDir /r "$INSTDIR\po"
Delete "$INSTDIR\AUTHORS"
Delete "$INSTDIR\COPYING"
Delete "$INSTDIR\THANKS"
Delete "$INSTDIR\THANKS.artists"
Delete "$INSTDIR\Uninstall.exe"
RMDir "$INSTDIR"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
SetShellVarContext current
Delete "$SMPROGRAMS\$StartMenuFolder\Gajim.lnk"
Delete "$SMPROGRAMS\$StartMenuFolder\Change Theme.lnk"
RMDir "$SMPROGRAMS\$StartMenuFolder"
Delete "$DESKTOP\Gajim.lnk"
Delete "$SMSTARTUP\Gajim.lnk"
SetShellVarContext all
Delete "$SMPROGRAMS\$StartMenuFolder\Gajim.lnk"
Delete "$SMPROGRAMS\$StartMenuFolder\Change Theme.lnk"
RMDir "$SMPROGRAMS\$StartMenuFolder"
DeleteRegKey /ifempty HKCU "Software\Gajim"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim"
SectionEnd
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecGajim} $(DESC_SecGajim)
!insertmacro MUI_DESCRIPTION_TEXT ${SecDesktopIcon} $(DESC_SecDesktopIcon)
!insertmacro MUI_DESCRIPTION_TEXT ${SecAutostart} $(DESC_SecAutostart)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Function un.onInit
; Check that Gajim is not running before uninstalling
FindWindow $0 "gdkWindowToplevel" "Gajim"
StrCmp $0 0 Remove
MessageBox MB_ICONSTOP|MB_OK $(STR_Running)
Quit
Remove:
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
Function .onInit
BringToFront
; Check if already running
; If so don't open another but bring to front
System::Call "kernel32::CreateMutexA(i 0, i 0, t '$(^Name)') i .r0 ?e"
Pop $0
StrCmp $0 0 launch
StrLen $0 "$(^Name)"
IntOp $0 $0 + 1
FindWindow $1 '#32770' '' 0 $1
IntCmp $1 0 +3
System::Call "user32::ShowWindow(i r1,i 9) i." ; If minimized then maximize
System::Call "user32::SetForegroundWindow(i r1) i." ; Bring to front
Abort
launch:
; Check to see if old install (inno setup) is already installed
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Gajim_is1" "UninstallString"
; remove first and last " char
StrLen $0 $R0
IntOp $0 $0 - 2
strcpy $1 $R0 $0 1
IfFileExists $1 +1 NotInstalled
MessageBox MB_YESNO|MB_DEFBUTTON2|MB_TOPMOST $(STR_Installed) IDNO Quit
StrCmp $R1 2 Quit +1
ExecWait '$R0 _?=$INSTDIR' $R2
StrCmp $R2 0 +1 Quit
NotInstalled:
; Check to see if new installer (NSIS)already installed
ReadRegStr $R3 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "UninstallString"
IfFileExists $R3 +1 ReallyNotInstalled
MessageBox MB_YESNO|MB_DEFBUTTON2|MB_TOPMOST $(STR_Installed) IDNO Quit
StrCmp $R4 2 Quit +1
ExecWait '$R3 _?=$INSTDIR' $R5
StrCmp $R5 0 ReallyNotInstalled Quit
Quit:
Quit
ReallyNotInstalled:
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
; File encoding 'UTF-8 with BOM'
Unicode true
!include "MUI2.nsh"
Name "Gajim"
OutFile "Gajim.exe"
SetCompressor /final /solid lzma
SetCompressorDictSize 32
!define myAppName "Gajim"
InstallDir "$PROGRAMFILES\Gajim"
InstallDirRegKey HKCU "Software\Gajim" ""
RequestExecutionLevel admin
Var StartMenuFolder
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "mingw32\gajim\data\pixmaps\nsis_header.bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP "mingw32\gajim\data\pixmaps\nsis_wizard.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "mingw32\gajim\data\pixmaps\nsis_wizard.bmp"
;!define MUI_COMPONENTSPAGE_CHECKBITMAP "${NSISDIR}\Contrib\Graphics\Checks\colorful.bmp"
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_ABORTWARNING
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "mingw32\gajim\COPYING"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Gajim"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN "$INSTDIR\bin\Gajim.exe"
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
;Show all languages, despite user's codepage
!define MUI_LANGDLL_ALLLANGUAGES
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "Italian"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "Hebrew"
!insertmacro MUI_RESERVEFILE_LANGDLL
; English
LangString NAME_Emoticons ${LANG_ENGLISH} "Emoticons"
LangString NAME_Iconsets ${LANG_ENGLISH} "Iconsets"
LangString NAME_Languages ${LANG_ENGLISH} "Languages"
LangString NAME_SecLanguagesOther ${LANG_ENGLISH} "Other"
LangString NAME_Themes ${LANG_ENGLISH} "Themes"
LangString NAME_SecDesktopIcon ${LANG_ENGLISH} "Create icon on desktop"
LangString NAME_SecAutostart ${LANG_ENGLISH} "Start Gajim when Windows starts"
LangString DESC_SecGajim ${LANG_ENGLISH} "Installs the main Gajim files."
LangString DESC_SecDesktopIcon ${LANG_ENGLISH} "If set, a shortcut for Gajim will be created on the desktop."
LangString DESC_SecAutostart ${LANG_ENGLISH} "If set, Gajim will be automatically started when Windows starts."
LangString STR_Installed ${LANG_ENGLISH} "Apparently, Gajim is already installed. Uninstall it?"
LangString STR_Running ${LANG_ENGLISH} "It appears that Gajim is currently running.$\n\
Please quit Gajim and restart the uninstaller."
; French
LangString NAME_Emoticons ${LANG_FRENCH} "Emoticônes"
LangString NAME_Iconsets ${LANG_FRENCH} "Bibliothèque d'icônes"
LangString NAME_Languages ${LANG_FRENCH} "Langues"
LangString NAME_SecLanguagesOther ${LANG_FRENCH} "Autre"
LangString NAME_Themes ${LANG_FRENCH} "Thèmes"
LangString NAME_SecDesktopIcon ${LANG_FRENCH} "Créer une icône sur le bureau"
LangString NAME_SecAutostart ${LANG_FRENCH} "Lancer Gajim au démarrage de Windows"
LangString DESC_SecGajim ${LANG_FRENCH} "Installer les fichiers principaux de Gajim."
LangString DESC_SecDesktopIcon ${LANG_FRENCH} "Si selectionné, un raccourci pour Gajim sera créé sur le bureau."
LangString DESC_SecAutostart ${LANG_FRENCH} "Si activé, Gajim sera automatiquement lancé au démarrage de Windows."
LangString STR_Installed ${LANG_FRENCH} "Gajim est apparement déjà installé. Lancer la désinstallation ?"
LangString STR_Running ${LANG_FRENCH} "Gajim est apparament lancé.$\n\
Fermez-le et redémarrez le désinstallateur."
; German
LangString NAME_Emoticons ${LANG_GERMAN} "Emoticons"
LangString NAME_Iconsets ${LANG_GERMAN} "Symbolsets"
LangString NAME_Languages ${LANG_GERMAN} "Sprachen"
LangString NAME_SecLanguagesOther ${LANG_GERMAN} "Sonstige"
LangString NAME_Themes ${LANG_GERMAN} "Designs"
LangString NAME_SecDesktopIcon ${LANG_GERMAN} "Desktop-Icon erstellen"
LangString NAME_SecAutostart ${LANG_GERMAN} "Gajim mit Windows starten"
LangString DESC_SecGajim ${LANG_GERMAN} "Installiert die Hauptdateien von Gajim."
LangString DESC_SecDesktopIcon ${LANG_GERMAN} "Wenn dies aktiviert wird, wird ein Icon für Gajim auf dem Desktop erstellt."
LangString DESC_SecAutostart ${LANG_GERMAN} "Gajim wird automatisch gestartet, sowie Windows startet, wenn dies aktivier wird."
LangString STR_Installed ${LANG_GERMAN} "Gajim is apparently already installed. Uninstall it?"
LangString STR_Running ${LANG_GERMAN} "Es scheint, dass Gajim bereits läuft.$\n\
Bitte beenden Sie es und starten Sie den Installer erneut.."
; Italian
LangString NAME_Emoticons ${LANG_ITALIAN} "Emoticons"
LangString NAME_Iconsets ${LANG_ITALIAN} "Set di icone"
LangString NAME_Languages ${LANG_ITALIAN} "Lingue"
LangString NAME_SecLanguagesOther ${LANG_ITALIAN} "Altre"
LangString NAME_Themes ${LANG_ITALIAN} "Temi"
LangString NAME_SecDesktopIcon ${LANG_ITALIAN} "Crea un'icona sul desktop"
LangString NAME_SecAutostart ${LANG_ITALIAN} "Lancia Gajim quando parte Windows"
LangString DESC_SecGajim ${LANG_ITALIAN} "Installa i file principali di Gajim."
LangString DESC_SecDesktopIcon ${LANG_ITALIAN} "Se selezionato, un'icona verrà creata sul desktop."
LangString DESC_SecAutostart ${LANG_ITALIAN} "Se selezionato, Gajim sarà eseguito all'avvio di Windows."
LangString STR_Installed ${LANG_ITALIAN} "Gajim is apparently already installed. Uninstall it?"
LangString STR_Running ${LANG_ITALIAN} "It appears that Gajim is currently running.$\n\
Close it and restart uninstaller."
; Russian
LangString NAME_Emoticons ${LANG_RUSSIAN} "Смайлики"
LangString NAME_Iconsets ${LANG_RUSSIAN} "Темы иконок"
LangString NAME_Languages ${LANG_RUSSIAN} "Языки"
LangString NAME_SecLanguagesOther ${LANG_RUSSIAN} "Другое"
LangString NAME_Themes ${LANG_RUSSIAN} "Темы"
LangString NAME_SecDesktopIcon ${LANG_RUSSIAN} "Создать я лык на абочем столе"
LangString NAME_SecAutostart ${LANG_RUSSIAN} "Запускать Gajim при загрузке Windows"
LangString DESC_SecGajim ${LANG_RUSSIAN} "Установка основных файлов Gajim."
LangString DESC_SecDesktopIcon ${LANG_RUSSIAN} "Если отмечено, на рабочем столе будет создан ярлык Gajim."
LangString DESC_SecAutostart ${LANG_RUSSIAN} "Если отмечено, Gajim будет автоматически запускаться при загрузке Windows."
LangString STR_Installed ${LANG_RUSSIAN} "Похоже, Gajim уже установлен. Деинсталлировать установленную версию?"
LangString STR_Running ${LANG_RUSSIAN} "Похоже, Gajim уже запущен.$\n\
Закройте его и запустите деинсталлятор снова."
; Hebrew
LangString NAME_Emoticons ${LANG_HEBREW} "רגשונים"
LangString NAME_Iconsets ${LANG_HEBREW} "מערכי צלמית"
LangString NAME_Languages ${LANG_HEBREW} "שפות"
LangString NAME_SecLanguagesOther ${LANG_HEBREW} "אחרות"
LangString NAME_Themes ${LANG_HEBREW} "ערכאות נושא"
LangString NAME_SecDesktopIcon ${LANG_HEBREW} "צור סמל בשולחן עבודה"
LangString NAME_SecAutostart ${LANG_HEBREW} "הפעל את Gajim כאשר Windows מתחיל"
LangString DESC_SecGajim ${LANG_HEBREW} "מתקין קבצי Gajim עיקריים."
LangString DESC_SecDesktopIcon ${LANG_HEBREW} "במידה ונקבעת, קיצור דרך עבור Gajim יושם על שולחן העבודה."
LangString DESC_SecAutostart ${LANG_HEBREW} "במידה ונקבעת, Gajim יופעל אוטומטית כאשר Windows מתחיל."
LangString STR_Installed ${LANG_HEBREW} "כפי הנראה, Gajim כבר מותקן. להסיר אותו?"
LangString STR_Running ${LANG_HEBREW} "נראה שהתוכנית Gajim מורצת כעת.$\n\
אנא צא מן Gajim ואתחל את מסיר ההתקנה."
Section "Gajim" SecGajim
SectionIn RO
SetOutPath "$INSTDIR"
File /r "mingw32\*.*"
WriteRegStr HKCU "Software\Gajim" "" $INSTDIR
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayName" "Gajim"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "UninstallString" "$INSTDIR\Uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayIcon" "$INSTDIR\bin\Gajim.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayVersion" "${VERSION}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "URLInfoAbout" "https://www.gajim.org/"
WriteUninstaller "$INSTDIR\Uninstall.exe"
SetOutPath "$INSTDIR\bin"
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
SetShellVarContext current
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Gajim.lnk" "$INSTDIR\bin\Gajim.exe"
SetShellVarContext all
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Gajim.lnk" "$INSTDIR\bin\Gajim.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section $(NAME_SecDesktopIcon) SecDesktopIcon
SetShellVarContext current
SetOutPath "$INSTDIR\bin"
CreateShortCut "$DESKTOP\Gajim.lnk" "$INSTDIR\bin\Gajim.exe"
SectionEnd
Section $(NAME_SecAutostart) SecAutostart
SetShellVarContext current
SetOutPath "$INSTDIR\bin"
CreateShortCut "$SMSTARTUP\Gajim.lnk" "$INSTDIR\bin\Gajim.exe"
SectionEnd
Section "Uninstall"
RMDir /r "$INSTDIR"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
SetShellVarContext current
Delete "$SMPROGRAMS\$StartMenuFolder\Gajim.lnk"
Delete "$SMPROGRAMS\$StartMenuFolder\Change Theme.lnk"
RMDir "$SMPROGRAMS\$StartMenuFolder"
Delete "$DESKTOP\Gajim.lnk"
Delete "$SMSTARTUP\Gajim.lnk"
SetShellVarContext all
Delete "$SMPROGRAMS\$StartMenuFolder\Gajim.lnk"
Delete "$SMPROGRAMS\$StartMenuFolder\Change Theme.lnk"
RMDir "$SMPROGRAMS\$StartMenuFolder"
DeleteRegKey /ifempty HKCU "Software\Gajim"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim"
SectionEnd
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecGajim} $(DESC_SecGajim)
!insertmacro MUI_DESCRIPTION_TEXT ${SecDesktopIcon} $(DESC_SecDesktopIcon)
!insertmacro MUI_DESCRIPTION_TEXT ${SecAutostart} $(DESC_SecAutostart)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Function un.onInit
; Check that Gajim is not running before uninstalling
FindWindow $0 "gdkWindowToplevel" "Gajim"
StrCmp $0 0 Remove
MessageBox MB_ICONSTOP|MB_OK $(STR_Running)
Quit
Remove:
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
Function .onInit
BringToFront
; Check if already running
; If so don't open another but bring to front
System::Call "kernel32::CreateMutexA(i 0, i 0, t '$(^Name)') i .r0 ?e"
Pop $0
StrCmp $0 0 launch
StrLen $0 "$(^Name)"
IntOp $0 $0 + 1
FindWindow $1 '#32770' '' 0 $1
IntCmp $1 0 +3
System::Call "user32::ShowWindow(i r1,i 9) i." ; If minimized then maximize
System::Call "user32::SetForegroundWindow(i r1) i." ; Bring to front
Abort
launch:
; Check to see if old install (inno setup) is already installed
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Gajim_is1" "UninstallString"
; remove first and last " char
StrLen $0 $R0
IntOp $0 $0 - 2
strcpy $1 $R0 $0 1
IfFileExists $1 +1 NotInstalled
MessageBox MB_YESNO|MB_DEFBUTTON2|MB_TOPMOST $(STR_Installed) IDNO Quit
StrCmp $R1 2 Quit +1
ExecWait '$R0 _?=$INSTDIR' $R2
StrCmp $R2 0 +1 Quit
NotInstalled:
; Check to see if new installer (NSIS)already installed
ReadRegStr $R3 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "UninstallString"
IfFileExists $R3 +1 ReallyNotInstalled
MessageBox MB_YESNO|MB_DEFBUTTON2|MB_TOPMOST $(STR_Installed) IDNO Quit
StrCmp $R4 2 Quit +1
ExecWait '$R3 _?=$INSTDIR' $R5
StrCmp $R5 0 ReallyNotInstalled Quit
Quit:
Quit
ReallyNotInstalled:
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

View File

@ -0,0 +1,3 @@
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>
</svg>

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

View File

@ -0,0 +1,3 @@
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"/>
</svg>

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

View File

@ -0,0 +1,3 @@
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/>
</svg>

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 942 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

View File

@ -0,0 +1,3 @@
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/>
</svg>

After

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 B

View File

@ -0,0 +1,3 @@
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="m12 2c-5.52 0-10 4.48-10 10s4.48 10 10 10 10-4.48 10-10-4.48-10-10-10zm0 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8 3.58-8 8-8zm-5 7v2h10v-2h-10z"/>
</svg>

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 B

View File

@ -0,0 +1,3 @@
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/>
</svg>

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 787 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

View File

@ -0,0 +1,3 @@
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>
</svg>

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

View File

@ -0,0 +1,3 @@
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"/>
</svg>

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

View File

@ -0,0 +1,3 @@
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/>
</svg>

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 942 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Some files were not shown because too many files have changed in this diff Show More