// Copyright (C) 2011 Google Inc. All rights reserved.
// Copyright (C) 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 "WebCore.xcconfig"

PRIVATE_HEADERS_FOLDER_PATH = $(PRIVATE_HEADERS_FOLDER_PATH_$(CONFIGURATION));
PRIVATE_HEADERS_FOLDER_PATH_Debug = WebCoreTestSupport;
PRIVATE_HEADERS_FOLDER_PATH_Release = $(PRIVATE_HEADERS_FOLDER_PATH_Debug);
PRIVATE_HEADERS_FOLDER_PATH_Production = $(PRIVATE_HEADERS_FOLDER_PATH_Production_$(WK_USE_ALTERNATE_FRAMEWORKS_DIR));
PRIVATE_HEADERS_FOLDER_PATH_Production_NO = $(WK_LIBRARY_HEADERS_FOLDER_PATH)/WebCoreTestSupport;
PRIVATE_HEADERS_FOLDER_PATH_Production_YES = $(WK_ALTERNATE_FRAMEWORKS_DIR)$(WK_LIBRARY_HEADERS_FOLDER_PATH)/WebCoreTestSupport;

INSTALL_PATH = $(INSTALL_PATH_WebCoreTestSupport_$(CONFIGURATION));
// Using [sdk=macosx*] to override the setting in WebCore.xcconfig.
INSTALL_PATH[sdk=macosx*] = $(INSTALL_PATH_WebCoreTestSupport_$(CONFIGURATION));
INSTALL_PATH_WebCoreTestSupport_Production = $(INSTALL_PATH_WebCoreTestSupport_Production_$(WK_USE_ALTERNATE_FRAMEWORKS_DIR));
INSTALL_PATH_WebCoreTestSupport_Production_NO = $(WK_LIBRARY_INSTALL_PATH);
INSTALL_PATH_WebCoreTestSupport_Production_YES = $(WK_ALTERNATE_FRAMEWORKS_DIR)$(WK_LIBRARY_INSTALL_PATH);

SKIP_INSTALL = $(SKIP_INSTALL_$(FORCE_TOOL_INSTALL));
SKIP_INSTALL_ = YES;
SKIP_INSTALL_NO = YES;
SKIP_INSTALL_YES = NO;

// Workaround for "JavaScriptCore is not available when building for watchOS." error (rdar://91668054)
DISABLE_SDK_METADATA_PARSING[sdk=watch*] = YES

DYLIB_INSTALL_NAME_BASE = $(DYLIB_INSTALL_NAME_BASE_$(CONFIGURATION));
DYLIB_INSTALL_NAME_BASE_Production = $(INSTALL_PATH);
DYLIB_INSTALL_NAME_BASE_Debug = @rpath;
DYLIB_INSTALL_NAME_BASE_Release = $(DYLIB_INSTALL_NAME_BASE_Debug);

LIBWEBRTC_LDFLAGS = $(LIBWEBRTC_LDFLAGS_$(ENABLE_WEB_RTC));
LIBWEBRTC_LDFLAGS_ = ;
LIBWEBRTC_LDFLAGS_ENABLE_WEB_RTC = -weak-lwebrtc;

ANGLE_LDFLAGS = -weak-lANGLE-shared;

PRODUCT_NAME = WebCoreTestSupport;
EXECUTABLE_PREFIX = lib;
EXPORTED_SYMBOLS_FILE = ;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
OTHER_LDFLAGS = $(ASAN_OTHER_LDFLAGS) $(ANGLE_LDFLAGS) -framework Metal $(SOURCE_VERSION_LDFLAGS);
OTHER_LDFLAGS[sdk=macos*] = $(ASAN_OTHER_LDFLAGS) -framework AppKit -framework Metal $(ANGLE_LDFLAGS) $(LIBWEBRTC_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);

PROFILE_GENERATE_OR_USE_CFLAGS_ENABLE_LLVM_PROFILE_GENERATION = ; // Disable PGO profile generation
OTHER_LDFLAGS[sdk=iphone*] = $(ASAN_OTHER_LDFLAGS) -lAccessibility -framework CoreText -framework Metal $(ANGLE_LDFLAGS) $(LIBWEBRTC_LDFLAGS) $(SOURCE_VERSION_LDFLAGS);
SECT_ORDER_FLAGS = ;

ENTITLEMENTS_REQUIRED = $(ENTITLEMENTS_REQUIRED_USE_INTERNAL_SDK_$(USE_INTERNAL_SDK))
ENTITLEMENTS_REQUIRED_USE_INTERNAL_SDK_ = NO;
ENTITLEMENTS_REQUIRED_USE_INTERNAL_SDK_NO = NO;
ENTITLEMENTS_REQUIRED_USE_INTERNAL_SDK_YES = $(ENTITLEMENTS_REQUIRED);
