Exemplo n.º 1
0
# changes
import py2changes
try:
  import locale
  old_locale,iso=locale.getlocale(locale.LC_TIME)
  locale.setlocale(locale.LC_TIME,'en_US')
except:
  pass
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()
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)