# Copyright 2016 The Fuchsia Authors. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

set -e

script_dir=$(dirname $BASH_SOURCE)
script_dir=`cd $script_dir; pwd`
build_tag=debug

source $(dirname $BASH_SOURCE)/common.sh

mkdir -p $WM_DEPS_SOURCE_DIR

$script_dir/build_zlib.sh
$script_dir/build_icu.sh
$script_dir/build_libpng.sh
$script_dir/build_sqlite.sh
$script_dir/build_pixman.sh
$script_dir/build_expat.sh
$script_dir/build_freetype.sh
$script_dir/build_harfbuzz.sh
$script_dir/build_freetype.sh -b
$script_dir/build_cairo.sh
$script_dir/build_xz.sh
$script_dir/build_libxml.sh
$script_dir/build_boringssl.sh
$script_dir/build_curl.sh
$script_dir/build_jpeg.sh

release_deps=$FUCHSIA_ROOT/out/release-x86-64/wmdeps

if [ ! -L "$release_deps" ] ; then
  mkdir -p $FUCHSIA_ROOT/out/release-x86-64
  ln -s $FUCHSIA_ROOT/out/debug-x86-64/wmdeps $FUCHSIA_ROOT/out/release-x86-64/wmdeps
fi
