at 18.03-beta 285 lines 10 kB view raw
1{ stdenv, sdk, writeText, platformName, xcbuild }: 2 3let 4 5 Info = { 6 CFBundleIdentifier = platformName; 7 Type = "Platform"; 8 Name = "macosx"; 9 }; 10 11 Version = { 12 ProjectName = "OSXPlatformSupport"; 13 }; 14 15 # These files are all based off of Xcode spec fies found in 16 # /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Speciications/. 17 18 # Based off of the MacOSX Architectures.xcpsec file. All i386 stuff 19 # is removed because NixPkgs only supports darwin-x86_64. 20 Architectures = [ 21 { 22 Identifier = "Standard"; 23 Type = "Architecture"; 24 Name = "Standard Architectures (64-bit Intel)"; 25 RealArchitectures = [ "x86_64" ]; 26 ArchitectureSetting = "ARCHS_STANDARD"; 27 } 28 { 29 Identifier = "Universal"; 30 Type = "Architecture"; 31 Name = "Universal (64-bit Intel)"; 32 RealArchitectures = [ "x86_64" ]; 33 ArchitectureSetting = "ARCHS_STANDARD_32_64_BIT"; 34 } 35 { 36 Identifier = "Native"; 37 Type = "Architecture"; 38 Name = "Native Architecture of Build Machine"; 39 ArchitectureSetting = "NATIVE_ARCH_ACTUAL"; 40 } 41 { 42 Identifier = "Standard64bit"; 43 Type = "Architecture"; 44 Name = "64-bit Intel"; 45 RealArchitectures = [ "x86_64" ]; 46 ArchitectureSetting = "ARCHS_STANDARD_64_BIT"; 47 } 48 { 49 Identifier = "x86_64"; 50 Type = "Architecture"; 51 Name = "Intel 64-bit"; 52 } 53 { 54 Identifier = "Standard_Including_64_bit"; 55 Type = "Architecture"; 56 Name = "Standard Architectures (including 64-bit)"; 57 RealArchitectures = [ "x86_64" ]; 58 ArchitectureSetting = "ARCHS_STANDARD_INCLUDING_64_BIT"; 59 } 60 ]; 61 62 # Based off of the MacOSX Package Types.xcpsec file. Only keep the 63 # bare minimum needed. 64 PackageTypes = [ 65 { 66 Identifier = "com.apple.package-type.mach-o-executable"; 67 Type = "PackageType"; 68 Name = "Mach-O Executable"; 69 DefaultBuildSettings = { 70 EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"; 71 EXECUTABLE_PATH = "$(EXECUTABLE_NAME)"; 72 }; 73 ProductReference = { 74 FileType = "compiled.mach-o.executable"; 75 Name = "$(EXECUTABLE_NAME)"; 76 }; 77 } 78 { 79 Identifier = "com.apple.package-type.mach-o-objfile"; 80 Type = "PackageType"; 81 Name = "Mach-O Object File"; 82 DefaultBuildSettings = { 83 EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"; 84 EXECUTABLE_PATH = "$(EXECUTABLE_NAME)"; 85 }; 86 ProductReference = { 87 FileType = "compiled.mach-o.objfile"; 88 Name = "$(EXECUTABLE_NAME)"; 89 }; 90 } 91 { 92 Identifier = "com.apple.package-type.mach-o-dylib"; 93 Type = "PackageType"; 94 Name = "Mach-O Dynamic Library"; 95 DefaultBuildSettings = { 96 EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"; 97 EXECUTABLE_PATH = "$(EXECUTABLE_NAME)"; 98 }; 99 ProductReference = { 100 FileType = "compiled.mach-o.dylib"; 101 Name = "$(EXECUTABLE_NAME)"; 102 }; 103 } 104 { 105 Identifier = "com.apple.package-type.static-library"; 106 Type = "PackageType"; 107 Name = "Mach-O Static Library"; 108 DefaultBuildSettings = { 109 EXECUTABLE_PREFIX = "lib"; 110 EXECUTABLE_SUFFIX = ".a"; 111 EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"; 112 EXECUTABLE_PATH = "$(EXECUTABLE_NAME)"; 113 }; 114 ProductReference = { 115 FileType = "archive.ar"; 116 Name = "$(EXECUTABLE_NAME)"; 117 IsLaunchable = "NO"; 118 }; 119 } 120 { 121 Identifier = "com.apple.package-type.wrapper"; 122 Type = "PackageType"; 123 Name = "Wrapper"; 124 DefaultBuildSettings = { 125 WRAPPER_SUFFIX = ".bundle"; 126 WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)"; 127 CONTENTS_FOLDER_PATH = "$(WRAPPER_NAME)/Contents"; 128 EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"; 129 EXECUTABLE_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/MacOS"; 130 EXECUTABLE_PATH = "$(EXECUTABLE_FOLDER_PATH)/$(EXECUTABLE_NAME)"; 131 INFOPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/Info.plist"; 132 INFOSTRINGS_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/InfoPlist.strings"; 133 PKGINFO_PATH = "$(CONTENTS_FOLDER_PATH)/PkgInfo"; 134 PBDEVELOPMENTPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/pbdevelopment.plist"; 135 VERSIONPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/version.plist"; 136 PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers"; 137 PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders"; 138 EXECUTABLES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Executables"; 139 FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Frameworks"; 140 SHARED_FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedFrameworks"; 141 SHARED_SUPPORT_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedSupport"; 142 UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Resources"; 143 LOCALIZED_RESOURCES_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/$(DEVELOPMENT_LANGUAGE).lproj"; 144 DOCUMENTATION_FOLDER_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/Documentation"; 145 PLUGINS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PlugIns"; 146 SCRIPTS_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Scripts"; 147 }; 148 ProductReference = { 149 FileType = "wrapper.cfbundle"; 150 Name = "$(WRAPPER_NAME)"; 151 IsLaunchable = "NO"; 152 }; 153 } 154 { 155 Identifier = "com.apple.package-type.wrapper.application"; 156 Type = "PackageType"; 157 BasedOn = "com.apple.package-type.wrapper"; 158 Name = "Application Wrapper"; 159 DefaultBuildSettings = { 160 GENERATE_PKGINFO_FILE = "YES"; 161 }; 162 ProductReference = { 163 FileType = "wrapper.application"; 164 Name = "$(WRAPPER_NAME)"; 165 IsLaunchable = "YES"; 166 }; 167 } 168 ]; 169 170 # Based off of the MacOSX Product Types.xcpsec file. All 171 # bundles/wrapper are removed, because we prefer dynamic products in 172 # NixPkgs. 173 ProductTypes = [ 174 { 175 Identifier = "com.apple.product-type.tool"; 176 Type = "ProductType"; 177 Name = "Command-line Tool"; 178 PackageTypes = [ "com.apple.package-type.mach-o-executable" ]; 179 } 180 { 181 Identifier = "com.apple.product-type.objfile"; 182 Type = "ProductType"; 183 Name = "Object File"; 184 PackageTypes = [ "com.apple.package-type.mach-o-objfile" ]; 185 } 186 { 187 Identifier = "com.apple.product-type.library.dynamic"; 188 Type = "ProductType"; 189 Name = "Dynamic Library"; 190 PackageTypes = [ "com.apple.package-type.mach-o-dylib" ]; 191 DefaultBuildProperties = { 192 FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)"; 193 MACH_O_TYPE = "mh_dylib"; 194 REZ_EXECUTABLE = "YES"; 195 EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)"; 196 EXECUTABLE_EXTENSION = "dylib"; 197 DYLIB_COMPATIBILITY_VERSION = "1"; 198 DYLIB_CURRENT_VERSION = "1"; 199 FRAMEWORK_FLAG_PREFIX = "-framework"; 200 LIBRARY_FLAG_PREFIX = "-l"; 201 LIBRARY_FLAG_NOSPACE = "YES"; 202 STRIP_STYLE = "debugging"; 203 GCC_INLINES_ARE_PRIVATE_EXTERN = "YES"; 204 CODE_SIGNING_ALLOWED = "YES"; 205 CODE_SIGNING_REQUIRED = "NO"; 206 }; 207 } 208 { 209 Identifier = "com.apple.product-type.library.static"; 210 Type = "ProductType"; 211 Name = "Static Library"; 212 PackageTypes = [ "com.apple.package-type.static-library" ]; 213 DefaultBuildProperties = { 214 FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)"; 215 MACH_O_TYPE = "staticlib"; 216 REZ_EXECUTABLE = "YES"; 217 EXECUTABLE_PREFIX = "lib"; 218 EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)"; 219 EXECUTABLE_EXTENSION = "a"; 220 FRAMEWORK_FLAG_PREFIX = "-framework"; 221 LIBRARY_FLAG_PREFIX = "-l"; 222 LIBRARY_FLAG_NOSPACE = "YES"; 223 STRIP_STYLE = "debugging"; 224 SEPARATE_STRIP = "YES"; 225 CLANG_ENABLE_MODULE_DEBUGGING = "NO"; 226 }; 227 } 228 { 229 Type = "ProductType"; 230 Identifier = "com.apple.product-type.bundle"; 231 Name = "Bundle"; 232 DefaultBuildProperties = { 233 FULL_PRODUCT_NAME = "$(WRAPPER_NAME)"; 234 MACH_O_TYPE = "mh_bundle"; 235 WRAPPER_PREFIX = ""; 236 WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)"; 237 WRAPPER_EXTENSION = "bundle"; 238 WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)"; 239 FRAMEWORK_FLAG_PREFIX = "-framework"; 240 LIBRARY_FLAG_PREFIX = "-l"; 241 LIBRARY_FLAG_NOSPACE = "YES"; 242 STRIP_STYLE = "non-global"; 243 }; 244 PackageTypes = [ "com.apple.package-type.wrapper" ]; 245 IsWrapper = "YES"; 246 HasInfoPlist = "YES"; 247 HasInfoPlistStrings = "YES"; 248 } 249 { 250 Identifier = "com.apple.product-type.application"; 251 Type = "ProductType"; 252 BasedOn = "com.apple.product-type.bundle"; 253 Name = "Application"; 254 DefaultBuildProperties = { 255 MACH_O_TYPE = "mh_execute"; 256 WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)"; 257 WRAPPER_EXTENSION = "app"; 258 }; 259 PackageTypes = [ "com.apple.package-type.wrapper.application" ]; 260 } 261 ]; 262 263in 264 265stdenv.mkDerivation { 266 name = "MacOSX.platform"; 267 buildInputs = [ xcbuild ]; 268 buildCommand = '' 269 mkdir -p $out/ 270 cd $out/ 271 272 plutil -convert xml1 -o Info.plist ${writeText "Info.plist" (builtins.toJSON Info)} 273 plutil -convert xml1 -o version.plist ${writeText "version.plist" (builtins.toJSON Version)} 274 275 mkdir -p $out/Developer/Library/Xcode/Specifications/ 276 cd $out/Developer/Library/Xcode/Specifications/ 277 plutil -convert xml1 -o Architectures.xcspec ${writeText "Architectures.xcspec" (builtins.toJSON Architectures)} 278 plutil -convert xml1 -o PackageTypes.xcspec ${writeText "PackageTypes.xcspec" (builtins.toJSON PackageTypes)} 279 plutil -convert xml1 -o ProductTypes.xcspec ${writeText "ProductTypes.xcspec" (builtins.toJSON ProductTypes)} 280 281 mkdir -p $out/Developer/SDKs/ 282 cd $out/Developer/SDKs/ 283 cp -r ${sdk} ${sdk.name} 284 ''; 285}