Skip to content

Commit

Permalink
Feature/markdown cmake gen info (#7690)
Browse files Browse the repository at this point in the history
* #7525 Show filenames in json

Signed-off-by: Uilian Ries <uilianries@gmail.com>

* #7525 Add basic test for markdown generator

Signed-off-by: Uilian Ries <uilianries@gmail.com>

* #7525 Re-use jinja instance

Signed-off-by: Uilian Ries <uilianries@gmail.com>

* #7525 Fix cmake find package name

Signed-off-by: Uilian Ries <uilianries@gmail.com>
  • Loading branch information
uilianries authored Sep 21, 2020
1 parent 1fd02ef commit 436450e
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 7 deletions.
2 changes: 1 addition & 1 deletion conans/client/generators/json_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def serialize_cpp_info(cpp_info):
"libs",
"system_libs",
"defines", "cflags", "cxxflags", "sharedlinkflags", "exelinkflags",
"frameworks", "framework_paths"
"frameworks", "framework_paths", "names", "filenames"
]
res = {}
for key in keys:
Expand Down
9 changes: 6 additions & 3 deletions conans/client/generators/markdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,18 +53,21 @@

generator_cmake_find_package_tpl = textwrap.dedent("""
### Generator ``cmake_find_package``
{% set cmake_find_package_name = cpp_info.get_name("cmake_find_package") %}
{% set cmake_find_package_filename = cpp_info.get_filename("cmake_find_package") %}
Generates the file Find{{ cmake_find_package_filename }}.cmake
Add these lines to your *CMakeLists.txt*:
```cmake
find_package({{ cpp_info.get_filename("cmake_find_package") }})
find_package({{ cmake_find_package_filename }})
# Use the global target
target_link_libraries(<library_name> {{ cpp_info.get_name("cmake_find_package") }}::{{ cpp_info.get_name("cmake_find_package") }})
target_link_libraries(<library_name> {{ cmake_find_package_name }}::{{ cmake_find_package_name }})
{% if cpp_info.components %}
# Or link just one of its components
{% for cmp_name, cmp_cpp_info in cpp_info.components.items() -%}
target_link_libraries(<library_name> {{ cpp_info.get_name("cmake_find_package") }}::{{ cmp_cpp_info.get_name("cmake_find_package") }})
target_link_libraries(<library_name> {{ cmake_find_package_name }}::{{ cmp_cpp_info.get_name("cmake_find_package") }})
{% endfor %}
{%- endif %}
```
Expand Down
30 changes: 27 additions & 3 deletions conans/test/functional/generators/json_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,14 @@ def test_multiconfig(self):
class Lib(ConanFile):
settings = "os", "arch"
generators = "json"
def package_info(self):
self.env_info.MY_ENV_VAR = "foo"
self.user_info.my_var = "my_value"
self.cpp_info.debug.defines = ["LIB_DEBUG"]
self.cpp_info.release.defines = ["LIB_RELEASE"]
self.cpp_info.debug.libs = ["Hello_d"]
self.cpp_info.release.libs = ["Hello"]
""")
Expand Down Expand Up @@ -139,3 +139,27 @@ def package_info(self):
my_json = json.loads(my_json)
self.assertListEqual(my_json["dependencies"][0]["libs"], ["LIB1"])
self.assertListEqual(my_json["dependencies"][0]["system_libs"], ["SYSTEM_LIB1"])

def test_generate_json_filenames(self):
conanfile = textwrap.dedent("""
from conans import ConanFile
class HelloConan(ConanFile):
def package_info(self):
self.cpp_info.filenames['cmake_find_package'] = 'FooBar'
self.cpp_info.names['cmake_find_package'] = 'foobar'
self.cpp_info.names['cmake_find_package_multi'] = 'foobar_multi'
self.cpp_info.names['pkg_config'] = 'foobar_cfg'
""")
client = TestClient()
client.save({"conanfile.py": conanfile})
client.run("create . bar/0.1.0@user/testing")
client.run("install bar/0.1.0@user/testing -g json")
conan_json = client.load("conanbuildinfo.json")
content = json.loads(conan_json)

deps = content["dependencies"][0]
self.assertEqual("foobar", deps["names"]["cmake_find_package"])
self.assertEqual("foobar_multi", deps["names"]["cmake_find_package_multi"])
self.assertEqual("foobar_cfg", deps["names"]["pkg_config"])
self.assertEqual("FooBar", deps["filenames"]["cmake_find_package"])
self.assertEqual("bar", deps["name"])
27 changes: 27 additions & 0 deletions conans/test/functional/generators/markdown_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import textwrap
import unittest

from conans.test.utils.tools import TestClient
from conans.client.tools.files import load


class MarkDownGeneratorTest(unittest.TestCase):

def test_cmake_find_filename(self):
conanfile = textwrap.dedent("""
from conans import ConanFile
class HelloConan(ConanFile):
def package_info(self):
self.cpp_info.filenames['cmake_find_package'] = 'FooBar'
self.cpp_info.names['cmake_find_package'] = 'foobar'
self.cpp_info.names['cmake_find_package_multi'] = 'foobar_multi'
self.cpp_info.names['pkg_config'] = 'foobar_cfg'
""")
client = TestClient()
client.save({"conanfile.py": conanfile})
client.run("create . bar/0.1.0@user/testing")
client.run("install bar/0.1.0@user/testing -g markdown")
content = client.load("bar.md")

self.assertIn("Generates the file FindFooBar.cmake", content)
self.assertIn("find_package(FooBar)", content)

0 comments on commit 436450e

Please sign in to comment.