# dsc import py2dsc import locale import commands from subprocess import * try: old_locale,iso=locale.getlocale(locale.LC_TIME) locale.setlocale(locale.LC_TIME,'en_US') except: pass dsccontent = py2dsc.py2dsc("%(version)s-%(buildversion)s"%locals(), "%(depends)s"%locals(), ("%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.tar.gz"%locals(),), Format='1.0', Source="%(name)s"%locals(), Version="%(version)s-%(buildversion)s"%locals(), Maintainer="%(author)s <%(mail)s>"%locals(), Architecture="%(arch)s"%locals(), ) try: locale.setlocale(locale.LC_TIME,old_locale) except: pass f = open("%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc"%locals(),"wb") f.write(dsccontent._getContent()) f.close() # changes import py2changes
def generate(self, version, buildversion, changelog="", tar=False, dsc=False, changes=False, build=True, rpm=False, src=False): """ generate a deb of version 'version', with or without 'changelog', with or without a rpm (in the current folder) return a list of generated files """ if not sum([len(i) for i in self.__files.values()]) > 0: raise Py2debException("no files are defined") if not changelog: changelog = "* no changelog" name = self.name description = self.description license = self.license depends = self.depends section = self.section arch = self.arch url = self.url author = self.author mail = self.mail repository = self.repository distribution = self.distribution urgency = self.urgency build_depends = self.build_depends files = self.__files if section not in Py2deb.SECTIONS: raise Py2debException("section '%s' is unknown (%s)" % (section, str(Py2deb.SECTIONS))) if arch not in Py2deb.ARCHS: raise Py2debException("arch '%s' is unknown (%s)" % (arch, str(Py2deb.ARCHS))) if license not in Py2deb.LICENSES: raise Py2debException("License '%s' is unknown (%s)" % (license, str(Py2deb.LICENSES))) # create dates (buildDate,buildDateYear) d = datetime.now() import locale old_locale, iso = locale.getlocale(locale.LC_TIME) locale.setlocale(locale.LC_TIME, 'en_US') buildDate = d.strftime("%a, %d %b %Y %H:%M:%S +0000") buildDateYear = str(d.year) locale.setlocale(locale.LC_TIME, old_locale) #clean description (add a space before each next lines) description = description.replace("\r", "").strip() description = "\n ".join(description.split("\n")) #clean changelog (add 2 spaces before each next lines) changelog = changelog.replace("\r", "").strip() changelog = "\n ".join(changelog.split("\n")) TEMP = ".py2deb_build_folder" DEST = os.path.join(TEMP, name) DEBIAN = os.path.join(DEST, "debian") # let's start the process try: shutil.rmtree(TEMP) except: pass os.makedirs(DEBIAN) try: rules = [] dirs = [] for path in files: for file, nfile in files[path]: if os.path.isfile(file): # it's a file if file.startswith("/"): # if absolute path # we need to change dest dest = os.path.join(DEST, nfile) else: dest = os.path.join(DEST, file) # copy file to be packaged destDir = os.path.dirname(dest) if not os.path.isdir(destDir): os.makedirs(destDir) shutil.copy2(file, dest) ndir = os.path.join(path, os.path.dirname(nfile)) nname = os.path.basename(nfile) # make a line RULES to be sure the destination folder is created # and one for copying the file fpath = "/".join(["$(CURDIR)", "debian", name + ndir]) rules.append('mkdir -p "%s"' % fpath) rules.append('cp -a "%s" "%s"' % (file, os.path.join(fpath, nname))) # append a dir dirs.append(ndir) else: raise Py2debException( "unknown file '' " % file ) # shouldn't be raised (because controlled before) # make rules right rules = "\n\t".join(rules) + "\n" # make dirs right dirs = [i[1:] for i in set(dirs)] dirs.sort() #========================================================================== # CREATE debian/dirs #========================================================================== open(os.path.join(DEBIAN, "dirs"), "w").write("\n".join(dirs)) #========================================================================== # CREATE debian/changelog #========================================================================== clog = """%(name)s (%(version)s-%(buildversion)s) stable; urgency=low %(changelog)s -- %(author)s <%(mail)s> %(buildDate)s """ % locals() open(os.path.join(DEBIAN, "changelog"), "w").write(clog) #========================================================================== # CREATE debian/compat #========================================================================== open(os.path.join(DEBIAN, "compat"), "w").write("5\n") #========================================================================== # CREATE debian/control #========================================================================== txt = """Source: %(name)s Section: %(section)s Priority: extra Maintainer: %(author)s <%(mail)s> Build-Depends: %(build_depends)s Standards-Version: 3.7.2 Package: %(name)s Architecture: %(arch)s Depends: %(depends)s Description: %(description)s""" % locals() open(os.path.join(DEBIAN, "control"), "w").write(txt) #========================================================================== # CREATE debian/control #========================================================================== txt = open(self.postinst, "r").readlines() open(os.path.join(DEBIAN, "postinst"), "w").write("".join(txt)) os.chmod(os.path.join(DEBIAN, "postinst"), 0755) #========================================================================== # CREATE debian/copyright #========================================================================== copy = {} copy["gpl"] = """ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. """ copy["lgpl"] = """ This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU Lesser General Public License can be found in `/usr/share/common-licenses/LGPL'. """ copy["bsd"] = """ Redistribution and use in source and binary forms, with or without modification, are permitted under the terms of the BSD License. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. On Debian systems, the complete text of the BSD License can be found in `/usr/share/common-licenses/BSD'. """ copy["artistic"] = """ This program is free software; you can redistribute it and/or modify it under the terms of the "Artistic License" which comes with Debian. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. On Debian systems, the complete text of the Artistic License can be found in `/usr/share/common-licenses/Artistic'. """ txtLicense = copy[license] pv = __version__ txt = """This package was py2debianized(%(pv)s) by %(author)s <%(mail)s> on %(buildDate)s. It was downloaded from %(url)s Upstream Author: %(author)s <%(mail)s> Copyright: %(buildDateYear)s by %(author)s License: %(txtLicense)s The Debian packaging is (C) %(buildDateYear)s, %(author)s <%(mail)s> and is licensed under the GPL, see above. # Please also look if there are files or directories which have a # different copyright/license attached and list them here. """ % locals() open(os.path.join(DEBIAN, "copyright"), "w").write(txt) #========================================================================== # CREATE debian/rules #========================================================================== txt = """#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 CFLAGS = -Wall -g ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # ====================================================== #$(MAKE) DESTDIR="$(CURDIR)/debian/%(name)s" install mkdir -p "$(CURDIR)/debian/%(name)s" # %(rules)s # ====================================================== # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installchangelogs debian/changelog dh_installdocs dh_installexamples # dh_install # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_python # dh_installinit # dh_installcron # dh_installinfo dh_installman dh_link dh_strip dh_compress dh_fixperms # dh_perl # dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure """ % locals() open(os.path.join(DEBIAN, "rules"), "w").write(txt) os.chmod(os.path.join(DEBIAN, "rules"), 0755) ########################################################################### ########################################################################### ########################################################################### #http://www.debian.org/doc/manuals/maint-guide/ch-build.fr.html ret = [] if build == True: ret = os.system( 'cd "%(DEST)s"; dpkg-buildpackage -tc -rfakeroot -us -uc' % locals()) if ret != 0: raise Py2debException("buildpackage failed (see output)") l = glob("%(TEMP)s/%(name)s*.deb" % locals()) if len(l) != 1: raise Py2debException("don't find builded deb") tdeb = l[0] deb = os.path.basename(tdeb) shutil.move(tdeb, deb) ret = [ deb, ] if rpm: rpm = deb2rpm(deb) ret.append(rpm) if src: l = glob("%(TEMP)s/%(name)s*.tar.gz" % locals()) if len(l) != 1: raise Py2debException( "don't find source package tar.gz") tar = os.path.basename(l[0]) shutil.move(l[0], tar) ret.append(tar) if tar == True: print 'tar' import py2tar tarcontent = py2tar.py2tar("%(DEST)s" % locals()) open( "%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.tar.gz" % locals(), "wb").write(tarcontent.packed()) if dsc == True: print 'dsc' import py2dsc import locale import commands from subprocess import * old_locale, iso = locale.getlocale(locale.LC_TIME) locale.setlocale(locale.LC_TIME, 'en_US') dsccontent = py2dsc.py2dsc( "%(version)s-%(buildversion)s" % locals(), "%(depends)s" % locals(), ("%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.tar.gz" % locals(), ), Format='1.0', Source="%(name)s" % locals(), Version="%(version)s-%(buildversion)s" % locals(), Maintainer="%(author)s <%(mail)s>" % locals(), Architecture="%(arch)s" % locals(), ) locale.setlocale(locale.LC_TIME, old_locale) f = open( "%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc" % locals(), "wb") f.write(dsccontent._getContent()) f.close() print "signing dsc" fileHandle = open('/tmp/py2deb.tmp', 'w') fileHandle.write('#!/bin/sh\n') fileHandle.write("cd " + os.path.dirname(sys.argv[0]) + "\n") fileHandle.write( "gpg --local-user %(mail)s --clearsign %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc\n" % locals()) fileHandle.write( "mv %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc.asc %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc\n" % locals()) fileHandle.write('\nread -p "Press ENTER to continue ..." foo') fileHandle.write('\nexit') fileHandle.close() commands.getoutput("chmod 777 /tmp/py2deb.tmp") commands.getoutput("/usr/bin/osso-xterm /tmp/py2deb.tmp") # call(['/usr/bin/osso-xterm','/tmp/py2deb.tmp']) raw_input('Press ENTER to continue ...') if changes == True: print 'changes' import py2changes import locale old_locale, iso = locale.getlocale(locale.LC_TIME) locale.setlocale(locale.LC_TIME, 'en_US') changescontent = py2changes.py2changes( "%(author)s <%(mail)s>" % locals(), "%(description)s" % locals(), "%(changelog)s" % locals(), ( "%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.tar.gz" % locals(), "%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc" % locals(), ), "%(section)s" % locals(), "%(repository)s" % locals(), Format='1.7', Date=time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()), Source="%(name)s" % locals(), Architecture="%(arch)s" % locals(), Version="%(version)s-%(buildversion)s" % locals(), Distribution="%(distribution)s" % locals(), Urgency="%(urgency)s" % locals(), Maintainer="%(author)s <%(mail)s>" % locals()) f = open( "%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.changes" % locals(), "wb") f.write(changescontent.getContent()) f.close() locale.setlocale(locale.LC_TIME, old_locale) fileHandle = open('/tmp/py2deb2.tmp', 'w') fileHandle.write('#!/bin/sh\n') fileHandle.write("cd " + os.path.dirname(sys.argv[0]) + "\n") fileHandle.write( "gpg --local-user %(mail)s --clearsign %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.changes\n" % locals()) fileHandle.write( "mv %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.changes.asc %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.changes\n" % locals()) fileHandle.write('\nread -p "Press ENTER to continue ..." foo') fileHandle.write('\nexit') fileHandle.close() commands.getoutput("chmod 777 /tmp/py2deb2.tmp") commands.getoutput("/usr/bin/osso-xterm /tmp/py2deb2.tmp") raw_input('Press ENTER to continue ...') l = glob("%(TEMP)s/%(name)s*.tar.gz" % locals()) if len(l) != 1: raise Py2debException("don't find source package tar.gz") tar = os.path.basename(l[0]) shutil.move(l[0], tar) ret.append(tar) l = glob("%(TEMP)s/%(name)s*.dsc" % locals()) if len(l) != 1: raise Py2debException("don't find source package dsc") tar = os.path.basename(l[0]) shutil.move(l[0], tar) ret.append(tar) l = glob("%(TEMP)s/%(name)s*.changes" % locals()) if len(l) != 1: raise Py2debException("don't find source package changes") tar = os.path.basename(l[0]) shutil.move(l[0], tar) ret.append(tar) return ret #~ except Exception,m: #~ raise Py2debException("build error :"+str(m)) finally: if Py2deb.clear: shutil.rmtree(TEMP)
def generate(self,version,buildversion,changelog="",tar=False,dsc=False,changes=False,build=True,rpm=False,src=False): """ generate a deb of version 'version', with or without 'changelog', with or without a rpm (in the current folder) return a list of generated files """ if not sum([len(i) for i in self.__files.values()])>0: raise Py2debException("no files are defined") if not changelog: changelog="* no changelog" name = self.name description = self.description license = self.license depends = self.depends section = self.section arch = self.arch url = self.url author = self.author mail = self.mail repository = self.repository distribution = self.distribution urgency = self.urgency build_depends = self.build_depends files=self.__files if section not in Py2deb.SECTIONS: raise Py2debException("section '%s' is unknown (%s)" % (section,str(Py2deb.SECTIONS))) if arch not in Py2deb.ARCHS: raise Py2debException("arch '%s' is unknown (%s)"% (arch,str(Py2deb.ARCHS))) if license not in Py2deb.LICENSES: raise Py2debException("License '%s' is unknown (%s)" % (license,str(Py2deb.LICENSES))) # create dates (buildDate,buildDateYear) d=datetime.now() import locale old_locale,iso=locale.getlocale(locale.LC_TIME) locale.setlocale(locale.LC_TIME,'en_US') buildDate=d.strftime("%a, %d %b %Y %H:%M:%S +0000") buildDateYear=str(d.year) locale.setlocale(locale.LC_TIME,old_locale) #clean description (add a space before each next lines) description=description.replace("\r","").strip() description = "\n ".join(description.split("\n")) #clean changelog (add 2 spaces before each next lines) changelog=changelog.replace("\r","").strip() changelog = "\n ".join(changelog.split("\n")) TEMP = ".py2deb_build_folder" DEST = os.path.join(TEMP,name) DEBIAN = os.path.join(DEST,"debian") # let's start the process try: shutil.rmtree(TEMP) except: pass os.makedirs(DEBIAN) try: rules=[] dirs=[] for path in files: for file,nfile in files[path]: if os.path.isfile(file): # it's a file if file.startswith("/"): # if absolute path # we need to change dest dest=os.path.join(DEST,nfile) else: dest=os.path.join(DEST,file) # copy file to be packaged destDir = os.path.dirname(dest) if not os.path.isdir(destDir): os.makedirs(destDir) shutil.copy2(file,dest) ndir = os.path.join(path,os.path.dirname(nfile)) nname = os.path.basename(nfile) # make a line RULES to be sure the destination folder is created # and one for copying the file fpath = "/".join(["$(CURDIR)","debian",name+ndir]) rules.append('mkdir -p "%s"' % fpath) rules.append('cp -a "%s" "%s"' % (file,os.path.join(fpath,nname))) # append a dir dirs.append(ndir) else: raise Py2debException("unknown file '' "%file) # shouldn't be raised (because controlled before) # make rules right rules= "\n\t".join(rules) + "\n" # make dirs right dirs= [ i[1:] for i in set(dirs)] dirs.sort() #========================================================================== # CREATE debian/dirs #========================================================================== open(os.path.join(DEBIAN,"dirs"),"w").write("\n".join(dirs)) #========================================================================== # CREATE debian/changelog #========================================================================== clog="""%(name)s (%(version)s-%(buildversion)s) stable; urgency=low %(changelog)s -- %(author)s <%(mail)s> %(buildDate)s """ % locals() open(os.path.join(DEBIAN,"changelog"),"w").write(clog) #========================================================================== # CREATE debian/compat #========================================================================== open(os.path.join(DEBIAN,"compat"),"w").write("5\n") #========================================================================== # CREATE debian/control #========================================================================== txt="""Source: %(name)s Section: %(section)s Priority: extra Maintainer: %(author)s <%(mail)s> Build-Depends: %(build_depends)s Standards-Version: 3.7.2 Package: %(name)s Architecture: %(arch)s Depends: %(depends)s Description: %(description)s""" % locals() open(os.path.join(DEBIAN,"control"),"w").write(txt) #========================================================================== # CREATE debian/control #========================================================================== txt = open(self.postinst,"r").readlines() open(os.path.join(DEBIAN,"postinst"),"w").write("".join(txt)) os.chmod(os.path.join(DEBIAN,"postinst"),0755) #========================================================================== # CREATE debian/copyright #========================================================================== copy={} copy["gpl"]=""" This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. """ copy["lgpl"]=""" This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU Lesser General Public License can be found in `/usr/share/common-licenses/LGPL'. """ copy["bsd"]=""" Redistribution and use in source and binary forms, with or without modification, are permitted under the terms of the BSD License. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. On Debian systems, the complete text of the BSD License can be found in `/usr/share/common-licenses/BSD'. """ copy["artistic"]=""" This program is free software; you can redistribute it and/or modify it under the terms of the "Artistic License" which comes with Debian. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. On Debian systems, the complete text of the Artistic License can be found in `/usr/share/common-licenses/Artistic'. """ txtLicense = copy[license] pv=__version__ txt="""This package was py2debianized(%(pv)s) by %(author)s <%(mail)s> on %(buildDate)s. It was downloaded from %(url)s Upstream Author: %(author)s <%(mail)s> Copyright: %(buildDateYear)s by %(author)s License: %(txtLicense)s The Debian packaging is (C) %(buildDateYear)s, %(author)s <%(mail)s> and is licensed under the GPL, see above. # Please also look if there are files or directories which have a # different copyright/license attached and list them here. """ % locals() open(os.path.join(DEBIAN,"copyright"),"w").write(txt) #========================================================================== # CREATE debian/rules #========================================================================== txt="""#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 CFLAGS = -Wall -g ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # ====================================================== #$(MAKE) DESTDIR="$(CURDIR)/debian/%(name)s" install mkdir -p "$(CURDIR)/debian/%(name)s" # %(rules)s # ====================================================== # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installchangelogs debian/changelog dh_installdocs dh_installexamples # dh_install # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_python # dh_installinit # dh_installcron # dh_installinfo dh_installman dh_link dh_strip dh_compress dh_fixperms # dh_perl # dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure """ % locals() open(os.path.join(DEBIAN,"rules"),"w").write(txt) os.chmod(os.path.join(DEBIAN,"rules"),0755) ########################################################################### ########################################################################### ########################################################################### #http://www.debian.org/doc/manuals/maint-guide/ch-build.fr.html ret = [] if build==True: ret=os.system('cd "%(DEST)s"; dpkg-buildpackage -tc -rfakeroot -us -uc' % locals()) if ret!=0: raise Py2debException("buildpackage failed (see output)") l=glob("%(TEMP)s/%(name)s*.deb"%locals()) if len(l)!=1: raise Py2debException("don't find builded deb") tdeb = l[0] deb = os.path.basename(tdeb) shutil.move(tdeb,deb) ret=[deb,] if rpm: rpm = deb2rpm(deb) ret.append(rpm) if src: l=glob("%(TEMP)s/%(name)s*.tar.gz"%locals()) if len(l)!=1: raise Py2debException("don't find source package tar.gz") tar = os.path.basename(l[0]) shutil.move(l[0],tar) ret.append(tar) if tar==True: print 'tar' import py2tar tarcontent= py2tar.py2tar("%(DEST)s" % locals() ) open("%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.tar.gz"%locals(),"wb").write(tarcontent.packed()) if dsc==True: print 'dsc' import py2dsc import locale import commands from subprocess import * old_locale,iso=locale.getlocale(locale.LC_TIME) locale.setlocale(locale.LC_TIME,'en_US') dsccontent = py2dsc.py2dsc("%(version)s-%(buildversion)s"%locals(), "%(depends)s"%locals(), ("%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.tar.gz"%locals(),), Format='1.0', Source="%(name)s"%locals(), Version="%(version)s-%(buildversion)s"%locals(), Maintainer="%(author)s <%(mail)s>"%locals(), Architecture="%(arch)s"%locals(), ) locale.setlocale(locale.LC_TIME,old_locale) f = open("%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc"%locals(),"wb") f.write(dsccontent._getContent()) f.close() print "signing dsc" fileHandle = open('/tmp/py2deb.tmp', 'w') fileHandle.write('#!/bin/sh\n') fileHandle.write("cd " +os.path.dirname(sys.argv[0])+ "\n") fileHandle.write("gpg --local-user %(mail)s --clearsign %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc\n"%locals()) fileHandle.write("mv %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc.asc %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc\n"%locals()) fileHandle.write('\nread -p "Press ENTER to continue ..." foo') fileHandle.write('\nexit') fileHandle.close() commands.getoutput("chmod 777 /tmp/py2deb.tmp") commands.getoutput("/usr/bin/osso-xterm /tmp/py2deb.tmp") # call(['/usr/bin/osso-xterm','/tmp/py2deb.tmp']) raw_input('Press ENTER to continue ...') if changes==True: print 'changes' import py2changes import locale old_locale,iso=locale.getlocale(locale.LC_TIME) locale.setlocale(locale.LC_TIME,'en_US') changescontent = py2changes.py2changes( "%(author)s <%(mail)s>"%locals(), "%(description)s"%locals(), "%(changelog)s"%locals(), ( "%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.tar.gz"%locals(), "%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.dsc"%locals(), ), "%(section)s"%locals(), "%(repository)s"%locals(), Format='1.7', Date=time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()), Source="%(name)s"%locals(), Architecture="%(arch)s"%locals(), Version="%(version)s-%(buildversion)s"%locals(), Distribution="%(distribution)s"%locals(), Urgency="%(urgency)s"%locals(), Maintainer="%(author)s <%(mail)s>"%locals() ) f = open("%(TEMP)s/%(name)s_%(version)s-%(buildversion)s.changes"%locals(),"wb") f.write(changescontent.getContent()) f.close() locale.setlocale(locale.LC_TIME,old_locale) fileHandle = open('/tmp/py2deb2.tmp', 'w') fileHandle.write('#!/bin/sh\n') fileHandle.write("cd " +os.path.dirname(sys.argv[0])+ "\n") fileHandle.write("gpg --local-user %(mail)s --clearsign %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.changes\n"%locals()) fileHandle.write("mv %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.changes.asc %(TEMP)s/%(name)s_%(version)s-%(buildversion)s.changes\n"%locals()) fileHandle.write('\nread -p "Press ENTER to continue ..." foo') fileHandle.write('\nexit') fileHandle.close() commands.getoutput("chmod 777 /tmp/py2deb2.tmp") commands.getoutput("/usr/bin/osso-xterm /tmp/py2deb2.tmp") raw_input('Press ENTER to continue ...') l=glob("%(TEMP)s/%(name)s*.tar.gz"%locals()) if len(l)!=1: raise Py2debException("don't find source package tar.gz") tar = os.path.basename(l[0]) shutil.move(l[0],tar) ret.append(tar) l=glob("%(TEMP)s/%(name)s*.dsc"%locals()) if len(l)!=1: raise Py2debException("don't find source package dsc") tar = os.path.basename(l[0]) shutil.move(l[0],tar) ret.append(tar) l=glob("%(TEMP)s/%(name)s*.changes"%locals()) if len(l)!=1: raise Py2debException("don't find source package changes") tar = os.path.basename(l[0]) shutil.move(l[0],tar) ret.append(tar) return ret #~ except Exception,m: #~ raise Py2debException("build error :"+str(m)) finally: if Py2deb.clear: shutil.rmtree(TEMP)