Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
    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