Ejemplo n.º 1
0
def build_bdist_deb():
    built_packages = set()

    def build_deb(package_name, dependencies):
        dependecies_str = format_dependency_string(dependencies)
        msg = "Building package {}, with dependencies: {}".format(package_name, dependencies)
        logger.info(msg)
        execute(
            "/usr/bin/python setup.py --command-packages=stdeb.command sdist_dsc --package={}".format(
                get_deb_package_name(package_name)
            )
            + dependecies_str
        )
        package_dir = sorted([item for item in glob.glob(os.path.join("deb_dist", "*")) if os.path.isdir(item)])[-1]
        with change_directory_context(package_dir):
            execute("dpkg-buildpackage -b")

    def copy_deb_to_parts(egg_dir):
        from infi.os_info import get_platform_string

        for debfile in glob.glob(os.path.join(egg_dir, "deb_dist", "*.deb")):
            basename = os.path.basename(debfile.replace("_all", "-" + get_platform_string()))
            basename = basename.replace("_amd64", "-" + get_platform_string())
            basename = basename.replace("_i386", "-" + get_platform_string())
            shutil.copy(debfile, os.path.join("parts", basename))

    def build_dependency(package_name):
        dependencies = get_level1_dependencies(package_name)
        if package_name != get_name():
            deb_package_name = get_deb_package_name(package_name)
            # if package_in_apt_cache(deb_package_name):
            #     return

            compressed_egg_path = find_pacakge_in_cache_dist(package_name)
            temp_dir = tempfile.gettempdir()
            if compressed_egg_path.endswith(".egg"):
                compressed_egg_path = convert_egg_to_tar_gz(compressed_egg_path)
            extracted_egg_dir = os.path.join(temp_dir, os.path.basename(remove_zip_extension(compressed_egg_path)))
            if os.path.exists(extracted_egg_dir):
                shutil.rmtree(extracted_egg_dir)
            unzip(compressed_egg_path, temp_dir)
            with change_directory_context(extracted_egg_dir):
                remove_pyc_files()
                build_deb(package_name, dependencies)
            copy_deb_to_parts(extracted_egg_dir)
            built_packages.add(package_name.lower())
        else:
            build_deb(package_name, dependencies)
            copy_deb_to_parts(".")

        for package, dep, version_specific_dep in dependencies:
            if not dep.lower() in built_packages:
                build_dependency(dep)

    utils.download_setuptools(os.path.join(".cache", "dist"))
    utils.download_buildout(os.path.join(".cache", "dist"))
    build_dependency(get_name())
Ejemplo n.º 2
0
 def install(self):
     with self.with_most_mortem():
         self.delete_non_production_packages_from_cache_dist()
         self.signtool = self.get_signtool()
         self.write_bootstrap_for_production()
         self.write_buildout_configuration_file_for_production()
         utils.download_buildout(self.get_download_cache_dist())
         utils.download_setuptools(self.get_download_cache_dist())
         silent_launcher = self.get_silent_launcher()
         if self.get_add_remove_programs_icon() and not self.icons_already_set():
             self.set_icon_in_all_executables_in_project()
             utils.rcedit.set_icon_in_executable(silent_launcher, self.get_add_remove_programs_icon())
             self.mark_icons_set()
         if self.should_sign_files() and not self.already_signed():
             self.sign_all_executables_in_project()
             self.signtool.sign_file(silent_launcher)
             self.mark_signed()
         package = self.build_package(silent_launcher)
         logger.debug("Built {}".format(package))
         if self.should_sign_files():
             self.signtool.sign_file(package)
             logger.debug("Signed {}".format(package))
         return [package, ]