Skip to content

Commit 4435982

Browse files
memshardedczoido
andauthored
tool_requires with different version (#97)
* tool_requires with different version * check conan version --------- Co-authored-by: czoido <[email protected]>
1 parent 17d5ef1 commit 4435982

File tree

9 files changed

+108
-0
lines changed

9 files changed

+108
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,5 @@ Sources for the [examples section](https://docs.conan.io/2/examples.html) of the
2727
### [Conan configuration files](examples/config_files)
2828

2929
### [Libraries examples](examples/libraries)
30+
31+
### [Graph examples](examples/graph)

examples/graph/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Conan graph examples
2+
3+
### [Examples using tool_requires](tool_requires)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Conan tool_requires examples
2+
3+
### [Using 2 different versions of the same tool-require in the same consumer package](different_versions)
4+
5+
### [Using the same version of the same tool-require with different options in the same consumer package](different_options)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import os
2+
from conan import ConanFile
3+
from conan.tools.files import save
4+
5+
class Pkg(ConanFile):
6+
name = "gcc"
7+
version = "1.0"
8+
options = {"myoption": [1, 2]}
9+
10+
def package(self):
11+
# This fake compiler will print something different based on the option
12+
echo = f"@echo off\necho MYGCC={self.options.myoption}!!"
13+
save(self, os.path.join(self.package_folder, "bin", f"mygcc{self.options.myoption}.bat"), echo)
14+
save(self, os.path.join(self.package_folder, "bin", f"mygcc{self.options.myoption}.sh"), echo)
15+
os.chmod(os.path.join(self.package_folder, "bin", f"mygcc{self.options.myoption}.sh"), 0o777)
16+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from conan import conan_version
2+
from test.examples_tools import run
3+
4+
5+
if conan_version >= "2.0.5":
6+
run("conan create gcc -o myoption=1")
7+
run("conan create gcc -o myoption=2")
8+
9+
output = run("conan create wine")
10+
assert "MYGCC=1!!" in output
11+
assert "MYGCC=2!!" in output
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import os, platform
2+
from conan import ConanFile
3+
from conan.tools.files import save, chdir
4+
5+
class Pkg(ConanFile):
6+
name = "wine"
7+
version = "1.0"
8+
9+
def build_requirements(self):
10+
self.tool_requires("gcc/1.0", run=False, options={"myoption": 1})
11+
self.tool_requires("gcc/1.0", run=False, options={"myoption": 2})
12+
13+
def generate(self):
14+
gcc1 = self.dependencies.build.get("gcc", options={"myoption": 1})
15+
assert gcc1.options.myoption == "1"
16+
gcc2 = self.dependencies.build.get("gcc", options={"myoption": 2})
17+
assert gcc2.options.myoption == "2"
18+
19+
def build(self):
20+
ext = "bat" if platform.system() == "Windows" else "sh"
21+
self.run(f"mygcc1.{ext}")
22+
self.run(f"mygcc2.{ext}")
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import os
2+
from conan import ConanFile
3+
from conan.tools.files import save
4+
5+
6+
class Pkg(ConanFile):
7+
name = "gcc"
8+
9+
def package(self):
10+
echo = f"@echo off\necho MYGCC={self.version}!!"
11+
save(self, os.path.join(self.package_folder, "bin", f"mygcc{self.version}.bat"), echo)
12+
save(self, os.path.join(self.package_folder, "bin", f"mygcc{self.version}.sh"), echo)
13+
os.chmod(os.path.join(self.package_folder, "bin", f"mygcc{self.version}.sh"), 0o777)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from conan import conan_version
2+
from test.examples_tools import run
3+
4+
5+
if conan_version >= "2.0.5":
6+
run("conan create gcc --version=1.0")
7+
run("conan create gcc --version=2.0")
8+
9+
output = run("conan create wine")
10+
assert "MYGCC=1.0!!" in output
11+
assert "MYGCC=2.0!!" in output
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import os, platform
2+
from conan import ConanFile
3+
from conan.tools.files import save, chdir
4+
5+
6+
class Pkg(ConanFile):
7+
name = "wine"
8+
version = "1.0"
9+
10+
def build_requirements(self):
11+
# If we specify "run=False" they no longer conflict
12+
self.tool_requires("gcc/1.0", run=False)
13+
self.tool_requires("gcc/2.0", run=False)
14+
15+
def generate(self):
16+
# It is possible to individually reference each one
17+
gcc1 = self.dependencies.build["gcc/1.0"]
18+
assert gcc1.ref.version == "1.0"
19+
gcc2 = self.dependencies.build["gcc/2.0"]
20+
assert gcc2.ref.version == "2.0"
21+
22+
def build(self):
23+
ext = "bat" if platform.system() == "Windows" else "sh"
24+
self.run(f"mygcc1.0.{ext}")
25+
self.run(f"mygcc2.0.{ext}")

0 commit comments

Comments
 (0)