diff --git a/extensions/commands/deploy-lipo/README.md b/extensions/commands/deploy-lipo/README.md new file mode 100644 index 0000000..9ac285c --- /dev/null +++ b/extensions/commands/deploy-lipo/README.md @@ -0,0 +1,62 @@ +## Lipo commands + +These are commands to deploy macOS or iOS universal binaries. +This wraps around Conan's full_deploy deployer and then runs `lipo` to +produce universal binaries. + + +#### [Deploy lipo](cmd_deploy_lipo.py) + + +**Parameters** + +The same parameters as `deploy` except multiple profiles should be specified. + +``` +$ conan deploy-lipo . -pr x8_64 -pr armv8 -b missing -r conancenter +``` + +This assumes profiles named x86_64 and armv8 with corresponding architectures. +Universal binaries can only have one binary per architecture but each can have +different settings, e.g. minimum deployment OS: + +## x86_64 +``` +[settings] +arch=x86_64 +build_type=Release +compiler=apple-clang +compiler.cppstd=gnu17 +compiler.libcxx=libc++ +compiler.version=14 +os=Macos +os.version=10.13 +``` + +## armv8 +``` +[settings] +arch=armv8 +build_type=Release +compiler=apple-clang +compiler.cppstd=gnu17 +compiler.libcxx=libc++ +compiler.version=14 +os=Macos +os.version=11.0 +``` + + +#### [Example project](xcode) + + +``` +cd ./xcode +conan deploy-lipo . -pr x86_64 -pr armv8 -b missing +conan build . +``` + +Verify the architectures: +``` +file ./build/Release/example +``` diff --git a/extensions/commands/deploy-lipo/_lipo.py b/extensions/commands/deploy-lipo/_lipo.py new file mode 100644 index 0000000..255fe62 --- /dev/null +++ b/extensions/commands/deploy-lipo/_lipo.py @@ -0,0 +1,95 @@ +import os +import shutil +from subprocess import run + + +__all__ = ['is_macho_binary', 'lipo'] + +# These are for optimization only, to avoid unnecessarily reading files. +_binary_exts = ['.a', '.dylib'] +_regular_exts = [ + '.h', '.hpp', '.hxx', '.c', '.cc', '.cxx', '.cpp', '.m', '.mm', '.txt', '.md', '.html', '.jpg', '.png' +] + + +def is_macho_binary(filename): + ext = os.path.splitext(filename)[1] + if ext in _binary_exts: + return True + if ext in _regular_exts: + return False + with open(filename, "rb") as f: + header = f.read(4) + if header == b'\xcf\xfa\xed\xfe': + # cffaedfe is Mach-O binary + return True + elif header == b'\xca\xfe\xba\xbe': + # cafebabe is Mach-O fat binary + return True + elif header == b'!\n': + # ar archive + return True + return False + + +def copy_arch_file(src, dst, top=None, arch_folders=()): + if os.path.isfile(src): + if top and arch_folders and is_macho_binary(src): + # Try to lipo all available archs on the first path. + src_components = src.split(os.path.sep) + top_components = top.split(os.path.sep) + if src_components[:len(top_components)] == top_components: + paths = [os.path.join(a, *(src_components[len(top_components):])) for a in arch_folders] + paths = [p for p in paths if os.path.isfile(p)] + if len(paths) > 1: + run(['lipo', '-output', dst, '-create'] + paths, check=True) + return + if os.path.exists(dst): + pass # don't overwrite existing files + else: + shutil.copy2(src, dst) + + +# Modified copytree to copy new files to an existing tree. +def graft_tree(src, dst, symlinks=False, copy_function=shutil.copy2, dirs_exist_ok=False): + names = os.listdir(src) + os.makedirs(dst, exist_ok=dirs_exist_ok) + errors = [] + for name in names: + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + try: + if symlinks and os.path.islink(srcname): + if os.path.exists(dstname): + continue + linkto = os.readlink(srcname) + os.symlink(linkto, dstname) + elif os.path.isdir(srcname): + graft_tree(srcname, dstname, symlinks, copy_function, dirs_exist_ok) + else: + copy_function(srcname, dstname) + # What about devices, sockets etc.? + # catch the Error from the recursive graft_tree so that we can + # continue with other files + except shutil.Error as err: + errors.extend(err.args[0]) + except OSError as why: + errors.append((srcname, dstname, str(why))) + try: + shutil.copystat(src, dst) + except OSError as why: + # can't copy file access times on Windows + if why.winerror is None: # pylint: disable=no-member + errors.extend((src, dst, str(why))) + if errors: + raise shutil.Error(errors) + +def lipo(dst_folder, arch_folders): + for folder in arch_folders: + graft_tree(folder, + dst_folder, + symlinks=True, + copy_function=lambda s, d, top=folder: copy_arch_file(s, d, + top=top, + arch_folders=arch_folders), + dirs_exist_ok=True) diff --git a/extensions/commands/deploy-lipo/cmd_deploy_lipo.py b/extensions/commands/deploy-lipo/cmd_deploy_lipo.py new file mode 100644 index 0000000..fc25f94 --- /dev/null +++ b/extensions/commands/deploy-lipo/cmd_deploy_lipo.py @@ -0,0 +1,60 @@ +import os +import shutil +from subprocess import run + +from conan.api.conan_api import ConanAPI +from conan.api.output import ConanOutput +from conan.cli.command import conan_command +from conan.cli.args import common_graph_args +from conan.errors import ConanException + +from _lipo import lipo as lipo_folder + + +_valid_archs = [ + 'x86', + 'x86_64', + 'armv7', + 'armv8', + 'armv8_32', + 'armv8.3', + 'armv7s', + 'armv7k' +] + +@conan_command(group="Consumer") +def deploy_lipo(conan_api: ConanAPI, parser, *args): + """ + Deploy dependencies for multiple profiles and lipo into universal binaries + """ + common_graph_args(parser) + parsed = parser.parse_args(*args) + profiles = parsed.profile_host or parsed.profile + if not profiles: + raise ConanException("Please provide profiles with -pr or -pr:h") + other_args = [] + i = 0 + while i < len(args[0]): + arg = args[0][i] + if arg in ['-pr', '-pr:h', '--profile', '--profile:host']: + i += 2 + else: + other_args.append(arg) + i += 1 + for profile in profiles: + run(['conan', 'install', + '--deploy=full_deploy', + '-pr:h', profile + ] + other_args) + output_dir = os.path.join('full_deploy', 'host') + for package in os.listdir(output_dir): + package_dir = os.path.join(output_dir, package) + for version in os.listdir(package_dir): + version_dir = os.path.join(package_dir, version) + for build in os.listdir(version_dir): + d = os.path.join(version_dir, build) + archs = [os.path.join(d, x) for x in os.listdir(d) if x in _valid_archs] + # We could skip if len(archs) == 1 but the dir layout would be different + lipo_folder(d, archs) + for arch in archs: + shutil.rmtree(arch) diff --git a/extensions/commands/deploy-lipo/xcode/conanfile.py b/extensions/commands/deploy-lipo/xcode/conanfile.py new file mode 100644 index 0000000..ed377ab --- /dev/null +++ b/extensions/commands/deploy-lipo/xcode/conanfile.py @@ -0,0 +1,15 @@ +from conan import ConanFile +from conan.tools.apple import XcodeBuild + + +class UniversalRecipe(ConanFile): + # Note that we don't depend on arch + settings = "os", "compiler", "build_type" + requires = ("libtiff/4.5.0",) + + def build(self): + # xcodebuild = XcodeBuild(self) + # Don't use XcodeBuild because it passes a single -arch flag + build_type = self.settings.get_safe("build_type") + project = 'example.xcodeproj' + self.run('xcodebuild -configuration {} -project {} -alltargets'.format(build_type, project)) diff --git a/extensions/commands/deploy-lipo/xcode/example.xcodeproj/project.pbxproj b/extensions/commands/deploy-lipo/xcode/example.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b8bf9d1 --- /dev/null +++ b/extensions/commands/deploy-lipo/xcode/example.xcodeproj/project.pbxproj @@ -0,0 +1,1020 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 53; + objects = { + +/* Begin PBXBuildFile section */ + 7928066D2A2318E6007A6AA0 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 7928066C2A2318E6007A6AA0 /* main.c */; }; + 792807112A231925007A6AA0 /* libtiff.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7928067D2A231925007A6AA0 /* libtiff.a */; }; + 792807122A231925007A6AA0 /* libtiffxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7928067E2A231925007A6AA0 /* libtiffxx.a */; }; + 792807132A231925007A6AA0 /* transupp.c in Sources */ = {isa = PBXBuildFile; fileRef = 792806842A231925007A6AA0 /* transupp.c */; }; + 792807142A231925007A6AA0 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 792806912A231925007A6AA0 /* libjpeg.a */; }; + 792807152A231925007A6AA0 /* libjbig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7928069F2A231925007A6AA0 /* libjbig.a */; }; + 792807162A231925007A6AA0 /* libz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 792806AB2A231925007A6AA0 /* libz.a */; }; + 792807172A231925007A6AA0 /* libdeflate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 792806B62A231925007A6AA0 /* libdeflate.a */; }; + 792807182A231925007A6AA0 /* libwebpdecoder.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 792806CA2A231925007A6AA0 /* libwebpdecoder.a */; }; + 792807192A231925007A6AA0 /* libsharpyuv.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 792806CB2A231925007A6AA0 /* libsharpyuv.a */; }; + 7928071A2A231925007A6AA0 /* libwebp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 792806CC2A231925007A6AA0 /* libwebp.a */; }; + 7928071B2A231925007A6AA0 /* libwebpdemux.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 792806CD2A231925007A6AA0 /* libwebpdemux.a */; }; + 7928071C2A231925007A6AA0 /* libwebpmux.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 792806CE2A231925007A6AA0 /* libwebpmux.a */; }; + 7928071D2A231925007A6AA0 /* libzstd.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 792806DB2A231925007A6AA0 /* libzstd.a */; }; + 7928071E2A231925007A6AA0 /* liblzma.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7928070F2A231925007A6AA0 /* liblzma.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 79BF9E852A2316D5000D8A83 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 7928066C2A2318E6007A6AA0 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; + 792806742A231925007A6AA0 /* LICENSE.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.md; sourceTree = ""; }; + 792806762A231925007A6AA0 /* tiffio.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tiffio.hxx; sourceTree = ""; }; + 792806772A231925007A6AA0 /* tiff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tiff.h; sourceTree = ""; }; + 792806782A231925007A6AA0 /* tiffvers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tiffvers.h; sourceTree = ""; }; + 792806792A231925007A6AA0 /* tiffio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tiffio.h; sourceTree = ""; }; + 7928067A2A231925007A6AA0 /* tiffconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tiffconf.h; sourceTree = ""; }; + 7928067B2A231925007A6AA0 /* conanmanifest.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conanmanifest.txt; sourceTree = ""; }; + 7928067D2A231925007A6AA0 /* libtiff.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtiff.a; sourceTree = ""; }; + 7928067E2A231925007A6AA0 /* libtiffxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtiffxx.a; sourceTree = ""; }; + 7928067F2A231925007A6AA0 /* conaninfo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conaninfo.txt; sourceTree = ""; }; + 792806842A231925007A6AA0 /* transupp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = transupp.c; sourceTree = ""; }; + 792806852A231925007A6AA0 /* jinclude.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jinclude.h; sourceTree = ""; }; + 792806872A231925007A6AA0 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; + 792806892A231925007A6AA0 /* jpeglib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpeglib.h; sourceTree = ""; }; + 7928068A2A231925007A6AA0 /* jerror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jerror.h; sourceTree = ""; }; + 7928068B2A231925007A6AA0 /* jconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jconfig.h; sourceTree = ""; }; + 7928068C2A231925007A6AA0 /* jmorecfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jmorecfg.h; sourceTree = ""; }; + 7928068D2A231925007A6AA0 /* transupp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transupp.h; sourceTree = ""; }; + 7928068E2A231925007A6AA0 /* jpegint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpegint.h; sourceTree = ""; }; + 7928068F2A231925007A6AA0 /* conanmanifest.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conanmanifest.txt; sourceTree = ""; }; + 792806912A231925007A6AA0 /* libjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libjpeg.a; sourceTree = ""; }; + 792806922A231925007A6AA0 /* conaninfo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conaninfo.txt; sourceTree = ""; }; + 792806972A231925007A6AA0 /* pbmtojbg */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = pbmtojbg; sourceTree = ""; }; + 792806982A231925007A6AA0 /* jbgtopbm */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = jbgtopbm; sourceTree = ""; }; + 7928069A2A231925007A6AA0 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; + 7928069C2A231925007A6AA0 /* jbig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jbig.h; sourceTree = ""; }; + 7928069D2A231925007A6AA0 /* conanmanifest.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conanmanifest.txt; sourceTree = ""; }; + 7928069F2A231925007A6AA0 /* libjbig.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libjbig.a; sourceTree = ""; }; + 792806A02A231925007A6AA0 /* conaninfo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conaninfo.txt; sourceTree = ""; }; + 792806A52A231925007A6AA0 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 792806A72A231925007A6AA0 /* zlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zlib.h; sourceTree = ""; }; + 792806A82A231925007A6AA0 /* zconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zconf.h; sourceTree = ""; }; + 792806A92A231925007A6AA0 /* conanmanifest.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conanmanifest.txt; sourceTree = ""; }; + 792806AB2A231925007A6AA0 /* libz.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libz.a; sourceTree = ""; }; + 792806AC2A231925007A6AA0 /* conaninfo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conaninfo.txt; sourceTree = ""; }; + 792806B12A231925007A6AA0 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; + 792806B32A231925007A6AA0 /* libdeflate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libdeflate.h; sourceTree = ""; }; + 792806B42A231925007A6AA0 /* conanmanifest.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conanmanifest.txt; sourceTree = ""; }; + 792806B62A231925007A6AA0 /* libdeflate.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libdeflate.a; sourceTree = ""; }; + 792806B72A231925007A6AA0 /* conaninfo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conaninfo.txt; sourceTree = ""; }; + 792806BC2A231925007A6AA0 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; + 792806BF2A231925007A6AA0 /* mux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mux.h; sourceTree = ""; }; + 792806C02A231925007A6AA0 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; + 792806C12A231925007A6AA0 /* demux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = demux.h; sourceTree = ""; }; + 792806C22A231925007A6AA0 /* mux_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mux_types.h; sourceTree = ""; }; + 792806C42A231925007A6AA0 /* sharpyuv_csp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sharpyuv_csp.h; sourceTree = ""; }; + 792806C52A231925007A6AA0 /* sharpyuv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sharpyuv.h; sourceTree = ""; }; + 792806C62A231925007A6AA0 /* encode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = encode.h; sourceTree = ""; }; + 792806C72A231925007A6AA0 /* decode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decode.h; sourceTree = ""; }; + 792806C82A231925007A6AA0 /* conanmanifest.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conanmanifest.txt; sourceTree = ""; }; + 792806CA2A231925007A6AA0 /* libwebpdecoder.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libwebpdecoder.a; sourceTree = ""; }; + 792806CB2A231925007A6AA0 /* libsharpyuv.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libsharpyuv.a; sourceTree = ""; }; + 792806CC2A231925007A6AA0 /* libwebp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libwebp.a; sourceTree = ""; }; + 792806CD2A231925007A6AA0 /* libwebpdemux.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libwebpdemux.a; sourceTree = ""; }; + 792806CE2A231925007A6AA0 /* libwebpmux.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libwebpmux.a; sourceTree = ""; }; + 792806CF2A231925007A6AA0 /* conaninfo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conaninfo.txt; sourceTree = ""; }; + 792806D42A231925007A6AA0 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 792806D62A231925007A6AA0 /* zdict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zdict.h; sourceTree = ""; }; + 792806D72A231925007A6AA0 /* zstd_errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zstd_errors.h; sourceTree = ""; }; + 792806D82A231925007A6AA0 /* zstd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zstd.h; sourceTree = ""; }; + 792806D92A231925007A6AA0 /* conanmanifest.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conanmanifest.txt; sourceTree = ""; }; + 792806DB2A231925007A6AA0 /* libzstd.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libzstd.a; sourceTree = ""; }; + 792806DC2A231925007A6AA0 /* conaninfo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conaninfo.txt; sourceTree = ""; }; + 792806E12A231925007A6AA0 /* lzmainfo */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = lzmainfo; sourceTree = ""; }; + 792806E22A231925007A6AA0 /* xzdec */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = xzdec; sourceTree = ""; }; + 792806E32A231925007A6AA0 /* unxz */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = unxz; sourceTree = ""; }; + 792806E42A231925007A6AA0 /* xzegrep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = xzegrep; sourceTree = ""; }; + 792806E52A231925007A6AA0 /* unlzma */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = unlzma; sourceTree = ""; }; + 792806E62A231925007A6AA0 /* xzfgrep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = xzfgrep; sourceTree = ""; }; + 792806E72A231925007A6AA0 /* xz */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = xz; sourceTree = ""; }; + 792806E82A231925007A6AA0 /* lzless */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = lzless; sourceTree = ""; }; + 792806E92A231925007A6AA0 /* xzless */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = xzless; sourceTree = ""; }; + 792806EA2A231925007A6AA0 /* lzcmp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = lzcmp; sourceTree = ""; }; + 792806EB2A231925007A6AA0 /* xzcat */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = xzcat; sourceTree = ""; }; + 792806EC2A231925007A6AA0 /* xzcmp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = xzcmp; sourceTree = ""; }; + 792806ED2A231925007A6AA0 /* lzcat */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = lzcat; sourceTree = ""; }; + 792806EE2A231925007A6AA0 /* lzdiff */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = lzdiff; sourceTree = ""; }; + 792806EF2A231925007A6AA0 /* lzmadec */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = lzmadec; sourceTree = ""; }; + 792806F02A231925007A6AA0 /* lzgrep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = lzgrep; sourceTree = ""; }; + 792806F12A231925007A6AA0 /* lzmore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = lzmore; sourceTree = ""; }; + 792806F22A231925007A6AA0 /* lzfgrep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = lzfgrep; sourceTree = ""; }; + 792806F32A231925007A6AA0 /* xzmore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = xzmore; sourceTree = ""; }; + 792806F42A231925007A6AA0 /* xzgrep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = xzgrep; sourceTree = ""; }; + 792806F52A231925007A6AA0 /* lzma */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = lzma; sourceTree = ""; }; + 792806F62A231925007A6AA0 /* lzegrep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = lzegrep; sourceTree = ""; }; + 792806F72A231925007A6AA0 /* xzdiff */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = xzdiff; sourceTree = ""; }; + 792806F92A231925007A6AA0 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; + 792806FB2A231925007A6AA0 /* lzma.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lzma.h; sourceTree = ""; }; + 792806FD2A231925007A6AA0 /* index.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = index.h; sourceTree = ""; }; + 792806FE2A231925007A6AA0 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + 792806FF2A231925007A6AA0 /* index_hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = index_hash.h; sourceTree = ""; }; + 792807002A231925007A6AA0 /* lzma12.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lzma12.h; sourceTree = ""; }; + 792807012A231925007A6AA0 /* container.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = container.h; sourceTree = ""; }; + 792807022A231925007A6AA0 /* delta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = delta.h; sourceTree = ""; }; + 792807032A231925007A6AA0 /* vli.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vli.h; sourceTree = ""; }; + 792807042A231925007A6AA0 /* check.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = check.h; sourceTree = ""; }; + 792807052A231925007A6AA0 /* bcj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bcj.h; sourceTree = ""; }; + 792807062A231925007A6AA0 /* stream_flags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stream_flags.h; sourceTree = ""; }; + 792807072A231925007A6AA0 /* block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block.h; sourceTree = ""; }; + 792807082A231925007A6AA0 /* hardware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hardware.h; sourceTree = ""; }; + 792807092A231925007A6AA0 /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filter.h; sourceTree = ""; }; + 7928070A2A231925007A6AA0 /* base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base.h; sourceTree = ""; }; + 7928070B2A231925007A6AA0 /* conanmanifest.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conanmanifest.txt; sourceTree = ""; }; + 7928070E2A231925007A6AA0 /* conan-official-xz_utils-variables.cmake */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "conan-official-xz_utils-variables.cmake"; sourceTree = ""; }; + 7928070F2A231925007A6AA0 /* liblzma.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = liblzma.a; sourceTree = ""; }; + 792807102A231925007A6AA0 /* conaninfo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conaninfo.txt; sourceTree = ""; }; + 79BF9E872A2316D5000D8A83 /* example */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = example; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 79BF9E842A2316D5000D8A83 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7928071E2A231925007A6AA0 /* liblzma.a in Frameworks */, + 792807162A231925007A6AA0 /* libz.a in Frameworks */, + 792807172A231925007A6AA0 /* libdeflate.a in Frameworks */, + 7928071A2A231925007A6AA0 /* libwebp.a in Frameworks */, + 792807122A231925007A6AA0 /* libtiffxx.a in Frameworks */, + 792807182A231925007A6AA0 /* libwebpdecoder.a in Frameworks */, + 792807112A231925007A6AA0 /* libtiff.a in Frameworks */, + 792807192A231925007A6AA0 /* libsharpyuv.a in Frameworks */, + 7928071C2A231925007A6AA0 /* libwebpmux.a in Frameworks */, + 7928071D2A231925007A6AA0 /* libzstd.a in Frameworks */, + 792807142A231925007A6AA0 /* libjpeg.a in Frameworks */, + 792807152A231925007A6AA0 /* libjbig.a in Frameworks */, + 7928071B2A231925007A6AA0 /* libwebpdemux.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7928066B2A2318E6007A6AA0 /* src */ = { + isa = PBXGroup; + children = ( + 7928066C2A2318E6007A6AA0 /* main.c */, + ); + path = src; + sourceTree = ""; + }; + 7928066E2A231925007A6AA0 /* full_deploy */ = { + isa = PBXGroup; + children = ( + 7928066F2A231925007A6AA0 /* host */, + ); + path = full_deploy; + sourceTree = ""; + }; + 7928066F2A231925007A6AA0 /* host */ = { + isa = PBXGroup; + children = ( + 792806702A231925007A6AA0 /* libtiff */, + 792806802A231925007A6AA0 /* libjpeg */, + 792806932A231925007A6AA0 /* jbig */, + 792806A12A231925007A6AA0 /* zlib */, + 792806AD2A231925007A6AA0 /* libdeflate */, + 792806B82A231925007A6AA0 /* libwebp */, + 792806D02A231925007A6AA0 /* zstd */, + 792806DD2A231925007A6AA0 /* xz_utils */, + ); + path = host; + sourceTree = ""; + }; + 792806702A231925007A6AA0 /* libtiff */ = { + isa = PBXGroup; + children = ( + 792806712A231925007A6AA0 /* 4.5.0 */, + ); + path = libtiff; + sourceTree = ""; + }; + 792806712A231925007A6AA0 /* 4.5.0 */ = { + isa = PBXGroup; + children = ( + 792806722A231925007A6AA0 /* Release */, + ); + path = 4.5.0; + sourceTree = ""; + }; + 792806722A231925007A6AA0 /* Release */ = { + isa = PBXGroup; + children = ( + 792806732A231925007A6AA0 /* licenses */, + 792806752A231925007A6AA0 /* include */, + 7928067B2A231925007A6AA0 /* conanmanifest.txt */, + 7928067C2A231925007A6AA0 /* lib */, + 7928067F2A231925007A6AA0 /* conaninfo.txt */, + ); + path = Release; + sourceTree = ""; + }; + 792806732A231925007A6AA0 /* licenses */ = { + isa = PBXGroup; + children = ( + 792806742A231925007A6AA0 /* LICENSE.md */, + ); + path = licenses; + sourceTree = ""; + }; + 792806752A231925007A6AA0 /* include */ = { + isa = PBXGroup; + children = ( + 792806762A231925007A6AA0 /* tiffio.hxx */, + 792806772A231925007A6AA0 /* tiff.h */, + 792806782A231925007A6AA0 /* tiffvers.h */, + 792806792A231925007A6AA0 /* tiffio.h */, + 7928067A2A231925007A6AA0 /* tiffconf.h */, + ); + path = include; + sourceTree = ""; + }; + 7928067C2A231925007A6AA0 /* lib */ = { + isa = PBXGroup; + children = ( + 7928067D2A231925007A6AA0 /* libtiff.a */, + 7928067E2A231925007A6AA0 /* libtiffxx.a */, + ); + path = lib; + sourceTree = ""; + }; + 792806802A231925007A6AA0 /* libjpeg */ = { + isa = PBXGroup; + children = ( + 792806812A231925007A6AA0 /* 9e */, + ); + path = libjpeg; + sourceTree = ""; + }; + 792806812A231925007A6AA0 /* 9e */ = { + isa = PBXGroup; + children = ( + 792806822A231925007A6AA0 /* Release */, + ); + path = 9e; + sourceTree = ""; + }; + 792806822A231925007A6AA0 /* Release */ = { + isa = PBXGroup; + children = ( + 792806832A231925007A6AA0 /* res */, + 792806862A231925007A6AA0 /* licenses */, + 792806882A231925007A6AA0 /* include */, + 7928068F2A231925007A6AA0 /* conanmanifest.txt */, + 792806902A231925007A6AA0 /* lib */, + 792806922A231925007A6AA0 /* conaninfo.txt */, + ); + path = Release; + sourceTree = ""; + }; + 792806832A231925007A6AA0 /* res */ = { + isa = PBXGroup; + children = ( + 792806842A231925007A6AA0 /* transupp.c */, + 792806852A231925007A6AA0 /* jinclude.h */, + ); + path = res; + sourceTree = ""; + }; + 792806862A231925007A6AA0 /* licenses */ = { + isa = PBXGroup; + children = ( + 792806872A231925007A6AA0 /* README */, + ); + path = licenses; + sourceTree = ""; + }; + 792806882A231925007A6AA0 /* include */ = { + isa = PBXGroup; + children = ( + 792806892A231925007A6AA0 /* jpeglib.h */, + 7928068A2A231925007A6AA0 /* jerror.h */, + 7928068B2A231925007A6AA0 /* jconfig.h */, + 7928068C2A231925007A6AA0 /* jmorecfg.h */, + 7928068D2A231925007A6AA0 /* transupp.h */, + 7928068E2A231925007A6AA0 /* jpegint.h */, + ); + path = include; + sourceTree = ""; + }; + 792806902A231925007A6AA0 /* lib */ = { + isa = PBXGroup; + children = ( + 792806912A231925007A6AA0 /* libjpeg.a */, + ); + path = lib; + sourceTree = ""; + }; + 792806932A231925007A6AA0 /* jbig */ = { + isa = PBXGroup; + children = ( + 792806942A231925007A6AA0 /* 20160605 */, + ); + path = jbig; + sourceTree = ""; + }; + 792806942A231925007A6AA0 /* 20160605 */ = { + isa = PBXGroup; + children = ( + 792806952A231925007A6AA0 /* Release */, + ); + path = 20160605; + sourceTree = ""; + }; + 792806952A231925007A6AA0 /* Release */ = { + isa = PBXGroup; + children = ( + 792806962A231925007A6AA0 /* bin */, + 792806992A231925007A6AA0 /* licenses */, + 7928069B2A231925007A6AA0 /* include */, + 7928069D2A231925007A6AA0 /* conanmanifest.txt */, + 7928069E2A231925007A6AA0 /* lib */, + 792806A02A231925007A6AA0 /* conaninfo.txt */, + ); + path = Release; + sourceTree = ""; + }; + 792806962A231925007A6AA0 /* bin */ = { + isa = PBXGroup; + children = ( + 792806972A231925007A6AA0 /* pbmtojbg */, + 792806982A231925007A6AA0 /* jbgtopbm */, + ); + path = bin; + sourceTree = ""; + }; + 792806992A231925007A6AA0 /* licenses */ = { + isa = PBXGroup; + children = ( + 7928069A2A231925007A6AA0 /* COPYING */, + ); + path = licenses; + sourceTree = ""; + }; + 7928069B2A231925007A6AA0 /* include */ = { + isa = PBXGroup; + children = ( + 7928069C2A231925007A6AA0 /* jbig.h */, + ); + path = include; + sourceTree = ""; + }; + 7928069E2A231925007A6AA0 /* lib */ = { + isa = PBXGroup; + children = ( + 7928069F2A231925007A6AA0 /* libjbig.a */, + ); + path = lib; + sourceTree = ""; + }; + 792806A12A231925007A6AA0 /* zlib */ = { + isa = PBXGroup; + children = ( + 792806A22A231925007A6AA0 /* 1.2.13 */, + ); + path = zlib; + sourceTree = ""; + }; + 792806A22A231925007A6AA0 /* 1.2.13 */ = { + isa = PBXGroup; + children = ( + 792806A32A231925007A6AA0 /* Release */, + ); + path = 1.2.13; + sourceTree = ""; + }; + 792806A32A231925007A6AA0 /* Release */ = { + isa = PBXGroup; + children = ( + 792806A42A231925007A6AA0 /* licenses */, + 792806A62A231925007A6AA0 /* include */, + 792806A92A231925007A6AA0 /* conanmanifest.txt */, + 792806AA2A231925007A6AA0 /* lib */, + 792806AC2A231925007A6AA0 /* conaninfo.txt */, + ); + path = Release; + sourceTree = ""; + }; + 792806A42A231925007A6AA0 /* licenses */ = { + isa = PBXGroup; + children = ( + 792806A52A231925007A6AA0 /* LICENSE */, + ); + path = licenses; + sourceTree = ""; + }; + 792806A62A231925007A6AA0 /* include */ = { + isa = PBXGroup; + children = ( + 792806A72A231925007A6AA0 /* zlib.h */, + 792806A82A231925007A6AA0 /* zconf.h */, + ); + path = include; + sourceTree = ""; + }; + 792806AA2A231925007A6AA0 /* lib */ = { + isa = PBXGroup; + children = ( + 792806AB2A231925007A6AA0 /* libz.a */, + ); + path = lib; + sourceTree = ""; + }; + 792806AD2A231925007A6AA0 /* libdeflate */ = { + isa = PBXGroup; + children = ( + 792806AE2A231925007A6AA0 /* 1.18 */, + ); + path = libdeflate; + sourceTree = ""; + }; + 792806AE2A231925007A6AA0 /* 1.18 */ = { + isa = PBXGroup; + children = ( + 792806AF2A231925007A6AA0 /* Release */, + ); + path = 1.18; + sourceTree = ""; + }; + 792806AF2A231925007A6AA0 /* Release */ = { + isa = PBXGroup; + children = ( + 792806B02A231925007A6AA0 /* licenses */, + 792806B22A231925007A6AA0 /* include */, + 792806B42A231925007A6AA0 /* conanmanifest.txt */, + 792806B52A231925007A6AA0 /* lib */, + 792806B72A231925007A6AA0 /* conaninfo.txt */, + ); + path = Release; + sourceTree = ""; + }; + 792806B02A231925007A6AA0 /* licenses */ = { + isa = PBXGroup; + children = ( + 792806B12A231925007A6AA0 /* COPYING */, + ); + path = licenses; + sourceTree = ""; + }; + 792806B22A231925007A6AA0 /* include */ = { + isa = PBXGroup; + children = ( + 792806B32A231925007A6AA0 /* libdeflate.h */, + ); + path = include; + sourceTree = ""; + }; + 792806B52A231925007A6AA0 /* lib */ = { + isa = PBXGroup; + children = ( + 792806B62A231925007A6AA0 /* libdeflate.a */, + ); + path = lib; + sourceTree = ""; + }; + 792806B82A231925007A6AA0 /* libwebp */ = { + isa = PBXGroup; + children = ( + 792806B92A231925007A6AA0 /* 1.3.0 */, + ); + path = libwebp; + sourceTree = ""; + }; + 792806B92A231925007A6AA0 /* 1.3.0 */ = { + isa = PBXGroup; + children = ( + 792806BA2A231925007A6AA0 /* Release */, + ); + path = 1.3.0; + sourceTree = ""; + }; + 792806BA2A231925007A6AA0 /* Release */ = { + isa = PBXGroup; + children = ( + 792806BB2A231925007A6AA0 /* licenses */, + 792806BD2A231925007A6AA0 /* include */, + 792806C82A231925007A6AA0 /* conanmanifest.txt */, + 792806C92A231925007A6AA0 /* lib */, + 792806CF2A231925007A6AA0 /* conaninfo.txt */, + ); + path = Release; + sourceTree = ""; + }; + 792806BB2A231925007A6AA0 /* licenses */ = { + isa = PBXGroup; + children = ( + 792806BC2A231925007A6AA0 /* COPYING */, + ); + path = licenses; + sourceTree = ""; + }; + 792806BD2A231925007A6AA0 /* include */ = { + isa = PBXGroup; + children = ( + 792806BE2A231925007A6AA0 /* webp */, + ); + path = include; + sourceTree = ""; + }; + 792806BE2A231925007A6AA0 /* webp */ = { + isa = PBXGroup; + children = ( + 792806BF2A231925007A6AA0 /* mux.h */, + 792806C02A231925007A6AA0 /* types.h */, + 792806C12A231925007A6AA0 /* demux.h */, + 792806C22A231925007A6AA0 /* mux_types.h */, + 792806C32A231925007A6AA0 /* sharpyuv */, + 792806C62A231925007A6AA0 /* encode.h */, + 792806C72A231925007A6AA0 /* decode.h */, + ); + path = webp; + sourceTree = ""; + }; + 792806C32A231925007A6AA0 /* sharpyuv */ = { + isa = PBXGroup; + children = ( + 792806C42A231925007A6AA0 /* sharpyuv_csp.h */, + 792806C52A231925007A6AA0 /* sharpyuv.h */, + ); + path = sharpyuv; + sourceTree = ""; + }; + 792806C92A231925007A6AA0 /* lib */ = { + isa = PBXGroup; + children = ( + 792806CA2A231925007A6AA0 /* libwebpdecoder.a */, + 792806CB2A231925007A6AA0 /* libsharpyuv.a */, + 792806CC2A231925007A6AA0 /* libwebp.a */, + 792806CD2A231925007A6AA0 /* libwebpdemux.a */, + 792806CE2A231925007A6AA0 /* libwebpmux.a */, + ); + path = lib; + sourceTree = ""; + }; + 792806D02A231925007A6AA0 /* zstd */ = { + isa = PBXGroup; + children = ( + 792806D12A231925007A6AA0 /* 1.5.5 */, + ); + path = zstd; + sourceTree = ""; + }; + 792806D12A231925007A6AA0 /* 1.5.5 */ = { + isa = PBXGroup; + children = ( + 792806D22A231925007A6AA0 /* Release */, + ); + path = 1.5.5; + sourceTree = ""; + }; + 792806D22A231925007A6AA0 /* Release */ = { + isa = PBXGroup; + children = ( + 792806D32A231925007A6AA0 /* licenses */, + 792806D52A231925007A6AA0 /* include */, + 792806D92A231925007A6AA0 /* conanmanifest.txt */, + 792806DA2A231925007A6AA0 /* lib */, + 792806DC2A231925007A6AA0 /* conaninfo.txt */, + ); + path = Release; + sourceTree = ""; + }; + 792806D32A231925007A6AA0 /* licenses */ = { + isa = PBXGroup; + children = ( + 792806D42A231925007A6AA0 /* LICENSE */, + ); + path = licenses; + sourceTree = ""; + }; + 792806D52A231925007A6AA0 /* include */ = { + isa = PBXGroup; + children = ( + 792806D62A231925007A6AA0 /* zdict.h */, + 792806D72A231925007A6AA0 /* zstd_errors.h */, + 792806D82A231925007A6AA0 /* zstd.h */, + ); + path = include; + sourceTree = ""; + }; + 792806DA2A231925007A6AA0 /* lib */ = { + isa = PBXGroup; + children = ( + 792806DB2A231925007A6AA0 /* libzstd.a */, + ); + path = lib; + sourceTree = ""; + }; + 792806DD2A231925007A6AA0 /* xz_utils */ = { + isa = PBXGroup; + children = ( + 792806DE2A231925007A6AA0 /* 5.4.2 */, + ); + path = xz_utils; + sourceTree = ""; + }; + 792806DE2A231925007A6AA0 /* 5.4.2 */ = { + isa = PBXGroup; + children = ( + 792806DF2A231925007A6AA0 /* Release */, + ); + path = 5.4.2; + sourceTree = ""; + }; + 792806DF2A231925007A6AA0 /* Release */ = { + isa = PBXGroup; + children = ( + 792806E02A231925007A6AA0 /* bin */, + 792806F82A231925007A6AA0 /* licenses */, + 792806FA2A231925007A6AA0 /* include */, + 7928070B2A231925007A6AA0 /* conanmanifest.txt */, + 7928070C2A231925007A6AA0 /* lib */, + 792807102A231925007A6AA0 /* conaninfo.txt */, + ); + path = Release; + sourceTree = ""; + }; + 792806E02A231925007A6AA0 /* bin */ = { + isa = PBXGroup; + children = ( + 792806E12A231925007A6AA0 /* lzmainfo */, + 792806E22A231925007A6AA0 /* xzdec */, + 792806E32A231925007A6AA0 /* unxz */, + 792806E42A231925007A6AA0 /* xzegrep */, + 792806E52A231925007A6AA0 /* unlzma */, + 792806E62A231925007A6AA0 /* xzfgrep */, + 792806E72A231925007A6AA0 /* xz */, + 792806E82A231925007A6AA0 /* lzless */, + 792806E92A231925007A6AA0 /* xzless */, + 792806EA2A231925007A6AA0 /* lzcmp */, + 792806EB2A231925007A6AA0 /* xzcat */, + 792806EC2A231925007A6AA0 /* xzcmp */, + 792806ED2A231925007A6AA0 /* lzcat */, + 792806EE2A231925007A6AA0 /* lzdiff */, + 792806EF2A231925007A6AA0 /* lzmadec */, + 792806F02A231925007A6AA0 /* lzgrep */, + 792806F12A231925007A6AA0 /* lzmore */, + 792806F22A231925007A6AA0 /* lzfgrep */, + 792806F32A231925007A6AA0 /* xzmore */, + 792806F42A231925007A6AA0 /* xzgrep */, + 792806F52A231925007A6AA0 /* lzma */, + 792806F62A231925007A6AA0 /* lzegrep */, + 792806F72A231925007A6AA0 /* xzdiff */, + ); + path = bin; + sourceTree = ""; + }; + 792806F82A231925007A6AA0 /* licenses */ = { + isa = PBXGroup; + children = ( + 792806F92A231925007A6AA0 /* COPYING */, + ); + path = licenses; + sourceTree = ""; + }; + 792806FA2A231925007A6AA0 /* include */ = { + isa = PBXGroup; + children = ( + 792806FB2A231925007A6AA0 /* lzma.h */, + 792806FC2A231925007A6AA0 /* lzma */, + ); + path = include; + sourceTree = ""; + }; + 792806FC2A231925007A6AA0 /* lzma */ = { + isa = PBXGroup; + children = ( + 792806FD2A231925007A6AA0 /* index.h */, + 792806FE2A231925007A6AA0 /* version.h */, + 792806FF2A231925007A6AA0 /* index_hash.h */, + 792807002A231925007A6AA0 /* lzma12.h */, + 792807012A231925007A6AA0 /* container.h */, + 792807022A231925007A6AA0 /* delta.h */, + 792807032A231925007A6AA0 /* vli.h */, + 792807042A231925007A6AA0 /* check.h */, + 792807052A231925007A6AA0 /* bcj.h */, + 792807062A231925007A6AA0 /* stream_flags.h */, + 792807072A231925007A6AA0 /* block.h */, + 792807082A231925007A6AA0 /* hardware.h */, + 792807092A231925007A6AA0 /* filter.h */, + 7928070A2A231925007A6AA0 /* base.h */, + ); + path = lzma; + sourceTree = ""; + }; + 7928070C2A231925007A6AA0 /* lib */ = { + isa = PBXGroup; + children = ( + 7928070D2A231925007A6AA0 /* cmake */, + 7928070F2A231925007A6AA0 /* liblzma.a */, + ); + path = lib; + sourceTree = ""; + }; + 7928070D2A231925007A6AA0 /* cmake */ = { + isa = PBXGroup; + children = ( + 7928070E2A231925007A6AA0 /* conan-official-xz_utils-variables.cmake */, + ); + path = cmake; + sourceTree = ""; + }; + 79BF9E7E2A2316D5000D8A83 = { + isa = PBXGroup; + children = ( + 7928066E2A231925007A6AA0 /* full_deploy */, + 7928066B2A2318E6007A6AA0 /* src */, + 79BF9E882A2316D5000D8A83 /* Products */, + ); + sourceTree = ""; + }; + 79BF9E882A2316D5000D8A83 /* Products */ = { + isa = PBXGroup; + children = ( + 79BF9E872A2316D5000D8A83 /* example */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 79BF9E862A2316D5000D8A83 /* example */ = { + isa = PBXNativeTarget; + buildConfigurationList = 79BF9E8E2A2316D5000D8A83 /* Build configuration list for PBXNativeTarget "example" */; + buildPhases = ( + 79BF9E832A2316D5000D8A83 /* Sources */, + 79BF9E842A2316D5000D8A83 /* Frameworks */, + 79BF9E852A2316D5000D8A83 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = example; + productName = example; + productReference = 79BF9E872A2316D5000D8A83 /* example */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 79BF9E7F2A2316D5000D8A83 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1430; + TargetAttributes = { + 79BF9E862A2316D5000D8A83 = { + CreatedOnToolsVersion = 14.3; + }; + }; + }; + buildConfigurationList = 79BF9E822A2316D5000D8A83 /* Build configuration list for PBXProject "example" */; + compatibilityVersion = "Xcode 10.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 79BF9E7E2A2316D5000D8A83; + productRefGroup = 79BF9E882A2316D5000D8A83 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 79BF9E862A2316D5000D8A83 /* example */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 79BF9E832A2316D5000D8A83 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 792807132A231925007A6AA0 /* transupp.c in Sources */, + 7928066D2A2318E6007A6AA0 /* main.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 79BF9E8C2A2316D5000D8A83 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 13.3; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = NO; + SDKROOT = macosx; + }; + name = Debug; + }; + 79BF9E8D2A2316D5000D8A83 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 13.3; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + }; + name = Release; + }; + 79BF9E8F2A2316D5000D8A83 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/full_deploy/host/libtiff/4.5.0/Release/include", + "$(PROJECT_DIR)/full_deploy/host/libjpeg/9e/Release/include", + "$(PROJECT_DIR)/full_deploy/host/jbig/20160605/Release/include", + "$(PROJECT_DIR)/full_deploy/host/zlib/1.2.13/Release/include", + "$(PROJECT_DIR)/full_deploy/host/libdeflate/1.18/Release/include", + "$(PROJECT_DIR)/full_deploy/host/libwebp/1.3.0/Release/include", + "$(PROJECT_DIR)/full_deploy/host/zstd/1.5.5/Release/include", + "$(PROJECT_DIR)/full_deploy/host/xz_utils/5.4.2/Release/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/full_deploy/host/libtiff/4.5.0/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/libjpeg/9e/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/jbig/20160605/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/zlib/1.2.13/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/libdeflate/1.18/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/libwebp/1.3.0/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/zstd/1.5.5/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/xz_utils/5.4.2/Release/lib", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 79BF9E902A2316D5000D8A83 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/full_deploy/host/libtiff/4.5.0/Release/include", + "$(PROJECT_DIR)/full_deploy/host/libjpeg/9e/Release/include", + "$(PROJECT_DIR)/full_deploy/host/jbig/20160605/Release/include", + "$(PROJECT_DIR)/full_deploy/host/zlib/1.2.13/Release/include", + "$(PROJECT_DIR)/full_deploy/host/libdeflate/1.18/Release/include", + "$(PROJECT_DIR)/full_deploy/host/libwebp/1.3.0/Release/include", + "$(PROJECT_DIR)/full_deploy/host/zstd/1.5.5/Release/include", + "$(PROJECT_DIR)/full_deploy/host/xz_utils/5.4.2/Release/include", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/full_deploy/host/libtiff/4.5.0/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/libjpeg/9e/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/jbig/20160605/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/zlib/1.2.13/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/libdeflate/1.18/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/libwebp/1.3.0/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/zstd/1.5.5/Release/lib", + "$(PROJECT_DIR)/full_deploy/host/xz_utils/5.4.2/Release/lib", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 79BF9E822A2316D5000D8A83 /* Build configuration list for PBXProject "example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 79BF9E8C2A2316D5000D8A83 /* Debug */, + 79BF9E8D2A2316D5000D8A83 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 79BF9E8E2A2316D5000D8A83 /* Build configuration list for PBXNativeTarget "example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 79BF9E8F2A2316D5000D8A83 /* Debug */, + 79BF9E902A2316D5000D8A83 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 79BF9E7F2A2316D5000D8A83 /* Project object */; +} diff --git a/extensions/commands/deploy-lipo/xcode/src/main.c b/extensions/commands/deploy-lipo/xcode/src/main.c new file mode 100644 index 0000000..0b73b99 --- /dev/null +++ b/extensions/commands/deploy-lipo/xcode/src/main.c @@ -0,0 +1,8 @@ +#include + +int main() +{ + TIFF* tif = TIFFOpen("foo.tif", "w"); + TIFFClose(tif); + return 0; +}