#!/usr/bin/env python

__author__ = "Miklos Vajna <vmiklos@frugalware.org>"
__version__ = "0.8.4"
__date__ = "Thu, 19 Oct 2006 00:18:19 +0200"
__copyright__ = "Copyright (c) 2006, 2008 Miklos Vajna"
__license__ = "GPL"

import os, urllib.request, urllib.parse, urllib.error, sys, hashlib
from xml.dom import minidom
from email.Utils import formatdate

def usage():
	os.system("man pear-makefb")

if len(sys.argv) < 2:
	usage()
	sys.exit(1)
if sys.argv[1] == "--help":
	usage()
	sys.exit(0)
if sys.argv[1] == "--version":
	print("""pear-makefb (pacman-tools) %s

%s
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.""" % (__version__, __copyright__))
	sys.exit(0)

name = sys.argv[1]
pear = True
try:
	if sys.argv[2] == "--pecl":
		pear = False
except:
	pass
deps = []

sys.stdout.write("Writing the FrugalBuild...")
sys.stdout.flush()
if pear:
	sock = urllib.request.urlopen("http://cvs.php.net/viewvc.cgi/pear/%s/package.xml?revision=HEAD" % name)
else:
	sock = urllib.request.urlopen("http://cvs.php.net/viewvc.cgi/pecl/%s/package.xml?revision=HEAD" % name)

pkg = minidom.parse(sock)
sock.close()

out = open("FrugalBuild", "w")
out.write("""# Compiling Time:  SBU
# Maintainer: crazy <crazy@frugalware.org>\n\n""")

if pear:
	out.write('_F_pear_name="%s"\n' % name)
else:
	out.write('_F_pecl_name="%s"\n' % name)

try:
	pkgver = pkg.getElementsByTagName('version')[0].firstChild.toxml()
except IndexError:
	print(" No such package!")
	sys.exit(1)
out.write("pkgver=%s\n" % pkgver)

out.write('pkgdesc="%s"\n' % pkg.getElementsByTagName('summary')[0].firstChild.toxml())

try:
	for i in pkg.getElementsByTagName('deps')[0].getElementsByTagName("dep"):
		# we do not list optional deps in the FB
		# currently extensions are not splitted to separate subpackages
		try:
			if i.attributes["optional"].value == "yes":
				continue
		except KeyError:
			pass
		if i.attributes["type"].value == "ext":
			continue
		if i.attributes["type"].value == "php":
			s = "php"
		if i.attributes["type"].value == "pkg":
			s = "php-pear-%s" % i.firstChild.toxml().lower()
		# turn the separator to a string
		rel = {
			"has": None,
			"eq": "=",
			"lt": "<=",
			"le": "<=",
			"gt": ">=",
			"ge": ">="
		} [i.attributes["rel"].value]
		if rel:
			s += rel + i.attributes["version"].value
		deps.append(s)
except IndexError:
	print(" The version of the package xml is probably not 1.0!")
	os.unlink("FrugalBuild")
	sys.exit(1)
out.write("depends=('%s')\n" % "' '".join(deps))
if pear:
	out.write("Finclude pear\n")
else:
	out.write("Finclude pecl\n")

if pear:
	remote = urllib.request.urlopen('http://pear.php.net/get/%s-%s.tgz' % (name, pkgver))
else:
	remote = urllib.request.urlopen('http://pecl.php.net/get/%s-%s.tgz' % (name, pkgver))
local = open('%s-%s.tgz' % (name, pkgver), 'w')
local.write(remote.read())
remote.close()
local.close()
ctx = hashlib.new("sha1")
sock = open('%s-%s.tgz' % (name, pkgver))
while True:
	buf = sock.read(16384)
	if not buf:
		break
	ctx.update(buf)
sock.close()
out.write("sha1sums=('%s')\n" % ctx.hexdigest())
out.close()
sys.stdout.write(" done.\n")
