packages feed

kit-0.5: Kit/XCode/ProjectFileTemplate.hs

{-

  Constant sections of the project file
-}
module Kit.XCode.ProjectFileTemplate where

  import Kit.XCode.Common
  import Text.PList

  import qualified Data.List as L

  projectFile objects uuid = PListFile "!$*UTF8*$!" $ obj [
        "archiveVersion" ~> val "1",
        "classes" ~> obj [],
        "objectVersion" ~> val "45",
        "objects" ~> obj objects, 
        "rootObject" ~> val uuid
    ]

  groupProductsUUID = "034768DFFF38A50411DB9C8B"
  mainGroupUUID = "0867D691FE84028FC02AAC07"
  classesGroupUUID = "08FB77AEFE84172EC02AAC07"
  otherSourcesGroupUUID = "32C88DFF0371C24200C91783"
  frameworksGroupUUID = "0867D69AFE84028FC02AAC07"

  productRefUUID = "D2AAC07E0554694100DB518D"
  kitConfigRefUUID = "4728C52F117C02B10027D7D1"

  headersBuildPhaseUUID = "D2AAC07A0554694100DB518D"
  sourcesBuildPhaseUUID = "D2AAC07B0554694100DB518D"
  frameworksBuildPhaseUUID = "D2AAC07C0554694100DB518D"

  makeProjectPList :: 
    [PListObjectItem] -> -- build file section
    [PListObjectItem] -> -- file refs section
    PListObjectItem -> -- classes item
    PListObjectItem -> -- headers section
    PListObjectItem -> -- sources section
    PListObjectItem -> -- frameworks section
    PListObjectItem -> -- frameworks group
    [FilePath] -> -- lib directories
    PListFile 
  makeProjectPList bfs fileRefsSection classes headers sources frameworks fg libDirs = projectFile objs "0867D690FE84028FC02AAC07" where
      objs = bfs ++ fileRefsSection ++ [frameworks] ++ [fg] ++ next1 ++ [classes] ++ [next2] ++ [headers] ++ next3 ++ [sources] ++ buildConfigurations libDirs

  next1 = [ groupProductsUUID ~> group "Products" [ val productRefUUID ],
            mainGroupUUID ~> group "KitDeps" [
              val classesGroupUUID,
              val otherSourcesGroupUUID,
              val frameworksGroupUUID,
              val groupProductsUUID,
              val kitConfigRefUUID
            ]
          ]
    		
  next2 = otherSourcesGroupUUID ~> group "Other Sources" [val "AA747D9E0F9514B9006C5449"]

  next3 = ("D2AAC07D0554694100DB518D" ~> obj [
        			"isa" ~> val "PBXNativeTarget",
        			"buildConfigurationList" ~> val "1DEB921E08733DC00010E9CD",
        			"buildPhases" ~> arr [ val headersBuildPhaseUUID, val sourcesBuildPhaseUUID, val frameworksBuildPhaseUUID ],
              "buildRules" ~> arr [],
        			"dependencies" ~> arr [],
        			"name" ~> val "KitDeps",
        			"productName" ~> val "KitDeps",
        			"productReference" ~> val productRefUUID,
        			"productType" ~> val "com.apple.product-type.library.static"
        	  ]) : kitUpdateTarget ++ ["0867D690FE84028FC02AAC07" ~> obj [
        			"isa" ~> val "PBXProject",
        			"buildConfigurationList" ~> val "1DEB922208733DC00010E9CD",
        			"compatibilityVersion" ~> val "Xcode 3.1",
        			"hasScannedForEncodings" ~> val "1",
        			"mainGroup" ~> val mainGroupUUID ,
        			"productRefGroup" ~> val groupProductsUUID,
        			"projectDirPath" ~> val "",
        			"projectRoot" ~> val "",
        			"targets" ~> arr [ val "D2AAC07D0554694100DB518D", val "470E2D641287730A0084AE6F" ] 
        	]]

  librarySearchPaths libDirs = "LIBRARY_SEARCH_PATHS" ~> val ("$(inherited) " ++ (L.intersperse " " libDirs >>= id))

  buildConfigurations libDirs = let libSearch = librarySearchPaths libDirs in ["1DEB921F08733DC00010E9CD" ~> obj [
        			"isa" ~> val "XCBuildConfiguration",
        			"buildSettings" ~> obj [
        				"ALWAYS_SEARCH_USER_PATHS" ~> val "NO",
        				"ARCHS" ~> val "$(ARCHS_STANDARD_32_BIT)",
        				"COPY_PHASE_STRIP" ~> val "NO",
        				"DSTROOT" ~> val "/tmp/KitDeps.dst",
        				"GCC_DYNAMIC_NO_PIC" ~> val "NO",
        				"GCC_ENABLE_FIX_AND_CONTINUE" ~> val "YES",
        				"GCC_MODEL_TUNING" ~> val "G5",
        				"GCC_OPTIMIZATION_LEVEL" ~> val "0",
        				"GCC_PRECOMPILE_PREFIX_HEADER" ~> val "YES",
        				"GCC_PREFIX_HEADER" ~> val "KitDeps_Prefix.pch",
        				"INSTALL_PATH" ~> val "/usr/local/lib",
        				"PRODUCT_NAME" ~> val "KitDeps",
                libSearch 
              ],
        			"name" ~> val "Debug"
            ],
        		"1DEB922008733DC00010E9CD" ~> obj [
        			"isa" ~> val "XCBuildConfiguration",
        			"buildSettings" ~> obj [
        				"ALWAYS_SEARCH_USER_PATHS" ~> val "NO",
        				"ARCHS" ~> val "$(ARCHS_STANDARD_32_BIT)",
        				"DSTROOT" ~> val "/tmp/KitDeps.dst",
        				"GCC_MODEL_TUNING" ~> val "G5",
        				"GCC_PRECOMPILE_PREFIX_HEADER" ~> val "YES",
        				"GCC_PREFIX_HEADER" ~> val "KitDeps_Prefix.pch",
        				"INSTALL_PATH" ~> val "/usr/local/lib",
        				"PRODUCT_NAME" ~> val "KitDeps",
                libSearch
                ],
        			"name" ~> val "Release"
              ],
        		"1DEB922308733DC00010E9CD" ~> obj [
        			"isa" ~> val "XCBuildConfiguration",
        			"baseConfigurationReference" ~> val kitConfigRefUUID,
        			"buildSettings" ~> obj [
        				"ARCHS" ~> val "$(ARCHS_STANDARD_32_BIT)",
        				"GCC_C_LANGUAGE_STANDARD" ~> val "c99",
        				"GCC_OPTIMIZATION_LEVEL" ~> val "0",
        				"GCC_WARN_ABOUT_RETURN_TYPE" ~> val "YES",
        				"GCC_WARN_UNUSED_VARIABLE" ~> val "YES",
        				"OTHER_LDFLAGS" ~> val "-ObjC",
        				"PREBINDING" ~> val "NO",
        				"SDKROOT" ~> val "iphoneos",
                libSearch
        			],
        			"name" ~> val "Debug"
        		],
        		"1DEB922408733DC00010E9CD" ~> obj [
        			"isa" ~> val "XCBuildConfiguration",
        			"baseConfigurationReference" ~> val kitConfigRefUUID,
        			"buildSettings" ~> obj [
        				"ARCHS" ~> val "$(ARCHS_STANDARD_32_BIT)",
        				"GCC_C_LANGUAGE_STANDARD" ~> val "c99",
        				"GCC_WARN_ABOUT_RETURN_TYPE" ~> val "YES",
        				"GCC_WARN_UNUSED_VARIABLE" ~> val "YES",
        				"OTHER_LDFLAGS" ~> val "-ObjC",
        				"PREBINDING" ~> val "NO",
        				"SDKROOT" ~> val "iphoneos",
                libSearch
        			],
        			"name" ~> val "Release"
        		],
        		"1DEB921E08733DC00010E9CD" ~> obj [
        			"isa" ~> val "XCConfigurationList",
        			"buildConfigurations" ~> arr [
        				val "1DEB921F08733DC00010E9CD",
        				val "1DEB922008733DC00010E9CD"
        			],
        			"defaultConfigurationIsVisible" ~> val "0",
        			"defaultConfigurationName" ~> val "Release"
        		],
        		"1DEB922208733DC00010E9CD" ~> obj [
        			"isa" ~> val "XCConfigurationList",
        			"buildConfigurations" ~> arr [
        				val "1DEB922308733DC00010E9CD",
        				val "1DEB922408733DC00010E9CD"
        			],
        			"defaultConfigurationIsVisible" ~> val "0",
        			"defaultConfigurationName" ~> val "Release"
        		]
        	]

  kitUpdateTarget = [
        "470E2D641287730A0084AE6F" ~> obj [ 
          "isa" ~> val "PBXLegacyTarget",
          "buildArgumentsString" ~> val "",
          "buildConfigurationList" ~> val "470E2D721287731E0084AE6F",
          "buildPhases" ~> arr [],
          "buildToolPath" ~> val "/usr/bin/make",
          "buildWorkingDirectory" ~> val "",
          "dependencies" ~> arr [],
          "name" ~> val "KitUpdate",
          "passBuildSettingsInEnvironment" ~> val "1",
          "productName" ~> val "KitUpdate"
        ],
        "470E2D721287731E0084AE6F" ~> obj [
          "isa" ~> val "XCConfigurationList",
          "buildConfigurations" ~> arr [ val "470E2D651287730B0084AE6F", val "470E2D661287730B0084AE6F" ],
          "defaultConfigurationIsVisible" ~> val "0",
          "defaultConfigurationName" ~> val "Debug"
        ],
        "470E2D651287730B0084AE6F" ~> obj [
          "isa" ~> val "XCBuildConfiguration",
          "buildSettings" ~> obj [
            "COPY_PHASE_STRIP" ~> val "NO",
            "GCC_DYNAMIC_NO_PIC" ~> val "NO",
            "GCC_OPTIMIZATION_LEVEL" ~> val "0", 
            "PRODUCT_NAME" ~> val "KitUpdate" 
          ],
          "name" ~> val "Debug"
        ], 
        "470E2D661287730B0084AE6F" ~> obj [
          "isa" ~> val "XCBuildConfiguration",
          "buildSettings" ~> obj [ "PRODUCT_NAME" ~> val "KitUpdate" ],
          "name" ~> val "Release"
        ]]