#!/usr/bin/env python

import os
import sys
import Options
import Constants

APPNAME = "searchtool"
MAINTAINER = "Bundyo <bundyo@gmail.com>"
VERSION = "0.1"
BUILD = "1"
VERSION_MAJOR_MINOR = VERSION + "-" + BUILD
PREFIX = '/usr'

srcdir = '.'
blddir = '_build_'

def set_options(opt):
	opt.tool_options('compiler_cc')
	opt.tool_options('gnu_dirs')
	opt.add_option('--maemo-launcher', action='store_true', default=False, help='Enable maemo-launcher support.', dest='maemo_launcher')
	opt.sub_options("src")

def configure(conf):
    conf.check_tool('compiler_cc vala gnu_dirs intltool')

    conf.check_cfg(package='glib-2.0', uselib_store='GLIB', atleast_version='2.10.0', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='gio-2.0', uselib_store='GIO', atleast_version='2.10.0', mandatory=True, args='--cflags --libs')
#    conf.check_cfg(package='gconf-2.0', uselib_store='GCONF', atleast_version='2.10.0', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='gobject-2.0', uselib_store='GOBJECT', atleast_version='2.10.0', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='gtk+-2.0', uselib_store='GTK+', atleast_version='2.10.0', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='gdk-x11-2.0', uselib_store='GDKX11', atleast_version='2.10.0', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='hildon-1', uselib_store='HILDON', atleast_version='1.0', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='hildon-1', uselib_store='FREMANTLE', atleast_version='2.1.62', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='hildon-fm-2', uselib_store='HILDONFM', atleast_version='1.9', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='gnome-vfs-2.0', uselib_store='GNOMEVFS', atleast_version='2.10.0', mandatory=True, args='--cflags --libs')
#    conf.check_cfg(package='conic', uselib_store='CONIC', atleast_version='0.16', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='libosso', uselib_store='OSSO', atleast_version='2.0', mandatory=True, args='--cflags --libs')
#    conf.check_cfg(package='tracker', uselib_store='TRACKER', atleast_version='0.6', mandatory=True, args='--cflags --libs')
#    conf.check_cfg(package='sqlite3', uselib_store='SQLITE', atleast_version='3.0', mandatory=True, args='--cflags --libs')
#    conf.check_cfg(package='webkit-1.0', uselib_store='WEBKIT', atleast_version='1.0', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='vala-1.0', uselib_store='VALA', atleast_version='0.7.7', mandatory=True, args='--cflags --libs')
    conf.check_cfg(package='x11', uselib_store='X', atleast_version='1.0', mandatory=True, args='--cflags --libs')
    if Options.options.maemo_launcher:
    	conf.check_cfg(package='maemo-launcher-app', uselib_store='LAUNCHER', atleast_version='0.31', mandatory=True, args='--cflags --libs')
#    conf.check_cfg(package='libxml-2.0', uselib_store='LIBXML', atleast_version='2.0.0', mandatory=True)
	
    if (conf.env['HAVE_FREMANTLE'] == 1):
        conf.define('VALAFLAGS', '--disable-dbus-transformation --define=FREMANTLE')

    conf.define('APPNAME', APPNAME)
    conf.define('PACKAGE', APPNAME)
    conf.define('PACKAGE_NAME', APPNAME.capitalize())
    conf.define('PACKAGE_STRING', APPNAME + '-' + VERSION)
    conf.define('PACKAGE_VERSION', APPNAME + '-' + VERSION)
    conf.define('GETTEXT_PACKAGE', APPNAME)
    conf.define('APP_DIR', os.path.join(PREFIX, 'share', APPNAME)) 
    conf.define('LOCALE_DIR', os.path.join(PREFIX, 'share', 'locale')) 
    conf.define('PIXMAPS_DIR', os.path.join(PREFIX, 'share', 'pixmaps'))
    conf.define('MAINTAINER', MAINTAINER)

    conf.define('VERSION', VERSION)
    conf.define('VERSION_MAJOR_MINOR', VERSION_MAJOR_MINOR)

    conf.write_config_header("config.h")

