def _get_cl_list(self, quotes=True): # FIXME: It should be managed with the compiler_flags module # But need further investigation about the quotes and so on, so better to not break anything if quotes: ret = [ '%s"%s"' % (include_path_option, lib) for lib in self.include_paths ] else: ret = [ '%s%s' % (include_path_option, lib) for lib in self.include_paths ] runtime = visual_runtime(self._runtime) if runtime: ret.append(runtime) ret.extend(format_defines(self.defines)) ret.extend(self.flags) ret.extend(self.cxx_flags) ret.extend(self.link_flags) if self.parallel: # Build source in parallel ret.append(parallel_compiler_cl_flag()) if self.std: ret.append(self.std) return ret
def get_definitions(self, cmake_version): compiler = self._ss("compiler") compiler_base = self._ss("compiler.base") compiler_version = self._ss("compiler.version") arch = self._ss("arch") os_ = self._ss("os") libcxx = self._ss("compiler.libcxx") runtime = self._ss("compiler.runtime") build_type = self._ss("build_type") definitions = OrderedDict() definitions.update(runtime_definition(runtime)) definitions.update(build_type_definition(self._forced_build_type, build_type, self._generator, self._output)) # don't attempt to override variables set within toolchain if (tools.is_apple_os(os_) and "CONAN_CMAKE_TOOLCHAIN_FILE" not in os.environ and "CMAKE_TOOLCHAIN_FILE" not in definitions): apple_arch = tools.to_apple_arch(arch) if apple_arch: definitions["CMAKE_OSX_ARCHITECTURES"] = apple_arch # xcrun is only available on macOS, otherwise it's cross-compiling and it needs to be # set within CMake toolchain. also, if SDKROOT is set, CMake will use it, and it's not # needed to run xcrun. if platform.system() == "Darwin" and "SDKROOT" not in os.environ: sdk_path = tools.XCRun(self._conanfile.settings).sdk_path if sdk_path: definitions["CMAKE_OSX_SYSROOT"] = sdk_path definitions.update(self._cmake_cross_build_defines(cmake_version)) definitions.update(self._get_cpp_standard_vars()) definitions.update(in_local_cache_definition(self._conanfile.in_local_cache)) if compiler: definitions["CONAN_COMPILER"] = compiler if compiler_version: definitions["CONAN_COMPILER_VERSION"] = str(compiler_version) # C, CXX, LINK FLAGS if compiler == "Visual Studio" or compiler_base == "Visual Studio": if self._parallel: flag = parallel_compiler_cl_flag(output=self._output) definitions['CONAN_CXX_FLAGS'] = flag definitions['CONAN_C_FLAGS'] = flag else: # arch_flag is only set for non Visual Studio arch_flag = architecture_flag(self._conanfile.settings) if arch_flag: definitions['CONAN_CXX_FLAGS'] = arch_flag definitions['CONAN_SHARED_LINKER_FLAGS'] = arch_flag definitions['CONAN_C_FLAGS'] = arch_flag if self._set_cmake_flags: definitions['CMAKE_CXX_FLAGS'] = arch_flag definitions['CMAKE_SHARED_LINKER_FLAGS'] = arch_flag definitions['CMAKE_C_FLAGS'] = arch_flag if libcxx: definitions["CONAN_LIBCXX"] = libcxx # Shared library try: definitions["BUILD_SHARED_LIBS"] = "ON" if self._conanfile.options.shared else "OFF" except ConanException: pass # Install to package folder try: if self._conanfile.package_folder: definitions["CMAKE_INSTALL_PREFIX"] = self._conanfile.package_folder definitions["CMAKE_INSTALL_BINDIR"] = DEFAULT_BIN definitions["CMAKE_INSTALL_SBINDIR"] = DEFAULT_BIN definitions["CMAKE_INSTALL_LIBEXECDIR"] = DEFAULT_BIN definitions["CMAKE_INSTALL_LIBDIR"] = DEFAULT_LIB definitions["CMAKE_INSTALL_INCLUDEDIR"] = DEFAULT_INCLUDE definitions["CMAKE_INSTALL_OLDINCLUDEDIR"] = DEFAULT_INCLUDE definitions["CMAKE_INSTALL_DATAROOTDIR"] = DEFAULT_SHARE except AttributeError: pass # fpic if not str(os_).startswith("Windows"): fpic = self._conanfile.options.get_safe("fPIC") if fpic is not None: shared = self._conanfile.options.get_safe("shared") fpic_value = "ON" if (fpic or shared) else "OFF" definitions["CONAN_CMAKE_POSITION_INDEPENDENT_CODE"] = fpic_value # Adjust automatically the module path in case the conanfile is using the # cmake_find_package or cmake_find_package_multi install_folder = self._conanfile.install_folder.replace("\\", "/") if "cmake_find_package" in self._conanfile.generators: definitions["CMAKE_MODULE_PATH"] = install_folder if "cmake_find_package_multi" in self._conanfile.generators: # The cmake_find_package_multi only works with targets and generates XXXConfig.cmake # that require the prefix path and the module path definitions["CMAKE_PREFIX_PATH"] = install_folder definitions["CMAKE_MODULE_PATH"] = install_folder definitions.update(self._get_make_program_definition()) # Disable CMake export registry #3070 (CMake installing modules in user home's) definitions["CMAKE_EXPORT_NO_PACKAGE_REGISTRY"] = "ON" return definitions
def get_definitions(self): compiler = self._ss("compiler") compiler_version = self._ss("compiler.version") arch = self._ss("arch") os_ = self._ss("os") libcxx = self._ss("compiler.libcxx") runtime = self._ss("compiler.runtime") build_type = self._ss("build_type") ret = OrderedDict() ret.update(runtime_definition(runtime)) if self._forced_build_type and self._forced_build_type != build_type: self._output.warn("Forced CMake build type ('%s') different from the settings build " "type ('%s')" % (self._forced_build_type, build_type)) build_type = self._forced_build_type ret.update(build_type_definition(build_type, self._generator)) if str(os_) == "Macos": if arch == "x86": ret["CMAKE_OSX_ARCHITECTURES"] = "i386" ret.update(self._cmake_cross_build_defines()) ret.update(self._get_cpp_standard_vars()) ret["CONAN_EXPORTED"] = "1" ret.update(in_local_cache_definition(self._conanfile.in_local_cache)) if compiler: ret["CONAN_COMPILER"] = compiler if compiler_version: ret["CONAN_COMPILER_VERSION"] = str(compiler_version) # C, CXX, LINK FLAGS if compiler == "Visual Studio": if self._parallel: flag = parallel_compiler_cl_flag(output=self._output) ret['CONAN_CXX_FLAGS'] = flag ret['CONAN_C_FLAGS'] = flag else: # arch_flag is only set for non Visual Studio arch_flag = architecture_flag(compiler=compiler, arch=arch) if arch_flag: ret['CONAN_CXX_FLAGS'] = arch_flag ret['CONAN_SHARED_LINKER_FLAGS'] = arch_flag ret['CONAN_C_FLAGS'] = arch_flag if self._set_cmake_flags: ret['CMAKE_CXX_FLAGS'] = arch_flag ret['CMAKE_SHARED_LINKER_FLAGS'] = arch_flag ret['CMAKE_C_FLAGS'] = arch_flag if libcxx: ret["CONAN_LIBCXX"] = libcxx # Shared library try: ret["BUILD_SHARED_LIBS"] = "ON" if self._conanfile.options.shared else "OFF" except ConanException: pass # Install to package folder try: if self._conanfile.package_folder: ret["CMAKE_INSTALL_PREFIX"] = self._conanfile.package_folder ret["CMAKE_INSTALL_BINDIR"] = DEFAULT_BIN ret["CMAKE_INSTALL_SBINDIR"] = DEFAULT_BIN ret["CMAKE_INSTALL_LIBEXECDIR"] = DEFAULT_BIN ret["CMAKE_INSTALL_LIBDIR"] = DEFAULT_LIB ret["CMAKE_INSTALL_INCLUDEDIR"] = DEFAULT_INCLUDE ret["CMAKE_INSTALL_OLDINCLUDEDIR"] = DEFAULT_INCLUDE ret["CMAKE_INSTALL_DATAROOTDIR"] = DEFAULT_SHARE except AttributeError: pass # fpic if not str(os_).startswith("Windows"): fpic = self._conanfile.options.get_safe("fPIC") if fpic is not None: shared = self._conanfile.options.get_safe("shared") ret["CONAN_CMAKE_POSITION_INDEPENDENT_CODE"] = "ON" if (fpic or shared) else "OFF" # Adjust automatically the module path in case the conanfile is using the # cmake_find_package or cmake_find_package_multi install_folder = self._conanfile.install_folder.replace("\\", "/") if "cmake_find_package" in self._conanfile.generators: ret["CMAKE_MODULE_PATH"] = install_folder if "cmake_find_package_multi" in self._conanfile.generators: # The cmake_find_package_multi only works with targets and generates XXXConfig.cmake # that require the prefix path and the module path ret["CMAKE_PREFIX_PATH"] = install_folder ret["CMAKE_MODULE_PATH"] = install_folder ret.update(self._get_make_program_definition()) # Disable CMake export registry #3070 (CMake installing modules in user home's) ret["CMAKE_EXPORT_NO_PACKAGE_REGISTRY"] = "ON" return ret
def get_definitions(self): compiler = self._ss("compiler") compiler_version = self._ss("compiler.version") arch = self._ss("arch") os_ = self._ss("os") libcxx = self._ss("compiler.libcxx") runtime = self._ss("compiler.runtime") build_type = self._ss("build_type") ret = OrderedDict() ret.update(build_type_definition(build_type, self.generator)) ret.update(runtime_definition(runtime)) if str(os_) == "Macos": if arch == "x86": ret["CMAKE_OSX_ARCHITECTURES"] = "i386" ret.update(self._cmake_cross_build_defines()) ret.update(self._get_cpp_standard_vars()) ret["CONAN_EXPORTED"] = "1" ret[cmake_in_local_cache_var_name] =\ in_local_cache_definition(self._conanfile.in_local_cache)[cmake_in_local_cache_var_name] if compiler: ret["CONAN_COMPILER"] = compiler if compiler_version: ret["CONAN_COMPILER_VERSION"] = str(compiler_version) # Force compiler flags -- TODO: give as environment/setting parameter? arch_flag = architecture_flag(compiler=compiler, arch=arch) ret = add_cmake_flag(ret, 'CONAN_CXX_FLAGS', arch_flag) ret = add_cmake_flag(ret, 'CONAN_SHARED_LINKER_FLAGS', arch_flag) ret = add_cmake_flag(ret, 'CONAN_C_FLAGS', arch_flag) if libcxx: ret["CONAN_LIBCXX"] = libcxx # Shared library try: ret["BUILD_SHARED_LIBS"] = "ON" if self._conanfile.options.shared else "OFF" except ConanException: pass # Install to package folder try: if self._conanfile.package_folder: ret["CMAKE_INSTALL_PREFIX"] = self._conanfile.package_folder ret["CMAKE_INSTALL_BINDIR"] = DEFAULT_BIN ret["CMAKE_INSTALL_SBINDIR"] = DEFAULT_BIN ret["CMAKE_INSTALL_LIBEXECDIR"] = DEFAULT_BIN ret["CMAKE_INSTALL_LIBDIR"] = DEFAULT_LIB ret["CMAKE_INSTALL_INCLUDEDIR"] = DEFAULT_INCLUDE ret["CMAKE_INSTALL_OLDINCLUDEDIR"] = DEFAULT_INCLUDE ret["CMAKE_INSTALL_DATAROOTDIR"] = DEFAULT_SHARE except AttributeError: pass if str(os_) in ["Windows", "WindowsStore" ] and compiler == "Visual Studio": if self._parallel: flag = parallel_compiler_cl_flag() ret = add_cmake_flag(ret, 'CONAN_CXX_FLAGS', flag) ret = add_cmake_flag(ret, 'CONAN_C_FLAGS', flag) # fpic if str(os_) not in ["Windows", "WindowsStore"]: fpic = self._conanfile.options.get_safe("fPIC") if fpic is not None: shared = self._conanfile.options.get_safe("shared") ret["CONAN_CMAKE_POSITION_INDEPENDENT_CODE"] = "ON" if ( fpic or shared) else "OFF" # Adjust automatically the module path in case the conanfile is using the cmake_find_package if "cmake_find_package" in self._conanfile.generators: ret["CMAKE_MODULE_PATH"] = self._conanfile.install_folder.replace( "\\", "/") ret.update(self._get_make_program_definition()) if self._set_cmake_flags: ret = add_cmake_flag(ret, 'CMAKE_CXX_FLAGS', arch_flag) ret = add_cmake_flag(ret, 'CMAKE_SHARED_LINKER_FLAGS', arch_flag) ret = add_cmake_flag(ret, 'CMAKE_C_FLAGS', arch_flag) # Disable CMake export registry #3070 (CMake installing modules in user home's) ret["CMAKE_EXPORT_NO_PACKAGE_REGISTRY"] = "ON" return ret