[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-buildsystem
Subject:    Re: Reducing excess linkage - cmake 2.6 IMPORTED targets and
From:       Alexander Neundorf <neundorf () kde ! org>
Date:       2008-06-26 22:58:21
Message-ID: 200806270058.22501.neundorf () kde ! org
[Download RAW message or body]

On Thursday 26 June 2008, Dirk Mueller wrote:
> On Thursday 26 June 2008, Alexander Neundorf wrote:
> > Currently this patch does two things
> > -it adds more libs to the TARGET_LINK_LIBRARIES() calls - wouldn't hurt
> > to commit that part
>
> exactly, and it is the right thing to do.

Done.

Attached is the remaining part of the patch.

> > -it sets the LINK_INTERFACE_LIBRARIES target property - this can hurt
> > with cmake 2.6 even if that option is not enabled
>
> Hmm, okay. I think we can fix that via another level of indirection:
>
> --- KDE4Macros.cmake
> +++ KDE4Macros.cmake
> @@ -1186,6 +1186,11 @@ macro(_KDE4_EXPORT_LIBRARY_DEPENDENCIES
>     endif(KDE4_ENABLE_EXPERIMENTAL_LIB_EXPORT  AND  UNIX)#  AND NOT APPLE)
>  endmacro(_KDE4_EXPORT_LIBRARY_DEPENDENCIES)
>
> +macro (KDE4_TARGET_LINK_INTERFACE_LIBRARIES _target _interface_libs)
> +   if(KDE4_ENABLE_EXPERIMENTAL_LIB_EXPORT  AND  UNIX )# AND NOT APPLE)
> +      set_target_properties("${_target}" "${_interface_libs}")
> +   endif(KDE4_ENABLE_EXPERIMENTAL_LIB_EXPORT  AND  UNIX)#  AND NOT APPLE)
> +endmacro (KDE4_TARGET_LINK_INTERFACE_LIBRARIES)

Hmm, I don't like that.
If we do it, I'd prefer that we do it only this new way, i.e. all KDE builds 
will use the new style.
Adding the macro to KDE4Macros.cmake means that we have to maintain it for all 
of KDE 4.x.
I'd prefer to see it as a temporary hack during the transition.

How about prefixing it with an underscore to make clear it's no public macro ?

And additionally moving it out of KDE4Macros.cmake into 
kdelibs/CMakeLists.txt, so it stays within kdelibs. We might need to copy it 
ti kdepimlibs. Is this actually important also for libraries in other 
modules ? I guess with the libs from kdelibs not dragging in that many 
libraries the effect of libs in other modules shouldn't be big.

Or, instead of using a macro, how about this:

if(KDE4_ENABLE_EXPERIMENTAL_LIB_EXPORT  AND  UNIX )
   set(DISABLE )
else(KDE4_ENABLE_EXPERIMENTAL_LIB_EXPORT  AND  UNIX )
   set(DISABLE DISABLED_PROPERTY_)
endif(KDE4_ENABLE_EXPERIMENTAL_LIB_EXPORT  AND  UNIX )

and then do 

set_target_properties(khtml PROPERTIES VERSION ${KDE_NON_GENERIC_LIB_VERSION} 
           SOVERSION ${KDE_NON_GENERIC_LIB_SOVERSION}
           ${DISABLE}LINK_INTERFACE_LIBRARIES "kparts;kjs;kio;kdeui;kdecore")

So if the option is enabled, DISABLE is empty and the correct property is set, 
otherwise a useless property is set.
Still this should be done only for the transition period I'd say.

Alex

["reduced_linking_2.patch" (text/x-diff)]

Index: khtml/CMakeLists.txt
===================================================================
--- khtml/CMakeLists.txt	(revision 824948)
+++ khtml/CMakeLists.txt	(working copy)
@@ -329,7 +329,8 @@
 target_link_libraries(khtml ${KDE4_KPARTS_LIBS} ktexteditor kjs ${KDE4_PHONON_LIBS} \
${JPEG_LIBRARIES} ${GIF_LIBRARIES} ${PNG_LIBRARIES} ${X11_LIBRARIES})  
 set_target_properties(khtml PROPERTIES VERSION ${KDE_NON_GENERIC_LIB_VERSION} 
-                                       SOVERSION ${KDE_NON_GENERIC_LIB_SOVERSION} )
+                                       SOVERSION ${KDE_NON_GENERIC_LIB_SOVERSION}
+                                        LINK_INTERFACE_LIBRARIES \
"kparts;kjs;kio;kdeui;kdecore")  
 
 set(CREATE_HASH_TABLE ${CMAKE_SOURCE_DIR}/kjs/create_hash_table )
Index: kde3support/CMakeLists.txt
===================================================================
--- kde3support/CMakeLists.txt	(revision 824948)
+++ kde3support/CMakeLists.txt	(working copy)
@@ -81,7 +81,8 @@
 target_link_libraries(kde3support  ${KDE4_KPARTS_LIBS} ${KDE4_KPTY_LIBS} \
${QT_QTXML_LIBRARY} ${QT_QT3SUPPORT_LIBRARY} ${KDE4_KFILE_LIBS} ${X11_LIBRARIES})  
 set_target_properties(kde3support PROPERTIES VERSION ${GENERIC_LIB_VERSION} 
-                                             SOVERSION ${GENERIC_LIB_SOVERSION} )
+                                             SOVERSION ${GENERIC_LIB_SOVERSION} 
+                                             LINK_INTERFACE_LIBRARIES \
"kio;kdeui;kdecore;${QT_QT3SUPPORT_LIBRARY}")  
 install(TARGETS kde3support ${INSTALL_TARGETS_DEFAULT_ARGS})
 
