#!/usr/bin/env python
# Copyright (C) 2011-2014 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 sys
import os

sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../jhbuild") )
import jhbuildrc_common
jhbuildrc_common.init(globals(), "gtk")

__top_level_directory = os.path.normpath(os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.insert(0, os.path.join(__top_level_directory, 'Tools', 'glib'))
import common

# LLVM requires that builddir != srcdir, and it's not possible to do that in jhbuild only
# for a module, so we do it here globally since it's a good idea for all other modules as well.
buildroot = os.path.join(os.path.dirname(checkoutroot), "Build")

# For the layout tests: path where llvmpipe/software-only mesa libraries are installed.
os.environ['LLVMPIPE_LIBGL_PATH'] = os.path.abspath(os.path.join(prefix, 'softGL', 'lib'))

# We only want to export this when bulding the JHBuild, but not when building WebKit.
# When the build-webkit script is used, we end executing 'jhbuild [...] run cmake [...]'.
# But when the JHBuild gets built, we end executing 'jhbuild [...] build'.
# So we can know if we are building the JHBuild by checking that 'run' is not an argument.
if 'run' not in sys.argv:
    os.environ['CFLAGS'] = '-Wno-error -O2 -g1'
    os.environ['CXXFLAGS'] = '-Wno-error -O2 -g1'
    # For building gstreamer plugins on the Mac.
    os.environ['OBJCFLAGS'] = '-Wno-error -O2 -g1'

conditions.add('gtk')
