More macos fixes
This commit is contained in:
2
3rdparty/qocoa/qbutton_mac.mm
vendored
2
3rdparty/qocoa/qbutton_mac.mm
vendored
@@ -132,7 +132,7 @@ public:
|
|||||||
[nsButton setButtonType:NSMomentaryPushInButton];
|
[nsButton setButtonType:NSMomentaryPushInButton];
|
||||||
}
|
}
|
||||||
|
|
||||||
// [nsButton setBezelStyle:bezelStyle];
|
[nsButton setBezelStyle:(__bridge NSBezelStyle)bezelStyle];
|
||||||
}
|
}
|
||||||
|
|
||||||
void clicked()
|
void clicked()
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ set(RPM_DISTRO suse CACHE STRING "Suffix of the rpm file")
|
|||||||
set(RPM_ARCH x86_64 CACHE STRING "Architecture of the rpm file")
|
set(RPM_ARCH x86_64 CACHE STRING "Architecture of the rpm file")
|
||||||
|
|
||||||
add_custom_target(rpm
|
add_custom_target(rpm
|
||||||
COMMAND ${CMAKE_SOURCE_DIR}/dist/maketarball.sh
|
COMMAND ${CMAKE_SOURCE_DIR}/dist/scripts/maketarball.sh
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy strawberry-${STRAWBERRY_VERSION_PACKAGE}.tar.xz ${RPMBUILD_DIR}/SOURCES/
|
COMMAND ${CMAKE_COMMAND} -E copy strawberry-${STRAWBERRY_VERSION_PACKAGE}.tar.xz ${RPMBUILD_DIR}/SOURCES/
|
||||||
COMMAND rpmbuild -bs ${CMAKE_SOURCE_DIR}/dist/strawberry.spec
|
COMMAND rpmbuild -bs ${CMAKE_SOURCE_DIR}/dist/rpm/strawberry.spec
|
||||||
COMMAND rpmbuild -bb ${CMAKE_SOURCE_DIR}/dist/strawberry.spec
|
COMMAND rpmbuild -bb ${CMAKE_SOURCE_DIR}/dist/rpm/strawberry.spec
|
||||||
)
|
)
|
||||||
|
|||||||
17
dist/CMakeLists.txt
vendored
17
dist/CMakeLists.txt
vendored
@@ -1,14 +1,19 @@
|
|||||||
set(ENV{LC_ALL} "en_US.utf8")
|
set(ENV{LC_ALL} "en_US.utf8")
|
||||||
execute_process(COMMAND date "+%a %b %d %Y" OUTPUT_VARIABLE RPM_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
execute_process(COMMAND date "+%a %b %d %Y" OUTPUT_VARIABLE RPM_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/strawberry.spec.in ${CMAKE_CURRENT_SOURCE_DIR}/strawberry.spec @ONLY)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rpm/strawberry.spec.in ${CMAKE_CURRENT_SOURCE_DIR}/rpm/strawberry.spec @ONLY)
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/maketarball.sh.in ${CMAKE_CURRENT_SOURCE_DIR}/maketarball.sh @ONLY)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/maketarball.sh.in ${CMAKE_CURRENT_SOURCE_DIR}/scripts/maketarball.sh @ONLY)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/macos/Info.plist.in ${CMAKE_CURRENT_SOURCE_DIR}/macos/Info.plist)
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX AND NOT APPLE)
|
||||||
install(FILES ../data/icons/48x48/strawberry.png DESTINATION share/icons/hicolor/48x48/apps/)
|
install(FILES ../data/icons/48x48/strawberry.png DESTINATION share/icons/hicolor/48x48/apps/)
|
||||||
install(FILES ../data/icons/64x64/strawberry.png DESTINATION share/icons/hicolor/64x64/apps/)
|
install(FILES ../data/icons/64x64/strawberry.png DESTINATION share/icons/hicolor/64x64/apps/)
|
||||||
install(FILES ../data/icons/128x128/strawberry.png DESTINATION share/icons/hicolor/128x128/apps/)
|
install(FILES ../data/icons/128x128/strawberry.png DESTINATION share/icons/hicolor/128x128/apps/)
|
||||||
install(FILES ../data/icons/128x128/strawberry.svg DESTINATION share/icons/hicolor/scalable/apps/)
|
install(FILES ../data/icons/128x128/strawberry.svg DESTINATION share/icons/hicolor/scalable/apps/)
|
||||||
install(FILES strawberry.desktop DESTINATION share/applications)
|
install(FILES unix/strawberry.desktop DESTINATION share/applications)
|
||||||
install(FILES strawberry.1 strawberry-tagreader.1 DESTINATION share/man/man1)
|
install(FILES man/strawberry.1 man/strawberry-tagreader.1 DESTINATION share/man/man1)
|
||||||
endif (UNIX)
|
endif()
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
install(FILES macos/strawberry.icns DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Resources")
|
||||||
|
endif()
|
||||||
|
|||||||
235
dist/macos/Info.plist.in
vendored
Normal file
235
dist/macos/Info.plist.in
vendored
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string>NSApplication</string>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>strawberry</string>
|
||||||
|
<key>CFBundleGetInfoString</key>
|
||||||
|
<string>Strawberry ${STRAWBERRY_VERSION_DISPLAY}</string>
|
||||||
|
<key>CFBundleIconFile</key>
|
||||||
|
<string>strawberry</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>org.strawberry.strawberry</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleLongVersionString</key>
|
||||||
|
<string>${STRAWBERRY_VERSION_DISPLAY}</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>Strawberry</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>${STRAWBERRY_VERSION_DISPLAY}</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>${STRAWBERRY_VERSION_PACKAGE}</string>
|
||||||
|
<key>CSResourcesFileMapped</key>
|
||||||
|
<true/>
|
||||||
|
<key>LSRequiresCarbon</key>
|
||||||
|
<true/>
|
||||||
|
<key>LSApplicationCategoryType</key>
|
||||||
|
<string>public.app-category.music</string>
|
||||||
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
<string>10.7.0</string>
|
||||||
|
<key>CFBundleDocumentTypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeOSTypes</key>
|
||||||
|
<array>
|
||||||
|
<string>****</string>
|
||||||
|
<string>fold</string>
|
||||||
|
<string>disk</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>xspf</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>Generic.icns</string>
|
||||||
|
<key>CFBundleTypeMIMETypes</key>
|
||||||
|
<array>
|
||||||
|
<string>application/xspf+xml</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>XSPF Playlist</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>wav</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeMIMETypes</key>
|
||||||
|
<array>
|
||||||
|
<string>audio/x-wav</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>WAVE Audio File</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>pls</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>pls.icns</string>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>Shoutcast playlist</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>m3u</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>m3u.icns</string>
|
||||||
|
<key>CFBundleTypeMIMETypes</key>
|
||||||
|
<array>
|
||||||
|
<string>audio/x-mpegurl</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>Playlist file</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>aac</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>mpeg4.icns</string>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>AAC file</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>ogg</string>
|
||||||
|
<string>ogx</string>
|
||||||
|
<string>ogm</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>ogg.icns</string>
|
||||||
|
<key>CFBundleTypeMIMETypes</key>
|
||||||
|
<array>
|
||||||
|
<string>audio/ogg</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>Ogg Vorbis File</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>oga</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>ogg.icns</string>
|
||||||
|
<key>CFBundleTypeMIMETypes</key>
|
||||||
|
<array>
|
||||||
|
<string>audio/ogg</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>Ogg Audio File</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>wma</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>wma.icns</string>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>WIndows Media Audio</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>mp3</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>mp3.icns</string>
|
||||||
|
<key>CFBundleTypeMIMETypes</key>
|
||||||
|
<array>
|
||||||
|
<string>audio/mpeg</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>MPEG Audio Layer 3</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>3gp</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>generic.icns</string>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>3GPP File</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>m4a</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>mpeg4.icns</string>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>MPEG-4 Audio File</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>mpc</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>generic.icns</string>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>Musepack Audio File</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeExtensions</key>
|
||||||
|
<array>
|
||||||
|
<string>flac</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeIconFile</key>
|
||||||
|
<string>generic.icns</string>
|
||||||
|
<key>CFBundleTypeMIMETypes</key>
|
||||||
|
<array>
|
||||||
|
<string>audio/flac</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleTypeName</key>
|
||||||
|
<string>FLAC Audio File</string>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Viewer</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
52
dist/macos/create-dmg.sh
vendored
Executable file
52
dist/macos/create-dmg.sh
vendored
Executable file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# author: max@last.fm, muesli@tomahawk-player.org
|
||||||
|
# brief: Produces a compressed DMG from a bundle directory
|
||||||
|
# usage: Pass the bundle directory as the only parameter
|
||||||
|
# note: This script depends on the Tomahawk build system, and must be run from
|
||||||
|
# the build directory
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
#if [ -z $VERSION ]
|
||||||
|
#then
|
||||||
|
# echo VERSION must be set
|
||||||
|
# exit 2
|
||||||
|
#fi
|
||||||
|
|
||||||
|
if [ -z "$1" ]
|
||||||
|
then
|
||||||
|
echo "Please pass the bundle.app directory as the first parameter."
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
NAME=$(basename "$1" | perl -pe 's/(.*).app/\1/')
|
||||||
|
IN="$1"
|
||||||
|
TMP="dmg/$NAME"
|
||||||
|
OUT="$NAME.dmg"
|
||||||
|
mkdir -p "$TMP"
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# clean up
|
||||||
|
rm -rf "$TMP"
|
||||||
|
rm -f "$OUT"
|
||||||
|
|
||||||
|
# create DMG contents and copy files
|
||||||
|
mkdir -p "$TMP/.background"
|
||||||
|
#cp ../dist/macos/dmg_background.png "$TMP/.background/background.png"
|
||||||
|
#cp ../dist/macos/DS_Store.in "$TMP/.DS_Store"
|
||||||
|
#chmod go-rwx "$TMP/.DS_Store"
|
||||||
|
ln -s /Applications "$TMP/Applications"
|
||||||
|
# copies the prepared bundle into the dir that will become the DMG
|
||||||
|
cp -R "$IN" "$TMP"
|
||||||
|
|
||||||
|
# create
|
||||||
|
hdiutil makehybrid -hfs -hfs-volume-name "$NAME" -hfs-openfolder "$TMP" "$TMP" -o tmp.dmg
|
||||||
|
hdiutil convert -format UDZO -imagekey zlib-level=9 tmp.dmg -o "$OUT"
|
||||||
|
|
||||||
|
#genisoimage -D -V "Strawberry" -no-pad -r -apple -o $NAME.iso $TMP
|
||||||
|
#dmg dmg $NAME.iso $OUT
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
#rm tmp.dmg
|
||||||
489
dist/macos/macdeploy.py
vendored
Executable file
489
dist/macos/macdeploy.py
vendored
Executable file
@@ -0,0 +1,489 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
# Strawberry Music Player
|
||||||
|
# This file was part of Clementine.
|
||||||
|
#
|
||||||
|
# Strawberry 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 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Strawberry 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 Strawberry. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from distutils import spawn
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import commands
|
||||||
|
import sys
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
LOGGER = logging.getLogger('macdeploy')
|
||||||
|
|
||||||
|
LIBRARY_SEARCH_PATH = ['/usr/local/lib']
|
||||||
|
|
||||||
|
FRAMEWORK_SEARCH_PATH = [
|
||||||
|
'/Library/Frameworks',
|
||||||
|
os.path.join(os.environ['HOME'], 'Library/Frameworks')
|
||||||
|
]
|
||||||
|
|
||||||
|
QT_PLUGINS = [
|
||||||
|
'platforms/libqcocoa.dylib',
|
||||||
|
'sqldrivers/libqsqlite.dylib',
|
||||||
|
'imageformats/libqgif.dylib',
|
||||||
|
'imageformats/libqicns.dylib',
|
||||||
|
'imageformats/libqico.dylib',
|
||||||
|
'imageformats/libqjpeg.dylib',
|
||||||
|
'imageformats/libqsvg.dylib',
|
||||||
|
'imageformats/libqtiff.dylib',
|
||||||
|
]
|
||||||
|
|
||||||
|
QT_PLUGINS_SEARCH_PATH = [
|
||||||
|
'/usr/local/opt/qt/plugins',
|
||||||
|
]
|
||||||
|
|
||||||
|
GSTREAMER_SEARCH_PATH = [
|
||||||
|
'/usr/local/lib/gstreamer-1.0',
|
||||||
|
]
|
||||||
|
|
||||||
|
GSTREAMER_PLUGINS = [
|
||||||
|
|
||||||
|
'libgstapetag.so',
|
||||||
|
'libgstapp.so',
|
||||||
|
'libgstaudioconvert.so',
|
||||||
|
'libgstaudiofx.so',
|
||||||
|
'libgstaudiomixer.so',
|
||||||
|
'libgstaudioparsers.so',
|
||||||
|
'libgstaudiorate.so',
|
||||||
|
'libgstaudioresample.so',
|
||||||
|
'libgstaudiotestsrc.so',
|
||||||
|
'libgstauparse.so',
|
||||||
|
'libgstautodetect.so',
|
||||||
|
'libgstcoreelements.so',
|
||||||
|
'libgstcoretracers.so',
|
||||||
|
'libgstcutter.so',
|
||||||
|
'libgstdebug.so',
|
||||||
|
'libgstequalizer.so',
|
||||||
|
'libgstgio.so',
|
||||||
|
'libgsticydemux.so',
|
||||||
|
'libgstid3demux.so',
|
||||||
|
'libgstlevel.so',
|
||||||
|
'libgstosxaudio.so',
|
||||||
|
'libgstplayback.so',
|
||||||
|
'libgstrawparse.so',
|
||||||
|
'libgstrealmedia.so',
|
||||||
|
'libgstreplaygain.so',
|
||||||
|
'libgstsoup.so',
|
||||||
|
'libgstspectrum.so',
|
||||||
|
'libgsttypefindfunctions.so',
|
||||||
|
'libgstvolume.so',
|
||||||
|
'libgstxingmux.so',
|
||||||
|
|
||||||
|
'libgstflac.so',
|
||||||
|
'libgstwavparse.so',
|
||||||
|
'libgstfaac.so',
|
||||||
|
'libgstfaad.so',
|
||||||
|
'libgstlame.so',
|
||||||
|
'libgstmad.so',
|
||||||
|
'libgstogg.so',
|
||||||
|
'libgstopus.so',
|
||||||
|
'libgstasf.so',
|
||||||
|
'libgstspeex.so',
|
||||||
|
'libgsttaglib.so',
|
||||||
|
'libgstvorbis.so',
|
||||||
|
'libgstisomp4.so',
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
GIO_MODULES_SEARCH_PATH = ['/usr/local/lib/gio/modules',]
|
||||||
|
|
||||||
|
INSTALL_NAME_TOOL_APPLE = 'install_name_tool'
|
||||||
|
INSTALL_NAME_TOOL_CROSS = 'x86_64-apple-darwin-%s' % INSTALL_NAME_TOOL_APPLE
|
||||||
|
INSTALL_NAME_TOOL = INSTALL_NAME_TOOL_CROSS if spawn.find_executable(
|
||||||
|
INSTALL_NAME_TOOL_CROSS) else INSTALL_NAME_TOOL_APPLE
|
||||||
|
|
||||||
|
OTOOL_APPLE = 'otool'
|
||||||
|
OTOOL_CROSS = 'x86_64-apple-darwin-%s' % OTOOL_APPLE
|
||||||
|
OTOOL = OTOOL_CROSS if spawn.find_executable(OTOOL_CROSS) else OTOOL_APPLE
|
||||||
|
|
||||||
|
|
||||||
|
class Error(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CouldNotFindFrameworkError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CouldNotFindGioModuleError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CouldNotFindQtPluginError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CouldNotParseFrameworkNameError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class InstallNameToolError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CouldNotFindGstreamerPluginError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CouldNotFindXinePluginError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CouldNotFindVLCPluginError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print 'Usage: %s <bundle.app>' % sys.argv[0]
|
||||||
|
|
||||||
|
bundle_dir = sys.argv[1]
|
||||||
|
|
||||||
|
bundle_name = os.path.basename(bundle_dir).split('.')[0]
|
||||||
|
|
||||||
|
commands = []
|
||||||
|
|
||||||
|
frameworks_dir = os.path.join(bundle_dir, 'Contents', 'Frameworks')
|
||||||
|
commands.append(['mkdir', '-p', frameworks_dir])
|
||||||
|
resources_dir = os.path.join(bundle_dir, 'Contents', 'Resources')
|
||||||
|
commands.append(['mkdir', '-p', resources_dir])
|
||||||
|
plugins_dir = os.path.join(bundle_dir, 'Contents', 'PlugIns')
|
||||||
|
binary = os.path.join(bundle_dir, 'Contents', 'MacOS', bundle_name)
|
||||||
|
|
||||||
|
fixed_libraries = set()
|
||||||
|
fixed_frameworks = set()
|
||||||
|
|
||||||
|
|
||||||
|
def GetBrokenLibraries(binary):
|
||||||
|
#print "Checking libs for binary: %s" % binary
|
||||||
|
output = subprocess.Popen([OTOOL, '-L', binary], stdout=subprocess.PIPE).communicate()[0]
|
||||||
|
broken_libs = {'frameworks': [], 'libs': []}
|
||||||
|
for line in [x.split(' ')[0].lstrip() for x in output.split('\n')[1:]]:
|
||||||
|
#print "Checking line: %s" % line
|
||||||
|
if not line: # skip empty lines
|
||||||
|
continue
|
||||||
|
if os.path.basename(binary) == os.path.basename(line):
|
||||||
|
#print "mnope %s-%s" % (os.path.basename(binary), os.path.basename(line))
|
||||||
|
continue
|
||||||
|
if re.match(r'^\s*/System/', line):
|
||||||
|
continue # System framework
|
||||||
|
elif re.match(r'^\s*/usr/lib/', line):
|
||||||
|
#print "unix style system lib"
|
||||||
|
continue # unix style system library
|
||||||
|
elif re.match(r'^\s*@executable_path', line) or re.match(r'^\s*@loader_path', line):
|
||||||
|
# Potentially already fixed library
|
||||||
|
relative_path = os.path.join(*line.split('/')[3:])
|
||||||
|
if not os.path.exists(os.path.join(frameworks_dir, relative_path)):
|
||||||
|
broken_libs['frameworks'].append(relative_path)
|
||||||
|
elif re.search(r'\w+\.framework', line):
|
||||||
|
broken_libs['frameworks'].append(line)
|
||||||
|
else:
|
||||||
|
broken_libs['libs'].append(line)
|
||||||
|
|
||||||
|
return broken_libs
|
||||||
|
|
||||||
|
|
||||||
|
def FindFramework(path):
|
||||||
|
for search_path in FRAMEWORK_SEARCH_PATH:
|
||||||
|
abs_path = os.path.join(search_path, path)
|
||||||
|
if os.path.exists(abs_path):
|
||||||
|
LOGGER.debug("Found framework '%s' in '%s'", path, search_path)
|
||||||
|
return abs_path
|
||||||
|
|
||||||
|
raise CouldNotFindFrameworkError(path)
|
||||||
|
|
||||||
|
|
||||||
|
def FindLibrary(path):
|
||||||
|
if os.path.exists(path):
|
||||||
|
return path
|
||||||
|
for search_path in LIBRARY_SEARCH_PATH:
|
||||||
|
abs_path = os.path.join(search_path, path)
|
||||||
|
if os.path.exists(abs_path):
|
||||||
|
LOGGER.debug("Found library '%s' in '%s'", path, search_path)
|
||||||
|
return abs_path
|
||||||
|
else: # try harder---look for lib name in library folders
|
||||||
|
newpath = os.path.join(search_path,os.path.basename(path))
|
||||||
|
if os.path.exists(newpath):
|
||||||
|
return newpath
|
||||||
|
|
||||||
|
raise CouldNotFindFrameworkError(path)
|
||||||
|
|
||||||
|
|
||||||
|
def FixAllLibraries(broken_libs):
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFramework(framework)
|
||||||
|
for lib in broken_libs['libs']:
|
||||||
|
FixLibrary(lib)
|
||||||
|
|
||||||
|
|
||||||
|
def FixFramework(path):
|
||||||
|
if path in fixed_frameworks:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
fixed_frameworks.add(path)
|
||||||
|
abs_path = FindFramework(path)
|
||||||
|
broken_libs = GetBrokenLibraries(abs_path)
|
||||||
|
FixAllLibraries(broken_libs)
|
||||||
|
|
||||||
|
new_path = CopyFramework(abs_path)
|
||||||
|
id = os.sep.join(new_path.split(os.sep)[3:])
|
||||||
|
FixFrameworkId(new_path, id)
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFrameworkInstallPath(framework, new_path)
|
||||||
|
for library in broken_libs['libs']:
|
||||||
|
FixLibraryInstallPath(library, new_path)
|
||||||
|
|
||||||
|
|
||||||
|
def FixLibrary(path):
|
||||||
|
if path in fixed_libraries or FindSystemLibrary(os.path.basename(path)) is not None:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
fixed_libraries.add(path)
|
||||||
|
abs_path = FindLibrary(path)
|
||||||
|
if abs_path == "":
|
||||||
|
print "Could not resolve %s, not fixing!" % path
|
||||||
|
return
|
||||||
|
broken_libs = GetBrokenLibraries(abs_path)
|
||||||
|
FixAllLibraries(broken_libs)
|
||||||
|
|
||||||
|
new_path = CopyLibrary(abs_path)
|
||||||
|
FixLibraryId(new_path)
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFrameworkInstallPath(framework, new_path)
|
||||||
|
for library in broken_libs['libs']:
|
||||||
|
FixLibraryInstallPath(library, new_path)
|
||||||
|
|
||||||
|
|
||||||
|
def FixPlugin(abs_path, subdir):
|
||||||
|
broken_libs = GetBrokenLibraries(abs_path)
|
||||||
|
FixAllLibraries(broken_libs)
|
||||||
|
|
||||||
|
new_path = CopyPlugin(abs_path, subdir)
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFrameworkInstallPath(framework, new_path)
|
||||||
|
for library in broken_libs['libs']:
|
||||||
|
FixLibraryInstallPath(library, new_path)
|
||||||
|
|
||||||
|
|
||||||
|
def FixBinary(path):
|
||||||
|
broken_libs = GetBrokenLibraries(path)
|
||||||
|
FixAllLibraries(broken_libs)
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFrameworkInstallPath(framework, path)
|
||||||
|
for library in broken_libs['libs']:
|
||||||
|
FixLibraryInstallPath(library, path)
|
||||||
|
|
||||||
|
|
||||||
|
def CopyLibrary(path):
|
||||||
|
new_path = os.path.join(frameworks_dir, os.path.basename(path))
|
||||||
|
#args = ['cp', path, new_path]
|
||||||
|
args = ['ditto', '--arch=i386', '--arch=x86_64', path, new_path]
|
||||||
|
LOGGER.info("Copying library '%s'", path)
|
||||||
|
commands.append(args)
|
||||||
|
args = ['chmod', 'u+w', new_path]
|
||||||
|
commands.append(args)
|
||||||
|
return new_path
|
||||||
|
|
||||||
|
|
||||||
|
def CopyPlugin(path, subdir):
|
||||||
|
new_path = os.path.join(plugins_dir, subdir, os.path.basename(path))
|
||||||
|
args = ['mkdir', '-p', os.path.dirname(new_path)]
|
||||||
|
commands.append(args)
|
||||||
|
#args = ['cp', path, new_path]
|
||||||
|
args = ['ditto', '--arch=i386', '--arch=x86_64', path, new_path]
|
||||||
|
commands.append(args)
|
||||||
|
LOGGER.info("Copying plugin '%s'", path)
|
||||||
|
args = ['chmod', 'u+w', new_path]
|
||||||
|
commands.append(args)
|
||||||
|
return new_path
|
||||||
|
|
||||||
|
def CopyFramework(path):
|
||||||
|
parts = path.split(os.sep)
|
||||||
|
for i, part in enumerate(parts):
|
||||||
|
if re.match(r'\w+\.framework', part):
|
||||||
|
full_path = os.path.join(frameworks_dir, *parts[i:-1])
|
||||||
|
framework_name = part.split(".framework")[0]
|
||||||
|
break
|
||||||
|
|
||||||
|
def CopyFramework(src_binary):
|
||||||
|
while os.path.islink(src_binary):
|
||||||
|
src_binary = os.path.realpath(src_binary)
|
||||||
|
|
||||||
|
m = re.match(r'(.*/([^/]+)\.framework)/Versions/([^/]+)/.*', src_binary)
|
||||||
|
if not m:
|
||||||
|
raise CouldNotParseFrameworkNameError(src_binary)
|
||||||
|
|
||||||
|
src_base = m.group(1)
|
||||||
|
name = m.group(2)
|
||||||
|
version = m.group(3)
|
||||||
|
|
||||||
|
LOGGER.info('Copying framework %s version %s', name, version)
|
||||||
|
|
||||||
|
dest_base = os.path.join(frameworks_dir, '%s.framework' % name)
|
||||||
|
dest_dir = os.path.join(dest_base, 'Versions', version)
|
||||||
|
dest_binary = os.path.join(dest_dir, name)
|
||||||
|
|
||||||
|
commands.append(['mkdir', '-p', dest_dir])
|
||||||
|
commands.append(['cp', src_binary, dest_binary])
|
||||||
|
|
||||||
|
# Copy special files from various places:
|
||||||
|
# QtCore has Resources/qt_menu.nib (copy to app's Resources)
|
||||||
|
# Sparkle has Resources/*
|
||||||
|
# Qt* have Resources/Info.plist
|
||||||
|
resources_src = os.path.join(src_base, 'Resources')
|
||||||
|
menu_nib = os.path.join(resources_src, 'qt_menu.nib')
|
||||||
|
if os.path.exists(menu_nib):
|
||||||
|
LOGGER.info("Copying qt_menu.nib '%s'", menu_nib)
|
||||||
|
commands.append(['cp', '-r', menu_nib, resources_dir])
|
||||||
|
elif os.path.exists(resources_src):
|
||||||
|
LOGGER.info("Copying resources dir '%s'", resources_src)
|
||||||
|
commands.append(['cp', '-r', resources_src, dest_dir])
|
||||||
|
|
||||||
|
info_plist = os.path.join(src_base, 'Contents', 'Info.plist')
|
||||||
|
if os.path.exists(info_plist):
|
||||||
|
LOGGER.info("Copying special file '%s'", info_plist)
|
||||||
|
resources_dest = os.path.join(dest_dir, 'Resources')
|
||||||
|
commands.append(['mkdir', resources_dest])
|
||||||
|
commands.append(['cp', '-r', info_plist, resources_dest])
|
||||||
|
|
||||||
|
# Create symlinks in the Framework to make it look like
|
||||||
|
# https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html
|
||||||
|
commands.append([
|
||||||
|
'ln', '-sf', 'Versions/Current/%s' % name, os.path.join(dest_base, name)
|
||||||
|
])
|
||||||
|
commands.append([
|
||||||
|
'ln', '-sf', 'Versions/Current/Resources',
|
||||||
|
os.path.join(dest_base, 'Resources')
|
||||||
|
])
|
||||||
|
commands.append(
|
||||||
|
['ln', '-sf', version, os.path.join(dest_base, 'Versions/Current')])
|
||||||
|
|
||||||
|
return dest_binary
|
||||||
|
|
||||||
|
|
||||||
|
def FixId(path, library_name):
|
||||||
|
id = '@executable_path/../Frameworks/%s' % library_name
|
||||||
|
args = [INSTALL_NAME_TOOL, '-id', id, path]
|
||||||
|
commands.append(args)
|
||||||
|
|
||||||
|
|
||||||
|
def FixLibraryId(path):
|
||||||
|
library_name = os.path.basename(path)
|
||||||
|
FixId(path, library_name)
|
||||||
|
|
||||||
|
|
||||||
|
def FixFrameworkId(path, id):
|
||||||
|
FixId(path, id)
|
||||||
|
|
||||||
|
|
||||||
|
def FixInstallPath(library_path, library, new_path):
|
||||||
|
args = [INSTALL_NAME_TOOL, '-change', library_path, new_path, library]
|
||||||
|
commands.append(args)
|
||||||
|
|
||||||
|
|
||||||
|
def FindSystemLibrary(library_name):
|
||||||
|
for path in ['/lib', '/usr/lib']:
|
||||||
|
full_path = os.path.join(path, library_name)
|
||||||
|
if os.path.exists(full_path):
|
||||||
|
return full_path
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def FixLibraryInstallPath(library_path, library):
|
||||||
|
system_library = FindSystemLibrary(os.path.basename(library_path))
|
||||||
|
if system_library is None:
|
||||||
|
new_path = '@executable_path/../Frameworks/%s' % os.path.basename(library_path)
|
||||||
|
FixInstallPath(library_path, library, new_path)
|
||||||
|
else:
|
||||||
|
FixInstallPath(library_path, library, system_library)
|
||||||
|
|
||||||
|
|
||||||
|
def FixFrameworkInstallPath(library_path, library):
|
||||||
|
parts = library_path.split(os.sep)
|
||||||
|
for i, part in enumerate(parts):
|
||||||
|
if re.match(r'\w+\.framework', part):
|
||||||
|
full_path = os.path.join(*parts[i:])
|
||||||
|
break
|
||||||
|
new_path = '@executable_path/../Frameworks/%s' % full_path
|
||||||
|
FixInstallPath(library_path, library, new_path)
|
||||||
|
|
||||||
|
|
||||||
|
def FindXinePlugin(name):
|
||||||
|
for path in XINEPLUGIN_SEARCH_PATH:
|
||||||
|
if os.path.exists(path):
|
||||||
|
for dir, dirs, files in os.walk(path):
|
||||||
|
if name in files:
|
||||||
|
return os.path.join(dir, name)
|
||||||
|
raise CouldNotFindXinePluginError(name)
|
||||||
|
|
||||||
|
|
||||||
|
def FindQtPlugin(name):
|
||||||
|
for path in QT_PLUGINS_SEARCH_PATH:
|
||||||
|
if os.path.exists(path):
|
||||||
|
if os.path.exists(os.path.join(path, name)):
|
||||||
|
return os.path.join(path, name)
|
||||||
|
raise CouldNotFindQtPluginError(name)
|
||||||
|
|
||||||
|
|
||||||
|
def FindGstreamerPlugin(name):
|
||||||
|
for path in GSTREAMER_SEARCH_PATH:
|
||||||
|
if os.path.exists(path):
|
||||||
|
for dir, dirs, files in os.walk(path):
|
||||||
|
if name in files:
|
||||||
|
return os.path.join(dir, name)
|
||||||
|
raise CouldNotFindGstreamerPluginError(name)
|
||||||
|
|
||||||
|
|
||||||
|
def FindGioModule(name):
|
||||||
|
for path in GIO_MODULES_SEARCH_PATH:
|
||||||
|
if os.path.exists(path):
|
||||||
|
for dir, dirs, files in os.walk(path):
|
||||||
|
if name in files:
|
||||||
|
return os.path.join(dir, name)
|
||||||
|
raise CouldNotFindGioModuleError(name)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
logging.basicConfig(filename='macdeploy.log', level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s')
|
||||||
|
|
||||||
|
FixBinary(binary)
|
||||||
|
|
||||||
|
for plugin in GSTREAMER_PLUGINS:
|
||||||
|
FixPlugin(FindGstreamerPlugin(plugin), 'gstreamer')
|
||||||
|
|
||||||
|
#FixPlugin(FindGstreamerPlugin('gst-plugin-scanner'), '.')
|
||||||
|
FixPlugin(FindGioModule('libgiognutls.so'), 'gio-modules')
|
||||||
|
FixPlugin(FindGioModule('libgiognomeproxy.so'), 'gio-modules')
|
||||||
|
|
||||||
|
try:
|
||||||
|
FixPlugin('strawberry-tagreader', '.')
|
||||||
|
except:
|
||||||
|
print 'Failed to find blob: %s' % traceback.format_exc()
|
||||||
|
|
||||||
|
for plugin in QT_PLUGINS:
|
||||||
|
FixPlugin(FindQtPlugin(plugin), os.path.dirname(plugin))
|
||||||
|
|
||||||
|
if len(sys.argv) <= 2:
|
||||||
|
print 'Would run %d commands:' % len(commands)
|
||||||
|
for command in commands:
|
||||||
|
print ' '.join(command)
|
||||||
|
|
||||||
|
print 'OK?'
|
||||||
|
raw_input()
|
||||||
|
|
||||||
|
for command in commands:
|
||||||
|
p = subprocess.Popen(command)
|
||||||
|
os.waitpid(p.pid, 0)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
BIN
dist/macos/strawberry.icns
vendored
Normal file
BIN
dist/macos/strawberry.icns
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.4 KiB |
114
dist/scripts/gen-icons-resource.sh
vendored
Executable file
114
dist/scripts/gen-icons-resource.sh
vendored
Executable file
@@ -0,0 +1,114 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
sizes="128x128 64x64 48x48 32x32 22x22"
|
||||||
|
|
||||||
|
#
|
||||||
|
|
||||||
|
for i in full/*
|
||||||
|
do
|
||||||
|
source=$i
|
||||||
|
file=`basename $i`
|
||||||
|
|
||||||
|
id=`identify "$i"` || exit 1
|
||||||
|
if [ "$id" = "" ] ; then
|
||||||
|
echo "ERROR: Cannot dermine format and geometry for image: \"$i\"."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
g=`echo $id | awk '{print $3}'` || exit 1
|
||||||
|
if [ "$g" = "" ] ; then
|
||||||
|
echo "ERROR: Cannot dermine geometry for image: \"$i\"."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Geometry can be 563x144+0+0 or 75x98
|
||||||
|
# we need to get rid of the plus (+) and the x characters:
|
||||||
|
w=`echo $g | sed 's/[^0-9]/ /g' | awk '{print $1}'` || exit 1
|
||||||
|
if [ "$w" = "" ] ; then
|
||||||
|
echo "ERROR: Cannot dermine width for image: \"$x\"."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
h=`echo $g | sed 's/[^0-9]/ /g' | awk '{print $2}'` || exit 1
|
||||||
|
if [ "$h" = "" ] ; then
|
||||||
|
echo "ERROR: Cannot dermine height for image: \"$x\"."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
for x in $sizes
|
||||||
|
do
|
||||||
|
|
||||||
|
dest="$x/$file"
|
||||||
|
if [ -f $dest ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
x_w=$(echo $x | cut -d 'x' -f1)
|
||||||
|
x_h=$(echo $x | cut -d 'x' -f2)
|
||||||
|
|
||||||
|
if [ "$w" -lt "$x_w" ] || [ "$h" -lt "$x_h" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "convert -verbose -resize $x $source $dest"
|
||||||
|
convert -verbose -resize $x $source $dest
|
||||||
|
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
for i in $sizes
|
||||||
|
do
|
||||||
|
for x in $i/*
|
||||||
|
do
|
||||||
|
file=`basename $x`
|
||||||
|
if ! [ -f "full/$file" ]; then
|
||||||
|
echo "Warning: full/$file does not exist, but $x exists."
|
||||||
|
fi
|
||||||
|
|
||||||
|
id=`identify "$x"` || exit 1
|
||||||
|
if [ "$id" = "" ] ; then
|
||||||
|
echo "ERROR: Cannot dermine format and geometry for image: \"$x\"."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
g=`echo $id | awk '{print $3}'` || exit 1
|
||||||
|
if [ "$g" = "" ] ; then
|
||||||
|
echo "ERROR: Cannot dermine geometry for image: \"$x\"."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Geometry can be 563x144+0+0 or 75x98
|
||||||
|
# we need to get rid of the plus (+) and the x characters:
|
||||||
|
w=`echo $g | sed 's/[^0-9]/ /g' | awk '{print $1}'` || exit 1
|
||||||
|
if [ "$w" = "" ] ; then
|
||||||
|
echo "ERROR: Cannot dermine width for image: \"$x\"."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
h=`echo $g | sed 's/[^0-9]/ /g' | awk '{print $2}'` || exit 1
|
||||||
|
if [ "$h" = "" ] ; then
|
||||||
|
echo "ERROR: Cannot dermine height for image: \"$x\"."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [ "${h}x${w}" = "$i" ]; then
|
||||||
|
echo "Warning: $x is not $i, but ${h}x${w}!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
file="../icons.qrc"
|
||||||
|
rm -rf "$file"
|
||||||
|
echo "<RCC>" >>$file
|
||||||
|
echo "<qresource prefix=\"/\">" >>$file
|
||||||
|
|
||||||
|
for i in full $sizes
|
||||||
|
do
|
||||||
|
for x in $i/*
|
||||||
|
do
|
||||||
|
f=`basename $x`
|
||||||
|
echo " <file>icons/$i/$f</file>" >>$file
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "</qresource>" >>$file
|
||||||
|
echo "</RCC>" >>$file
|
||||||
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
name=strawberry
|
name=strawberry
|
||||||
version="@STRAWBERRY_VERSION_PACKAGE@"
|
version="@STRAWBERRY_VERSION_PACKAGE@"
|
||||||
gitrev="@INCLUDE_GIT_REVISION@"
|
gitrev="@INCLUDE_GIT_REVISION@"
|
||||||
root=$(cd "${0%/*}/.." && echo $PWD/${0##*/})
|
root=$(cd "${0%/*}/../.." && echo $PWD/${0##*/})
|
||||||
root=`dirname "$root"`
|
root=`dirname "$root"`
|
||||||
rootnoslash=`echo $root | sed "s/^\///"`
|
rootnoslash=`echo $root | sed "s/^\///"`
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
676
dist/windows/Capabilities.nsh
vendored
Normal file
676
dist/windows/Capabilities.nsh
vendored
Normal file
@@ -0,0 +1,676 @@
|
|||||||
|
/*
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
Application Capabilities (Default Programs)
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
By Joel Spadin
|
||||||
|
Loosely based on code taken from http://nsis.sourceforge.net/File_Association
|
||||||
|
|
||||||
|
These functions register an application with Windows Vista's and Windows 7's
|
||||||
|
Default Programs window.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
!include "Capabilities.nsh"
|
||||||
|
!define CAPABILITIES_NAME "[program name]"
|
||||||
|
!define CAPABILITIES_DESCRIPTION "[description]"
|
||||||
|
!define CAPABILITIES_PROGID "[progid]"
|
||||||
|
!define CAPABILITIES_PATH "[path]"
|
||||||
|
...
|
||||||
|
|
||||||
|
During install, call ${RegisterCapabilities}, then use the other register
|
||||||
|
macros to create file type, MIME, and protocol associations.
|
||||||
|
|
||||||
|
During uninstall, call ${UnRegisterCapabilities}
|
||||||
|
|
||||||
|
_______________________________________________________________________________
|
||||||
|
|
||||||
|
More information about Default Programs and Client Types can be found here:
|
||||||
|
http://msdn.microsoft.com/en-us/library/cc144154(VS.85).aspx
|
||||||
|
http://msdn.microsoft.com/en-us/library/cc144109(v=VS.85).aspx
|
||||||
|
|
||||||
|
Defines: All defines not marked [optional] are required.
|
||||||
|
|
||||||
|
CAPABILITIES_NAME
|
||||||
|
The canonical name of the program.
|
||||||
|
|
||||||
|
CAPABILITIES_LOCAL_NAME [optional]
|
||||||
|
The localized name of the program as it appears in Default Programs.
|
||||||
|
This should be in the format "@FilePath,-StringID" where FilePath is the
|
||||||
|
path to a .dll or .exe file and StringID is the ID of a resource contained
|
||||||
|
in the file.
|
||||||
|
|
||||||
|
CAPABILITIES_DESCRIPTION
|
||||||
|
The localized description shown in Default Programs. This can be either a
|
||||||
|
string or in the same format as CAPABILITIES_LOCAL_NAME
|
||||||
|
|
||||||
|
CAPABILITIES_PROGID
|
||||||
|
An identifier used in file associations. Usually, this is the name of the
|
||||||
|
program. This should not have any spaces in it.
|
||||||
|
|
||||||
|
CAPABILITIES_PATH
|
||||||
|
The location where capabilities info is stored in the registry.
|
||||||
|
The "Capabilities" key will automatically be added. If the application is
|
||||||
|
a client of some sort, (browser, email, media player, etc.) use
|
||||||
|
"Software\Clients\[ClientType]\[ProgramName]". Otherwise, use
|
||||||
|
"Software\[CompanyName]\[ProgramName]" or just "Software\[ProgramName]".
|
||||||
|
|
||||||
|
CAPABILITIES_ICON [optional]
|
||||||
|
The icon shown in Default Programs. This should be in the format
|
||||||
|
"FilePath,IconIndex" where FilePath is the path to a file containing the
|
||||||
|
icon. If IconIndex is positive, the number is used as the index of the
|
||||||
|
zero-based array of icons stored in the file. If IconIndex is negative,
|
||||||
|
the absolute value is used as a resource ID.
|
||||||
|
|
||||||
|
CAPABILITIES_REINSTALL [optional]
|
||||||
|
The command executed when a user uses Set Program Access and Computer
|
||||||
|
Defaults to select this application as the default for its client type.
|
||||||
|
This command should launch a program that associates the application with
|
||||||
|
all the file and protocol types it can handle.
|
||||||
|
|
||||||
|
CAPABILITIES_HIDE_ICONS [optional]
|
||||||
|
The command executed when a user uses Set Program Access and Computer
|
||||||
|
Defaults to disable access to this application. This command should launch
|
||||||
|
a program that hides all shortcuts and access points to this application.
|
||||||
|
It should also prevent the application from being run automatically and
|
||||||
|
update the IconsVisible registry value to 0.
|
||||||
|
|
||||||
|
CAPABILITIES_SHOW_ICONS [optional]
|
||||||
|
The command executed when a user uses Set Program Access and Computer
|
||||||
|
Defaults to enable access to this application. This command should launch
|
||||||
|
a program that restores shortcuts and access points to the application,
|
||||||
|
allows the program to run, and updates the IconsVisible registry value to 1.
|
||||||
|
|
||||||
|
|
||||||
|
Macros:
|
||||||
|
|
||||||
|
${RegisterCapabilities}
|
||||||
|
Registers the program with Default Programs. Call this once on install
|
||||||
|
before using any other functions.
|
||||||
|
|
||||||
|
${UnRegisterCapabilities}
|
||||||
|
Un-registers the program and all its associations. Call this once on
|
||||||
|
uninstall to clean up all installed registry values.
|
||||||
|
|
||||||
|
${RegisterFileType} "[extension]" "[executable]" "[icon]" "[description]"
|
||||||
|
Registers a file type with the program
|
||||||
|
extension: The file extension to register (ex: .txt)
|
||||||
|
executable: The executable that opens the file type
|
||||||
|
icon: The icon shown for the file type
|
||||||
|
description: Description for the file type shown in Explorer
|
||||||
|
|
||||||
|
${RegisterMediaType} "[extension]" "[executable]" "[icon]" "[description]"
|
||||||
|
Registers a media file type with the program (has a "Play" command)
|
||||||
|
(arguments are same as RegisterFileType)
|
||||||
|
|
||||||
|
${RegisterMimeType} "[mime type]" "[shortname]" "[clsid]"
|
||||||
|
Registers a mime type with the program
|
||||||
|
mime type: The MIME type to register (ex: audio/mp3)
|
||||||
|
shortname: A short identifier for the type (ex: mp3)
|
||||||
|
clsid: The CLSID of the program to handle files of this type
|
||||||
|
|
||||||
|
${RegisterProtocol} "[protocol]" "[executable]" "[icon]" "[description]"
|
||||||
|
Registers a URL protocol with the program
|
||||||
|
protocol: The protocol to register (ex: http)
|
||||||
|
(other arguments are same as RegisterFileType)
|
||||||
|
|
||||||
|
${UnRegisterFileType} "[extension]"
|
||||||
|
Un-registers a previously registered file type
|
||||||
|
extension: The file extension to un-register
|
||||||
|
|
||||||
|
${UnRegisterMimeType} "[mime type]"
|
||||||
|
Un-registers a previously registered MEME type
|
||||||
|
mime type: The MIME type to un-register
|
||||||
|
|
||||||
|
${UnRegisterProtocol} "[protocol]"
|
||||||
|
Un-registers a previously registered URL protocol
|
||||||
|
protocol: The URL protocol to un-register
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!ifndef Capabilities_INCLUDED
|
||||||
|
!define Capabilities_INCLUDED
|
||||||
|
|
||||||
|
!include "Util.nsh"
|
||||||
|
!include "StrFunc.nsh"
|
||||||
|
|
||||||
|
${StrCase}
|
||||||
|
|
||||||
|
!verbose push
|
||||||
|
!verbose 3
|
||||||
|
!ifndef _Capabilities_VERBOSE
|
||||||
|
!define _Capabilities_VERBOSE 3
|
||||||
|
!endif
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
!define Capabilities_VERBOSE `!insertmacro Capabilities_VERBOSE`
|
||||||
|
!verbose pop
|
||||||
|
|
||||||
|
!macro Capabilities_VERBOSE _VERBOSE
|
||||||
|
!verbose push
|
||||||
|
!verbose 3
|
||||||
|
!undef _Capabilities_VERBOSE
|
||||||
|
!define _Capabilities_VERBOSE ${_VERBOSE}
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro RegisterCapabilitiesCall
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
${CallArtificialFunction} RegisterCapabilities_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterCapabilitiesCall
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
${CallArtificialFunction} UnRegisterCapabilities_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro RegisterFileTypeCall _EXTENSION _EXECUTABLE _ICON _DESCRIPTION
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
Push `${_DESCRIPTION}`
|
||||||
|
Push `${_ICON}`
|
||||||
|
Push `${_EXECUTABLE}`
|
||||||
|
Push `${_EXTENSION}`
|
||||||
|
${CallArtificialFunction} RegisterFileType_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro RegisterMediaTypeCall _EXTENSION _EXECUTABLE _ICON _DESCRIPTION
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
Push `${_DESCRIPTION}`
|
||||||
|
Push `${_ICON}`
|
||||||
|
Push `${_EXECUTABLE}`
|
||||||
|
Push `${_EXTENSION}`
|
||||||
|
${CallArtificialFunction} RegisterMediaType_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro RegisterMimeTypeCall _MIMETYPE _SHORTNAME _CLSID
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
Push `${_CLSID}`
|
||||||
|
Push `${_SHORTNAME}`
|
||||||
|
Push `${_MIMETYPE}`
|
||||||
|
${CallArtificialFunction} RegisterMimeType_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro RegisterProtocolCall _PROTOCOL _EXECUTABLE _ICON _DESCRIPTION
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
Push `${_DESCRIPTION}`
|
||||||
|
Push `${_ICON}`
|
||||||
|
Push `${_EXECUTABLE}`
|
||||||
|
Push `${_PROTOCOL}`
|
||||||
|
${CallArtificialFunction} RegisterProtocol_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterFileTypeCall _EXTENSION
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
Push `${_EXTENSION}`
|
||||||
|
${CallArtificialFunction} UnRegisterFileType_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterMimeTypeCall _MIMETYPE
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
Push `${_MIMETYPE}`
|
||||||
|
${CallArtificialFunction} UnRegisterMimeType_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterProtocolCall _PROTOCOL
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
Push `${_MIMETYPE}`
|
||||||
|
${CallArtificialFunction} UnRegisterProtocol_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define RegisterCapabilities `!insertmacro RegisterCapabilitiesCall`
|
||||||
|
!define un.RegisterCapabilities `!insertmacro RegisterCapabilitiesCall`
|
||||||
|
|
||||||
|
!macro RegisterCapabilities
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.RegisterCapabilities
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro RegisterCapabilities_
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
Push $0
|
||||||
|
|
||||||
|
!ifndef CAPABILITIES_PATH
|
||||||
|
!error "CAPABILITIES_PATH not defined"
|
||||||
|
!endif
|
||||||
|
!ifndef CAPABILITIES_NAME
|
||||||
|
!error "CAPABILITIES_NAME not defined"
|
||||||
|
!endif
|
||||||
|
!ifndef CAPABILITIES_PROGID
|
||||||
|
!error "CAPABILITIES_PROGID not defined"
|
||||||
|
!endif
|
||||||
|
!ifndef CAPABILITIES_DESCRIPTION
|
||||||
|
!error "CAPABILITIES_DESCRIPTION not defined"
|
||||||
|
!endif
|
||||||
|
|
||||||
|
StrCpy $0 "${CAPABILITIES_PATH}\Capabilities"
|
||||||
|
; add the application to RegisteredApplications
|
||||||
|
WriteRegStr HKLM "Software\RegisteredApplications" "${CAPABILITIES_NAME}" "$0"
|
||||||
|
|
||||||
|
; write application info
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}" "" "${CAPABILITIES_NAME}"
|
||||||
|
|
||||||
|
!ifdef CAPABILITIES_LOCAL_NAME
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}" "LocalizedString" "${CAPABILITIES_LOCAL_NAME}"
|
||||||
|
!endif
|
||||||
|
!ifdef CAPABILITIES_ICON
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}\DefaultIcon" "" "${CAPABILITIES_ICON}"
|
||||||
|
!endif
|
||||||
|
|
||||||
|
; write installinfo if defined
|
||||||
|
!ifdef CAPABILITIES_REINSTALL
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}\InstallInfo" "ReinstallCommand" "${CAPABILITIES_REINSTALL}"
|
||||||
|
!endif
|
||||||
|
!ifdef CAPABILITIES_HIDE_ICONS
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}\InstallInfo" "HideIconsCommand" "${CAPABILITIES_HIDE_ICONS}"
|
||||||
|
WriteRegDWORD HKLM "${CAPABILITIES_PATH}\InstallInfo" "IconsVisible" 0x1
|
||||||
|
!endif
|
||||||
|
!ifdef CAPABILITIES_SHOW_ICONS
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}\InstallInfo" "ShowIconsCommand" "${CAPABILITIES_SHOW_ICONS}"
|
||||||
|
WriteRegDWORD HKLM "${CAPABILITIES_PATH}\InstallInfo" "IconsVisible" 0x1
|
||||||
|
!endif
|
||||||
|
|
||||||
|
; write application capabilities info
|
||||||
|
!ifdef CAPABILITIES_LOCAL_NAME
|
||||||
|
WriteRegStr HKLM "$0" "ApplicationName" "${CAPABILITIES_LOCAL_NAME}"
|
||||||
|
!else
|
||||||
|
WriteRegStr HKLM "$0" "ApplicationName" "${CAPABILITIES_NAME}"
|
||||||
|
!endif
|
||||||
|
WriteRegStr HKLM "$0" "ApplicationDescription" "${CAPABILITIES_DESCRIPTION}"
|
||||||
|
|
||||||
|
Pop $0
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define UnRegisterCapabilities `!insertmacro UnRegisterCapabilitiesCall`
|
||||||
|
!define un.UnRegisterCapabilities `!insertmacro UnRegisterCapabilitiesCall`
|
||||||
|
|
||||||
|
!macro UnRegisterCapabilities
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.UnRegisterCapabilities
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterCapabilities_
|
||||||
|
!define MacroID ${__LINE__}
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
|
||||||
|
Push $0
|
||||||
|
Push $1
|
||||||
|
|
||||||
|
; remove all file associations
|
||||||
|
FileTypeLoop_${MacroID}:
|
||||||
|
EnumRegValue $0 HKLM "${CAPABILITIES_PATH}\Capabilities\FileAssociations" 0
|
||||||
|
StrCmp $0 "" FileTypeDone_${MacroID}
|
||||||
|
|
||||||
|
ReadRegStr $1 HKLM "${CAPABILITIES_PATH}\Capabilities\FileAssociations" "$0"
|
||||||
|
DeleteRegKey HKCR $1
|
||||||
|
DeleteRegValue HKLM "${CAPABILITIES_PATH}\Capabilities\FileAssociations" "$0"
|
||||||
|
|
||||||
|
Goto FileTypeLoop_${MacroID}
|
||||||
|
FileTypeDone_${MacroID}:
|
||||||
|
|
||||||
|
; remove all MIME associations
|
||||||
|
MimeTypeLoop_${MacroID}:
|
||||||
|
EnumRegValue $0 HKLM "${CAPABILITIES_PATH}\Capabilities\MimeAssociations" 0
|
||||||
|
StrCmp $0 "" MimeTypeDone_${MacroID}
|
||||||
|
|
||||||
|
ReadRegStr $1 HKLM "${CAPABILITIES_PATH}\Capabilities\MimeAssociations" "$0"
|
||||||
|
DeleteRegKey HKCR "$1"
|
||||||
|
DeleteRegValue HKLM "${CAPABILITIES_PATH}\Capabilities\MimeAssociations" "$0"
|
||||||
|
|
||||||
|
Goto MimeTypeLoop_${MacroID}
|
||||||
|
MimeTypeDone_${MacroID}:
|
||||||
|
|
||||||
|
; remove all protocol associations
|
||||||
|
ProtocolLoop_${MacroID}:
|
||||||
|
EnumRegValue $0 HKLM "${CAPABILITIES_PATH}\Capabilities\UrlAssociations" 0
|
||||||
|
StrCmp $0 "" ProtocolDone_${MacroID}
|
||||||
|
|
||||||
|
ReadRegStr $1 HKLM "${CAPABILITIES_PATH}\Capabilities\UrlAssociations" "$0"
|
||||||
|
DeleteRegKey HKCR "$1"
|
||||||
|
DeleteRegValue HKLM "${CAPABILITIES_PATH}\Capabilities\UrlAssociations" "$0"
|
||||||
|
|
||||||
|
Goto ProtocolLoop_${MacroID}
|
||||||
|
ProtocolDone_${MacroID}:
|
||||||
|
|
||||||
|
|
||||||
|
; remove capabilities keys
|
||||||
|
DeleteRegValue HKLM "Software\RegisteredApplications" "${CAPABILITIES_NAME}"
|
||||||
|
DeleteRegKey HKLM ${CAPABILITIES_PATH}
|
||||||
|
|
||||||
|
Pop $1
|
||||||
|
Pop $0
|
||||||
|
!verbose pop
|
||||||
|
!undef MacroID
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define RegisterFileType `!insertmacro RegisterFileTypeCall`
|
||||||
|
!define un.RegisterFileType `!insertmacro RegisterFileTypeCall`
|
||||||
|
|
||||||
|
!macro RegisterFileType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.RegisterFileType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
!macro RegisterFileType_
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R3 ;ext
|
||||||
|
Exch
|
||||||
|
Exch $R2 ;exe
|
||||||
|
Exch 2
|
||||||
|
Exch $R1 ;icon
|
||||||
|
Exch
|
||||||
|
Exch 3
|
||||||
|
Exch $R0 ;desc
|
||||||
|
Push $0
|
||||||
|
|
||||||
|
; create an association name
|
||||||
|
; ex: .mp3 becomes ProgID.AssocFile.MP3
|
||||||
|
${StrCase} $0 "$R3" "U"
|
||||||
|
StrCpy $0 "${CAPABILITIES_PROGID}.AssocFile$0"
|
||||||
|
|
||||||
|
; link capabilities to association in classes root
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}\Capabilities\FileAssociations" "$R3" "$0"
|
||||||
|
|
||||||
|
; write file association in classes root
|
||||||
|
WriteRegStr HKCR "$0" "" "$R0"
|
||||||
|
WriteRegStr HKCR "$0\DefaultIcon" "" "$R1"
|
||||||
|
WriteRegStr HKCR "$0\shell" "" "Open"
|
||||||
|
WriteRegStr HKCR "$0\shell\open" "" "&Open"
|
||||||
|
WriteRegStr HKCR "$0\shell\open\command" "" '"$R2" "%1"'
|
||||||
|
|
||||||
|
Pop $0
|
||||||
|
Pop $R0
|
||||||
|
Pop $R1
|
||||||
|
Pop $R2
|
||||||
|
Pop $R3
|
||||||
|
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define RegisterMediaType `!insertmacro RegisterMediaTypeCall`
|
||||||
|
!define un.RegisterMediaType `!insertmacro RegisterMediaTypeCall`
|
||||||
|
|
||||||
|
!macro RegisterMediaType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.RegisterMediaType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
!macro RegisterMediaType_
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R3 ;ext
|
||||||
|
Exch
|
||||||
|
Exch $R2 ;exe
|
||||||
|
Exch 2
|
||||||
|
Exch $R1 ;icon
|
||||||
|
Exch
|
||||||
|
Exch 3
|
||||||
|
Exch $R0 ;desc
|
||||||
|
Push $0
|
||||||
|
|
||||||
|
|
||||||
|
; create an association name
|
||||||
|
; ex: .mp3 becomes ProgID.AssocFile.MP3
|
||||||
|
${StrCase} $0 "$R3" "U"
|
||||||
|
StrCpy $0 "${CAPABILITIES_PROGID}.AssocFile$0"
|
||||||
|
|
||||||
|
; link capabilities to association in classes root
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}\Capabilities\FileAssociations" "$R3" "$0"
|
||||||
|
|
||||||
|
; write file association in classes root
|
||||||
|
WriteRegStr HKCR "$0" "" "$R0"
|
||||||
|
WriteRegStr HKCR "$0\DefaultIcon" "" "$R1"
|
||||||
|
WriteRegStr HKCR "$0\shell" "" "Play"
|
||||||
|
WriteRegStr HKCR "$0\shell\open" "" "&Open"
|
||||||
|
WriteRegStr HKCR "$0\shell\open\command" "" '"$R2" "%1"'
|
||||||
|
WriteRegStr HKCR "$0\shell\play" "" "&Play"
|
||||||
|
WriteRegStr HKCR "$0\shell\play\command" "" '"$R2" "%L"'
|
||||||
|
|
||||||
|
Pop $0
|
||||||
|
Pop $R0
|
||||||
|
Pop $R1
|
||||||
|
Pop $R2
|
||||||
|
Pop $R3
|
||||||
|
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define RegisterMimeType `!insertmacro RegisterMimeTypeCall`
|
||||||
|
!define un.RegisterMimeType `!insertmacro RegisterMimeTypeCall`
|
||||||
|
|
||||||
|
!macro RegisterMimeType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.RegisterMimeType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
!macro RegisterMimeType_
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R2 ;mime
|
||||||
|
Exch
|
||||||
|
Exch $R1 ;shortname
|
||||||
|
Exch
|
||||||
|
Exch 2
|
||||||
|
Exch $R0 ;clsid
|
||||||
|
|
||||||
|
Push $0
|
||||||
|
|
||||||
|
; create an association name
|
||||||
|
; ex: audio/mp3 becomes ProgID.AssocMIME.MP3
|
||||||
|
${StrCase} $0 "$R1" "U"
|
||||||
|
StrCpy $0 "${CAPABILITIES_PROGID}.AssocMIME.$0"
|
||||||
|
|
||||||
|
; link capabilities to association in classes root
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}\Capabilities\MimeAssociations" "$R2" "$0"
|
||||||
|
|
||||||
|
; write file association in classes root
|
||||||
|
WriteRegStr HKCR "$0\CLSID" "" "$R0"
|
||||||
|
|
||||||
|
Pop $0
|
||||||
|
Pop $R0
|
||||||
|
Pop $R1
|
||||||
|
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define RegisterProtocol `!insertmacro RegisterProtocolCall`
|
||||||
|
!define un.RegisterProtocol `!insertmacro RegisterProtocolCall`
|
||||||
|
|
||||||
|
!macro RegisterProtocol
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.RegisterProtocol
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
!macro RegisterProtocol_
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R3 ;protocol
|
||||||
|
Exch
|
||||||
|
Exch $R2 ;exe
|
||||||
|
Exch 2
|
||||||
|
Exch $R1 ;icon
|
||||||
|
Exch
|
||||||
|
Exch 3
|
||||||
|
Exch $R0 ;desc
|
||||||
|
Push $0
|
||||||
|
|
||||||
|
|
||||||
|
; create an association name
|
||||||
|
; ex: http becomes ProgID.AssocProtocol.HTTP
|
||||||
|
${StrCase} $0 "$R3" "U"
|
||||||
|
StrCpy $0 "${CAPABILITIES_PROGID}.AssocProtocol.$0"
|
||||||
|
|
||||||
|
; link capabilities to association in classes root
|
||||||
|
WriteRegStr HKLM "${CAPABILITIES_PATH}\Capabilities\UrlAssociations" "$R3" "$0"
|
||||||
|
|
||||||
|
; write file association in classes root
|
||||||
|
WriteRegStr HKCR "$0" "" "$R0"
|
||||||
|
WriteRegStr HKCR "$0\DefaultIcon" "" "$R1"
|
||||||
|
WriteRegStr HKCR "$0\shell\open" "" "&Open"
|
||||||
|
WriteRegStr HKCR "$0\shell\open\command" "" '"$R2" "%1"'
|
||||||
|
|
||||||
|
Pop $0
|
||||||
|
Pop $R0
|
||||||
|
Pop $R1
|
||||||
|
Pop $R2
|
||||||
|
Pop $R3
|
||||||
|
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define UnRegisterFileType `!insertmacro UnRegisterFileTypeCall`
|
||||||
|
!define un.UnRegisterFileType `!insertmacro UnRegisterFileTypeCall`
|
||||||
|
|
||||||
|
!macro UnRegisterFileType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.UnRegisterFileType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterFileType_
|
||||||
|
!define MacroID ${__LINE__}
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R0 ;ext
|
||||||
|
Push $0
|
||||||
|
|
||||||
|
ReadRegStr $0 HKLM "${CAPABILITIES_PATH}\Capabilities\FileAssociations" "$R0"
|
||||||
|
StrCmp $0 "" skip_${MacroID}
|
||||||
|
|
||||||
|
DeleteRegKey HKCR "$0"
|
||||||
|
DeleteRegValue HKLM "${CAPABILITIES_PATH}\Capabilities\FileAssociations" "$R0"
|
||||||
|
skip_${MacroID}:
|
||||||
|
|
||||||
|
Pop $0
|
||||||
|
Pop $R0
|
||||||
|
!verbose pop
|
||||||
|
!undef MacroID
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define UnRegisterMimeType `!insertmacro UnRegisterMimeTypeCall`
|
||||||
|
!define un.UnRegisterMimeType `!insertmacro UnRegisterMimeTypeCall`
|
||||||
|
|
||||||
|
!macro UnRegisterMimeType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.UnRegisterMimeType
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterMimeType_
|
||||||
|
!define MacroID ${__LINE__}
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R0 ;mime
|
||||||
|
Push $0
|
||||||
|
|
||||||
|
ReadRegStr $0 HKLM "${CAPABILITIES_PATH}\Capabilities\MimeAssociations" "$R0"
|
||||||
|
StrCmp $0 "" skip_${MacroID}
|
||||||
|
|
||||||
|
DeleteRegKey HKCR "$0"
|
||||||
|
DeleteRegValue HKLM "${CAPABILITIES_PATH}\Capabilities\MimeAssociations" "$R0"
|
||||||
|
skip_${MacroID}:
|
||||||
|
|
||||||
|
Pop $0
|
||||||
|
Pop $R0
|
||||||
|
!verbose pop
|
||||||
|
!undef MacroID
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define UnRegisterProtocol `!insertmacro UnRegisterProtocolCall`
|
||||||
|
!define un.UnRegisterProtocol `!insertmacro UnRegisterProtocolCall`
|
||||||
|
|
||||||
|
!macro UnRegisterProtocol
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.UnRegisterProtocol
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterProtocol_
|
||||||
|
!define MacroID ${__LINE__}
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_Capabilities_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R0 ;protocol
|
||||||
|
Push $0
|
||||||
|
|
||||||
|
ReadRegStr $0 HKLM "${CAPABILITIES_PATH}\Capabilities\UrlAssociations" "$R0"
|
||||||
|
StrCmp $0 "" skip_${MacroID}
|
||||||
|
|
||||||
|
DeleteRegKey HKCR "$0"
|
||||||
|
DeleteRegValue HKLM "${CAPABILITIES_PATH}\Capabilities\UrlAssociations" "$R0"
|
||||||
|
skip_${MacroID}:
|
||||||
|
|
||||||
|
Pop $0
|
||||||
|
Pop $R0
|
||||||
|
!verbose pop
|
||||||
|
!undef MacroID
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!endif
|
||||||
190
dist/windows/FileAssociation.nsh
vendored
Normal file
190
dist/windows/FileAssociation.nsh
vendored
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
/*
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
File Association
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
Based on code taken from http://nsis.sourceforge.net/File_Association
|
||||||
|
|
||||||
|
Usage in script:
|
||||||
|
1. !include "FileAssociation.nsh"
|
||||||
|
2. [Section|Function]
|
||||||
|
${FileAssociationFunction} "Param1" "Param2" "..." $var
|
||||||
|
[SectionEnd|FunctionEnd]
|
||||||
|
|
||||||
|
FileAssociationFunction=[RegisterExtension|UnRegisterExtension]
|
||||||
|
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
${RegisterExtension} "[executable]" "[extension]" "[description]"
|
||||||
|
|
||||||
|
"[executable]" ; executable which opens the file format
|
||||||
|
;
|
||||||
|
"[extension]" ; extension, which represents the file format to open
|
||||||
|
;
|
||||||
|
"[description]" ; description for the extension. This will be display in Windows Explorer.
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
${UnRegisterExtension} "[extension]" "[description]"
|
||||||
|
|
||||||
|
"[extension]" ; extension, which represents the file format to open
|
||||||
|
;
|
||||||
|
"[description]" ; description for the extension. This will be display in Windows Explorer.
|
||||||
|
;
|
||||||
|
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
Macros
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
Change log window verbosity (default: 3=no script)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
!include "FileAssociation.nsh"
|
||||||
|
!insertmacro RegisterExtension
|
||||||
|
${FileAssociation_VERBOSE} 4 # all verbosity
|
||||||
|
!insertmacro UnRegisterExtension
|
||||||
|
${FileAssociation_VERBOSE} 3 # no script
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
!ifndef FileAssociation_INCLUDED
|
||||||
|
!define FileAssociation_INCLUDED
|
||||||
|
|
||||||
|
!include Util.nsh
|
||||||
|
|
||||||
|
!verbose push
|
||||||
|
!verbose 3
|
||||||
|
!ifndef _FileAssociation_VERBOSE
|
||||||
|
!define _FileAssociation_VERBOSE 3
|
||||||
|
!endif
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
!define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE`
|
||||||
|
!verbose pop
|
||||||
|
|
||||||
|
!macro FileAssociation_VERBOSE _VERBOSE
|
||||||
|
!verbose push
|
||||||
|
!verbose 3
|
||||||
|
!undef _FileAssociation_VERBOSE
|
||||||
|
!define _FileAssociation_VERBOSE ${_VERBOSE}
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
Push `${_DESCRIPTION}`
|
||||||
|
Push `${_EXTENSION}`
|
||||||
|
Push `${_EXECUTABLE}`
|
||||||
|
${CallArtificialFunction} RegisterExtension_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
Push `${_EXTENSION}`
|
||||||
|
Push `${_DESCRIPTION}`
|
||||||
|
${CallArtificialFunction} UnRegisterExtension_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define RegisterExtension `!insertmacro RegisterExtensionCall`
|
||||||
|
!define un.RegisterExtension `!insertmacro RegisterExtensionCall`
|
||||||
|
|
||||||
|
!macro RegisterExtension
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.RegisterExtension
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro RegisterExtension_
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R2 ;exe
|
||||||
|
Exch
|
||||||
|
Exch $R1 ;ext
|
||||||
|
Exch
|
||||||
|
Exch 2
|
||||||
|
Exch $R0 ;desc
|
||||||
|
Exch 2
|
||||||
|
Push $0
|
||||||
|
Push $1
|
||||||
|
|
||||||
|
ReadRegStr $1 HKCR $R1 "" ; read current file association
|
||||||
|
StrCmp "$1" "" NoBackup ; is it empty
|
||||||
|
StrCmp "$1" "$R0" NoBackup ; is it our own
|
||||||
|
WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value
|
||||||
|
NoBackup:
|
||||||
|
WriteRegStr HKCR $R1 "" "$R0" ; set our file association
|
||||||
|
|
||||||
|
ReadRegStr $0 HKCR $R0 ""
|
||||||
|
StrCmp $0 "" 0 Skip
|
||||||
|
WriteRegStr HKCR "$R0" "" "$R0"
|
||||||
|
WriteRegStr HKCR "$R0\shell" "" "open"
|
||||||
|
WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0"
|
||||||
|
Skip:
|
||||||
|
WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"'
|
||||||
|
WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0"
|
||||||
|
WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"'
|
||||||
|
|
||||||
|
Pop $1
|
||||||
|
Pop $0
|
||||||
|
Pop $R2
|
||||||
|
Pop $R1
|
||||||
|
Pop $R0
|
||||||
|
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
|
||||||
|
!define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
|
||||||
|
|
||||||
|
!macro UnRegisterExtension
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.UnRegisterExtension
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterExtension_
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R1 ;desc
|
||||||
|
Exch
|
||||||
|
Exch $R0 ;ext
|
||||||
|
Exch
|
||||||
|
Push $0
|
||||||
|
Push $1
|
||||||
|
|
||||||
|
ReadRegStr $1 HKCR $R0 ""
|
||||||
|
StrCmp $1 $R1 0 NoOwn ; only do this if we own it
|
||||||
|
ReadRegStr $1 HKCR $R0 "backup_val"
|
||||||
|
StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
|
||||||
|
DeleteRegKey HKCR $R0
|
||||||
|
Goto NoOwn
|
||||||
|
|
||||||
|
Restore:
|
||||||
|
WriteRegStr HKCR $R0 "" $1
|
||||||
|
DeleteRegValue HKCR $R0 "backup_val"
|
||||||
|
DeleteRegKey HKCR $R1 ;Delete key with association name settings
|
||||||
|
|
||||||
|
NoOwn:
|
||||||
|
|
||||||
|
Pop $1
|
||||||
|
Pop $0
|
||||||
|
Pop $R1
|
||||||
|
Pop $R0
|
||||||
|
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!endif # !FileAssociation_INCLUDED
|
||||||
573
dist/windows/strawberry.nsi
vendored
Normal file
573
dist/windows/strawberry.nsi
vendored
Normal file
@@ -0,0 +1,573 @@
|
|||||||
|
!define PRODUCT_NAME "Strawberry"
|
||||||
|
!define PRODUCT_PUBLISHER "Strawberry"
|
||||||
|
!define PRODUCT_VERSION_MAJOR 0
|
||||||
|
!define PRODUCT_VERSION_MINOR 1
|
||||||
|
!define PRODUCT_DISPLAY_VERSION "0.1.7"
|
||||||
|
!define PRODUCT_DISPLAY_VERSION_SHORT "0.1.7"
|
||||||
|
!define PRODUCT_WEB_SITE "http://www.strawbs.org/"
|
||||||
|
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
||||||
|
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
|
||||||
|
!define PRODUCT_INSTALL_DIR "$PROGRAMFILES\Strawberry Music Player"
|
||||||
|
|
||||||
|
; Set Application Capabilities info
|
||||||
|
!define CAPABILITIES_NAME "Strawberry Music Player"
|
||||||
|
!define CAPABILITIES_LOCAL_NAME "Strawberry"
|
||||||
|
!define CAPABILITIES_PROGID "Strawberry Music Player"
|
||||||
|
!define CAPABILITIES_PATH "Software\Clients\Media\Strawberry"
|
||||||
|
!define CAPABILITIES_DESCRIPTION "Strawberry Music Player"
|
||||||
|
!define CAPABILITIES_ICON "$INSTDIR\strawberry.ico"
|
||||||
|
!define CAPABILITIES_REINSTALL "Command to reinstall"
|
||||||
|
!define CAPABILITIES_HIDE_ICONS "Command to hide icons"
|
||||||
|
!define CAPABILITIES_SHOW_ICONS "Command to show icons"
|
||||||
|
|
||||||
|
SetCompressor /SOLID lzma
|
||||||
|
!addplugindir nsisplugins
|
||||||
|
!include "MUI2.nsh"
|
||||||
|
!include "FileAssociation.nsh"
|
||||||
|
!include "Capabilities.nsh"
|
||||||
|
|
||||||
|
!define MUI_ICON "strawberry.ico"
|
||||||
|
|
||||||
|
!define MUI_COMPONENTSPAGE_SMALLDESC
|
||||||
|
;!define MUI_FINISHPAGE_RUN
|
||||||
|
;!define MUI_FINISHPAGE_RUN_TEXT "Run Strawberry"
|
||||||
|
;!define MUI_FINISHPAGE_RUN_FUNCTION "RunStrawberry"
|
||||||
|
|
||||||
|
; Installer pages
|
||||||
|
!insertmacro MUI_PAGE_WELCOME
|
||||||
|
!insertmacro MUI_PAGE_DIRECTORY
|
||||||
|
!insertmacro MUI_PAGE_INSTFILES
|
||||||
|
!insertmacro MUI_PAGE_FINISH
|
||||||
|
|
||||||
|
; Uninstaller pages
|
||||||
|
!insertmacro MUI_UNPAGE_CONFIRM
|
||||||
|
!insertmacro MUI_UNPAGE_INSTFILES
|
||||||
|
!insertmacro MUI_UNPAGE_FINISH
|
||||||
|
|
||||||
|
!insertmacro MUI_LANGUAGE "English" ;first language is the default language
|
||||||
|
|
||||||
|
Name "${PRODUCT_NAME}"
|
||||||
|
OutFile "${PRODUCT_NAME}Setup-0.1.7.exe"
|
||||||
|
InstallDir "${PRODUCT_INSTALL_DIR}"
|
||||||
|
|
||||||
|
; Get the path where Strawberry was installed previously and set it as default path
|
||||||
|
InstallDirRegKey ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "UninstallString"
|
||||||
|
|
||||||
|
ShowInstDetails show
|
||||||
|
ShowUnInstDetails show
|
||||||
|
RequestExecutionLevel admin
|
||||||
|
;RequestExecutionLevel user
|
||||||
|
|
||||||
|
; Check for previous installation, and call the uninstaller if any
|
||||||
|
Function CheckPreviousInstall
|
||||||
|
|
||||||
|
ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "UninstallString"
|
||||||
|
StrCmp $R0 "" done
|
||||||
|
|
||||||
|
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
|
||||||
|
"${PRODUCT_NAME} is already installed. $\n$\nClick `OK` to remove the \
|
||||||
|
previous version or `Cancel` to cancel this upgrade." \
|
||||||
|
IDOK uninst
|
||||||
|
Abort
|
||||||
|
; Run the uninstaller
|
||||||
|
uninst:
|
||||||
|
ClearErrors
|
||||||
|
ExecWait '$R0' ; Do not copy the uninstaller to a temp file
|
||||||
|
|
||||||
|
done:
|
||||||
|
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
Function .onInit
|
||||||
|
|
||||||
|
!insertmacro MUI_LANGDLL_DISPLAY
|
||||||
|
|
||||||
|
Call CheckPreviousInstall
|
||||||
|
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
;!define LVM_GETITEMCOUNT 0x1004
|
||||||
|
!define LVM_GETITEMTEXT 0x102D
|
||||||
|
|
||||||
|
Function DumpLog
|
||||||
|
Exch $5
|
||||||
|
Push $0
|
||||||
|
Push $1
|
||||||
|
Push $2
|
||||||
|
Push $3
|
||||||
|
Push $4
|
||||||
|
Push $6
|
||||||
|
|
||||||
|
FindWindow $0 "#32770" "" $HWNDPARENT
|
||||||
|
GetDlgItem $0 $0 1016
|
||||||
|
StrCmp $0 0 exit
|
||||||
|
FileOpen $5 $5 "w"
|
||||||
|
StrCmp $5 "" exit
|
||||||
|
SendMessage $0 ${LVM_GETITEMCOUNT} 0 0 $6
|
||||||
|
System::Alloc ${NSIS_MAX_STRLEN}
|
||||||
|
Pop $3
|
||||||
|
StrCpy $2 0
|
||||||
|
System::Call "*(i, i, i, i, i, i, i, i, i) i \
|
||||||
|
(0, 0, 0, 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1"
|
||||||
|
loop: StrCmp $2 $6 done
|
||||||
|
System::Call "User32::SendMessageA(i, i, i, i) i \
|
||||||
|
($0, ${LVM_GETITEMTEXT}, $2, r1)"
|
||||||
|
System::Call "*$3(&t${NSIS_MAX_STRLEN} .r4)"
|
||||||
|
FileWrite $5 "$4$\r$\n"
|
||||||
|
IntOp $2 $2 + 1
|
||||||
|
Goto loop
|
||||||
|
done:
|
||||||
|
FileClose $5
|
||||||
|
System::Free $1
|
||||||
|
System::Free $3
|
||||||
|
exit:
|
||||||
|
Pop $6
|
||||||
|
Pop $4
|
||||||
|
Pop $3
|
||||||
|
Pop $2
|
||||||
|
Pop $1
|
||||||
|
Pop $0
|
||||||
|
Exch $5
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
;Function RunStrawberry
|
||||||
|
;ShellExecAsUser::ShellExecAsUser "" "$INSTDIR/strawberry.exe" ""
|
||||||
|
;FunctionEnd
|
||||||
|
|
||||||
|
Section "Delete old files" oldfiles
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Strawberry" Strawberry
|
||||||
|
SetOutPath "$INSTDIR"
|
||||||
|
|
||||||
|
File "strawberry.exe"
|
||||||
|
File "strawberry-tagreader.exe"
|
||||||
|
File "strawberry.ico"
|
||||||
|
|
||||||
|
File "libbz2.dll"
|
||||||
|
File "libcdio-16.dll"
|
||||||
|
File "libchromaprint.dll"
|
||||||
|
File "libcrypto-1_1.dll"
|
||||||
|
File "libfaad-2.dll"
|
||||||
|
File "libffi-6.dll"
|
||||||
|
File "libFLAC-8.dll"
|
||||||
|
File "libfreetype-6.dll"
|
||||||
|
File "libgcc_s_sjlj-1.dll"
|
||||||
|
File "libgio-2.0-0.dll"
|
||||||
|
File "libglib-2.0-0.dll"
|
||||||
|
File "libgmodule-2.0-0.dll"
|
||||||
|
File "libgobject-2.0-0.dll"
|
||||||
|
File "libgstapp-1.0-0.dll"
|
||||||
|
File "libgstaudio-1.0-0.dll"
|
||||||
|
File "libgstbase-1.0-0.dll"
|
||||||
|
File "libgstfft-1.0-0.dll"
|
||||||
|
File "libgstpbutils-1.0-0.dll"
|
||||||
|
File "libgstreamer-1.0-0.dll"
|
||||||
|
File "libgstriff-1.0-0.dll"
|
||||||
|
File "libgstrtp-1.0-0.dll"
|
||||||
|
File "libgstrtsp-1.0-0.dll"
|
||||||
|
File "libgstsdp-1.0-0.dll"
|
||||||
|
File "libgsttag-1.0-0.dll"
|
||||||
|
File "libgstvideo-1.0-0.dll"
|
||||||
|
File "libharfbuzz-0.dll"
|
||||||
|
File "libiconv-2.dll"
|
||||||
|
File "libintl-8.dll"
|
||||||
|
File "libjpeg-9.dll"
|
||||||
|
File "liblastfm5.dll"
|
||||||
|
File "libmp3lame-0.dll"
|
||||||
|
File "libogg-0.dll"
|
||||||
|
File "libopus-0.dll"
|
||||||
|
File "libpcre-1.dll"
|
||||||
|
File "libpcre2-16-0.dll"
|
||||||
|
File "libpng16-16.dll"
|
||||||
|
File "libprotobuf-15.dll"
|
||||||
|
File "libspeex-1.dll"
|
||||||
|
File "libsqlite3-0.dll"
|
||||||
|
File "libssl-1_1.dll"
|
||||||
|
File "libstdc++-6.dll"
|
||||||
|
File "libtag.dll"
|
||||||
|
File "libvorbis-0.dll"
|
||||||
|
File "libvorbisenc-2.dll"
|
||||||
|
File "libwavpack-1.dll"
|
||||||
|
File "libwinpthread-1.dll"
|
||||||
|
File "Qt5Concurrent.dll"
|
||||||
|
File "Qt5Core.dll"
|
||||||
|
File "Qt5Gui.dll"
|
||||||
|
File "Qt5Network.dll"
|
||||||
|
File "Qt5Sql.dll"
|
||||||
|
File "Qt5Widgets.dll"
|
||||||
|
File "Qt5Xml.dll"
|
||||||
|
File "zlib1.dll"
|
||||||
|
File "libxine-2.dll"
|
||||||
|
File "libmpcdec-5.dll"
|
||||||
|
File "libtheora-0.dll"
|
||||||
|
File "libfftw3-3.dll"
|
||||||
|
|
||||||
|
; Register Strawberry with Default Programs
|
||||||
|
Var /GLOBAL AppIcon
|
||||||
|
Var /GLOBAL AppExe
|
||||||
|
StrCpy $AppExe "$INSTDIR\strawberry.exe"
|
||||||
|
StrCpy $AppIcon "$INSTDIR\strawberry.ico"
|
||||||
|
|
||||||
|
${RegisterCapabilities}
|
||||||
|
|
||||||
|
${RegisterMediaType} ".mp3" $AppExe $AppIcon "MP3 Audio File"
|
||||||
|
${RegisterMediaType} ".flac" $AppExe $AppIcon "FLAC Audio File"
|
||||||
|
${RegisterMediaType} ".ogg" $AppExe $AppIcon "OGG Audio File"
|
||||||
|
${RegisterMediaType} ".spx" $AppExe $AppIcon "OGG Speex Audio File"
|
||||||
|
${RegisterMediaType} ".m4a" $AppExe $AppIcon "MP4 Audio File"
|
||||||
|
${RegisterMediaType} ".aac" $AppExe $AppIcon "AAC Audio File"
|
||||||
|
${RegisterMediaType} ".wma" $AppExe $AppIcon "WMA Audio File"
|
||||||
|
${RegisterMediaType} ".wav" $AppExe $AppIcon "WAV Audio File"
|
||||||
|
|
||||||
|
${RegisterMediaType} ".pls" $AppExe $AppIcon "PLS Audio File"
|
||||||
|
${RegisterMediaType} ".m3u" $AppExe $AppIcon "M3U Audio File"
|
||||||
|
${RegisterMediaType} ".xspf" $AppExe $AppIcon "XSPF Audio File"
|
||||||
|
${RegisterMediaType} ".asx" $AppExe $AppIcon "Windows Media Audio/Video playlist"
|
||||||
|
|
||||||
|
${RegisterMimeType} "audio/mp3" "mp3" "{cd3afa76-b84f-48f0-9393-7edc34128127}"
|
||||||
|
${RegisterMimeType} "audio/mp4" "m4a" "{cd3afa7c-b84f-48f0-9393-7edc34128127}"
|
||||||
|
${RegisterMimeType} "audio/x-ms-wma" "wma" "{cd3afa84-b84f-48f0-9393-7edc34128127}"
|
||||||
|
${RegisterMimeType} "audio/wav" "wav" "{cd3afa7b-b84f-48f0-9393-7edc34128127}"
|
||||||
|
|
||||||
|
${RegisterMimeType} "audio/mpegurl" "m3u" "{cd3afa78-b84f-48f0-9393-7edc34128127}"
|
||||||
|
${RegisterMimeType} "application/x-wmplayer" "asx" "{cd3afa96-b84f-48f0-9393-7edc34128127}"
|
||||||
|
|
||||||
|
StrCpy $0 "$EXEDIR\install.log"
|
||||||
|
Push $0
|
||||||
|
Call DumpLog
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Qt Platforms" platforms
|
||||||
|
SetOutPath "$INSTDIR\platforms"
|
||||||
|
File "/oname=qwindows.dll" "platforms\qwindows.dll"
|
||||||
|
|
||||||
|
StrCpy $0 "$EXEDIR\install.log"
|
||||||
|
Push $0
|
||||||
|
Call DumpLog
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Qt SQL Drivers" sqldrivers
|
||||||
|
SetOutPath "$INSTDIR\sqldrivers"
|
||||||
|
File "/oname=qsqlite.dll" "sqldrivers\qsqlite.dll"
|
||||||
|
|
||||||
|
StrCpy $0 "$EXEDIR\install.log"
|
||||||
|
Push $0
|
||||||
|
Call DumpLog
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Qt image format plugins" imageformats
|
||||||
|
SetOutPath "$INSTDIR\imageformats"
|
||||||
|
File "/oname=qgif.dll" "imageformats\qgif.dll"
|
||||||
|
File "/oname=qico.dll" "imageformats\qico.dll"
|
||||||
|
File "/oname=qjpeg.dll" "imageformats\qjpeg.dll"
|
||||||
|
|
||||||
|
StrCpy $0 "$EXEDIR\install.log"
|
||||||
|
Push $0
|
||||||
|
Call DumpLog
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Gstreamer plugins" gstreamer-plugins
|
||||||
|
SetOutPath "$INSTDIR\gstreamer-plugins"
|
||||||
|
|
||||||
|
File "/oname=libgstapetag.dll" "gstreamer-plugins\libgstapetag.dll"
|
||||||
|
File "/oname=libgstapp.dll" "gstreamer-plugins\libgstapp.dll"
|
||||||
|
File "/oname=libgstasf.dll" "gstreamer-plugins\libgstasf.dll"
|
||||||
|
File "/oname=libgstaiff.dll" "gstreamer-plugins\libgstaiff.dll"
|
||||||
|
File "/oname=libgstaudioconvert.dll" "gstreamer-plugins\libgstaudioconvert.dll"
|
||||||
|
File "/oname=libgstaudiofx.dll" "gstreamer-plugins\libgstaudiofx.dll"
|
||||||
|
File "/oname=libgstaudioparsers.dll" "gstreamer-plugins\libgstaudioparsers.dll"
|
||||||
|
File "/oname=libgstaudioresample.dll" "gstreamer-plugins\libgstaudioresample.dll"
|
||||||
|
File "/oname=libgstaudiotestsrc.dll" "gstreamer-plugins\libgstaudiotestsrc.dll"
|
||||||
|
File "/oname=libgstautodetect.dll" "gstreamer-plugins\libgstautodetect.dll"
|
||||||
|
File "/oname=libgstcoreelements.dll" "gstreamer-plugins\libgstcoreelements.dll"
|
||||||
|
File "/oname=libgstdirectsound.dll" "gstreamer-plugins\libgstdirectsound.dll"
|
||||||
|
File "/oname=libgstequalizer.dll" "gstreamer-plugins\libgstequalizer.dll"
|
||||||
|
File "/oname=libgstfaad.dll" "gstreamer-plugins\libgstfaad.dll"
|
||||||
|
File "/oname=libgstflac.dll" "gstreamer-plugins\libgstflac.dll"
|
||||||
|
File "/oname=libgstgio.dll" "gstreamer-plugins\libgstgio.dll"
|
||||||
|
File "/oname=libgsticydemux.dll" "gstreamer-plugins\libgsticydemux.dll"
|
||||||
|
File "/oname=libgstid3demux.dll" "gstreamer-plugins\libgstid3demux.dll"
|
||||||
|
File "/oname=libgstisomp4.dll" "gstreamer-plugins\libgstisomp4.dll"
|
||||||
|
File "/oname=libgstlame.dll" "gstreamer-plugins\libgstlame.dll"
|
||||||
|
File "/oname=libgstogg.dll" "gstreamer-plugins\libgstogg.dll"
|
||||||
|
File "/oname=libgstopusparse.dll" "gstreamer-plugins\libgstopusparse.dll"
|
||||||
|
File "/oname=libgstplayback.dll" "gstreamer-plugins\libgstplayback.dll"
|
||||||
|
File "/oname=libgstreplaygain.dll" "gstreamer-plugins\libgstreplaygain.dll"
|
||||||
|
File "/oname=libgstspectrum.dll" "gstreamer-plugins\libgstspectrum.dll"
|
||||||
|
File "/oname=libgstspeex.dll" "gstreamer-plugins\libgstspeex.dll"
|
||||||
|
File "/oname=libgsttaglib.dll" "gstreamer-plugins\libgsttaglib.dll"
|
||||||
|
File "/oname=libgsttypefindfunctions.dll" "gstreamer-plugins\libgsttypefindfunctions.dll"
|
||||||
|
File "/oname=libgstvolume.dll" "gstreamer-plugins\libgstvolume.dll"
|
||||||
|
File "/oname=libgstvorbis.dll" "gstreamer-plugins\libgstvorbis.dll"
|
||||||
|
File "/oname=libgstwavpack.dll" "gstreamer-plugins\libgstwavpack.dll"
|
||||||
|
File "/oname=libgstwavparse.dll" "gstreamer-plugins\libgstwavparse.dll"
|
||||||
|
|
||||||
|
StrCpy $0 "$EXEDIR\install.log"
|
||||||
|
Push $0
|
||||||
|
Call DumpLog
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Xine plugins" xine-plugins
|
||||||
|
SetOutPath "$INSTDIR\xine-plugins"
|
||||||
|
File "/oname=xineplug_ao_out_directx2.dll" "xine-plugins\xineplug_ao_out_directx2.dll"
|
||||||
|
File "/oname=xineplug_ao_out_directx.dll" "xine-plugins\xineplug_ao_out_directx.dll"
|
||||||
|
File "/oname=xineplug_decode_dts.dll" "xine-plugins\xineplug_decode_dts.dll"
|
||||||
|
File "/oname=xineplug_decode_dvaudio.dll" "xine-plugins\xineplug_decode_dvaudio.dll"
|
||||||
|
File "/oname=xineplug_decode_faad.dll" "xine-plugins\xineplug_decode_faad.dll"
|
||||||
|
File "/oname=xineplug_decode_gsm610.dll" "xine-plugins\xineplug_decode_gsm610.dll"
|
||||||
|
File "/oname=xineplug_decode_lpcm.dll" "xine-plugins\xineplug_decode_lpcm.dll"
|
||||||
|
File "/oname=xineplug_decode_mad.dll" "xine-plugins\xineplug_decode_mad.dll"
|
||||||
|
File "/oname=xineplug_decode_mpc.dll" "xine-plugins\xineplug_decode_mpc.dll"
|
||||||
|
File "/oname=xineplug_decode_mpeg2.dll" "xine-plugins\xineplug_decode_mpeg2.dll"
|
||||||
|
File "/oname=xineplug_dmx_asf.dll" "xine-plugins\xineplug_dmx_asf.dll"
|
||||||
|
File "/oname=xineplug_dmx_audio.dll" "xine-plugins\xineplug_dmx_audio.dll"
|
||||||
|
File "/oname=xineplug_dmx_playlist.dll" "xine-plugins\xineplug_dmx_playlist.dll"
|
||||||
|
File "/oname=xineplug_dmx_slave.dll" "xine-plugins\xineplug_dmx_slave.dll"
|
||||||
|
File "/oname=xineplug_flac.dll" "xine-plugins\xineplug_flac.dll"
|
||||||
|
File "/oname=xineplug_wavpack.dll" "xine-plugins\xineplug_wavpack.dll"
|
||||||
|
File "/oname=xineplug_xiph.dll" "xine-plugins\xineplug_xiph.dll"
|
||||||
|
|
||||||
|
StrCpy $0 "$EXEDIR\install.log"
|
||||||
|
Push $0
|
||||||
|
Call DumpLog
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Xine plugins post" xine-plugins-post
|
||||||
|
SetOutPath "$INSTDIR\xine-plugins\post"
|
||||||
|
File "/oname=xineplug_post_audio_filters.dll" "xine-plugins\post\xineplug_post_audio_filters.dll"
|
||||||
|
File "/oname=xineplug_post_goom.dll" "xine-plugins\post\xineplug_post_goom.dll"
|
||||||
|
File "/oname=xineplug_post_mosaico.dll" "xine-plugins\post\xineplug_post_mosaico.dll"
|
||||||
|
File "/oname=xineplug_post_planar.dll" "xine-plugins\post\xineplug_post_planar.dll"
|
||||||
|
File "/oname=xineplug_post_switch.dll" "xine-plugins\post\xineplug_post_switch.dll"
|
||||||
|
File "/oname=xineplug_post_tvtime.dll" "xine-plugins\post\xineplug_post_tvtime.dll"
|
||||||
|
File "/oname=xineplug_post_visualizations.dll" "xine-plugins\post\xineplug_post_visualizations.dll"
|
||||||
|
|
||||||
|
StrCpy $0 "$EXEDIR\install.log"
|
||||||
|
Push $0
|
||||||
|
Call DumpLog
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Start menu items" startmenu
|
||||||
|
; Create Start Menu folders and shortcuts.
|
||||||
|
SetShellVarContext all
|
||||||
|
|
||||||
|
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
|
||||||
|
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\strawberry.exe"
|
||||||
|
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
|
||||||
|
|
||||||
|
StrCpy $0 "$EXEDIR\install.log"
|
||||||
|
Push $0
|
||||||
|
Call DumpLog
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Uninstaller"
|
||||||
|
; Create uninstaller
|
||||||
|
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||||
|
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\Uninstall.exe"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\strawberry.ico"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_DISPLAY_VERSION}"
|
||||||
|
WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "VersionMajor" "${PRODUCT_VERSION_MAJOR}"
|
||||||
|
WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "VersionMinor" "${PRODUCT_VERSION_MINOR}"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
|
||||||
|
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
|
||||||
|
|
||||||
|
StrCpy $0 "$EXEDIR\install.log"
|
||||||
|
Push $0
|
||||||
|
Call DumpLog
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Uninstall"
|
||||||
|
; Kill strawberry.exe if it's running
|
||||||
|
; This calling convention is retarded...
|
||||||
|
;StrCpy $0 "strawberry.exe"
|
||||||
|
;KillProc::FindProcesses
|
||||||
|
;StrCmp $1 "-1" wooops
|
||||||
|
|
||||||
|
;StrCmp $0 "0" completed
|
||||||
|
|
||||||
|
;DetailPrint "Killing running strawberry.exe..."
|
||||||
|
|
||||||
|
;StrCpy $0 "strawberry.exe"
|
||||||
|
;KillProc::KillProcesses
|
||||||
|
;StrCmp $1 "-1" wooops
|
||||||
|
|
||||||
|
;Sleep 2000
|
||||||
|
;Goto completed
|
||||||
|
|
||||||
|
;wooops:
|
||||||
|
;DetailPrint "-> Error: Something went wrong while killing running strawberry.exe"
|
||||||
|
;Abort
|
||||||
|
|
||||||
|
;completed:
|
||||||
|
|
||||||
|
; Delete all the files
|
||||||
|
|
||||||
|
;Delete "$EXEDIR\install.log"
|
||||||
|
|
||||||
|
Delete "$INSTDIR\strawberry.ico"
|
||||||
|
Delete "$INSTDIR\strawberry.exe"
|
||||||
|
Delete "$INSTDIR\strawberry-tagreader.exe"
|
||||||
|
|
||||||
|
Delete "$INSTDIR\libbz2.dll"
|
||||||
|
Delete "$INSTDIR\libcdio-16.dll"
|
||||||
|
Delete "$INSTDIR\libchromaprint.dll"
|
||||||
|
Delete "$INSTDIR\libcrypto-1_1.dll"
|
||||||
|
Delete "$INSTDIR\libfaad-2.dll"
|
||||||
|
Delete "$INSTDIR\libffi-6.dll"
|
||||||
|
Delete "$INSTDIR\libFLAC-8.dll"
|
||||||
|
Delete "$INSTDIR\libfreetype-6.dll"
|
||||||
|
Delete "$INSTDIR\libgcc_s_sjlj-1.dll"
|
||||||
|
Delete "$INSTDIR\libgio-2.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libglib-2.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgmodule-2.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgobject-2.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstapp-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstaudio-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstbase-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstfft-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstpbutils-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstreamer-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstriff-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstrtp-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstrtsp-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstsdp-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgsttag-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libgstvideo-1.0-0.dll"
|
||||||
|
Delete "$INSTDIR\libharfbuzz-0.dll"
|
||||||
|
Delete "$INSTDIR\libiconv-2.dll"
|
||||||
|
Delete "$INSTDIR\libintl-8.dll"
|
||||||
|
Delete "$INSTDIR\libjpeg-9.dll"
|
||||||
|
Delete "$INSTDIR\liblastfm5.dll"
|
||||||
|
Delete "$INSTDIR\libmp3lame-0.dll"
|
||||||
|
Delete "$INSTDIR\libogg-0.dll"
|
||||||
|
Delete "$INSTDIR\libopus-0.dll"
|
||||||
|
Delete "$INSTDIR\libpcre-1.dll"
|
||||||
|
Delete "$INSTDIR\libpcre2-16-0.dll"
|
||||||
|
Delete "$INSTDIR\libpng16-16.dll"
|
||||||
|
Delete "$INSTDIR\libprotobuf-15.dll"
|
||||||
|
Delete "$INSTDIR\libspeex-1.dll"
|
||||||
|
Delete "$INSTDIR\libsqlite3-0.dll"
|
||||||
|
Delete "$INSTDIR\libssl-1_1.dll"
|
||||||
|
Delete "$INSTDIR\libstdc++-6.dll"
|
||||||
|
Delete "$INSTDIR\libtag.dll"
|
||||||
|
Delete "$INSTDIR\libvorbis-0.dll"
|
||||||
|
Delete "$INSTDIR\libvorbisenc-2.dll"
|
||||||
|
Delete "$INSTDIR\libwavpack-1.dll"
|
||||||
|
Delete "$INSTDIR\libwinpthread-1.dll"
|
||||||
|
Delete "$INSTDIR\Qt5Concurrent.dll"
|
||||||
|
Delete "$INSTDIR\Qt5Core.dll"
|
||||||
|
Delete "$INSTDIR\Qt5Gui.dll"
|
||||||
|
Delete "$INSTDIR\Qt5Network.dll"
|
||||||
|
Delete "$INSTDIR\Qt5Sql.dll"
|
||||||
|
Delete "$INSTDIR\Qt5Widgets.dll"
|
||||||
|
Delete "$INSTDIR\Qt5Xml.dll"
|
||||||
|
Delete "$INSTDIR\zlib1.dll"
|
||||||
|
Delete "$INSTDIR\libxine-2.dll"
|
||||||
|
Delete "$INSTDIR\libmpcdec-5.dll"
|
||||||
|
Delete "$INSTDIR\libtheora-0.dll"
|
||||||
|
Delete "$INSTDIR\libfftw3-3.dll"
|
||||||
|
|
||||||
|
Delete "$INSTDIR\platforms\qwindows.dll"
|
||||||
|
Delete "$INSTDIR\sqldrivers\qsqlite.dll"
|
||||||
|
|
||||||
|
Delete "$INSTDIR\imageformats\qgif.dll"
|
||||||
|
Delete "$INSTDIR\imageformats\qico.dll"
|
||||||
|
Delete "$INSTDIR\imageformats\qjpeg.dll"
|
||||||
|
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstapetag.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstapp.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstasf.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstaiff.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstaudioconvert.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstaudiofx.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstaudioparsers.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstaudioresample.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstaudiotestsrc.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstautodetect.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstcoreelements.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstdirectsound.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstequalizer.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstfaad.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstflac.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstgio.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgsticydemux.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstid3demux.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstisomp4.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstlame.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstogg.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstopusparse.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstplayback.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstreplaygain.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstspectrum.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstspeex.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgsttaglib.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgsttypefindfunctions.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstvolume.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstvorbis.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstwavpack.dll"
|
||||||
|
Delete "$INSTDIR\gstreamer-plugins\libgstwavparse.dll"
|
||||||
|
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_ao_out_directx2.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_ao_out_directx.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_decode_dts.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_decode_dvaudio.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_decode_faad.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_decode_gsm610.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_decode_lpcm.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_decode_mad.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_decode_mpc.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_decode_mpeg2.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_dmx_asf.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_dmx_audio.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_dmx_playlist.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_dmx_slave.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_flac.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_wavpack.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\xineplug_xiph.dll"
|
||||||
|
|
||||||
|
Delete "$INSTDIR\xine-plugins\post\xineplug_post_audio_filters.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\post\xineplug_post_goom.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\post\xineplug_post_mosaico.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\post\xineplug_post_planar.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\post\xineplug_post_switch.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\post\xineplug_post_tvtime.dll"
|
||||||
|
Delete "$INSTDIR\xine-plugins\post\xineplug_post_visualizations.dll"
|
||||||
|
|
||||||
|
Delete "$INSTDIR\Uninstall.exe"
|
||||||
|
|
||||||
|
; Remove the installation folders.
|
||||||
|
RMDir "$INSTDIR\platforms"
|
||||||
|
RMDir "$INSTDIR\sqldrivers"
|
||||||
|
RMDir "$INSTDIR\imageformats"
|
||||||
|
RMDir "$INSTDIR\gstreamer-plugins"
|
||||||
|
RMDir "$INSTDIR\xine-plugins\post"
|
||||||
|
RMDir "$INSTDIR\xine-plugins"
|
||||||
|
RMDir "$INSTDIR"
|
||||||
|
|
||||||
|
; Remove the Shortcuts
|
||||||
|
SetShellVarContext all
|
||||||
|
|
||||||
|
Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
|
||||||
|
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
|
||||||
|
RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
|
||||||
|
|
||||||
|
; Remove the entry from 'installed programs list'
|
||||||
|
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
|
||||||
|
|
||||||
|
; Unregister from Default Programs
|
||||||
|
${UnRegisterCapabilities}
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
6
dist/windows/windres.rc.in
vendored
6
dist/windows/windres.rc.in
vendored
@@ -1,7 +1,7 @@
|
|||||||
strawberry ICON "${CMAKE_CURRENT_SOURCE_DIR}/../dist/windows/strawberry.ico"
|
strawberry ICON "${CMAKE_CURRENT_SOURCE_DIR}/../dist/windows/strawberry.ico"
|
||||||
1 VERSIONINFO
|
1 VERSIONINFO
|
||||||
FILEVERSION ${STRAWBERRY_VERSION_MAJOR},${STRAWBERRY_VERSION_MINOR},0,0
|
FILEVERSION ${STRAWBERRY_VERSION_MAJOR},${STRAWBERRY_VERSION_MINOR},{STRAWBERRY_VERSION_PATCH},0
|
||||||
PRODUCTVERSION ${STRAWBERRY_VERSION_MAJOR},${STRAWBERRY_VERSION_MINOR},0,0
|
PRODUCTVERSION ${STRAWBERRY_VERSION_MAJOR},${STRAWBERRY_VERSION_MINOR},{STRAWBERRY_VERSION_PATCH},0
|
||||||
BEGIN
|
BEGIN
|
||||||
BLOCK "StringFileInfo"
|
BLOCK "StringFileInfo"
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -11,7 +11,7 @@ BEGIN
|
|||||||
VALUE "FileDescription", "Strawberry Music Player"
|
VALUE "FileDescription", "Strawberry Music Player"
|
||||||
VALUE "FileVersion", "${STRAWBERRY_VERSION_DISPLAY}"
|
VALUE "FileVersion", "${STRAWBERRY_VERSION_DISPLAY}"
|
||||||
VALUE "InternalName", "strawberry"
|
VALUE "InternalName", "strawberry"
|
||||||
VALUE "LegalCopyright", "David Sansome"
|
VALUE "LegalCopyright", "David Sansome / Jonas Kvinge"
|
||||||
VALUE "OriginalFilename", "strawberry.exe"
|
VALUE "OriginalFilename", "strawberry.exe"
|
||||||
VALUE "ProductName", "Strawberry"
|
VALUE "ProductName", "Strawberry"
|
||||||
VALUE "ProductVersion", "${STRAWBERRY_VERSION_DISPLAY}"
|
VALUE "ProductVersion", "${STRAWBERRY_VERSION_DISPLAY}"
|
||||||
|
|||||||
@@ -45,9 +45,5 @@ if(APPLE)
|
|||||||
)
|
)
|
||||||
endif(APPLE)
|
endif(APPLE)
|
||||||
|
|
||||||
if(NOT APPLE)
|
|
||||||
# macdeploy.py takes care of this on mac
|
install(TARGETS strawberry-tagreader RUNTIME DESTINATION bin)
|
||||||
install(TARGETS strawberry-tagreader
|
|
||||||
RUNTIME DESTINATION bin
|
|
||||||
)
|
|
||||||
endif(NOT APPLE)
|
|
||||||
|
|||||||
@@ -179,7 +179,6 @@ set(SOURCES
|
|||||||
covermanager/albumcovermanager.cpp
|
covermanager/albumcovermanager.cpp
|
||||||
covermanager/albumcovermanagerlist.cpp
|
covermanager/albumcovermanagerlist.cpp
|
||||||
covermanager/albumcoverloader.cpp
|
covermanager/albumcoverloader.cpp
|
||||||
covermanager/albumcoverloaderoptions.cpp
|
|
||||||
covermanager/albumcoverfetcher.cpp
|
covermanager/albumcoverfetcher.cpp
|
||||||
covermanager/albumcoverfetchersearch.cpp
|
covermanager/albumcoverfetchersearch.cpp
|
||||||
covermanager/albumcoversearcher.cpp
|
covermanager/albumcoversearcher.cpp
|
||||||
@@ -790,12 +789,8 @@ optional_source(APPLE
|
|||||||
globalshortcuts/globalshortcutgrabber.mm
|
globalshortcuts/globalshortcutgrabber.mm
|
||||||
globalshortcuts/macglobalshortcutbackend.mm
|
globalshortcuts/macglobalshortcutbackend.mm
|
||||||
HEADERS
|
HEADERS
|
||||||
core/mac_startup.h
|
|
||||||
core/macsystemtrayicon.h
|
core/macsystemtrayicon.h
|
||||||
core/macscreensaver.h
|
|
||||||
core/macfslistener.h
|
core/macfslistener.h
|
||||||
core/mac_utilities.h
|
|
||||||
core/mac_delegate.h
|
|
||||||
globalshortcuts/macglobalshortcutbackend.h
|
globalshortcuts/macglobalshortcutbackend.h
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -916,6 +911,7 @@ if (APPLE)
|
|||||||
"-framework IOKit"
|
"-framework IOKit"
|
||||||
"-framework ScriptingBridge"
|
"-framework ScriptingBridge"
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(strawberry_lib ${SPMEDIAKEYTAP_LIBRARIES})
|
target_link_libraries(strawberry_lib ${SPMEDIAKEYTAP_LIBRARIES})
|
||||||
if (HAVE_SPARKLE)
|
if (HAVE_SPARKLE)
|
||||||
include_directories(${SPARKLE}/Headers)
|
include_directories(${SPARKLE}/Headers)
|
||||||
@@ -982,55 +978,10 @@ target_link_libraries(strawberry
|
|||||||
# macdeploy.py relies on the blob being built first.
|
# macdeploy.py relies on the blob being built first.
|
||||||
add_dependencies(strawberry strawberry-tagreader)
|
add_dependencies(strawberry strawberry-tagreader)
|
||||||
|
|
||||||
#set_target_properties(strawberry PROPERTIES
|
if (NOT APPLE)
|
||||||
#MACOSX_BUNDLE_INFO_PLIST "../dist/macos/Info.plist"
|
install(TARGETS strawberry RUNTIME DESTINATION bin)
|
||||||
#)
|
endif()
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
install(FILES ../dist/macos/strawberry.icns DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Resources")
|
set_target_properties(strawberry PROPERTIES MACOSX_BUNDLE_INFO_PLIST "../dist/macos/Info.plist")
|
||||||
install(FILES ../dist/macos/qt.conf DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Resources")
|
|
||||||
install(FILES ../dist/macos/sparkle_pub.pem DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Resources")
|
|
||||||
|
|
||||||
install(DIRECTORY "${QT_QTGUI_LIBRARY_RELEASE}/Versions/Current/Resources/" DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Resources")
|
|
||||||
|
|
||||||
if (HAVE_SPARKLE)
|
|
||||||
install(DIRECTORY "${SPARKLE}/Versions/Current/Resources" DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Frameworks/Sparkle.framework")
|
|
||||||
endif (HAVE_SPARKLE)
|
|
||||||
|
|
||||||
install(FILES "${QT_QTCORE_LIBRARY_RELEASE}/Contents/Info.plist" DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Frameworks/QtCore.framework/Versions/4/Resources")
|
|
||||||
install(FILES "${QT_QTGUI_LIBRARY_RELEASE}/Contents/Info.plist" DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Frameworks/QtGui.framework/Versions/4/Resources")
|
|
||||||
install(FILES "${QT_QTNETWORK_LIBRARY_RELEASE}/Contents/Info.plist" DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Frameworks/QtNetwork.framework/Versions/4/Resources")
|
|
||||||
install(FILES "${QT_QTOPENGL_LIBRARY_RELEASE}/Contents/Info.plist" DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Frameworks/QtOpenGL.framework/Versions/4/Resources")
|
|
||||||
install(FILES "${QT_QTSQL_LIBRARY_RELEASE}/Contents/Info.plist" DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Frameworks/QtSql.framework/Versions/4/Resources")
|
|
||||||
install(FILES "${QT_QTSVG_LIBRARY_RELEASE}/Contents/Info.plist" DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Frameworks/QtSvg.framework/Versions/4/Resources")
|
|
||||||
install(FILES "${QT_QTXML_LIBRARY_RELEASE}/Contents/Info.plist" DESTINATION "${CMAKE_BINARY_DIR}/strawberry.app/Contents/Frameworks/QtXml.framework/Versions/4/Resources")
|
|
||||||
|
|
||||||
#add_custom_command(TARGET strawberry
|
|
||||||
# POST_BUILD
|
|
||||||
# COMMAND
|
|
||||||
# ${CMAKE_CURRENT_SOURCE_DIR}/../dist/macos/macdeploy.py ${PROJECT_BINARY_DIR}/strawberry.app -f
|
|
||||||
# WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
||||||
#)
|
|
||||||
|
|
||||||
#if (APPLE_DEVELOPER_ID)
|
|
||||||
# add_custom_target(
|
|
||||||
# sign
|
|
||||||
# COMMAND
|
|
||||||
# ${PROJECT_SOURCE_DIR}/dist/macos/codesign.py ${APPLE_DEVELOPER_ID} ${PROJECT_BINARY_DIR}/strawberry.app
|
|
||||||
# DEPENDS strawberry
|
|
||||||
# VERBATIM
|
|
||||||
# )
|
|
||||||
#endif()
|
|
||||||
|
|
||||||
#add_custom_command(
|
|
||||||
# OUTPUT ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_PACKAGE}.dmg ${CMAKE_COMMAND} -E remove -f ${PROJECT_BINARY_DIR}/strawberry-$#{STRAWBERRY_VERSION_PACKAGE}.dmg
|
|
||||||
# COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../dist/macos/create-dmg.sh ${PROJECT_BINARY_DIR}/strawberry.app
|
|
||||||
# COMMAND ${CMAKE_COMMAND} -E rename ${PROJECT_BINARY_DIR}/strawberry.dmg ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_PACKAGE}.dmg
|
|
||||||
# DEPENDS strawberry
|
|
||||||
# WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
||||||
#)
|
|
||||||
#add_custom_target(dmg
|
|
||||||
# DEPENDS ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_PACKAGE}.dmg)
|
|
||||||
else (APPLE)
|
|
||||||
install(TARGETS strawberry RUNTIME DESTINATION bin )
|
|
||||||
endif (APPLE)
|
endif (APPLE)
|
||||||
|
|||||||
@@ -22,29 +22,14 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
|
#include <QtGlobal>
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include <QtGlobal>
|
|
||||||
#include <QObject>
|
|
||||||
#include <QCoreApplication>
|
|
||||||
#include <QStandardPaths>
|
|
||||||
#include <QFileDevice>
|
|
||||||
#include <QIODevice>
|
|
||||||
#include <QByteArray>
|
|
||||||
#include <QNetworkProxy>
|
|
||||||
#include <QFile>
|
|
||||||
#include <QString>
|
|
||||||
#include <QImage>
|
|
||||||
#include <QSettings>
|
|
||||||
#include <QtDebug>
|
|
||||||
#ifdef HAVE_DBUS
|
|
||||||
# include <QDBusArgument>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Q_OS_UNIX
|
#ifdef Q_OS_UNIX
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -62,6 +47,22 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#endif // Q_OS_WIN32
|
#endif // Q_OS_WIN32
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QStandardPaths>
|
||||||
|
#include <QFileDevice>
|
||||||
|
#include <QIODevice>
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <QNetworkProxy>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QString>
|
||||||
|
#include <QImage>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QtDebug>
|
||||||
|
#ifdef HAVE_DBUS
|
||||||
|
# include <QDBusArgument>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include "core/logging.h"
|
#include "core/logging.h"
|
||||||
@@ -161,7 +162,7 @@ int main(int argc, char* argv[]) {
|
|||||||
QtSingleApplication a(argc, argv);
|
QtSingleApplication a(argc, argv);
|
||||||
|
|
||||||
#ifdef Q_OS_MACOS
|
#ifdef Q_OS_MACOS
|
||||||
QCoreApplication::setLibraryPaths(QStringList() << QCoreApplication::applicationDirPath() + "/../PlugIns");
|
//QCoreApplication::setLibraryPaths(QStringList() << QCoreApplication::applicationDirPath() + "/../PlugIns");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
a.setQuitOnLastWindowClosed(false);
|
a.setQuitOnLastWindowClosed(false);
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
#include "albumcoverloaderoptions.h"
|
|
||||||
@@ -398,7 +398,6 @@ bool GstEngine::ValidOutput(const QString &output) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool GstEngine::CustomDeviceSupport(const QString &output) {
|
bool GstEngine::CustomDeviceSupport(const QString &output) {
|
||||||
return (output == kALSASink || output == kOpenALSASink || output == kOSSSink || output == kOSS4Sink || output == kPulseSink || output == kA2DPSink || output == kAVDTPSink);
|
return (output == kALSASink || output == kOpenALSASink || output == kOSSSink || output == kOSS4Sink || output == kPulseSink || output == kA2DPSink || output == kAVDTPSink);
|
||||||
}
|
}
|
||||||
@@ -429,9 +428,12 @@ void GstEngine::SetEnvironment() {
|
|||||||
|
|
||||||
// On windows and mac we bundle the gstreamer plugins with strawberry
|
// On windows and mac we bundle the gstreamer plugins with strawberry
|
||||||
#if defined(Q_OS_MACOS)
|
#if defined(Q_OS_MACOS)
|
||||||
scanner_path = QCoreApplication::applicationDirPath() + "/../PlugIns/gst-plugin-scanner";
|
//scanner_path = QCoreApplication::applicationDirPath() + "/../PlugIns/gst-plugin-scanner";
|
||||||
plugin_path = QCoreApplication::applicationDirPath() + "/../PlugIns/gstreamer";
|
//plugin_path = QCoreApplication::applicationDirPath() + "/../PlugIns/gstreamer";
|
||||||
#elif defined(Q_OS_WIN32)
|
scanner_path = "/usr/local/Cellar/gstreamer/1.14.1/libexec/gstreamer-1.0/gst-plugin-scanner";
|
||||||
|
plugin_path = "/usr/local/lib/gstreamer-1.0";
|
||||||
|
#endif
|
||||||
|
#if defined(Q_OS_WIN32)
|
||||||
plugin_path = QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + "/gstreamer-plugins");
|
plugin_path = QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + "/gstreamer-plugins");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -451,9 +453,9 @@ void GstEngine::SetEnvironment() {
|
|||||||
Utilities::SetEnv("GST_REGISTRY", registry_filename);
|
Utilities::SetEnv("GST_REGISTRY", registry_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_OS_MACOS
|
//#ifdef Q_OS_MACOS
|
||||||
Utilities::SetEnv("GIO_EXTRA_MODULES", QCoreApplication::applicationDirPath() + "/../PlugIns/gio-modules");
|
//Utilities::SetEnv("GIO_EXTRA_MODULES", QCoreApplication::applicationDirPath() + "/../PlugIns/gio-modules");
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
Utilities::SetEnv("PULSE_PROP_media.role", "music");
|
Utilities::SetEnv("PULSE_PROP_media.role", "music");
|
||||||
|
|
||||||
|
|||||||
@@ -206,17 +206,19 @@ bool GstEnginePipeline::InitAudioBin() {
|
|||||||
|
|
||||||
if (device_.isValid() && g_object_class_find_property(G_OBJECT_GET_CLASS(audiosink_), "device")) {
|
if (device_.isValid() && g_object_class_find_property(G_OBJECT_GET_CLASS(audiosink_), "device")) {
|
||||||
switch (device_.type()) {
|
switch (device_.type()) {
|
||||||
case QVariant::Int:
|
|
||||||
g_object_set(G_OBJECT(audiosink_), "device", device_.toInt(), nullptr);
|
|
||||||
break;
|
|
||||||
case QVariant::String:
|
case QVariant::String:
|
||||||
if (device_.toString().isEmpty()) break;
|
if (device_.toString().isEmpty()) break;
|
||||||
g_object_set(G_OBJECT(audiosink_), "device", device_.toString().toUtf8().constData(), nullptr);
|
g_object_set(G_OBJECT(audiosink_), "device", device_.toString().toUtf8().constData(), nullptr);
|
||||||
break;
|
break;
|
||||||
case QVariant::ByteArray: {
|
case QVariant::ByteArray:
|
||||||
g_object_set(G_OBJECT(audiosink_), "device", device_.toByteArray().constData(), nullptr);
|
g_object_set(G_OBJECT(audiosink_), "device", device_.toByteArray().constData(), nullptr);
|
||||||
break;
|
break;
|
||||||
}
|
case QVariant::LongLong:
|
||||||
|
g_object_set(G_OBJECT(audiosink_), "device", device_.toLongLong(), nullptr);
|
||||||
|
break;
|
||||||
|
case QVariant::Int:
|
||||||
|
g_object_set(G_OBJECT(audiosink_), "device", device_.toInt(), nullptr);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
qLog(Warning) << "Unknown device type" << device_;
|
qLog(Warning) << "Unknown device type" << device_;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -102,11 +102,13 @@ QList<DeviceFinder::Device> OsxDeviceFinder::ListDevices() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Device dev;
|
Device dev;
|
||||||
dev.description = QString::fromUtf8(CFStringGetCStringPtr(*device_name, CFStringGetSystemEncoding()));
|
|
||||||
dev.value = id;
|
dev.value = id;
|
||||||
|
dev.description = QString::fromUtf8(CFStringGetCStringPtr(*device_name, CFStringGetSystemEncoding()));
|
||||||
|
if (dev.description.isEmpty()) dev.description = QString("Unknown device " + dev.value.toString());
|
||||||
dev.iconname = GuessIconName(dev.description);
|
dev.iconname = GuessIconName(dev.description);
|
||||||
ret.append(dev);
|
ret.append(dev);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user