dino icon indicating copy to clipboard operation
dino copied to clipboard

Windows Support

Open enko opened this issue 7 years ago • 76 comments

This ticket should serve as a kind of meta ticket, to track the efforts needed to bring dino to windows. I have automated the build in #304, so we can put out builds without any problems.

From my small assessment there are two high priority that needs a fix before any other work for the windows port can be done:

  • is_24h_format from helper.vala crashes dino. From my limited knowledge of GTK, this seems to be ok to crash since there is no gnome-functionality on windows?
  • Notifications are broken upstream. As a possible fix, just disable the notifications on windows, till a proper backend lands in GTK?

On the chat there was a discussion if dino should look native, I think it should, but the first priority should be that it does not crash or behaves funny. Then there should be put energy into making dino look native.

enko avatar Mar 18 '18 18:03 enko

I think it should be native, too. Is this only a question of GUI? Or are there other related issues if we decide for one or another? I mean, if people don't like it - fork it, do it the other way.... or?

Echolon avatar Mar 18 '18 19:03 Echolon

Vote native

Echolon avatar Mar 18 '18 19:03 Echolon

Vote against native

Echolon avatar Mar 18 '18 19:03 Echolon

Someone made a dummy win32 notification backend for GNotification https://bugzilla.gnome.org/show_bug.cgi?id=776583#c7 I hope this gets fixed soon

DeSaurus avatar Mar 25 '18 21:03 DeSaurus

I think a "vote" for/against "native" when it hasn't been determined what "native" means just before the vote is not useful.

LuccoJ avatar Mar 29 '18 20:03 LuccoJ

@LuccoJ HI, guess you are probably right. Thought it's clear - may someone help out with a good definition?

Anyway, the vote so far made clear that this is polarizing topic. That's an evaluation, too.

Echolon avatar Mar 29 '18 22:03 Echolon

@enko Hi, any updates so far? If there are issues, maybe someone else could help?

Echolon avatar Apr 24 '18 20:04 Echolon

Just FYI, Dino works on WSL with a vcXsrv after intalling all dependencies. At first it crashed on load, but was fixed after running "sudo dpkg-reconfigure tzdata".

LAGonauta avatar Feb 15 '19 20:02 LAGonauta

@LAGonauta Thanks for your info. Any extra info we might need to know? If you can exactly document how you make it run, that would be great!

Echolon avatar Feb 15 '19 23:02 Echolon

Sure: After fresh install of WSL Ubuntu 18.04

Update installation:

sudo apt update && sudo apt upgrade

Install dependencies:

sudo apt install build-essential ninja-build cmake valac libgee-0.8-dev libsqlite3-dev libgdk-pixbuf2.0-dev libgtk-3-dev libsoup2.4-dev libgpgme-dev libqrencode-dev libgcrypt20-dev dbus-x11

Clone and build:

sudo apt install git
git clone https://github.com/dino/dino/
cd dino && ./configure
make

Configure timezone data:

sudo dpkg-reconfigure tzdata

Install X server:

https://sourceforge.net/projects/vcxsrv/ After installation, run Xlaunch on multi-window mode.

Run:

Go back to WSL and run dino:

export DISPLAY=:0
export LIBGL_ALWAYS_INDIRECT=1
build/dino

Optional dependency:

sudo apt install fonts-emojione

It is not perfect as for some reason the window does not behave as a normal window on Windows (probably because of the decorations), however all the rest seems to be working fine. Definitely prettier than Gajim :P

LAGonauta avatar Feb 16 '19 11:02 LAGonauta

Do you really need to build dino yourself in this case or could you just add the repository?

YtvwlD avatar Feb 16 '19 11:02 YtvwlD

@LAGonauta I guess that NOT for Microsoft Windows, right?

This is what the issue is about

Echolon avatar Feb 16 '19 12:02 Echolon

Yes, it is Microsoft Windows: https://docs.microsoft.com/en-us/windows/wsl/install-win10

EDIT: Of course it can't be distributed, may may help debugging.

LAGonauta avatar Feb 16 '19 12:02 LAGonauta

Ahh, Win7 was my last MS system years ago, never used Win10 for all reasons ;)

@enko experienced big isses with the MS visual studio compling an .exe. Do you (or anyone else) know people with more experience with this? @LAGonauta

However, thanks for your post!

Echolon avatar Feb 16 '19 14:02 Echolon

