packages feed

kit-0.6: Kit/Xcode/ProjectFileTemplate.hs

{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
module Kit.Xcode.ProjectFileTemplate where

import Kit.Xcode.Common
import Text.PList
import Control.Monad (join)

import qualified Data.List as L

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

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

productRefUUID = "D2AAC07E0554694100DB518D"
kitConfigRefUUID = "4728C52F117C02B10027D7D1"

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

makeProjectPList :: [PListObjectItem] -> [FilePath] -> PListFile 
makeProjectPList objects libDirs = projectFile objs "0867D690FE84028FC02AAC07" where
    objs = objects ++ groups ++ targets ++ buildConfigurations libDirs

groups = [ groupProductsUUID ~> group "Products" [ val productRefUUID ],
          mainGroupUUID ~> group "KitDeps" [
            val classesGroupUUID,
            val otherSourcesGroupUUID,
            val frameworksGroupUUID,
            val groupProductsUUID,
            val kitConfigRefUUID
          ],
          otherSourcesGroupUUID ~> group "Other Sources" [val "AA747D9E0F9514B9006C5449"]
        ]
      
targets = ("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) " ++ join (L.intersperse " " libDirs))

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 "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 "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"
      ]]