[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: headers installation and compilation tests
From: David Faure <faure () kde ! org>
Date: 2010-11-29 0:11:07
Message-ID: 201011290111.08101.faure () kde ! org
[Download RAW message or body]
On Monday 09 August 2010, Volker Krause wrote:
> On Saturday 07 August 2010 02:24:16 Aaron J. Seigo wrote:
> > On August 6, 2010, Thiago Macieira wrote:
> > > Side comment: shouldn't all of this (the includes and the installation
> > > rules) be auto-generated?
> >
> > they should, but as you pointe out they aren't. the result is exctly what
> > one would expect from a manual process: frequent ommissions, occassional
> >
> > breakage.
> >
> > would be a nice little project for someone to work on :)
>
> Indeed. At least the install part is done automatically in
> kdepimlibs/includes already, with the downside that it only picks up new
> headers after a CMake re-run, but still much nicer than the explicit list
> IMHO.
I had a look at this, and it doesn't allow to have headers that are
conditionnally installed -- unless they are in a separate subdir.
So it creates a problem for things like
if(QT_QTOPENGL_FOUND AND OPENGL_FOUND)
install(FILES
Plasma/GLApplet
DESTINATION ${INCLUDE_INSTALL_DIR}/KDE/Plasma COMPONENT Devel)
endif(QT_QTOPENGL_FOUND AND OPENGL_FOUND)
if(NOT KDE_NO_DEPRECATED)
install( FILES
Plasma/AnimationDriver
DESTINATION ${INCLUDE_INSTALL_DIR}/KDE/Plasma COMPONENT Devel)
endif(NOT KDE_NO_DEPRECATED)
and other "if not deprecated" and "if UNIX" tests.
Moving such headers to separate subdirs sounds hackish, and totally breaks any
hopes of autogenerating the forwarding headers.
I think we should keep the current list of headers in kdelibs, or move to a
completely automated system where we gather the public headers from each lib
and generate forwarding headers, which would also make it possible to use
<KFoo> in kdelibs, but I'm not sure it's worth the trouble.
> It also has a test that makes sure all headers compile with strict
> flags (QT_NO_CAST_FROM_ASCII, etc), might be interesting for kdelibs as
> well.
Yep, very interesting, I just wrote the attached patch in order to check this
in kdelibs - without using the forwarding headers though, since they don't
compile in kdelibs before being installed.
Instead I'm doing this per-library, using its already set up include
directories and their list of installed headers. Attaching, for review on kde-
buildsystem. Tested on kdeui and kio, works fine, needs to be applied to all
other libs as well.
--
David Faure, faure@kde.org, http://www.davidfaure.fr
Sponsored by Nokia to work on KDE, incl. Konqueror (http://www.konqueror.org).
["MacroHeaderCompilationTest.diff" (text/x-patch)]
Index: cmake/modules/MacroHeaderCompilationTest.cmake
===================================================================
--- cmake/modules/MacroHeaderCompilationTest.cmake (revision 0)
+++ cmake/modules/MacroHeaderCompilationTest.cmake (revision 0)
@@ -0,0 +1,38 @@
+
+macro(macro_header_compilation_test)
+
+ # Clear the file initially
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/all_includes.h "/* all forwarding includes \
*/\n" ) +
+ # Insert all #include lines
+ foreach( file ${ARGN} )
+ file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/all_includes.h "#include <${file}>\n" )
+ endforeach(file)
+
+ # Prepare a "main", in a generated file
+ # Make sure to delete the generated files if you change the contents below.
+ if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/header_compile.cpp)
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/header_compile.cpp
+ "#ifndef QT_NO_CAST_FROM_ASCII\n"
+ " #define QT_NO_CAST_FROM_ASCII\n"
+ "#endif\n"
+ "#ifndef QT_NO_CAST_TO_ASCII\n"
+ " #define QT_NO_CAST_TO_ASCII\n"
+ "#endif\n"
+ "#ifndef QT_NO_CAST_FROM_BYTEARRAY\n"
+ " #define QT_NO_CAST_FROM_BYTEARRAY\n"
+ "#endif\n"
+ "#ifndef QT_NO_KEYWORDS\n"
+ " #define QT_NO_KEYWORDS\n"
+ "#endif\n"
+ "#ifndef QT_STRICT_ITERATORS\n"
+ " #define QT_STRICT_ITERATORS\n"
+ "#endif\n"
+ )
+ file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/header_compile.cpp "#include \
\"all_includes.h\"\nint main( int , char** ) { return 0; }\n" ) + endif()
+
+ kde4_add_executable( header_compilation_test \
${CMAKE_CURRENT_BINARY_DIR}/header_compile.cpp ) + target_link_libraries( \
header_compilation_test ${QT_QTCORE_LIBRARY} ) \
+endmacro(macro_header_compilation_test) +
Index: kdeui/CMakeLists.txt
===================================================================
--- kdeui/CMakeLists.txt (revision 1201251)
+++ kdeui/CMakeLists.txt (working copy)
@@ -47,7 +47,6 @@
)
add_subdirectory( about )
-add_subdirectory( tests )
add_subdirectory( sonnet/tests )
########### next target ###############
@@ -462,7 +461,7 @@
install( FILES xmlgui/ui_standards.rc DESTINATION ${CONFIG_INSTALL_DIR}/ui )
-install( FILES
+set (KDEUI_INSTALL_HEADERS
kdeui_export.h
actions/kactioncollection.h
actions/kactioncategory.h
@@ -662,8 +661,10 @@
xmlgui/kxmlguiclient.h
xmlgui/kxmlguibuilder.h
xmlgui/kxmlguifactory.h
- DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel )
+)
+install( FILES ${KDEUI_INSTALL_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT \
Devel ) +
if(NOT KDE_NO_DEPRECATED)
install(FILES
widgets/karrowbutton.h
@@ -710,3 +711,6 @@
# install our copy of the rgb.txt named colors list on systems without X11
install(FILES colors/rgb.txt DESTINATION ${DATA_INSTALL_DIR}/kdeui)
endif (NOT Q_WS_X11)
+
+add_subdirectory( tests )
+
Index: kdeui/tests/CMakeLists.txt
===================================================================
--- kdeui/tests/CMakeLists.txt (revision 1201251)
+++ kdeui/tests/CMakeLists.txt (working copy)
@@ -178,3 +178,10 @@
add_subdirectory(proxymodeltestapp)
+## Test for compiling all headers ##
+
+if (KDE4_BUILD_TESTS)
+ include(MacroHeaderCompilationTest)
+ macro_header_compilation_test(${KDEUI_INSTALL_HEADERS})
+endif (KDE4_BUILD_TESTS)
+
Index: kio/CMakeLists.txt
===================================================================
--- kio/CMakeLists.txt (revision 1201251)
+++ kio/CMakeLists.txt (working copy)
@@ -58,7 +58,6 @@
add_subdirectory( kssl/kssl )
add_subdirectory( kssl/kcm )
add_subdirectory( misc )
-add_subdirectory( tests )
add_subdirectory( kio/dummyanalyzers )
set(kiocore_STAT_SRCS
@@ -343,7 +342,9 @@
DESTINATION ${SERVICETYPES_INSTALL_DIR} )
install( FILES kioslave.upd DESTINATION ${DATA_INSTALL_DIR}/kconf_update )
-install( FILES
+
+# Headers in the "kio" subdir
+set (KIO_KIO_INSTALL_HEADERS
kio/kio_export.h
kio/accessmanager.h
kio/connection.h
@@ -380,15 +381,10 @@
kio/skipdialog.h
kio/udsentry.h
kssl/sslui.h
- DESTINATION ${INCLUDE_INSTALL_DIR}/kio COMPONENT Devel)
+)
-if( NOT WIN32 )
- install( FILES
- kfile/kfilesharedialog.h
- DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel)
-endif( NOT WIN32 )
-install( FILES
+set (KIO_INSTALL_HEADERS
kio/kacl.h
kio/kautomount.h
kio/kbuildsycocaprogressdialog.h
@@ -450,31 +446,40 @@
bookmarks/kbookmarkdombuilder.h
bookmarks/konqbookmarkmenu.h
bookmarks/kbookmarkdialog.h
- DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel)
+)
+if( NOT WIN32 )
+ set(KIO_INSTALL_HEADERS ${KIO_INSTALL_HEADERS}
+ kfile/kfilesharedialog.h
+ )
+endif( NOT WIN32 )
+
if(NOT KDE_NO_DEPRECATED)
-install( FILES
- bookmarks/kbookmarkimporter_crash.h
- kfile/kdiskfreespace.h
- kio/kmimetyperesolver.h
- DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel)
-
-install( FILES
- kio/passworddialog.h
- DESTINATION ${INCLUDE_INSTALL_DIR}/kio COMPONENT Devel)
+ set(KIO_INSTALL_HEADERS ${KIO_INSTALL_HEADERS}
+ bookmarks/kbookmarkimporter_crash.h
+ kfile/kdiskfreespace.h
+ kio/kmimetyperesolver.h
+ )
+ set(KIO_KIO_INSTALL_HEADERS ${KIO_KIO_INSTALL_HEADERS}
+ kio/passworddialog.h
+ )
endif(NOT KDE_NO_DEPRECATED)
if(NOT KIO_NO_SOLID)
-install( FILES
- kfile/kdevicelistmodel.h
- kio/kstatusbarofflineindicator.h
- DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel)
+ set(KIO_INSTALL_HEADERS ${KIO_INSTALL_HEADERS}
+ kfile/kdevicelistmodel.h
+ kio/kstatusbarofflineindicator.h
+ )
endif(NOT KIO_NO_SOLID)
+install(FILES ${KIO_KIO_INSTALL_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/kio \
COMPONENT Devel) +install(FILES ${KIO_INSTALL_HEADERS} DESTINATION \
${INCLUDE_INSTALL_DIR} COMPONENT Devel) +
install(FILES
kio/org.kde.KDirNotify.xml
kio/org.kde.kio.FileUndoManager.xml
DESTINATION ${DBUS_INTERFACES_INSTALL_DIR})
+install(FILES kio/accept-languages.codes DESTINATION ${CONFIG_INSTALL_DIR})
-install(FILES kio/accept-languages.codes DESTINATION ${CONFIG_INSTALL_DIR})
+add_subdirectory( tests )
Index: kio/tests/CMakeLists.txt
===================================================================
--- kio/tests/CMakeLists.txt (revision 1201251)
+++ kio/tests/CMakeLists.txt (working copy)
@@ -69,3 +69,11 @@
kde4_add_executable(kfstest TEST ${kfstest_SRCS})
target_link_libraries(kfstest ${KDE4_KIO_LIBS} )
+## Test for compiling all headers ##
+
+if (KDE4_BUILD_TESTS)
+ include(MacroHeaderCompilationTest)
+ macro_header_compilation_test(${KIO_INSTALL_HEADERS} ${KIO_KIO_INSTALL_HEADERS})
+endif (KDE4_BUILD_TESTS)
+
+
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic