def get_snapcraft_build_environment(part: "PluginHandler") -> Dict[str, str]: """Return Snapcraft provided build environment.""" part_environment = get_snapcraft_global_environment(part._project) part_environment.update(get_snapcraft_part_environment(part)) paths = [part.part_install_dir, part._project.stage_dir] include_paths = list() for path in paths: include_paths.extend( common.get_include_paths(path, part._project.arch_triplet)) if include_paths: for envvar in ["CPPFLAGS", "CFLAGS", "CXXFLAGS"]: part_environment[envvar] = formatting_utils.combine_paths( paths=include_paths, prepend="-isystem", separator=" ") library_paths = list() for path in paths: library_paths.extend( common.get_library_paths(path, part._project.arch_triplet)) if library_paths: part_environment["LDFLAGS"] = formatting_utils.combine_paths( paths=library_paths, prepend="-L", separator=" ") pkg_config_paths = common.get_pkg_config_paths(path, part._project.arch_triplet) if pkg_config_paths: part_environment["PKG_CONFIG_PATH"] = formatting_utils.combine_paths( pkg_config_paths, prepend="", separator=":") return part_environment
def build_env(root: str, snap_name: str, arch_triplet: str) -> List[str]: """Set the environment variables required for building. This is required for the current parts installdir due to stage-packages and also to setup the stagedir. """ env = [] paths = common.get_include_paths(root, arch_triplet) if paths: for envvar in ['CPPFLAGS', 'CFLAGS', 'CXXFLAGS']: env.append( formatting_utils.format_path_variable(envvar, paths, prepend='-I', separator=' ')) paths = common.get_library_paths(root, arch_triplet) if paths: env.append( formatting_utils.format_path_variable('LDFLAGS', paths, prepend='-L', separator=' ')) paths = common.get_pkg_config_paths(root, arch_triplet) if paths: env.append( formatting_utils.format_path_variable('PKG_CONFIG_PATH', paths, prepend='', separator=':')) return env
def build_env(root: str, snap_name: str, arch_triplet: str) -> List[str]: """Set the environment variables required for building. This is required for the current parts installdir due to stage-packages and also to setup the stagedir. """ env = [] paths = common.get_include_paths(root, arch_triplet) if paths: for envvar in ["CPPFLAGS", "CFLAGS", "CXXFLAGS"]: env.append( formatting_utils.format_path_variable( envvar, paths, prepend="-I", separator=" " ) ) paths = common.get_library_paths(root, arch_triplet) if paths: env.append( formatting_utils.format_path_variable( "LDFLAGS", paths, prepend="-L", separator=" " ) ) paths = common.get_pkg_config_paths(root, arch_triplet) if paths: env.append( formatting_utils.format_path_variable( "PKG_CONFIG_PATH", paths, prepend="", separator=":" ) ) return env
def _build_env(root, snap_name, confinement, arch_triplet, core_dynamic_linker=None): """Set the environment variables required for building. This is required for the current parts installdir due to stage-packages and also to setup the stagedir. """ env = [] paths = common.get_include_paths(root, arch_triplet) if paths: for envvar in ['CPPFLAGS', 'CFLAGS', 'CXXFLAGS']: env.append(formatting_utils.format_path_variable( envvar, paths, prepend='-I', separator=' ')) if confinement == 'classic': if not core_dynamic_linker: raise EnvironmentError( 'classic confinement requires the core snap to be installed. ' 'Install it by running `snap install core`.') core_path = common.get_core_path() core_rpaths = common.get_library_paths(core_path, arch_triplet, existing_only=False) snap_path = os.path.join('/snap', snap_name, 'current') snap_rpaths = common.get_library_paths(snap_path, arch_triplet, existing_only=False) # snap_rpaths before core_rpaths to prefer libraries from the snap. rpaths = formatting_utils.combine_paths( snap_rpaths + core_rpaths, prepend='', separator=':') env.append('LDFLAGS="$LDFLAGS ' # Building tools to continue the build becomes problematic # with nodefaultlib. # '-Wl,-z,nodefaultlib ' '-Wl,--dynamic-linker={0} ' '-Wl,-rpath,{1}"'.format(core_dynamic_linker, rpaths)) paths = common.get_library_paths(root, arch_triplet) if paths: env.append(formatting_utils.format_path_variable( 'LDFLAGS', paths, prepend='-L', separator=' ')) paths = common.get_pkg_config_paths(root, arch_triplet) if paths: env.append(formatting_utils.format_path_variable( 'PKG_CONFIG_PATH', paths, prepend='', separator=':')) return env
def _build_env(root, snap_name, confinement, arch_triplet, core_dynamic_linker=None): """Set the environment variables required for building. This is required for the current parts installdir due to stage-packages and also to setup the stagedir. """ env = [] paths = common.get_include_paths(root, arch_triplet) if paths: for envvar in ['CPPFLAGS', 'CFLAGS', 'CXXFLAGS']: env.append(formatting_utils.format_path_variable( envvar, paths, prepend='-I', separator=' ')) if confinement == 'classic': if not core_dynamic_linker: raise EnvironmentError( 'classic confinement requires the core snap to be installed. ' 'Install it by running `snap install core`.') core_path = common.get_core_path() core_rpaths = common.get_library_paths(core_path, arch_triplet, existing_only=False) snap_path = os.path.join('/snap', snap_name, 'current') snap_rpaths = common.get_library_paths(snap_path, arch_triplet, existing_only=False) # snap_rpaths before core_rpaths to prefer libraries from the snap. rpaths = formatting_utils.combine_paths( snap_rpaths + core_rpaths, prepend='', separator=':') env.append('LDFLAGS="$LDFLAGS ' # Building tools to continue the build becomes problematic # with nodefaultlib. # '-Wl,-z,nodefaultlib ' '-Wl,--dynamic-linker={0} ' '-Wl,-rpath,{1}"'.format(core_dynamic_linker, rpaths)) paths = common.get_library_paths(root, arch_triplet) if paths: env.append(formatting_utils.format_path_variable( 'LDFLAGS', paths, prepend='-L', separator=' ')) paths = common.get_pkg_config_paths(root, arch_triplet) if paths: env.append(formatting_utils.format_path_variable( 'PKG_CONFIG_PATH', paths, prepend='', separator=':')) return env
def get_snapcraft_part_environment( part: "PluginHandler", *, step: steps.Step ) -> Dict[str, str]: """Return Snapcraft provided part environment.""" part_environment = get_snapcraft_global_environment( part._project, include_prime=step == steps.PRIME ) part_environment.update(get_snapcraft_part_directory_environment(part, step=step)) paths = [part.part_install_dir, part._project.stage_dir] bin_paths = list() for path in paths: bin_paths.extend(common.get_bin_paths(root=path, existing_only=True)) if bin_paths: bin_paths.append("$PATH") part_environment["PATH"] = formatting_utils.combine_paths( paths=bin_paths, prepend="", separator=":" ) include_paths = list() for path in paths: include_paths.extend(common.get_include_paths(path, part._project.arch_triplet)) if include_paths: for envvar in ["CPPFLAGS", "CFLAGS", "CXXFLAGS"]: part_environment[envvar] = formatting_utils.combine_paths( paths=include_paths, prepend="-isystem", separator=" " ) library_paths = list() for path in paths: library_paths.extend(common.get_library_paths(path, part._project.arch_triplet)) if library_paths: part_environment["LDFLAGS"] = formatting_utils.combine_paths( paths=library_paths, prepend="-L", separator=" " ) pkg_config_paths = common.get_pkg_config_paths(path, part._project.arch_triplet) if pkg_config_paths: part_environment["PKG_CONFIG_PATH"] = formatting_utils.combine_paths( pkg_config_paths, prepend="", separator=":" ) return part_environment
def _build_env(root, arch_triplet): """Set the environment variables required for building. This is required for the current parts installdir due to stage-packages and also to setup the stagedir. """ env = [] paths = common.get_include_paths(root, arch_triplet) if paths: for envvar in ['CPPFLAGS', 'CFLAGS', 'CXXFLAGS']: env.append(common.format_path_variable( envvar, paths, prepend='-I', separator=' ')) paths = common.get_library_paths(root, arch_triplet) if paths: env.append(common.format_path_variable( 'LDFLAGS', paths, prepend='-L', separator=' ')) return env