Review Request 128272: support -iframework and -F header search path options

René J.V. Bertin rjvbertin at gmail.com
Sat Jun 25 11:41:22 UTC 2016


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/128272/
-----------------------------------------------------------

(Updated June 25, 2016, 1:41 p.m.)


Review request for KDE Software on Mac OS X and KDevelop.


Changes
-------

This is the first working prototype. After all the trivial-but-tedious changes it was almost an anticlimax to see it work.

I don't really understand but it turns out to be necessary to add the system framework paths explicitly (`/Library/Frameworks` and `/System/Library/Frameworks`, in that order). Clang searches there by default when used as a compiler, but apparently it does not when used for parsing. To avoid yet more duplicatin I've implemented that default path via a `ClangParsingEnvironment` ctor, but only on OS X.

System SDK header files are now found in the default locations, which isn't necessarily the absolutely correct place to search. For parsing it ought to do most of the time but support for the `-isysroot` argument will need to be considered as a future modification (= a priori as a separate patch after committing and testing the current patch in the wild).


Repository: kdevelop


Description
-------

This is a draft implementation for parser support of the `-iframework dir` and `-F dir` compiler arguments. On OS X these are the framework equivalents of `-isystem` and `-I` respectively, telling the compiler and/or linker where to find framework bundles.

I started out making the new code available on OS X only but that introduces a lot of #ifdefs for probably little benefit. On the contrary, clang supports the arguments on Linux too, presumably because clang is a functional cross-compiler that can generate Darwin Mach-O object files on Linux too.

For the 1st approach I propose to parse the framework directories, adding the effective header directories of the individual frameworks as if they were added explicitly. The framework directories are also added to a new list in the result structure. I presume that this is a prerequisite for adding them to the (lib)clang arguments of the clang parser.


Diffs (updated)
-----

  languages/clang/clangparsejob.cpp 8375eb5 
  languages/clang/duchain/clangparsingenvironment.h c689132 
  languages/clang/duchain/clangparsingenvironment.cpp b515037 
  languages/clang/duchain/parsesession.cpp aae0661 
  languages/plugins/custom-definesandincludes/CMakeLists.txt 5a6c5b7 
  languages/plugins/custom-definesandincludes/compilerprovider/compilerprovider.h 7a5184f 
  languages/plugins/custom-definesandincludes/compilerprovider/compilerprovider.cpp 24e532a 
  languages/plugins/custom-definesandincludes/definesandincludesmanager.h 6d0d210 
  languages/plugins/custom-definesandincludes/definesandincludesmanager.cpp ebceb4d 
  languages/plugins/custom-definesandincludes/idefinesandincludesmanager.h 5da71f2 
  projectmanagers/cmake/cmakeimportjsonjob.cpp f064647 
  projectmanagers/cmake/cmakemanager.h 3096b7d 
  projectmanagers/cmake/cmakemanager.cpp 5c15e2f 
  projectmanagers/cmake/cmakeprojectdata.h 60e8773 
  projectmanagers/custom-buildsystem/custombuildsystemplugin.h 372b283 
  projectmanagers/custom-buildsystem/custombuildsystemplugin.cpp b04647e 
  projectmanagers/custommake/custommakemanager.h 33c2997 
  projectmanagers/custommake/custommakemanager.cpp e2ce943 
  projectmanagers/custommake/makefileresolver/makefileresolver.h debe977 
  projectmanagers/custommake/makefileresolver/makefileresolver.cpp 97973d4 
  projectmanagers/custommake/makefileresolver/tests/test_custommake.h 3ad0f36 
  projectmanagers/custommake/makefileresolver/tests/test_custommake.cpp 368e83e 
  projectmanagers/qmake/qmakemanager.h e5e3266 
  projectmanagers/qmake/qmakemanager.cpp 123b474 

Diff: https://git.reviewboard.kde.org/r/128272/diff/


Testing (updated)
-------

the unittest works as expected on OS X.

20160625: the patch works as expected on OS X. The `-iframework /opt/local/libexec/qt5/Library/Frameworks` argument added by cmake to each compiler invocation is detected and put to use; Qt header files are found in the frameworks without a wrapper Qt5 header directory (`/opt/local/include/qt5`) added to the header search path. Header files from the system SDKs are found too


File Attachments
----------------

the real companion patch for kdevplatform
  https://git.reviewboard.kde.org/media/uploaded/files/2016/06/22/67189f62-ec2c-4797-a315-cafc44fbbb6d__patch-support-kdevp-frameworks.diff


Thanks,

René J.V. Bertin

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20160625/a5840cae/attachment.html>


More information about the KDevelop-devel mailing list