// 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 = /usr/local/include/WebCoreTestSupport;
PRIVATE_HEADERS_FOLDER_PATH_Production_YES = $(WK_ALTERNATE_FRAMEWORKS_DIR)/usr/local/include/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 = /usr/local/lib;
INSTALL_PATH_WebCoreTestSupport_Production_YES = $(WK_ALTERNATE_FRAMEWORKS_DIR)/usr/local/lib;

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

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;

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

OTHER_LDFLAGS[sdk=iphoneos*] = $(ASAN_OTHER_LDFLAGS) -lAccessibility $(LIBWEBRTC_LDFLAGS);
OTHER_LDFLAGS[sdk=iphonesimulator*] = $(ASAN_OTHER_LDFLAGS) -lAccessibility $(LIBWEBRTC_LDFLAGS);
SECT_ORDER_FLAGS = ;
