{"id":21307022,"url":"https://github.com/perlalien/alien-build","last_synced_at":"2025-07-31T05:04:15.793Z","repository":{"id":37841466,"uuid":"79351718","full_name":"PerlAlien/Alien-Build","owner":"PerlAlien","description":"Build external dependencies for use in CPAN","archived":false,"fork":false,"pushed_at":"2024-06-05T21:07:15.000Z","size":3493,"stargazers_count":16,"open_issues_count":45,"forks_count":25,"subscribers_count":10,"default_branch":"main","last_synced_at":"2024-06-18T11:08:28.724Z","etag":null,"topics":["alien","cpan","perl"],"latest_commit_sha":null,"homepage":"","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PerlAlien.png","metadata":{"files":{"readme":"README.md","changelog":"Changes","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"SUPPORT","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-18T15:09:59.000Z","updated_at":"2024-06-18T11:08:34.676Z","dependencies_parsed_at":"2024-06-18T11:08:34.392Z","dependency_job_id":"b2c77d1c-e62f-4e8f-abe6-c33e31bf28b8","html_url":"https://github.com/PerlAlien/Alien-Build","commit_stats":{"total_commits":2180,"total_committers":30,"mean_commits":72.66666666666667,"dds":"0.20504587155963305","last_synced_commit":"08de82aa9aad72d6d2d6e320ae2b6e19c364bc3c"},"previous_names":[],"tags_count":284,"template":false,"template_full_name":null,"purl":"pkg:github/PerlAlien/Alien-Build","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PerlAlien%2FAlien-Build","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PerlAlien%2FAlien-Build/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PerlAlien%2FAlien-Build/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PerlAlien%2FAlien-Build/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PerlAlien","download_url":"https://codeload.github.com/PerlAlien/Alien-Build/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PerlAlien%2FAlien-Build/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264902614,"owners_count":23681095,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alien","cpan","perl"],"created_at":"2024-11-21T16:29:26.191Z","updated_at":"2025-07-11T21:32:07.128Z","avatar_url":"https://github.com/PerlAlien.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Alien::Build ![static](https://github.com/PerlAlien/Alien-Build/workflows/static/badge.svg) ![linux](https://github.com/PerlAlien/Alien-Build/workflows/linux/badge.svg) ![macos](https://github.com/PerlAlien/Alien-Build/workflows/macos/badge.svg) ![windows](https://github.com/PerlAlien/Alien-Build/workflows/windows/badge.svg) ![msys2-mingw](https://github.com/PerlAlien/Alien-Build/workflows/msys2-mingw/badge.svg)\n\nBuild external dependencies for use in CPAN\n\n# SYNOPSIS\n\n```perl\nmy $build = Alien::Build-\u003eload('./alienfile');\n$build-\u003eload_requires('configure');\n$build-\u003eset_prefix('/usr/local');\n$build-\u003eset_stage('/foo/mystage');  # needs to be absolute\n$build-\u003eload_requires($build-\u003einstall_type);\n$build-\u003edownload;\n$build-\u003ebuild;\n# files are now in /foo/mystage, it is your job (or\n# ExtUtils::MakeMaker, Module::Build, etc) to copy\n# those files into /usr/local\n```\n\n# DESCRIPTION\n\nThis module provides tools for building external (non-CPAN) dependencies\nfor CPAN.  It is mainly designed to be used at install time of a CPAN\nclient, and work closely with [Alien::Base](https://metacpan.org/pod/Alien::Base) which is used at runtime.\n\nThis is the detailed documentation for the [Alien::Build](https://metacpan.org/pod/Alien::Build) class.\nIf you are starting out you probably want to do so from one of these documents:\n\n- [Alien::Build::Manual::Alien](https://metacpan.org/pod/Alien::Build::Manual::Alien)\n\n    A broad overview of `Alien-Build` and its ecosystem.\n\n- [Alien::Build::Manual::AlienUser](https://metacpan.org/pod/Alien::Build::Manual::AlienUser)\n\n    For users of an `Alien::libfoo` that is implemented using [Alien::Base](https://metacpan.org/pod/Alien::Base).\n    (The developer of `Alien::libfoo` _should_ provide the documentation\n    necessary, but if not, this is the place to start).\n\n- [Alien::Build::Manual::AlienAuthor](https://metacpan.org/pod/Alien::Build::Manual::AlienAuthor)\n\n    If you are writing your own [Alien](https://metacpan.org/pod/Alien) based on [Alien::Build](https://metacpan.org/pod/Alien::Build) and [Alien::Base](https://metacpan.org/pod/Alien::Base).\n\n- [Alien::Build::Manual::FAQ](https://metacpan.org/pod/Alien::Build::Manual::FAQ)\n\n    If you have a common question that has already been answered, like\n    \"How do I use [alienfile](https://metacpan.org/pod/alienfile) with some build system\".\n\n- [Alien::Build::Manual::PluginAuthor](https://metacpan.org/pod/Alien::Build::Manual::PluginAuthor)\n\n    This is for the brave souls who want to write plugins that will work with\n    [Alien::Build](https://metacpan.org/pod/Alien::Build) + [alienfile](https://metacpan.org/pod/alienfile).\n\n- [Alien::Build::Manual::Security](https://metacpan.org/pod/Alien::Build::Manual::Security)\n\n    If you are concerned that [Alien](https://metacpan.org/pod/Alien)s might be downloading tarballs off\n    the internet, then this is the place for you.  This will discuss some\n    of the risks of downloading (really any) software off the internet\n    and will give you some tools to remediate these risks.\n\nNote that you will not usually create a [Alien::Build](https://metacpan.org/pod/Alien::Build) instance\ndirectly, but rather be using a thin installer layer, such as\n[Alien::Build::MM](https://metacpan.org/pod/Alien::Build::MM) (for use with [ExtUtils::MakeMaker](https://metacpan.org/pod/ExtUtils::MakeMaker)) or\n[Alien::Build::MB](https://metacpan.org/pod/Alien::Build::MB) (for use with [Module::Build](https://metacpan.org/pod/Module::Build)).  One of the\ngoals of this project is to remain installer agnostic.\n\n# CONSTRUCTORS\n\n## new\n\n```perl\nmy $build = Alien::Build-\u003enew;\n```\n\nThis creates a new empty instance of [Alien::Build](https://metacpan.org/pod/Alien::Build).  Normally you will\nwant to use `load` below to create an instance of [Alien::Build](https://metacpan.org/pod/Alien::Build) from\nan [alienfile](https://metacpan.org/pod/alienfile) recipe.\n\n## load\n\n```perl\nmy $build = Alien::Build-\u003eload($alienfile);\n```\n\nThis creates an [Alien::Build](https://metacpan.org/pod/Alien::Build) instance with the given [alienfile](https://metacpan.org/pod/alienfile)\nrecipe.\n\n## resume\n\n```perl\nmy $build = Alien::Build-\u003eresume($alienfile, $root);\n```\n\nLoad a checkpointed [Alien::Build](https://metacpan.org/pod/Alien::Build) instance.  You will need the original\n[alienfile](https://metacpan.org/pod/alienfile) and the build root (usually `_alien`), and a build that\nhad been properly checkpointed using the `checkpoint` method below.\n\n# PROPERTIES\n\nThere are three main properties for [Alien::Build](https://metacpan.org/pod/Alien::Build).  There are a number\nof properties documented here with a specific usage.  Note that these\nproperties may need to be serialized into something primitive like JSON\nthat does not support: regular expressions, code references of blessed\nobjects.\n\nIf you are writing a plugin ([Alien::Build::Plugin](https://metacpan.org/pod/Alien::Build::Plugin)) you should use a\nprefix like \"plugin\\__name_\" (where _name_ is the name of your plugin)\nso that it does not interfere with other plugin or future versions of\n[Alien::Build](https://metacpan.org/pod/Alien::Build).  For example, if you were writing\n`Alien::Build::Plugin::Fetch::NewProtocol`, please use the prefix\n`plugin_fetch_newprotocol`:\n\n```perl\nsub init\n{\n  my($self, $meta) = @_;\n\n  $meta-\u003eprop( plugin_fetch_newprotocol_foo =\u003e 'some value' );\n\n  $meta-\u003eregister_hook(\n    some_hook =\u003e sub {\n      my($build) = @_;\n      $build-\u003einstall_prop-\u003e{plugin_fetch_newprotocol_bar} = 'some other value';\n      $build-\u003eruntime_prop-\u003e{plugin_fetch_newprotocol_baz} = 'and another value';\n    }\n  );\n}\n```\n\nIf you are writing a [alienfile](https://metacpan.org/pod/alienfile) recipe please use the prefix `my_`:\n\n```perl\nuse alienfile;\n\nmeta_prop-\u003e{my_foo} = 'some value';\n\nprobe sub {\n  my($build) = @_;\n  $build-\u003einstall_prop-\u003e{my_bar} = 'some other value';\n  $build-\u003einstall_prop-\u003e{my_baz} = 'and another value';\n};\n```\n\nAny property may be used from a command:\n\n```perl\nprobe [ 'some command %{.meta.plugin_fetch_newprotocol_foo}' ];\nprobe [ 'some command %{.install.plugin_fetch_newprotocol_bar}' ];\nprobe [ 'some command %{.runtime.plugin_fetch_newprotocol_baz}' ];\nprobe [ 'some command %{.meta.my_foo}' ];\nprobe [ 'some command %{.install.my_bar}' ];\nprobe [ 'some command %{.runtime.my_baz}' ];\n```\n\n## meta\\_prop\n\n```perl\nmy $href = $build-\u003emeta_prop;\nmy $href = Alien::Build-\u003emeta_prop;\n```\n\nMeta properties have to do with the recipe itself, and not any particular\ninstance that probes or builds that recipe.  Meta properties can be changed\nfrom within an [alienfile](https://metacpan.org/pod/alienfile) using the `meta_prop` directive, or from\na plugin from its `init` method (though should NOT be modified from any\nhooks registered within that `init` method).  This is not strictly enforced,\nbut if you do not follow this rule your recipe will likely be broken.\n\n- arch\n\n    This is a hint to an installer like [Alien::Build::MM](https://metacpan.org/pod/Alien::Build::MM) or [Alien::Build::MB](https://metacpan.org/pod/Alien::Build::MB),\n    that the library or tool contains architecture dependent files and so should\n    be stored in an architecture dependent location.  If not specified by your\n    [alienfile](https://metacpan.org/pod/alienfile) then it will be set to true.\n\n- check\\_digest\n\n    True if cryptographic digest should be checked when files are fetched\n    or downloaded.  This is set by\n    [Digest negotiator plugin](https://metacpan.org/pod/Alien::Build::Plugin::Digest::Negotiate).\n\n- destdir\n\n    Some plugins ([Alien::Build::Plugin::Build::Autoconf](https://metacpan.org/pod/Alien::Build::Plugin::Build::Autoconf) for example) support\n    installing via `DESTDIR`.  They will set this property to true if they\n    plan on doing such an install.  This helps [Alien::Build](https://metacpan.org/pod/Alien::Build) find the staged\n    install files and how to locate them.\n\n    If available, `DESTDIR` is used to stage install files in a sub directory before\n    copying the files into `blib`.  This is generally preferred method\n    if available.\n\n- destdir\\_filter\n\n    Regular expression for the files that should be copied from the `DESTDIR`\n    into the stage directory.  If not defined, then all files will be copied.\n\n- destdir\\_ffi\\_filter\n\n    Same as `destdir_filter` except applies to `build_ffi` instead of `build`.\n\n- digest\n\n    This properties contains the cryptographic digests (if any) that should\n    be used when verifying any fetched and downloaded files.  It is a hash\n    reference where the key is the filename and the value is an array\n    reference containing a pair of values, the first being the algorithm\n    ('SHA256' is recommended) and the second is the actual digest.  The\n    special filename `*` may be specified to indicate that any downloaded\n    file should match that digest.  If there are both real filenames and\n    the `*` placeholder, the real filenames will be used for filenames\n    that match and any other files will use the placeholder.  Example:\n\n    ```perl\n    $build-\u003emeta_prop-\u003e{digest} = {\n      'foo-1.00.tar.gz' =\u003e [ SHA256 =\u003e '9feac593aa49a44eb837de52513a57736457f1ea70078346c60f0bfc5f24f2c1' ],\n      'foo-1.01.tar.gz' =\u003e [ SHA256 =\u003e '6bbde6a7f10ae5924cf74afc26ff5b7bc4b4f9dfd85c6b534c51bd254697b9e7' ],\n      '*'               =\u003e [ SHA256 =\u003e '33a20aae3df6ecfbe812b48082926d55391be4a57d858d35753ab1334b9fddb3' ],\n    };\n    ```\n\n    Cryptographic signatures will only be checked\n    if the [check\\_digest meta property](#check_digest) is set and if the\n    [Digest negotiator plugin](https://metacpan.org/pod/Alien::Build::Plugin::Digest::Negotiate) is loaded.\n    (The Digest negotiator can be used directly, but is also loaded automatically\n    if you use the [digest directive](https://metacpan.org/pod/alienfile#digest) is used by the [alienfile](https://metacpan.org/pod/alienfile)).\n\n- env\n\n    Environment variables to override during the build stage.\n\n- env\\_interpolate\n\n    Environment variable values will be interpolated with helpers.  Example:\n\n    ```\n    meta-\u003eprop-\u003e{env_interpolate} = 1;\n    meta-\u003eprop-\u003e{env}-\u003e{PERL} = '%{perl}';\n    ```\n\n- local\\_source\n\n    Set to true if source code package is available locally.  (that is not fetched\n    over the internet).  This is computed by default based on the `start_url`\n    property.  Can be set by an [alienfile](https://metacpan.org/pod/alienfile) or plugin.\n\n- platform\n\n    Hash reference.  Contains information about the platform beyond just `$^O`.\n\n    - platform.compiler\\_type\n\n        Refers to the type of flags that the compiler accepts.  May be expanded in the\n        future, but for now, will be one of:\n\n        - microsoft\n\n            On Windows when using Microsoft Visual C++\n\n        - unix\n\n            Virtually everything else, including gcc on windows.\n\n        The main difference is that with Visual C++ `-LIBPATH` should be used instead\n        of `-L`, and static libraries should have the `.LIB` suffix instead of `.a`.\n\n    - platform.system\\_type\n\n        `$^O` is frequently good enough to make platform specific logic in your\n        [alienfile](https://metacpan.org/pod/alienfile), this handles the case when $^O can cover platforms that provide\n        multiple environments that Perl might run under.  The main example is windows,\n        but others may be added in the future.\n\n        - unix\n        - vms\n        - windows-activestate\n        - windows-microsoft\n        - windows-mingw\n        - windows-strawberry\n        - windows-unknown\n\n        Note that `cygwin` and `msys` are considered `unix` even though they run\n        on windows!\n\n    - platform.cpu.count\n\n        Contains a non-negative integer of available (possibly virtual) CPUs on the\n        system. This can be used by build plugins to build in parallel. The environment\n        variable `ALIEN_CPU_COUNT` can be set to override the CPU count.\n\n    - platform.cpu.arch.name\n\n        Contains a normalized name for the architecture of the current Perl. This can\n        be used by fetch plugins to determine which binary packages to download.\n        The value may be one of the following, but this list will be expanded as\n        needed.\n\n        - `armel`\n\n            32-bit ARM soft-float\n\n        - `armhf`\n\n            32-bit ARM hard-float\n\n        - `aarch64`\n\n            64-bit ARM\n\n        - `ppc`\n\n            32-bit PowerPC (big-endian)\n\n        - `ppc64`\n\n            64-bit PowerPC (big-endian)\n\n        - `x86`\n\n            32-bit Intel (i386, i486, i686)\n\n        - `x86_64`\n\n            64-bit Intel (AMD64)\n\n        - `unknown`\n\n            Unable to detect architecture. Please report this if needed.\n\n- out\\_of\\_source\n\n    Build in a different directory from the where the source code is stored.\n    In autoconf this is referred to as a \"VPATH\" build.  Everyone else calls this\n    an \"out-of-source\" build.  When this property is true, instead of extracting\n    to the source build root, the downloaded source will be extracted to an source\n    extraction directory and the source build root will be empty.  You can use the\n    `extract` install property to get the location of the extracted source.\n\n- network\n\n    True if a network fetch is available.  This should NOT be set by an [alienfile](https://metacpan.org/pod/alienfile)\n    or plugin.  This is computed based on the `ALIEN_INSTALL_NETWORK` environment\n    variables.\n\n- start\\_url\n\n    The default or start URL used by fetch plugins.\n\n## install\\_prop\n\n```perl\nmy $href = $build-\u003einstall_prop;\n```\n\nInstall properties are used during the install phase (either\nunder `share` or `system` install).  They are remembered for\nthe entire install phase, but not kept around during the runtime\nphase.  Thus they cannot be accessed from your [Alien::Base](https://metacpan.org/pod/Alien::Base)\nbased module.\n\n- autoconf\\_prefix\n\n    The prefix as understood by autoconf.  This is only different on Windows\n    Where MSYS is used and paths like `C:/foo` are  represented as `/C/foo`\n    which are understood by the MSYS tools, but not by Perl.  You should\n    only use this if you are using [Alien::Build::Plugin::Build::Autoconf](https://metacpan.org/pod/Alien::Build::Plugin::Build::Autoconf) in\n    your [alienfile](https://metacpan.org/pod/alienfile).  This is set during before the\n    [build hook](https://metacpan.org/pod/Alien::Build::Manual::PluginAuthor#build-hook) is run.\n\n- download\n\n    The location of the downloaded archive (tar.gz, or similar) or directory.\n    This will be undefined until the archive is actually downloaded.\n\n- download\\_detail\n\n    This property contains optional details about a downloaded file.  This\n    property is populated by [Alien::Build](https://metacpan.org/pod/Alien::Build) core.  This property is a\n    hash reference.  The key is the path to the file that has been downloaded\n    and the value is a hash reference with additional detail.  All fields\n    are optional.\n\n    - download\\_detail.digest\n\n        This, if available, with the cryptographic signature that was successfully\n        matched against the downloaded file.  It is an array reference with a\n        pair of values, the algorithm (typically something like `SHA256`) and\n        the digest.\n\n    - download\\_detail.protocol\n\n        This, if available, will be the URL protocol used to fetch the downloaded\n        file.\n\n- env\n\n    Environment variables to override during the build stage.  Plugins are\n    free to set additional overrides using this hash.\n\n- extract\n\n    The location of the last source extraction.  For a \"out-of-source\" build\n    (see the `out_of_source` meta property above), this will only be set once.\n    For other types of builds, the source code may be extracted multiple times,\n    and thus this property may change.\n\n- old\n\n    \\[deprecated\\]\n\n    Hash containing information on a previously installed Alien of the same\n    name, if available.  This may be useful in cases where you want to\n    reuse the previous install if it is still sufficient.\n\n    - old.prefix\n\n        \\[deprecated\\]\n\n        The prefix for the previous install.  Versions prior to 1.42 unfortunately\n        had this in typo form of `preifx`.\n\n    - old.runtime\n\n        \\[deprecated\\]\n\n        The runtime properties from the previous install.\n\n- patch\n\n    Directory with patches, if available.  This will be `undef` if there\n    are no patches.  When initially installing an alien this will usually\n    be a sibling of the `alienfile`, a directory called `patch`.  Once\n    installed this will be in the share directory called `_alien/patch`.\n    The former is useful for rebuilding an alienized package using\n    [af](https://metacpan.org/pod/af).\n\n- prefix\n\n    The install time prefix.  Under a `destdir` install this is the\n    same as the runtime or final install location.  Under a non-`destdir`\n    install this is the `stage` directory (usually the appropriate\n    share directory under `blib`).\n\n- root\n\n    The build root directory.  This will be an absolute path.  It is the\n    absolute form of `./_alien` by default.\n\n- stage\n\n    The stage directory where files will be copied.  This is usually the\n    root of the blib share directory.\n\n- system\\_probe\\_class\n\n    After the probe step this property may contain the plugin class that\n    performed the system probe.  It shouldn't be filled in directly by\n    the plugin (instead if should use the hook property `probe_class`,\n    see below).  This is optional, and not all probe plugins will provide\n    this information.\n\n- system\\_probe\\_instance\\_id\n\n    After the probe step this property may contain the plugin instance id that\n    performed the system probe.  It shouldn't be filled in directly by\n    the plugin (instead if should use the hook property `probe_instance_id`,\n    see below).  This is optional, and not all probe plugins will provide\n    this information.\n\n## plugin\\_instance\\_prop\n\n```perl\nmy $href = $build-\u003eplugin_instance_prop($plugin);\n```\n\nThis returns the private plugin instance properties for a given plugin.\nThis method should usually only be called internally by plugins themselves\nto keep track of internal state.  Because the content can be used arbitrarily\nby the owning plugin because it is private to the plugin, and thus is not\npart of the [Alien::Build](https://metacpan.org/pod/Alien::Build) spec.\n\n## runtime\\_prop\n\n```perl\nmy $href = $build-\u003eruntime_prop;\n```\n\nRuntime properties are used during the install and runtime phases\n(either under `share` or `system` install).  This should include\nanything that you will need to know to use the library or tool\nduring runtime, and shouldn't include anything that is no longer\nrelevant once the install process is complete.\n\n- alien\\_build\\_version\n\n    The version of [Alien::Build](https://metacpan.org/pod/Alien::Build) used to install the library or tool.\n\n- alt\n\n    Alternate configurations.  If the alienized package has multiple\n    libraries this could be used to store the different compiler or\n    linker flags for each library.  Typically this will be set by a\n    plugin in the gather stage (for either share or system installs).\n\n- cflags\n\n    The compiler flags.  This is typically set by a plugin in the\n    gather stage (for either share or system installs).\n\n- cflags\\_static\n\n    The static compiler flags.  This is typically set by a plugin in the\n    gather stage (for either share or system installs).\n\n- command\n\n    The command name for tools where the name my differ from platform to\n    platform.  For example, the GNU version of make is usually `make` in\n    Linux and `gmake` on FreeBSD.  This is typically set by a plugin in the\n    gather stage (for either share or system installs).\n\n- ffi\\_name\n\n    The name DLL or shared object \"name\" to use when searching for dynamic\n    libraries at runtime.  This is passed into [FFI::CheckLib](https://metacpan.org/pod/FFI::CheckLib), so if\n    your library is something like `libarchive.so` or `archive.dll` you\n    would set this to `archive`.  This may be a string or an array of\n    strings.  This is typically set by a plugin in the gather stage\n    (for either share or system installs).\n\n- ffi\\_checklib\n\n    This property contains two sub properties:\n\n    - ffi\\_checklib.share\n\n        ```\n        $build-\u003eruntime_prop-\u003e{ffi_checklib}-\u003e{share} = [ ... ];\n        ```\n\n        Array of additional [FFI::CheckLib](https://metacpan.org/pod/FFI::CheckLib) flags to pass in to `find_lib`\n        for a `share` install.\n\n    - ffi\\_checklib.system\n\n        Array of additional [FFI::CheckLib](https://metacpan.org/pod/FFI::CheckLib) flags to pass in to `find_lib`\n        for a `system` install.\n\n        Among other things, useful for specifying the `try_linker_script`\n        flag:\n\n        ```perl\n        $build-\u003eruntime_prop-\u003e{ffi_checklib}-\u003e{system} = [ try_linker_script =\u003e 1 ];\n        ```\n\n    This is typically set by a plugin in the gather stage\n    (for either share or system installs).\n\n- inline\\_auto\\_include\n\n    \\[version 2.53\\]\n\n    This property is an array reference of C code that will be passed into\n    [Inline::C](https://metacpan.org/pod/Inline::C) to make sure that appropriate headers are automatically\n    included.  See [\"auto\\_include\" in Inline::C](https://metacpan.org/pod/Inline::C#auto_include) for details.\n\n- install\\_type\n\n    The install type.  This is set by AB core after the\n    [probe hook](https://metacpan.org/pod/Alien::Build::Manual::PluginAuthor#probe-hook) is\n    executed.  Is one of:\n\n    - system\n\n        For when the library or tool is provided by the operating system, can be\n        detected by [Alien::Build](https://metacpan.org/pod/Alien::Build), and is considered satisfactory by the\n        `alienfile` recipe.\n\n    - share\n\n        For when a system install is not possible, the library source will be\n        downloaded from the internet or retrieved in another appropriate fashion\n        and built.\n\n- libs\n\n    The library flags.  This is typically set by a plugin in the\n    gather stage (for either share or system installs).\n\n- libs\\_static\n\n    The static library flags.  This is typically set by a plugin in the\n    gather stage (for either share or system installs).\n\n- perl\\_module\\_version\n\n    The version of the Perl module used to install the alien (if available).\n    For example if [Alien::curl](https://metacpan.org/pod/Alien::curl) is installing `libcurl` this would be the\n    version of [Alien::curl](https://metacpan.org/pod/Alien::curl) used during the install step.\n\n- prefix\n\n    The final install root.  This is usually they share directory.\n\n- version\n\n    The version of the library or tool.  This is typically set by a plugin in the\n    gather stage (for either share or system installs).\n\n## hook\\_prop\n\n```perl\nmy $href = $build-\u003ehook_prop;\n```\n\nHook properties are for the currently running (if any) hook.  They are\nused only during the execution of each hook and are discarded after.\nIf no hook is currently running then `hook_prop` will return `undef`.\n\n- name\n\n    The name of the currently running hook.\n\n- version (probe)\n\n    Probe and PkgConfig plugins _may_ set this property indicating the\n    version of the alienized package.  Not all plugins and configurations\n    may be able to provide this.\n\n- probe\\_class (probe)\n\n    Probe and PkgConfig plugins _may_ set this property indicating the\n    plugin class that made the probe.  If the probe results in a system\n    install this will be propagated to `system_probe_class` for later\n    use.\n\n- probe\\_instance\\_id (probe)\n\n    Probe and PkgConfig plugins _may_ set this property indicating the\n    plugin instance id that made the probe.  If the probe results in a\n    system install this will be propagated to `system_probe_instance_id`\n    for later use.\n\n# METHODS\n\n## checkpoint\n\n```\n$build-\u003echeckpoint;\n```\n\nSave any install or runtime properties so that they can be reloaded on\na subsequent run in a separate process.  This is useful if your build\nneeds to be done in multiple stages from a `Makefile`, such as with\n[ExtUtils::MakeMaker](https://metacpan.org/pod/ExtUtils::MakeMaker).  Once checkpointed you can use the `resume`\nconstructor (documented above) to resume the probe/build/install\\]\nprocess.\n\n## root\n\n```perl\nmy $dir = $build-\u003eroot;\n```\n\nThis is just a shortcut for:\n\n```perl\nmy $root = $build-\u003einstall_prop-\u003e{root};\n```\n\nExcept that it will be created if it does not already exist.\n\n## install\\_type\n\n```perl\nmy $type = $build-\u003einstall_type;\n```\n\nThis will return the install type.  (See the like named install property\nabove for details).  This method will call `probe` if it has not already\nbeen called.\n\n## is\\_system\\_install\n\n```perl\nmy $boolean = $build-\u003eis_system_install;\n```\n\nReturns true if the alien is a system install type.  \n\n## is\\_share\\_install\n\n```perl\nmy $boolean = $build-\u003eis_share_install;\n```\n\nReturns true if the alien is a share install type.\n\n## download\\_rule\n\n```perl\nmy $rule = $build-\u003edownload_rule;\n```\n\nThis returns install rule as a string.  This is determined by the environment\nand should be one of:\n\n- `warn`\n\n    Warn only if fetching via non secure source (secure sources include `https`,\n    and bundled files, may include other encrypted protocols in the future).\n\n- `digest`\n\n    Require that any downloaded source package have a cryptographic signature in\n    the [alienfile](https://metacpan.org/pod/alienfile) and that signature matches what was downloaded.\n\n- `encrypt`\n\n    Require that any downloaded source package is fetched via secure source.\n\n- `digest_or_encrypt`\n\n    Require that any downloaded source package is **either** fetched via a secure source\n    **or** has a cryptographic signature in the [alienfile](https://metacpan.org/pod/alienfile) and that signature matches\n    what was downloaded.\n\n- `digest_and_encrypt`\n\n    Require that any downloaded source package is **both** fetched via a secure source\n    **and** has a cryptographic signature in the [alienfile](https://metacpan.org/pod/alienfile) and that signature matches\n    what was downloaded.\n\nThe current default is `warn`, but in the near future this will be upgraded to\n`digest_or_encrypt`.\n\n## set\\_prefix\n\n```\n$build-\u003eset_prefix($prefix);\n```\n\nSet the final (unstaged) prefix.  This is normally only called by [Alien::Build::MM](https://metacpan.org/pod/Alien::Build::MM)\nand similar modules.  It is not intended for use from plugins or from an [alienfile](https://metacpan.org/pod/alienfile).\n\n## set\\_stage\n\n```\n$build-\u003eset_stage($dir);\n```\n\nSets the stage directory.  This is normally only called by [Alien::Build::MM](https://metacpan.org/pod/Alien::Build::MM)\nand similar modules.  It is not intended for use from plugins or from an [alienfile](https://metacpan.org/pod/alienfile).\n\n## requires\n\n```perl\nmy $hash = $build-\u003erequires($phase);\n```\n\nReturns a hash reference of the modules required for the given phase.  Phases\ninclude:\n\n- configure\n\n    These modules must already be available when the [alienfile](https://metacpan.org/pod/alienfile) is read.\n\n- any\n\n    These modules are used during either a `system` or `share` install.\n\n- share\n\n    These modules are used during the build phase of a `share` install.\n\n- system\n\n    These modules are used during the build phase of a `system` install.\n\n## load\\_requires\n\n```\n$build-\u003eload_requires($phase);\n```\n\nThis loads the appropriate modules for the given phase (see `requires` above\nfor a description of the phases).\n\n## probe\n\n```perl\nmy $install_type = $build-\u003eprobe;\n```\n\nAttempts to determine if the operating system has the library or\ntool already installed.  If so, then the string `system` will\nbe returned and a system install will be performed.  If not,\nthen the string `share` will be installed and the tool or\nlibrary will be downloaded and built from source.\n\nIf the environment variable `ALIEN_INSTALL_TYPE` is set, then that\nwill force a specific type of install.  If the detection logic\ncannot accommodate the install type requested then it will fail with\nan exception.\n\n## download\n\n```\n$build-\u003edownload;\n```\n\nDownload the source, usually as a tarball, usually from the internet.\n\nUnder a `system` install this does not do anything.\n\n## fetch\n\n```perl\nmy $res = $build-\u003efetch;\nmy $res = $build-\u003efetch($url, %options);\n```\n\nFetch a resource using the fetch hook.  Returns the same hash structure\ndescribed below in the\n[fetch hook](https://metacpan.org/pod/Alien::Build::Manual::PluginAuthor#fetch-hook) documentation.\n\n\\[version 2.39\\]\n\nAs of [Alien::Build](https://metacpan.org/pod/Alien::Build) 2.39, these options are supported:\n\n- http\\_headers\n\n    ```perl\n    my $res = $build-\u003efetch($url, http_headers =\u003e [ $key1 =\u003e $value1, $key2 =\u003e $value 2, ... ]);\n    ```\n\n    Set the HTTP request headers on all outgoing HTTP requests.  Note that not all\n    protocols or fetch plugins support setting request headers, but the ones that\n    do not _should_ issue a warning if you try to set request headers and they\n    are not supported.\n\n## check\\_digest\n\n\\[experimental\\]\n\n```perl\nmy $bool = $build-\u003echeck_digest($path);\n```\n\nChecks any cryptographic signatures for the given file.  The\nfile is specified by `$path` which may be one of:\n\n- string\n\n    Containing the path to the file to be checked.\n\n- [Path::Tiny](https://metacpan.org/pod/Path::Tiny)\n\n    Containing the path to the file to be checked.\n\n- `HASH`\n\n    A Hash reference containing information about a file.  See\n    the [fetch hook](https://metacpan.org/pod/Alien::Build::Manual::PluginAuthor#fetch-hook) for details\n    on the format.\n\nReturns true if the cryptographic signature matches, false if cryptographic\nsignatures are disabled.  Will throw an exception if the signature does not\nmatch, or if no plugin provides the correct algorithm for checking the\nsignature.\n\n## decode\n\n```perl\nmy $decoded_res = $build-\u003edecode($res);\n```\n\nDecode the HTML or file listing returned by `fetch`.  Returns the same\nhash structure described below in the\n[decode hook](https://metacpan.org/pod/Alien::Build::Manual::PluginAuthor#decode-hook) documentation.\n\n## prefer\n\n```perl\nmy $sorted_res = $build-\u003eprefer($res);\n```\n\nFilter and sort candidates.  The preferred candidate will be returned first in the list.\nThe worst candidate will be returned last.  Returns the same hash structure described\nbelow in the\n[prefer hook](https://metacpan.org/pod/Alien::Build::Manual::PluginAuthor#prefer-hook) documentation.\n\n## extract\n\n```perl\nmy $dir = $build-\u003eextract;\nmy $dir = $build-\u003eextract($archive);\n```\n\nExtracts the given archive into a fresh directory.  This is normally called internally\nto [Alien::Build](https://metacpan.org/pod/Alien::Build), and for normal usage is not needed from a plugin or [alienfile](https://metacpan.org/pod/alienfile).\n\n## build\n\n```\n$build-\u003ebuild;\n```\n\nRun the build step.  It is expected that `probe` and `download`\nhave already been performed.  What it actually does depends on the\ntype of install:\n\n- share\n\n    The source is extracted, and built as determined by the [alienfile](https://metacpan.org/pod/alienfile)\n    recipe.  If there is a `gather_share` that will be executed last.\n\n- system\n\n    The\n    [gather\\_system hook](https://metacpan.org/pod/Alien::Build::Manual::PluginAuthor#gather_system-hook)\n    will be executed.\n\n## test\n\n```\n$build-\u003etest;\n```\n\nRun the test phase\n\n## clean\\_install\n\n```\n$build-\u003eclean_install\n```\n\nClean files from the final install location.  The default implementation removes all\nfiles recursively except for the `_alien` directory.  This is helpful when you have\nan old install with files that may break the new build.\n\nFor a non-share install this doesn't do anything.\n\n## system\n\n```\n$build-\u003esystem($command);\n$build-\u003esystem($command, @args);\n```\n\nInterpolates the command and arguments and run the results using\nthe Perl `system` command.\n\n## log\n\n```\n$build-\u003elog($message);\n```\n\nSend a message to the log.  By default this prints to `STDOUT`.\n\n## meta\n\n```perl\nmy $meta = Alien::Build-\u003emeta;\nmy $meta = $build-\u003emeta;\n```\n\nReturns the meta object for your [Alien::Build](https://metacpan.org/pod/Alien::Build) class or instance.  The\nmeta object is a way to manipulate the recipe, and so any changes to the\nmeta object should be made before the `probe`, `download` or `build` steps.\n\n# META METHODS\n\n## prop\n\n```perl\nmy $href = $build-\u003emeta-\u003eprop;\n```\n\nMeta properties.  This is the same as calling `meta_prop` on\nthe class or [Alien::Build](https://metacpan.org/pod/Alien::Build) instance.\n\n## add\\_requires\n\n```perl\nAlien::Build-\u003emeta-\u003eadd_requires($phase, $module =\u003e $version, ...);\n```\n\nAdd the requirement to the given phase.  Phase should be one of:\n\n- configure\n- any\n- share\n- system\n\n## interpolator\n\n```perl\nmy $interpolator = $build-\u003emeta-\u003einterpolator;\nmy $interpolator = Alien::Build-\u003einterpolator;\n```\n\nReturns the [Alien::Build::Interpolate](https://metacpan.org/pod/Alien::Build::Interpolate) instance for the [Alien::Build](https://metacpan.org/pod/Alien::Build) class.\n\n## has\\_hook\n\n```perl\nmy $bool = $build-\u003emeta-\u003ehas_hook($name);\nmy $bool = Alien::Build-\u003ehas_hook($name);\n```\n\nReturns if there is a usable hook registered with the given name.\n\n## register\\_hook\n\n```\n$build-\u003emeta-\u003eregister_hook($name, $instructions);\nAlien::Build-\u003emeta-\u003eregister_hook($name, $instructions);\n```\n\nRegister a hook with the given name.  `$instruction` should be either\na code reference, or a command sequence, which is an array reference.\n\n## default\\_hook\n\n```\n$build-\u003emeta-\u003edefault_hook($name, $instructions);\nAlien::Build-\u003emeta-\u003edefault_hook($name, $instructions);\n```\n\nRegister a default hook, which will be used if the [alienfile](https://metacpan.org/pod/alienfile) does not\nregister its own hook with that name.\n\n## around\\_hook\n\n```\n$build-\u003emeta-\u003earound_hook($hook_name, $code);\nAlien::Build-\u003emeta-\u003earound_hook($hook_name, $code);\n```\n\nWrap the given hook with a code reference.  This is similar to a [Moose](https://metacpan.org/pod/Moose)\nmethod modifier, except that it wraps around the given hook instead of\na method.  For example, this will add a probe system requirement:\n\n```perl\n$build-\u003emeta-\u003earound_hook(\n  probe =\u003e sub {\n    my $orig = shift;\n    my $build = shift;\n    my $type = $orig-\u003e($build, @_);\n    return $type unless $type eq 'system';\n    # also require a configuration file\n    if(-f '/etc/foo.conf')\n    {\n      return 'system';\n    }\n    else\n    {\n      return 'share';\n    }\n  },\n);\n```\n\n## after\\_hook\n\n```perl\n$build-\u003emeta-\u003eafter_hook($hook_name, sub {\n  my(@args) = @_;\n  ...\n});\n```\n\nExecute the given code reference after the hook.  The original\narguments are passed into the code reference.\n\n## before\\_hook\n\n```perl\n$build-\u003emeta-\u003ebefore_hook($hook_name, sub {\n  my(@args) = @_;\n  ...\n});\n```\n\nExecute the given code reference before the hook.  The original\narguments are passed into the code reference.\n\n## apply\\_plugin\n\n```\nAlien::Build-\u003emeta-\u003eapply_plugin($name);\nAlien::Build-\u003emeta-\u003eapply_plugin($name, @args);\n```\n\nApply the given plugin with the given arguments.\n\n# ENVIRONMENT\n\n[Alien::Build](https://metacpan.org/pod/Alien::Build) responds to these environment variables:\n\n- ALIEN\\_BUILD\\_LOG\n\n    The default log class used.  See [Alien::Build::Log](https://metacpan.org/pod/Alien::Build::Log) and [Alien::Build::Log::Default](https://metacpan.org/pod/Alien::Build::Log::Default).\n\n- ALIEN\\_BUILD\\_PKG\\_CONFIG\n\n    Override the logic in [Alien::Build::Plugin::PkgConfig::Negotiate](https://metacpan.org/pod/Alien::Build::Plugin::PkgConfig::Negotiate) which\n    chooses the best `pkg-config` plugin.\n\n- ALIEN\\_BUILD\\_POSTLOAD\n\n    semicolon separated list of plugins to automatically load after parsing\n    your [alienfile](https://metacpan.org/pod/alienfile).\n\n- ALIEN\\_BUILD\\_PRELOAD\n\n    semicolon separated list of plugins to automatically load before parsing\n    your [alienfile](https://metacpan.org/pod/alienfile).\n\n- ALIEN\\_BUILD\\_RC\n\n    Perl source file which can override some global defaults for [Alien::Build](https://metacpan.org/pod/Alien::Build),\n    by, for example, setting preload and postload plugins.\n\n- ALIEN\\_DOWNLOAD\\_RULE\n\n    This value determines the rules by which types of downloads are allowed.  The legal\n    values listed under [\"download\\_rule\"](#download_rule), plus `default` which will be the default for\n    the current version of [Alien::Build](https://metacpan.org/pod/Alien::Build).  For this version that default is `warn`.\n\n- ALIEN\\_INSTALL\\_NETWORK\n\n    If set to true (the default), then network fetch will be allowed.  If set to\n    false, then network fetch will not be allowed.\n\n    What constitutes a local vs. network fetch is determined based on the `start_url`\n    and `local_source` meta properties.  An [alienfile](https://metacpan.org/pod/alienfile) or plugin `could` override\n    this detection (possibly inappropriately), so this variable is not a substitute\n    for properly auditing of Perl modules for environments that require that.\n\n- ALIEN\\_INSTALL\\_TYPE\n\n    If set to `share` or `system`, it will override the system detection logic.\n    If set to `default`, it will use the default setting for the [alienfile](https://metacpan.org/pod/alienfile).\n    The behavior of other values is undefined.\n\n    Although the recommended way for a consumer to use an [Alien::Base](https://metacpan.org/pod/Alien::Base) based [Alien](https://metacpan.org/pod/Alien)\n    is to declare it as a static configure and build-time dependency, some consumers\n    may prefer to fallback on using an [Alien](https://metacpan.org/pod/Alien) only when the consumer itself cannot\n    detect the necessary package. In some cases the consumer may want the user to opt-in\n    to using an [Alien](https://metacpan.org/pod/Alien) before requiring it.\n\n    To keep the interface consistent among Aliens, the consumer of the fallback opt-in\n    [Alien](https://metacpan.org/pod/Alien) may fallback on the [Alien](https://metacpan.org/pod/Alien) if the environment variable `ALIEN_INSTALL_TYPE`\n    is set to any value. The rationale is that by setting this environment variable the\n    user is aware that [Alien](https://metacpan.org/pod/Alien) modules may be installed and have indicated consent.\n    The actual implementation of this, by its nature would have to be in the consuming\n    CPAN module.\n\n- DESTDIR\n\n    This environment variable will be manipulated during a destdir install.\n\n- PKG\\_CONFIG\n\n    This environment variable can be used to override the program name for `pkg-config`\n    when using the command line plugin: [Alien::Build::Plugin::PkgConfig::CommandLine](https://metacpan.org/pod/Alien::Build::Plugin::PkgConfig::CommandLine).\n\n- ftp\\_proxy, all\\_proxy\n\n    If these environment variables are set, it may influence the Download negotiation\n    plugin [Alien::Build::Plugin::Download::Negotiate](https://metacpan.org/pod/Alien::Build::Plugin::Download::Negotiate).  Other proxy variables may\n    be used by some Fetch plugins, if they support it.\n\n# SUPPORT\n\nThe intent of the `Alien-Build` team is to support the same versions of\nPerl that are supported by the Perl toolchain.  As of this writing that\nmeans 5.16 and better.\n\nPlease feel encouraged to report issues that you encounter to the\nproject GitHub Issue tracker:\n\n- [https://github.com/PerlAlien/Alien-Build/issues](https://github.com/PerlAlien/Alien-Build/issues)\n\nBetter if you can fix the issue yourself, please feel encouraged to open\npull-request on the project GitHub:\n\n- [https://github.com/PerlAlien/Alien-Build/pulls](https://github.com/PerlAlien/Alien-Build/pulls)\n\nIf you are confounded and have questions, join us on the `#native`\nchannel on irc.perl.org.  The `Alien-Build` developers frequent this\nchannel and can probably help point you in the right direction.  If you\ndon't have an IRC client handy, you can use this web interface:\n\n- [https://chat.mibbit.com/?channel=%23native\u0026server=irc.perl.org](https://chat.mibbit.com/?channel=%23native\u0026server=irc.perl.org)\n\n# SEE ALSO\n\n[Alien::Build::Manual::AlienAuthor](https://metacpan.org/pod/Alien::Build::Manual::AlienAuthor),\n[Alien::Build::Manual::AlienUser](https://metacpan.org/pod/Alien::Build::Manual::AlienUser),\n[Alien::Build::Manual::Contributing](https://metacpan.org/pod/Alien::Build::Manual::Contributing),\n[Alien::Build::Manual::FAQ](https://metacpan.org/pod/Alien::Build::Manual::FAQ),\n[Alien::Build::Manual::PluginAuthor](https://metacpan.org/pod/Alien::Build::Manual::PluginAuthor)\n\n[alienfile](https://metacpan.org/pod/alienfile), [Alien::Build::MM](https://metacpan.org/pod/Alien::Build::MM), [Alien::Build::Plugin](https://metacpan.org/pod/Alien::Build::Plugin), [Alien::Base](https://metacpan.org/pod/Alien::Base), [Alien](https://metacpan.org/pod/Alien)\n\n# THANKS\n\n[Alien::Base](https://metacpan.org/pod/Alien::Base) was originally written by Joel Berger, the rest of this project would\nnot have been possible without him getting the project started.  Thanks to his support\nI have been able to augment the original [Alien::Base](https://metacpan.org/pod/Alien::Base) system with a reliable set\nof tools ([Alien::Build](https://metacpan.org/pod/Alien::Build), [alienfile](https://metacpan.org/pod/alienfile), [Test::Alien](https://metacpan.org/pod/Test::Alien)), which make up this toolset.\n\nThe original [Alien::Base](https://metacpan.org/pod/Alien::Base) is still copyright (c) 2012-2020 Joel Berger.  It has\nthe same license as the rest of the Alien::Build and related tools distributed as\n`Alien-Build`.  Joel Berger thanked a number of people who helped in in the development\nof [Alien::Base](https://metacpan.org/pod/Alien::Base), in the documentation for that module.\n\nI would also like to acknowledge the other members of the PerlAlien github\norganization, Zakariyya Mughal (sivoais, ZMUGHAL) and mohawk (ETJ).  Also important\nin the early development of [Alien::Build](https://metacpan.org/pod/Alien::Build) were the early adopters Chase Whitener\n(genio, CAPOEIRAB, author of [Alien::libuv](https://metacpan.org/pod/Alien::libuv)), William N. Braswell, Jr (willthechill,\nWBRASWELL, author of [Alien::JPCRE2](https://metacpan.org/pod/Alien::JPCRE2) and [Alien::PCRE2](https://metacpan.org/pod/Alien::PCRE2)) and Ahmad Fatoum (a3f,\nATHREEF, author of [Alien::libudev](https://metacpan.org/pod/Alien::libudev) and [Alien::LibUSB](https://metacpan.org/pod/Alien::LibUSB)).\n\nThe Alien ecosystem owes a debt to Dan Book, who goes by Grinnz on IRC, for answering\nquestion about how to use [Alien::Build](https://metacpan.org/pod/Alien::Build) and friends.\n\n# AUTHOR\n\nAuthor: Graham Ollis \u003cplicease@cpan.org\u003e\n\nContributors:\n\nDiab Jerius (DJERIUS)\n\nRoy Storey (KIWIROY)\n\nIlya Pavlov\n\nDavid Mertens (run4flat)\n\nMark Nunberg (mordy, mnunberg)\n\nChristian Walde (Mithaldu)\n\nBrian Wightman (MidLifeXis)\n\nZaki Mughal (zmughal)\n\nmohawk (mohawk2, ETJ)\n\nVikas N Kumar (vikasnkumar)\n\nFlavio Poletti (polettix)\n\nSalvador Fandiño (salva)\n\nGianni Ceccarelli (dakkar)\n\nPavel Shaydo (zwon, trinitum)\n\nKang-min Liu (劉康民, gugod)\n\nNicholas Shipp (nshp)\n\nJuan Julián Merelo Guervós (JJ)\n\nJoel Berger (JBERGER)\n\nPetr Písař (ppisar)\n\nLance Wicks (LANCEW)\n\nAhmad Fatoum (a3f, ATHREEF)\n\nJosé Joaquín Atria (JJATRIA)\n\nDuke Leto (LETO)\n\nShoichi Kaji (SKAJI)\n\nShawn Laffan (SLAFFAN)\n\nPaul Evans (leonerd, PEVANS)\n\nHåkon Hægland (hakonhagland, HAKONH)\n\nnick nauwelaerts (INPHOBIA)\n\nFlorian Weimer\n\n# COPYRIGHT AND LICENSE\n\nThis software is copyright (c) 2011-2022 by Graham Ollis.\n\nThis is free software; you can redistribute it and/or modify it under\nthe same terms as the Perl 5 programming language system itself.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperlalien%2Falien-build","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fperlalien%2Falien-build","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperlalien%2Falien-build/lists"}