self.installCmdPrefix = config.installCmdPrefix
def configure(self, force=False):
- print "Configuring",self.folder
+ print "Configuring",self.sourceFolder
if not os.path.exists(self.buildFolder): os.makedirs(self.buildFolder)
os.chdir(self.buildFolder)
# check if we actually need to work
os.unsetenv('PKG_CONFIG_PATH')
def build(self):
- print "Building",self.folder
+ print "Building",self.sourceFolder
os.chdir(self.buildFolder)
subprocess.check_call(self.buildCmdPrefix + ['make', '-j'+str(self.jobs)])
def install(self):
- print "Installing",self.folder
+ print "Installing",self.sourceFolder
os.chdir(self.buildFolder)
subprocess.check_call(self.installCmdPrefix + ['make', 'install'])
+
+# TODO: class Debian, which creates & install a debian package
jobs = 2
buildCmdPrefix = ['nice']
installCmdPrefix = []
+# helper function for the modules
+defaultGitVersion = 'origin/master' # or 'origin/4.8' or 'v4.8.4'
+defaultSvnVersion = 'trunk/KDE' # or 'branches/KDE/4.8' or 'tags/KDE/4.8.4'
+def KDEGitModule(name, version=defaultGitVersion):
+ return {'name':name, 'vcs':'kde+git', 'version':version}
+def KDESvnModule(name, svnPath=defaultSvnVersion):
+ return {'name':name, 'vcs':'kde+svn', 'svn-path':svnPath+'/'+name}
# the modules we are interested in
-KDEBranch = 'KDE/4.8'
modules = [
- # KDE core
-# {'type': 'kde+svn', 'in-folder': 'kde', 'name': 'oxygen-icons', 'svn-path': 'tags/KDE/4.8.2/oxygen-icons'},
- {'type': 'kde+git', 'in-folder': 'kde', 'name': 'kdelibs', 'version': 'origin/'+KDEBranch},
- {'type': 'kde+git', 'in-folder': 'kde', 'name': 'kactivities', 'version': 'origin/'+KDEBranch},
- {'type': 'kde+git', 'in-folder': 'kde', 'name': 'kdepimlibs', 'version': 'origin/'+KDEBranch},
- {'type': 'kde+git', 'in-folder': 'kde', 'name': 'kde-runtime', 'version': 'origin/'+KDEBranch},
- {'type': 'kde+git', 'in-folder': 'kde', 'name': 'kde-workspace', 'version': 'origin/'+KDEBranch},
- {'type': 'kde+git', 'in-folder': 'kde', 'name': 'kde-baseapps', 'version': 'origin/'+KDEBranch},
-# {'type': 'kde+git', 'in-folder': 'kde', 'name': 'kdepim-runtime', 'version': 'origin/'+KDEBranch},
- # KDE applications
-# {'type': 'kde+svn', 'in-folder': 'kde', 'name': 'kde-wallpapers', 'svn-path': 'branches/'+KDEBranch+'/kde-wallpapers'},
- {'type': 'kde+svn', 'in-folder': 'kde', 'name': 'kdenetwork', 'svn-path': 'branches/'+KDEBranch+'/kdenetwork'},
- {'type': 'kde+git', 'in-folder': 'kde', 'name': 'konsole', 'version': 'origin/'+KDEBranch},
- {'type': 'kde+git', 'in-folder': 'kde', 'name': 'kate', 'version': 'origin/'+KDEBranch},
- {'type': 'kde+git', 'in-folder': 'kde', 'name': 'kwallet', 'version': 'origin/'+KDEBranch},
- # Extragear applications, addons
-# {'type': 'kde+git', 'in-folder': 'extragear', 'name': 'polkit-kde-agent-1', 'version': 'v0.99.0'},
- {'type': 'kde+git', 'in-folder': 'extragear', 'name': 'networkmanagement', 'version': 'v0.9.0.1'},
-# {'type': 'kde+git', 'in-folder': 'extragear', 'name': 'kdevplatform', 'version': 'v1.2.3'},
-# {'type': 'kde+git', 'in-folder': 'extragear', 'name': 'kdevelop', 'version': 'v4.2.3'},
+ # KDE SC
+ {'folder': 'kde', 'modules': [
+ # KDE core
+ KDESvnModule('oxygen-icons', '/trunk/kdesupport/oxygen-icons'), # released within the SC, but located in kdesupport...
+ KDEGitModule('kdelibs'),
+ KDEGitModule('kactivities'),
+ KDEGitModule('kdepimlibs'),
+ KDEGitModule('kde-runtime'),
+ KDEGitModule('kde-workspace'),
+ KDEGitModule('kde-baseapps'),
+ KDEGitModule('kdepim-runtime'),
+ # KDE applications
+ KDESvnModule('kde-wallpapers'),
+ KDEGitModule('konsole'),
+ KDEGitModule('kate'),
+ KDEGitModule('kwallet'),
+ ]},
+ # Extragear
+ {'folder': 'extragear', 'modules': [
+ KDEGitModule('networkmanagement', 'v0.9.0.3')
+ ]},
]
# load config
config = imp.load_source('config', args.config)
+projects = OrderedDict() # all projects
+workProjects = [] # projects we work on
-# template for a KDE project: combine git/svn with cmake
-def sourceFolder(module):
- return os.path.join(module['in-folder'], module['name'])
-def buildFolder(module):
- return os.path.join(config.buildDir, sourceFolder(module))
-
-class KDEGitProject(vcs.Git, build_system.CMake):
- def __init__(self, module):
- vcs.Git.__init__(self, sourceFolder(module),'kde:'+module['name'], module['version'])
- build_system.CMake.__init__(self, sourceFolder(module), buildFolder(module), config)
- self.name = module['name']
-
-class KDESVNProject(vcs.SVN, build_system.CMake):
- def __init__(self, module):
- vcs.SVN.__init__(self, sourceFolder(module), 'svn://svn.kde.org/home/kde/'+module['svn-path'])
- build_system.CMake.__init__(self, sourceFolder(module), buildFolder(module), config)
+# an entire Project
+class Project:
+ def __init__(self, folder, module):
+ self.folder = folder
self.name = module['name']
-
-moduleTypes = {
- 'kde+git': KDEGitProject,
- 'kde+svn': KDESVNProject
-}
+ # VCS
+ vcsName = module.get('vcs', 'kde+git')
+ if vcsName == 'kde+git':
+ self.vcs = vcs.KDEGit(self.sourceFolder(), module['name'], module['version'])
+ elif vcsName == 'kde+svn':
+ self.vcs = vcs.KDESVN(self.sourceFolder(), module['svn-path'])
+ else:
+ raise Exception("Unknown VCS type "+vcsName)
+ # build system
+ buildSystemName = module.get('build-system', 'cmake')
+ if buildSystemName == 'cmake':
+ self.buildSystem = build_system.CMake(self.sourceFolder(), self.buildFolder(), config)
+ else:
+ raise Exception("Unknown build system type "+buildSystemName)
+
+ def sourceFolder(self):
+ return os.path.join(self.folder, self.name)
+
+ def buildFolder(self):
+ return os.path.join(config.buildDir, self.sourceFolder())
# return the position of the given item in the list
def findInList(list, item):
return i
raise Exception("%s not found in list" % str(item))
-# collect list of projects (separate run, since the actual compilation will change the working directory!)
-projects = OrderedDict()
-for module in config.modules:
- if module['name'] in projects:
- raise Exception("Duplicate module name "+module['name'])
- if not module['type'] in moduleTypes:
- raise Exception("Invalid module type "+module['type'])
- projects[module['name']] = moduleTypes[module['type']](module) # create module of proper type
+# populate list of projects
+def loadProjects(modules, folder=''):
+ for module in modules:
+ if 'folder' in module: # a subpath
+ loadProjects(module['modules'], os.path.join(folder, module['folder']))
+ else: # a proper project
+ if module['name'] in projects:
+ raise Exception("Duplicate module name "+module['name'])
+ projects[module['name']] = Project(folder, module)
# now check what we have to do
-workProjects = []
+loadProjects(config.modules)
if args.modules:
if args.resume_from is not None:
raise Exception("Can not use --resume-from and manually specify modules")
if not module in projects:
raise Exception("Project %s does not exist" % module)
workProjects.append(projects[module])
-elif args.resume_from is None: workProjects = projects.values() # all the projects
+elif args.resume_from is None:
+ workProjects = projects.values() # all the projects
else:
if not args.resume_from in projects:
raise Exception("Project %s does not exist" % args.resume_from)
try:
for phase in args.phases:
if phase == 'update':
- project.update()
+ project.vcs.update()
elif phase == 'configure':
- project.configure(force=args.reconfigure)
+ project.buildSystem.configure(force=args.reconfigure)
elif phase == 'compile':
- project.build()
- project.install()
+ project.buildSystem.build()
+ project.buildSystem.install()
else:
raise Exception("Invalid phase "+phase)
except (subprocess.CalledProcessError, KeyboardInterrupt) as e:
print "(keeping local patches around)",
print
+class KDEGit(Git):
+ def __init__(self, folder, name, commit):
+ Git.__init__(self, folder, 'kde:'+name, commit)
+
# Fetch updates via SVN
class SVN:
def __init__(self, folder, svnPath):
subprocess.check_call(['svn', 'switch', self.svnPath]) # and update to the URL we got
else:
subprocess.check_call(['svn', 'co', self.svnPath, self.folder])# just download it
+
+class KDESVN(SVN):
+ def __init__(self, folder, svnPath):
+ SVN.__init__(self, folder, 'svn://svn.kde.org/home/kde/'+svnPath)