dino!

With some help from cacahuete from Dino MUC I was able to compile with MSYS2, as shown in the image above 😀 I disabled CSD as it is strange on Windows and not compatible with AeroSnap, but it is working. Current patch: (for some reason I had to instantiate those classes when compiling on MSYS2) instance.txt

Notifications are not crashing thanks to the changes in glib 👍

Current build script, based #304:

#!/bin/bash

cd dino && \
    ./configure --with-libsignal-in-tree && \
    make -j5 && \
    cd build && \
    mkdir -p dist && \
    cp *.exe *.dll dist && \
    cd dist && \
    ldd dino.exe | grep mingw64 | awk '{print "cp /mingw64/bin/"$1" ."}' | sh && \
    mkdir -p ./share/icons && cp -r /mingw64/share/icons ./share/ && \
    mkdir -p ./share/themes && cp -r /mingw64/share/themes ./share/ && \
    mkdir -p ./share/glib-2.0/schemas && cp -r /mingw64/share/glib-2.0/schemas ./share/glib-2.0/ && \
    mkdir -p ./lib/gdk-pixbuf-2.0/ && cp -r /mingw64/lib/gdk-pixbuf-2.0 ./lib/ && \
    mkdir -p ./lib/gio/ && cp -r /mingw64/lib/gio ./lib/ && \
    mkdir -p ./plugins/ && mv -f http-files.dll omemo.dll openpgp.dll ./plugins/ && \
    find . -iname "*.dll" -exec ldd {} + | grep mingw64 | awk '{print "cp /mingw64/bin/"$1" ."}' | sh

It seems that Vala or GTK3 loads most modules dynamically, and ldd is not able to find them, thus we must copy them manually. ~There are still some libraries to be copied, as OMEMO and OpenPGP are not working.~ ~OMEMO works, but GPGME is segfaulting. (remove openpgp.dll for now from the plugin folder for Dino to work)~ Image preview, and opening links/attachments are also not working.

LAGonauta avatar Feb 08 '20 09:02 LAGonauta

Since MAM might be hiding some stuff, I'll post my findings here too, with @LAGonauta build...

It can't find the plugins... dinowinplugins ...so I create that and put those 3 files there and OMEMO and http_upload are working :tada:

Now for PGP... dinopgperror

...and I have the one from www.gpg4win.org installed but it's in C:\Program Files (x86)\GnuPG\bin\ I can move stuff around... put it in C:\Program Files (x86)\GNU\GnuPG\ yet dingpgme ...ok copy that .exe in the Dino folder... aaaaannnd.... crash... :(

licaon-kter avatar Feb 09 '20 02:02 licaon-kter

Branch with my tweaks: https://github.com/LAGonauta/dino/tree/master-windows-changes Newest install dependencies script:

#!/bin/bash
pacman -S --needed \
       mingw64/mingw-w64-x86_64-gcc \
       mingw64/mingw-w64-x86_64-cmake \
       mingw64/mingw-w64-x86_64-ninja \
       mingw64/mingw-w64-x86_64-libsoup \
       mingw64/mingw-w64-x86_64-gtk3 \
       mingw64/mingw-w64-x86_64-sqlite3 \
       mingw64/mingw-w64-x86_64-gobject-introspection \
       mingw64/mingw-w64-x86_64-glib2 \
       mingw64/mingw-w64-x86_64-glib-networking \
       mingw64/mingw-w64-x86_64-libgcrypt \
       mingw64/mingw-w64-x86_64-libgee \
       mingw64/mingw-w64-x86_64-pkg-config \
       mingw64/mingw-w64-x86_64-vala \
       mingw64/mingw-w64-x86_64-gsettings-desktop-schemas \
       mingw64/mingw-w64-x86_64-qrencode

Newest build script:

#!/bin/bash

