diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d34af70b..407bf9887 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,6 +96,15 @@ ELSE(LMMS_BUILD_WIN32) ENDIF(LMMS_BUILD_WIN32) +# TODO: Fix linking issues with msys debug builds +IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug") + SET(WANT_GIG OFF) + SET(WANT_STK OFF) + SET(WANT_SWH OFF) + SET(STATUS_GIG "not built as requested") + SET(STATUS_STK "not built as requested") +ENDIF() + CHECK_INCLUDE_FILES(stdint.h LMMS_HAVE_STDINT_H) CHECK_INCLUDE_FILES(stdlib.h LMMS_HAVE_STDLIB_H) diff --git a/cmake/build_mingw32.sh b/cmake/build_mingw32.sh index 6a7094118..455da6fc5 100755 --- a/cmake/build_mingw32.sh +++ b/cmake/build_mingw32.sh @@ -1,13 +1,19 @@ #!/bin/sh -MINGW=/opt/mingw32 +# Accomodate both linux windows mingw locations +MINGW=/mingw32 +if [ -z "$MSYSCON" ]; then + MINGW=/opt$MINGW +else + CMAKE_OPTS="$CMAKE_OPTS -DLMMS_BUILD_MSYS=1" +fi + export PATH=$PATH:$MINGW/bin -#export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5 -fno-tree-vectorize" export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5 -mfpmath=sse" export CXXFLAGS="$CFLAGS" if [ "$1" = "-qt5" ] ; then - CMAKE_OPTS="-DWANT_QT5=ON -DCMAKE_PREFIX_PATH=$MINGW" + CMAKE_OPTS="-DWANT_QT5=ON -DCMAKE_PREFIX_PATH=$MINGW $CMAKE_OPTS" fi cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/modules/Win32Toolchain.cmake -DCMAKE_MODULE_PATH=`pwd`/../cmake/modules/ $CMAKE_OPTS diff --git a/cmake/build_mingw64.sh b/cmake/build_mingw64.sh index a4dccbd69..d5f393d24 100755 --- a/cmake/build_mingw64.sh +++ b/cmake/build_mingw64.sh @@ -1,12 +1,17 @@ #!/bin/sh -MINGW=/opt/mingw64 +# Accomodate both linux windows mingw locations +MINGW=/mingw64 +if [ -z "$MSYSCON" ]; then + MINGW=/opt$MINGW +else + CMAKE_OPTS="$CMAKE_OPTS -DLMMS_BUILD_MSYS=1" +fi + export PATH=$PATH:$MINGW/bin -#export CFLAGS="-fno-tree-vectorize" -export CXXFLAGS="$CFLAGS" if [ "$1" = "-qt5" ] ; then - CMAKE_OPTS="-DWANT_QT5=ON -DCMAKE_PREFIX_PATH=$MINGW" + CMAKE_OPTS="-DWANT_QT5=ON -DCMAKE_PREFIX_PATH=$MINGW $CMAKE_OPTS" fi cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/modules/Win64Toolchain.cmake -DCMAKE_MODULE_PATH=`pwd`/../cmake/modules/ $CMAKE_OPTS diff --git a/cmake/modules/BuildPlugin.cmake b/cmake/modules/BuildPlugin.cmake index 438eebb90..05f1f77ce 100644 --- a/cmake/modules/BuildPlugin.cmake +++ b/cmake/modules/BuildPlugin.cmake @@ -40,6 +40,10 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME) LINK_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) LINK_LIBRARIES(${QT_LIBRARIES}) ENDIF(LMMS_BUILD_WIN32) + IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug") + # Override Qt debug libraries with release versions + SET(QT_LIBRARIES "${QT_OVERRIDE_LIBRARIES}") + ENDIF() ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES} ${plugin_MOC_out}) IF(QT5) diff --git a/cmake/modules/DetectMachine.cmake b/cmake/modules/DetectMachine.cmake index a5dc6f541..f981df051 100644 --- a/cmake/modules/DetectMachine.cmake +++ b/cmake/modules/DetectMachine.cmake @@ -12,6 +12,8 @@ IF(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") SET(LMMS_BUILD_CLANG 1) ENDIF() +# See build_mingwXX.sh for LMMS_BUILD_MSYS + MESSAGE("PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") SET(LMMS_HOST_X86 FALSE) SET(LMMS_HOST_X86_64 FALSE) diff --git a/cmake/modules/MinGWCrossCompile.cmake b/cmake/modules/MinGWCrossCompile.cmake index aa7dc84cc..606b33092 100644 --- a/cmake/modules/MinGWCrossCompile.cmake +++ b/cmake/modules/MinGWCrossCompile.cmake @@ -1,41 +1,99 @@ -# this one is important -SET(CMAKE_SYSTEM_NAME Windows) -#this one not so much -SET(CMAKE_SYSTEM_VERSION 1) +# Required by cmake if `uname -s` is inadaquate +SET(CMAKE_SYSTEM_NAME Windows) +SET(CMAKE_SYSTEM_VERSION 1) -# where is the target environment -SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX}) -SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX}) +# The target environment +SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX}) +SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX}) -SET(MINGW_TOOL_PREFIX ${MINGW_PREFIX}/bin/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-) +# Windows msys mingw ships with a mostly-suitable preconfigured environment +IF(LMMS_BUILD_MSYS) + SET(STRIP ${MINGW_PREFIX}/bin/strip) + SET(WINDRES ${MINGW_PREFIX}/bin/windres) + SET(CMAKE_RC_COMPILER ${WINDRES}) + SET(CMAKE_C_COMPILER ${MINGW_PREFIX}/bin/gcc) + SET(CMAKE_CXX_COMPILER ${MINGW_PREFIX}/bin/g++) -# specify the cross compiler -SET(CMAKE_C_COMPILER ${MINGW_TOOL_PREFIX}gcc) -SET(CMAKE_CXX_COMPILER ${MINGW_TOOL_PREFIX}g++) -SET(CMAKE_RC_COMPILER ${MINGW_TOOL_PREFIX}gcc) + # For 32-bit vst support + IF(WIN64) + # Specify the 32-bit cross compiler + SET(CMAKE_C_COMPILER32 ${MINGW_PREFIX32}/bin/gcc) + SET(CMAKE_CXX_COMPILER32 ${MINGW_PREFIX32}/bin/g++) + ENDIF() + + # Msys compiler does not support @CMakeFiles/Include syntax + SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES OFF) + SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES OFF) -IF(WIN64) -# specify the cross compiler -SET(MINGW_TOOL_PREFIX32 ${MINGW_PREFIX32}/bin/${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32-) -SET(CMAKE_C_COMPILER32 ${MINGW_TOOL_PREFIX32}gcc) -SET(CMAKE_CXX_COMPILER32 ${MINGW_TOOL_PREFIX32}g++) + # Variable to assist override Qt debug libraries with release versions + SET(QT_OVERRIDE_LIBRARIES + optimized;${MINGW_PREFIX}/bin/QtGui4.dll; + optimized;${MINGW_PREFIX}/bin/QtCore4.dll; + optimized;${MINGW_PREFIX}/bin/QtXml4.dll; + debug;${MINGW_PREFIX}/bin/QtGui4.dll; + debug;${MINGW_PREFIX}/bin/QtCore4.dll; + debug;${MINGW_PREFIX}/bin/QtXml4.dll; + ) + IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug") + # Override Qt debug libraries with release versions + SET(QT_LIBRARIES "${QT_OVERRIDE_LIBRARIES}") + ENDIF() +# Linux mingw requires explicitly defined tools to prevent clash with native system tools +ELSE() + SET(MINGW_TOOL_PREFIX ${MINGW_PREFIX}/bin/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-) + + # Specify the cross compiler + SET(CMAKE_C_COMPILER ${MINGW_TOOL_PREFIX}gcc) + SET(CMAKE_CXX_COMPILER ${MINGW_TOOL_PREFIX}g++) + SET(CMAKE_RC_COMPILER ${MINGW_TOOL_PREFIX}gcc) + + # Mingw tools + SET(STRIP ${MINGW_TOOL_PREFIX}strip) + SET(WINDRES ${MINGW_TOOL_PREFIX}windres) + SET(PKG_CONFIG_EXECUTABLE ${MINGW_TOOL_PREFIX}pkg-config) + SET(PKG_CONFIG_FOUND TRUE) + + # Search for programs in the build host directories + SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + # For libraries and headers in the target directories + SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + + # For 32-bit vst support + IF(WIN64) + # Specify the 32-bit cross compiler + SET(MINGW_TOOL_PREFIX32 ${MINGW_PREFIX32}/bin/${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32-) + SET(CMAKE_C_COMPILER32 ${MINGW_TOOL_PREFIX32}gcc) + SET(CMAKE_CXX_COMPILER32 ${MINGW_TOOL_PREFIX32}g++) + ENDIF() + + INCLUDE_DIRECTORIES(${MINGW_PREFIX}/include) ENDIF() -# specify location of some tools -SET(STRIP ${MINGW_TOOL_PREFIX}strip) -SET(WINDRES ${MINGW_TOOL_PREFIX}windres) -SET(PKG_CONFIG_EXECUTABLE ${MINGW_TOOL_PREFIX}pkg-config) -SET(PKG_CONFIG_FOUND TRUE) - -SET(QT_BINARY_DIR ${MINGW_PREFIX}/bin) -SET(QT_QMAKE_EXECUTABLE ${QT_BINARY_DIR}/qmake) - -# search for programs in the build host directories -SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -# for libraries and headers in the target directories -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -INCLUDE_DIRECTORIES(${MINGW_PREFIX}/include) LINK_DIRECTORIES(${MINGW_PREFIX}/lib ${MINGW_PREFIX}/bin) +# Qt tools +SET(QT_BINARY_DIR ${MINGW_PREFIX}/bin) +SET(QT_QMAKE_EXECUTABLE ${QT_BINARY_DIR}/qmake) + +# Echo modified cmake vars to screen for debugging purposes +IF(NOT DEFINED ENV{MINGW_DEBUG_INFO}) + MESSAGE("") + MESSAGE("Custom cmake vars: (blank = system default)") + MESSAGE("-----------------------------------------") + MESSAGE("* CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}") + MESSAGE("* CMAKE_CXX_COMPILER : ${CMAKE_CXX_COMPILER}") + MESSAGE("* CMAKE_RC_COMPILER : ${CMAKE_RC_COMPILER}") + MESSAGE("* WINDRES : ${WINDRES}") + MESSAGE("* PKG_CONFIG_EXECUTABLE : ${PKG_CONFIG_EXECUTABLE}") + MESSAGE("* MINGW_TOOL_PREFIX32 : ${MINGW_TOOL_PREFIX32}") + MESSAGE("* CMAKE_C_COMPILER32 : ${CMAKE_C_COMPILER32}") + MESSAGE("* CMAKE_CXX_COMPILER32 : ${CMAKE_CXX_COMPILER32}") + MESSAGE("* STRIP : ${STRIP}") + MESSAGE("* QT_BINARY_DIR : ${QT_BINARY_DIR}") + MESSAGE("* QT_QMAKE_EXECUTABLE : ${QT_QMAKE_EXECUTABLE}") + MESSAGE("") + # So that the debug info only appears once + SET(ENV{MINGW_DEBUG_INFO} SHOWN) +ENDIF() + diff --git a/cmake/modules/Win32Toolchain.cmake b/cmake/modules/Win32Toolchain.cmake index 3fd2612ac..60e8d3a47 100644 --- a/cmake/modules/Win32Toolchain.cmake +++ b/cmake/modules/Win32Toolchain.cmake @@ -1,6 +1,10 @@ -SET(MINGW_PREFIX /opt/mingw32) +IF(LMMS_BUILD_MSYS) + SET(MINGW_PREFIX /mingw32) +ELSE() + SET(MINGW_PREFIX /opt/mingw32) +ENDIF() -SET(CMAKE_SYSTEM_PROCESSOR i686) +SET(CMAKE_SYSTEM_PROCESSOR i686) INCLUDE(MinGWCrossCompile) diff --git a/cmake/modules/Win64Toolchain.cmake b/cmake/modules/Win64Toolchain.cmake index 09c0c35ef..2b569e7ac 100644 --- a/cmake/modules/Win64Toolchain.cmake +++ b/cmake/modules/Win64Toolchain.cmake @@ -1,10 +1,15 @@ -SET(MINGW_PREFIX /opt/mingw64) -SET(MINGW_PREFIX32 /opt/mingw32) +IF(LMMS_BUILD_MSYS) + SET(MINGW_PREFIX /mingw64) + SET(MINGW_PREFIX32 /mingw32) +ELSE() + SET(MINGW_PREFIX /opt/mingw64) + SET(MINGW_PREFIX32 /opt/mingw32) +ENDIF() -SET(CMAKE_SYSTEM_PROCESSOR x86_64) -SET(CMAKE_SYSTEM_PROCESSOR32 i686) +SET(CMAKE_SYSTEM_PROCESSOR x86_64) +SET(CMAKE_SYSTEM_PROCESSOR32 i686) -SET(WIN64 TRUE) +SET(WIN64 TRUE) INCLUDE(MinGWCrossCompile) diff --git a/cmake/msys/extract_debs.sh b/cmake/msys/extract_debs.sh new file mode 100644 index 000000000..46c88c892 --- /dev/null +++ b/cmake/msys/extract_debs.sh @@ -0,0 +1,17 @@ +#!/bin/bash +ppa_dir=./ppa/ + +pushd $ppa_dir + +for f in *.deb; do + echo "Extracting $f..." + ar xv $f + rm debian-binary + rm control.tar.* + tar xf data.tar.* + rm data.tar.* +done + +popd + +echo "Your extracted files should be located in $ppa_dir" diff --git a/cmake/msys/fetch_ppa.sh b/cmake/msys/fetch_ppa.sh new file mode 100644 index 000000000..de80e4010 --- /dev/null +++ b/cmake/msys/fetch_ppa.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# Trusty=14.04, Precise=12.04 +PPA_DISTRO=trusty + +# Architecture=i386, amd64 +PPA_ARCH=amd64 + +# These shouldn't change +PPA_HOST=http://ppa.launchpad.net +PPA_USER=tobydox +PPA_PROJECT=mingw-x-trusty +PPA_ROOT=$PPA_HOST/$PPA_USER/$PPA_PROJECT/ubuntu + +PPA_URL=$PPA_ROOT/dists/$PPA_DISTRO/main/binary-$PPA_ARCH/Packages + +ppa_dir=./ppa/ + +temp_file=/tmp/ppa_listing_$$ + +echo "Connecting to $PPA_HOST to get list of packages..." +wget -qO- $PPA_URL |grep "Filename:" > $temp_file + +line_count=`wc -l $temp_file |awk '{print $1}'` + +echo "Found $line_count packages for download..." + +echo "Downloading packages. They will be saved to $ppa_dir" + +mkdir $ppa_dir + +for j in `cat $temp_file` ; do + if [ "$j" = "Filename:" ] ; then + continue + fi + echo "Downloading $j..." + wget -O $ppa_dir$(basename $j) $PPA_ROOT/$j +done + + +echo "Cleaning up temporary files..." +rm -rf $temp_file + +echo "Packages have been saved to $ppa_dir. Please run extract_debs.sh" + + + + diff --git a/cmake/msys/msys_helper.sh b/cmake/msys/msys_helper.sh new file mode 100644 index 000000000..f7b91dfc6 --- /dev/null +++ b/cmake/msys/msys_helper.sh @@ -0,0 +1,98 @@ +#!/bin/bash + +# Git repo information +fork="lmms" # i.e. "lmms" or "tobydox" +branch="master" # i.e. "master" or "stable-1.2" + +# Console colors +red="\\x1B[1;31m" +green="\\x1B[1;32m" +yellow="\\x1B[1;33m" +plain="\\x1B[0m" + +function info() { echo -e "\n${green}$1${plain}"; } +function warn() { echo -e "\n${yellow}$1${plain}"; } +function err() { echo -e "\n${red}$1${plain}"; exit 1;} + +info "Checking for mingw environment" +env |grep MINGW +if [ $? -ne 0 ]; then + err " - Failed. Please relaunch using MinGW shell" +fi + +info "Preparing the git directory..." +mkdir $HOME/.git; touch $HOME/.git/config > /dev/null &2>1 +git config --global http.sslverify false + +info "Cloning the repository..." +if [ -d ./lmms ]; then + warn " - Skipping, ./lmms already exists" +else + git clone -b $branch https://github.com/$fork/lmms.git +fi + + +info "Fetching ppa using cmake/msys/fetch_ppas.sh..." +if [ -d $HOME/ppa ]; then + warn " - Skipping, $HOME/ppa already exists" +else + ./lmms/cmake/msys/fetch_ppa.sh +fi + + +info "Extracting debs to $HOME/ppa/opt/, etc..." +if [ -d $HOME/ppa/opt ]; then + warn " - Skipping, $HOME/ppa/opt already exists" +else + ./lmms/cmake/msys/extract_debs.sh +fi + +info "Preparing library merge, making all qt headers writable..." +chmod u+w /mingw64/include/qt4 -R +chmod u+w /mingw32/include/qt4 -R + +info "Merging mingw headers and libraries from ppa over existing system libraries..." +find /mingw64 |grep sndfile.h + +if [ $? -ne 0 ]; then + \cp -r $HOME/ppa/opt/mingw* / +else + warn " - Skipping, sndfile.h has already been merged" +fi + +fltkver="1.3.3" + +info "Downloading and building fltk $fltkver" + +mingw_root="/$(echo $MSYSTEM|tr '[:upper:]' '[:lower:]')" +which fluid +if [ $? -ne 0 ]; then + wget http://fltk.org/pub/fltk/$fltkver/fltk-$fltkver-source.tar.gz -O $HOME/fltk-source.tar.gz + if [ $? -ne 0 ]; then + err "ERROR: Could not download fltk. Exiting." + fi + tar zxf $HOME/fltk-source.tar.gz -C $HOME/ + pushd $HOME/fltk-$fltkver + + info " - Compiling fltk $fltkver..." + ./configure + + make + + info " - Installing fltk..." + make install DESTDIR=$mingw_root + + if [ $? -ne 0 ]; then + err "ERROR: Could not build/install fltk -- Zyn needs this. Exiting." + fi + + ln -s $mingw_root/usr/local/bin/fluid.exe $mingw_root/bin/fluid.exe +else + warn " - Skipping, fluid binary already exists" +fi + +popd + +info "Cleaning up..." +rm -rf $HOME/fltk-$fltkver +info "Done." diff --git a/cmake/nsis/CMakeLists.txt b/cmake/nsis/CMakeLists.txt index c0c14c4fa..2c81c2f9f 100644 --- a/cmake/nsis/CMakeLists.txt +++ b/cmake/nsis/CMakeLists.txt @@ -1,5 +1,5 @@ -SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/cmake/nsis/nsis_branding.bmp" PARENT_SCOPE) -SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/cmake/nsis/lmms.ico" PARENT_SCOPE) +SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/cmake/nsis/nsis_branding.bmp") +SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/cmake/nsis/lmms.ico") SET(CPACK_NSIS_INSTALLED_ICON_NAME "${CMAKE_PROJECT_NAME}.exe" PARENT_SCOPE) SET(CPACK_NSIS_DISPLAY_NAME "${PROJECT_NAME_UCASE} ${VERSION}" PARENT_SCOPE) SET(CPACK_NSIS_HELP_LINK "${PROJECT_URL}" PARENT_SCOPE) @@ -8,8 +8,7 @@ SET(CPACK_NSIS_CONTACT "${PROJECT_EMAIL}" PARENT_SCOPE) SET(CPACK_PACKAGE_EXECUTABLES "${CMAKE_PROJECT_NAME}.exe;${PROJECT_NAME_UCASE}" PARENT_SCOPE) SET(CPACK_NSIS_MENU_LINKS "${CMAKE_PROJECT_NAME}.exe;${PROJECT_NAME_UCASE}" PARENT_SCOPE) SET(CPACK_NSIS_DEFINES "!include ${CMAKE_SOURCE_DIR}/cmake/nsis/FileAssociation.nsh") -SET(CPACK_NSIS_DEFINES "${CPACK_NSIS_DEFINES}" PARENT_SCOPE) -SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-win32" PARENT_SCOPE) +SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-win32") SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " \\\${registerExtension} \\\"$INSTDIR\\\\${CMAKE_PROJECT_NAME}.exe\\\" \\\".mmp\\\" \\\"${PROJECT_NAME_UCASE} Project\\\" \\\${registerExtension} \\\"$INSTDIR\\\\${CMAKE_PROJECT_NAME}.exe\\\" \\\".mmpz\\\" \\\"${PROJECT_NAME_UCASE} Project (compressed)\\\" @@ -22,11 +21,39 @@ SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " " PARENT_SCOPE) IF(WIN64) - SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-win64" PARENT_SCOPE) - SET(CPACK_NSIS_DEFINES "${CPACK_NSIS_DEFINES} - InstallDir \\\"\\\$PROGRAMFILES64\\\\${CPACK_PACKAGE_INSTALL_DIRECTORY}\\\"" PARENT_SCOPE) + SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-win64") + SET(CPACK_INSTALL_FIX "$PROGRAMFILES64\\\\${CPACK_PACKAGE_INSTALL_DIRECTORY}\\\\") + SET(CPACK_NSIS_DEFINES " + ${CPACK_NSIS_DEFINES} + InstallDir ${CPACK_INSTALL_FIX} + ") ENDIF() +# Fix windows paths for msys +IF(LMMS_BUILD_MSYS) + STRING(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CPACK_PACKAGE_ICON}") + STRING(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_ICON "${CPACK_NSIS_MUI_ICON}") + STRING(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_DEFINES "${CPACK_NSIS_DEFINES}") + STRING(REGEX REPLACE "/" "\\\\\\\\" CMAKE_BINARY_DIR_FIX "${CMAKE_BINARY_DIR}") + + # FIXME: there's no easy way to fix $INST_DIR, so we'll redefine it manually + IF(WIN64) + SET(NSIS_ARCH "win64") + ELSE() + SET(NSIS_ARCH "win32") + ENDIF() + SET(CPACK_NSIS_DEFINES " + ${CPACK_NSIS_DEFINES} + !define /redef INST_DIR ${CMAKE_BINARY_DIR_FIX}\\\\_CPack_Packages\\\\${NSIS_ARCH}\\\\NSIS\\\\${CPACK_PACKAGE_FILE_NAME} + ") +ENDIF() + +# Setup missing parent scopes +SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}" PARENT_SCOPE) +SET(CPACK_NSIS_DEFINES "${CPACK_NSIS_DEFINES}" PARENT_SCOPE) +SET(CPACK_PACKAGE_ICON "${CPACK_PACKAGE_ICON}" PARENT_SCOPE) +SET(CPACK_NSIS_MUI_ICON "${CPACK_NSIS_MUI_ICON}" PARENT_SCOPE) + # Windows resource compilers CONFIGURE_FILE("lmms.rc.in" "${CMAKE_BINARY_DIR}/lmms.rc") CONFIGURE_FILE("zynaddsubfx.rc.in" "${CMAKE_BINARY_DIR}/plugins/zynaddsubfx/zynaddsubfx.rc") diff --git a/plugins/vst_base/CMakeLists.txt b/plugins/vst_base/CMakeLists.txt index 11ef82793..75a3f0f18 100644 --- a/plugins/vst_base/CMakeLists.txt +++ b/plugins/vst_base/CMakeLists.txt @@ -16,11 +16,12 @@ IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET RemoteVstPlugin POST_BUILD COMMAND "${STRIP}" "$") INSTALL(TARGETS RemoteVstPlugin RUNTIME DESTINATION "${PLUGIN_DIR}") - IF(LMMS_BUILD_WIN64) + # FIXME: 32-bit VST fails on MSYS + IF(LMMS_BUILD_WIN64 AND NOT LMMS_BUILD_MSYS) # build 32 bit version of RemoteVstPlugin for Win64 so we can load # 32 bit VST plugins ADD_SUBDIRECTORY(Win64) - ENDIF(LMMS_BUILD_WIN64) + ENDIF(LMMS_BUILD_WIN64 AND NOT LMMS_BUILD_MSYS) ENDIF(LMMS_BUILD_WIN32) BUILD_PLUGIN(vstbase vst_base.cpp VstPlugin.cpp VstPlugin.h communication.h MOCFILES VstPlugin.h) diff --git a/plugins/zynaddsubfx/CMakeLists.txt b/plugins/zynaddsubfx/CMakeLists.txt index c69439161..28a2a35d4 100644 --- a/plugins/zynaddsubfx/CMakeLists.txt +++ b/plugins/zynaddsubfx/CMakeLists.txt @@ -17,7 +17,7 @@ IF(LMMS_HOST_X86 OR LMMS_HOST_X86_64) ENDIF(LMMS_HOST_X86 OR LMMS_HOST_X86_64) # build ZynAddSubFX with full optimizations -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wno-write-strings -Wno-deprecated-declarations") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wno-write-strings -Wno-deprecated-declarations -fpermissive") # link system-libraries when on win32 IF(LMMS_BUILD_WIN32) @@ -114,6 +114,12 @@ SET(zynaddsubfx_core_SRCS ADD_LIBRARY(ZynAddSubFxCore SHARED LocalZynAddSubFx.cpp ${zynaddsubfx_core_SRCS}) TARGET_LINK_LIBRARIES(ZynAddSubFxCore zynaddsubfx_nio ${FFTW3F_LIBRARIES} ${QT_LIBRARIES} -lz -lpthread) + +# required libs for debug msys builds +IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug") + TARGET_LINK_LIBRARIES(ZynAddSubFxCore QtCore4 QtGui4 QtXml4) +ENDIF() + IF(QT5) TARGET_LINK_LIBRARIES(ZynAddSubFxCore Qt5::Widgets Qt5::Xml) ENDIF() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ec71c3de3..8045b86a4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -127,6 +127,11 @@ TARGET_LINK_LIBRARIES(lmms ${LMMS_REQUIRED_LIBS} ) +# Required libs for debug msys builds +IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug") + TARGET_LINK_LIBRARIES(lmms QtCore4 QtGui4 QtXml4) +ENDIF() + # # rules for building localizations # @@ -163,7 +168,9 @@ IF(LMMS_BUILD_WIN32) LINK_FLAGS "${LINK_FLAGS} -mwindows" ENABLE_EXPORTS ON ) - ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "$") + IF(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "$") + ENDIF() INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}") INSTALL(FILES @@ -191,6 +198,12 @@ IF(LMMS_BUILD_WIN32) "${MINGW_PREFIX}/bin/zlib1.dll" "${MINGW_PREFIX}/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32/bin/libwinpthread-1.dll" DESTINATION .) + IF(LMMS_BUILD_MSYS) + INSTALL(FILES + "${MINGW_PREFIX}/bin/libgcc_s_seh-1.dll" + "${MINGW_PREFIX}/bin/libstdc++-6.dll" + DESTINATION .) + ENDIF() ELSE(LMMS_BUILD_WIN32) IF(NOT LMMS_BUILD_APPLE)