def pre(ctx):  # pre-build C files generation in native to speed it up (20 times at least).
	ctx.recurse('src')
	ctx.mapped_sources = ' ../src/' + ' ../src/'.join(ctx.sources.split())
	ctx.mapped_vapis = ' --vapidir=' + ' --vapidir='.join(ctx.vapis)
	ctx.mapped_packages = ' --pkg ' + ' --pkg '.join(ctx.packages.split())
	
	# die with error code if the generation fails so the build can stop.
	exit_code = os.system('cd _build_ && /usr/bin/valac -C --quiet --disable-dbus-transformation --define=FREMANTLE -d default/src'
			  		  	  + ctx.mapped_sources + ctx.mapped_vapis + ctx.mapped_packages) != '0'
	if exit_code != 1:
		sys.exit()

def build(bld):
    bld.add_subdirs('src')

def dist():
	import os, shutil, sys

	# Here's the core info for the package
	DEBARCH = "armel"
	DEBDEPENDS = "libgtk2.0-0, libglib2.0-0, libhildon1, libosso1" # what are we dependent on? hildonfm2, libgconf2.0, 
	DEBDESC = "A simple search tool"
	
	DEBDIR = [
	    ("DEBIAN/postinst","include/postinst"),
	]
	
	DEBFILES = [
	
	    # Now we specify the files to be included in the .deb
	    # Where they should go, and where they should be copied from.
	    # If you have a lot of files, you may wish to generate this 
	    # list in some other way.
	    ("usr/bin/"+APPNAME,													"_build_/default/src/"+APPNAME),
	    ("usr/share/pixmaps/"+APPNAME+".png",									"include/48x48/"+APPNAME+".png"),
	    ("usr/share/icons/hicolor/26x26/hildon/"+APPNAME+".png",				"include/26x26/"+APPNAME+".png"),
	    ("usr/share/icons/hicolor/40x40/hildon/"+APPNAME+".png",				"include/40x40/"+APPNAME+".png"),
	    ("usr/share/icons/hicolor/48x48/hildon/"+APPNAME+".png",				"include/48x48/"+APPNAME+".png"),
	    ("usr/share/icons/hicolor/64x64/hildon/"+APPNAME+".png",				"include/64x64/"+APPNAME+".png"),
	    ("usr/share/applications/hildon/"+APPNAME+".desktop",					"include/"+APPNAME+".desktop"),
	    ("usr/share/dbus-1/services/com.nokia."+APPNAME+".service",				"include/com.nokia."+APPNAME+".service")
	]
	    
	# This is the debian package we're going to create
	debpkg = '%s-%s-%s_%s.deb' % (APPNAME, VERSION, BUILD, DEBARCH)
	
	DEBCONTROLFILE = "distbuild/DEBIAN/control"

	os.system("rm -r distbuild/")

	def copy_force(src, dst):
		try: os.makedirs(os.path.dirname(dst))
		except: print "Directory "+os.path.dirname(dst)+" already exists.";
		shutil.copy2(src, dst)

	for f in DEBFILES:
	    dest = os.path.join("distbuild/", f[0])
	    copy_force(f[1], dest)
	
	# Now to create the control file:
	
	CONTROL_TEMPLATE = """Package: %s
Priority: optional
Section: user/utilities
Installed-Size: %s
Maintainer: %s
Architecture: %s
Version: %s
Depends: %s
Description: %s
Maemo-Display-Name: Search Tool
Maemo-Icon-26: 
 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
 ABHTLEDgLpujAAAAAElFTkSuQmCC
"""
	
	# This function creates the control file from the template and info
	# specified above, and works out the final size of the package.
	def make_control(target=None):
	    installed_size = 0
	    for i in DEBFILES:
	        installed_size += os.stat(str(i[1]))[6]
	    control_info = CONTROL_TEMPLATE % (
	        APPNAME, installed_size / 1000, MAINTAINER, DEBARCH, VERSION,
	        DEBDEPENDS, DEBDESC)
	    try: os.makedirs(os.path.dirname(target))
	    except: print "Directory "+os.path.dirname(target)+" already exists.";
	    f = open(str(target), 'w')
	    f.write(control_info)
	    f.close()
	    
	# We can generate the control file by calling make_control
	make_control(DEBCONTROLFILE)
	
	for f in DEBDIR:
	    dest = os.path.join("distbuild/", f[0])
	    copy_force(f[1], dest)
	
	os.system("strip distbuild/usr/bin/" + APPNAME)
	
	# And we can generate the .deb file by calling dpkg-deb
	os.system("dpkg-deb -b %s ../%s" % ("distbuild/", debpkg))


def shutdown():
#    import UnitTest
#    unittest = UnitTest.unit_test()
#    unittest.want_to_see_test_output = True
#    unittest.want_to_see_test_error = True
#    unittest.run()
#    unittest.print_results()
	pass
