def __convert_copy_files(self, cab, copy_files): for i in range(len(copy_files)): file = copy_files[i] out = CabWriter.munge_filename(file[0], i + 1) shutil.copy(file[1] + file[0], self.__dest + out) dir = self.__get_dir_id(cab, file[3]) cab.Files.append([out, self.__dest, file[2], file[3], file[4], dir, file[0]]) return True
def __parse_setup_dll(self, cab, files): if ('CESetupDLL' not in self.__inf['DefaultInstall']): return False dll_in = self.__inf['DefaultInstall']['CESetupDLL'] if dll_in not in files: return False dll_out = self.__dest + CabWriter.munge_filename(dll_in, 999) shutil.copy(files[dll_in] + dll_in, dll_out) cab.SetupFile = dll_out return True
def glue(self): verbose = ('verbose' in self.__parameters) if verbose: print 'Reading INF file "' + self.__parameters['inf-file'] + '" ...' inf = InfReader.InfReader() if not inf.read(self.__parameters['inf-file']): return False self.__inf = inf.raw() if 'dest-dir' in self.__parameters: self.__dest = self.__parameters['dest-dir'] if not self.__dest.endswith('/'): self.__dest += '/' if not os.path.exists(self.__dest): os.mkdir(self.__dest) if verbose: print 'Processing INF file ...' cab = CabWriter.CabWriter() if not self.__parse_general(cab): return False if not self.__parse_device(cab): return False names = self.__parse_disk_names(cab) files = self.__parse_disk_files(cab, names) destinations = self.__parse_destinations(cab) copy_files = self.__parse_copy_files(cab, files, destinations) self.__convert_copy_files(cab, copy_files) self.__parse_setup_dll(cab, files) reg = self.__parse_registry(cab) self.__convert_registry(cab, reg) links = self.__parse_links(cab, destinations) self.__convert_links(cab, links) cab_file = self.__create_output_filename() if cab_file == "": return False if verbose: print 'Writing CAB file to "' + self.__dest + cab_file + '" ...' if not cab.write(cab_file, self.__dest, verbose = verbose): return False if verbose: print 'Removing temporary files ...' os.unlink(self.__dest + 'manifest.000') for file in cab.Files: os.unlink(file[1] + file[0]) if cab.SetupFile != "": os.unlink(cab.SetupFile) if verbose: print 'Done.' return True