// 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;

// FIXME: Once rdar://62576618 and rdar://63944514 are resolved, this can return to just being TARGET_MAC_OS_X_VERSION_MAJOR = $(MAC_OS_X_VERSION_MAJOR).
TARGET_MAC_OS_X_VERSION_MAJOR = $(TARGET_MAC_OS_X_VERSION_MAJOR_$(MAC_OS_X_VERSION_MAJOR));
TARGET_MAC_OS_X_VERSION_MAJOR_101300 = $(MAC_OS_X_VERSION_MAJOR);
TARGET_MAC_OS_X_VERSION_MAJOR_101400 = $(MAC_OS_X_VERSION_MAJOR);
TARGET_MAC_OS_X_VERSION_MAJOR_101500 = $(MAC_OS_X_VERSION_MAJOR);
TARGET_MAC_OS_X_VERSION_MAJOR_101600 = $(MAC_OS_X_VERSION_MAJOR);
TARGET_MAC_OS_X_VERSION_MAJOR_10160 = $(TARGET_MAC_OS_X_VERSION_MAJOR_10_16);
TARGET_MAC_OS_X_VERSION_MAJOR_110000 = $(MAC_OS_X_VERSION_MAJOR);
TARGET_MAC_OS_X_VERSION_MAJOR_1100 = $(TARGET_MAC_OS_X_VERSION_MAJOR_11_0);
TARGET_MAC_OS_X_VERSION_MAJOR_101700 = $(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;
MACOSX_DEPLOYMENT_TARGET_macosx_110000 = 11.0;
MACOSX_DEPLOYMENT_TARGET_macosx_101700 = 10.17;

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
