cmake build with qt6 (macos) does not include "plugins"
pdv
pdvisschere at edpnet.be
Tue Nov 7 16:42:27 UTC 2023
On 06/11/2023 19:17, pdv wrote:
> On 04/11/2023 20:35, Kornel Benko wrote:
>> Am Sat, 4 Nov 2023 18:05:42 +0100
>> schrieb pdv <pdvisschere at edpnet.be>:
>>
>>> On 04/11/2023 17:55, pdv wrote:
>>>> On 21/03/2023 19:27, Kornel Benko wrote:
>>>>> Am Tue, 21 Mar 2023 15:27:41 +0100
>>>>> schrieb pdv <pdvisschere at edpnet.be>:
>>>>>
>>>>>> On 21/03/2023 11:00, Kornel Benko wrote:
>>>>>>> Am Mon, 20 Mar 2023 20:05:32 +0100
>>>>>>> schrieb pdv <pdvisschere at edpnet.be>:
>>>>>>>> It's within the first if() else(), that's thus for qt6(see
>>>>>>>> below). I
>>>>>>>> suppose this should work for all platforms, but I checked it on
>>>>>>>> macos
>>>>>>>> only. Your patch is limited to APPLE and also works for me; If this
>>>>>>>> problem doesn't occur for other platforms, it's ok for me of
>>>>>>>> course.
>>>>>>>
>>>>>>> Probably no one else is using the bundle option (-DLYX_BUNDLE=ON).
>>>>>>>
>>>>>>> If you could try to use cmake without this option, I'd be interested
>>>>>>> if it works for
>>>>>>> you too.
>>>>>>
>>>>>> Apparently no problem. -DLYX_BUNDLE=OFF works too for me.
>>>>>>
>>>>>>> In this case we could get rid of it (probably).
>>>>>>>
>>>>>>> Kornel
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> Good, so I will disable this option for lyx2.5 then.
>>>>>
>>>>> Kornel
>>>>>
>>>>>
>>>> I have build the latest lyx-master and I still need my (previous) patch
>>>> to build a LyX.app which includes all required Qt6 frameworks (I want a
>>>> stand-alone app).
>>>>
>>>> I'm using a recent version of CMake and apparently versions older than
>>>> 3.5 will not longer be supported. To get rid of the annoying warnings
>>>> I've upped the minimum version from 3.1 to 3.5 (new patch included).
>>>>
>>>> pdv
>>>>
>>> Sorry, forgot to include the patch.
>>
>> Will be done for 2.4.x versions. Also for other CMakeLists.txt's in
>> the lyx-sources.
>>
>> Kornel
>>
>>
> OK, thanks.
>
> Regarding the original issue, I'm still largely in the dark.
>
> I've build qt-6.2 (-debug-and-release option), installed cmake3.26 and
> I'm using macos 10.14 and xcode. lyx has been updated to a very recent
> master-version.
>
> Building a complete (qt frameworks included) debuggable LyX2.4.app with
> cmake does not work for me; the plug-ins are not copied into the bundle
> and cmake's fixup_bundle step subsequently fails.
>
> When I apply my patch (see first message) the plugins are copied but the
> fixup_bundle step still fails.
>
> Only the QtCore, ... frameworks have been copied to the bundle (probably
> by the install command in my patch), but not the QtCore_debug, ...
> versions, although no error is reported by fixup_bundle at copy time.
>
> That's because they are copied to a folder named /@rpath/ in my
> build-folder instead of into the bundle.
> Apparently the @rpath used in the qt libraries is not handled properly
> by the cmake scripts.
>
> Can anyone confirm that a stand-alone LyX2.4.app can be build with cmake
> on macos or have any other suggestion?
>
> pdv
>
>
>
The problem with the _debug libraries is obvious. As for qt5 no _debug
libraries should be copied for qt6 either. I adapted my patch (included)
accordingly.
I once more tested a number of configurations and this is my conclusion.
I can build a bundle with LYX_DMG=off and LYX_BUNDLE=on, the latter sets
also LYX_CPACK=on.
These are my resulting settings after cmake configure:
LYX_ENABLE_BUILD_TYPE:STRING = AUTO : Allows to tweak the
compiled code (AUTO release prerelease development gprof)
LYX_CPACK:BOOL = ON : Use the CPack
management (Implies LYX_INSTALL option)
LYX_LOCALVERSIONING:BOOL = ON : Add version info to
created package name (only used if LYX_CPACK option set)
LYX_INSTALL:BOOL = OFF : Build install
projects/rules (implies a bunch of other options)
LYX_NLS:BOOL = ON : Enable Native
Language Support (NLS)
LYX_REQUIRE_SPELLCHECK:BOOL = OFF : Abort if no
spellchecker available
LYX_ASPELL:BOOL = ON : Require aspell
LYX_ENCHANT:BOOL = OFF : Require Enchant
LYX_HUNSPELL:BOOL = ON : Require Hunspell
LYX_RELEASE:BOOL = ON : Build release
version, build debug when disabled
LYX_DEBUG:BOOL = OFF : Enforce debug build
LYX_NO_OPTIMIZE:BOOL = OFF : Don't use any
optimization/debug flags
LYX_ENABLE_ASSERTIONS:BOOL = ON : Run sanity checks in
the program
LYX_PACKAGE_SUFFIX:BOOL = ON : Use version suffix
for packaging
LYX_SUFFIX_VALUE:STRING = : Use this string as suffix
LYX_PCH:BOOL = OFF : Use precompiled headers
LYX_MERGE_FILES:BOOL = OFF : Merge source files
into one compilation unit
LYX_MERGE_REBUILD:BOOL = OFF : Rebuild generated
files from merged files build
LYX_QUIET:BOOL = ON : Don't generate
verbose makefiles
LYX_INSTALL_PREFIX:BOOL = OFF : Install path for LyX
LYX_BUNDLE:BOOL = ON : Build bundle
(experimental)
LYX_ENABLE_URLTESTS:BOOL = OFF : Enable for URL tests
LYX_ENABLE_EXPORT_TESTS:BOOL = OFF : Enable for export tests
LYX_ENABLE_KEYTESTS:BOOL = OFF : Enable for keytests
LYX_ENABLE_VALGRIND_TESTS:BOOL = OFF : Enable for tests
involving valgrind
LYX_DEBUG_SANITIZE:STRING = NONE : Use sanitize check
(NONE ADDRESS UNSPECIFIED)
LYX_USE_QT:STRING = QT6 : Use Qt version as
frontend (AUTO QT5 QT6)
LYX_USE_IPO:STRING = OFF : Interprocedural
optimization (OFF AUTO ON)
LYX_DISABLE_CALLSTACK_PRINTING:BOOL= OFF : do not print a
callstack when crashing
LYX_EXTERNAL_Z:BOOL = ON : OFF := Build 3rdparty
lib zlib
LYX_EXTERNAL_DTL:BOOL = OFF : OFF := Build 3rdparty
commands dt2dv and dv2dt
LYX_EXTERNAL_ICONV:BOOL = ON : OFF := Build 3rdparty
lib iconvlib
LYX_EXTERNAL_HUNSPELL:BOOL = ON : OFF := Build 3rdparty
lib hunspelllib
LYX_EXTERNAL_MYTHES:STRING = OFF : OFF := Build 3rdparty
lib mytheslib (AUTO OFF ON)
LYX_DMG:BOOL = OFF : Build as Mac bundle,
needed for .dmg (experimental)
LYX_COCOA:BOOL = OFF : Use Cocoa on Mac
This is with my patch applied.
Without it, I can build a bundle but it crashes because the plugins are
missing.
The documentation of fixup_bundle clearly mentions that the plugins
should have been copied before running fixup_bundle;
Without applying my patch, how are these plugins copied when building
with qt6?
Probably not all ot6-plugins are needed by lyx and a selection could be
made.
pdv
-------------- next part --------------
diff --git a/development/cmake/post_install/CMakeLists.txt b/development/cmake/post_install/CMakeLists.txt
index 52a2f782af..f83cdaad0b 100644
--- a/development/cmake/post_install/CMakeLists.txt
+++ b/development/cmake/post_install/CMakeLists.txt
@@ -28,14 +28,18 @@ if(LYX_BUNDLE)
endif()
if(Qt5Core_FOUND)
- file(GLOB QT_PLUGIN_DIRECTORIES "${QT_PLUGINS_DIR}/imageformats")
- install(DIRECTORY ${QT_PLUGIN_DIRECTORIES} DESTINATION "${qtplugin_dest_dir}/plugins/" COMPONENT Runtime REGEX "\\_debug\\.dylib$" EXCLUDE)
+ file(GLOB QT_PLUGIN_DIRECTORIES "${QT_PLUGINS_DIR}/imageformats")
+ install(DIRECTORY ${QT_PLUGIN_DIRECTORIES} DESTINATION "${qtplugin_dest_dir}/plugins/" COMPONENT Runtime REGEX "\\_debug\\.dylib$" EXCLUDE)
if(APPLE)
if(Qt5Core_VERSION VERSION_GREATER_EQUAL 5.10.0)
install_qt_plugin("Qt5::QMacStylePlugin")
endif()
install_qt_plugin("Qt5::QCocoaIntegrationPlugin")
endif()
+ else()
+ # With QT6, just copy all the plugins
+ file(GLOB QT_PLUGIN_DIRECTORIES "${QT_PLUGINS_DIR}/*")
+ install(DIRECTORY ${QT_PLUGIN_DIRECTORIES} DESTINATION "${qtplugin_dest_dir}/plugins/" COMPONENT Runtime REGEX "\\_debug\\.dylib$" EXCLUDE)
endif()
# Install code does the following:
More information about the lyx-devel
mailing list