// Copyright (C) 2013 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 "BaseXPCService.xcconfig"

ARCHS = $(ARCHS_$(PLATFORM_NAME));
ARCHS_macosx = x86_64;
ARCHS_iphoneos = $(ARCHS_STANDARD_32_64_BIT);
ARCHS_iphonesimulator = $(ARCHS_iphoneos);

PRODUCT_NAME = com.apple.WebKit.Plugin.64;
INFOPLIST_FILE = PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist;

// Since this service is only used in production builds, in debug and release builds
// we don't link against WebKit2, to avoid linking errors due to not having a WebKit2
// of the right architecture.

FRAMEWORK_LDFLAGS = -framework Foundation $(FRAMEWORK_LDFLAGS_$(DEBUG_OR_RELEASE));
FRAMEWORK_LDFLAGS_ = -framework WebKit2;
FRAMEWORK_LDFLAGS_NO = -framework WebKit2;
FRAMEWORK_LDFLAGS_YES = ;

OTHER_LDFLAGS = $(FRAMEWORK_LDFLAGS) $(OTHER_LDFLAGS) $(OTHER_LDFLAGS_$(PLATFORM_NAME)) $(OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH);
OTHER_LDFLAGS_macosx = -framework AppKit;

CODE_SIGN_ENTITLEMENTS = Configurations/PluginService.entitlements;

SKIP_INSTALL = $(SKIP_INSTALL_$(PLATFORM_NAME));
SKIP_INSTALL_macosx = $(inherited);
SKIP_INSTALL_iphoneos = YES;
SKIP_INSTALL_iphonesimulator = $(SKIP_INSTALL_iphoneos);
