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

OTHER_LDFLAGS = $(inherited) $(ASAN_OTHER_LDFLAGS) $(OTHER_LDFLAGS_$(WK_COCOA_TOUCH));
OTHER_LDFLAGS_cocoatouch = -framework JavaScriptCore;
OTHER_LDFLAGS_ = -lWebCoreTestSupport -force_load $(BUILT_PRODUCTS_DIR)/libDumpRenderTree.a -framework Carbon -framework Cocoa -framework JavaScriptCore -framework OpenGL -framework QuartzCore -framework WebKit;

LD_RUNPATH_SEARCH_PATHS = "@loader_path/.";
STRIP_STYLE = debugging;
PRODUCT_NAME = DumpRenderTree;
SKIP_INSTALL[sdk=macosx*] = NO;
SKIP_INSTALL[sdk=embedded*] = YES;
EXCLUDED_SOURCE_FILE_NAMES[sdk=embedded*] = *.ttf *.TTF *.otf;

INSTALL_PATH = $(INSTALL_PATH_$(CONFIGURATION))
INSTALL_PATH_Release = $(INSTALL_PATH);
INSTALL_PATH_Debug = $(INSTALL_PATH);
INSTALL_PATH_Production = $(SYSTEM_LIBRARY_DIR)/Frameworks/$(WEBKIT_FRAMEWORK_RESOURCES_PATH);
INSTALL_PATH_engineering = $(INSTALL_PATH);

CODE_SIGN_ENTITLEMENTS[sdk=macosx*] = mac/Configurations/DumpRenderTree.entitlements;

CREATE_INFOPLIST_SECTION_IN_BINARY = YES;
INFOPLIST_FILE = $(SRCROOT)/mac/Info.plist;
