Git Product home page Git Product logo

Comments (5)

memsharded avatar memsharded commented on July 1, 2024

Hi @bkarasm

Trying to understand the issue. You mean that it is 100% mandatory that the project above is always inside a mylib folder in the file system, and that somehow the build system should add the parent directory of the mylib folder as include-dir?

And if that is the case, how would you build that in the Conan cache? because in the conan cache, for sure the mylib folder will not exist, so it is basically impossible to make it conan create in the Conan cache?

from conan.

bkarasm avatar bkarasm commented on July 1, 2024

Correct, if I clone the git repo for my development work, I'll clone into mylib but when I create a package mylib directory is not created in the conan cache. I could instruct git to clone into mylib subfolder inside conan cache. However, if I do that I would have to tell CMake that in conan build context CMakeLists.txt is in root folder and in conan create context it is in mylib subfolder.

I could probably check if the absolute path has $CONAN_HOME substring but I was hoping there is a different way.

from conan.

memsharded avatar memsharded commented on July 1, 2024

I could instruct git to clone into mylib subfolder inside conan cache.

I am not sure how this would be done. If the recipe contains a source() that downloads itself? Kind of a scm approach in https://docs.conan.io/2/examples/tools/scm/git/capture_scm/git_capture_scm.html?

I think it would be good to start with a recipe that can build this in the cache with conan create and try to understand from there how it could be built locally too.

from conan.

bkarasm avatar bkarasm commented on July 1, 2024

I have created a small repo with an example that shows the problem: https://github.com/bkarasm/mylib

I can't figure out how to setup the paths in conanfile so that both conan create and conan build work.

from conan.

memsharded avatar memsharded commented on July 1, 2024

Thanks for the repo.

I have been playing with it, and I think the problem is that the layout is ill-formed, and it won't have any elegant solution.

I have managed to make it work with:

diff --git a/conanfile.py b/conanfile.py
index 24efb46..e0045b0 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -1,6 +1,6 @@
 from conan import ConanFile
 from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout
-from conan.tools.files import update_conandata
+from conan.tools.files import update_conandata, save
 from conan.tools.scm import Git
 import os

@@ -33,12 +33,13 @@ class MyLibConan(ConanFile):
         )

     def layout(self):
-        return cmake_layout(self, src_folder="mylib")
+        cmake_layout(self)

     def source(self):
-        git = Git(self)
+        git = Git(self, folder="mylib")
         git.clone(url="[email protected]:bkarasm/mylib.git", target=".")
         git.checkout(commit=self.conan_data["sources"]["commit"])
+        save(self, "CMakeLists.txt", "add_subdirectory(mylib)")

The trick is to generate an extra CMakeLists.txt in the cache. There could be other similar tricks with the knowledge that source() will not run locally, only in the cache.
Still, it is a hack, and the recommendation would be to fix the #include "mylib/..." locally without a local "mylib" folder (excluding the parent clone folder)

from conan.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.