def variables_setup_test(self): conanfile = ConanFile(TestBufferConanOutput(), None) conanfile.initialize(Settings({}), EnvValues()) ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder1") cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder2") cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cppflags = ["-cppflag"] cpp_info.public_deps = ["MyPkg"] conanfile.deps_cpp_info.update(cpp_info, ref.name) generator = JsonGenerator(conanfile) json_out = generator.content parsed = json.loads(json_out) dependencies = parsed["dependencies"] self.assertEquals(len(dependencies), 2) my_pkg = dependencies[0] self.assertEquals(my_pkg["name"], "MyPkg") self.assertEquals(my_pkg["description"], "My cool description") self.assertEquals(my_pkg["defines"], ["MYDEFINE1"])
def extend(cpp_info, config): """ adds the specific config configuration to the common one """ config_info = cpp_info.configs.get(config) if config_info: def add_lists(seq1, seq2): return seq1 + [s for s in seq2 if s not in seq1] result = CppInfo(str(config_info), config_info.rootpath) result.filter_empty = cpp_info.filter_empty result.includedirs = add_lists(cpp_info.includedirs, config_info.includedirs) result.libdirs = add_lists(cpp_info.libdirs, config_info.libdirs) result.bindirs = add_lists(cpp_info.bindirs, config_info.bindirs) result.resdirs = add_lists(cpp_info.resdirs, config_info.resdirs) result.builddirs = add_lists(cpp_info.builddirs, config_info.builddirs) result.libs = cpp_info.libs + config_info.libs result.defines = cpp_info.defines + config_info.defines result.cflags = cpp_info.cflags + config_info.cflags result.cxxflags = cpp_info.cxxflags + config_info.cxxflags result.sharedlinkflags = cpp_info.sharedlinkflags + config_info.sharedlinkflags result.exelinkflags = cpp_info.exelinkflags + config_info.exelinkflags result.system_libs = add_lists(cpp_info.system_libs, config_info.system_libs) result.build_modules = merge_dicts(cpp_info.build_modules, config_info.build_modules) return result return cpp_info
def variables_setup_test(self): conanfile = ConanFile(None, None, Settings({}), None) ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder1") cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder2") cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cppflags = ["-cppflag"] cpp_info.public_deps = ["MyPkg"] conanfile.deps_cpp_info.update(cpp_info, ref.name) generator = JsonGenerator(conanfile) json_out = generator.content parsed = json.loads(json_out) dependencies = parsed["dependencies"] self.assertEquals(len(dependencies), 2) my_pkg = dependencies[0] self.assertEquals(my_pkg["name"], "MyPkg") self.assertEquals(my_pkg["description"], "My cool description") self.assertEquals(my_pkg["defines"], ["MYDEFINE1"])
def test_cmake_find_package_multi_links_flags(): # https://github.com/conan-io/conan/issues/8703 conanfile = ConanFile(Mock(), None) conanfile.settings = "os", "compiler", "build_type", "arch" conanfile.initialize( Settings({ "os": ["Windows"], "compiler": ["gcc"], "build_type": ["Release"], "arch": ["x86"] }), EnvValues()) conanfile.settings.build_type = "Release" conanfile.settings.arch = "x86" cpp_info = CppInfo("mypkg", "dummy_root_folder1") cpp_info.sharedlinkflags = ["/NODEFAULTLIB", "/OTHERFLAG"] cpp_info.exelinkflags = ["/OPT:NOICF"] conanfile.deps_cpp_info.add("mypkg", cpp_info) gen = CMakeFindPackageMultiGenerator(conanfile) files = gen.content d = files["mypkgTarget-release.cmake"] assert "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:-OPT:NOICF>" in d assert "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:-NODEFAULTLIB;-OTHERFLAG>" in d assert "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:-NODEFAULTLIB;-OTHERFLAG>" in d
def test_cmake_deps_links_flags(): # https://github.com/conan-io/conan/issues/8703 conanfile = ConanFile(Mock(), None) conanfile._conan_node = Mock() conanfile._conan_node.context = "host" conanfile.settings = "os", "compiler", "build_type", "arch" conanfile.initialize(Settings({"os": ["Windows"], "compiler": ["gcc"], "build_type": ["Release"], "arch": ["x86"]}), EnvValues()) conanfile.settings.build_type = "Release" conanfile.settings.arch = "x86" cpp_info = CppInfo("mypkg", "dummy_root_folder1") # https://github.com/conan-io/conan/issues/8811 regression, fix with explicit - instead of / cpp_info.sharedlinkflags = ["-NODEFAULTLIB", "-OTHERFLAG"] cpp_info.exelinkflags = ["-OPT:NOICF"] conanfile_dep = ConanFile(Mock(), None) conanfile_dep.cpp_info = cpp_info conanfile_dep._conan_node = Mock() conanfile_dep._conan_node.ref = ConanFileReference.loads("mypkg/1.0") conanfile_dep._conan_node.context = "host" conanfile_dep.package_folder = "/path/to/folder_dep" with mock.patch('conans.ConanFile.dependencies', new_callable=mock.PropertyMock) as mock_deps: req = Requirement(ConanFileReference.loads("OriginalDepName/1.0")) mock_deps.return_value = ConanFileDependencies({req: ConanFileInterface(conanfile_dep)}) cmakedeps = CMakeDeps(conanfile) files = cmakedeps.content data_cmake = files["mypkg-release-x86-data.cmake"] assert "set(mypkg_SHARED_LINK_FLAGS_RELEASE -NODEFAULTLIB;-OTHERFLAG)" in data_cmake assert "set(mypkg_EXE_LINK_FLAGS_RELEASE -OPT:NOICF)" in data_cmake
def get_cpp_info(name): cppinfo = CppInfo("{}/1.0".format(name), "/tmp/root") cppinfo.includedirs = [] cppinfo.includedirs.append("path/includes/{}".format(name)) cppinfo.includedirs.append("other\\include\\path\\{}".format(name)) # To test some path in win, to be used with MinGW make or MSYS etc cppinfo.libdirs = [] cppinfo.libdirs.append("one\\lib\\path\\{}".format(name)) cppinfo.libs = [] cppinfo.libs.append("{}_onelib".format(name)) cppinfo.libs.append("{}_twolib".format(name)) cppinfo.defines = [] cppinfo.defines.append("{}_onedefinition".format(name)) cppinfo.defines.append("{}_twodefinition".format(name)) cppinfo.cflags = ["{}_a_c_flag".format(name)] cppinfo.cxxflags = ["{}_a_cxx_flag".format(name)] cppinfo.sharedlinkflags = ["{}_shared_link_flag".format(name)] cppinfo.exelinkflags = ["{}_exe_link_flag".format(name)] cppinfo.sysroot = "/path/to/folder/{}".format(name) cppinfo.frameworks = [] cppinfo.frameworks.append("{}_oneframework".format(name)) cppinfo.frameworks.append("{}_twoframework".format(name)) cppinfo.system_libs = [] cppinfo.system_libs.append("{}_onesystemlib".format(name)) cppinfo.system_libs.append("{}_twosystemlib".format(name)) cppinfo.frameworkdirs = [] cppinfo.frameworkdirs.append("one/framework/path/{}".format(name)) return cppinfo
def variables_setup_test(self): conanfile = ConanFile(TestBufferConanOutput(), None) conanfile.initialize(Settings({}), EnvValues()) ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder1") cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" cpp_info.libs = ["MyLib1"] conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder2") cpp_info.libs = ["MyLib2"] cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cxxflags = ["-cxxflag"] cpp_info.public_deps = ["MyPkg"] cpp_info.lib_paths.extend( ["Path\\with\\slashes", "regular/path/to/dir"]) cpp_info.include_paths.extend( ["other\\Path\\with\\slashes", "other/regular/path/to/dir"]) conanfile.deps_cpp_info.update(cpp_info, ref.name) generator = BoostBuildGenerator(conanfile) self.assertEqual( generator.content, """lib MyLib1 : : # requirements <name>MyLib1 : # default-build : # usage-requirements <define>MYDEFINE1 <cflags>-Flag1=23 ; lib MyLib2 : : # requirements <name>MyLib2 <search>Path/with/slashes <search>regular/path/to/dir : # default-build : # usage-requirements <define>MYDEFINE2 <include>other/Path/with/slashes <include>other/regular/path/to/dir <cxxflags>-cxxflag <ldflags>-sharedlinkflag ; alias conan-deps : MyLib1 MyLib2 ; """)
def setUp(self): self.tmp_folder1 = temp_folder() self.tmp_folder2 = temp_folder() save(os.path.join(self.tmp_folder1, "include1", "file.h"), "") save(os.path.join(self.tmp_folder2, "include2", "file.h"), "") save(os.path.join(self.tmp_folder1, "lib1", "file.a"), "") save(os.path.join(self.tmp_folder2, "lib2", "file.a"), "") save(os.path.join(self.tmp_folder1, "bin1", "file.bin"), "") save(os.path.join(self.tmp_folder2, "bin2", "file.bin"), "") self.conanfile = ConanFile(TestBufferConanOutput(), None) self.conanfile.initialize(Settings({}), EnvValues()) ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables") cpp_info = CppInfo(self.tmp_folder1) cpp_info.defines = ["MYDEFINE1"] cpp_info.includedirs = ['include1'] cpp_info.libdirs = ['lib1'] cpp_info.libs = ['libfoo'] cpp_info.system_libs = ['syslib1'] cpp_info.bindirs = ['bin1'] cpp_info.version = "0.1" cpp_info.cflags = ['-fPIC'] cpp_info.cxxflags = ['-fPIE'] cpp_info.sharedlinkflags = ['-framework Cocoa'] cpp_info.exelinkflags = ['-framework QuartzCore'] self.conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/3.2.3@lasote/stables") cpp_info = CppInfo(self.tmp_folder2) cpp_info.defines = ["MYDEFINE2"] cpp_info.includedirs = ['include2'] cpp_info.libdirs = ['lib2'] cpp_info.libs = ['libbar'] cpp_info.system_libs = ['syslib2'] cpp_info.bindirs = ['bin2'] cpp_info.version = "3.2.3" cpp_info.cflags = ['-mtune=native'] cpp_info.cxxflags = ['-march=native'] cpp_info.sharedlinkflags = [ '-framework AudioFoundation', '-framework "Some Spaced Framework"' ] cpp_info.exelinkflags = [ '-framework VideoToolbox', '-framework "Other Spaced Framework"' ] self.conanfile.deps_cpp_info.update(cpp_info, ref.name)
def variables_setup_test(self): conanfile = ConanFile(None, None, Settings({}), None) ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder1") cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" cpp_info.libs = ["MyLib1"] conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder2") cpp_info.libs = ["MyLib2"] cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cppflags = ["-cppflag"] cpp_info.public_deps = ["MyPkg"] cpp_info.lib_paths.extend(["Path\\with\\slashes", "regular/path/to/dir"]) cpp_info.include_paths.extend(["other\\Path\\with\\slashes", "other/regular/path/to/dir"]) conanfile.deps_cpp_info.update(cpp_info, ref.name) generator = BoostBuildGenerator(conanfile) self.assertEquals(generator.content, """lib MyLib1 : : # requirements <name>MyLib1 : # default-build : # usage-requirements <define>MYDEFINE1 <cflags>-Flag1=23 ; lib MyLib2 : : # requirements <name>MyLib2 <search>Path/with/slashes <search>regular/path/to/dir : # default-build : # usage-requirements <define>MYDEFINE2 <include>other/Path/with/slashes <include>other/regular/path/to/dir <cxxflags>-cppflag <ldflags>-sharedlinkflag ; alias conan-deps : MyLib1 MyLib2 ; """)
def test_exelinkflags(self): conanfile = ConanFile(Mock(), None) conanfile.initialize(Settings({}), EnvValues()) framework_path = os.getcwd() # must exist, otherwise filtered by framework_paths cpp_info = CppInfo("MyPkg", "/rootpath") cpp_info.exelinkflags = ["-llibrary_for_exe"] conanfile.deps_cpp_info.add("MyPkg", DepCppInfo(cpp_info)) generator = QmakeGenerator(conanfile) content = generator.content qmake_lines = content.splitlines() self.assertIn('CONAN_QMAKE_LFLAGS_APP += -llibrary_for_exe', qmake_lines)
def variables_setup_test(self): conanfile = ConanFile(None, None, Settings({}), None) ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder1") cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder2") cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cppflags = ["-cppflag"] cpp_info.public_deps = ["MyPkg"] conanfile.deps_cpp_info.update(cpp_info, ref.name) generator = PkgConfigGenerator(conanfile) files = generator.content self.assertEquals( files["MyPkg2.pc"], """prefix=dummy_root_folder2 libdir=${prefix}/lib includedir=${prefix}/include Name: MyPkg2 Description: Conan package: MyPkg2 Version: 2.3 Libs: -L${libdir} -sharedlinkflag -exelinkflag Cflags: -I${includedir} -cppflag -DMYDEFINE2 Requires: MyPkg """) self.assertEquals( files["MyPkg.pc"], """prefix=dummy_root_folder1 libdir=${prefix}/lib includedir=${prefix}/include Name: MyPkg Description: My cool description Version: 1.3 Libs: -L${libdir} Cflags: -I${includedir} -Flag1=23 -DMYDEFINE1 """)
def b2_test(self): settings = Settings.loads(get_default_settings_yml()) settings.os = "Linux" settings.compiler = "gcc" settings.compiler.version = "6.3" settings.arch = "x86" settings.build_type = "Release" settings.cppstd = "gnu17" conanfile = ConanFile(TestBufferConanOutput(), None) conanfile.initialize(Settings({}), EnvValues()) conanfile.settings = settings ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder1") cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" cpp_info.libs = ["MyLib1"] conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder2") cpp_info.libs = ["MyLib2"] cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cxxflags = ["-cxxflag"] cpp_info.public_deps = ["MyPkg"] cpp_info.libdirs.extend(["Path\\with\\slashes", "regular/path/to/dir"]) cpp_info.includedirs.extend( ["other\\Path\\with\\slashes", "other/regular/path/to/dir"]) cpp_info.filter_empty = False conanfile.deps_cpp_info.add(ref.name, cpp_info) generator = B2Generator(conanfile) content = { 'conanbuildinfo.jam': _main_buildinfo_full, 'conanbuildinfo-316f2f0b155dc874a672d40d98d93f95.jam': _variation_full, } for ck, cv in generator.content.items(): self.assertEqual(cv, content[ck])
def variables_setup_test(self): conanfile = ConanFile(None, None, Settings({}), None) ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder1") cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder2") cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cppflags = ["-cppflag"] cpp_info.public_deps = ["MyPkg"] conanfile.deps_cpp_info.update(cpp_info, ref.name) generator = PkgConfigGenerator(conanfile) files = generator.content self.assertEquals(files["MyPkg2.pc"], """prefix=dummy_root_folder2 libdir=${prefix}/lib includedir=${prefix}/include Name: MyPkg2 Description: Conan package: MyPkg2 Version: 2.3 Libs: -L${libdir} -sharedlinkflag -exelinkflag Cflags: -I${includedir} -cppflag -DMYDEFINE2 Requires: MyPkg """) self.assertEquals(files["MyPkg.pc"], """prefix=dummy_root_folder1 libdir=${prefix}/lib includedir=${prefix}/include Name: MyPkg Description: My cool description Version: 1.3 Libs: -L${libdir} Cflags: -I${includedir} -Flag1=23 -DMYDEFINE1 """)
def extend(cpp_info, config): """ adds the specific config configuration to the common one """ config_info = cpp_info.configs.get(config) if config_info: result = CppInfo(config_info.rootpath) result.includedirs = cpp_info.includedirs + config_info.includedirs result.libdirs = cpp_info.libdirs + config_info.libdirs result.bindirs = cpp_info.bindirs + config_info.bindirs result.resdirs = cpp_info.resdirs + config_info.resdirs result.builddirs = cpp_info.builddirs + config_info.builddirs result.libs = cpp_info.libs + config_info.libs result.defines = cpp_info.defines + config_info.defines result.cflags = cpp_info.cflags + config_info.cflags result.cppflags = cpp_info.cppflags + config_info.cppflags result.sharedlinkflags = cpp_info.sharedlinkflags + config_info.sharedlinkflags result.exelinkflags = cpp_info.exelinkflags + config_info.exelinkflags return result return cpp_info
def test_cmake_deps_links_flags(): # https://github.com/conan-io/conan/issues/8703 conanfile = ConanFile(Mock(), None) conanfile.settings = "os", "compiler", "build_type", "arch" conanfile.initialize(Settings({"os": ["Windows"], "compiler": ["gcc"], "build_type": ["Release"], "arch": ["x86"]}), EnvValues()) conanfile.settings.build_type = "Release" conanfile.settings.arch = "x86" cpp_info = CppInfo("mypkg", "dummy_root_folder1") cpp_info.sharedlinkflags = ["/NODEFAULTLIB", "/OTHERFLAG"] cpp_info.exelinkflags = ["/OPT:NOICF"] conanfile.deps_cpp_info.add("mypkg", cpp_info) cmakedeps = CMakeDeps(conanfile) files = cmakedeps.content data_cmake = files["mypkg-release-x86-data.cmake"] assert "set(mypkg_SHARED_LINK_FLAGS_RELEASE -NODEFAULTLIB;-OTHERFLAG)" in data_cmake assert "set(mypkg_EXE_LINK_FLAGS_RELEASE -OPT:NOICF)" in data_cmake
def b2_test(self): settings = Settings.loads(default_settings_yml) settings.os = "Linux" settings.compiler = "gcc" settings.compiler.version = "6.3" settings.arch = "x86" settings.build_type = "Release" settings.cppstd = "gnu17" conanfile = ConanFile(TestBufferConanOutput(), None) conanfile.initialize(Settings({}), EnvValues()) conanfile.settings = settings ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder1") cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" cpp_info.libs = ["MyLib1"] conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder2") cpp_info.libs = ["MyLib2"] cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cppflags = ["-cppflag"] cpp_info.public_deps = ["MyPkg"] cpp_info.lib_paths.extend( ["Path\\with\\slashes", "regular/path/to/dir"]) cpp_info.include_paths.extend( ["other\\Path\\with\\slashes", "other/regular/path/to/dir"]) conanfile.deps_cpp_info.update(cpp_info, ref.name) generator = B2Generator(conanfile) content = { 'conanbuildinfo.jam': '''#| B2 definitions for Conan packages. This is a generated file. Edit the corresponding conanfile.txt instead. |# import path ; import project ; import modules ; import feature ; local base-project = [ project.current ] ; local base-project-mod = [ $(base-project).project-module ] ; local base-project-location = [ project.attribute $(base-project-mod) location ] ; rule project-define ( id ) { id = $(id:L) ; local saved-project = [ modules.peek project : .base-project ] ; local id-location = [ path.join $(base-project-location) $(id) ] ; local id-mod = [ project.load $(id-location) : synthesize ] ; project.initialize $(id-mod) : $(id-location) ; project.inherit-attributes $(id-mod) : $(base-project-mod) ; local attributes = [ project.attributes $(id-mod) ] ; $(attributes).set parent-module : $(base-project-mod) : exact ; modules.poke $(base-project-mod) : $(id)-mod : $(id-mod) ; modules.poke [ CALLER_MODULE ] : $(id)-mod : $(id-mod) ; modules.poke project : .base-project : $(saved-project) ; IMPORT $(__name__) : constant-if call-in-project : $(id-mod) : constant-if call-in-project ; if [ project.is-jamroot-module $(base-project-mod) ] { use-project /$(id) : $(id) ; } return $(id-mod) ; } rule constant-if ( name : value * ) { if $(__define_constants__) && $(value) { call-in-project : constant $(name) : $(value) ; modules.poke $(__name__) : $(name) : [ modules.peek $(base-project-mod) : $(name) ] ; } } rule call-in-project ( project-mod ? : rule-name args * : * ) { project-mod ?= $(base-project-mod) ; project.push-current [ project.target $(project-mod) ] ; local result = [ modules.call-in $(project-mod) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) : $(10) : $(11) : $(12) : $(13) : $(14) : $(15) : $(16) : $(17) : $(18) : $(19) ] ; project.pop-current ; return $(result) ; } rule include-conanbuildinfo ( cbi ) { include $(cbi) ; } IMPORT $(__name__) : project-define constant-if call-in-project include-conanbuildinfo : $(base-project-mod) : project-define constant-if call-in-project include-conanbuildinfo ; if ! ( relwithdebinfo in [ feature.values variant ] ) { variant relwithdebinfo : : <optimization>speed <debug-symbols>on <inlining>full <runtime-debugging>off ; } if ! ( minsizerel in [ feature.values variant ] ) { variant minsizerel : : <optimization>space <debug-symbols>off <inlining>full <runtime-debugging>off ; } local __conanbuildinfo__ = [ GLOB $(__file__:D) : conanbuildinfo-*.jam : downcase ] ; { local __define_constants__ = yes ; for local __cbi__ in $(__conanbuildinfo__) { call-in-project : include-conanbuildinfo $(__cbi__) ; } } # mypkg # mypkg project-define mypkg ; # mypkg2 # mypkg2 project-define mypkg2 ; { local __define_targets__ = yes ; for local __cbi__ in $(__conanbuildinfo__) { call-in-project : include-conanbuildinfo $(__cbi__) ; } } ''', 'conanbuildinfo-316f2f0b155dc874a672d40d98d93f95.jam': '''#| B2 definitions for Conan packages. This is a generated file. Edit the corresponding conanfile.txt instead. |# # global constant-if rootpath(conan,32,x86,17,gnu,linux,gcc-6.3,release) : "" ; constant-if includedirs(conan,32,x86,17,gnu,linux,gcc-6.3,release) : "other/Path/with/slashes" "other/regular/path/to/dir" ; constant-if libdirs(conan,32,x86,17,gnu,linux,gcc-6.3,release) : "Path/with/slashes" "regular/path/to/dir" ; constant-if defines(conan,32,x86,17,gnu,linux,gcc-6.3,release) : "MYDEFINE2" "MYDEFINE1" ; constant-if cppflags(conan,32,x86,17,gnu,linux,gcc-6.3,release) : "-cppflag" ; constant-if cflags(conan,32,x86,17,gnu,linux,gcc-6.3,release) : "-Flag1=23" ; constant-if sharedlinkflags(conan,32,x86,17,gnu,linux,gcc-6.3,release) : "-sharedlinkflag" ; constant-if exelinkflags(conan,32,x86,17,gnu,linux,gcc-6.3,release) : "-exelinkflag" ; constant-if requirements(conan,32,x86,17,gnu,linux,gcc-6.3,release) : <address-model>32 <architecture>x86 <cxxstd>17 <cxxstd:dialect>gnu <target-os>linux <toolset>gcc-6.3 <variant>release ; constant-if usage-requirements(conan,32,x86,17,gnu,linux,gcc-6.3,release) : <include>$(includedirs(conan,32,x86,17,gnu,linux,gcc-6.3,release)) <define>$(defines(conan,32,x86,17,gnu,linux,gcc-6.3,release)) <cflags>$(cflags(conan,32,x86,17,gnu,linux,gcc-6.3,release)) <cxxflags>$(cppflags(conan,32,x86,17,gnu,linux,gcc-6.3,release)) <link>shared:<linkflags>$(sharedlinkflags(conan,32,x86,17,gnu,linux,gcc-6.3,release)) ; # mypkg constant-if rootpath(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) : "dummy_root_folder1" ; constant-if defines(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) : "MYDEFINE1" ; constant-if cflags(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) : "-Flag1=23" ; constant-if requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) : <address-model>32 <architecture>x86 <cxxstd>17 <cxxstd:dialect>gnu <target-os>linux <toolset>gcc-6.3 <variant>release ; constant-if usage-requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) : <include>$(includedirs(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) <define>$(defines(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) <cflags>$(cflags(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) <cxxflags>$(cppflags(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) <link>shared:<linkflags>$(sharedlinkflags(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) ; # mypkg2 constant-if rootpath(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) : "dummy_root_folder2" ; constant-if includedirs(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) : "other/Path/with/slashes" "other/regular/path/to/dir" ; constant-if libdirs(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) : "Path/with/slashes" "regular/path/to/dir" ; constant-if defines(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) : "MYDEFINE2" ; constant-if cppflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) : "-cppflag" ; constant-if sharedlinkflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) : "-sharedlinkflag" ; constant-if exelinkflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) : "-exelinkflag" ; constant-if requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) : <address-model>32 <architecture>x86 <cxxstd>17 <cxxstd:dialect>gnu <target-os>linux <toolset>gcc-6.3 <variant>release ; constant-if usage-requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) : <include>$(includedirs(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) <define>$(defines(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) <cflags>$(cflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) <cxxflags>$(cppflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) <link>shared:<linkflags>$(sharedlinkflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) ; # mypkg if $(__define_targets__) { call-in-project $(mypkg-mod) : lib MyLib1 : : <name>MyLib1 <search>$(libdirs(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) $(requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) : : $(usage-requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) ; call-in-project $(mypkg-mod) : explicit MyLib1 ; } if $(__define_targets__) { call-in-project $(mypkg-mod) : alias libs : MyLib1 : $(requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) : : $(usage-requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) ; call-in-project $(mypkg-mod) : explicit libs ; } # mypkg2 if $(__define_targets__) { call-in-project $(mypkg2-mod) : lib MyLib2 : : <name>MyLib2 <search>$(libdirs(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) $(requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) : : $(usage-requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) ; call-in-project $(mypkg2-mod) : explicit MyLib2 ; } if $(__define_targets__) { call-in-project $(mypkg2-mod) : alias libs : MyLib2 : $(requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) : : $(usage-requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) ; call-in-project $(mypkg2-mod) : explicit libs ; } ''', } for ck, cv in generator.content.items(): self.assertEquals(cv, content[ck])
def pkg_config_custom_names_test(self): conanfile = ConanFile(TestBufferConanOutput(), None) conanfile.initialize(Settings({}), EnvValues()) ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder1") cpp_info.name = "my_pkg" cpp_info.names["pkg_config"] = "my_pkg_custom_name" cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder1") cpp_info.name = "MYPKG1" cpp_info.names["pkg_config"] = "my_pkg1_custom_name" cpp_info.defines = ["MYDEFINE11"] cpp_info.cflags.append("-Flag1=21") cpp_info.version = "1.7" cpp_info.description = "My other cool description" conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder2") cpp_info.name = ref.name cpp_info.names["pkg_config"] = "my_pkg2_custom_name" cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cxxflags = ["-cxxflag"] cpp_info.public_deps = ["MyPkg", "MyPkg1"] conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("zlib/1.2.11@lasote/stable") cpp_info = CppInfo("dummy_root_folder_zlib") cpp_info.name = "ZLIB" cpp_info.defines = ["MYZLIBDEFINE2"] cpp_info.version = "1.2.11" conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("bzip2/0.1@lasote/stables") cpp_info = CppInfo("dummy_root_folder2") cpp_info.name = "BZip2" cpp_info.names["pkg_config"] = "BZip2" cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cxxflags = ["-cxxflag"] cpp_info.public_deps = ["MyPkg", "MyPkg1", "zlib"] conanfile.deps_cpp_info.update(cpp_info, ref.name) generator = PkgConfigGenerator(conanfile) files = generator.content self.assertEqual(files["my_pkg2_custom_name.pc"], """prefix=dummy_root_folder2 libdir=${prefix}/lib includedir=${prefix}/include Name: my_pkg2_custom_name Description: Conan package: my_pkg2_custom_name Version: 2.3 Libs: -L${libdir} -sharedlinkflag -exelinkflag Cflags: -I${includedir} -cxxflag -DMYDEFINE2 Requires: my_pkg_custom_name my_pkg1_custom_name """) self.assertEqual(files["my_pkg1_custom_name.pc"], """prefix=dummy_root_folder1 libdir=${prefix}/lib includedir=${prefix}/include Name: my_pkg1_custom_name Description: My other cool description Version: 1.7 Libs: -L${libdir} Cflags: -I${includedir} -Flag1=21 -DMYDEFINE11 """) self.assertEqual(files["my_pkg_custom_name.pc"], """prefix=dummy_root_folder1 libdir=${prefix}/lib includedir=${prefix}/include Name: my_pkg_custom_name Description: My cool description Version: 1.3 Libs: -L${libdir} Cflags: -I${includedir} -Flag1=23 -DMYDEFINE1 """) self.assertEqual(files["BZip2.pc"], """prefix=dummy_root_folder2 libdir=${prefix}/lib includedir=${prefix}/include Name: BZip2 Description: Conan package: BZip2 Version: 2.3 Libs: -L${libdir} -sharedlinkflag -exelinkflag Cflags: -I${includedir} -cxxflag -DMYDEFINE2 Requires: my_pkg_custom_name my_pkg1_custom_name zlib """)
def variables_setup_test(self): tmp_folder1 = temp_folder() tmp_folder2 = temp_folder() save(os.path.join(tmp_folder1, "include1", "file.h"), "") save(os.path.join(tmp_folder2, "include2", "file.h"), "") save(os.path.join(tmp_folder1, "lib1", "file.a"), "") save(os.path.join(tmp_folder2, "lib2", "file.a"), "") save(os.path.join(tmp_folder1, "bin1", "file.bin"), "") save(os.path.join(tmp_folder2, "bin2", "file.bin"), "") save(os.path.join(tmp_folder1, "SystemFrameworks", "file.bin"), "") conanfile = ConanFile(TestBufferConanOutput(), None) conanfile.initialize(Settings({}), EnvValues()) ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables") cpp_info = CppInfo(ref.name, tmp_folder1) cpp_info.defines = ["MYDEFINE1"] cpp_info.includedirs = ['include1'] cpp_info.libdirs = ['lib1'] cpp_info.libs = ['libfoo'] cpp_info.bindirs = ['bin1'] cpp_info.version = "0.1" cpp_info.cflags = ['-fgimple'] cpp_info.cxxflags = ['-fdollars-in-identifiers'] cpp_info.sharedlinkflags = ['-framework Cocoa'] cpp_info.exelinkflags = ['-framework QuartzCore'] cpp_info.frameworks = ['AudioUnit'] cpp_info.frameworkdirs = ['SystemFrameworks'] cpp_info.system_libs = ["system_lib1"] conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("MyPkg2/3.2.3@lasote/stables") cpp_info = CppInfo(ref.name, tmp_folder2) cpp_info.defines = ["MYDEFINE2"] cpp_info.includedirs = ['include2'] cpp_info.libdirs = ['lib2'] cpp_info.libs = ['libbar'] cpp_info.bindirs = ['bin2'] cpp_info.version = "3.2.3" cpp_info.cflags = ['-fno-asm'] cpp_info.cxxflags = ['-pthread'] cpp_info.sharedlinkflags = ['-framework AudioFoundation'] cpp_info.exelinkflags = ['-framework VideoToolbox'] cpp_info.system_libs = ["system_lib2"] conanfile.deps_cpp_info.add(ref.name, cpp_info) generator = MakeGenerator(conanfile) content = generator.content content_template = """ CONAN_ROOT_MYPKG1 ?= \\ {conan_root_mypkg1} CONAN_SYSROOT_MYPKG1 ?= \\ CONAN_INCLUDE_DIRS_MYPKG1 += \\ {conan_include_dirs_mypkg1} CONAN_LIB_DIRS_MYPKG1 += \\ {conan_lib_dirs_mypkg1} CONAN_BIN_DIRS_MYPKG1 += \\ {conan_bin_dirs_mypkg1} CONAN_BUILD_DIRS_MYPKG1 += \\ {conan_build_dirs_mypkg1} CONAN_RES_DIRS_MYPKG1 += \\ CONAN_LIBS_MYPKG1 += \\ libfoo CONAN_SYSTEM_LIBS_MYPKG1 += \\ system_lib1 CONAN_DEFINES_MYPKG1 += \\ MYDEFINE1 CONAN_CFLAGS_MYPKG1 += \\ -fgimple CONAN_CXXFLAGS_MYPKG1 += \\ -fdollars-in-identifiers CONAN_SHAREDLINKFLAGS_MYPKG1 += \\ -framework Cocoa CONAN_EXELINKFLAGS_MYPKG1 += \\ -framework QuartzCore CONAN_FRAMEWORKS_MYPKG1 += \\ AudioUnit CONAN_FRAMEWORK_PATHS_MYPKG1 += \\ {conan_framework_dirs_mypkg1} CONAN_ROOT_MYPKG2 ?= \\ {conan_root_mypkg2} CONAN_SYSROOT_MYPKG2 ?= \\ CONAN_INCLUDE_DIRS_MYPKG2 += \\ {conan_include_dirs_mypkg2} CONAN_LIB_DIRS_MYPKG2 += \\ {conan_lib_dirs_mypkg2} CONAN_BIN_DIRS_MYPKG2 += \\ {conan_bin_dirs_mypkg2} CONAN_BUILD_DIRS_MYPKG2 += \\ {conan_build_dirs_mypkg2} CONAN_RES_DIRS_MYPKG2 += \\ CONAN_LIBS_MYPKG2 += \\ libbar CONAN_SYSTEM_LIBS_MYPKG2 += \\ system_lib2 CONAN_DEFINES_MYPKG2 += \\ MYDEFINE2 CONAN_CFLAGS_MYPKG2 += \\ -fno-asm CONAN_CXXFLAGS_MYPKG2 += \\ -pthread CONAN_SHAREDLINKFLAGS_MYPKG2 += \\ -framework AudioFoundation CONAN_EXELINKFLAGS_MYPKG2 += \\ -framework VideoToolbox CONAN_FRAMEWORKS_MYPKG2 += \\ CONAN_FRAMEWORK_PATHS_MYPKG2 += \\ CONAN_ROOTPATH += \\ $(CONAN_ROOTPATH_MYPKG1) \\ $(CONAN_ROOTPATH_MYPKG2) CONAN_SYSROOT += \\ $(CONAN_SYSROOT_MYPKG1) \\ $(CONAN_SYSROOT_MYPKG2) CONAN_INCLUDE_DIRS += \\ $(CONAN_INCLUDE_DIRS_MYPKG1) \\ $(CONAN_INCLUDE_DIRS_MYPKG2) CONAN_LIB_DIRS += \\ $(CONAN_LIB_DIRS_MYPKG1) \\ $(CONAN_LIB_DIRS_MYPKG2) CONAN_BIN_DIRS += \\ $(CONAN_BIN_DIRS_MYPKG1) \\ $(CONAN_BIN_DIRS_MYPKG2) CONAN_BUILD_DIRS += \\ $(CONAN_BUILD_DIRS_MYPKG1) \\ $(CONAN_BUILD_DIRS_MYPKG2) CONAN_RES_DIRS += \\ $(CONAN_RES_DIRS_MYPKG1) \\ $(CONAN_RES_DIRS_MYPKG2) CONAN_LIBS += \\ $(CONAN_LIBS_MYPKG1) \\ $(CONAN_LIBS_MYPKG2) CONAN_DEFINES += \\ $(CONAN_DEFINES_MYPKG1) \\ $(CONAN_DEFINES_MYPKG2) CONAN_CFLAGS += \\ $(CONAN_CFLAGS_MYPKG1) \\ $(CONAN_CFLAGS_MYPKG2) CONAN_CXXFLAGS += \\ $(CONAN_CXXFLAGS_MYPKG1) \\ $(CONAN_CXXFLAGS_MYPKG2) CONAN_SHAREDLINKFLAGS += \\ $(CONAN_SHAREDLINKFLAGS_MYPKG1) \\ $(CONAN_SHAREDLINKFLAGS_MYPKG2) CONAN_EXELINKFLAGS += \\ $(CONAN_EXELINKFLAGS_MYPKG1) \\ $(CONAN_EXELINKFLAGS_MYPKG2) CONAN_FRAMEWORKS += \\ $(CONAN_FRAMEWORKS_MYPKG1) \\ $(CONAN_FRAMEWORKS_MYPKG2) CONAN_FRAMEWORK_PATHS += \\ $(CONAN_FRAMEWORK_PATHS_MYPKG1) \\ $(CONAN_FRAMEWORK_PATHS_MYPKG2) """ root1 = tmp_folder1.replace('\\', '/') root2 = tmp_folder2.replace('\\', '/') inc1 = os.path.join(tmp_folder1, 'include1').replace('\\', '/') inc2 = os.path.join(tmp_folder2, 'include2').replace('\\', '/') lib1 = os.path.join(tmp_folder1, 'lib1').replace('\\', '/') lib2 = os.path.join(tmp_folder2, 'lib2').replace('\\', '/') bin1 = os.path.join(tmp_folder1, 'bin1').replace('\\', '/') bin2 = os.path.join(tmp_folder2, 'bin2').replace('\\', '/') expected_content = content_template.format( conan_root_mypkg1=root1, conan_include_dirs_mypkg1=inc1, conan_lib_dirs_mypkg1=lib1, conan_bin_dirs_mypkg1=bin1, conan_build_dirs_mypkg1=root1 + "/", conan_root_mypkg2=root2, conan_include_dirs_mypkg2=inc2, conan_lib_dirs_mypkg2=lib2, conan_bin_dirs_mypkg2=bin2, conan_build_dirs_mypkg2=root2 + "/", conan_framework_dirs_mypkg1=root1 + "/SystemFrameworks") self.maxDiff = None self.assertIn(expected_content, content)
def variables_setup_test(self): tmp_folder1 = temp_folder() tmp_folder2 = temp_folder() save(os.path.join(tmp_folder1, "include1", "file.h"), "") save(os.path.join(tmp_folder2, "include2", "file.h"), "") save(os.path.join(tmp_folder1, "lib1", "file.a"), "") save(os.path.join(tmp_folder2, "lib2", "file.a"), "") save(os.path.join(tmp_folder1, "bin1", "file.bin"), "") save(os.path.join(tmp_folder2, "bin2", "file.bin"), "") conanfile = ConanFile(None, None) conanfile.initialize(Settings({}), EnvValues()) ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables") cpp_info = CppInfo(tmp_folder1) cpp_info.defines = ["MYDEFINE1"] cpp_info.includedirs = ['include1'] cpp_info.libdirs = ['lib1'] cpp_info.libs = ['libfoo'] cpp_info.bindirs = ['bin1'] cpp_info.version = "0.1" cpp_info.cflags = ['-fPIC'] cpp_info.cppflags = ['-fPIE'] cpp_info.sharedlinkflags = ['-framework Cocoa'] cpp_info.exelinkflags = ['-framework QuartzCore'] conanfile.deps_cpp_info.update(cpp_info, ref.name) ref = ConanFileReference.loads("MyPkg2/3.2.3@lasote/stables") cpp_info = CppInfo(tmp_folder2) cpp_info.defines = ["MYDEFINE2"] cpp_info.includedirs = ['include2'] cpp_info.libdirs = ['lib2'] cpp_info.libs = ['libbar'] cpp_info.bindirs = ['bin2'] cpp_info.version = "3.2.3" cpp_info.cflags = ['-mtune=native'] cpp_info.cppflags = ['-march=native'] cpp_info.sharedlinkflags = ['-framework AudioFoundation'] cpp_info.exelinkflags = ['-framework VideoToolbox'] conanfile.deps_cpp_info.update(cpp_info, ref.name) generator = PremakeGenerator(conanfile) content = generator.content self.assertIn('conan_cppdefines = {"MYDEFINE2", "MYDEFINE1"}', content) self.assertIn('conan_cppdefines_MyPkg1 = {"MYDEFINE1"}', content) self.assertIn('conan_cppdefines_MyPkg2 = {"MYDEFINE2"}', content) inc1 = os.path.join(tmp_folder1, 'include1').replace('\\', '/') inc2 = os.path.join(tmp_folder2, 'include2').replace('\\', '/') self.assertIn('conan_includedirs = {"%s",\n"%s"}' % (inc1, inc2), content) self.assertIn('conan_includedirs_MyPkg1 = {"%s"}' % inc1, content) self.assertIn('conan_includedirs_MyPkg2 = {"%s"}' % inc2, content) lib1 = os.path.join(tmp_folder1, 'lib1').replace('\\', '/') lib2 = os.path.join(tmp_folder2, 'lib2').replace('\\', '/') self.assertIn('conan_libdirs = {"%s",\n"%s"}' % (lib1, lib2), content) self.assertIn('conan_libdirs_MyPkg1 = {"%s"}' % lib1, content) self.assertIn('conan_libdirs_MyPkg2 = {"%s"}' % lib2, content) bin1 = os.path.join(tmp_folder1, 'bin1').replace('\\', '/') bin2 = os.path.join(tmp_folder2, 'bin2').replace('\\', '/') self.assertIn('conan_bindirs = {"%s",\n"%s"}' % (bin1, bin2), content) self.assertIn('conan_bindirs_MyPkg1 = {"%s"}' % bin1, content) self.assertIn('conan_bindirs_MyPkg2 = {"%s"}' % bin2, content) self.assertIn('conan_libs = {"libfoo", "libbar"}', content) self.assertIn('conan_libs_MyPkg1 = {"libfoo"}', content) self.assertIn('conan_libs_MyPkg2 = {"libbar"}', content) self.assertIn('conan_cflags = {"-mtune=native", "-fPIC"}', content) self.assertIn('conan_cflags_MyPkg1 = {"-fPIC"}', content) self.assertIn('conan_cflags_MyPkg2 = {"-mtune=native"}', content) self.assertIn('conan_cppflags = {"-march=native", "-fPIE"}', content) self.assertIn('conan_cppflags_MyPkg1 = {"-fPIE"}', content) self.assertIn('conan_cppflags_MyPkg2 = {"-march=native"}', content) self.assertIn( 'conan_sharedlinkflags = {"-framework AudioFoundation", "-framework Cocoa"}', content) self.assertIn('conan_sharedlinkflags_MyPkg1 = {"-framework Cocoa"}', content) self.assertIn( 'conan_sharedlinkflags_MyPkg2 = {"-framework AudioFoundation"}', content) self.assertIn( 'conan_exelinkflags = {"-framework VideoToolbox", "-framework QuartzCore"}', content) self.assertIn('conan_exelinkflags_MyPkg1 = {"-framework QuartzCore"}', content) self.assertIn( 'conan_exelinkflags_MyPkg2 = {"-framework VideoToolbox"}', content)
def variables_setup_test(self): conanfile = ConanFile(TestBufferConanOutput(), None) conanfile.initialize(Settings({}), EnvValues()) ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "/dummy_root_folder1") cpp_info.filter_empty = False cpp_info.name = "my_pkg" cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "/dummy_root_folder1") cpp_info.filter_empty = False cpp_info.name = "MYPKG1" cpp_info.defines = ["MYDEFINE11"] cpp_info.cflags.append("-Flag1=21") cpp_info.version = "1.7" cpp_info.description = "My other cool description" cpp_info.public_deps = ["MyPkg"] conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "/dummy_root_folder2") cpp_info.filter_empty = False cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cxxflags = ["-cxxflag"] cpp_info.public_deps = ["MyPkg"] conanfile.deps_cpp_info.add(ref.name, cpp_info) generator = PkgConfigGenerator(conanfile) files = generator.content self.assertEqual( files["MyPkg2.pc"], """prefix=/dummy_root_folder2 libdir=${prefix}/lib includedir=${prefix}/include Name: MyPkg2 Description: Conan package: MyPkg2 Version: 2.3 Libs: -L${libdir} -sharedlinkflag -exelinkflag Cflags: -I${includedir} -cxxflag -DMYDEFINE2 Requires: my_pkg """) self.assertEqual( files["mypkg1.pc"], """prefix=/dummy_root_folder1 libdir=${prefix}/lib includedir=${prefix}/include Name: mypkg1 Description: My other cool description Version: 1.7 Libs: -L${libdir} Cflags: -I${includedir} -Flag1=21 -DMYDEFINE11 Requires: my_pkg """) self.assertEqual( files["my_pkg.pc"], """prefix=/dummy_root_folder1 libdir=${prefix}/lib includedir=${prefix}/include Name: my_pkg Description: My cool description Version: 1.3 Libs: -L${libdir} Cflags: -I${includedir} -Flag1=23 -DMYDEFINE1 """)
def variables_setup_test(self): conanfile = ConanFile(TestBufferConanOutput(), None) conanfile.initialize(Settings({}), EnvValues()) # Add some cpp_info for dependencies ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder1") cpp_info.defines = ["MYDEFINE1"] cpp_info.cflags.append("-Flag1=23") cpp_info.version = "1.3" cpp_info.description = "My cool description" conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder2") cpp_info.defines = ["MYDEFINE2"] cpp_info.version = "2.3" cpp_info.exelinkflags = ["-exelinkflag"] cpp_info.sharedlinkflags = ["-sharedlinkflag"] cpp_info.cxxflags = ["-cxxflag"] cpp_info.public_deps = ["MyPkg"] conanfile.deps_cpp_info.add(ref.name, cpp_info) # Add env_info env_info = EnvInfo() env_info.VAR1 = "env_info-value1" env_info.PATH.append("path-extended") conanfile.deps_env_info.update(env_info, "env_info_pkg") # Add user_info user_info = UserInfo() user_info.VAR1 = "user_info-value1" conanfile.deps_user_info["user_info_pkg"] = user_info # Add user_info_build conanfile.user_info_build = DepsUserInfo() user_info = UserInfo() user_info.VAR1 = "user_info_build-value1" conanfile.user_info_build["user_info_build_pkg"] = user_info generator = JsonGenerator(conanfile) json_out = generator.content parsed = json.loads(json_out) # Check dependencies dependencies = parsed["dependencies"] self.assertEqual(len(dependencies), 2) my_pkg = dependencies[0] self.assertEqual(my_pkg["name"], "MyPkg") self.assertEqual(my_pkg["description"], "My cool description") self.assertEqual(my_pkg["defines"], ["MYDEFINE1"]) # Check env_info env_info = parsed["deps_env_info"] self.assertListEqual(sorted(env_info.keys()), sorted(["VAR1", "PATH"])) self.assertEqual(env_info["VAR1"], "env_info-value1") self.assertListEqual(env_info["PATH"], ["path-extended"]) # Check user_info user_info = parsed["deps_user_info"] self.assertListEqual(list(user_info.keys()), ["user_info_pkg"]) self.assertListEqual(list(user_info["user_info_pkg"].keys()), ["VAR1"]) self.assertEqual(user_info["user_info_pkg"]["VAR1"], "user_info-value1") # Check user_info_build user_info_build = parsed["user_info_build"] self.assertListEqual(list(user_info_build.keys()), ["user_info_build_pkg"]) self.assertListEqual( list(user_info_build["user_info_build_pkg"].keys()), ["VAR1"]) self.assertEqual(user_info_build["user_info_build_pkg"]["VAR1"], "user_info_build-value1")