From d173f42fecf04ff43878d2f48e6252289c92ddfb Mon Sep 17 00:00:00 2001 From: Hyunjin Song Date: Thu, 2 Jan 2020 12:32:39 +0900 Subject: [PATCH] Fix wine detection --- cmake/linux/package_linux.sh.in | 18 ++++++++++-------- cmake/modules/FindWine.cmake | 20 ++++++++++++++------ tests/src/core/AutomatableModelTest.cpp | 12 ++++++------ 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/cmake/linux/package_linux.sh.in b/cmake/linux/package_linux.sh.in index adcf9daa2..a1f9ff865 100644 --- a/cmake/linux/package_linux.sh.in +++ b/cmake/linux/package_linux.sh.in @@ -110,14 +110,6 @@ unset LD_LIBRARY_PATH # Ensure linuxdeployqt can find shared objects export LD_LIBRARY_PATH="${APPDIR}"usr/lib/lmms/:"${APPDIR}"usr/lib/lmms/optional:"$LD_LIBRARY_PATH" -# Handle wine linking -if [ -d "@WINE_32_LIBRARY_DIR@" ]; then - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:@WINE_32_LIBRARY_DIRS@ -fi -if [ -d "@WINE_64_LIBRARY_DIR@" ]; then - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:@WINE_64_LIBRARY_DIRS@ -fi - # Move executables so linuxdeployqt can find them ZYNLIB="${APPDIR}usr/lib/lmms/RemoteZynAddSubFx" VSTLIB32="${APPDIR}usr/lib/lmms/32/RemoteVstPlugin32.exe.so" @@ -131,6 +123,16 @@ mv "$ZYNLIB" "$ZYNBIN" mv "$VSTLIB32" "$VSTBIN32" || true mv "$VSTLIB64" "$VSTBIN64" || true +# Handle wine linking +if [ -d "@WINE_32_LIBRARY_DIR@" ] && \ + ldd "$VSTBIN32" | grep "libwine\.so" | grep "not found"; then + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"@WINE_32_LIBRARY_DIRS@" +fi +if [ -d "@WINE_64_LIBRARY_DIR@" ] && \ + ldd "$VSTBIN64" | grep "libwine\.so" | grep "not found"; then + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"@WINE_64_LIBRARY_DIRS@" +fi + # Patch the desktop file sed -i 's/.*Exec=.*/Exec=lmms.real/' "$DESKTOPFILE" diff --git a/cmake/modules/FindWine.cmake b/cmake/modules/FindWine.cmake index 50bf54edb..f7f3b0aa6 100644 --- a/cmake/modules/FindWine.cmake +++ b/cmake/modules/FindWine.cmake @@ -11,11 +11,19 @@ MACRO(_findwine_find_flags output expression result) STRING(REPLACE " " ";" WINEBUILD_FLAGS "${output}") FOREACH(FLAG ${WINEBUILD_FLAGS}) IF("${FLAG}" MATCHES "${expression}") - SET(${result} "${FLAG}") + LIST(APPEND ${result} "${FLAG}") ENDIF() ENDFOREACH() ENDMACRO() +MACRO(_regex_replace_foreach EXPRESSION REPLACEMENT RESULT INPUT) + SET(${RESULT} "") + FOREACH(ITEM ${INPUT}) + STRING(REGEX REPLACE "${EXPRESSION}" "${REPLACEMENT}" ITEM "${ITEM}") + LIST(APPEND ${RESULT} "${ITEM}") + ENDFOREACH() +ENDMACRO() + LIST(APPEND CMAKE_PREFIX_PATH /opt/wine-stable /opt/wine-devel /opt/wine-staging /usr/lib/wine/) FIND_PROGRAM(WINE_CXX @@ -31,10 +39,10 @@ IF(WINE_CXX) _findwine_find_flags("${WINEBUILD_OUTPUT_32}" "^-isystem" WINEGCC_INCLUDE_DIR) _findwine_find_flags("${WINEBUILD_OUTPUT_32}" "libwinecrt0\\.a.*" WINECRT_32) _findwine_find_flags("${WINEBUILD_OUTPUT_64}" "libwinecrt0\\.a.*" WINECRT_64) - STRING(REGEX REPLACE "^-isystem" "" WINE_INCLUDE_HINT "${WINEGCC_INCLUDE_DIR}") - STRING(REGEX REPLACE "/wine/windows$" "" WINE_INCLUDE_HINT "${WINE_INCLUDE_HINT}") - STRING(REGEX REPLACE "libwinecrt0\\.a.*" "" WINE_32_LIBRARY_DIR "${WINECRT_32}") - STRING(REGEX REPLACE "libwinecrt0\\.a.*" "" WINE_64_LIBRARY_DIR "${WINECRT_64}") + _regex_replace_foreach("^-isystem" "" WINE_INCLUDE_HINT "${WINEGCC_INCLUDE_DIR}") + _regex_replace_foreach("/wine/windows$" "" WINE_INCLUDE_HINT "${WINE_INCLUDE_HINT}") + STRING(REGEX REPLACE "wine/libwinecrt0\\.a.*" "" WINE_32_LIBRARY_DIR "${WINECRT_32}") + STRING(REGEX REPLACE "wine/libwinecrt0\\.a.*" "" WINE_64_LIBRARY_DIR "${WINECRT_64}") IF(BUGGED_WINEGCC) MESSAGE(WARNING "Your winegcc is unusable due to https://bugs.winehq.org/show_bug.cgi?id=46293,\n @@ -76,7 +84,7 @@ IF(WINE_CXX) ENDIF() FIND_PATH(WINE_INCLUDE_DIR wine/exception.h - HINTS "${WINE_INCLUDE_HINT}" + HINTS ${WINE_INCLUDE_HINT} ) SET(_ARCHITECTURE ${CMAKE_LIBRARY_ARCHITECTURE}) diff --git a/tests/src/core/AutomatableModelTest.cpp b/tests/src/core/AutomatableModelTest.cpp index 6bf9090e1..d84d89db4 100644 --- a/tests/src/core/AutomatableModelTest.cpp +++ b/tests/src/core/AutomatableModelTest.cpp @@ -35,8 +35,8 @@ class AutomatableModelTest : QTestSuite void resetChanged() { m1Changed = m2Changed = false; } private slots: // helper slots - void onM1Changed(Model* ) { m1Changed = true; } - void onM2Changed(Model* ) { m2Changed = true; } + void onM1Changed() { m1Changed = true; } + void onM2Changed() { m2Changed = true; } private slots: // tests //! Test that upcast and exact casts work, @@ -62,10 +62,10 @@ private slots: // tests { BoolModel m1(false), m2(false); - QObject::connect(&m1, SIGNAL(dataChanged(Model*)), - this, SLOT(onM1Changed(Model*))); - QObject::connect(&m2, SIGNAL(dataChanged(Model*)), - this, SLOT(onM2Changed(Model*))); + QObject::connect(&m1, SIGNAL(dataChanged()), + this, SLOT(onM1Changed())); + QObject::connect(&m2, SIGNAL(dataChanged()), + this, SLOT(onM2Changed())); resetChanged(); AutomatableModel::linkModels(&m1, &m1);