851 | def install_exe(self, dist_filename, tmpdir): |
852 | |
853 | cfg = extract_wininst_cfg(dist_filename) |
854 | if cfg is None: |
855 | raise DistutilsError( |
856 | "%s is not a valid distutils Windows .exe" % dist_filename |
857 | ) |
858 | |
859 | dist = Distribution( |
860 | None, |
861 | project_name=cfg.get('metadata','name'), |
862 | version=cfg.get('metadata','version'), platform=get_platform(), |
863 | ) |
864 | |
865 | |
866 | egg_path = dist.location = os.path.join(tmpdir, dist.egg_name()+'.egg') |
867 | egg_tmp = egg_path + '.tmp' |
868 | _egg_info = os.path.join(egg_tmp, 'EGG-INFO') |
869 | pkg_inf = os.path.join(_egg_info, 'PKG-INFO') |
870 | ensure_directory(pkg_inf) |
871 | dist._provider = PathMetadata(egg_tmp, _egg_info) |
872 | self.exe_to_egg(dist_filename, egg_tmp) |
873 | |
874 | |
875 | if not os.path.exists(pkg_inf): |
876 | f = open(pkg_inf,'w') |
877 | f.write('Metadata-Version: 1.0\n') |
878 | for k,v in cfg.items('metadata'): |
879 | if k != 'target_version': |
880 | f.write('%s: %s\n' % (k.replace('_','-').title(), v)) |
881 | f.close() |
882 | script_dir = os.path.join(_egg_info,'scripts') |
883 | self.delete_blockers( |
884 | [os.path.join(script_dir,args[0]) for args in get_script_args(dist)] |
885 | ) |
886 | |
887 | bdist_egg.make_zipfile( |
888 | egg_path, egg_tmp, verbose=self.verbose, dry_run=self.dry_run |
889 | ) |
890 | |
891 | return self.install_egg(egg_path, tmpdir) |