Index: kfile/CMakeLists.txt
===================================================================
--- kfile/CMakeLists.txt	(revision 824948)
+++ kfile/CMakeLists.txt	(working copy)
@@ -40,7 +40,8 @@
 )
 
 set_target_properties(kfile PROPERTIES VERSION ${GENERIC_LIB_VERSION} 
-                                       SOVERSION ${GENERIC_LIB_SOVERSION} )
+                                       SOVERSION ${GENERIC_LIB_SOVERSION} 
+                                       LINK_INTERFACE_LIBRARIES "kio;kdeui;kdecore")
 
 install(TARGETS kfile ${INSTALL_TARGETS_DEFAULT_ARGS})
 
Index: kross/core/CMakeLists.txt
===================================================================
--- kross/core/CMakeLists.txt	(revision 824948)
+++ kross/core/CMakeLists.txt	(working copy)
@@ -13,7 +13,8 @@
 kde4_add_library(krosscore SHARED ${krosscore_LIB_SRCS})
 target_link_libraries(krosscore ${KDE4_KDECORE_LIBS} ${KDE4_KDEUI_LIBS} \
${QT_QTSCRIPT_LIBRARY} ${QT_QTXML_LIBRARY})  set_target_properties(krosscore \
                PROPERTIES VERSION ${GENERIC_LIB_VERSION} 
-                                SOVERSION ${GENERIC_LIB_SOVERSION} )
+                                SOVERSION ${GENERIC_LIB_SOVERSION}
+                                LINK_INTERFACE_LIBRARIES \
"kdecore;${QT_QTSCRIPT_LIBRARY};${QT_QTXML_LIBRARY}")  
 install(TARGETS krosscore ${INSTALL_TARGETS_DEFAULT_ARGS})
 
Index: kross/ui/CMakeLists.txt
===================================================================
--- kross/ui/CMakeLists.txt	(revision 824948)
+++ kross/ui/CMakeLists.txt	(working copy)
@@ -16,7 +16,8 @@
 kde4_add_library(krossui SHARED ${krossui_LIB_SRCS})
 target_link_libraries(krossui krosscore ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS} \
