header_paths = [
    '../Foundation/include',
    '../Foundation/include/Foundation',
    '../CFNetwork/include',
    '../Foundation/src',
    '../Security/include',
    '../System/src',
    '../System/src/closure/',
]

defines = {
    'CF_BUILDING_CF': 1,
    'DEPLOYMENT_TARGET_EMBEDDED': 1,
    'INCLUDE_OBJC': 1,
    '__CONSTANT_CFSTRINGS__': 1,
    '__CONSTANT_STRINGS__': 1,
    'DISPATCH_SUPPORT' : 1,
}

flags = [
    '-include', 'System/CoreFoundation/src/CoreFoundation_Prefix.h',
    '-Wno-private-extern',
    '-Wno-format',
    '-Wno-shadow',
    '-Wno-sometimes-uninitialized',
    '-Wno-objc-protocol-method-implementation',
    '-Werror=objc-method-access',
    '-Werror=int-conversion',
    '-Werror=objc-missing-super-calls',
    '-Werror=incompatible-pointer-types',
    '-Werror-receiver-expr',
    '-x', 'objective-c',
]

libs = [
    'v',
    'cxx',
    'System',
    'icu',
]

deps = [
    'v',
    'cxx',
    'System',
    'icu',
]

sources = [
    'src/CFApplicationPreferences.c',
    'src/CFArray.c',
    'src/CFAttributedString.c',
    'src/CFBag.c',
    'src/CFBase.c',
    'src/CFBasicHash.c',
    'src/CFBigNumber.c',
    'src/CFBinaryHeap.c',
    'src/CFBinaryPList.c',
    'src/CFBitVector.c',
    'src/CFBuiltinConverters.c',
    'src/CFBundle.c',
    'src/CFBundle_Resources.c',
    'src/CFBundle_InfoPlist.c',
    'src/CFBurstTrie.c',
    'src/CFCalendar.c',
    'src/CFCharacterSet.c',
    'src/CFConcreteStreams.c',
    'src/CFData.c',
    'src/CFDate.c',
    'src/CFDateFormatter.c',
    'src/CFDictionary.c',
    'src/CFError.c',
    'src/CFFileUtilities.c',
    'src/CFICUConverters.c',
    'src/CFLocale.c',
    'src/CFLocaleIdentifier.c',
    'src/CFLocaleKeys.c',
    'src/CFMachPort.c',
    'src/CFNumber.c',
    'src/CFNumberFormatter.c',
    'src/CFOldStylePList.c',
    'src/CFPlatform.c',
    'src/CFPlatformConverters.c',
    'src/CFPreferences.c',
    'src/CFPropertyList.c',
    'src/CFRunLoop.c',
    'src/CFRuntime.c',
    'src/CFSet.c',
    'src/CFSocket.c',
    'src/CFSocketStream.c',
    'src/CFSortFunctions.c',
    'src/CFStorage.c',
    'src/CFStream.c',
    'src/CFString.c',
    'src/CFStringEncodingConverter.c',
    'src/CFStringEncodingDatabase.c',
    'src/CFStringEncodings.c',
    'src/CFStringScanner.c',
    'src/CFStringUtilities.c',
    'src/CFSystemDirectories.c',
    'src/CFTimeZone.c',
    'src/CFTree.c',
    'src/CFUniChar.c',
    'src/CFUnicodeDecomposition.c',
    'src/CFUnicodePrecomposition.c',
    'src/CFURL.c',
    'src/CFURLAccess.c',
    'src/CFUtilities.c',
    'src/CFUUID.c',
    'src/CFVersion.c',
    'src/CFWindowsUtilities.c',
    'src/CFXMLInputStream.c',
    'src/CFXMLNode.c',
    'src/CFXMLParser.c',
    'src/CFXMLPreferencesDomain.c',
    'src/CFXMLTree.c',
    'src/CFURLEnumerator.c',
    # 'src/CFCalendarConstants.c',
    'src/CFCharacterSetBitmaps.c',
    'src/CFUnicodeDataL.c',
    'src/CFUnicodeDataB.c',
    'src/CFUniCharPropertyDatabase.c',
    'src/CFStringTokenizer.c',
    'src/CFStringTransform.c',
    'src/CFNotificationCenter.c',
    'src/CFStubs.m',
    'src/NSAttributedString.m',
    'src/NSDateComponents.m',
    'src/NSDictionary.m',
    'src/NSTimeZone.m',
    'src/NSArray.m',
    'src/NSSet.m',
    'src/NSFastEnumerationEnumerator.m',
    'src/NSException.m',
    'src/NSData.m',
    'src/NSEnumerator.m',
    'src/NSString.m',
    'src/NSConstantString.m',
    'src/NSURL.m',
    'src/NSDate.m',
    'src/NSCFType.m',
    'src/NSInvocation.m',
    'src/NSMethodSignature.m',
    'src/NSLocale.m',
    'src/NSNumber.m',
    'src/NSObject.m',
    'src/NSObjCRuntime.m',
    'src/NSOrderedSet.m',
    'src/NSCharacterSet.m',
    'src/NSCalendar.m',
    'src/NSNull.m',
    'src/NSError.m',
    'src/NSStream.m',
    'src/NSInputStream.m',
    'src/NSOutputStream.m',
    'src/NSSharedKeyDictionary.m',
    'src/NSSharedKeySet.m',
    'src/NSTimer.m',
    'src/NSPropertyList.m',
    'src/NSBlock.m',
    'src/NSCache.m',
    'src/NSMessageBuilder.m',
    'src/NSGenericDeallocHandler.m',
    'src/NSZombie.m',
    'src/_zone_tab.c',
    'src/CFForwardingPrep.S',
    {'source' : 'src/NSInvoke-arm.S', 'env' : {'TARGET_ARCH' : 'arm'}},
    {'source' : 'src/NSInvoke-x86.S', 'env' : {'TARGET_ARCH' : 'x86'}},
]

Import('env')
env.BuildFramework('CoreFoundation', sources, header_paths=header_paths, static=False, flags = flags, defines = defines, deps = deps, libs=libs)
