cmake build with qt6 (macos) does not include "plugins"

Scott Kostyshak skostysh at lyx.org
Sat Nov 11 16:14:51 UTC 2023


On Tue, Nov 07, 2023 at 05:42:27PM +0100, pdv wrote:
> 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

> 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:

@Kornel seems like we might want this one in master?

Scott
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.lyx.org/pipermail/lyx-devel/attachments/20231111/58c98574/attachment.asc>


More information about the lyx-devel mailing list