${KDE4_KIO_LIBS})  set_target_properties(krossui PROPERTIES VERSION \
                ${GENERIC_LIB_VERSION} 
-                                         SOVERSION ${GENERIC_LIB_SOVERSION} )
+                                         SOVERSION ${GENERIC_LIB_SOVERSION}
+                                         LINK_INTERFACE_LIBRARIES "krosscore")
 
 
 install(TARGETS krossui ${INSTALL_TARGETS_DEFAULT_ARGS})
Index: kparts/CMakeLists.txt
===================================================================
--- kparts/CMakeLists.txt	(revision 824948)
+++ kparts/CMakeLists.txt	(working copy)
@@ -27,7 +27,8 @@
 target_link_libraries(kparts  ${KDE4_KDECORE_LIBS} kdeui kio)
 
 set_target_properties(kparts PROPERTIES VERSION ${GENERIC_LIB_VERSION} 
-                                        SOVERSION ${GENERIC_LIB_SOVERSION} )
+                                        SOVERSION ${GENERIC_LIB_SOVERSION} 
+                                        LINK_INTERFACE_LIBRARIES \
"kio;kdeui;kdecore")  
 
 install(TARGETS kparts ${INSTALL_TARGETS_DEFAULT_ARGS})
Index: kio/CMakeLists.txt
===================================================================
--- kio/CMakeLists.txt	(revision 824948)
+++ kio/CMakeLists.txt	(working copy)
@@ -260,7 +260,8 @@
 endif(X11_Xrender_FOUND)
 
 set_target_properties(kio PROPERTIES VERSION ${KDE_NON_GENERIC_LIB_VERSION} 
-                                     SOVERSION ${KDE_NON_GENERIC_LIB_SOVERSION} )
+                                     SOVERSION ${KDE_NON_GENERIC_LIB_SOVERSION} 
+                                     LINK_INTERFACE_LIBRARIES \
"kdeui;kdecore;${QT_QTNETWORK_LIBRARY};${QT_QTXML_LIBRARY}")  
 
 ########### install files ###############
Index: kdeui/CMakeLists.txt
===================================================================
--- kdeui/CMakeLists.txt	(revision 824948)
+++ kdeui/CMakeLists.txt	(working copy)
@@ -316,8 +316,9 @@
 endif(X11_Xrender_FOUND)
 
 set_target_properties(kdeui PROPERTIES VERSION ${KDE_NON_GENERIC_LIB_VERSION} 
-                            SOVERSION ${KDE_NON_GENERIC_LIB_SOVERSION} )
-
+                            SOVERSION ${KDE_NON_GENERIC_LIB_SOVERSION} 
+                            LINK_INTERFACE_LIBRARIES \
"kdecore;${QT_QTSVG_LIBRARY};${QT_QTGUI_LIBRARY}" +                       )
 install(TARGETS kdeui ${INSTALL_TARGETS_DEFAULT_ARGS})
 ########### install files ###############
 
Index: kdecore/CMakeLists.txt
===================================================================
--- kdecore/CMakeLists.txt	(revision 824948)
+++ kdecore/CMakeLists.txt	(working copy)
@@ -248,7 +248,8 @@
 
 set_target_properties(kdecore PROPERTIES 
                               VERSION ${KDE_NON_GENERIC_LIB_VERSION} 
-                              SOVERSION ${KDE_NON_GENERIC_LIB_SOVERSION} )
+                              SOVERSION ${KDE_NON_GENERIC_LIB_SOVERSION}
+                              LINK_INTERFACE_LIBRARIES \
"${QT_QTDBUS_LIBRARY};${QT_QTCORE_LIBRARY}")  
 install(TARGETS kdecore ${INSTALL_TARGETS_DEFAULT_ARGS})
 



_______________________________________________
Kde-buildsystem mailing list
Kde-buildsystem@kde.org
https://mail.kde.org/mailman/listinfo/kde-buildsystem


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic