def build(m, get_src=True, pypi=False): rm_rf(prefix) create_env(prefix, [ms.spec for ms in m.ms_depends('build')], pypi) print("BUILD START:", m.dist()) if get_src: source.provide(m.path, m.get_section('source')) assert isdir(source.WORK_DIR) if os.listdir(source.get_dir()): print("source tree in:", source.get_dir()) else: print("no source") rm_rf(info_dir) files1 = prefix_files() if sys.platform == 'win32': import conda.builder.windows as windows windows.build(m) else: build_sh = join(m.path, 'build.sh') if exists(build_sh): env = environ.get_dict(m) cmd = ['/bin/bash', '-x', '-e', build_sh] _check_call(cmd, env=env, cwd=source.get_dir()) else: print("no build.sh file") create_entry_points(m.get_value('build/entry_points')) post_process(preserve_egg_dir=bool( m.get_value('build/preserve_egg_dir'))) assert not exists(info_dir) files2 = prefix_files() post_build(sorted(files2 - files1)) create_info_files(m, sorted(files2 - files1)) files3 = prefix_files() fix_permissions(files3 - files1) path = bldpkg_path(m) t = tarfile.open(path, 'w:bz2') for f in sorted(files3 - files1): t.add(join(prefix, f), f) t.close() print("BUILD END:", m.dist()) # we're done building, perform some checks tarcheck.check_all(path) update_index(bldpkgs_dir)
def build(m, get_src=True): rm_rf(prefix) create_env(prefix, [ms.spec for ms in m.ms_depends('build')]) print("BUILD START:", m.dist()) if get_src: source.provide(m.path, m.get_section('source')) assert isdir(source.WORK_DIR) if os.listdir(source.get_dir()): print("source tree in:", source.get_dir()) else: print("no source") rm_rf(info_dir) files1 = prefix_files() if sys.platform == 'win32': import conda.builder.windows as windows windows.build(m.path) else: env = environ.get_dict() env['RECIPE_DIR'] = m.path cmd = ['/bin/bash', '-x', '-e', join(m.path, 'build.sh')] _check_call(cmd, env=env, cwd=source.get_dir()) create_entry_points(m.get_value('build/entry_points')) post_process() assert not exists(info_dir) files2 = prefix_files() sorted_files = sorted(files2 - files1) post_build(sorted_files) create_info_files(m, sorted_files) files3 = prefix_files() fix_permissions() path = bldpkg_path(m) t = tarfile.open(path, 'w:bz2') for f in sorted(files3 - files1): t.add(join(prefix, f), f) t.close() print("BUILD END:", m.dist()) # we're done building, perform some checks tarcheck.check_all(path) update_index(bldpkgs_dir) # remove from packages, because we're going to test it rm_pkgs_cache(m.dist()) test(m)
def build(m, get_src=True, pypi=False): rm_rf(prefix) create_env(prefix, [ms.spec for ms in m.ms_depends('build')], pypi) print("BUILD START:", m.dist()) if get_src: source.provide(m.path, m.get_section('source')) assert isdir(source.WORK_DIR) if os.listdir(source.get_dir()): print("source tree in:", source.get_dir()) else: print("no source") rm_rf(info_dir) files1 = prefix_files() if sys.platform == 'win32': import conda.builder.windows as windows windows.build(m) else: build_sh = join(m.path, 'build.sh') if exists(build_sh): env = environ.get_dict(m) cmd = ['/bin/bash', '-x', '-e', build_sh] _check_call(cmd, env=env, cwd=source.get_dir()) else: print("no build.sh file") create_entry_points(m.get_value('build/entry_points')) post_process(preserve_egg_dir=bool(m.get_value('build/preserve_egg_dir'))) assert not exists(info_dir) files2 = prefix_files() post_build(sorted(files2 - files1)) create_info_files(m, sorted(files2 - files1)) files3 = prefix_files() fix_permissions(files3 - files1) path = bldpkg_path(m) t = tarfile.open(path, 'w:bz2') for f in sorted(files3 - files1): t.add(join(prefix, f), f) t.close() print("BUILD END:", m.dist()) # we're done building, perform some checks tarcheck.check_all(path) update_index(bldpkgs_dir)
def rm_egg_dirs(): "remove egg directories" sp_dir = environ.sp_dir egg_dirs = glob(join(sp_dir, '*-py*.egg')) for egg_dir in egg_dirs: print('moving egg dir:', egg_dir) try: os.rename(join(egg_dir, 'EGG-INFO/PKG-INFO'), egg_dir + '-info') except OSError: pass utils.rm_rf(join(egg_dir, 'EGG-INFO')) for fn in os.listdir(egg_dir): os.rename(join(egg_dir, fn), join(sp_dir, fn)) utils.rm_rf(join(sp_dir, 'easy-install.pth'))
def provide(recipe_dir, meta, patch=True): """ given a recipe_dir: - download (if necessary) - unpack - apply patches (if any) """ rm_rf(WORK_DIR) if 'fn' in meta: unpack(meta) elif 'git_url' in meta: git_source(meta) elif 'hg_url' in meta: hg_source(meta) else: # no source os.makedirs(WORK_DIR) if patch: src_dir = get_dir() for patch in meta.get('patches', []): apply_patch(src_dir, join(recipe_dir, patch))
def remove_easy_install_pth(preserve_egg_dir=False): """ remove the need for easy-install.pth and finally remove easy-install.pth itself """ sp_dir = environ.sp_dir for egg_path in glob(join(sp_dir, "*-py*.egg")): if isdir(egg_path): if preserve_egg_dir: write_pth(egg_path) continue print("found egg dir:", egg_path) try: os.rename(join(egg_path, "EGG-INFO/PKG-INFO"), egg_path + "-info") except OSError: pass utils.rm_rf(join(egg_path, "EGG-INFO")) for fn in os.listdir(egg_path): if fn == "__pycache__": utils.rm_rf(join(egg_path, fn)) else: os.rename(join(egg_path, fn), join(sp_dir, fn)) elif isfile(egg_path): print("found egg:", egg_path) write_pth(egg_path) utils.rm_rf(join(sp_dir, "easy-install.pth"))
def test(m): tmp_dir = join(config.croot, 'test-tmp_dir') rm_rf(tmp_dir) os.makedirs(tmp_dir) if not create_files(tmp_dir, m): print("Nothing to test for:", m.dist()) return print("TEST START:", m.dist()) rm_rf(prefix) rm_rf(config.test_prefix) specs = ['%s %s %s' % (m.name(), m.version(), m.build_id()), # as the tests are run by python, we need to specify it 'python %s*' % environ.py_ver] # add packages listed in test/requires for spec in m.get_value('test/requires'): specs.append(spec) create_env(config.test_prefix, specs) env = dict(os.environ) # prepend bin/Scripts directory env['PATH'] = (join(config.test_prefix, bin_dirname) + os.pathsep + env['PATH']) for varname in 'CONDA_PY', 'CONDA_NPY': env[varname] = str(getattr(config, varname)) env['PREFIX'] = config.test_prefix _check_call([config.test_python, join(tmp_dir, 'run_test.py')], env=env, cwd=tmp_dir) print("TEST END:", m.dist())
def remove_easy_install_pth(preserve_egg_dir=False): """ remove the need for easy-install.pth and finally remove easy-install.pth itself """ sp_dir = environ.sp_dir for egg_path in glob(join(sp_dir, '*-py*.egg')): if isdir(egg_path): if preserve_egg_dir: write_pth(egg_path) continue print('found egg dir:', egg_path) try: os.rename(join(egg_path, 'EGG-INFO/PKG-INFO'), egg_path + '-info') except OSError: pass utils.rm_rf(join(egg_path, 'EGG-INFO')) for fn in os.listdir(egg_path): if fn == '__pycache__': utils.rm_rf(join(egg_path, fn)) else: os.rename(join(egg_path, fn), join(sp_dir, fn)) elif isfile(egg_path): print('found egg:', egg_path) write_pth(egg_path) utils.rm_rf(join(sp_dir, 'easy-install.pth'))
def test(m, pypi=False): # remove from package cache rm_pkgs_cache(m.dist()) tmp_dir = join(config.croot, 'test-tmp_dir') rm_rf(tmp_dir) os.makedirs(tmp_dir) if not create_files(tmp_dir, m): print("Nothing to test for:", m.dist()) return print("TEST START:", m.dist()) rm_rf(prefix) rm_rf(config.test_prefix) specs = [ '%s %s %s' % (m.name(), m.version(), m.build_id()), # as the tests are run by python, we need to specify it 'python %s*' % environ.py_ver ] # add packages listed in test/requires for spec in m.get_value('test/requires'): specs.append(spec) create_env(config.test_prefix, specs, pypi) env = dict(os.environ) # prepend bin (or Scripts) directory env['PATH'] = (join(config.test_prefix, bin_dirname) + os.pathsep + env['PATH']) for varname in 'CONDA_PY', 'CONDA_NPY': env[varname] = str(getattr(config, varname)) env['PREFIX'] = config.test_prefix try: subprocess.check_call( [config.test_python, join(tmp_dir, 'run_test.py')], env=env, cwd=tmp_dir) except subprocess.CalledProcessError: if not isdir(broken_dir): os.makedirs(broken_dir) shutil.move(bldpkg_path(m), join(broken_dir, "%s.tar.bz2" % m.dist())) sys.exit("TESTS FAILED: " + m.dist()) print("TEST END:", m.dist())
def rm_egg_dirs(): "remove egg directories" sp_dir = environ.sp_dir egg_dirs = glob(join(sp_dir, "*-py*.egg")) for egg_dir in egg_dirs: print("moving egg dir:", egg_dir) try: os.rename(join(egg_dir, "EGG-INFO/PKG-INFO"), egg_dir + "-info") except OSError: pass utils.rm_rf(join(egg_dir, "EGG-INFO")) if isdir(egg_dir): for fn in os.listdir(egg_dir): if fn == "__pycache__": utils.rm_rf(join(egg_dir, fn)) else: os.rename(join(egg_dir, fn), join(sp_dir, fn)) utils.rm_rf(join(sp_dir, "easy-install.pth"))
def test(m, pypi=False): # remove from package cache rm_pkgs_cache(m.dist()) tmp_dir = join(config.croot, 'test-tmp_dir') rm_rf(tmp_dir) os.makedirs(tmp_dir) if not create_files(tmp_dir, m): print("Nothing to test for:", m.dist()) return print("TEST START:", m.dist()) rm_rf(prefix) rm_rf(config.test_prefix) specs = ['%s %s %s' % (m.name(), m.version(), m.build_id()), # as the tests are run by python, we need to specify it 'python %s*' % environ.py_ver] # add packages listed in test/requires for spec in m.get_value('test/requires'): specs.append(spec) create_env(config.test_prefix, specs, pypi) env = dict(os.environ) # prepend bin (or Scripts) directory env['PATH'] = (join(config.test_prefix, bin_dirname) + os.pathsep + env['PATH']) for varname in 'CONDA_PY', 'CONDA_NPY': env[varname] = str(getattr(config, varname)) env['PREFIX'] = config.test_prefix try: subprocess.check_call([config.test_python, join(tmp_dir, 'run_test.py')], env=env, cwd=tmp_dir) except subprocess.CalledProcessError: if not isdir(broken_dir): os.makedirs(broken_dir) shutil.move(bldpkg_path(m), join(broken_dir, "%s.tar.bz2" % m.dist())) sys.exit("TESTS FAILED: " + m.dist()) print("TEST END:", m.dist())
def test_win_subprocess(prefix): """ Make sure the windows subprocess stuff will work before we try it. """ import subprocess from conda.win_batlink import make_bat_link, make_bat_unlink from conda.builder.utils import rm_rf try: print("Testing if we can install certain packages") batfiles = ['ping 1.1.1.1 -n 1 -w 3000 > nul'] dist_dir = join(config.pkgs_dir, 'battest_pkg', 'battest') # First create a file in the prefix. print("making file in the prefix") prefix_battest = join(prefix, 'battest') print("making directories") os.makedirs(join(prefix, 'battest')) print("making file") with open(join(prefix_battest, 'battest1'), 'w') as f: f.write('test1') print("testing file") with open(join(prefix_battest, 'battest1')) as f: assert f.read() == 'test1' # Now unlink it. print("making unlink command") batfiles.append(make_bat_unlink([join(prefix_battest, 'battest1')], [prefix_battest], prefix, dist_dir)) # Now create a file in the pkgs dir print("making file in pkgs dir") print("making directories") os.makedirs(join(dist_dir, 'battest')) print("making file") with open(join(dist_dir, 'battest', 'battest2'), 'w') as f: f.write('test2') print("testing file") with open(join(dist_dir, 'battest', 'battest2')) as f: assert f.read() == 'test2' # And link it print("making link command") batfiles.append(make_bat_link([join('battest', 'battest2')], prefix, dist_dir)) batfile = '\n'.join(batfiles) print("writing batlink_test.bat file") with open(join(prefix, 'batlink_test.bat'), 'w') as f: f.write(batfile) print("running batlink_test.bat file") subprocess.check_call([join(prefix, 'batlink_test.bat')]) print("testing result") print("testing if old file does not exist") assert not os.path.exists(join(prefix_battest, 'battest1')) print("testing if new file does exist") assert os.path.exists(join(prefix_battest, 'battest2')) print("testing content of installed file") with open(join(prefix_battest, 'battest2')) as f: assert f.read() == 'test2' print("testing content of pkg file") with open(join(dist_dir, 'battest', 'battest2')) as f: assert f.read() == 'test2' finally: try: print("cleaning up") rm_rf(join(prefix, 'battest')) rm_rf(join(config.pkgs_dir, 'battest_pkg')) rm_rf(join(prefix, 'batlink_test.bat')) except Exception as e: print(e)