#!/usr/bin/env python
# Copyright (C) 2011 Igalia S.L.
#
# This library 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 library 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 library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

import multiprocessing
import sys

__gtk_tools_directory = os.path.abspath(os.path.dirname(__file__))
sys.path = [__gtk_tools_directory] + sys.path
import common

build_policy = 'updated'

__moduleset_file_uri = 'file://' + os.path.join(__gtk_tools_directory, 'jhbuild.modules')
__extra_modulesets = os.environ.get("WEBKIT_EXTRA_MODULESETS", "").split(",")
moduleset = [ __moduleset_file_uri, ]
if __extra_modulesets != ['']:
    moduleset.extend(__extra_modulesets)

__extra_modules = os.environ.get("WEBKIT_EXTRA_MODULES", "").split(",")
modules = [ 'webkitgtk-testing-dependencies', ]
if __extra_modules != ['']:
    modules.extend(__extra_modules)

if os.environ.has_key('WEBKITOUTPUTDIR'):
    checkoutroot = os.path.abspath(os.path.join(os.environ['WEBKITOUTPUTDIR'], 'Dependencies', 'Source'))
    prefix = os.path.abspath(os.path.join(os.environ['WEBKITOUTPUTDIR'], 'Dependencies', 'Root'))
else:
    checkoutroot = os.path.abspath(common.top_level_path('WebKitBuild','Dependencies', 'Source'))
    prefix = os.path.abspath(common.top_level_path('WebKitBuild','Dependencies', 'Root'))

nonotify = True
notrayicon = True

if 'NUMBER_OF_PROCESSORS' in os.environ:
    jobs = os.environ['NUMBER_OF_PROCESSORS']

# GTK+ 3.0.12 misses the -lm flag when linking the tests.
module_makeargs['gtk+'] = 'LDFLAGS="-lm" ' + makeargs

# Avoid runtime conflicts with GStreamer system-wide plugins. We want
# to use only the plugins we build in JHBuild.
os.environ['GST_PLUGIN_SYSTEM_PATH'] = ''

# We often end up using the memory backend anyway, so explicitly choosing
# it will prevent the warning message.
os.environ['GSETTINGS_BACKEND'] = 'memory'

# We always enable introspection so that we can sniff out problems with our
# annotations sooner rather than later.
autogenargs='--enable-introspection'
