On 25/05/18 18:34, Christopher Larson wrote:
We should probably investigate if it's possible to shift those into do_fetch eventually. Contacting upstream during do_configure is not kosher.

The reason for fetching during configure is that the CMake build system in the git repository in question (later referred to as the "parent project") uses the ExternalProject keyword [1], which "creates a custom target to drive download, update/patch, configure, build, install and test steps of an external project" [1].

The external project that the aforementioned CMake build system uses is gtest (later referred to as the "child project"), which is many times built as part of a parent project. Usually git submodule is used to clone child projects, which works nicely with Bitbake with the gitsm fetcher. In this particular case the parent project uses the ExternalProject keyword instead, which is one of the options suggested in gtest's documentation [2]. While the parent project is not a public open source project, it is not in our direct control either and hence we cannot just change it to use git submodule instead.

Another option _might_ be to run CMake in two phases: the first pass would just run the ExternalProject keyword and the second the real configure step. We are not aware of a way to run CMake in multiple phases though. Also cmake.bbclass (currently) doesn't have anything related to the do_fetch step. Thirdly, I assume that running the ExternalProject keyword as the first pass during do_fetch would also configure and build the child project, which would then again conflict with Bitbake's later build steps such as do_configure and do_compile.

I think it would be a valid use case to support fetching by the ExternalProject keyword even during do_configure because a recipe maintainer does not necessarily have direct control over the upstream project.

If it is possible to resolve the issue e.g. by changing cmake.bbclass to call CMake differently or other means, any guidance is appreciated.

[1] https://cmake.org/cmake/help/latest/module/ExternalProject.html
[2] https://github.com/google/googletest/blob/master/googletest/README.md#incorporating-into-an-existing-cmake-project


Thanks,
--
Hannu Lounento
[email protected]


On Fri, May 25, 2018 at 5:52 AM Niko Mauno <[email protected] <mailto:[email protected]>> wrote:

    Update cmake_do_configure() to export a set SSH_AUTH_SOCK variable
    before calling cmake.

    Otherwise, if cmake call during cmake_do_configure() resorts to
    ExternalProject directive containing a GIT_REPOSITORY entry, and git
    authentication scheme is based on SSH agent forwarding, it fails
    followingly

       | Cloning into 'foo'...
       | Permission denied (publickey).
       | fatal: Could not read from remote repository.
       |
       | Please make sure you have the correct access rights
       | and the repository exists.
       |
       | ...
       |
       | CMake Error at .../tmp/foo-gitclone.cmake:66 (message):
       |   Failed to clone repository: 'ssh://...

    Signed-off-by: Niko Mauno <[email protected]
    <mailto:[email protected]>>
    ---
      meta/classes/cmake.bbclass | 5 +++++
      1 file changed, 5 insertions(+)

    diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
    index fcfd5dda4f..82d36be8ff 100644
    --- a/meta/classes/cmake.bbclass
    +++ b/meta/classes/cmake.bbclass
    @@ -137,6 +137,11 @@ cmake_do_configure() {
                     oecmake_sitefile=
             fi

    +       # Allow cmake to perform eg. git clone in context where
    authentication relies on SSH agent forwarding
    +       if [ "${SSH_AUTH_SOCK}" ] ; then
    +               export SSH_AUTH_SOCK=${SSH_AUTH_SOCK}
    +       fi
    +
             cmake \
               ${OECMAKE_GENERATOR_ARGS} \
               $oecmake_sitefile \
-- 2.11.0

-- _______________________________________________
    Openembedded-core mailing list
    [email protected]
    <mailto:[email protected]>
    http://lists.openembedded.org/mailman/listinfo/openembedded-core



--
Christopher Larson
kergoth at gmail dot com
Founder - BitBake, OpenEmbedded, OpenZaurus
Senior Software Engineer, Mentor Graphics


--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to