Merge pull request #6459 from clementine-player/mingw

Build windows release
This commit is contained in:
John Maguire 2019-11-15 12:31:55 +00:00 committed by GitHub
commit 62edd70188
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 236 additions and 48 deletions

View File

@ -94,6 +94,23 @@ commands:
- << parameters.build >>/*
- store_artifacts:
path: /tmp/artifacts/<< parameters.build >>
copy_windows_artifacts:
description: Copy build artifacts
steps:
- run:
name: Create artifact output directory
command: mkdir -p /tmp/artifacts/windows
- run:
name: Copy exe to artifacts directory
command: cp dist/windows/ClementineSetup*.exe /tmp/artifacts/windows
- persist_to_workspace:
root: /tmp/artifacts
paths:
- windows/*
- store_artifacts:
path: /tmp/artifacts/windows
install_bionic_dependencies:
description: Install Bionic dependencies
steps:
@ -478,6 +495,184 @@ jobs:
- copy_rpm_artifacts:
build: fedora-31
build_mingw:
docker:
- image: eu.gcr.io/clementine-data/mingw-w64:latest
environment:
PKG_CONFIG_PATH: /target/lib/pkgconfig
steps:
- checkout
- run:
name: CMake
working_directory: bin
command: >
cmake ..
-DCMAKE_TOOLCHAIN_FILE=../Toolchain-mingw32.cmake
-DCMAKE_BUILD_TYPE=Release
- run:
name: Make
working_directory: bin
command: make -j2
- run:
name: Copy output exes
working_directory: dist/windows
command: cp ../../bin/*.exe .
- run:
name: Copy base runtime DLLs
command: >
cp
/usr/lib/gcc/i686-w64-mingw32/*-posix/libgcc_s_sjlj-1.dll
/usr/lib/gcc/i686-w64-mingw32/*-posix/libstdc++-6.dll
/usr/i686-w64-mingw32/lib/libwinpthread-1.dll
~/project/dist/windows
- run:
name: Copy DLL dependencies
working_directory: /target/bin
command: >
cp
glew32.dll
libcdio-16.dll
libchromaprint.dll
libeay32.dll
libfaad.dll
libffi-6.dll
libfftw3-3.dll
libFLAC-8.dll
libgcrypt-20.dll
libgio-2.0-0.dll
libglib-2.0-0.dll
libgmodule-2.0-0.dll
libgmp-10.dll
libgnutls-30.dll
libgobject-2.0-0.dll
libgpg-error-0.dll
libgpod.dll
libgstapp-1.0-0.dll
libgstaudio-1.0-0.dll
libgstbase-1.0-0.dll
libgstcontroller-1.0-0.dll
libgstfft-1.0-0.dll
libgstnet-1.0-0.dll
libgstpbutils-1.0-0.dll
libgstreamer-1.0-0.dll
libgstriff-1.0-0.dll
libgstrtp-1.0-0.dll
libgstrtsp-1.0-0.dll
libgstsdp-1.0-0.dll
libgsttag-1.0-0.dll
libgstvideo-1.0-0.dll
libgthread-2.0-0.dll
libhogweed-4.dll
libiconv-2.dll
libid3tag.dll
libintl-8.dll
libmad.dll
libmms-0.dll
libmp3lame-0.dll
libnettle-6.dll
libogg-0.dll
liboil-0.3-0.dll
liborc-0.4-0.dll
liborc-test-0.4-0.dll
libp11-kit-0.dll
libplist.dll
libpsl-5.dll
libprotobuf-17.dll
libsoup-2.4-1.dll
libspeex-1.dll
libspotify.dll
libsqlite3-0.dll
libtag.dll
libtasn1-6.dll
libvorbis-0.dll
libvorbisenc-2.dll
libxml2-2.dll
Qt5Concurrent.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Network.dll
Qt5NetworkAuth.dll
Qt5OpenGL.dll
Qt5Sql.dll
Qt5Svg.dll
Qt5Widgets.dll
Qt5WinExtras.dll
Qt5Xml.dll
Qt5XmlPatterns.dll
ssleay32.dll
zlib1.dll
~/project/dist/windows
- run: mkdir dist/windows/imageformats
- run:
name: Copy Qt imageformat plugin DLLs
working_directory: /target/plugins
command: >
cp
imageformats/qgif.dll
imageformats/qjpeg.dll
~/project/dist/windows/imageformats
- run: mkdir dist/windows/platforms
- run:
name: Copy Qt platforms plugin DLLs
working_directory: /target/plugins
command: >
cp
platforms/qwindows.dll
~/project/dist/windows/platforms
- run: mkdir dist/windows/gio-modules
- run:
name: Copy GIO modules
command: cp /target/lib/gio/modules/libgiognutls.dll dist/windows/gio-modules
- run: mkdir dist/windows/gstreamer-plugins
- run:
name: Copy gstreamer plugins
working_directory: /target/lib/gstreamer-1.0
command: >
cp
libgstapetag.dll
libgstapp.dll
libgstasf.dll
libgstaudioconvert.dll
libgstaudiofx.dll
libgstaudioparsers.dll
libgstaudioresample.dll
libgstaudiotestsrc.dll
libgstautodetect.dll
libgstcdio.dll
libgstcoreelements.dll
libgstdirectsoundsink.dll
libgstequalizer.dll
libgstfaad.dll
libgstflac.dll
libgstgdp.dll
libgstgio.dll
libgsticydemux.dll
libgstid3demux.dll
libgstisomp4.dll
libgstlame.dll
libgstlibav.dll
libgstmad.dll
libgstmms.dll
libgstogg.dll
libgstplayback.dll
libgstreplaygain.dll
libgstsouphttpsrc.dll
libgstspectrum.dll
libgstspeex.dll
libgsttaglib.dll
libgsttcp.dll
libgsttypefindfunctions.dll
libgstudp.dll
libgstvolume.dll
libgstvorbis.dll
libgstwavparse.dll
~/project/dist/windows/gstreamer-plugins
- run:
name: Build windows installer
working_directory: dist/windows
command: makensis clementine.nsi
- copy_windows_artifacts
build_mac:
macos:
xcode: "11.0.0"
@ -587,6 +782,7 @@ workflows:
- build_fedora_29_64
- build_fedora_30_64
- build_fedora_31_64
- build_mingw
- build_mac:
filters:
branches:
@ -605,6 +801,7 @@ workflows:
- build_fedora_29_64
- build_fedora_30_64
- build_fedora_31_64
- build_mingw
- build_mac
filters:
branches:

2
.gitignore vendored
View File

@ -5,7 +5,6 @@
# *.[oa]
# *~
*.pyc
*.dll
*.exe
*.pyd
build/
@ -19,7 +18,6 @@ dist/windows/clementine.nsi
dist/windows/gstreamer-plugins
dist/windows/gio-modules
dist/windows/imageformats
dist/windows/nsisplugins
dist/windows/PyQt4
dist/windows/libpython2.7.zip
mingw/

View File

@ -6,15 +6,10 @@ set(TINYSVCMDNS-SOURCES
mdnsd.c
)
find_library(PTHREAD
pthread
)
add_library(tinysvcmdns STATIC
${TINYSVCMDNS-SOURCES}
)
target_link_libraries(tinysvcmdns
${PTHREAD}
ws2_32
)

View File

@ -78,7 +78,6 @@ pkg_check_modules(TAGLIB taglib)
if (WIN32)
find_package(ZLIB REQUIRED)
find_library(QTSPARKLE_LIBRARIES qtsparkle-qt5)
endif (WIN32)
find_library(LASTFM5_LIBRARIES lastfm5)
@ -90,9 +89,9 @@ find_path(SPARSEHASH_INCLUDE_DIRS google/sparsetable)
# QT
set(QT_MIN_VERSION 5.6.0)
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core Concurrent Widgets Network Sql Xml OpenGL Test)
find_package(Qt5DBus ${QT_MIN_VERSION})
if(HAVE_X11)
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS X11Extras)
find_package(Qt5DBus ${QT_MIN_VERSION})
endif()
if(APPLE)
find_package(Qt5 REQUIRED COMPONENTS MacExtras)

17
Toolchain-mingw32.cmake Normal file
View File

@ -0,0 +1,17 @@
# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++
SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc)
SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH /target )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

View File

@ -274,7 +274,6 @@ Section "Clementine" Clementine
File "libcdio-16.dll"
File "libchromaprint.dll"
File "libeay32.dll"
File "libfaac.dll"
File "libfaad.dll"
File "libffi-6.dll"
File "libfftw3-3.dll"
@ -308,7 +307,6 @@ Section "Clementine" Clementine
File "libiconv-2.dll"
File "libid3tag.dll"
File "libintl-8.dll"
File "liblastfm.dll"
File "libmad.dll"
File "libmms-0.dll"
File "libmp3lame-0.dll"
@ -320,8 +318,7 @@ Section "Clementine" Clementine
File "libp11-kit-0.dll"
File "libplist.dll"
File "libpsl-5.dll"
File "libprotobuf-9.dll"
File "libqjson.dll"
File "libprotobuf-17.dll"
File "libsoup-2.4-1.dll"
File "libspeex-1.dll"
File "libspotify.dll"
@ -331,16 +328,19 @@ Section "Clementine" Clementine
File "libtasn1-6.dll"
File "libvorbis-0.dll"
File "libvorbisenc-2.dll"
File "libwinpthread-1.dll"
File "libxml2-2.dll"
File "mingwm10.dll"
File "pthreadGC2.dll"
File "QtCore4.dll"
File "QtGui4.dll"
File "QtNetwork4.dll"
File "QtOpenGL4.dll"
File "QtSql4.dll"
File "QtSvg4.dll"
File "QtXml4.dll"
File "Qt5Concurrent.dll"
File "Qt5Core.dll"
File "Qt5Gui.dll"
File "Qt5Network.dll"
File "Qt5OpenGL.dll"
File "Qt5Sql.dll"
File "Qt5Svg.dll"
File "Qt5Widgets.dll"
File "Qt5WinExtras.dll"
File "Qt5Xml.dll"
File "Qt5XmlPatterns.dll"
File "ssleay32.dll"
File "zlib1.dll"
@ -403,8 +403,14 @@ SectionEnd
Section "Qt image format plugins" imageformats
SetOutPath "$INSTDIR\imageformats"
File "/oname=qgif4.dll" "imageformats\qgif4.dll"
File "/oname=qjpeg4.dll" "imageformats\qjpeg4.dll"
File "/oname=qgif.dll" "imageformats\qgif.dll"
File "/oname=qjpeg.dll" "imageformats\qjpeg.dll"
SectionEnd
Section "Qt platform plugins" platforms
SetOutPath "$INSTDIR\platforms"
File "/oname=qwindows.dll" "platforms\qwindows.dll"
SectionEnd
Section "GIO modules" gio-modules
@ -429,7 +435,6 @@ Section "Gstreamer plugins" gstreamer-plugins
File "/oname=libgstcoreelements.dll" "gstreamer-plugins\libgstcoreelements.dll"
File "/oname=libgstdirectsoundsink.dll" "gstreamer-plugins\libgstdirectsoundsink.dll"
File "/oname=libgstequalizer.dll" "gstreamer-plugins\libgstequalizer.dll"
File "/oname=libgstfaac.dll" "gstreamer-plugins\libgstfaac.dll"
File "/oname=libgstfaad.dll" "gstreamer-plugins\libgstfaad.dll"
File "/oname=libgstflac.dll" "gstreamer-plugins\libgstflac.dll"
File "/oname=libgstgdp.dll" "gstreamer-plugins\libgstgdp.dll"

BIN
dist/windows/nsisplugins/KillProc.dll vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
dist/windows/nsisplugins/nsisos.dll vendored Normal file

Binary file not shown.

View File

@ -1357,7 +1357,6 @@ if (WIN32)
target_link_libraries(clementine_lib
protobuf
${ZLIB_LIBRARIES}
${QTSPARKLE_LIBRARIES}
tinysvcmdns
dsound
)

View File

@ -96,10 +96,6 @@ QDBusArgument& operator<<(QDBusArgument& arg, const QImage& image);
const QDBusArgument& operator>>(const QDBusArgument& arg, QImage& image);
#endif
#ifdef Q_OS_WIN32
#include <qtsparkle-qt5/Updater>
#endif
// Load sqlite plugin on windows and mac.
#include <QtPlugin>
Q_IMPORT_PLUGIN(QSQLiteDriverPlugin)
@ -415,11 +411,6 @@ int main(int argc, char* argv[]) {
LoadTranslation("clementine", a.applicationDirPath(), language);
LoadTranslation("clementine", QDir::currentPath(), language);
#ifdef Q_OS_WIN32
// Set the language for qtsparkle
qtsparkle::LoadTranslations(language);
#endif
// Icons
IconLoader::Init();

View File

@ -38,10 +38,6 @@
#include <QUndoStack>
#include <QtDebug>
#ifdef Q_OS_WIN32
#include <qtsparkle-qt5/Updater>
#endif
#include "core/appearance.h"
#include "core/application.h"
#include "core/backgroundstreams.h"
@ -834,15 +830,6 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd,
connect(check_updates, SIGNAL(triggered(bool)), SLOT(CheckForUpdates()));
#endif
#ifdef Q_OS_WIN32
qLog(Debug) << "Creating sparkle updater";
qtsparkle::Updater* updater = new qtsparkle::Updater(
QUrl("https://clementine-data.appspot.com/sparkle-windows"), this);
updater->SetNetworkAccessManager(new NetworkAccessManager(this));
updater->SetVersion(CLEMENTINE_VERSION_SPARKLE);
connect(check_updates, SIGNAL(triggered()), updater, SLOT(CheckNow()));
#endif
// Global shortcuts
connect(global_shortcuts_, SIGNAL(Play()), app_->player(), SLOT(Play()));
connect(global_shortcuts_, SIGNAL(Pause()), app_->player(), SLOT(Pause()));