zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

build.zig.zon.md (3539B) - Raw


      1 # build.zig.zon Documentation
      2 
      3 This is the manifest file for build.zig scripts. It is named build.zig.zon in
      4 order to make it clear that it is metadata specifically pertaining to
      5 build.zig.
      6 
      7 - **build root** - the directory that contains `build.zig`
      8 
      9 ## Top-Level Fields
     10 
     11 ### `name`
     12 
     13 Enum literal. Required.
     14 
     15 This is the default name used by packages depending on this one. For example,
     16 when a user runs `zig fetch --save <url>`, this field is used as the key in the
     17 `dependencies` table. Although the user can choose a different name, most users
     18 will stick with this provided value.
     19 
     20 It is redundant to include "zig" in this name because it is already within the
     21 Zig package namespace.
     22 
     23 Must be a valid bare Zig identifier (don't `@` me), limited to 32 bytes.
     24 
     25 Together with `fingerprint`, this represents a globally unique package identifier.
     26 
     27 ### `fingerprint`
     28 
     29 Together with `name`, this represents a globally unique package identifier. This
     30 field is auto-initialized by the toolchain when the package is first created,
     31 and then *never changes*. This allows Zig to unambiguously detect when one
     32 package is an updated version of another.
     33 
     34 When forking a Zig project, this fingerprint should be regenerated if the upstream
     35 project is still maintained. Otherwise, the fork is *hostile*, attempting to
     36 take control over the original project's identity. The fingerprint can be regenerated
     37 by deleting the field and running `zig build`.
     38 
     39 This 64-bit integer is the combination of a 32-bit id component and a 32-bit
     40 checksum.
     41 
     42 The id component within the fingerprint has these restrictions:
     43 
     44 `0x00000000` is reserved for legacy packages.
     45 
     46 `0xffffffff` is reserved to represent "naked" packages.
     47 
     48 The checksum is computed from `name` and serves to protect Zig users from
     49 accidental id collisions.
     50 
     51 ### `version`
     52 
     53 String. Required.
     54 
     55 [semver](https://semver.org/)
     56 
     57 Limited to 32 bytes.
     58 
     59 ### `minimum_zig_version`
     60 
     61 String. Optional.
     62 
     63 [semver](https://semver.org/)
     64 
     65 This is currently advisory only; the compiler does not yet do anything
     66 with this version.
     67 
     68 ### `dependencies`
     69 
     70 Struct.
     71 
     72 Each dependency must either provide a `url` and `hash`, or a `path`.
     73 
     74 #### `url`
     75 
     76 String. 
     77 
     78 When updating this field to a new URL, be sure to delete the corresponding
     79 `hash`, otherwise you are communicating that you expect to find the old hash at
     80 the new URL. If the contents of a URL change this will result in a hash mismatch
     81 which will prevent zig from using it.
     82 
     83 #### `hash`
     84 
     85 String. 
     86 
     87 [multihash](https://multiformats.io/multihash/)
     88 
     89 This is computed from the file contents of the directory of files that is
     90 obtained after fetching `url` and applying the inclusion rules given by
     91 `paths`.
     92 
     93 This field is the source of truth; packages do not come from a `url`; they
     94 come from a `hash`. `url` is just one of many possible mirrors for how to
     95 obtain a package matching this `hash`.
     96 
     97 #### `path`
     98 
     99 String.
    100 
    101 When this is provided, the package is found in a directory relative to the
    102 build root. In this case the package's hash is irrelevant and therefore not
    103 computed. This field and `url` are mutually exclusive.
    104 
    105 #### `lazy`
    106 
    107 Boolean.
    108 
    109 When this is set to `true`, a package is declared to be lazily fetched. This
    110 makes the dependency only get fetched if it is actually used.
    111 
    112 ### `paths`
    113 
    114 List. Required.
    115 
    116 Specifies the set of files and directories that are included in this package.
    117 Paths are relative to the build root. Use the empty string (`""`) to refer to
    118 the build root itself.
    119 
    120 Only files included in the package are used to compute a package's `hash`.