{"action":"created","issue":{"url":"https://api.github.com/repos/ginkgo-project/ginkgo/issues/176","repository_url":"https://api.github.com/repos/ginkgo-project/ginkgo","labels_url":"https://api.github.com/repos/ginkgo-project/ginkgo/issues/176/labels{/name}","comments_url":"https://api.github.com/repos/ginkgo-project/ginkgo/issues/176/comments","events_url":"https://api.github.com/repos/ginkgo-project/ginkgo/issues/176/events","html_url":"https://github.com/ginkgo-project/ginkgo/issues/176","id":388647908,"node_id":"MDU6SXNzdWUzODg2NDc5MDg=","number":176,"title":"Install include files to correct locations","user":{"login":"gflegar","id":1261711,"node_id":"MDQ6VXNlcjEyNjE3MTE=","avatar_url":"https://avatars1.githubusercontent.com/u/1261711?v=4","gravatar_id":"","url":"https://api.github.com/users/gflegar","html_url":"https://github.com/gflegar","followers_url":"https://api.github.com/users/gflegar/followers","following_url":"https://api.github.com/users/gflegar/following{/other_user}","gists_url":"https://api.github.com/users/gflegar/gists{/gist_id}","starred_url":"https://api.github.com/users/gflegar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gflegar/subscriptions","organizations_url":"https://api.github.com/users/gflegar/orgs","repos_url":"https://api.github.com/users/gflegar/repos","events_url":"https://api.github.com/users/gflegar/events{/privacy}","received_events_url":"https://api.github.com/users/gflegar/received_events","type":"User","site_admin":false},"labels":[{"id":967880084,"node_id":"MDU6TGFiZWw5Njc4ODAwODQ=","url":"https://api.github.com/repos/ginkgo-project/ginkgo/labels/Build","name":"Build","color":"2ea3f2","default":false},{"id":801859198,"node_id":"MDU6TGFiZWw4MDE4NTkxOTg=","url":"https://api.github.com/repos/ginkgo-project/ginkgo/labels/Enhancement","name":"Enhancement","color":"D1D100","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-12-07T13:07:58Z","updated_at":"2018-12-07T13:10:21Z","closed_at":null,"author_association":"MEMBER","body":"Currently, our includes files are installed into `${CMAKE_INSTALL_PREFIX}/include/{core,cuda,referece,omp}`. This can cause name clashes with other libraries (which may also do the wrong thing like we do). Instead we should install everything under `${CMAKE_INSTALL_PREFIX}/include/ginkgo/{core,cuda,reference,omp}`.\r\n\r\nHowever, doing that means that the files will have to be included as `<ginkgo/core/base/types.hpp>` in Ginkgo's headers and user applications. However, we currently include them as `<core/base/types.hpp>`, to make the include paths correct relative to the root of the Ginkgo repository (which is the include path used when developing ginkgo).\r\n\r\nTo fix this issue, we should create a subdirectory `include/ginkgo` in the root of the repository and move all public includes there (e.g. the file `core/base/types.hpp` should be moved to `include/ginkgo/core/base/types.hpp`). The `include/ginkgo.hpp` file should also be moved to `include/ginkgo/ginkgo.hpp`. Then, the list of include directories when compiling the library should be augmented with the `include/` directory. The includes in all Ginkgo's sources (including unit tests, examples, benchmarks, unit tests) that reference one of the public includes should be changes to an include compatible with the system include syntax (e.g. `#include \"core/base/types.hpp\"` should be replaced with `#include <ginkgo/core/base/types.hpp>`). Finally, the installation step of the build system should be changed to simply copy the `include/` folder to `${CMAKE_INSTALL_PREFIX}/include` instead of searching for the include files to copy in the source tree. It also has to be ensured that all automatically generated headers are installed to `${CMAKE_INSTALL_PREFIX}/include/ginkgo`.\r\n\r\nWhat follows is a list of all the __private__ Ginkgo headers, since they are easier to characterize than the public ones. Thus, every header from this list should __not__ be copied to the include folder, and stay where it is now. All other headers should be copied to the include folder.\r\n\r\n### List of private Ginkgo headers\r\n\r\n- anything that is not in the `core/` folder (e.g. everything in one of the kernel modules is private)\r\n- any header that ends with `_kernels.hpp`\r\n- everything in `core/synthesizer`\r\n- `core/base/exception_helpers.hpp`\r\n- `core/base/extended_float.hpp`\r\n- `core/base/name_demangling.hpp`\r\n- `core/preconditioner/jacobi_utils.hpp`\r\n\r\n__NOTE:__ It is possible that some of those headers are included in one of the public headers. If that is the case, we should check how difficult is it to remove the dependency. If not, we should do it immediately, otherwise, we temporarily copy the related private header to the public folder, and work towards removing the dependency later."},"comment":{"url":"https://api.github.com/repos/ginkgo-project/ginkgo/issues/comments/445228193","html_url":"https://github.com/ginkgo-project/ginkgo/issues/176#issuecomment-445228193","issue_url":"https://api.github.com/repos/ginkgo-project/ginkgo/issues/176","id":445228193,"node_id":"MDEyOklzc3VlQ29tbWVudDQ0NTIyODE5Mw==","user":{"login":"gflegar","id":1261711,"node_id":"MDQ6VXNlcjEyNjE3MTE=","avatar_url":"https://avatars1.githubusercontent.com/u/1261711?v=4","gravatar_id":"","url":"https://api.github.com/users/gflegar","html_url":"https://github.com/gflegar","followers_url":"https://api.github.com/users/gflegar/followers","following_url":"https://api.github.com/users/gflegar/following{/other_user}","gists_url":"https://api.github.com/users/gflegar/gists{/gist_id}","starred_url":"https://api.github.com/users/gflegar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gflegar/subscriptions","organizations_url":"https://api.github.com/users/gflegar/orgs","repos_url":"https://api.github.com/users/gflegar/repos","events_url":"https://api.github.com/users/gflegar/events{/privacy}","received_events_url":"https://api.github.com/users/gflegar/received_events","type":"User","site_admin":false},"created_at":"2018-12-07T13:10:21Z","updated_at":"2018-12-07T13:10:21Z","author_association":"MEMBER","body":"@hartwiganzt, @tcojean, @thoasm, @pratikvn summary of what has to be done for the install step.\r\nFiguring out which headers are which was not that difficult.\r\n\r\n@tcojean, double check if there are any private headers related to stopping criteria and loggers, since I'm not as familiar with that part of the code."}}
{"actor":{"display_login":"gflegar"}}