// Copyright (C) 2009, 2010 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"

ARCHS = $(ARCHS_$(REAL_PLATFORM_NAME));
ARCHS_iphoneos = $(ARCHS_STANDARD_32_BIT);
ARCHS_iphonesimulator = $(ARCHS_STANDARD_32_BIT);
ARCHS_macosx = $(ARCHS_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
ARCHS_macosx_ = $(ARCHS_macosx_1040);
ARCHS_macosx_1040 = $(NATIVE_ARCH);
ARCHS_macosx_1050 = $(NATIVE_ARCH);
ARCHS_macosx_1060 = $(ARCHS_STANDARD_32_64_BIT);
ARCHS_macosx_1070 = $(ARCHS_STANDARD_32_64_BIT);

ONLY_ACTIVE_ARCH = YES;

MACOSX_DEPLOYMENT_TARGET = $(MACOSX_DEPLOYMENT_TARGET_$(REAL_PLATFORM_NAME));
MACOSX_DEPLOYMENT_TARGET_iphoneos = 10.5;
MACOSX_DEPLOYMENT_TARGET_iphonesimulator = 10.5;
MACOSX_DEPLOYMENT_TARGET_macosx = $(MACOSX_DEPLOYMENT_TARGET_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
MACOSX_DEPLOYMENT_TARGET_macosx_ = 10.4;
MACOSX_DEPLOYMENT_TARGET_macosx_1040 = 10.4;
MACOSX_DEPLOYMENT_TARGET_macosx_1050 = 10.5;
MACOSX_DEPLOYMENT_TARGET_macosx_1060 = 10.6;
MACOSX_DEPLOYMENT_TARGET_macosx_1070 = 10.7;

GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;

SECTORDER_FLAGS = ;

WEBCORE_SQLITE3_HEADER_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR)/WebCoreSQLite3;
