#!/usr/bin/python import os import sys import shutil import optparse def prep_dirs(base_dir): for i in ["BUILD", "INSTALL", "RPMS", "SOURCES", "SPECS", "SRPMS"]: new_dir = os.path.join(base_dir, i) if not os.path.exists(new_dir): os.makedirs(new_dir) def prep_source(base_dir): source_dir = os.path.join(base_dir, "_build", "SOURCES") for file in os.listdir(base_dir): if file == "_build": continue full_name = os.path.join(base_dir, file) if not os.path.isfile(full_name): continue shutil.copy(full_name, os.path.join(source_dir, file)) def prepare_condor_tarball(build_dir, source_dir, branch): cur_dir = os.getcwd() tarball_dir = os.path.join(build_dir, "SOURCES") fd = open(os.path.join(tarball_dir, "condor.tar.gz"), "w") fdnum = fd.fileno() try: os.chdir(source_dir) pid = os.fork() if not pid: try: os.dup2(fdnum, 1) os.execvp("/bin/sh", ["sh", "-c", "git archive %s | gzip -7" % branch]) finally: os._exit(1) else: (pid, status) = os.waitpid(pid, 0) if status: raise Exception("git archive failed") finally: os.chdir(cur_dir) def get_rpmbuild_defines(results_dir): results_dir = os.path.abspath(results_dir) defines = [] defines += ["--define=_topdir %s" % results_dir] return defines def parse_opts(): parser = optparse.OptionParser() parser.add_option("-s", "--source-dir", help="Location of the Condor git repo clone.", dest="source_dir", default="~/projects/condor") parser.add_option("-b", "--branch", help="Name of the git branch to use for the condor build.", dest="branch", default="master") opts, args = parser.parse_args() opts.source_dir = os.path.expanduser(opts.source_dir) return args, opts def main(): args, opts = parse_opts() if len(args) != 2: print "Usage: hcc_make_condor " print "Valid commands are 'build', 'prep', and 'srpm'" print " should point at the fedpkg-condor-hcc clone." return 1 build_dir = os.path.join(args[1], "_build") prep_dirs(build_dir) defines = get_rpmbuild_defines(build_dir) prep_source(args[1]) prepare_condor_tarball(build_dir, opts.source_dir, opts.branch) if args[0] == 'build': os.execvp("rpmbuild", ["rpmbuild"] + defines + ["-ba", "condor.spec"]) elif args[0] == 'srpm': os.execvp("rpmbuild", ["rpmbuild"] + defines + ["-bs", "condor.spec"]) elif args[0] == "prep": os.execvp("rpmbuild", ["rpmbuild"] + defines + ["-bp", "condor.spec"]) else: print "Unknown action: %s" % args[0] return 1 if __name__ == '__main__': sys.exit(main())