Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
@params(pb=PACKAGE_SOURCE_TYPES, test=bool)
def build(self, pb, test=False, target=None, generator=None):
pb = self.parse_pkg_build(pb)
src_dir = pb.pkg_src.get_src_dir()
with self.create_builder(pb.to_fname()) as builder:
# Install any dependencies first
self.install_deps(pb, src_dir, generator=generator, test=test)
# Configure and build
if not builder.exists: builder.configure(src_dir, defines=pb.define, generator=generator)
builder.build(variant='Release', target=target)
# Run tests if enabled
if test: builder.test(variant='Release')
@params(pb=PACKAGE_SOURCE_TYPES)
def build_configure(self, pb):
pb = self.parse_pkg_build(pb)
src_dir = pb.pkg_src.get_src_dir()
if 'ccmake' in self.cmd:
self.cmd.ccmake([src_dir], cwd=self.build_path(pb))
elif 'cmake-gui' in self.cmd:
self.cmd.cmake_gui([src_dir], cwd=self.build_path(pb))
@params(pb=PACKAGE_SOURCE_TYPES)
def build_path(self, pb):
pb = self.parse_pkg_build(pb)
return self.get_builder_path(pb.to_fname(), 'build')
@params(pkg=PACKAGE_SOURCE_TYPES)
def parse_pkg_src(self, pkg, start=None, no_recipe=False):
if isinstance(pkg, PackageSource): return pkg
if isinstance(pkg, PackageBuild): return self.parse_pkg_src(pkg.pkg_src, start)
name, url = parse_alias(pkg)
self.log('parse_pkg_src:', name, url, pkg)
if '://' not in url:
return self.parse_src_file(name, url, start) or \
(None if no_recipe else self.parse_src_recipe(name, url)) or \
self.parse_src_github(name, url)
return PackageSource(name=name, url=url)
@params(pkg=PACKAGE_SOURCE_TYPES)
def parse_pkg_build(self, pkg, start=None, no_recipe=False):
if isinstance(pkg, PackageBuild):
pkg.pkg_src = self.parse_pkg_src(pkg.pkg_src, start, no_recipe)
if pkg.pkg_src.recipe: pkg = self.from_recipe(pkg.pkg_src.recipe, pkg)
if pkg.cmake: pkg.cmake = find_cmake(pkg.cmake, start)
return pkg
else:
pkg_src = self.parse_pkg_src(pkg, start, no_recipe)
if pkg_src.recipe: return self.from_recipe(pkg_src.recipe, pkg_src.name)
else: return PackageBuild(pkg_src)
@params(s=six.string_types)
def parse_alias(s):
i = s.find(',')
if i > 0: return s[0:i], s[i+1:]
else: return parse_deprecated_alias(s)
@params(s=six.string_types)
def parse_deprecated_alias(s):
i = s.find(':', 0, max(s.find('://'), s.find(':\\')))
if i > 0:
click.echo("WARNING: Using ':' for aliases is now deprecated.")
return s[0:i], s[i+1:]
else: return None, s
@params(pkg=PACKAGE_SOURCE_TYPES)
def remove(self, pkg):
self.unlink(pkg, delete=True)
@params(pb=PACKAGE_SOURCE_TYPES)
def build_clean(self, pb):
pb = self.parse_pkg_build(pb)
p = self.get_builder_path(pb.to_fname())
if os.path.exists(p): shutil.rmtree(p)
@params(pb=PACKAGE_SOURCE_TYPES, test=bool, test_all=bool, update=bool, track=bool)
def install(self, pb, test=False, test_all=False, generator=None, update=False, track=True, insecure=False):
pb = self.parse_pkg_build(pb)
pkg_dir = self.get_package_directory(pb.to_fname())
unlink_dir = self.get_unlink_directory(pb.to_fname())
install_dir = self.get_package_directory(pb.to_fname(), 'install')
# If its been unlinked, then link it in
if os.path.exists(unlink_dir):
if update: shutil.rmtree(unlink_dir)
else:
self.link(pb)
self.write_parent(pb, track=track)
return "Linking package {}".format(pb.to_name())
if os.path.exists(pkg_dir):
self.write_parent(pb, track=track)
if update: self.remove(pb)
else: return "Package {} already installed".format(pb.to_name())