Compare commits

..
24 Commits
Author SHA1 Message Date
Cameron Gutman 141f6669e8 Version 0.0.4 2018-07-29 21:44:10 -07:00
Cameron Gutman 6300d242cc Update AppStream metadata 2018-07-29 21:40:34 -07:00
Cameron Gutman 186579266c Fix Online -> Offline computer transition 2018-07-29 19:08:29 -07:00
Cameron Gutman 13490af90c Replace OpenSSL dylibs with static build for macOS 10.10+ 2018-07-29 19:07:42 -07:00
R. Aidan Campbell 23a9c2cd9e context menu opened by default for offline hosts 2018-07-29 16:13:42 -07:00
R. Aidan Campbell 88631e4a63 Merge branch 'master' of github.com:cgutman/moonlight-qt 2018-07-29 16:04:53 -07:00
R. Aidan Campbell 9e744ce169 Now with WoL and PC deletion from QML. Deletion needs bugfix, possibly not committed to storage? 2018-07-29 16:04:45 -07:00
Cameron Gutman 77a68db8c1 Code signing for Mac 2018-07-29 15:35:51 -07:00
Cameron Gutman 27247f253c Add Travis CI badge 2018-07-29 13:50:11 -07:00
Cameron Gutman ada7f92c75 Travis CI for Mac 2018-07-29 13:38:05 -07:00
Cameron Gutman 87db4e88a5 Replace autogenerate app bundle strings with real ones and relocate the icon for Mac 2018-07-29 13:05:18 -07:00
R. Aidan Campbell 277594139b Updated macos .app icon to use proper logo 2018-07-29 10:21:53 -07:00
Cameron Gutman 79d5e35306 Mac deployment
- Use the SDL2 framework wholesale instead of manually extracting dylib and headers
- Run install_name_tool on the remaining dylibs so they use the correct load path
- Add generate-dmg.sh for creating packaged Mac builds
2018-07-29 03:38:59 -07:00
Cameron Gutman cda80b319e Publish artifacts from AppVeyor builds 2018-07-28 23:59:20 -07:00
Cameron Gutman ab4b024df4 Travis CI support 2018-07-28 22:49:36 -07:00
Cameron Gutman 7f9cbac232 Fix more AppVeyor bugs 2018-07-28 19:56:08 -07:00
Cameron Gutman 8470ffcb0d Fix some build script bugs uncovered by AppVeyor 2018-07-28 19:44:09 -07:00
Cameron Gutman 92c897762b Fix AppVeyor link 2018-07-28 19:33:11 -07:00
Cameron Gutman 36014cfcfd Add AppVeyor build status 2018-07-28 19:29:54 -07:00
Cameron Gutman df26f731eb Improve debugging messages 2018-07-28 16:06:26 -07:00
Cameron Gutman e39b5a6a72 Block x86 installs on x64 OSes 2018-07-28 13:59:27 -07:00
Cameron Gutman c7138fe36c Fix Discord link 2018-07-28 03:52:24 -07:00
Cameron Gutman b5deab772d Add Discord link 2018-07-28 03:47:34 -07:00
Cameron Gutman 4bfeccec74 Update README with more information 2018-07-28 03:45:45 -07:00
97 changed files with 1153 additions and 93 deletions
+40
View File
@@ -0,0 +1,40 @@
language: cpp
git:
depth: 1
matrix:
include:
- os: osx
compiler: clang
- os: linux
sudo: required
dist: xenial
compiler: gcc
addons:
apt:
sources:
- sourceline: 'ppa:beineri/opt-qt596-xenial'
packages:
- qt59base
- qt59quickcontrols2
- qt59svg
- libesd0-dev
- libgl-dev
install:
- '[ "$TRAVIS_OS_NAME" != osx ] || brew install qt5'
- '[ "$TRAVIS_OS_NAME" != osx ] || brew link --force qt5'
- if [[ "$TRAVIS_OS_NAME" = "linux" ]]; then export SDL2_VER=2.0.8 && wget https://www.libsdl.org/release/SDL2-$SDL2_VER.tar.gz && tar -xvf SDL2-$SDL2_VER.tar.gz && cd SDL2-$SDL2_VER && ./configure && make && sudo make install && cd ..; fi
before_script:
- '[ "$TRAVIS_OS_NAME" != "linux" ] || source /opt/qt59/bin/qt59-env.sh'
- qmake -v
- '[[ "$TRAVIS_OS_NAME" != linux || "$CXX" != clang++ ]] || export QMAKESPEC=linux-clang'
- '[[ "$TRAVIS_OS_NAME" != linux || "$CXX" != g++ ]] || export QMAKESPEC=linux-g++'
- '[ "$TRAVIS_OS_NAME" != osx ] || export QMAKESPEC=macx-clang'
script:
- qmake moonlight-qt.pro -spec $QMAKESPEC
- make debug
- make release
+17 -1
View File
@@ -1,9 +1,25 @@
# Moonlight PC
[Moonlight PC](http://moonlight-stream.com) is an open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield, but built to run on Windows, Mac, and Linux.
[Moonlight PC](http://moonlight-stream.com) is an open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield, but built to run on Windows, Mac, and Linux. This client is the successor to [Moonlight Chrome](https://github.com/moonlight-stream/moonlight-chrome) for streaming on PC.
Moonlight also has mobile versions for [Android](https://github.com/moonlight-stream/moonlight-android) and [iOS](https://github.com/moonlight-stream/moonlight-ios).
This client is currently still in development (pre-alpha), but the streaming performance is already much better than the older Moonlight Chrome client on many machines. Test releases may be available for your OS on the [Releases page](https://github.com/moonlight-stream/moonlight-qt/releases).
You can follow development on our [Discord server](https://discord.gg/6ERtzFY).
[![Windows AppVeyor Status](https://ci.appveyor.com/api/projects/status/glj5cxqwy2w3bglv/branch/master?svg=true)](https://ci.appveyor.com/project/cgutman/moonlight-qt/branch/master)
[![Mac and Linux Travis CI Status](https://travis-ci.org/moonlight-stream/moonlight-qt.svg?branch=master)](https://travis-ci.org/moonlight-stream/moonlight-qt)
## Features
- Hardware accelerated video decoding on Windows, Mac, and Linux
- Supports streaming at up to 90 FPS on high refresh rate monitors
- Supports streaming at 720p, 1080p, 1440p, or 4K
- 5.1 surround sound audio
- HEVC support for better image quality at reduced bandwidth
- Keyboard and mouse support
- Gamepad support with SDL gamepad mappings
## Building
1. Install the latest Qt SDK (and optionally, the Qt Creator IDE) from https://www.qt.io/download (select MSVC toolchain on Windows)
2. Run `git submodule update --init --recursive` from within `moonlight-qt/`
+9 -5
View File
@@ -5,22 +5,26 @@
<key>CFBundleExecutable</key>
<string>Moonlight</string>
<key>CFBundleGetInfoString</key>
<string>Created by Qt/QMake</string>
<string>Stream games from your NVIDIA GameStream-enabled PC</string>
<key>CFBundleIconFile</key>
<string>macos</string>
<string>moonlight</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.moonlight-qt</string>
<string>com.moonlight-stream.Moonlight</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>LSMinimumSystemVersion</key>
<string>10.10</string>
<key>NOTE</key>
<string>This file was generated by Qt/QMake.</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
<key>CFBundleVersion</key>
<string>0.0.4</string>
<key>CFBundleDisplayName</key>
<string>Moonlight</string>
</dict>
</plist>
+11 -9
View File
@@ -8,6 +8,9 @@ unix:!macx {
TARGET = Moonlight
}
# Support debug and release builds from command line for CI
CONFIG += debug_and_release
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
@@ -34,8 +37,8 @@ win32 {
LIBS += ws2_32.lib winmm.lib dxva2.lib ole32.lib
}
macx {
INCLUDEPATH += $$PWD/../libs/mac/include
LIBS += -L$$PWD/../libs/mac/lib
INCLUDEPATH += $$PWD/../libs/mac/include $$PWD/../libs/mac/Frameworks/SDL2.framework/Versions/A/Headers
LIBS += -L$$PWD/../libs/mac/lib -F$$PWD/../libs/mac/Frameworks
}
unix:!macx {
@@ -57,7 +60,7 @@ win32 {
CONFIG += ffmpeg
}
macx {
LIBS += -lssl -lcrypto -lSDL2 -lavcodec.58 -lavutil.56
LIBS += -lssl -lcrypto -lavcodec.58 -lavutil.56 -framework SDL2
LIBS += -lobjc -framework VideoToolbox -framework AVFoundation -framework CoreVideo -framework CoreGraphics -framework CoreMedia -framework AppKit
CONFIG += ffmpeg
}
@@ -182,16 +185,15 @@ unix:!macx: {
INSTALLS += target desktop icons appdata
}
win32 {
RC_ICONS = moonlight.ico
}
macx {
QMAKE_INFO_PLIST = $$PWD/Info.plist
APP_QML_FILES.files = res/macos.icns
APP_QML_FILES.path = Contents/Resources
QMAKE_BUNDLE_DATA += APP_QML_FILES
APP_BUNDLE_RESOURCES.files = moonlight.icns
APP_BUNDLE_RESOURCES.path = Contents/Resources
QMAKE_BUNDLE_DATA += APP_BUNDLE_RESOURCES
}
VERSION = 0.0.3
VERSION = 0.0.4
+6 -11
View File
@@ -148,31 +148,26 @@ private:
int pollsSinceLastAppListFetch = POLLS_PER_APPLIST_FETCH;
while (!isInterruptionRequested()) {
bool stateChanged = false;
for (int i = 0; i < TRIES_BEFORE_OFFLINING; i++) {
bool online = false;
for (int i = 0; i < TRIES_BEFORE_OFFLINING && !online; i++) {
for (auto& address : m_Computer->uniqueAddresses()) {
if (isInterruptionRequested()) {
return;
}
if (tryPollComputer(address, stateChanged)) {
online = true;
break;
}
}
// No need to continue retrying if we're online
if (m_Computer->state == NvComputer::CS_ONLINE) {
break;
}
}
// Check if we failed after all retry attempts
// Note: we don't need to acquire the read lock here,
// because we're on the writing thread.
if (m_Computer->state != NvComputer::CS_ONLINE) {
if (m_Computer->state != NvComputer::CS_OFFLINE) {
m_Computer->state = NvComputer::CS_OFFLINE;
stateChanged = true;
}
if (!online && m_Computer->state != NvComputer::CS_OFFLINE) {
m_Computer->state = NvComputer::CS_OFFLINE;
stateChanged = true;
}
// Grab the applist if it's empty or it's been long enough that we need to refresh
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
<id>com.moonlight_stream.Moonlight.desktop</id>
<id>com.moonlight_stream.Moonlight</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0+</project_license>
<name>Moonlight</name>
@@ -15,6 +15,23 @@
<url type="bugtracker">https://github.com/moonlight-stream/moonlight-qt/issues</url>
<url type="help">https://github.com/moonlight-stream/moonlight-docs/wiki/Setup-Guide</url>
<screenshots>
<screenshot type="default">
<image>https://moonlight-stream.com/appstream_resources/moonlight_screenshot_1.png</image>
</screenshot>
<screenshot>
<image>https://moonlight-stream.com/appstream_resources/moonlight_screenshot_2.png</image>
</screenshot>
</screenshots>
<releases>
<release version="0.0.4" date="2018-07-29">
<description>
<p>Initial pre-alpha release for Linux. Please file bugs!</p>
</description>
</release>
</releases>
<categories>
<category>Game</category>
<category>Qt</category>
@@ -29,33 +46,5 @@
<binary>moonlight</binary>
</provides>
<content_rating type="oars-1.1">
<content_attribute id="violence-cartoon">none</content_attribute>
<content_attribute id="violence-fantasy">none</content_attribute>
<content_attribute id="violence-realistic">none</content_attribute>
<content_attribute id="violence-bloodshed">none</content_attribute>
<content_attribute id="violence-sexual">none</content_attribute>
<content_attribute id="violence-desecration">none</content_attribute>
<content_attribute id="violence-slavery">none</content_attribute>
<content_attribute id="violence-worship">none</content_attribute>
<content_attribute id="drugs-alcohol">none</content_attribute>
<content_attribute id="drugs-narcotics">none</content_attribute>
<content_attribute id="drugs-tobacco">none</content_attribute>
<content_attribute id="sex-nudity">none</content_attribute>
<content_attribute id="sex-themes">none</content_attribute>
<content_attribute id="sex-homosexuality">none</content_attribute>
<content_attribute id="sex-prostitution">none</content_attribute>
<content_attribute id="sex-adultery">none</content_attribute>
<content_attribute id="sex-appearance">none</content_attribute>
<content_attribute id="language-profanity">none</content_attribute>
<content_attribute id="language-humor">none</content_attribute>
<content_attribute id="language-discrimination">none</content_attribute>
<content_attribute id="social-chat">none</content_attribute>
<content_attribute id="social-info">moderate</content_attribute>
<content_attribute id="social-audio">none</content_attribute>
<content_attribute id="social-location">none</content_attribute>
<content_attribute id="social-contacts">none</content_attribute>
<content_attribute id="money-purchasing">none</content_attribute>
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
<content_rating type="oars-1.0" />
</component>
+69 -29
View File
@@ -142,44 +142,68 @@ GridView {
horizontalAlignment: Text.AlignHCenter
}
Menu {
id: pcContextMenu
MenuItem {
text: "Wake PC"
onTriggered: computerModel.wakeComputer(index)
}
MenuItem {
text: "Delete PC"
onTriggered: {
deletePcDialog.pcIndex = index
// get confirmation first, actual closing is called from the dialog
deletePcDialog.open()
}
}
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton;
onClicked: {
if (model.addPc) {
addPcDialog.open()
}
else if (model.online) {
if (model.paired) {
// go to game view
var component = Qt.createComponent("AppView.qml")
var appView = component.createObject(stackView)
appView.computerIndex = index
appView.objectName = model.name
stackView.push(appView)
if(mouse.button === Qt.LeftButton) {
if (model.addPc) {
addPcDialog.open()
}
else {
if (!model.busy) {
var pin = ("0000" + Math.floor(Math.random() * 10000)).slice(-4)
// Stop polling, since pairing may make GFE unresponsive
ComputerManager.stopPollingAsync()
// Kick off pairing in the background
computerModel.pairComputer(index, pin)
// Display the pairing dialog
pairDialog.pin = pin
pairDialog.open()
else if (model.online) {
if (model.paired) {
// go to game view
var component = Qt.createComponent("AppView.qml")
var appView = component.createObject(stackView)
appView.computerIndex = index
appView.objectName = model.name
stackView.push(appView)
}
else {
// cannot pair while something is streaming or attempting to pair
errorDialog.text = "This PC is currently busy. Make sure to quit any running games and try again."
errorDialog.open()
if (!model.busy) {
var pin = ("0000" + Math.floor(Math.random() * 10000)).slice(-4)
// Stop polling, since pairing may make GFE unresponsive
ComputerManager.stopPollingAsync()
// Kick off pairing in the background
computerModel.pairComputer(index, pin)
// Display the pairing dialog
pairDialog.pin = pin
pairDialog.open()
}
else {
// cannot pair while something is streaming or attempting to pair
errorDialog.text = "This PC is currently busy. Make sure to quit any running games and try again."
errorDialog.open()
}
}
} else if(!model.online) {
pcContextMenu.open()
}
}
else {
// TODO: Wake on LAN and delete PC options
else { // right click
if(!model.addPc) { // but only for actual PCs, not the add-pc option
pcContextMenu.open()
}
}
}
}
@@ -218,6 +242,22 @@ GridView {
}
}
MessageDialog {
id: deletePcDialog
// don't allow edits to the rest of the window while open
modality:Qt.WindowModal
property int pcIndex : -1;
text:"Are you sure you want to unpair from this PC?"
standardButtons: StandardButton.Yes |StandardButton.No
onYes: {
console.log("deleting PC pairing for PC at index: " + pcIndex)
computerModel.deleteComputer(pcIndex);
// hack to remove the child from the gridview
model = createModel()
}
}
Dialog {
id: addPcDialog
property string label: "Enter the IP address of your GameStream PC"
Binary file not shown.
Binary file not shown.
+4
View File
@@ -142,6 +142,10 @@ int Session::sdlAudioInit(int /* audioConfiguration */,
s_SampleIndex = 0;
s_PendingDrops = s_PendingHardDrops = 0;
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Audio stream has %d channels",
opusConfig->channelCount);
return 0;
}
+8
View File
@@ -153,6 +153,9 @@ int Session::drSetup(int videoFormat, int width, int height, int frameRate, void
// don't have to hide and show the SDL window (which seems to
// cause pointer hiding to break on Windows).
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Video stream is %dx%dx%d (format 0x%x)",
width, height, frameRate, videoFormat);
return 0;
}
@@ -254,6 +257,7 @@ Session::Session(NvComputer* computer, NvApp& app)
switch (m_Preferences.audioConfig)
{
case StreamingPreferences::AC_AUTO:
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Autodetecting audio configuration");
m_StreamConfig.audioConfiguration = sdlDetermineAudioConfiguration();
break;
case StreamingPreferences::AC_FORCE_STEREO:
@@ -264,6 +268,10 @@ Session::Session(NvComputer* computer, NvApp& app)
break;
}
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Audio configuration: %d",
m_StreamConfig.audioConfiguration);
switch (m_Preferences.videoCodecConfig)
{
case StreamingPreferences::VCC_AUTO:
@@ -87,6 +87,9 @@ bool DXVA2Renderer::prepareDecoderContext(AVCodecContext* context)
return false;
}
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using DXVA2 accelerated renderer");
return true;
}
@@ -23,6 +23,10 @@ SdlRenderer::~SdlRenderer()
bool SdlRenderer::prepareDecoderContext(AVCodecContext*)
{
/* Nothing to do */
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using SDL software renderer");
return true;
}
@@ -88,6 +88,10 @@ bool
VAAPIRenderer::prepareDecoderContext(AVCodecContext* context)
{
context->hw_device_ctx = av_buffer_ref(m_HwContext);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using VAAPI accelerated renderer");
return true;
}
@@ -253,6 +253,10 @@ public:
virtual bool prepareDecoderContext(AVCodecContext* context) override
{
context->hw_device_ctx = av_buffer_ref(m_HwContext);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Using VideoToolbox accelerated renderer");
return true;
}
+1
View File
@@ -0,0 +1 @@
Versions/Current/Headers
+1
View File
@@ -0,0 +1 @@
Versions/Current/Resources
+1
View File
@@ -0,0 +1 @@
Versions/Current/SDL2
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>17C88</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>SDL2</string>
<key>CFBundleGetInfoString</key>
<string>http://www.libsdl.org</string>
<key>CFBundleIdentifier</key>
<string>org.libsdl.SDL2</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Simple DirectMedia Layer</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>2.0.8</string>
<key>CFBundleSignature</key>
<string>SDLX</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>2.0.8</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>9C40b</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>17C76</string>
<key>DTSDKName</key>
<string>macosx10.13</string>
<key>DTXcode</key>
<string>0920</string>
<key>DTXcodeBuild</key>
<string>9C40b</string>
</dict>
</plist>
@@ -0,0 +1,792 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Resources/Info.plist</key>
<data>
dts8ape5zBg3+8u8BQ5kWqp9cC8=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/SDL.h</key>
<dict>
<key>hash</key>
<data>
wiqwnVgtbgjGPAOFejxz8yw7geU=
</data>
<key>hash2</key>
<data>
LLwzMAHn2OsCr2SVR7M71KeQf+TiJpHk/KKojzQdRlI=
</data>
</dict>
<key>Headers/SDL_assert.h</key>
<dict>
<key>hash</key>
<data>
zWoE6/P7ZWAYr4J+EVgDAK+kot8=
</data>
<key>hash2</key>
<data>
tuS18C7A11akqH9MWT0WWCb6q7kcF97Ui5OFwNtSF/k=
</data>
</dict>
<key>Headers/SDL_atomic.h</key>
<dict>
<key>hash</key>
<data>
/q15zvR2djPgTRkySENYqzisn64=
</data>
<key>hash2</key>
<data>
n9rGA8zXFxasUnN0ytgLLWmW2CDCtKBeGJZcfB+nfRc=
</data>
</dict>
<key>Headers/SDL_audio.h</key>
<dict>
<key>hash</key>
<data>
9uJv81fH9Op/f3sF7/GVuNYQNOc=
</data>
<key>hash2</key>
<data>
KDokTSV3kZuHCQFFrRum3VoTP1QSW2xAghjceoIArXY=
</data>
</dict>
<key>Headers/SDL_bits.h</key>
<dict>
<key>hash</key>
<data>
yp8Jj93ZE224v1+u++cOexlp9RY=
</data>
<key>hash2</key>
<data>
kQTBxFYnOjKSlti4H7pAYZWdkH0BpQ9Eq54E/r/nlVY=
</data>
</dict>
<key>Headers/SDL_blendmode.h</key>
<dict>
<key>hash</key>
<data>
kgTnzOrp0kqeI8lzDgQyT/gCGiM=
</data>
<key>hash2</key>
<data>
d/8B0iLh4aFeoaPEFqQ4C6x4ISlDJCKrybaKuHCJHL4=
</data>
</dict>
<key>Headers/SDL_clipboard.h</key>
<dict>
<key>hash</key>
<data>
qq1r82AS7fHG8G94+jvL41iKEyA=
</data>
<key>hash2</key>
<data>
+r0LOXHGRf2Q9+FkqRU6i++1zEzsE5sWXxxMGrsSyKk=
</data>
</dict>
<key>Headers/SDL_config.h</key>
<dict>
<key>hash</key>
<data>
nJnfliCMDJUfOG8t4QYt5U9tFBY=
</data>
<key>hash2</key>
<data>
qkVvxnI+XRMTIdbzQ9tV+ERRc75r/EzWu0qRTgt5K5c=
</data>
</dict>
<key>Headers/SDL_config_macosx.h</key>
<dict>
<key>hash</key>
<data>
D0LXp0FibaaLSE6877hbyqf2Jb8=
</data>
<key>hash2</key>
<data>
pCQLXwJ6HaGZiG5vr9njJtgNcIV9p0mxcSJtYoj147A=
</data>
</dict>
<key>Headers/SDL_copying.h</key>
<dict>
<key>hash</key>
<data>
0DKOkPvRlLo00X7iE2fL4i8XBww=
</data>
<key>hash2</key>
<data>
nHJ8cj/FeSfLoRm5gRiDk73eyYlKn7u1BfbqkB2ofLg=
</data>
</dict>
<key>Headers/SDL_cpuinfo.h</key>
<dict>
<key>hash</key>
<data>
2wleDfJFmCBrEssrE9rcuaiqOLQ=
</data>
<key>hash2</key>
<data>
MEpF0mFQFLhuTV+5uSB++q8tT2z5heESxyP1HuzuKxc=
</data>
</dict>
<key>Headers/SDL_endian.h</key>
<dict>
<key>hash</key>
<data>
WmJrxu+b1MkjtE6ttCymwH4EVC0=
</data>
<key>hash2</key>
<data>
77hv0QIqlra/8gcQF81aAwP21/ZAANKiIaJRV1QK8mk=
</data>
</dict>
<key>Headers/SDL_error.h</key>
<dict>
<key>hash</key>
<data>
HMprigJ3u4PqQ7B+gD1UUbTSrJ8=
</data>
<key>hash2</key>
<data>
errosoVYCD45UvQVzL4Lmfq4eCQg92a6xUZ062DGEL4=
</data>
</dict>
<key>Headers/SDL_events.h</key>
<dict>
<key>hash</key>
<data>
ptgRA0IBsCg5za/lwhTOPGNmekY=
</data>
<key>hash2</key>
<data>
lwISPqzee6nV4HCHaMzZCVJJAtFZmoi8cYlJkY41wKA=
</data>
</dict>
<key>Headers/SDL_filesystem.h</key>
<dict>
<key>hash</key>
<data>
9rIKoCtsAONdgfT/4QKm3a56hV0=
</data>
<key>hash2</key>
<data>
l5nBvMglAIFEWf357KMyQ+E7cr4GqO9XNwevA04+VmQ=
</data>
</dict>
<key>Headers/SDL_gamecontroller.h</key>
<dict>
<key>hash</key>
<data>
sUaSBwOprX7A696W6u2oOtIne+Y=
</data>
<key>hash2</key>
<data>
VZDstHk/V+tZik3q3xnDCAG3AfA+BoHk9lB406mKtxU=
</data>
</dict>
<key>Headers/SDL_gesture.h</key>
<dict>
<key>hash</key>
<data>
d80fR6I92r+G26xckkQzTRj/tj4=
</data>
<key>hash2</key>
<data>
/5+tOQWQ9raopqBCExlH9ClAA/fVAfEBIrd/WlpaqIE=
</data>
</dict>
<key>Headers/SDL_haptic.h</key>
<dict>
<key>hash</key>
<data>
95rNclZzbsuV6pyeG8cbIETgS84=
</data>
<key>hash2</key>
<data>
O4RUmC9HMqsjAf22Ru6z5j9HaYTsc7SxOnzOXPR3kz0=
</data>
</dict>
<key>Headers/SDL_hints.h</key>
<dict>
<key>hash</key>
<data>
UjEgXfZiLUmQTh9G+Bkx8Y1Ov6k=
</data>
<key>hash2</key>
<data>
DqFPmBXNg9BovdIAlipnBKZo5mcQJCrLmhyIM/O+tvU=
</data>
</dict>
<key>Headers/SDL_joystick.h</key>
<dict>
<key>hash</key>
<data>
97SJSCx+xjRHUQ6ilndhP8TZ110=
</data>
<key>hash2</key>
<data>
xYWL+BS5f9NGr7eeP+vL0kD5K6O99PXgOWLT2Bx2dRQ=
</data>
</dict>
<key>Headers/SDL_keyboard.h</key>
<dict>
<key>hash</key>
<data>
RsaE9DMLq9lFsYokvdaQ8nhIkfY=
</data>
<key>hash2</key>
<data>
tpZGEHU3TKCozcYf4MA9gA5bXNPSxx9rqqBaPttgr+4=
</data>
</dict>
<key>Headers/SDL_keycode.h</key>
<dict>
<key>hash</key>
<data>
9nIqgM67nCJUdjV3iiiviT8DFhk=
</data>
<key>hash2</key>
<data>
SpMclG+epmPQibi3fNsQe1lBUxZPJOOu4DfQjpTZYgw=
</data>
</dict>
<key>Headers/SDL_loadso.h</key>
<dict>
<key>hash</key>
<data>
m+OEcfHbykTuEo6P3/y/kuV1xjk=
</data>
<key>hash2</key>
<data>
Yg3OrZpF17uC69TwprPyrpn3+su3YAaaA1hTNXAHxLw=
</data>
</dict>
<key>Headers/SDL_log.h</key>
<dict>
<key>hash</key>
<data>
HcUUwymYqVSfgz2LdtuUqZSwjUY=
</data>
<key>hash2</key>
<data>
j4F34jvgNTEcHQQoPbBBugi4RKQLhGM+x4ndXdtDc0E=
</data>
</dict>
<key>Headers/SDL_main.h</key>
<dict>
<key>hash</key>
<data>
7I0GPDiLKlavuXuoepYsl2mS6CI=
</data>
<key>hash2</key>
<data>
qwXROmpXppMPodetUGE0s/7HHmwfu3taLUeiiu+APk0=
</data>
</dict>
<key>Headers/SDL_messagebox.h</key>
<dict>
<key>hash</key>
<data>
MEB/oCw7dyinbrBmQQqh46/uRVk=
</data>
<key>hash2</key>
<data>
DSuDS/nAzfEi2kO06DEpxRLj5V1++p2DYYA9Oou8ewQ=
</data>
</dict>
<key>Headers/SDL_mouse.h</key>
<dict>
<key>hash</key>
<data>
I2UksqoB5v6RX64Ddwea9dW0sO0=
</data>
<key>hash2</key>
<data>
gFMH6bBzvJCff8F7FMWlP6o6TydFmiXEu0daWp166wk=
</data>
</dict>
<key>Headers/SDL_mutex.h</key>
<dict>
<key>hash</key>
<data>
H6Q1bWPDKu2RsALoLzTBzPTrPkk=
</data>
<key>hash2</key>
<data>
WKU8g7bVD3KpQEgvXuUGrPcG5hgg+LwQBgzLQCeSVTg=
</data>
</dict>
<key>Headers/SDL_name.h</key>
<dict>
<key>hash</key>
<data>
doLASBj4oiSiP6MW9wQblnyPN1E=
</data>
<key>hash2</key>
<data>
M0b8pslMMsWZp1KDVUdqX7ml3DKUVcwiTcfwGbhopvA=
</data>
</dict>
<key>Headers/SDL_opengl.h</key>
<dict>
<key>hash</key>
<data>
ZN9vVzyxx542ZCZ4nmASJKJ7qFM=
</data>
<key>hash2</key>
<data>
dazK6AC8BOZXW9m9761qsuoqe3eJozPIbSc1YEY3UVE=
</data>
</dict>
<key>Headers/SDL_opengl_glext.h</key>
<dict>
<key>hash</key>
<data>
nqPX1ObCVYyVzW3VbD3C/1vaTRE=
</data>
<key>hash2</key>
<data>
IULBL/m+rBc3UQPqu68w6FDM/Mda58oybFnlyn3OkjE=
</data>
</dict>
<key>Headers/SDL_opengles.h</key>
<dict>
<key>hash</key>
<data>
aVEa5N2CHg93ZxdDuKfDtFnCbU8=
</data>
<key>hash2</key>
<data>
3CmcA5B4ydtkVin3NvNmYVHfgnhJJAVYNVw1YKM0Mko=
</data>
</dict>
<key>Headers/SDL_opengles2.h</key>
<dict>
<key>hash</key>
<data>
yQ5nSugeN94hMSNhsIOmlAstJhY=
</data>
<key>hash2</key>
<data>
8H2lt37zXZs68UfBlqDGqSJTQ2+Slu7qywggJ2mIosI=
</data>
</dict>
<key>Headers/SDL_opengles2_gl2.h</key>
<dict>
<key>hash</key>
<data>
g4y04zPFy1H/qujSNGRd0vB7ClQ=
</data>
<key>hash2</key>
<data>
9GAwK0cg8YPrZHWVqMGpyVwKFz3Ay9VHiyz70jzWltA=
</data>
</dict>
<key>Headers/SDL_opengles2_gl2ext.h</key>
<dict>
<key>hash</key>
<data>
bTlnL+42kbi+n/gH//X2p0pqeuM=
</data>
<key>hash2</key>
<data>
5404JOHXH4pGO60gR/uLhz9zW6fKy9jvdMw5i1WTcpo=
</data>
</dict>
<key>Headers/SDL_opengles2_gl2platform.h</key>
<dict>
<key>hash</key>
<data>
ByFMXJFtjcRglS/e0+DujyjC3dM=
</data>
<key>hash2</key>
<data>
wlKRTsmTMrnniYqSvQklJfb9VF07J0MDpqzYOcfiDDY=
</data>
</dict>
<key>Headers/SDL_opengles2_khrplatform.h</key>
<dict>
<key>hash</key>
<data>
NLpJq9uBqjOpWhXISOQHPnTp/XQ=
</data>
<key>hash2</key>
<data>
djHeDyzmR0e/2JNIbqpBqgi56MXlxlAbgcBFxuvwSyo=
</data>
</dict>
<key>Headers/SDL_pixels.h</key>
<dict>
<key>hash</key>
<data>
q2Uas2PGwUNo30Wiqomvrb03mp4=
</data>
<key>hash2</key>
<data>
fpczDM4z7VLJW6FMvRTygnypORPdk2q89S1kCbS2fpM=
</data>
</dict>
<key>Headers/SDL_platform.h</key>
<dict>
<key>hash</key>
<data>
aM0ptLXVxYx4yXLsNYOssy/jx9Y=
</data>
<key>hash2</key>
<data>
R6MDdJ2ZUd9FGKReGdJE6YyHwqczb99jK9/IDW59AmI=
</data>
</dict>
<key>Headers/SDL_power.h</key>
<dict>
<key>hash</key>
<data>
NqkQCWzmodWGdUFUZmzR9B/TApc=
</data>
<key>hash2</key>
<data>
VkJkbp+5Wd4WYDemJiu8R/emdH4PZSNPweoPmzRkfxM=
</data>
</dict>
<key>Headers/SDL_quit.h</key>
<dict>
<key>hash</key>
<data>
eOEJzybg3UBfe83rKNfky9XAVGM=
</data>
<key>hash2</key>
<data>
mN/T7PjHVtVce+/m7tIWIH8p8lylLWPuJAkCsbEvjhg=
</data>
</dict>
<key>Headers/SDL_rect.h</key>
<dict>
<key>hash</key>
<data>
B7oWq3VOxrWbVn0YV8xpvXG6dic=
</data>
<key>hash2</key>
<data>
dCsZcEfdmcr1RuOycWAtHnnQs5BWk8lw0Ubnv/aUwG4=
</data>
</dict>
<key>Headers/SDL_render.h</key>
<dict>
<key>hash</key>
<data>
ATenWUmKg6AEbv2SbCy9JfT8jCw=
</data>
<key>hash2</key>
<data>
EYiKPX5wRIcWkCyROlT59wuiDupZ6yp0+YsDWOrhtnQ=
</data>
</dict>
<key>Headers/SDL_revision.h</key>
<dict>
<key>hash</key>
<data>
XBn2NI8Qm53MeZGaXVB3fQrs0uc=
</data>
<key>hash2</key>
<data>
FHG6Lqi1wMmjow+JjxKYy/LAoqP+iDH8QYuJS1zr6T4=
</data>
</dict>
<key>Headers/SDL_rwops.h</key>
<dict>
<key>hash</key>
<data>
ULSy/1QoNQhBu3kk75qXo30Wcvs=
</data>
<key>hash2</key>
<data>
KewlZ14FJ6CfLjd7EDc1KlVSiUhIt2P9d3p2VEJuUUA=
</data>
</dict>
<key>Headers/SDL_scancode.h</key>
<dict>
<key>hash</key>
<data>
FAcbPIsuPOYbsldZL4m0AFUeoW4=
</data>
<key>hash2</key>
<data>
5VaZC9IfMuNgz3h6OJn9Q/IGB/+cpymxIrjkluCWzOo=
</data>
</dict>
<key>Headers/SDL_shape.h</key>
<dict>
<key>hash</key>
<data>
S5Ty+gKktVyifkoYT0K7E48JqdI=
</data>
<key>hash2</key>
<data>
LVwSnfZBuKL1bW2zy4rt0vRPmH2/ZxfmP0xB9pLVEOE=
</data>
</dict>
<key>Headers/SDL_stdinc.h</key>
<dict>
<key>hash</key>
<data>
qBTB0Yqh+34vD3n3dN9ry9GwqJM=
</data>
<key>hash2</key>
<data>
TDMriI0PPYF73lvh6suExzpMldCmX1SkLgg+wkBqt7A=
</data>
</dict>
<key>Headers/SDL_surface.h</key>
<dict>
<key>hash</key>
<data>
bssTKTIF4Yw/3a6fyF7GhaVrdU0=
</data>
<key>hash2</key>
<data>
zRF/b8bCqjClZnbPorqjhlWw9aujM9RwnVemHyiC2yM=
</data>
</dict>
<key>Headers/SDL_system.h</key>
<dict>
<key>hash</key>
<data>
n2WodCV+WpbfpFSKUUKpB/i5ZPw=
</data>
<key>hash2</key>
<data>
3W0Z/Fdwbc7dTyR+v4g6eVE58XcEYLTzDGO+RMwcmJc=
</data>
</dict>
<key>Headers/SDL_syswm.h</key>
<dict>
<key>hash</key>
<data>
QoebSqgb1XslKPBwMiUOM6daVKo=
</data>
<key>hash2</key>
<data>
rCqmdvdibhT5MBOnvKCT0gK7Howb5uLewC321yLYr5U=
</data>
</dict>
<key>Headers/SDL_thread.h</key>
<dict>
<key>hash</key>
<data>
fXCWQD4MIniqvdB6pWVwlxNS9jk=
</data>
<key>hash2</key>
<data>
18iJ1yFzOTeiM30JwK3GMlbgUqzNDIQiw3ZLLr3M+XQ=
</data>
</dict>
<key>Headers/SDL_timer.h</key>
<dict>
<key>hash</key>
<data>
qfzyWhIh36SK6BAcdd50D/MfdGo=
</data>
<key>hash2</key>
<data>
5Qe92nVkUnHbxgbGwxkyglvVKajhfgVhxPei6dhr4c0=
</data>
</dict>
<key>Headers/SDL_touch.h</key>
<dict>
<key>hash</key>
<data>
yyJt6piMAcoFWhFqsHk9mo3MtaI=
</data>
<key>hash2</key>
<data>
9mQ2V937DAO6OjcQFMboFrnJEiqdk+2uHBzdvMYUnd0=
</data>
</dict>
<key>Headers/SDL_types.h</key>
<dict>
<key>hash</key>
<data>
oVg7CzABdDKtxCWINHaUvBRbRZ0=
</data>
<key>hash2</key>
<data>
8uZym5ly46CZ4VQZCz/Y/cH4THoDS8kGqrvB+Ux/254=
</data>
</dict>
<key>Headers/SDL_version.h</key>
<dict>
<key>hash</key>
<data>
nKLee2vSNZZK9p94Up9o87OoiDE=
</data>
<key>hash2</key>
<data>
F3dpo9XlvebIS2NLJ1ovH+W7fG3bzb01F8OKUeqd+U0=
</data>
</dict>
<key>Headers/SDL_video.h</key>
<dict>
<key>hash</key>
<data>
UFZPU1U3CDog3RBKdd5wu9LFQZk=
</data>
<key>hash2</key>
<data>
6/OCq92BIQnGHBLmlGX4nUNnfLM7LzPoMp+lPlYY4ew=
</data>
</dict>
<key>Headers/SDL_vulkan.h</key>
<dict>
<key>hash</key>
<data>
eLdIezOR2pV1ai5rLBrtiR3NAok=
</data>
<key>hash2</key>
<data>
iCB8avj2P0+ZkjVGfTchu5BAd7BJ+LeC1fJ9BU+80IE=
</data>
</dict>
<key>Headers/begin_code.h</key>
<dict>
<key>hash</key>
<data>
6RX1yuMtg6N9G2iCtCjjKzPCkuU=
</data>
<key>hash2</key>
<data>
JQ71zTwAp3EzI22aBP3w80YYEcxNBRF8/0DkqO39oDo=
</data>
</dict>
<key>Headers/close_code.h</key>
<dict>
<key>hash</key>
<data>
IDKa63p9RAIkSpPXA0mU/dzgBWQ=
</data>
<key>hash2</key>
<data>
oF0I0dcQDvLcuEIgqx9wEQiuqHR5KLoq1zhL/AK5geg=
</data>
</dict>
<key>Resources/Info.plist</key>
<dict>
<key>hash</key>
<data>
dts8ape5zBg3+8u8BQ5kWqp9cC8=
</data>
<key>hash2</key>
<data>
ZCgx1szeVwObsPiq6VoZh8Q9ym7l+7WXzv0HTSoFT0U=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^Resources/</key>
<true/>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^.*</key>
<true/>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^[^/]+$</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>
+1
View File
@@ -0,0 +1 @@
A
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -9,6 +9,9 @@ QT -= core gui
TARGET = moonlight-common-c
TEMPLATE = lib
# Support debug and release builds from command line for CI
CONFIG += debug_and_release
win32 {
INCLUDEPATH += $$PWD/../libs/windows/include
}
+3
View File
@@ -7,6 +7,9 @@ SUBDIRS = \
CONFIG += ordered
# Support debug and release builds from command line for CI
CONFIG += debug_and_release
# Run our compile tests
load(configure)
qtCompileTest(SLVideo)
+3
View File
@@ -3,6 +3,9 @@ QT -= core gui
TARGET = opus
TEMPLATE = lib
# Support debug and release builds from command line for CI
CONFIG += debug_and_release
OPUS_DIR = $$PWD/opus
DEFINES += \
USE_ALLOCA=1 \
+3
View File
@@ -4,6 +4,9 @@ QT += network
TARGET = qmdnsengine
TEMPLATE = lib
# Support debug and release builds from command line for CI
CONFIG += debug_and_release
QMDNSE_DIR = $$PWD/qmdnsengine/src
DEFINES += \
QT_NO_SIGNALS_SLOTS_KEYWORDS
+51
View File
@@ -0,0 +1,51 @@
BUILD_CONFIG=$1
fail()
{
echo "$1" 1>&2
exit 1
}
if [ "$BUILD_CONFIG" != "Debug" ] && [ "$BUILD_CONFIG" != "Release" ]; then
fail "Invalid build configuration"
fi
BUILD_ROOT=$PWD/build
SOURCE_ROOT=$PWD
BUILD_FOLDER=$BUILD_ROOT/build-$BUILD_CONFIG
INSTALLER_FOLDER=$BUILD_ROOT/installer-$BUILD_CONFIG
echo Cleaning output directories
rm -rf $BUILD_FOLDER
rm -rf $INSTALLER_FOLDER
mkdir $BUILD_ROOT
mkdir $BUILD_FOLDER
mkdir $INSTALLER_FOLDER
echo Configuring the project
pushd $BUILD_FOLDER
qmake $SOURCE_ROOT/moonlight-qt.pro || fail "Qmake failed!"
popd
echo Compiling Moonlight in $BUILD_CONFIG configuration
pushd $BUILD_FOLDER
make $(echo "$BUILD_CONFIG" | tr '[:upper:]' '[:lower:]') || fail "Make failed!"
popd
echo Copying dylib dependencies
mkdir $BUILD_FOLDER/app/Moonlight.app/Contents/lib
cp $SOURCE_ROOT/libs/mac/lib/*.dylib $BUILD_FOLDER/app/Moonlight.app/Contents/lib/ || fail "Dylib copy failed!"
echo Copying frameworks dependencies
mkdir $BUILD_FOLDER/app/Moonlight.app/Contents/Frameworks
cp -R $SOURCE_ROOT/libs/mac/Frameworks/ $BUILD_FOLDER/app/Moonlight.app/Contents/Frameworks/ || fail "Framework copy failed!"
echo Creating DMG
EXTRA_ARGS=
if [ "$BUILD_CONFIG" == "Debug" ]; then EXTRA_ARGS="$EXTRA_ARGS -use-debug-libs"; fi
if [ "$SIGNING_KEY" != "" ]; then EXTRA_ARGS="$EXTRA_ARGS -codesign=$SIGNING_KEY"; fi
echo Extra deployment arguments: $EXTRA_ARGS
macdeployqt $BUILD_FOLDER/app/Moonlight.app -dmg $EXTRA_ARGS -qmldir=$SOURCE_ROOT/app/gui -appstore-compliant || fail "macdeployqt failed!"
echo Deploying DMG
mv $BUILD_FOLDER/app/Moonlight.dmg $INSTALLER_FOLDER/
+18 -7
View File
@@ -6,17 +6,22 @@ setlocal enableDelayedExpansion
set BUILD_CONFIG=%1
set ARCH=%2
if "%BUILD_CONFIG%" NEQ "debug" (
if "%BUILD_CONFIG%" NEQ "release" (
rem Convert to lower case for windeployqt
if /I "%BUILD_CONFIG%"=="debug" (
set BUILD_CONFIG=debug
) else (
if /I "%BUILD_CONFIG%"=="release" (
set BUILD_CONFIG=release
) else (
echo Invalid build configuration
goto Error
exit /b 1
)
)
if "%ARCH%" NEQ "x86" (
if "%ARCH%" NEQ "x64" (
if /I "%ARCH%" NEQ "x86" (
if /I "%ARCH%" NEQ "x64" (
echo Invalid build architecture
goto Error
exit /b 1
)
)
@@ -73,9 +78,15 @@ set VCREDIST_INSTALLER=%VS_PATH%\VC\Redist\MSVC\14.14.26405\vcredist_%ARCH%.exe
msbuild %SOURCE_ROOT%\wix\Moonlight.sln /p:Configuration=%BUILD_CONFIG% /p:Platform=%ARCH%
if !ERRORLEVEL! NEQ 0 goto Error
if /i "%APPVEYOR%"=="true" (
echo Pushing artifacts
appveyor PushArtifact %DEPLOY_FOLDER%
appveyor PushArtifact %INSTALLER_FOLDER%\MoonlightSetup.exe -FileName MoonlightSetup-%ARCH%-%BUILD_CONFIG%.exe
)
echo Build successful!
exit /b 0
:Error
echo Build failed!
exit /b %ERRORLEVEL%
exit /b !ERRORLEVEL!
+27
View File
@@ -0,0 +1,27 @@
#!/bin/bash
# https://gist.github.com/zlbruce/883605a635df8d5964bab11ed75e46ad
echo "*** SVG 2 ICNS ***"
if [ $# -ne 1 ]; then
echo "Usage: svg2icns filename.svg"
exit 100
fi
filename="$1"
name=${filename%.*}
ext=${filename##*.}
echo "processing: $name"
dest="$name".iconset
mkdir "$dest"
convert -background none -resize '!16x16' "$1" "$dest/icon_16x16.png"
convert -background none -resize '!32x32' "$1" "$dest/[email protected]"
cp "$dest/[email protected]" "$dest/icon_32x32.png"
convert -background none -resize '!64x64' "$1" "$dest/[email protected]"
convert -background none -resize '!128x128' "$1" "$dest/icon_128x128.png"
convert -background none -resize '!256x256' "$1" "$dest/[email protected]"
cp "$dest/[email protected]" "$dest/icon_256x256.png"
convert -background none -resize '!512x512' "$1" "$dest/[email protected]"
cp "$dest/[email protected]" "$dest/icon_512x512.png"
convert -background none -resize '!1024x1024' "$1" "$dest/[email protected]"
iconutil -c icns "$dest"
rm -R "$dest"
+5 -1
View File
@@ -33,9 +33,13 @@
<?endif ?>
<?if $(env.ARCH) ~= x64 ?>
<bal:Condition Message="This Moonlight installer requires a 64-bit OS.">
<bal:Condition Message="This Moonlight installer requires a 64-bit (x64) OS. Please download the 32-bit (x86) installer.">
VersionNT64
</bal:Condition>
<?elseif $(env.ARCH) ~= x86 ?>
<bal:Condition Message="This Moonlight installer requires a 32-bit (x86) OS. Please download the 64-bit (x64) installer.">
NOT VersionNT64
</bal:Condition>
<?endif ?>
<?if $(env.ARCH) ~= x64 ?>