// Copyright (C) 2009, 2013-2016 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;

CODE_SIGN_IDENTITY[sdk=macosx*] = $(CODE_SIGN_IDENTITY_$(WK_USE_RESTRICTED_ENTITLEMENTS))
CODE_SIGN_IDENTITY_ = $(CODE_SIGN_IDENTITY_NO);
CODE_SIGN_IDENTITY_NO = -;
CODE_SIGN_IDENTITY_YES = $(WK_ENGINEERING_CODE_SIGN_IDENTITY);

WK_RELOCATABLE_FRAMEWORKS = YES;
WK_XPC_SERVICE_SUFFIX[sdk=macosx*] = .Development;
WK_XPC_SERVICE_SUFFIX[sdk=*simulator*] = .Development;

WK_LIBRARY_VALIDATION_ENABLED = NO;
WK_WEBCONTENT_SERVICE_NEEDS_XPC_DOMAIN_EXTENSION_ENTITLEMENT = NO;
WK_WEBCONTENT_SERVICE_NEEDS_VERSIONED_FRAMEWORK_PATH_LDFLAG[sdk=macosx*] = YES;

WK_DEFAULT_LTO_MODE = $(WK_USER_LTO_MODE_none);

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

WK_WEBKIT_ADDITIONS_PATH = ../../../Internal/WebKit/WebKitAdditions/Additions/WebKit
WK_WEBKIT_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS = $(WK_WEBKIT_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS_$(USE_INTERNAL_SDK))
WK_WEBKIT_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS_ =
WK_WEBKIT_DERIVEDSOURCES_INPUT_XCFILELIST_ADDITIONS_YES = $(WK_WEBKIT_ADDITIONS_PATH)/DerivedSources-input.xcfilelist
WK_WEBKIT_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS = $(WK_WEBKIT_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS_$(USE_INTERNAL_SDK))
WK_WEBKIT_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS_ =
WK_WEBKIT_DERIVEDSOURCES_OUTPUT_XCFILELIST_ADDITIONS_YES = $(WK_WEBKIT_ADDITIONS_PATH)/DerivedSources-output.xcfilelist
