You are not logged in.

#1 2005-07-22 10:11:03

sweiss
Member
Registered: 2004-02-16
Posts: 635

repackage - repackaging a package without rebuilding

#!/usr/bin/env python

import os, sys

def parseArgumentList(arg_list):
    """Parses the arguments to be used in the main function"""
    if len(arg_list)==2:
        return arg_list[1]
    return 'PKGBUILD'

def GenerateTempBuild(pkgbuild):
    """Returns a modified PKGBUILD with a dummy build() function"""
    start_build_index = pkgbuild.index('build() {n')
    
    braces_counter=1
    line_remove_counter=0
    for i in range( start_build_index+1, len(pkgbuild) ):
        if pkgbuild[i].find("{")!=-1:
            braces_counter+=1
            line_remove_counter+=1
            continue
        if pkgbuild[i].find("}")!=-1:
            braces_counter-=1
            if braces_counter==0:
                break
            line_remove_counter+=1
            continue
        line_remove_counter+=1
    
    for i in range(line_remove_counter):
        pkgbuild.pop(start_build_index+1)
        
    pkgbuild.insert(start_build_index+1, ' mv $startdir/.pkg-repackage/* $startdir/pkg/n')
        
    return pkgbuild
    
def main(args):
    orig_pkgbuild_path = parseArgumentList(args)
    orig_pkgbuild = file(orig_pkgbuild_path,'r').readlines()
    
    modified_pkgbuild = GenerateTempBuild(orig_pkgbuild)
    modified_pkgbuild_file = file('.pkgbuild-repackage','w')
    
    for i in range(len(modified_pkgbuild)):
        modified_pkgbuild_file.write(modified_pkgbuild[i])
    modified_pkgbuild_file.close()
    
    os.system('mkdir .pkg-repackage')
    os.system('mv pkg/* .pkg-repackage')
    os.system('makepkg -e -f -p .pkgbuild-repackage')
    os.system('rm .pkgbuild-repackage')

if __name__=="__main__":
    main(sys.argv)

This is a very initial draft. I tested it and it seems to work, still I can't guarantee it'll work in any case.

Anyway, this is useful for adding dependencies to an existing package, adding install scripts in case you forgot those and so on.

Until it's implemented more properly in makepkg,
Enjoy.

Offline

Board footer

Powered by FluxBB