#!/usr/bin/env python3
# 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')
