// Copyright (C) 2009, 2010, 2013, 2014 Apple Inc. 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 APPLE INC. ``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 APPLE INC. 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.

#include "Base.xcconfig"
#include? "../../../LocalOverrides.xcconfig"

ARCHS = $(ARCHS_STANDARD_32_64_BIT);

ONLY_ACTIVE_ARCH = YES;

TARGET_MAC_OS_X_VERSION_MAJOR = $(MAC_OS_X_VERSION_MAJOR);

MACOSX_DEPLOYMENT_TARGET = $(MACOSX_DEPLOYMENT_TARGET_$(PLATFORM_NAME)_$(TARGET_MAC_OS_X_VERSION_MAJOR));
MACOSX_DEPLOYMENT_TARGET_macosx_101300 = 10.13;
MACOSX_DEPLOYMENT_TARGET_macosx_101400 = 10.14;
MACOSX_DEPLOYMENT_TARGET_macosx_101500 = 10.15;
MACOSX_DEPLOYMENT_TARGET_macosx_101600 = 10.16;

GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
DEBUG_INFORMATION_FORMAT = dwarf;

SDKROOT = $(SDKROOT_$(USE_INTERNAL_SDK));
SDKROOT_ = macosx;
SDKROOT_YES = macosx.internal;

WK_RELOCATABLE_FRAMEWORKS = YES;

WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);

WK_CCACHE_DIR = $(SRCROOT)/../../Tools/ccache;
#include "../../../Tools/ccache/ccache.xcconfig"

WK_WEBCORE_ADDITIONS_PATH = ../../../Internal/WebKit/WebKitAdditions/Additions/WebCore
WK_WEBCORE_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS = $(WK_WEBCORE_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS_$(USE_INTERNAL_SDK))
WK_WEBCORE_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS_ =
WK_WEBCORE_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS_YES = $(WK_WEBCORE_ADDITIONS_PATH)/DerivedSources-input.xcfilelist
WK_WEBCORE_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS = $(WK_WEBCORE_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS_$(USE_INTERNAL_SDK))
WK_WEBCORE_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS_ =
WK_WEBCORE_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS_YES = $(WK_WEBCORE_ADDITIONS_PATH)/DerivedSources-output.xcfilelist