cd dino && \
    ./configure --with-libsignal-in-tree --no-debug --release && \
    make -j5 && \
    cd build && \
    mkdir -p dist && \
    strip -s dino.exe *.dll && \
    cp *.exe *.dll dist && \
    cd dist && \
    ldd dino.exe | grep mingw64 | awk '{print "cp /mingw64/bin/"$1" ."}' | sh && \
    mkdir -p ./share/icons && cp -r /mingw64/share/icons ./share/ && \
    mkdir -p ./share/themes && cp -r /mingw64/share/themes ./share/ && \
    mkdir -p ./share/glib-2.0/schemas && cp -r /mingw64/share/glib-2.0/schemas ./share/glib-2.0/ && \
    mkdir -p ./lib/gdk-pixbuf-2.0/ && cp -r /mingw64/lib/gdk-pixbuf-2.0 ./lib/ && \
    mkdir -p ./lib/gio/ && cp -r /mingw64/lib/gio ./lib/ && \
    mkdir -p ./plugins/ && mv -f http-files.dll openpgp.dll omemo.dll ./plugins/ && \
    find . -iname "*.dll" -exec ldd {} + | grep mingw64 | awk '{print "cp /mingw64/bin/"$1" ."}' | sh

LAGonauta avatar May 04 '20 21:05 LAGonauta

Any chance this gets merged to upstream dino repo, so there will be zip or installer exe available for Dino on Windows?

The biggest amount of friends & family uses Windows and there is no really viable xmpp client at the moment for windows.

gsantner avatar May 13 '20 20:05 gsantner

@LAGonauta How do you get the mingw64/... packages? It seems that I have to add some database that I don't have.

stevenroose avatar May 17 '20 17:05 stevenroose

Those commands are exclusive to MSYS2: https://www.msys2.org/

LAGonauta avatar May 17 '20 17:05 LAGonauta

New install dependencies script, adding ntldd as ldd did not always return all dependencies:

#!/bin/bash
pacman -S --needed \
       mingw64/mingw-w64-x86_64-gcc \
       mingw64/mingw-w64-x86_64-cmake \
       mingw64/mingw-w64-x86_64-enchant \
       mingw64/mingw-w64-x86_64-ninja \
       mingw64/mingw-w64-x86_64-libsoup \
       mingw64/mingw-w64-x86_64-gtk3 \
       mingw64/mingw-w64-x86_64-sqlite3 \
       mingw64/mingw-w64-x86_64-gobject-introspection \
       mingw64/mingw-w64-x86_64-glib2 \
       mingw64/mingw-w64-x86_64-glib-networking \
       mingw64/mingw-w64-x86_64-libgcrypt \
       mingw64/mingw-w64-x86_64-libgee \
       mingw64/mingw-w64-x86_64-gpgme \
       mingw64/mingw-w64-x86_64-pkg-config \
       mingw64/mingw-w64-x86_64-vala \
       mingw64/mingw-w64-x86_64-gsettings-desktop-schemas \
       mingw64/mingw-w64-x86_64-qrencode \
       mingw64/mingw-w64-x86_64-libsignal-protocol-c \
       mingw64/mingw-w64-x86_64-ntldd-git

New build script that uses make install to be easier to maintain:

cd dino && \
    ./configure --program-prefix=${PWD}/dist --no-debug --release --disable-fast-vapi && \
    make -j5 && \
    make install && \
    cd dist && \
    cp /mingw64/bin/gdbus.exe ./bin && \
    cp /mingw64/bin/gspawn-win64-helper.exe ./bin && \
    cp -r /mingw64/share/xml ./share && \
    cp -r /mingw64/lib/enchant-2 ./lib && \
    mkdir -p ./lib/gdk-pixbuf-2.0/ && cp -r /mingw64/lib/gdk-pixbuf-2.0 ./lib/ && \
    mkdir -p ./lib/gio/ && cp -r /mingw64/lib/gio ./lib/ && \
    mkdir -p ./share/icons && cp -r /mingw64/share/icons ./share/ && \
    mkdir -p ./share/locale && cp -r /mingw64/share/locale ./share/ && \
    mkdir -p ./share/glib-2.0/schemas && cp -r /mingw64/share/glib-2.0/schemas ./share/glib-2.0/ && \
    rm -r ./include && 
    find . -iname "*.dll.a" -exec rm {} + && \
    find . -iname "*.exe" -exec ntldd {} + | grep mingw64 | awk '{print "cp /mingw64/bin/"$1" ."}' | sh && \
    find . -iname "*.dll" -exec ntldd {} + | grep mingw64 | awk '{print "cp /mingw64/bin/"$1" ."}' | sh && \
    find . -iname "*.exe" -exec ldd {} + | grep mingw64 | awk '{print "cp /mingw64/bin/"$1" ."}' | sh && \
    find . -iname "*.dll" -exec ldd {} + | grep mingw64 | awk '{print "cp /mingw64/bin/"$1" ."}' | sh && \
    find . -iname "*.exe" -exec strip -s {} + && \
    find . -iname "*.dll" -exec strip -s {} + && \
    mv *.dll ./bin

