# -*- python -*- Import('env') import SENFSCons, os, os.path, pwd, time, string ########################################################################### def updateRevision(target, source, env): rev = env['ENV']['REVISION'][1:] if ':' in rev: print print "Working copy not clean. Run 'svn update'" print return 1 if 'm' in rev and not ARGUMENTS.get('force_deb'): print print "Working copy contains local changes. Commit first" print return 1 if 's' in rev: rev = rev[:-1] if 'm' in rev: rev = rev[:-1] url = '' for line in os.popen("svn info"): elts=line.split(':',1) if elts[0] == 'URL': url = elts[1].strip() version = None if '/tags/' in url: version = url.rsplit('/',1)[-1].split('_',1)[0] if version[0] not in string.digits: version = None if not version: version = '1:0r%s' % rev changelog = file('debian/changelog.template').read() % { 'version': version, 'rev': rev, 'user': pwd.getpwuid(os.getuid()).pw_gecos.split(',')[0].strip(), 'date': time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) } file('debian/changelog','w').write(changelog) def nonemptyFile(f): try: return os.stat(f).st_size > 0 except OSError: return False def checkLocalConf(target, source, env): if [ True for f in env['LOCAL_CONFIG_FILES'] if nonemptyFile(f) ]: print print "You have made local modifications to one of the following local configuration" print "files:" for f in env['LOCAL_CONFIG_FILES']: print " ",f print print "Building a debian package would remove those files." print print "To continue, remove the offending file(s) and try again. Alternatively," print "build a source package using 'scons debsrc' and may then build debian" print "binary packages from this source-package without disrupting your local" print "configuration." print return 1 if os.environ.get('debian_build'): rev = os.popen("dpkg-parsechangelog | awk '/^Version:/{print $2}'").read().strip() else: rev = 'r' + os.popen("svnversion").read().strip().lower() if rev == 'rexported': rev = os.popen("gitsvnversion").read().strip().lower() logname = os.environ.get('LOGNAME') if not logname: logname = pwd.getpwuid(os.getuid()).pw_name def dpkgIgnoredFilesOpts(target, source, env, for_signature): return [ '-I%s' % (('/' in f) and (os.path.split(os.getcwd())[1])+f or f) for f in env.subst('$DPKG_IGNORED_FILES').split() ] if env.has_key('REVISION'): rev = env['REVISION'] # else: # rev = "(Version %s)" % rev env.Append( ENV = { 'REVISION': rev, 'LOGNAME' : logname, # needed by the debian build scripts 'CONCURRENCY_LEVEL' : env.GetOption('num_jobs') or "1", 'SCONS' : 1, }) env.Replace( LOCAL_CONFIG_FILES = [ '/Doxyfile.local', '/SConscript.local', '/senf/local_config.hh' ], DPKG_IGNORED_FILES = [ '$LOCAL_CONFIG_FILES', '.svn', '.git', '.gitignore', '/_templates', '/TODO', '.project', '.cproject', '.dir.el', '/.project.el' ], DPKG_IGNORED_FILES_OPTS = dpkgIgnoredFilesOpts, BUILDPACKAGE_COMMAND = "dpkg-buildpackage -us -uc -rfakeroot $DPKG_IGNORED_FILES_OPTS", ) env.PhonyTarget('deb', [], [ checkLocalConf, updateRevision, "$BUILDPACKAGE_COMMAND", "fakeroot ./debian/rules clean" ]) env.PhonyTarget('debsrc', [], [ updateRevision, "$BUILDPACKAGE_COMMAND -S", ]) env.PhonyTarget('debbin', [], [ checkLocalConf, updateRevision, "$BUILDPACKAGE_COMMAND -b -nc", "fakeroot ./debian/rules debclean" ]) if not os.environ.get('debian_build'): env.Clean(env.Alias('all'), '#/debian/changelog')