// Copyright (C) 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 "BaseTarget.xcconfig"
#include "WebKitTargetConditionals.xcconfig"

PRODUCT_NAME = libWebKitSwift;
SWIFT_OBJC_INTERFACE_HEADER_NAME = WebKitSwift-Swift.h

INSTALL_PATH[sdk=iphone*] = $(WEBKIT_FRAMEWORKS_DIR)/WebKit.framework/Frameworks;
INSTALL_PATH[sdk=macosx*] = $(WEBKIT_FRAMEWORKS_DIR)/WebKit.framework/Versions/A/Frameworks;

WK_HAVE_COORDINATOR = $(WK_HAVE_COORDINATOR_$(WK_PLATFORM_NAME));
WK_HAVE_COORDINATOR_macosx = $(WK_HAVE_COORDINATOR$(WK_MACOS_1200));
WK_HAVE_COORDINATOR_MACOS_SINCE_1200 = YES;

WK_EXCLUDED_COORDINATOR_FILES = $(WK_EXCLUDED_COORDINATOR_FILES_$(WK_NOT_$(WK_HAVE_COORDINATOR)));
WK_EXCLUDED_COORDINATOR_FILES_YES = WKCoordinator.h WKCoordinator.mm WKGroupSession.swift

EXCLUDED_SOURCE_FILE_NAMES = $(WK_EXCLUDED_COORDINATOR_FILES) $(EXCLUDED_IOS_RESOURCE_FILE_NAMES) $(EXCLUDED_MACOS_PLUGIN_FILE_NAMES)
SWIFT_INSTALL_OBJC_HEADER = NO
SWIFT_VERSION = 5.0;
