Bug 417202

Summary: CMake: switch from server mode to file-api
Product: [Applications] kdevelop Reporter: Ben Boeckel <bugzilla.kde>
Component: Build tools: CMakeAssignee: kdevelop-bugs-null
Status: RESOLVED FIXED    
Severity: normal    
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Ben Boeckel 2020-02-05 18:34:55 UTC
SUMMARY

It appears as though KDevelop is still relying on CMake's server mode.  The server mode was superseded in CMake 3.14 by the file-api.  Furthermore, the server mode was deprecated in CMake 3.15 and will soon be removed.  KDevelop should be updated to use the file-api instead.  Doing so may also address some of the other CMake-related issues that are open.

Release note announcing the change: https://cmake.org/cmake/help/latest/release/3.14.html#file-based-api
Blog post: https://blog.kitware.com/cmake-3-14-0-available-for-download/
file api docs: https://cmake.org/cmake/help/latest/manual/cmake-file-api.7.html
Comment 1 Milian Wolff 2020-02-06 16:15:15 UTC
sigh yes very true... thanks for reminding us.
Comment 2 Milian Wolff 2020-02-08 16:39:58 UTC
I've started working on this now over at https://invent.kde.org/mwolff/kdevelop/commits/cmake-file-api
Comment 3 Milian Wolff 2020-02-09 21:13:57 UTC
OK, the branch is now ready for testing. There are some things left to be done, most notably support for runtimes (docker etc). I'll also have to test it on a real world project outside the unit tests now.
Comment 4 Milian Wolff 2020-02-20 12:36:59 UTC
Git commit d38ae65bc3b5304e13fd641b4971939e67f70d09 by Milian Wolff.
Committed on 14/02/2020 at 09:23.
Pushed by mwolff into branch 'master'.

Start implementation of cmake-file-api support

Before long, upstream cmake will remove the server support. Instead,
the new cmake-file-api is supposed to be used. This patch adds the
first baby steps towards that goal. We now write a query file to
the required location before running the cmake configure job. Then
we can look for the latest available index reply file that belongs
to our client request.

See:
https://cmake.org/cmake/help/latest/manual/cmake-file-api.7.html

M  +1    -0    plugins/cmake/CMakeLists.txt
A  +97   -0    plugins/cmake/cmakefileapi.cpp     [License: LGPL (v2+)]
A  +50   -0    plugins/cmake/cmakefileapi.h     [License: LGPL (v2+)]
M  +1    -0    plugins/cmake/tests/CMakeLists.txt
A  +89   -0    plugins/cmake/tests/test_cmakefileapi.cpp     [License: LGPL (v2+)]
M  +3    -1    plugins/cmakebuilder/cmakejob.cpp

https://invent.kde.org/kde/kdevelop/commit/d38ae65bc3b5304e13fd641b4971939e67f70d09
Comment 5 Milian Wolff 2020-02-20 12:36:59 UTC
Git commit 958bc087cc1804a054be553f1c81a325590afb12 by Milian Wolff.
Committed on 14/02/2020 at 09:23.
Pushed by mwolff into branch 'master'.

Actually parse the cmake-file-api response files

For now, this is only done in the unit test. We are also lacking
support for runtimes, as I first want to clarify how this is
supposed to be done and tested.

M  +158  -2    plugins/cmake/cmakefileapi.cpp
M  +16   -0    plugins/cmake/cmakefileapi.h
M  +27   -1    plugins/cmake/tests/test_cmakefileapi.cpp

https://invent.kde.org/kde/kdevelop/commit/958bc087cc1804a054be553f1c81a325590afb12
Comment 6 Milian Wolff 2020-02-20 12:36:59 UTC
Git commit 76ddc001950321190def89d2894cf452dd825870 by Milian Wolff.
Committed on 14/02/2020 at 09:23.
Pushed by mwolff into branch 'master'.

Actually use the cmake-file-api for project import, if possible

M  +1    -0    plugins/cmake/CMakeLists.txt
M  +1    -1    plugins/cmake/cmakefileapi.cpp
A  +72   -0    plugins/cmake/cmakefileapiimportjob.cpp     [License: LGPL (v2+)]
A  +52   -0    plugins/cmake/cmakefileapiimportjob.h     [License: LGPL (v2+)]
M  +24   -3    plugins/cmake/cmakemanager.cpp

https://invent.kde.org/kde/kdevelop/commit/76ddc001950321190def89d2894cf452dd825870