1.Dd March 6, 2009 
2.Os Darwin
3.Dt MKEXTUNPACK 8
4.Sh NAME
5.Nm mkextunpack
6.Nd extract or list the contents of a multikext (mkext) archive
7.Sh SYNOPSIS
8.Nm
9.Op Fl v
10.Op Fl a Ar arch
11.Op Fl d Ar output_directory
12.Ar mkext_file
13.Sh DESCRIPTION
14The
15.Nm
16program lists the contents of a multikext file,
17.Ar mkext_file ,
18or unarchives the contents into
19.Ar output_directory
20(which must exist).
21The
22.Fl v
23option causes
24.Nm
25to print the name if each kext as it finds them.
26.Sh DIAGNOSTICS
27.Nm
28exits with a zero status upon success.
29Upon failure, it prints an error message
30and exits with a nonzero status.
31.Pp
32With a nonsegreated format 1 mkext file,
33wherein each kext may contain a universal binary,
34.Nm
35simply unpacks the contents.
36With an mkext file segregated by architecture
37(that is, with distinct internal archives of architecture-specific kexts),
38.Nm
39attempts by default to unpack or list kexts
40for the current machine's architecture.
41To choose a particular architecture
42to extract or list,
43use the
44.Fl a
45option.
46.Pp
47There is no simple way to unpack a segregated mkext file
48into a set of kexts with universal binaries,
49but you can unpack each of its component architectures
50to separate directories for examination.
51.Sh SEE ALSO 
52.Xr kextcache 8
53.Sh BUGS
54Many single-letter options are inconsistent in meaning
55with (or directly contradictory to) the same letter options
56in other kext tools.
57.Pp
58For version 1 mkext files, note that the file format
59doesn't record the original filenames
60of the kexts, so
61.Nm
62has to guess at what they are.
63It does this by using the value of the CFBundleExecutable
64property of the kext's info dictionary
65(Project Builder sets this to the base name of the kext
66bundle by default, but the developer can change it).
67If that property doesn't exist, the last component of the
68CFBundleIdentifier is used.
69Duplicates have an incrementing index appended to the name.
70Kexts that have no CFBundleExecutable or CFBundleIdentifier property
71are named
72.Do Ns Pa NameUnknown- Ns Ar n Ns Pa .kext Dc Ns ,
73where
74.Ar n
75is a number.
76