def build(m, stats=None, from_interactive=False, allow_interactive=False): try: if not stats: stats = {} if m.skip(): console.print(utils.get_skip_message(m)) return {} with utils.path_prepended(m.config.build_prefix): env = environ.get_dict(m=m) env["CONDA_BUILD_STATE"] = "BUILD" if env_path_backup_var_exists: env["CONDA_PATH_BACKUP"] = os.environ["CONDA_PATH_BACKUP"] m.output.sections["package"]["name"] = m.output.name env["PKG_NAME"] = m.get_value("package/name") src_dir = m.config.work_dir if isdir(src_dir): if m.config.verbose: console.print("source tree in:", src_dir) else: if m.config.verbose: console.print("no source - creating empty work folder") os.makedirs(src_dir) utils.rm_rf(m.config.info_dir) files_before_script = utils.prefix_files(prefix=m.config.host_prefix) with open(join(m.config.build_folder, "prefix_files.txt"), "w") as f: f.write("\n".join(sorted(list(files_before_script)))) f.write("\n") execute_build_script(m, src_dir, env) if m.output.sections["build"].get("intermediate"): utils.rm_rf(m.config.host_prefix) return bundle_conda(m, files_before_script, env, m.output.sections["files"]) except subprocess.CalledProcessError: ext = "bat" if utils.on_win else "sh" work_dir = pathlib.Path(m.config.build_prefix).parent / "work" build_cmd = work_dir / f"conda_build.{ext}" console.print("\n") console.print(f"Work directory: {work_dir}") console.print(f"Try building again with {build_cmd}") if not from_interactive and allow_interactive: console.print("[red]Build went wrong, entering interactive mode![/red]") from boa.tui import tui import asyncio asyncio.run(tui.enter_tui(m))
def get_output_file_paths(recipe_path_or_metadata, no_download_source=False, config=None, variants=None, **kwargs): """Get output file paths for any packages that would be created by a recipe Both split packages (recipes with more than one output) and build matrices, created with variants, contribute to the list of file paths here. """ from conda_build.render import bldpkg_path from conda_build.conda_interface import string_types from conda_build.utils import get_skip_message config = get_or_merge_config(config, **kwargs) if hasattr(recipe_path_or_metadata, '__iter__') and not isinstance( recipe_path_or_metadata, string_types): list_of_metas = [ hasattr(item[0], 'config') for item in recipe_path_or_metadata if len(item) == 3 ] if list_of_metas and all(list_of_metas): metadata = recipe_path_or_metadata else: raise ValueError("received mixed list of metas: {}".format( recipe_path_or_metadata)) elif isinstance(recipe_path_or_metadata, string_types): # first, render the parent recipe (potentially multiple outputs, depending on variants). metadata = render(recipe_path_or_metadata, no_download_source=no_download_source, variants=variants, config=config, finalize=True, **kwargs) else: assert hasattr(recipe_path_or_metadata, 'config'), ("Expecting metadata object - got {}".format( recipe_path_or_metadata)) metadata = [(recipe_path_or_metadata, None, None)] # Next, loop over outputs that each metadata defines outs = [] for (m, _, _) in metadata: if m.skip(): outs.append(get_skip_message(m)) else: outs.append(bldpkg_path(m)) return sorted(list(set(outs)))
def build(m, stats={}): if m.skip(): print(utils.get_skip_message(m)) return {} log = utils.get_logger(__name__) with utils.path_prepended(m.config.build_prefix): env = environ.get_dict(m=m) env["CONDA_BUILD_STATE"] = "BUILD" if env_path_backup_var_exists: env["CONDA_PATH_BACKUP"] = os.environ["CONDA_PATH_BACKUP"] m.output.sections["package"]["name"] = m.output.name env["PKG_NAME"] = m.get_value('package/name') src_dir = m.config.work_dir if isdir(src_dir): if m.config.verbose: print("source tree in:", src_dir) else: if m.config.verbose: print("no source - creating empty work folder") os.makedirs(src_dir) utils.rm_rf(m.config.info_dir) files_before_script = utils.prefix_files(prefix=m.config.host_prefix) with open(join(m.config.build_folder, "prefix_files.txt"), "w") as f: f.write("\n".join(sorted(list(files_before_script)))) f.write("\n") execute_build_script(m, src_dir, env) files_after_script = utils.prefix_files(prefix=m.config.host_prefix) files_difference = files_after_script - files_before_script if m.output.sections['build'].get('intermediate') == True: utils.rm_rf(m.config.host_prefix) return bundle_conda(m, files_before_script, env, m.output.sections['files'])
def get_output_file_paths(recipe_path_or_metadata, no_download_source=False, config=None, variants=None, **kwargs): """Get output file paths for any packages that would be created by a recipe Both split packages (recipes with more than one output) and build matrices, created with variants, contribute to the list of file paths here. """ from conda_build.render import bldpkg_path from conda_build.conda_interface import string_types from conda_build.utils import get_skip_message config = get_or_merge_config(config, **kwargs) if hasattr(recipe_path_or_metadata, '__iter__') and not isinstance(recipe_path_or_metadata, string_types): list_of_metas = [hasattr(item[0], 'config') for item in recipe_path_or_metadata if len(item) == 3] if list_of_metas and all(list_of_metas): metadata = recipe_path_or_metadata else: raise ValueError("received mixed list of metas: {}".format(recipe_path_or_metadata)) elif isinstance(recipe_path_or_metadata, string_types): # first, render the parent recipe (potentially multiple outputs, depending on variants). metadata = render(recipe_path_or_metadata, no_download_source=no_download_source, variants=variants, config=config, finalize=True, **kwargs) else: assert hasattr(recipe_path_or_metadata, 'config'), ("Expecting metadata object - got {}" .format(recipe_path_or_metadata)) metadata = [(recipe_path_or_metadata, None, None)] # Next, loop over outputs that each metadata defines outs = [] for (m, _, _) in metadata: if m.skip(): outs.append(get_skip_message(m)) else: outs.append(bldpkg_path(m)) return sorted(list(set(outs)))