diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e933c69b..619344045 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,19 @@ OPTION(WANT_VST "Include VST support" ON) OPTION(WANT_VST_NOWINE "Include partial VST support (without wine)" OFF) OPTION(WANT_WINMM "Include WinMM MIDI support" OFF) + +IF(LMMS_BUILD_APPLE) + SET(WANT_ALSA OFF) + SET(WANT_PULSEAUDIO OFF) + SET(WANT_SWH OFF) + SET(WANT_VST OFF) + SET(STATUS_ALSA "") + SET(STATUS_PULSEAUDIO "") + # MacPorts: /opt/local/lib + LINK_DIRECTORIES(${LINK_DIRECTORIES} /opt/local/lib) +ENDIF(LMMS_BUILD_APPLE) + + IF(LMMS_BUILD_WIN32) SET(WANT_ALSA OFF) SET(WANT_JACK OFF) @@ -307,7 +320,11 @@ CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/lmms.rc.in" "${CMAKE_BINARY_DIR}/lmms.rc") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/plugins/zynaddsubfx/zynaddsubfx.rc.in" "${CMAKE_BINARY_DIR}/plugins/zynaddsubfx/zynaddsubfx.rc") # set compiler flags -SET(WERROR_FLAGS "-Wall -Werror -Werror=unused-function -Wno-sign-compare -Wno-strict-overflow") +SET(WERROR_FLAGS "-Wall -Werror=unused-function -Wno-sign-compare -Wno-strict-overflow") +IF(NOT LMMS_BUILD_APPLE) + SET(WERROR_FLAGS "${WERROR_FLAGS} -Werror") +ENDIF() + SET(CMAKE_C_FLAGS "-O2 -g ${WERROR_FLAGS} ${CMAKE_C_FLAGS}") SET(CMAKE_CXX_FLAGS "-O2 -g -fno-exceptions ${WERROR_FLAGS} ${CMAKE_CXX_FLAGS}") set(CMAKE_C_FLAGS_DEBUG "-DLMMS_DEBUG") diff --git a/data/dmg_branding.png b/data/dmg_branding.png new file mode 100644 index 000000000..aa76cdc62 Binary files /dev/null and b/data/dmg_branding.png differ diff --git a/data/lmms.icns b/data/lmms.icns new file mode 100644 index 000000000..e54187b5c Binary files /dev/null and b/data/lmms.icns differ diff --git a/data/scripts/create_apple_dmg.sh b/data/scripts/create_apple_dmg.sh new file mode 100755 index 000000000..be50c2b81 --- /dev/null +++ b/data/scripts/create_apple_dmg.sh @@ -0,0 +1,139 @@ +#!/bin/bash + +# by Andy Maloney +# http://asmaloney.com/2013/07/howto/packaging-a-mac-os-x-application-using-a-dmg/ + +# make sure we are in the correct dir when we double-click a .command file +dir=${0%/*} +if [ -d "$dir" ]; then + cd "$dir" +fi + +# set up your app name, version number, and background image file name +APP_NAME="LMMS" +VERSION="1.0.0" +DMG_BACKGROUND_IMG="dmg_branding.png" +cp $HOME/lmms/data/$DMG_BACKGROUND_IMG . + +# you should not need to change these +APP_LOWERCASE=$(echo $APP_NAME|tr '[:upper:]' '[:lower:]') +APP_EXE="${APP_NAME}.app/Contents/MacOS/${APP_LOWERCASE}" + +VOL_NAME="${APP_NAME} ${VERSION}" # volume name will be "SuperCoolApp 1.0.0" +DMG_TMP="${VOL_NAME}-temp.dmg" +DMG_FINAL="${VOL_NAME}.dmg" # final DMG name will be "SuperCoolApp 1.0.0.dmg" +STAGING_DIR="./Install" # we copy all our stuff into this dir + +# Check the background image DPI and convert it if it isn't 72x72 +_BACKGROUND_IMAGE_DPI_H=`sips -g dpiHeight ${DMG_BACKGROUND_IMG} | grep -Eo '[0-9]+\.[0-9]+'` +_BACKGROUND_IMAGE_DPI_W=`sips -g dpiWidth ${DMG_BACKGROUND_IMG} | grep -Eo '[0-9]+\.[0-9]+'` + +if [ $(echo " $_BACKGROUND_IMAGE_DPI_H != 72.0 " | bc) -eq 1 -o $(echo " $_BACKGROUND_IMAGE_DPI_W != 72.0 " | bc) -eq 1 ]; then + echo "WARNING: The background image's DPI is not 72. This will result in distorted backgrounds on Mac OS X 10.7+." + echo " I will convert it to 72 DPI for you." + + _DMG_BACKGROUND_TMP="${DMG_BACKGROUND_IMG%.*}"_dpifix."${DMG_BACKGROUND_IMG##*.}" + + sips -s dpiWidth 72 -s dpiHeight 72 ${DMG_BACKGROUND_IMG} --out ${_DMG_BACKGROUND_TMP} + + DMG_BACKGROUND_IMG="${_DMG_BACKGROUND_TMP}" +fi + +# clear out any old data +rm -rf "${STAGING_DIR}" "${DMG_TMP}" "${DMG_FINAL}" + +# copy over the stuff we want in the final disk image to our staging dir +mkdir -p "${STAGING_DIR}" +cp -rpf "${APP_NAME}.app" "${STAGING_DIR}" +# ... cp anything else you want in the DMG - documentation, etc. + +pushd "${STAGING_DIR}" + +# strip the executable +echo "Stripping ${APP_EXE}..." +strip -u -r "${APP_EXE}" + +# compress the executable if we have upx in PATH +# UPX: http://upx.sourceforge.net/ +if hash upx 2>/dev/null; then + echo "Compressing (UPX) ${APP_EXE}..." + upx -9 "${APP_EXE}" +fi + +# ... perform any other stripping/compressing of libs and executables + +popd + +# figure out how big our DMG needs to be +# assumes our contents are at least 1M! +SIZE=`du -sh "${STAGING_DIR}" | sed 's/\([0-9\.]*\)M\(.*\)/\1/'` +SIZE=`echo "${SIZE} + 5.0" | bc | awk '{print int($1+0.5)}'` + +if [ $? -ne 0 ]; then + echo "Error: Cannot compute size of staging dir" + exit +fi + +# create the temp DMG file +hdiutil create -srcfolder "${STAGING_DIR}" -volname "${VOL_NAME}" -fs HFS+ \ + -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${SIZE}M "${DMG_TMP}" + +echo "Created DMG: ${DMG_TMP}" + +# mount it and save the device +DEVICE=$(hdiutil attach -readwrite -noverify "${DMG_TMP}" | \ + egrep '^/dev/' | sed 1q | awk '{print $1}') + +sleep 2 + +# add a link to the Applications dir +echo "Add link to /Applications" +pushd /Volumes/"${VOL_NAME}" +ln -s /Applications +popd + +# add a background image +mkdir /Volumes/"${VOL_NAME}"/.background +cp "${DMG_BACKGROUND_IMG}" /Volumes/"${VOL_NAME}"/.background/ + +# tell the Finder to resize the window, set the background, +# change the icon size, place the icons in the right position, etc. +echo ' + tell application "Finder" + tell disk "'${VOL_NAME}'" + open + set current view of container window to icon view + set toolbar visible of container window to false + set statusbar visible of container window to false + set the bounds of container window to {400, 100, 920, 440} + set viewOptions to the icon view options of container window + set arrangement of viewOptions to not arranged + set icon size of viewOptions to 72 + set background picture of viewOptions to file ".background:'${DMG_BACKGROUND_IMG}'" + set position of item "'${APP_NAME}'.app" of container window to {160, 205} + set position of item "Applications" of container window to {360, 205} + close + open + update without registering applications + delay 2 + end tell + end tell +' | osascript + +sync + +# unmount it +hdiutil detach "${DEVICE}" + +# now make the final image a compressed disk image +echo "Creating compressed image" +hdiutil convert "${DMG_TMP}" -format UDZO -imagekey zlib-level=9 -o "${DMG_FINAL}" + +# clean up +rm -rf "${DMG_TMP}" +rm -rf "${STAGING_DIR}" +rm -rf "${DMG_BACKGROUND_IMG}" + +echo 'Done.' + +exit diff --git a/data/scripts/create_apple_installer.sh b/data/scripts/create_apple_installer.sh new file mode 100755 index 000000000..70f1c151c --- /dev/null +++ b/data/scripts/create_apple_installer.sh @@ -0,0 +1,124 @@ +#!/bin/bash +#title :create_applet_installer.sh +#description :Creates Apple ".app" bundle for LMMS +#author :Tres Finocchiaro +#date :20140331 +#version :1.0 +#usage :bash create_applet_installer.sh +#notes :See also https://github.com/LMMS +#notes :Troubleshooting try: export DYLD_PRINT_LIBRARIES=1 +#requires :deploymacqt +#========================================================================================= + +# MacPorts Location +MACPORTS=/opt/local + + # LMMS source directory +CMAKE_SRC=$HOME/lmms + +# LMMS compiled resources +CMAKE_INSTALL=$CMAKE_SRC/target + +# LMMS source build directory +CMAKE_BUILD=$CMAKE_SRC/build + + + +# Place to create ".app" bundle +APP=$HOME/Desktop/LMMS.app + +# MacPorts installs libreadline with wrong permissions +LIBREADLINE=$MACPORTS/lib/libreadline.6.2.dylib + +#========================================================================================= + +echo -e "\n\nRunning..." + +# Check for u+w permissions on libreadline +_perm=`stat -f "%p" $LIBREADLINE` +_perm=${_perm:3:1} +if [ ${_perm} != "7" ] +then + echo -e "\n\n\t\t\t\t***********\n\t\t\t\t* WARNING *\n\t\t\t\t***********" + echo -e "File $LIBREADLINE is not marked as user writable." + echo -e "This will break macdeployqt's linking process after it is copied." + echo -e "A sudo password is required to elevate and fix using chmod u+w." + echo -e "\nPLEASE ENTER SUDO PASSWORD:" + sudo chmod u+w $MACPORTS/lib/libreadline.6.2.dylib +fi + +# Remove any old .app bundles +rm -Rf $APP + +# Create new bundle, copy our built code to it +mkdir -p $APP +cd $CMAKE_INSTALL +mkdir $APP/Contents +cp -R * $APP/Contents + +# Make all libraries writable for macdeployqt +cd $APP +find . -type f -print0 | xargs -0 chmod u+w + +# Move lmms binary to the proper location +mkdir -p $APP/Contents/MacOS +mv $APP/Contents/bin/lmms $APP/Contents/MacOS +rmdir $APP/Contents/bin + +# Move libraries to proper locations +mkdir -p $APP/Contents/Frameworks +mv $APP/Contents/lib/lmms/libZynAddSubFxCore.dylib \ + $APP/Contents/Frameworks/libZynAddSubFxCore.dylib + +mv $APP/Contents/lib/lmms/RemoteZynAddSubFx \ + $APP/Contents/MacOS/RemoteZynAddSubFx + +# Fix more Zyn Linking issues +# install_name_tool -change $CMAKE_INSTALL/lib/lmms/libZynAddSubFxCore.dylib \ +# @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ +# $APP/Contents/lib/lmms/libzynaddsubfx.so + +install_name_tool -change libZynAddSubFxCore.dylib \ + @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ + $APP/Contents/lib/lmms/libzynaddsubfx.so + +install_name_tool -change $CMAKE_BUILD/plugins/zynaddsubfx/libZynAddSubFxCore.dylib \ + @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ + $APP/Contents/MacOS/RemoteZynAddSubFx + +# Build a list of shared objects in target/lib/lmms +for file in $APP/Contents/lib/lmms/*.so; do + _executables="$_executables -executable=$APP/Contents/lib/lmms/${file##*/}" +done + +# Build a list of shared objects in target/lib/lmms/ladspa +for file in $APP/Contents/lib/lmms/ladspa/*.so; do + _executables="$_executables -executable=$APP/Contents/lib/lmms/ladspa/${file##*/}" +done + +# Additional binaries that require linking +_executables="$_executables -executable=$APP/Contents/MacOS/RemoteZynAddSubFx" +_executables="$_executables -executable=$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" + +# Build our App Package using "macdeployqt" +macdeployqt $APP $_executables + +# OS X Specific Artwork +cp $CMAKE_SRC/data/lmms.icns $APP/Contents/Resources/ + +# Create "Info.plist" using lmms.icns file, http://iconverticons.com/online/) +echo -e "" > "$APP/Contents/Info.plist" +echo -e "> "$APP/Contents/Info.plist" +echo -e "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " CFBundleIconFile" >> "$APP/Contents/Info.plist" +echo -e " lmms.icns" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e "" >> "$APP/Contents/Info.plist" + +# Done. Ready to build DMG +echo -e "\nFinished.\n\nPlease run \"create_apple_dmg.sh\" from the Desktop to build the installer.\n" +echo -e "Note: You can drag/drop it into this terminal window.)\n" +cp $CMAKE_SRC/data/scripts/create_apple_dmg.sh $HOME/Desktop/ +chmod +x $HOME/Desktop/create_apple_dmg.sh diff --git a/data/themes/default/style.css b/data/themes/default/style.css index 63f007fe1..3d6fd84a2 100644 --- a/data/themes/default/style.css +++ b/data/themes/default/style.css @@ -1,6 +1,9 @@ /******************** * LMMS style sheet * ********************/ +QLabel { + color: #e0e0e0; +} QWhatsThat { color: black; diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 59aadfbe3..1835f813f 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -12,8 +12,10 @@ ADD_SUBDIRECTORY(LadspaEffect) ADD_SUBDIRECTORY(lb302) #ADD_SUBDIRECTORY(lb303) ADD_SUBDIRECTORY(midi_import) +IF(NOT LMMS_BUILD_APPLE) + ADD_SUBDIRECTORY(opl2) +ENDIF() ADD_SUBDIRECTORY(organic) -ADD_SUBDIRECTORY(opl2) ADD_SUBDIRECTORY(papu) ADD_SUBDIRECTORY(patman) ADD_SUBDIRECTORY(peak_controller_effect) diff --git a/plugins/dynamics_processor/dynamics_processor.cpp b/plugins/dynamics_processor/dynamics_processor.cpp index e5bea78d8..c9bd7317e 100644 --- a/plugins/dynamics_processor/dynamics_processor.cpp +++ b/plugins/dynamics_processor/dynamics_processor.cpp @@ -28,7 +28,7 @@ #include #include "embed.cpp" -#ifdef LMMS_BUILD_WIN32 +#if defined (LMMS_BUILD_WIN32) || defined (LMMS_BUILD_APPLE) #ifndef isnanf #define isnanf(x) isnan(x) #endif diff --git a/plugins/zynaddsubfx/ZynAddSubFx.cpp b/plugins/zynaddsubfx/ZynAddSubFx.cpp index 74512a83e..8eca9fdae 100644 --- a/plugins/zynaddsubfx/ZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/ZynAddSubFx.cpp @@ -24,7 +24,12 @@ #include "lmmsconfig.h" +#ifndef LMMS_BUILD_APPLE #include +#endif +#ifdef LMMS_BUILD_APPLE +#include +#endif #include #include #include diff --git a/plugins/zynaddsubfx/src/Effects/Alienwah.cpp b/plugins/zynaddsubfx/src/Effects/Alienwah.cpp index 9d13ea8c1..4cfecbdcc 100644 --- a/plugins/zynaddsubfx/src/Effects/Alienwah.cpp +++ b/plugins/zynaddsubfx/src/Effects/Alienwah.cpp @@ -67,7 +67,7 @@ void Alienwah::out(const Stereo &smp) tmp = clfol * x + oldclfol * x1; out = tmp * oldl[oldk]; - out.real() += (1 - fabs(fb)) * smp.l[i] * (1.0 - panning); + out += (1 - fabs(fb)) * smp.l[i] * (1.0 - panning); oldl[oldk] = out; REALTYPE l = out.real() * 10.0 * (fb + 0.1); @@ -76,7 +76,7 @@ void Alienwah::out(const Stereo &smp) tmp = clfor * x + oldclfor * x1; out = tmp * oldr[oldk]; - out.real() += (1 - fabs(fb)) * smp.r[i] * (1.0 - panning); + out += (1 - fabs(fb)) * smp.r[i] * (1.0 - panning); oldr[oldk] = out; REALTYPE r = out.real() * 10.0 * (fb + 0.1);