CINXE.COM
Alien - External libraries wrapped up for your viewing pleasure! - metacpan.org
<!DOCTYPE html> <html lang="en-US"> <head> <title>Alien - External libraries wrapped up for your viewing pleasure! - metacpan.org</title> <link rel="preload" as="fetch" href="/account/login_status" crossorigin="anonymous" /> <link href="/assets/style-XFEQ536G.css" rel="stylesheet" type="text/css"> <script src="/assets/main-WXBSEDQJ.js" type="module"></script> <link rel="alternate" type="application/rss+xml" title="Recent CPAN Uploads of Alien - MetaCPAN" href="/dist/Alien/releases.rss" /> <link rel="canonical" href="https://metacpan.org/pod/Alien" /> <meta name="description" content="External libraries wrapped up for your viewing pleasure!" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"> <link rel="shortcut icon" href="/static/icons/favicon.ico"> <link rel="apple-touch-icon" sizes="152x152" href="/static/icons/apple-touch-icon.png"> <link rel="search" href="/static/opensearch.xml" type="application/opensearchdescription+xml" title="MetaCPAN"> <script async src="https://perl-ads.perlhacks.com/perl-ads.js"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-E82Q2V8LVD"></script> <meta property="og:site_name" content="MetaCPAN" /> <meta name="twitter:site" content="@metacpan" /> <meta property="og:type" content="article" /> <meta name="twitter:card" content="summary" /> <meta property="og:url" content="https://metacpan.org/pod/Alien" /> <meta property="og:title" content="Alien" /> <meta property="og:description" content="External libraries wrapped up for your viewing pleasure!" /> <meta property="og:image" content="https://metacpan.org/static/images/dots.png" /> </head> <body> <nav class="navbar navbar-default" role="navigation"> <div class="header-logo-large hidden-xs"> <a href="/" tabindex="0"> <svg class="logo" aria-label="MetaCPAN"> <use class="logo" href="/static/images/metacpan-logo.svg#logo" /> </svg> </a> </div> <div class="header-logo-icon visible-xs"> <a href="/"> <svg class="logo" aria-label="MetaCPAN"> <use class="logo" href="/static/images/metacpan-logo.svg#dots" /> </svg> </a> </div> <ul class="nav navbar-nav menu-items hidden-xs hidden-sm"> <li><a href="/about">About</a></li> <li><a href="/about/sponsors">Sponsor</a></li> <li><a href="https://grep.metacpan.org/">grep::cpan</a></li> <li><a href="/recent">Recent</a></li> <li><a href="/about/faq">FAQ</a></li> <li><a href="/tools">Tools</a></li> <li><a href="https://fastapi.metacpan.org/">API</a></li> </ul> <ul class="nav navbar-nav navbar-right"> <button type="button" class="searchbar-btn visible-xs visible-sm"> <i class="fa fa-search button-fa-icon"></i> </button> <form action="/search" class="searchbar-form visible-md visible-lg search-form form-horizontal"> <input type="hidden" name="size" id="metacpan_search-size" value="20"> <div class="form-group"> <div class="search-group"> <i class="fa fa-search"></i> <input type="text" name="q" placeholder="Search the CPAN" size="41" autocorrect="off" autocapitalize="off" spellcheck="false" id="metacpan_search-input" class="form-control" value=""> </div> </div> </form> <li class="icon-slidepanel visible-xs visible-sm"> <button data-toggle="slidepanel" data-target=".slidepanel"> <span class="button-fa-icon"> <i class="fa fa-bars slidepanel-open"></i> <i class="fa fa-times slidepanel-close"></i> </span> </button> </li> <li class="dropdown login-dropdown show-logged-in"> <button type="button" class="dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-user button-fa-icon logged-in-icon" aria-hidden="true"></i> <i class="fas fa-chevron-down"></i> </button> <ul class="dropdown-menu"> <li><a href="/account/identities">Identities</a></li> <li><a href="/account/profile">Profile</a></li> <li><a href="/account/favorite/list">Favorites</a></li> <li> <a href="#" type="button" class="logout-button"> Logout </a> </li> </ul> </li> <li class="dropdown login-dropdown show-logged-out"> <button type="button" class="dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-user button-fa-icon avatar-placeholder" aria-hidden="true"></i> <i class="fas fa-chevron-down"></i> </button> <ul class="dropdown-menu"> <li> <a href="/login/github"> <i class="fab fa-github fa-fw"></i> GitHub </a> </li> <li> <a href="/login/twitter"> <i class="fab fa-twitter fa-fw"></i> Twitter </a> </li> <li> <a href="/login/google"> <i class="fab fa-google fa-fw"></i> Google </a> </li> </ul> </li> <li class="dropdown login-dropdown hide-logged-in hide-logged-out"> <button> <i class="fa fa-user button-fa-icon" aria-hidden="true"></i> </button> </li> </ul> </nav> <div class="page-content "> <div id="perl-ad-target" class="top-notify-banner perl-ad-target"> </div> <nav class="sidebar"> <div class="slidepanel"> <ul class="nav-list "> <li class="nav-header no-margin-top"> <div class="ttip" data-toggle="tooltip" data-placement="bottom" title="The date that this version of Alien was released."> <span class="relatize">10 Aug 2020 12:58:19 UTC</span> </div> </li> <li> Distribution: <a href="/dist/Alien">Alien</a> </li> <li> Module version: 0.96 </li> <li> <a data-keyboard-shortcut="g s" href="/dist/Alien/source/lib/Alien.pm">Source</a> (<a href="/dist/Alien/source/lib/Alien.pm?raw=1">raw</a>) </li> <li> <a data-keyboard-shortcut="g b" href="/dist/Alien/source/lib">Browse</a> (<a href="/dist/Alien/source/lib?raw=1">raw</a>) </li> <li> <a data-keyboard-shortcut="g c" href="/dist/Alien/changes">Changes</a> </li> <li> <a rel="noopener nofollow" class="nopopup" href="https://metacpan.org/pod/Alien">Homepage</a> </li> <li> <a class="nopopup" href="/dist/Alien/contribute">How to Contribute</a> </li> <li> <a rel="noopener nofollow" data-keyboard-shortcut="g r" href="https://github.com/PerlAlien/Alien">Repository</a> </li> <li> <a rel="noopener nofollow" data-keyboard-shortcut="g i" href="https://github.com/PerlAlien/Alien/issues">Issues</a> (1) </li> <li> <a rel="noopener nofollow" href="http://matrix.cpantesters.org/?dist=Alien+0.96" title="Matrix">Testers</a> <span title="(pass / fail / na)">(<a rel="noopener nofollow" href="https://www.cpantesters.org/distro/A/Alien.html?oncpan=1&distmat=1&version=0.96&grade=2" style="color: #090">180</a> / <a rel="noopener nofollow" href="https://www.cpantesters.org/distro/A/Alien.html?oncpan=1&distmat=1&version=0.96&grade=3" style="color: #900">0</a> / <a rel="noopener nofollow" href="https://www.cpantesters.org/distro/A/Alien.html?oncpan=1&distmat=1&version=0.96&grade=4">0</a>)</span> </li> <li> <a rel="noopener nofollow" href="http://cpants.cpanauthors.org/release/PLICEASE/Alien-0.96">Kwalitee</a> </li> <li> <div class="ttip" data-toggle="tooltip" data-placement="bottom" title="The # people with an indexing permission on Alien who have released something to CPAN in the last 2 years (i.e. the # people likely able to release critical fixes in a timely manner)"> Bus factor: 4 </div> </li> <li> <a rel="noopener nofollow" href="http://cpancover.com/latest/Alien-0.96/index.html">100.00% Coverage </a> </li> <li> License: perl_5 </li> <li> Perl: v5.6.0 </li> <li class="chat-banner"> <div><a rel="noopener nofollow" target="_blank" href="https://kiwiirc.com/nextclient/#irc://irc.perl.org/#native?nick=mc-guest-?">Chat with us!</a></div> </li> <li class="nav-header">Activity</li> <li> <div class="activity-graph"> <img src="/dist/Alien/activity.svg?res=month" /> <div class="comment">24 month</div> </div> </li> <li class="nav-header">Tools</li> <li> <a itemprop="downloadUrl" href="https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-0.96.tar.gz"> Download (<span itemprop="fileSize">17.57KB</span>)</a> </li> <li> <a href="https://explorer.metacpan.org/?url=%2Fmodule%2FPLICEASE%2FAlien-0.96%2Flib%2FAlien.pm"> MetaCPAN Explorer </a> </li> <li> <a href="/dist/Alien/permissions"> Permissions </a> </li> <li> <a href="/dist/Alien/releases.rss"> Subscribe to distribution </a> </li> <li> <button class="btn btn-link" data-toggle="modal" data-target="#metacpan_install-instructions-dialog"> Install Instructions </button> </li> <li> <form action="/search"> <input type="hidden" name="q" value="dist:Alien"> <input type="search" name="q" placeholder="Search distribution" class="form-control tool-bar-form"> <input type="submit" style="display: none"> </form> </li> <li> <form action="https://grep.metacpan.org/search"> <input type="hidden" name="qd" value="Alien"> <input type="hidden" name="source" value="metacpan"> <input type="search" name="q" placeholder="grep distribution" class="form-control tool-bar-form"> <input type="submit" style="display: none"> </form> </li> <li class="version-jump"> <select class="select-navigator form-control tool-bar-form"> <option disabled selected>Jump to version</option> <option disabled value="/release/PLICEASE/Alien-0.96/view/lib/Alien.pm" >0.96 (PLICEASE on 2020-08-10)</option> <option value="/release/ABERGMAN/Alien-0.91/view/lib/Alien.pm" >0.91 (ABERGMAN on 2003-10-13)</option> <option value="/release/ABERGMAN/Alien-0.9/view/lib/Alien.pm" >0.9 (ABERGMAN on 2003-10-13)</option> <optgroup label="BackPAN">' <option value="/release/PLICEASE/Alien-0.95/view/lib/Alien.pm" >0.95 (PLICEASE on 2017-07-13)</option> <option value="/release/PLICEASE/Alien-0.94/view/lib/Alien.pm" >0.94 (PLICEASE on 2017-03-10)</option> <option value="/release/PLICEASE/Alien-0.93/view/lib/Alien.pm" >0.93 (PLICEASE on 2015-09-14)</option> <option value="/release/PLICEASE/Alien-0.92/view/lib/Alien.pm" >0.92 (PLICEASE on 2015-09-10)</option> </optgroup> </select> </li> <li class="version-diff"> <select class="select-navigator form-control tool-bar-form"> <option disabled selected>Diff with version</option> <option disabled value="/release/PLICEASE/Alien-0.96/diff/PLICEASE/Alien-0.96/lib/Alien.pm" >0.96 (PLICEASE on 2020-08-10)</option> <option value="/release/PLICEASE/Alien-0.96/diff/ABERGMAN/Alien-0.91/lib/Alien.pm" >0.91 (ABERGMAN on 2003-10-13)</option> <option value="/release/PLICEASE/Alien-0.96/diff/ABERGMAN/Alien-0.9/lib/Alien.pm" >0.9 (ABERGMAN on 2003-10-13)</option> <optgroup label="BackPAN">' <option value="/release/PLICEASE/Alien-0.96/diff/PLICEASE/Alien-0.95/lib/Alien.pm" >0.95 (PLICEASE on 2017-07-13)</option> <option value="/release/PLICEASE/Alien-0.96/diff/PLICEASE/Alien-0.94/lib/Alien.pm" >0.94 (PLICEASE on 2017-03-10)</option> <option value="/release/PLICEASE/Alien-0.96/diff/PLICEASE/Alien-0.93/lib/Alien.pm" >0.93 (PLICEASE on 2015-09-14)</option> <option value="/release/PLICEASE/Alien-0.96/diff/PLICEASE/Alien-0.92/lib/Alien.pm" >0.92 (PLICEASE on 2015-09-10)</option> </optgroup> </select> </li> <li> <ul class="dependencies"> <li class="nav-header">Dependencies</li> <li><i>none</i></li> <li> <hr> </li> <li> <a href="/module/Alien/requires">Reverse dependencies</a> </li> <li> <a href="http://deps.cpantesters.org/?module=Alien">CPAN Testers List</a> </li> <li> <a href="https://cpandeps.grinnz.com/?dist=Alien">Dependency graph</a> </li> </ul> </li> <li class="nav-header">Permalinks</li> <li> <a href="/release/PLICEASE/Alien-0.96/view/lib/Alien.pm">This version</a> </li> <li> <a href="/pod/Alien">Latest version</a> </li> <li> <div class="plussers"> <div class="nav-header">++ed by:</div> <div> <a class="display-all" href="/author/POTATOGIM"><img src="https://www.gravatar.com/avatar/82f1c6258702415af6e26187f1e36850?d=identicon&s=20" title="POTATOGIM" alt="POTATOGIM"></a> <a class="display-all" href="/author/RWP"><img src="https://www.gravatar.com/avatar/7110eb2389e69a066d9d7cad7a1cc2bf?d=identicon&s=20" title="RWP" alt="RWP"></a> <a class="display-all" href="/author/SALVA"><img src="https://www.gravatar.com/avatar/026f1493e8fcd16015467901fa76e9ec?d=identicon&s=20" title="SALVA" alt="SALVA"></a> </div> <!-- Display counts of plussers--> <div> <a href="/dist/Alien/plussers">3 PAUSE users</a> </div> <div> 1 non-PAUSE user </div> </div> </li> <li> <div> <button class="contributors-show-button btn-link">and 1 contributors</button> <div id="metacpan_contributors" class="slide-out slide-out-hidden"> <div> <ul> <li class="contributor" data-contrib-email="abergman@fotango.com" > <img class="gravatar" width="20" height="20" src="https://www.gravatar.com/avatar/d41d8cd98f00b204e9800998ecf8427e?d=identicon&s=20" /> Arthur Bergman </li> </ul> </div> </div> </div> </li> </ul> </div> </nav> <div class="content-navigation"> <div class="breadcrumbs"> <span> <a data-keyboard-shortcut="g a" rel="author" href="/author/PLICEASE" class="author-name">Graham Ollis 馃敟馃悏</a> </span> <span> / </span> <div class="release dist-release status-latest maturity-released"> <span class="dropdown"><b class="caret"></b></span> <select class="select-navigator "> <option selected value="/release/PLICEASE/Alien-0.96/view/lib/Alien.pm" >0.96 (PLICEASE on 2020-08-10)</option> <option value="/release/ABERGMAN/Alien-0.91/view/lib/Alien.pm" >0.91 (ABERGMAN on 2003-10-13)</option> <option value="/release/ABERGMAN/Alien-0.9/view/lib/Alien.pm" >0.9 (ABERGMAN on 2003-10-13)</option> <optgroup label="BackPAN">' <option value="/release/PLICEASE/Alien-0.95/view/lib/Alien.pm" >0.95 (PLICEASE on 2017-07-13)</option> <option value="/release/PLICEASE/Alien-0.94/view/lib/Alien.pm" >0.94 (PLICEASE on 2017-03-10)</option> <option value="/release/PLICEASE/Alien-0.93/view/lib/Alien.pm" >0.93 (PLICEASE on 2015-09-14)</option> <option value="/release/PLICEASE/Alien-0.92/view/lib/Alien.pm" >0.92 (PLICEASE on 2015-09-10)</option> </optgroup> </select> <a data-keyboard-shortcut="g d" class="release-name" href="/dist/Alien">Alien-0.96</a> </div> <span class="river-gauge-gauge"> <svg width="24px" height="15px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g> <title> River stage zero No dependents </title> <rect x="0" y="0" width="4" height="15" fill="#e4e2e2" /> <rect x="5" y="0" width="4" height="15" fill="#e4e2e2" /> <rect x="10" y="0" width="4" height="15" fill="#e4e2e2" /> <rect x="15" y="0" width="4" height="15" fill="#e4e2e2" /> <rect x="20" y="0" width="4" height="15" fill="#e4e2e2" /> </g> </svg> </span> <div id="Alien-fav" class="show-logged-in"> <form action="/account/favorite/add" style="display: inline" method="POST"> <input type="hidden" name="remove" value="0"> <input type="hidden" name="release" value="Alien-0.96"> <input type="hidden" name="author" value="PLICEASE"> <input type="hidden" name="distribution" value="Alien"> <button type="submit" class="favorite highlight"><span>4</span> ++</button> </form> </div> <div class="show-logged-out"> <button class="fav-not-logged-in favorite highlight"><span>4</span> ++</button> </div> / <span>Alien</span> </div> </div> <main class="content"> <nav class="toc"> <div class="toc-header"><strong>Contents</strong></div> <ul> <li><a href="#NAME">NAME</a></li> <li><a href="#VERSION">VERSION</a></li> <li><a href="#SYNOPSIS">SYNOPSIS</a></li> <li><a href="#DESCRIPTION">DESCRIPTION</a></li> <li><a href="#CAVEATS">CAVEATS</a></li> <li><a href="#ORIGINAL-MANIFESTO">ORIGINAL MANIFESTO</a> <ul> <li><a href="#Why">Why</a></li> <li><a href="#How">How</a></li> <li><a href="#No-Framework!">No Framework!</a></li> <li><a href="#Responsibilities-of-a-Alien-module.">Responsibilities of a Alien module.</a></li> </ul> </li> <li><a href="#SEE-ALSO">SEE ALSO</a></li> <li><a href="#AUTHORS">AUTHORS</a></li> <li><a href="#COPYRIGHT-AND-LICENSE">COPYRIGHT AND LICENSE</a></li> </ul></nav> <div class="pod anchors"> <h1 id="NAME">NAME</h1> <p>Alien - External libraries wrapped up for your viewing pleasure!</p> <h1 id="VERSION">VERSION</h1> <p>version 0.96</p> <h1 id="SYNOPSIS">SYNOPSIS</h1> <pre><code>% perldoc Alien</code></pre> <h1 id="DESCRIPTION">DESCRIPTION</h1> <p>The intent of the Alien namespace is to provide a mechanism for specifying, installing and using non-native dependencies on CPAN. Frequently this is a C library used by XS (see <a href="/pod/perlxs">perlxs</a>) or FFI (see <a href="/pod/FFI::Platypus">FFI::Platypus</a>), but it could be anything non-Perl usable from Perl.</p> <p>Typical characteristics of an Alien distribution include:</p> <dl> <dt id="Probe-for-or-install-library-during-the-build-process"><a id="Probe"></a>Probe for or install library during the build process</dt> <dd> <p>Usually this means that <a href="/pod/Module::Build">Module::Build</a> or <a href="/pod/ExtUtils::MakeMaker">ExtUtils::MakeMaker</a> will be extended to probe for an existing system library that meets the criteria of the Alien module. If it cannot be found the library is downloaded from the Internet and installed into a share directory (See <a href="/pod/File::ShareDir::Dist">File::ShareDir::Dist</a>).</p> <p>Usually, though not necessarily, this is a C library. It could be anything though, some JavaScript, Java <code>.class</code> files. Anything imaginable.</p> </dd> <dt id="The-module-itself-provides-attributes-needed-to-use-the-library"><a id="The"></a>The module itself provides attributes needed to use the library</dt> <dd> <p>This means that if you are writing <code>Alien::Foo</code> it will provide class or member functions that will provide the necessary information for using the library that was probed for or installed during the previous step.</p> <p>If, for example, <code>Alien::Foo</code> were providing a dependency on the C library <code>libfoo</code>, then you might provide <code>Alien::Foo->cflags</code> and <code>Alien::Foo->libs</code> class methods to return the compiler and library flags required for using the library.</p> </dd> </dl> <p>These are guidelines, and this module does not provide an implementation or a framework, because of the diverse nature of non-Perl dependencies on CPAN. The more common cases are handled by the <a href="/pod/Alien::Base">Alien::Base</a> + <a href="/pod/Alien::Build">Alien::Build</a> system, which is recommended if you want to avoid reinventing the wheel. See the <a href="#SEE-ALSO">"SEE ALSO"</a> section below for helpful resources.</p> <h1 id="CAVEATS">CAVEATS</h1> <p>This section contains some recommendations from my own experience in writing Alien modules and from working on the <a href="/pod/Alien::Base">Alien::Base</a> + <a href="/pod/Alien::Build">Alien::Build</a> team. The <a href="/pod/Alien::Build">Alien::Build</a> FAQ (<a href="/pod/Alien::Build::Manual::FAQ">Alien::Build::Manual::FAQ</a>) also addresses a number of implementation specific gotchas.</p> <dl> <dt id="When-building-from-source-code,-build-static-libraries-whenever-possible"><a id="When"></a><a id="When-building-from-source-code-build-static-libraries-whenever-possible"></a>When building from source code, build static libraries whenever possible</dt> <dd> <p>Or at least isolate the dynamic libraries so they can be used by FFI, but do not use them to build XS modules. The reason for this is that if an end user upgrades their version of <code>Alien::Foo</code> it may break the already installed version of <code>Foo::XS</code> that used it when it was installed.</p> </dd> <dt id="On-Windows-(ActiveState,-Strawberry-Perl)"><a id="On"></a><a id="On-Windows-ActiveState-Strawberry-Perl"></a>On Windows (ActiveState, Strawberry Perl)</dt> <dd> <p>Many open source libraries use <code>autoconf</code> and other Unix focused tools that may not be easily available to the native (non-Cygwin) windows Perl. <a href="/pod/Alien::MSYS">Alien::MSYS</a> provides just enough of these tools for <code>autoconf</code> and may be sufficient for some other build tools. Also, <a href="/pod/Alien::Build">Alien::Build</a> and <a href="/pod/Alien::Base">Alien::Base</a> have hooks to detect <code>autoconf</code> and inject <a href="/pod/Alien::MSYS">Alien::MSYS</a> as a requirement on Windows when it is needed.</p> </dd> <dt id="MB-vs-EUMM"><a id="MB"></a>MB vs EUMM</dt> <dd> <p>The original Alien documentation recommends the use of <a href="/pod/Module::Build">Module::Build</a> (MB), which at the time was recommended over <a href="/pod/ExtUtils::MakeMaker">ExtUtils::MakeMaker</a> (EUMM). Many Alien distributions have been written using MB. Including the original installer that came with <a href="/pod/Alien::Base">Alien::Base</a>, <a href="/pod/Alien::Base::ModuleBuild">Alien::Base::ModuleBuild</a>. I believe this is because it is an easier build system to adapt to the Alien concept. MB is no longer universally recommended over EUMM, and has been removed from Perl's core, so if you can, this author recommends using EUMM instead. <a href="/pod/Alien::Build">Alien::Build</a> and <a href="/pod/Alien::Build::MM">Alien::Build::MM</a> provide tools for creating EUMM based Aliens. Another example worth looking at is <a href="/pod/Alien::pkgconf">Alien::pkgconf</a>, which uses EUMM, but isn't based on <a href="/pod/Alien::Base">Alien::Base</a> or <a href="/pod/Alien::Build">Alien::Build</a>.</p> </dd> </dl> <h1 id="ORIGINAL-MANIFESTO"><a id="ORIGINAL"></a>ORIGINAL MANIFESTO</h1> <p>What follows is the original Alien manifesto written by Artur Bergman. It is included here, because much of it is still largely true today, but it was out of necessity quite aspirational at the time it was written.</p> <h2 id="Why">Why</h2> <p>James and I ended up doing a build system for Fotango, lots of people have done a build system, it is a pretty boring task. The boring task is really all the mindlessly stupid things you need to do to build C libraries that Perl modules require, these C modules usually have unusual installation systems or require vastly different options. So CPAN modules install easy, 3rd party stuff is nasty.</p> <p>So, suddenly an idea struck me, Alien packages! Imagine a CPAN module that has as its only task to make sure a certain library is installed! That means that you can write all the voodoo in your Build.PL file and then just make sure the module requires the correct Alien module! Then anything that install Perl modules will deal with it automatically!</p> <h2 id="How">How</h2> <p>So, what should an Alien module do? It should make sure that the target is installed and it should provide the caller with enough information to use it.</p> <p>The idea is that you use it to make sure it is there, and you call class methods to find out what to use. These class methods will be individually specified by the stand alone Alien modules.</p> <h2 id="No-Framework!"><a id="No"></a><a id="No-Framework"></a>No Framework!</h2> <p>The reason this is so loosely worded is because we have no idea what common functionality will be needed, so we will let evolution work for us and see what individual Alien packages need and then eventually factor it out into this packages. I would like to avoid a top down design approach.</p> <h2 id="Responsibilities-of-a-Alien-module."><a id="Responsibilities"></a><a id="Responsibilities-of-a-Alien-module"></a>Responsibilities of a Alien module.</h2> <p>On installation, make sure the required package is there, otherwise install it.</p> <p>On usage, make sure the required package is there, else croak.</p> <p>Bundle the source with the module, or download it.</p> <p>Allow module authors to access information it gathers.</p> <p>Document itself well.</p> <p>Preferably use <a href="/pod/Module::Build">Module::Build</a>. [ see caveats above ]</p> <p>Be sane.</p> <h1 id="SEE-ALSO"><a id="SEE"></a>SEE ALSO</h1> <dl> <dt id="Alien::Build::Manual::Alien"><a id="Alien"></a><a href="/pod/Alien::Build::Manual::Alien">Alien::Build::Manual::Alien</a></dt> <dd> <p>Documentation for building <a href="/pod/Alien">Alien</a>s using the <a href="/pod/Alien::Base">Alien::Base</a> + <a href="/pod/Alien::Build">Alien::Build</a> system. Intended for as a starting point for Alien users and Alien authors.</p> </dd> <dt id="Alien::Build::Manual::FAQ"><a id="Alien1"></a><a href="/pod/Alien::Build::Manual::FAQ">Alien::Build::Manual::FAQ</a></dt> <dd> <p>Quick answers (FAQ) for many common Alien issues.</p> </dd> <dt id="Alien::Build"><a id="Alien2"></a><a href="/pod/Alien::Build">Alien::Build</a></dt> <dd> <p>A new installer agnostic Alien builder, intended to replace <a href="/pod/Alien::Base::ModuleBuild">Alien::Base::ModuleBuild</a>. See <a href="/pod/Alien::Build::Manual::AlienAuthor">Alien::Build::Manual::AlienAuthor</a> for details on how to create your own <a href="/pod/Alien::Build">Alien::Build</a> based Alien.</p> </dd> <dt id="Alien::Base"><a id="Alien3"></a><a href="/pod/Alien::Base">Alien::Base</a></dt> <dd> <p>An (optional) base class and framework for creating Alien distributions.</p> </dd> <dt id="#native-on-irc.perl.org"><a id="native-on-irc.perl.org"></a><a href="http://chat.mibbit.com/#native@irc.perl.org">#native on irc.perl.org</a></dt> <dd> <p>This channel on IRC is dedicated to those interested in using native interfaces in Perl. It is specifically geared to Alien, <a href="/pod/Alien::Base">Alien::Base</a> and FFI.</p> </dd> <dt id="Perl5-Alien-mailing-list"><a id="Perl5"></a><a href="https://groups.google.com/forum/#!forum/perl5-alien">Perl5 Alien mailing list</a></dt> <dd> <p>This mailing list is mainly for <a href="/pod/Alien::Base">Alien::Base</a>, and announcements for new versions will be posted there, but general Alien inquires are also welcome.</p> </dd> <dt id="https://github.com/PerlAlien"><a id="https"></a><a id="https:-github.com-PerlAlien"></a><a href="https://github.com/PerlAlien">https://github.com/PerlAlien</a></dt> <dd> <p>The Perl Alien organization on GitHub.</p> </dd> </dl> <h1 id="AUTHORS">AUTHORS</h1> <ul> <li><p>Arthur Bergman <abergman@fotango.com></p> </li> <li><p>Graham Ollis <plicease@cpan.org></p> </li> </ul> <h1 id="COPYRIGHT-AND-LICENSE"><a id="COPYRIGHT"></a>COPYRIGHT AND LICENSE</h1> <p>This software is copyright (c) 2003 by Arthur Bergman <abergman@fotango.com>.</p> <p>This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.</p></div> <div id="metacpan_install-instructions-dialog" class="modal fade"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h4 class="modal-title">Module Install Instructions</h4> </div> <div class="modal-body"> <p>To install Alien, copy and paste the appropriate command in to your terminal.</p> <p><a href="/dist/App-cpanminus/view/bin/cpanm">cpanm</a></p> <pre><code>cpanm Alien</code></pre> <p><a href="/pod/CPAN">CPAN shell</a></p> <pre><code>perl -MCPAN -e shell install Alien</code></pre> <p>For more information on module installation, please visit <a href="https://www.cpan.org/modules/INSTALL.html">the detailed CPAN module installation guide</a>.</p> </div> <div class="modal-footer"> <a href="#" data-dismiss="modal" class="btn">Close</a> </div> </div> </div> </div> </main> <div class="content-pagination"> </div> </div> <footer class="footer"> <div class="footer-container"> <div class="footer-social"> <div class="footer-link footer-logo"> <a href="/"> <img src="/static/images/metacpan-logo.svg" alt="MetaCPAN" /> </a> </div> <a class="footer-social-link" href="https://github.com/metacpan"> <i class="fab fa-github-square"></i> </a> <a class="footer-social-link" href="https://fosstodon.org/@metacpan"> <i class="fab fa-mastodon"></i> </a> </div> <div class="footer-links"> <div class="footer-link"> <a href="/about">About</a> </div> <div class="footer-link"> <a href="/about/sponsors">Sponsor</a> </div> <div class="footer-link"> <a href="https://grep.metacpan.org">grep::cpan</a> </div> <div class="footer-link"> <a href="/recent">Recent</a> </div> <div class="footer-link"> <a href="/about/faq">FAQ</a> </div> <div class="footer-link"> <a href="/tools">Tools</a> </div> <div class="footer-link"> <a href="https://fastapi.metacpan.org/">API</a> </div> <div class="footer-link"> <a href="https://www.perl.org/">Perl.org</a> </div> </div> <div class="footer-sponsors"> <a class="footer-sponsor-link" target="_blank" href="https://www.bytemark.co.uk/" rel="noopener"> <img class="footer-sponsor-bytemark" src="/static/images/sponsors/bytemark_logo.svg" alt="Bytemark logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://www.liquidweb.com/" rel="noopener"> <img class="footer-sponsor-liquidweb" src="/static/images/sponsors/liquidweb_logo.png" alt="liquidweb logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://deriv.com/careers/" rel="noopener"> <img class="footer-sponsor-deriv" src="/static/images/sponsors/deriv.svg" alt="Deriv logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://geocode.xyz" rel="noopener"> <img class="footer-sponsor-geocode" src="/static/images/sponsors/geocodelogo.svg" alt="Geocode logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://www.fastly.com/" rel="noopener"> <img class="footer-sponsor-fastly" src="/static/images/sponsors/fastly_logo.svg" alt="Fastly logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://opencagedata.com" rel="noopener"> <img class="footer-sponsor-opencage" src="/static/images/sponsors/open-cage.svg" alt="OpenCage logo"> </a> <!-- Added 2024-07-22 --> <a class="footer-sponsor-link" target="_blank" href="https://www.elastic.co/" rel="noopener"> <img class="footer-sponsor-elastic" src="/static/images/sponsors/elastic.svg" alt="Elastic logo"> </a> <!-- Added 2024-07-22 --> <a class="footer-sponsor-link" target="_blank" href="https://route4me.com/" rel="noopener"> <img class="footer-sponsor-route4me" src="/static/images/sponsors/route4me.png" alt="Route4Me logo"> </a> </div> </div> </footer> <div class="modal fade" tabindex="-1" role="dialog" id="metacpan_keyboard-shortcuts"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h4 class="modal-title">Keyboard Shortcuts</h4> </div> <div class="modal-body row"> <div class="col-md-6"> <table class="table keyboard-shortcuts"> <thead> <tr> <th></th> <th>Global</th> </tr> </thead> <tbody> <tr> <td class="keys"> <kbd>s</kbd> </td> <td>Focus search bar</td> </tr> <tr> <td class="keys"> <kbd>?</kbd> </td> <td>Bring up this help dialog</td> </tr> </tbody> </table> <table class="table keyboard-shortcuts"> <thead> <tr> <th></th> <th>GitHub</th> </tr> </thead> <tbody> <tr> <td class="keys"> <kbd>g</kbd> <kbd>p</kbd> </td> <td>Go to pull requests</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>i</kbd> </td> <td>go to github issues (only if github is preferred repository)</td> </tr> </tbody> </table> </div> <div class="col-md-6"> <table class="table keyboard-shortcuts"> <thead> <tr> <th></th> <th>POD</th> </tr> </thead> <tbody> <tr> <td class="keys"> <kbd>g</kbd> <kbd>a</kbd> </td> <td>Go to author</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>c</kbd> </td> <td>Go to changes</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>i</kbd> </td> <td>Go to issues</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>d</kbd> </td> <td>Go to dist</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>r</kbd> </td> <td>Go to repository/SCM</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>s</kbd> </td> <td>Go to source</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>b</kbd> </td> <td>Go to file browse</td> </tr> </tbody> </table> </div> <div class="col-md-12"> <table class="table keyboard-shortcuts"> <thead> <tr> <th></th> <th>Search terms</th> </tr> </thead> <tbody> <tr> <td><em>module:</em> (e.g. <a href="/search?q=module%3APlugin">module:Plugin</a>)</td> </tr> <tr> <td><em>distribution:</em> (e.g. <a href="/search?q=distribution%3ADancer+auth">distribution:Dancer auth</a>)</td> </tr> <tr> <td><em>author:</em> (e.g. <a href="/search?q=author%3ASONGMU+Redis">author:SONGMU Redis</a>)</td> </tr> <tr> <td><em>version:</em> (e.g. <a href="/search?q=version%3A1.00">version:1.00</a>)</td> </tr> </tbody> </table> </div> </div> <div class="modal-footer"></div> </div> </div> </div> </body> </html>