LAGonauta avatar May 18 '20 23:05 LAGonauta

Anyway you could release a precompiled built for testing?

Im currently in the process of upgrading our xmpp system in our organisation (move to prosody and new client). We have a mixed environment with windows linux and mac clients but i would love to deploy a single desktop client to all users. Dino seems to be a great solution as it has all features i would like to use built in, the only problem atm is the missing windows support.

Any timeline on when this will be merged and prebuilt packages available? 0.2 Milestone?

Currently we are using pidgin but since more users want to be able to use more than one device with all messages synced this wont be a solution for much longer.

sonicnkt avatar Jun 11 '20 08:06 sonicnkt

@sonicnkt better use anything than Pidgin. If the prebuilds are not gonna make it, evtl. have a look at Gajim, Converse.js or UWPX (Alpha)

Echolon avatar Jun 11 '20 09:06 Echolon

Yeah i set this up a few years ago and it had a clean ui and worked for everything we needed back then. Today it wont cut it anymore.

Didnt really like gajim as well i will take a look at UWPX but im not sure this will work on all clients as we are using win10 LTSB/LTSC releases. The Sideload installer is quite huge with 300MB 😱

I know this is getting a bit off topic but how does converse handle large file transfers? we are using xmpp alot to transfer huge files p2p internally.

sonicnkt avatar Jun 11 '20 09:06 sonicnkt

Can anyone just build .exe installer for Dino please?))

langrafik avatar Jun 29 '20 12:06 langrafik

@langrafik Afaik the Dino devs will release windows builds once it is considered good enough.

Till this is achieved you can have a look here where someone makes Dino able to compile on Windows. If you managed to build it you can easily create an installer by using NSIS (see my proof-of-concept).

mdosch avatar Jul 10 '20 15:07 mdosch

Hey everyone! For those who just wants to try out Dino on Windows, I have set up a CI based on Github actions so you don't have to: https://github.com/LAGonauta/dino/pull/3. The PR is currently a draft but it is usable (that's my main XMPP client on Windows atm). The CI outputs a Windows .exe installer for every release I perform. You can get the most fresh builds there: https://github.com/Deluvi/dino/releases (And maybe someday here: https://github.com/LAGonauta/dino/releases and eventually, with my best hope, here https://github.com/dino/dino/releases 😄) It is not an official release in any shape or form, just something I hacked over the week-end. It's more of a demo of what LAGonauta achieved in his compatibility tweaks PR: a working version of Dino on Windows!

Deluvi avatar Oct 06 '20 18:10 Deluvi

@Deluvi why to PR this CI workflow here?

licaon-kter avatar Oct 06 '20 20:10 licaon-kter

To be clear, I am doing my PR on top of LAGonauta's PR. I don't think my PR should be merged before his PR is upstreamed on Dino in order to keep his PR scoped: I will probably rebase my CI PR on the upstream repository.

However, Dino will need a Windows CI eventually. The state of package managers on Windows requires, unfortunately, the upstream developers to ship their own Windows build unlike Linux distributions. How this build will be performed is a needed conversation with the maintainers if we wants Dino to be shipped efficiently on Windows.

As an example, Transmission[1] and Inkscape[2] both uses appveyor to automatically builds their own Windows installer. Afterwards, those installers are picked up by the packages managers (such as Chocolatey) to be installed, no builds are performed by the maintainers of the choco packages[3][4].

I am in no way expert on that field, but it seems that, according to my examples, upstream Dino's maintainers will need to provide an official Windows build if we want to support that platform. A CI build would ease the burden of the maintainers to not build themselves manually the installer for each release while accepting contributions of improvement of the Windows build and ensuring the Windows build will not break in a future version.

[1]: Link of the CI workflow file, Link of latest release build [2]: Link of the CI workflow file, Link of latest release build [3]: Link to the Transmission's choco script [4]: Link to the Inkscape's choco script

Deluvi avatar Oct 07 '20 11:10 Deluvi

@Deluvi From my memory Dino devs explicitly said they want to officially ship Dino through official Windows Store only and that's what's keeping the lags PR from being merged (you may want to double check this with official dino channel).

wiktor-k avatar Oct 07 '20 12:10 wiktor-k