diff options
author | Loïc Hoguin <[email protected]> | 2018-12-07 14:45:07 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-12-07 14:45:07 +0100 |
commit | 1a6311a3a4933e767ba057780cefe1600f50f5c3 (patch) | |
tree | ba70a268baba369d41fe9c0d80f50bf82ebd0338 | |
parent | 5da193f4a6f60ecf8ff4c5f748fa74c872ef361e (diff) | |
download | erlang.mk-1a6311a3a4933e767ba057780cefe1600f50f5c3.tar.gz erlang.mk-1a6311a3a4933e767ba057780cefe1600f50f5c3.tar.bz2 erlang.mk-1a6311a3a4933e767ba057780cefe1600f50f5c3.zip |
Update user guide
-rw-r--r-- | guide/asciidoc.html | 10 | ||||
-rw-r--r-- | guide/ci.html | 8 | ||||
-rw-r--r-- | guide/compat.html | 12 | ||||
-rw-r--r-- | guide/contributing.html | 14 | ||||
-rw-r--r-- | guide/coverage.html | 2 | ||||
-rw-r--r-- | guide/cross_compiling.html | 73 | ||||
-rw-r--r-- | guide/ct.html | 10 | ||||
-rw-r--r-- | guide/deps.html | 19 | ||||
-rw-r--r-- | guide/dialyzer.html | 14 | ||||
-rw-r--r-- | guide/edoc.html | 10 | ||||
-rw-r--r-- | guide/eunit.html | 10 | ||||
-rw-r--r-- | guide/history.html | 6 | ||||
-rw-r--r-- | guide/index.html | 2 | ||||
-rw-r--r-- | guide/kerl.html | 6 | ||||
-rw-r--r-- | guide/overview.html | 20 | ||||
-rw-r--r-- | guide/plugins_list.html | 24 | ||||
-rw-r--r-- | guide/plugins_usage.html | 12 | ||||
-rw-r--r-- | guide/shell.html | 6 | ||||
-rw-r--r-- | guide/sphinx.html | 10 | ||||
-rw-r--r-- | guide/triq.html | 2 | ||||
-rw-r--r-- | guide/why.html | 14 | ||||
-rw-r--r-- | guide/xref.html | 2 |
22 files changed, 186 insertions, 100 deletions
diff --git a/guide/asciidoc.html b/guide/asciidoc.html index 33a6481..88f7ca3 100644 --- a/guide/asciidoc.html +++ b/guide/asciidoc.html @@ -33,12 +33,12 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="docs.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="edoc.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="asciidoc"></a>Chapter 14. AsciiDoc documentation</h2></div></div></div><p>Erlang.mk provides rules for generating documentation from +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="docs.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="edoc.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="asciidoc"></a>Chapter 15. AsciiDoc documentation</h2></div></div></div><p>Erlang.mk provides rules for generating documentation from AsciiDoc files. It can automatically build a user guide PDF, -chunked HTML documentation and Unix manual pages.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_requirements_2"></a>14.1. Requirements</h2></div></div></div><p>It is necessary to have <a class="ulink" href="http://asciidoc.org/" target="_top">AsciiDoc</a>, +chunked HTML documentation and Unix manual pages.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_requirements_2"></a>15.1. Requirements</h2></div></div></div><p>It is necessary to have <a class="ulink" href="http://asciidoc.org/" target="_top">AsciiDoc</a>, <a class="ulink" href="http://xmlsoft.org/XSLT/xsltproc2.html" target="_top">xsltproc</a> and <a class="ulink" href="http://dblatex.sourceforge.net/" target="_top">dblatex</a> installed on your -system for Erlang.mk to generate documentation from AsciiDoc sources.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_asciidoc_documentation"></a>14.2. Writing AsciiDoc documentation</h2></div></div></div><p><a class="ulink" href="http://asciidoc.org/" target="_top">AsciiDoc</a> is a text document format for +system for Erlang.mk to generate documentation from AsciiDoc sources.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_asciidoc_documentation"></a>15.2. Writing AsciiDoc documentation</h2></div></div></div><p><a class="ulink" href="http://asciidoc.org/" target="_top">AsciiDoc</a> is a text document format for writing notes, documentation, articles, books, ebooks, slideshows, web pages, man pages and blogs. AsciiDoc files can be translated to many formats including HTML, PDF, EPUB, man page.</p><p>The <a class="ulink" href="http://asciidoc.org/userguide.html" target="_top">AsciiDoc user guide</a> @@ -48,8 +48,8 @@ file is <a class="ulink" href="https://github.com/ninenines/erlang.mk/blob/maste location. This is <span class="emphasis"><em>doc/src/guide/</em></span> for the user guide, and <span class="emphasis"><em>doc/src/manual/</em></span> for the function reference. In the case of the user guide, the entry point is always <span class="emphasis"><em>doc/src/guide/book.asciidoc</em></span>.</p><p>For manual pages, it is good practice to use section 3 for -modules, and section 7 for the application itself.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_3"></a>14.3. Configuration</h2></div></div></div><p>All of the AsciiDoc related configuration can be done directly -inside the files themselves.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage"></a>14.4. Usage</h2></div></div></div><p>To build all documentation:</p><pre class="programlisting">$ make docs</pre><p>To build only the AsciiDoc documentation:</p><pre class="programlisting">$ make asciidoc</pre><p>To build only the user guide:</p><pre class="programlisting">$ make asciidoc-guide</pre><p>To build only the manual:</p><pre class="programlisting">$ make asciidoc-manual</pre><p>To install man pages on Unix:</p><pre class="programlisting">$ make install-docs</pre><p>Erlang.mk allows customizing the installation path and sections +modules, and section 7 for the application itself.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_3"></a>15.3. Configuration</h2></div></div></div><p>All of the AsciiDoc related configuration can be done directly +inside the files themselves.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage"></a>15.4. Usage</h2></div></div></div><p>To build all documentation:</p><pre class="programlisting">$ make docs</pre><p>To build only the AsciiDoc documentation:</p><pre class="programlisting">$ make asciidoc</pre><p>To build only the user guide:</p><pre class="programlisting">$ make asciidoc-guide</pre><p>To build only the manual:</p><pre class="programlisting">$ make asciidoc-manual</pre><p>To install man pages on Unix:</p><pre class="programlisting">$ make install-docs</pre><p>Erlang.mk allows customizing the installation path and sections of the man pages to be installed. The <code class="literal">MAN_INSTALL_PATH</code> variable defines where man pages will be installed. It defaults to <span class="emphasis"><em>/usr/local/share/man</em></span>. The <code class="literal">MAN_SECTIONS</code> variable defines diff --git a/guide/ci.html b/guide/ci.html index 998c3cf..436b63d 100644 --- a/guide/ci.html +++ b/guide/ci.html @@ -33,11 +33,11 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="coverage.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="dialyzer.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="ci"></a>Chapter 22. Continuous integration</h2></div></div></div><p>Erlang.mk comes with some support for continuous integration, +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="coverage.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="dialyzer.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="ci"></a>Chapter 23. Continuous integration</h2></div></div></div><p>Erlang.mk comes with some support for continuous integration, aimed at open source projects that need to support more than one specific Erlang/OTP release. (If you target one specific release, check the <a class="link" href="kerl.html#otp_version_pinning" title="12.2. OTP version pinning">OTP version pinning</a> -section of the <a class="link" href="kerl.html" title="Chapter 12. OTP version management">OTP version management</a> chapter.)</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuring_erlang_otp_versions_to_test"></a>22.1. Configuring Erlang/OTP versions to test</h2></div></div></div><p>To use the CI plugin you must first configure which versions +section of the <a class="link" href="kerl.html" title="Chapter 12. OTP version management">OTP version management</a> chapter.)</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuring_erlang_otp_versions_to_test"></a>23.1. Configuring Erlang/OTP versions to test</h2></div></div></div><p>To use the CI plugin you must first configure which versions of Erlang/OTP will be used. Erlang.mk provides three separate configuration variables depending on whether you need a normal OTP release, a HiPE-enabled release or an ErLLVM-enabled release.</p><p>At the time of writing, this is how you would test against all @@ -45,9 +45,9 @@ the most recent patch releases of Erlang/OTP 19 and above:</p><pre class="progra latest version of Erlang/OTP, the following could work:</p><pre class="programlisting">CI_HIPE = $(lastword $(CI_OTP)) CI_ERLLVM = $(CI_HIPE)</pre><p>Consult the <a class="link" href="kerl.html" title="Chapter 12. OTP version management">OTP version management</a> chapter for more information about Erlang/OTP versions and customization of the -Erlang/OTP builds.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_running_tests_across_all_configured_versions"></a>22.2. Running tests across all configured versions</h2></div></div></div><p>The recommended way to run the <code class="literal">ci</code> target is with the option +Erlang/OTP builds.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_running_tests_across_all_configured_versions"></a>23.2. Running tests across all configured versions</h2></div></div></div><p>The recommended way to run the <code class="literal">ci</code> target is with the option <code class="literal">-k</code>. It will ensure that tests are run for all configured -Erlang/OTP versions, even if there are errors:</p><pre class="programlisting">$ make ci -k</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_extending_the_ci_targets"></a>22.3. Extending the CI targets</h2></div></div></div><p>The <code class="literal">ci</code> target can be extended. For example to run Dialyzer +Erlang/OTP versions, even if there are errors:</p><pre class="programlisting">$ make ci -k</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_extending_the_ci_targets"></a>23.3. Extending the CI targets</h2></div></div></div><p>The <code class="literal">ci</code> target can be extended. For example to run Dialyzer at the end of CI:</p><pre class="programlisting">ci:: dialyze</pre><p>Additional setup can be done by extending the <code class="literal">ci-setup</code> target. This target is ran before testing each individual Erlang/OTP version.</p><p>For example, to ensure dependencies are re-fetched/built diff --git a/guide/compat.html b/guide/compat.html index 18377ee..f8bf98d 100644 --- a/guide/compat.html +++ b/guide/compat.html @@ -33,24 +33,24 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="kerl.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="docs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="compat"></a>Chapter 13. Compatibility with other build tools</h2></div></div></div><p>Erlang.mk tries its best to be compatible with the other Erlang +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="cross_compiling.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="docs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="compat"></a>Chapter 14. Compatibility with other build tools</h2></div></div></div><p>Erlang.mk tries its best to be compatible with the other Erlang build tools. It can use dependencies written with other build tools in mind, and can also make your projects usable by those build tools as well. Erlang.mk is like the cool kid that gets along with everybody.</p><p>In this chapter I will use the term <span class="emphasis"><em>Rebar project</em></span> to refer to a project built using Rebar 2, Rebar 3 or Mad. These three build tools are very similar and share the same configuration -file.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_rebar_projects_as_erlang_mk_dependencies"></a>13.1. Rebar projects as Erlang.mk dependencies</h2></div></div></div><p>Erlang.mk comes with a feature called <span class="emphasis"><em>Autoload</em></span> which will +file.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_rebar_projects_as_erlang_mk_dependencies"></a>14.1. Rebar projects as Erlang.mk dependencies</h2></div></div></div><p>Erlang.mk comes with a feature called <span class="emphasis"><em>Autoload</em></span> which will use Rebar 2 to patch any Rebar project and make it compatible with Erlang.mk. This feature essentially patches Rebar out and adds a Makefile to the project that Erlang.mk can then use for building:</p><p><span class="emphasis"><em>Autoload</em></span> is documented in more details in the -<a class="link" href="deps.html" title="Chapter 7. Packages and dependencies">Packages and dependencies</a> chapter.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_projects_as_rebar_dependencies"></a>13.2. Erlang.mk projects as Rebar dependencies</h2></div></div></div><p>Erlang.mk projects can be made compatible with the Rebar family +<a class="link" href="deps.html" title="Chapter 7. Packages and dependencies">Packages and dependencies</a> chapter.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_projects_as_rebar_dependencies"></a>14.2. Erlang.mk projects as Rebar dependencies</h2></div></div></div><p>Erlang.mk projects can be made compatible with the Rebar family of build tools pretty easily, as Erlang.mk will generate all the files they require for building.</p><p>The Rebar family requires two files: a <span class="emphasis"><em>rebar.config</em></span> file containing compilation options and the list of dependencies, and the application resource file, found either at -<span class="emphasis"><em>ebin/$(PROJECT).app</em></span> or at <span class="emphasis"><em>src/$(PROJECT).app.src</em></span>.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_rebar_configuration"></a>13.2.1. Rebar configuration</h3></div></div></div><p>Erlang.mk comes with a target that generates a <span class="emphasis"><em>rebar.config</em></span> +<span class="emphasis"><em>ebin/$(PROJECT).app</em></span> or at <span class="emphasis"><em>src/$(PROJECT).app.src</em></span>.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_rebar_configuration"></a>14.2.1. Rebar configuration</h3></div></div></div><p>Erlang.mk comes with a target that generates a <span class="emphasis"><em>rebar.config</em></span> file when invoked:</p><pre class="programlisting">$ make rebar.config</pre><p>Careful! This will build the file even if it already existed before.</p><p>To build this file, Erlang.mk uses information it finds in the <code class="literal">DEPS</code> and <code class="literal">ERLC_OPTS</code> variables, among others. This @@ -65,7 +65,7 @@ target:</p><pre class="programlisting">app:: rebar.config</pre><p>Don’t forget feature specific to Erlang.mk, like the <code class="literal">cp</code> fetch method. It could also be that we forgot to handle something! Sorry. We are of course interested to hear about any compatibility -problems you may have, just open a ticket!</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_application_resource_file_2"></a>13.2.2. Application resource file</h3></div></div></div><p>Erlang.mk has two ways to generate an application resource +problems you may have, just open a ticket!</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_application_resource_file_2"></a>14.2.2. Application resource file</h3></div></div></div><p>Erlang.mk has two ways to generate an application resource file: from the information found in the Makefile, or from the information found in the <span class="emphasis"><em>src/$(PROJECT).app.src</em></span> file. Needless to say, if you have this file in your repository, @@ -74,7 +74,7 @@ build tools.</p><p>If you don’t, however, it’s not much harder. Every time Erlang.mk will compile your application, it will produce a new <span class="emphasis"><em>ebin/$(PROJECT).app</em></span> file. Simply commit this file when it changes. It will only change when you modify the -configuration, add or remove modules.</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="kerl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="code.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="docs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> +configuration, add or remove modules.</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="cross_compiling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="code.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="docs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> </body> </html> diff --git a/guide/contributing.html b/guide/contributing.html index 9da6481..c536434 100644 --- a/guide/contributing.html +++ b/guide/contributing.html @@ -33,7 +33,7 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="history.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="contributing"></a>Chapter 29. Contributing</h2></div></div></div><p>You are welcome and encouraged to contribute.</p><p>This is how.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_priorities"></a>29.1. Priorities</h2></div></div></div><p>From the most important to the least important:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="history.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="contributing"></a>Chapter 30. Contributing</h2></div></div></div><p>You are welcome and encouraged to contribute.</p><p>This is how.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_priorities"></a>30.1. Priorities</h2></div></div></div><p>From the most important to the least important:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> Bugs </li><li class="listitem"> Package issues/additions @@ -41,7 +41,7 @@ Package issues/additions Refactoring </li><li class="listitem"> Features -</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_bugs"></a>29.2. Bugs</h2></div></div></div><p>If you have found a bug, you should open a ticket. Include +</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_bugs"></a>30.2. Bugs</h2></div></div></div><p>If you have found a bug, you should open a ticket. Include everything relevant including the command you used, output, a link to the code that triggers the issue, why you think this is a bug, etc.</p><p>If you think you have found a bug but you are not sure, you @@ -49,7 +49,7 @@ should open a ticket as previously explained.</p><p>If you have found a bug and NOW, open a ticket as previously explained.</p><p>Once you have opened a ticket, be patient, try to answer questions in a timely manner and confirm that the bug was indeed fixed when it is.</p><p>If you can’t be patient, either try to solve the bug and -contribute the fix back or become a paying customer.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_code"></a>29.3. Code</h2></div></div></div><p>The code is located in the <span class="emphasis"><em>core/*.mk</em></span> and <span class="emphasis"><em>plugins/*.mk</em></span> files. +contribute the fix back or become a paying customer.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_code"></a>30.3. Code</h2></div></div></div><p>The code is located in the <span class="emphasis"><em>core/*.mk</em></span> and <span class="emphasis"><em>plugins/*.mk</em></span> files. The tests are located in the <span class="emphasis"><em>test/Makefile</em></span> and <span class="emphasis"><em>test/*.mk</em></span> files.</p><p>If you have a fix or a hack for a bug, you should open a pull request. Any fix should include a test case that fails before the fix and is working after.</p><p>If you have a test case that reproduces a bug, but no fix for @@ -62,7 +62,7 @@ The value 4 is particular and shows expanded commands right before they are executed.</p><p>To run tests in parallel, use the <code class="literal">-j</code> option. It is generally a good idea to also use the <code class="literal">-k</code> option to run all tests even if one fails. For example: <code class="literal">make check -j 32 -k</code>.</p><p>Some changes should be tested against all packages. Continue -reading for more details on testing them.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_packages"></a>29.4. Packages</h2></div></div></div><p>You can search existing packages using the <code class="literal">make search q=STRING</code> +reading for more details on testing them.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_packages"></a>30.4. Packages</h2></div></div></div><p>You can search existing packages using the <code class="literal">make search q=STRING</code> command. This can be done both from an Erlang.mk project or directly from the Erlang.mk repository.</p><p>Packages can be added to the index using the <code class="literal">pkg_add.sh</code> script.</p><pre class="programlisting">$ git clone https://github.com/$YOURUSERNAME/erlang.mk $ cd erlang.mk @@ -75,11 +75,11 @@ where <code class="literal">PACKAGE</code> is the name of the package, for examp This can take a long time. Some packages will fail with certain versions of Erlang, or if a prerequisite is missing from your system. You can of course speed things up using the <code class="literal">-j</code> and <code class="literal">-k</code> flags.</p><p>After all packages have been tested, you can run the command -<code class="literal">make summary</code> to know what changed since the previous run.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_documentation"></a>29.5. Documentation</h2></div></div></div><p>The documentation is always right.</p><p>If you think you have found a mistake in the documentation, +<code class="literal">make summary</code> to know what changed since the previous run.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_documentation"></a>30.5. Documentation</h2></div></div></div><p>The documentation is always right.</p><p>If you think you have found a mistake in the documentation, this is a bug. You can either open a ticket or send a pull request.</p><p>To make sure that the documentation changes work, install -the listed <a class="link" href="asciidoc.html" title="Chapter 14. AsciiDoc documentation">Requirements</a> on your system and -run <code class="literal">make docs</code>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_feature_requests"></a>29.6. Feature requests</h2></div></div></div><p>If you have an awesome idea or need something that Erlang.mk +the listed <a class="link" href="asciidoc.html" title="Chapter 15. AsciiDoc documentation">Requirements</a> on your system and +run <code class="literal">make docs</code>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_feature_requests"></a>30.6. Feature requests</h2></div></div></div><p>If you have an awesome idea or need something that Erlang.mk doesn’t provide yet, open a ticket. Provide as much detail as possible.</p><p>If you have code, great! Open a pull request as previously explained.</p><p>If not, you can still improve your feature request by writing diff --git a/guide/coverage.html b/guide/coverage.html index d269e73..9cbd27a 100644 --- a/guide/coverage.html +++ b/guide/coverage.html @@ -33,7 +33,7 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="triq.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ci.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="coverage"></a>Chapter 21. Code coverage</h2></div></div></div><p>Placeholder chapter.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="triq.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ci.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="triq.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ci.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="coverage"></a>Chapter 22. Code coverage</h2></div></div></div><p>Placeholder chapter.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="triq.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ci.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> </body> </html> diff --git a/guide/cross_compiling.html b/guide/cross_compiling.html new file mode 100644 index 0000000..c81bd02 --- /dev/null +++ b/guide/cross_compiling.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="utf-8"/> +<title>Erlang.mk User Guide</title> +<style type="text/css"><!-- +body{background:white;color:black;font-family:"Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;justify-content:center;margin:0 auto;padding:0;width:600px} +header {align-items:center;display:flex;justify-content:center} +header nav.left{text-align:right;width:150px} +header nav.right{text-align:left;width:150px} +header nav a{display:block;margin:1.5em 1em} +main{margin-top:2em;text-align:justify} +main h2, main h3{margin-top:2em} +main h1, main div.chapter>div.titlepage h2{font-size:2em;margin-top:.67em} +a{color:#d9230f;text-decoration:none} +a:hover{text-decoration:underline} +a.xref{display:none} +h1, h2, h3{font-weight:normal} +div.navfooter{margin-bottom:1em} +--></style> +</head> +<body> +<header> + <nav class="left"> + <a href="index.html">User guide</a> + <a href="getting_started.html">Tutorials</a> + </nav> + <a href="/" class="logo"><img src="../res/logo-small.png" alt="Erlang.mk" title="Erlang.mk: A build tool for Erlang that just works" height="200" width="206"/></a> + <nav class="right"> + <a href="https://github.com/ninenines/erlang.mk/tree/master/index">470+ packages</a> + <a href="https://github.com/ninenines/erlang.mk/issues">Issues?</a> + </nav> +</header> +<main> + +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="kerl.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="compat.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="cross_compiling"></a>Chapter 13. Cross compiling</h2></div></div></div><p>Erlang.mk supports cross-compiling. While the compiled +Erlang code is portable as-is, the C code is not and +releases need to use the correct runtime system for the +target environment.</p><p>There are therefore two steps that might require some +intervention: compiling and building the release. If +you do not have any C code you can just compile as you +would normally, however.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_compiling"></a>13.1. Compiling</h2></div></div></div><p>To cross-compile the C code you need a cross compiler. If you +were to target Windows from an Arch Linux machine you would +install the <a class="ulink" href="https://aur.archlinux.org/packages/mingw-w64-gcc/" target="_top">mingw-w64-gcc</a> +package. You would then need to define the <code class="literal">CC</code> environment +variable to point to this compiler instead of the default:</p><pre class="programlisting">CC=/usr/bin/x86_64-w64-mingw32-gcc</pre><p>Additionally, on Windows the shared libraries use a different +extension than on Linux, so it needs to be specified as well:</p><pre class="programlisting">C_SRC_OUTPUT_SHARED_EXTENSION=.dll</pre><p>These values can be added to the Makefile or given from the +command line, for example:</p><pre class="programlisting">$ CC=/usr/bin/x86_64-w64-mingw32-gcc C_SRC_OUTPUT_SHARED_EXTENSION=.dll make + DEPEND my_nif.d + ERLC my_nif.erl + APP my_nif + C my_nif.c + LD my_nif.dll +$ file priv/my_nif.dll +priv/my_nif.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows</pre><p>You could also add this configuration to your Makefile hidden +behind a flag:</p><pre class="programlisting">ifdef WINDOWS_BUILD +CC = /usr/bin/x86_64-w64-mingw32-gcc +C_SRC_OUTPUT_SHARED_EXTENSION = .dll +endif</pre><p>And then just compile like this:</p><pre class="programlisting">$ make WINDOWS_BUILD=1</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_building_the_release"></a>13.2. Building the release</h2></div></div></div><p>For the release there are two options. You can either include +the correct runtime system directly in the release; or you +can not include the runtime system in the release and instead +let it use the one installed in the target environment.</p><p>To include the target runtime system, add the <code class="literal">include_erts</code> +tuple to your <span class="emphasis"><em>relx.config</em></span> file:</p><pre class="programlisting">{include_erts, "/path/to/alternate/erlang"}.</pre><p>If you were to target Windows for example, you could copy +the Erlang installation from the <span class="emphasis"><em>Program Files</em></span> directory +and then configure <span class="emphasis"><em>relx.config</em></span> like this:</p><pre class="programlisting">{include_erts, "/path/to/erl10.1"}.</pre><p>You need to make sure that the runtime system version you +will use is capable of running the compiled Erlang code +you used to build your project, otherwise it will fail +to run.</p><p>If you choose to not include the runtime system at all, +configure <span class="emphasis"><em>relx.config</em></span> as follow:</p><pre class="programlisting">{include_erts, false}.</pre><p>In that case the runtime system needs to be available +in the <code class="literal">$PATH</code> of the target environment.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="kerl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="code.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="compat.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> +</main> +</body> +</html> diff --git a/guide/ct.html b/guide/ct.html index 141c668..d0b588a 100644 --- a/guide/ct.html +++ b/guide/ct.html @@ -33,13 +33,13 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="eunit.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="triq.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="ct"></a>Chapter 19. Common Test</h2></div></div></div><p>Common Test is Erlang’s functional testing framework. +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="eunit.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="triq.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="ct"></a>Chapter 20. Common Test</h2></div></div></div><p>Common Test is Erlang’s functional testing framework. Erlang.mk automates the discovery and running of Common -Test suites.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_tests_2"></a>19.1. Writing tests</h2></div></div></div><p>The <a class="ulink" href="http://www.erlang.org/doc/apps/common_test/write_test_chapter.html" target="_top">Common Test user guide</a> +Test suites.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_tests_2"></a>20.1. Writing tests</h2></div></div></div><p>The <a class="ulink" href="http://www.erlang.org/doc/apps/common_test/write_test_chapter.html" target="_top">Common Test user guide</a> is the best place to learn how to write tests. Erlang.mk requires that file names for test suites end with <span class="emphasis"><em>_SUITE.erl</em></span> and that the files be located in the <span class="emphasis"><em>$(TEST_DIR)</em></span> directory. -This defaults to <span class="emphasis"><em>test/</em></span>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_7"></a>19.2. Configuration</h2></div></div></div><p>The <code class="literal">CT_OPTS</code> variable allows you to set extra Common Test +This defaults to <span class="emphasis"><em>test/</em></span>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_7"></a>20.2. Configuration</h2></div></div></div><p>The <code class="literal">CT_OPTS</code> variable allows you to set extra Common Test options. Options are documented in the <a class="ulink" href="http://www.erlang.org/doc/apps/common_test/run_test_chapter.html" target="_top">Common Test user guide</a>. You can use it to set Common Test hooks, for example:</p><pre class="programlisting">CT_OPTS = -ct_hooks cowboy_ct_hook</pre><p>The <code class="literal">CT_SUITES</code> variable can be used to override what @@ -48,7 +48,7 @@ not normally need to be set as Erlang.mk will find the test suites automatically.</p><p>The name of the suite is the part before <code class="literal">_SUITE.erl</code>. If the file is named <span class="emphasis"><em>http_SUITE.erl</em></span>, the test suite is <code class="literal">http</code>:</p><pre class="programlisting">CT_SUITES = http ws</pre><p>The <code class="literal">CT_LOGS_DIR</code> variable can be used to set where HTML -log files are to be written. This defaults to <span class="emphasis"><em>logs/</em></span>.</p><pre class="programlisting">CT_LOGS_DIR = ct_output_log_dir</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_5"></a>19.3. Usage</h2></div></div></div><p>To run all tests (including Common Test):</p><pre class="programlisting">$ make tests</pre><p>To run all tests and static checks (including Common Test):</p><pre class="programlisting">$ make check</pre><p>You can also run Common Test separately:</p><pre class="programlisting">$ make ct</pre><p>Erlang.mk will create targets for all test suites it finds. +log files are to be written. This defaults to <span class="emphasis"><em>logs/</em></span>.</p><pre class="programlisting">CT_LOGS_DIR = ct_output_log_dir</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_5"></a>20.3. Usage</h2></div></div></div><p>To run all tests (including Common Test):</p><pre class="programlisting">$ make tests</pre><p>To run all tests and static checks (including Common Test):</p><pre class="programlisting">$ make check</pre><p>You can also run Common Test separately:</p><pre class="programlisting">$ make ct</pre><p>Erlang.mk will create targets for all test suites it finds. If you have a file named <span class="emphasis"><em>test/http_SUITE.erl</em></span>, then the target <code class="literal">ct-http</code> will run that specific test suite:</p><pre class="programlisting">$ make ct-http</pre><p>Erlang.mk provides a convenient way to run a specific group or a specific test case within a specific group, @@ -57,7 +57,7 @@ suite-specific targets, like the <code class="literal">ct-http</code> example ab <code class="literal">http_SUITE</code> test suite, write:</p><pre class="programlisting">$ make ct-http t=http_compress</pre><p>Similarly, to run a specific test case in that group:</p><pre class="programlisting">$ make ct-http t=http_compress:headers_dupe</pre><p>To do the same against a multi-application repository, you can use the <code class="literal">-C</code> option:</p><pre class="programlisting">$ make -C apps/my_app ct-http t=my_group:my_case</pre><p>Note that this also applies to dependencies. When using Cowboy as a dependency, you can run the following directly:</p><pre class="programlisting">$ make -C deps/cowboy ct-http t=http_compress</pre><p>The variable <code class="literal">c</code> can be used to run a specific test when -the test suite does not group test cases:</p><pre class="programlisting">$ make ct-http c=headers_dupe</pre><p>Finally, <a class="link" href="coverage.html" title="Chapter 21. Code coverage">code coverage</a> is available, +the test suite does not group test cases:</p><pre class="programlisting">$ make ct-http c=headers_dupe</pre><p>Finally, <a class="link" href="coverage.html" title="Chapter 22. Code coverage">code coverage</a> is available, but covered in its own chapter.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eunit.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="triq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> </body> diff --git a/guide/deps.html b/guide/deps.html index 0cfe95a..0853870 100644 --- a/guide/deps.html +++ b/guide/deps.html @@ -264,11 +264,10 @@ If it contains a <span class="emphasis"><em>configure</em></span> script, run it </li><li class="listitem"> Run autopatch on the project </li></ul></div><p>Autopatch first checks if there is any project-specific patch -enabled. There are currently two: <code class="literal">RABBITMQ_CLIENT_PATCH</code> for -the <code class="literal">amqp_client</code> dependency, and <code class="literal">RABBITMQ_SERVER_PATCH</code> for -the <code class="literal">rabbit</code> dependency. These are needed only for RabbitMQ -versions before 3.6.0 (assuming you are using upstream RabbitMQ, -and not a fork).</p><p>Otherwise, autopatch performs different operations depending +enabled. There are currently three: <code class="literal">RABBITMQ_CLIENT_PATCH</code> for +the <code class="literal">amqp_client</code> dependency (before 3.6.0), <code class="literal">RABBITMQ_SERVER_PATCH</code> +for the <code class="literal">rabbit</code> dependency (before 3.6.0) and <code class="literal">ELIXIR_PATCH</code> +for the <code class="literal">elixir</code> dependency.</p><p>Otherwise, autopatch performs different operations depending on the kind of project it finds the dependency to be.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> Rebar projects are automatically converted to use Erlang.mk as their build tool. This essentially patches Rebar out, and @@ -287,7 +286,15 @@ Projects with no source directory and no Makefile get an empty Makefile generated, for compatibility purposes. </li><li class="listitem"> Other projects with no Makefile are left untouched. -</li></ul></div><p>You can disable the replacing of the <span class="emphasis"><em>erlang.mk</em></span> file by +</li></ul></div><p>You can add additional commands to be run immediately before +or after autopatch is done by extending the target +<code class="literal">autopatch-$(dep)::</code>, for example this would remove +a module:</p><pre class="programlisting">autopatch-ranch:: + rm -f $(DEPS_DIR)/ranch/src/ranch_proxy_header.erl</pre><p>A common use case for this feature is to apply a PATCH +file on the dependency immediately after fetching it. +It can also be used to add compiler options, for example:</p><pre class="programlisting">autopatch-couchbeam:: + printf "\nERLC_OPTS += -DWITH_JIFFY\n" >> $(DEPS_DIR)/couchbeam/Makefile</pre><p>The commands will run before autopatch when the target is +defined before including <span class="emphasis"><em>erlang.mk</em></span>, and after otherwise.</p><p>You can disable the replacing of the <span class="emphasis"><em>erlang.mk</em></span> file by defining the <code class="literal">NO_AUTOPATCH_ERLANG_MK</code> variable:</p><pre class="programlisting">NO_AUTOPATCH_ERLANG_MK = 1</pre><p>You can also disable autopatch entirely for a few select projects using the <code class="literal">NO_AUTOPATCH</code> variable:</p><pre class="programlisting">NO_AUTOPATCH = cowboy ranch cowlib</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_dealing_with_duplicate_modules"></a>7.10. Dealing with duplicate modules</h2></div></div></div><p>When there are duplicate modules found in both applications and their dependencies, some tasks may fail. Erlang expects diff --git a/guide/dialyzer.html b/guide/dialyzer.html index 3626a75..aa9dc66 100644 --- a/guide/dialyzer.html +++ b/guide/dialyzer.html @@ -33,18 +33,18 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="ci.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="xref.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="dialyzer"></a>Chapter 23. Dialyzer</h2></div></div></div><p>Dialyzer is a tool that will detect discrepancies in your +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="ci.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="xref.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="dialyzer"></a>Chapter 24. Dialyzer</h2></div></div></div><p>Dialyzer is a tool that will detect discrepancies in your program. It does so using a technique known as success typing analysis which has the advantage of providing no false positives. Dialyzer is able to detect type errors, -dead code and more.</p><p>Erlang.mk provides a wrapper around Dialyzer.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_how_it_works"></a>23.1. How it works</h2></div></div></div><p>Dialyzer requires a PLT file to work. The PLT file contains +dead code and more.</p><p>Erlang.mk provides a wrapper around Dialyzer.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_how_it_works"></a>24.1. How it works</h2></div></div></div><p>Dialyzer requires a PLT file to work. The PLT file contains the analysis information from all applications which are not expected to change, or rarely do. These would be all the dependencies of the application or applications you are currently working on, including standard applications in Erlang/OTP itself.</p><p>Dialyzer can generate this PLT file. Erlang.mk includes rules to automatically generate the PLT file when it is missing.</p><p>Once the PLT file is generated, Dialyzer can perform the -analysis in record time.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_8"></a>23.2. Configuration</h2></div></div></div><p>In a typical usage scenario, no variable needs to be set. +analysis in record time.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_8"></a>24.2. Configuration</h2></div></div></div><p>In a typical usage scenario, no variable needs to be set. The defaults should be enough. Do note however that the dependencies need to be set properly using the <code class="literal">DEPS</code> and <code class="literal">LOCAL_DEPS</code> variables.</p><p>The <code class="literal">DIALYZER_PLT</code> file indicates where the PLT file will @@ -59,10 +59,14 @@ The former one defines which directories should be part of the analysis. The latter defines what extra warnings Dialyzer should report.</p><p>Note that Erlang.mk enables the race condition warnings by default. As it can take considerably large resources -to run, you may want to disable it on larger projects.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_6"></a>23.3. Usage</h2></div></div></div><p>To perform an analysis, run the following command:</p><pre class="programlisting">$ make dialyze</pre><p>This will create the PLT file if it doesn’t exist.</p><p>The analysis will also be performed when you run the +to run, you may want to disable it on larger projects.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_6"></a>24.3. Usage</h2></div></div></div><p>To perform an analysis, run the following command:</p><pre class="programlisting">$ make dialyze</pre><p>This will create the PLT file if it doesn’t exist.</p><p>The analysis will also be performed when you run the following command, alongside tests:</p><pre class="programlisting">$ make check</pre><p>You can use the <code class="literal">plt</code> target to create the PLT file if it doesn’t exist. This is normally not necessary as -Dialyzer creates it automatically.</p><p>The PLT file will be removed when you run <code class="literal">make distclean</code>.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ci.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="xref.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> +Dialyzer creates it automatically.</p><p>The PLT file will be removed when you run <code class="literal">make distclean</code>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_dialyzing_beam_files"></a>24.4. Dialyzing beam files</h2></div></div></div><p>By default Erlang.mk will run Dialyzer against the source +code. It is possible to configure Erlang.mk to use the +compiled source files instead. This is done using the +<code class="literal">DIALYZER_DIRS</code> variable:</p><pre class="programlisting">DIALYZER_DIRS = -r ebin</pre><p>This value must be set before including Erlang.mk to +function properly.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ci.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="xref.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> </body> </html> diff --git a/guide/edoc.html b/guide/edoc.html index f13d5db..49e5e36 100644 --- a/guide/edoc.html +++ b/guide/edoc.html @@ -33,17 +33,17 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="asciidoc.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="sphinx.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="edoc"></a>Chapter 15. EDoc comments</h2></div></div></div><p>Erlang.mk provides a thin wrapper on top of EDoc, an application -that generates documentation based on comments found in modules.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_edoc_comments"></a>15.1. Writing EDoc comments</h2></div></div></div><p>The <a class="ulink" href="http://www.erlang.org/doc/apps/edoc/chapter.html" target="_top">EDoc user guide</a> -explains everything you need to know about EDoc comments.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_4"></a>15.2. Configuration</h2></div></div></div><p>The <code class="literal">EDOC_OPTS</code> variable allows you to specify additional +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="asciidoc.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="sphinx.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="edoc"></a>Chapter 16. EDoc comments</h2></div></div></div><p>Erlang.mk provides a thin wrapper on top of EDoc, an application +that generates documentation based on comments found in modules.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_edoc_comments"></a>16.1. Writing EDoc comments</h2></div></div></div><p>The <a class="ulink" href="http://www.erlang.org/doc/apps/edoc/chapter.html" target="_top">EDoc user guide</a> +explains everything you need to know about EDoc comments.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_4"></a>16.2. Configuration</h2></div></div></div><p>The <code class="literal">EDOC_OPTS</code> variable allows you to specify additional EDoc options. Options are documented in the <a class="ulink" href="http://www.erlang.org/doc/man/edoc.html#run-2" target="_top">EDoc manual</a>.</p><p>A common use for this variable is to enable Markdown in doc comments, using the <code class="literal">edown</code> application:</p><pre class="programlisting">DOC_DEPS = edown -EDOC_OPTS = {doclet, edown_doclet}</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_2"></a>15.3. Usage</h2></div></div></div><p>To build all documentation, you would typically use:</p><pre class="programlisting">$ make docs</pre><p>Do note, however, that EDoc comments will only be generated +EDOC_OPTS = {doclet, edown_doclet}</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_2"></a>16.3. Usage</h2></div></div></div><p>To build all documentation, you would typically use:</p><pre class="programlisting">$ make docs</pre><p>Do note, however, that EDoc comments will only be generated automatically if the <span class="emphasis"><em>doc/overview.edoc</em></span> file exists. If you do not want that file and still want to generate doc comments, two solutions are available.</p><p>You can generate EDoc documentation directly:</p><pre class="programlisting">$ make edoc</pre><p>You can enable automatic generation on <code class="literal">make docs</code> by adding -the following to your Makefile:</p><pre class="programlisting">docs:: edoc</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_running_edoc_on_all_applications"></a>15.4. Running EDoc on all applications</h2></div></div></div><p>In a multi-application project you may want to run EDoc +the following to your Makefile:</p><pre class="programlisting">docs:: edoc</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_running_edoc_on_all_applications"></a>16.4. Running EDoc on all applications</h2></div></div></div><p>In a multi-application project you may want to run EDoc against all applications at the same time, instead of against each applications independently. To do so, you need to configure the <code class="literal">EDOC_SRC_DIRS</code> at the end of diff --git a/guide/eunit.html b/guide/eunit.html index 8c054ec..ff5f4e9 100644 --- a/guide/eunit.html +++ b/guide/eunit.html @@ -33,9 +33,9 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="shell.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ct.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="eunit"></a>Chapter 18. EUnit</h2></div></div></div><p>EUnit is the tool of choice for unit testing. Erlang.mk +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="shell.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ct.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="eunit"></a>Chapter 19. EUnit</h2></div></div></div><p>EUnit is the tool of choice for unit testing. Erlang.mk automates a few things on top of EUnit, including the -discovery and running of unit tests.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_tests"></a>18.1. Writing tests</h2></div></div></div><p>The <a class="ulink" href="http://www.erlang.org/doc/apps/eunit/chapter.html" target="_top">EUnit user guide</a> +discovery and running of unit tests.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_tests"></a>19.1. Writing tests</h2></div></div></div><p>The <a class="ulink" href="http://www.erlang.org/doc/apps/eunit/chapter.html" target="_top">EUnit user guide</a> is the best place to learn how to write tests. Of note is that all functions ending with <code class="literal">_test</code> or <code class="literal">_test_</code> will be picked up as EUnit test cases.</p><p>Erlang.mk will automatically pick up tests found in any of @@ -58,19 +58,19 @@ compiled.</p><pre class="programlisting">-ifdef(TEST). %% Insert tests here. -endif.</pre><p>Erlang.mk will automatically recompile your code when you -perform a normal build after running tests, and vice versa.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_6"></a>18.2. Configuration</h2></div></div></div><p>The <code class="literal">EUNIT_OPTS</code> variable allows you to specify additional +perform a normal build after running tests, and vice versa.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_6"></a>19.2. Configuration</h2></div></div></div><p>The <code class="literal">EUNIT_OPTS</code> variable allows you to specify additional EUnit options. Options are documented in the <a class="ulink" href="http://www.erlang.org/doc/man/eunit.html#test-2" target="_top">EUnit manual</a>. At the time of writing, the only available option is <code class="literal">verbose</code>:</p><pre class="programlisting">EUNIT_OPTS = verbose</pre><p>The <code class="literal">EUNIT_ERL_OPTS</code> variable allows you to specify options to be passed to <code class="literal">erl</code> when running EUnit tests. For example, -you can load the <span class="emphasis"><em>vm.args</em></span> and <span class="emphasis"><em>sys.config</em></span> files:</p><pre class="programlisting">EUNIT_ERL_OPTS = -args_file config/vm.args -config config/sys.config</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_4"></a>18.3. Usage</h2></div></div></div><p>To run all tests (including EUnit):</p><pre class="programlisting">$ make tests</pre><p>To run all tests and static checks (including EUnit):</p><pre class="programlisting">$ make check</pre><p>You can also run EUnit separately:</p><pre class="programlisting">$ make eunit</pre><p>EUnit will be quiet by default, only outputting errors. +you can load the <span class="emphasis"><em>vm.args</em></span> and <span class="emphasis"><em>sys.config</em></span> files:</p><pre class="programlisting">EUNIT_ERL_OPTS = -args_file config/vm.args -config config/sys.config</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_4"></a>19.3. Usage</h2></div></div></div><p>To run all tests (including EUnit):</p><pre class="programlisting">$ make tests</pre><p>To run all tests and static checks (including EUnit):</p><pre class="programlisting">$ make check</pre><p>You can also run EUnit separately:</p><pre class="programlisting">$ make eunit</pre><p>EUnit will be quiet by default, only outputting errors. You can easily make it verbose for a single invocation:</p><pre class="programlisting">$ make eunit EUNIT_OPTS=verbose</pre><p>Erlang.mk allows you to run all tests from a specific module, or a specific test case from that module, using the variable <code class="literal">t</code>.</p><p>For example, to run all tests from the <code class="literal">cow_http_hd</code> module (instead of all tests from the entire project), one could write:</p><pre class="programlisting">$ make eunit t=cow_http_hd</pre><p>Similarly, to run a specific test case:</p><pre class="programlisting">$ make eunit t=cow_http_hd:parse_accept_test_</pre><p>To do the same against a multi-application repository, you can use the <code class="literal">-C</code> option:</p><pre class="programlisting">$ make -C apps/my_app eunit t=my_module:hello_test</pre><p>Note that this also applies to dependencies. From Cowboy, -you can run the following directly:</p><pre class="programlisting">$ make -C deps/cowlib eunit t=cow_http_hd</pre><p>Finally, <a class="link" href="coverage.html" title="Chapter 21. Code coverage">code coverage</a> is available, +you can run the following directly:</p><pre class="programlisting">$ make -C deps/cowlib eunit t=cow_http_hd</pre><p>Finally, <a class="link" href="coverage.html" title="Chapter 22. Code coverage">code coverage</a> is available, but covered in its own chapter.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="shell.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ct.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> </body> diff --git a/guide/history.html b/guide/history.html index 17e3741..d8ec295 100644 --- a/guide/history.html +++ b/guide/history.html @@ -33,8 +33,8 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="why.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="contributing.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="history"></a>Chapter 28. Short history</h2></div></div></div><p>This chapter aims to be a brief record of the life of the -Erlang.mk project.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_before_erlang_mk"></a>28.1. Before Erlang.mk</h2></div></div></div><p>Erlang.mk originates from the Cowboy project. Cowboy started +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="why.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="contributing.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="history"></a>Chapter 29. Short history</h2></div></div></div><p>This chapter aims to be a brief record of the life of the +Erlang.mk project.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_before_erlang_mk"></a>29.1. Before Erlang.mk</h2></div></div></div><p>Erlang.mk originates from the Cowboy project. Cowboy started as a Rebar project and I, Loïc Hoguin, was very happy with it for a couple years. Over time however I started getting annoyed and frustrated by a number of things, including bad defaults, @@ -46,7 +46,7 @@ than a minute to complete.</p><p>Following this success I started removing a lit on the fateful day of January 5th, 2013, removed the dependency on Rebar entirely. Rebar, and in particular the concept of dependencies, was, and still is, a pretty strong influence.</p><p>Erlang.mk was conceived.</p><p>A few months passed and, on May 1st, 2013, the Erlang.mk -repository was created. Erlang.mk was born.</p><p>Little did I know how much it would grow.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_lifetime_of_the_project"></a>28.2. Lifetime of the project</h2></div></div></div><p>Erlang.mk would eventually become a much larger file able to +repository was created. Erlang.mk was born.</p><p>Little did I know how much it would grow.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_lifetime_of_the_project"></a>29.2. Lifetime of the project</h2></div></div></div><p>Erlang.mk would eventually become a much larger file able to deal with many more projects than just Cowboy. From the birth of the project, the biggest force for growth was user contributions, because Erlang.mk appealed to a variety of people with different diff --git a/guide/index.html b/guide/index.html index ac7ea7e..88e29e1 100644 --- a/guide/index.html +++ b/guide/index.html @@ -33,7 +33,7 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="installation.html">Next</a></td></tr></table><hr /></div><div xml:lang="en" class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="idm45640086443744"></a>Erlang.mk User Guide</h1></div><div><div class="author"><h3 class="author"><span class="firstname">Loïc</span> <span class="surname">Hoguin</span></h3><code class="email"><<a class="email" href="mailto:[email protected]">[email protected]</a>></code></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="installation.html">1. Installation</a></span></dt><dd><dl><dt><span class="section"><a href="installation.html#_on_unix">1.1. On Unix</a></span></dt><dt><span class="section"><a href="installation.html#_on_windows">1.2. On Windows</a></span></dt></dl></dd><dt><span class="chapter"><a href="getting_started.html">2. Getting started</a></span></dt><dd><dl><dt><span class="section"><a href="getting_started.html#_creating_a_folder_for_your_project">2.1. Creating a folder for your project</a></span></dt><dt><span class="section"><a href="getting_started.html#_downloading_erlang_mk">2.2. Downloading Erlang.mk</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_started_with_otp_applications">2.3. Getting started with OTP applications</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_started_with_otp_libraries">2.4. Getting started with OTP libraries</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_started_with_otp_releases">2.5. Getting started with OTP releases</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_started_from_scratch">2.6. Getting started from scratch</a></span></dt><dt><span class="section"><a href="getting_started.html#_using_spaces_instead_of_tabs">2.7. Using spaces instead of tabs</a></span></dt><dt><span class="section"><a href="getting_started.html#_using_templates">2.8. Using templates</a></span></dt><dt><span class="section"><a href="getting_started.html#_hiding_erlang_mk_from_git">2.9. Hiding Erlang.mk from git</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_help">2.10. Getting help</a></span></dt></dl></dd><dt><span class="chapter"><a href="overview.html">3. Overview</a></span></dt><dd><dl><dt><span class="section"><a href="overview.html#_building_your_project">3.1. Building your project</a></span></dt><dt><span class="section"><a href="overview.html#_exploring_the_package_index">3.2. Exploring the package index</a></span></dt><dt><span class="section"><a href="overview.html#_generating_documentation">3.3. Generating documentation</a></span></dt><dt><span class="section"><a href="overview.html#_running_tests">3.4. Running tests</a></span></dt><dt><span class="section"><a href="overview.html#_need_more">3.5. Need more?</a></span></dt></dl></dd><dt><span class="chapter"><a href="updating.html">4. Updating Erlang.mk</a></span></dt><dd><dl><dt><span class="section"><a href="updating.html#_initial_bootstrap">4.1. Initial bootstrap</a></span></dt><dt><span class="section"><a href="updating.html#_updating">4.2. Updating</a></span></dt><dt><span class="section"><a href="updating.html#_customizing_the_build">4.3. Customizing the build</a></span></dt></dl></dd><dt><span class="chapter"><a href="limitations.html">5. Limitations</a></span></dt><dd><dl><dt><span class="section"><a href="limitations.html#_erlang_must_be_available">5.1. Erlang must be available</a></span></dt><dt><span class="section"><a href="limitations.html#_spaces_in_path">5.2. Spaces in path</a></span></dt><dt><span class="section"><a href="limitations.html#_dependency_tracking_and_modification_times">5.3. Dependency tracking and modification times</a></span></dt></dl></dd><dt><span class="part"><a href="code.html">I. Code</a></span></dt><dd><dl><dt><span class="chapter"><a href="building.html">6. Building</a></span></dt><dd><dl><dt><span class="section"><a href="building.html#_how_to_build">6.1. How to build</a></span></dt><dt><span class="section"><a href="building.html#_what_to_build">6.2. What to build</a></span></dt><dt><span class="section"><a href="building.html#_application_resource_file">6.3. Application resource file</a></span></dt><dt><span class="section"><a href="building.html#_automatic_application_resource_file_values">6.4. Automatic application resource file values</a></span></dt><dt><span class="section"><a href="building.html#_file_formats">6.5. File formats</a></span></dt><dt><span class="section"><a href="building.html#_compilation_options">6.6. Compilation options</a></span></dt><dt><span class="section"><a href="building.html#_cold_and_hot_builds">6.7. Cold and hot builds</a></span></dt><dt><span class="section"><a href="building.html#_dependency_tracking">6.8. Dependency tracking</a></span></dt><dt><span class="section"><a href="building.html#_generating_erlang_source">6.9. Generating Erlang source</a></span></dt><dt><span class="section"><a href="building.html#_cleaning">6.10. Cleaning</a></span></dt></dl></dd><dt><span class="chapter"><a href="deps.html">7. Packages and dependencies</a></span></dt><dd><dl><dt><span class="section"><a href="deps.html#_searching_packages">7.1. Searching packages</a></span></dt><dt><span class="section"><a href="deps.html#_adding_dependencies_to_your_project">7.2. Adding dependencies to your project</a></span></dt><dt><span class="section"><a href="deps.html#_how_deps_are_fetched_and_built">7.3. How deps are fetched and built</a></span></dt><dt><span class="section"><a href="deps.html#_fetching_and_listing_dependencies_only">7.4. Fetching and listing dependencies only</a></span></dt><dt><span class="section"><a href="deps.html#_ignoring_unwanted_dependencies">7.5. Ignoring unwanted dependencies</a></span></dt><dt><span class="section"><a href="deps.html#_dependencies_directory">7.6. Dependencies directory</a></span></dt><dt><span class="section"><a href="deps.html#_many_applications_in_one_repository">7.7. Many applications in one repository</a></span></dt><dt><span class="section"><a href="deps.html#_repositories_with_no_application_at_the_root_level">7.8. Repositories with no application at the root level</a></span></dt><dt><span class="section"><a href="deps.html#_autopatch">7.9. Autopatch</a></span></dt><dt><span class="section"><a href="deps.html#_dealing_with_duplicate_modules">7.10. Dealing with duplicate modules</a></span></dt><dt><span class="section"><a href="deps.html#_skipping_deps">7.11. Skipping deps</a></span></dt></dl></dd><dt><span class="chapter"><a href="ports.html">8. NIFs and port drivers</a></span></dt><dd><dl><dt><span class="section"><a href="ports.html#_c_source_code_location_and_erlang_environment">8.1. C source code location and Erlang environment</a></span></dt><dt><span class="section"><a href="ports.html#_using_a_custom_makefile">8.2. Using a custom Makefile</a></span></dt><dt><span class="section"><a href="ports.html#_using_erlang_mk_directly">8.3. Using Erlang.mk directly</a></span></dt><dt><span class="section"><a href="ports.html#_propagating_compile_and_linker_flags_to_sub_makefiles">8.4. Propagating compile and linker flags to sub-Makefiles</a></span></dt></dl></dd><dt><span class="chapter"><a href="relx.html">9. Releases</a></span></dt><dd><dl><dt><span class="section"><a href="relx.html#_setup">9.1. Setup</a></span></dt><dt><span class="section"><a href="relx.html#_configuration">9.2. Configuration</a></span></dt><dt><span class="section"><a href="relx.html#_generating_the_release">9.3. Generating the release</a></span></dt><dt><span class="section"><a href="relx.html#_running_the_release">9.4. Running the release</a></span></dt><dt><span class="section"><a href="relx.html#_upgrading_a_release">9.5. Upgrading a release</a></span></dt><dt><span class="section"><a href="relx.html#_getting_relx_semver_value">9.6. Getting Relx semver value</a></span></dt></dl></dd><dt><span class="chapter"><a href="sfx.html">10. Self-extracting releases</a></span></dt><dd><dl><dt><span class="section"><a href="sfx.html#_generating_the_self_extracting_archive">10.1. Generating the self-extracting archive</a></span></dt><dt><span class="section"><a href="sfx.html#_running_the_release_2">10.2. Running the release</a></span></dt></dl></dd><dt><span class="chapter"><a href="escript.html">11. Escripts</a></span></dt><dd><dl><dt><span class="section"><a href="escript.html#_requirements">11.1. Requirements</a></span></dt><dt><span class="section"><a href="escript.html#_generating_an_escript">11.2. Generating an escript</a></span></dt><dt><span class="section"><a href="escript.html#_configuration_2">11.3. Configuration</a></span></dt><dt><span class="section"><a href="escript.html#_extra_files">11.4. Extra files</a></span></dt><dt><span class="section"><a href="escript.html#_optimizing_for_size">11.5. Optimizing for size</a></span></dt></dl></dd><dt><span class="chapter"><a href="kerl.html">12. OTP version management</a></span></dt><dd><dl><dt><span class="section"><a href="kerl.html#_erlang_versions">12.1. Erlang versions</a></span></dt><dt><span class="section"><a href="kerl.html#otp_version_pinning">12.2. OTP version pinning</a></span></dt><dt><span class="section"><a href="kerl.html#_continuous_integration">12.3. Continuous integration</a></span></dt><dt><span class="section"><a href="kerl.html#_configuring_kerl">12.4. Configuring Kerl</a></span></dt></dl></dd><dt><span class="chapter"><a href="compat.html">13. Compatibility with other build tools</a></span></dt><dd><dl><dt><span class="section"><a href="compat.html#_rebar_projects_as_erlang_mk_dependencies">13.1. Rebar projects as Erlang.mk dependencies</a></span></dt><dt><span class="section"><a href="compat.html#_erlang_mk_projects_as_rebar_dependencies">13.2. Erlang.mk projects as Rebar dependencies</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="docs.html">II. Documentation</a></span></dt><dd><dl><dt><span class="chapter"><a href="asciidoc.html">14. AsciiDoc documentation</a></span></dt><dd><dl><dt><span class="section"><a href="asciidoc.html#_requirements_2">14.1. Requirements</a></span></dt><dt><span class="section"><a href="asciidoc.html#_writing_asciidoc_documentation">14.2. Writing AsciiDoc documentation</a></span></dt><dt><span class="section"><a href="asciidoc.html#_configuration_3">14.3. Configuration</a></span></dt><dt><span class="section"><a href="asciidoc.html#_usage">14.4. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="edoc.html">15. EDoc comments</a></span></dt><dd><dl><dt><span class="section"><a href="edoc.html#_writing_edoc_comments">15.1. Writing EDoc comments</a></span></dt><dt><span class="section"><a href="edoc.html#_configuration_4">15.2. Configuration</a></span></dt><dt><span class="section"><a href="edoc.html#_usage_2">15.3. Usage</a></span></dt><dt><span class="section"><a href="edoc.html#_running_edoc_on_all_applications">15.4. Running EDoc on all applications</a></span></dt></dl></dd><dt><span class="chapter"><a href="sphinx.html">16. Sphinx documentation</a></span></dt><dd><dl><dt><span class="section"><a href="sphinx.html#_writing_sphinx_documentation">16.1. Writing Sphinx documentation</a></span></dt><dt><span class="section"><a href="sphinx.html#_basic_setup">16.2. Basic setup</a></span></dt><dt><span class="section"><a href="sphinx.html#_erlang_mk_configuration">16.3. Erlang.mk configuration</a></span></dt><dt><span class="section"><a href="sphinx.html#_generating_man_pages">16.4. Generating man pages</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="tests.html">III. Tests</a></span></dt><dd><dl><dt><span class="chapter"><a href="shell.html">17. Erlang shell</a></span></dt><dd><dl><dt><span class="section"><a href="shell.html#_configuration_5">17.1. Configuration</a></span></dt><dt><span class="section"><a href="shell.html#_usage_3">17.2. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="eunit.html">18. EUnit</a></span></dt><dd><dl><dt><span class="section"><a href="eunit.html#_writing_tests">18.1. Writing tests</a></span></dt><dt><span class="section"><a href="eunit.html#_configuration_6">18.2. Configuration</a></span></dt><dt><span class="section"><a href="eunit.html#_usage_4">18.3. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="ct.html">19. Common Test</a></span></dt><dd><dl><dt><span class="section"><a href="ct.html#_writing_tests_2">19.1. Writing tests</a></span></dt><dt><span class="section"><a href="ct.html#_configuration_7">19.2. Configuration</a></span></dt><dt><span class="section"><a href="ct.html#_usage_5">19.3. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="triq.html">20. Triq</a></span></dt><dt><span class="chapter"><a href="coverage.html">21. Code coverage</a></span></dt><dt><span class="chapter"><a href="ci.html">22. Continuous integration</a></span></dt><dd><dl><dt><span class="section"><a href="ci.html#_configuring_erlang_otp_versions_to_test">22.1. Configuring Erlang/OTP versions to test</a></span></dt><dt><span class="section"><a href="ci.html#_running_tests_across_all_configured_versions">22.2. Running tests across all configured versions</a></span></dt><dt><span class="section"><a href="ci.html#_extending_the_ci_targets">22.3. Extending the CI targets</a></span></dt></dl></dd><dt><span class="chapter"><a href="dialyzer.html">23. Dialyzer</a></span></dt><dd><dl><dt><span class="section"><a href="dialyzer.html#_how_it_works">23.1. How it works</a></span></dt><dt><span class="section"><a href="dialyzer.html#_configuration_8">23.2. Configuration</a></span></dt><dt><span class="section"><a href="dialyzer.html#_usage_6">23.3. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="xref.html">24. Xref</a></span></dt></dl></dd><dt><span class="part"><a href="plugins.html">IV. Third-party plugins</a></span></dt><dd><dl><dt><span class="chapter"><a href="plugins_usage.html">25. External plugins</a></span></dt><dd><dl><dt><span class="section"><a href="plugins_usage.html#_loading_all_plugins_from_a_dependency">25.1. Loading all plugins from a dependency</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_loading_one_plugin_from_a_dependency">25.2. Loading one plugin from a dependency</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_writing_external_plugins">25.3. Writing external plugins</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_early_stage_plugins">25.4. Early-stage plugins</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_loading_plugins_local_to_the_application">25.5. Loading plugins local to the application</a></span></dt></dl></dd><dt><span class="chapter"><a href="plugins_list.html">26. List of plugins</a></span></dt><dd><dl><dt><span class="section"><a href="plugins_list.html#_efene_mk">26.1. efene.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_elixir_mk">26.2. elixir.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_elvis_mk">26.3. elvis.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_geas">26.4. geas</a></span></dt><dt><span class="section"><a href="plugins_list.html#_hexer_mk">26.5. hexer.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_hexpm_mk">26.6. hexpm.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_jorel">26.7. jorel</a></span></dt><dt><span class="section"><a href="plugins_list.html#_lfe_mk">26.8. lfe.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_mix_mk">26.9. mix.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_reload_mk">26.10. reload.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_rust_mk">26.11. rust.mk</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="about.html">V. About Erlang.mk</a></span></dt><dd><dl><dt><span class="chapter"><a href="why.html">27. Why Erlang.mk</a></span></dt><dd><dl><dt><span class="section"><a href="why.html#_erlang_mk_is_fast">27.1. Erlang.mk is fast</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_gives_you_the_full_power_of_unix">27.2. Erlang.mk gives you the full power of Unix</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_is_a_text_file">27.3. Erlang.mk is a text file</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_can_manage_erlang_itself">27.4. Erlang.mk can manage Erlang itself</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_can_do_more_than_erlang">27.5. Erlang.mk can do more than Erlang</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_integrates_nicely_in_make_and_automake_projects">27.6. Erlang.mk integrates nicely in Make and Automake projects</a></span></dt></dl></dd><dt><span class="chapter"><a href="history.html">28. Short history</a></span></dt><dd><dl><dt><span class="section"><a href="history.html#_before_erlang_mk">28.1. Before Erlang.mk</a></span></dt><dt><span class="section"><a href="history.html#_lifetime_of_the_project">28.2. Lifetime of the project</a></span></dt></dl></dd><dt><span class="chapter"><a href="contributing.html">29. Contributing</a></span></dt><dd><dl><dt><span class="section"><a href="contributing.html#_priorities">29.1. Priorities</a></span></dt><dt><span class="section"><a href="contributing.html#_bugs">29.2. Bugs</a></span></dt><dt><span class="section"><a href="contributing.html#_code">29.3. Code</a></span></dt><dt><span class="section"><a href="contributing.html#_packages">29.4. Packages</a></span></dt><dt><span class="section"><a href="contributing.html#_documentation">29.5. Documentation</a></span></dt><dt><span class="section"><a href="contributing.html#_feature_requests">29.6. Feature requests</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="installation.html">Next</a></td></tr></table></div> +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="installation.html">Next</a></td></tr></table><hr /></div><div xml:lang="en" class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="idm45214159196544"></a>Erlang.mk User Guide</h1></div><div><div class="author"><h3 class="author"><span class="firstname">Loïc</span> <span class="surname">Hoguin</span></h3><code class="email"><<a class="email" href="mailto:[email protected]">[email protected]</a>></code></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="installation.html">1. Installation</a></span></dt><dd><dl><dt><span class="section"><a href="installation.html#_on_unix">1.1. On Unix</a></span></dt><dt><span class="section"><a href="installation.html#_on_windows">1.2. On Windows</a></span></dt></dl></dd><dt><span class="chapter"><a href="getting_started.html">2. Getting started</a></span></dt><dd><dl><dt><span class="section"><a href="getting_started.html#_creating_a_folder_for_your_project">2.1. Creating a folder for your project</a></span></dt><dt><span class="section"><a href="getting_started.html#_downloading_erlang_mk">2.2. Downloading Erlang.mk</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_started_with_otp_applications">2.3. Getting started with OTP applications</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_started_with_otp_libraries">2.4. Getting started with OTP libraries</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_started_with_otp_releases">2.5. Getting started with OTP releases</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_started_from_scratch">2.6. Getting started from scratch</a></span></dt><dt><span class="section"><a href="getting_started.html#_using_spaces_instead_of_tabs">2.7. Using spaces instead of tabs</a></span></dt><dt><span class="section"><a href="getting_started.html#_using_templates">2.8. Using templates</a></span></dt><dt><span class="section"><a href="getting_started.html#_hiding_erlang_mk_from_git">2.9. Hiding Erlang.mk from git</a></span></dt><dt><span class="section"><a href="getting_started.html#_getting_help">2.10. Getting help</a></span></dt></dl></dd><dt><span class="chapter"><a href="overview.html">3. Overview</a></span></dt><dd><dl><dt><span class="section"><a href="overview.html#_building_your_project">3.1. Building your project</a></span></dt><dt><span class="section"><a href="overview.html#_exploring_the_package_index">3.2. Exploring the package index</a></span></dt><dt><span class="section"><a href="overview.html#_generating_documentation">3.3. Generating documentation</a></span></dt><dt><span class="section"><a href="overview.html#_running_tests">3.4. Running tests</a></span></dt><dt><span class="section"><a href="overview.html#_need_more">3.5. Need more?</a></span></dt></dl></dd><dt><span class="chapter"><a href="updating.html">4. Updating Erlang.mk</a></span></dt><dd><dl><dt><span class="section"><a href="updating.html#_initial_bootstrap">4.1. Initial bootstrap</a></span></dt><dt><span class="section"><a href="updating.html#_updating">4.2. Updating</a></span></dt><dt><span class="section"><a href="updating.html#_customizing_the_build">4.3. Customizing the build</a></span></dt></dl></dd><dt><span class="chapter"><a href="limitations.html">5. Limitations</a></span></dt><dd><dl><dt><span class="section"><a href="limitations.html#_erlang_must_be_available">5.1. Erlang must be available</a></span></dt><dt><span class="section"><a href="limitations.html#_spaces_in_path">5.2. Spaces in path</a></span></dt><dt><span class="section"><a href="limitations.html#_dependency_tracking_and_modification_times">5.3. Dependency tracking and modification times</a></span></dt></dl></dd><dt><span class="part"><a href="code.html">I. Code</a></span></dt><dd><dl><dt><span class="chapter"><a href="building.html">6. Building</a></span></dt><dd><dl><dt><span class="section"><a href="building.html#_how_to_build">6.1. How to build</a></span></dt><dt><span class="section"><a href="building.html#_what_to_build">6.2. What to build</a></span></dt><dt><span class="section"><a href="building.html#_application_resource_file">6.3. Application resource file</a></span></dt><dt><span class="section"><a href="building.html#_automatic_application_resource_file_values">6.4. Automatic application resource file values</a></span></dt><dt><span class="section"><a href="building.html#_file_formats">6.5. File formats</a></span></dt><dt><span class="section"><a href="building.html#_compilation_options">6.6. Compilation options</a></span></dt><dt><span class="section"><a href="building.html#_cold_and_hot_builds">6.7. Cold and hot builds</a></span></dt><dt><span class="section"><a href="building.html#_dependency_tracking">6.8. Dependency tracking</a></span></dt><dt><span class="section"><a href="building.html#_generating_erlang_source">6.9. Generating Erlang source</a></span></dt><dt><span class="section"><a href="building.html#_cleaning">6.10. Cleaning</a></span></dt></dl></dd><dt><span class="chapter"><a href="deps.html">7. Packages and dependencies</a></span></dt><dd><dl><dt><span class="section"><a href="deps.html#_searching_packages">7.1. Searching packages</a></span></dt><dt><span class="section"><a href="deps.html#_adding_dependencies_to_your_project">7.2. Adding dependencies to your project</a></span></dt><dt><span class="section"><a href="deps.html#_how_deps_are_fetched_and_built">7.3. How deps are fetched and built</a></span></dt><dt><span class="section"><a href="deps.html#_fetching_and_listing_dependencies_only">7.4. Fetching and listing dependencies only</a></span></dt><dt><span class="section"><a href="deps.html#_ignoring_unwanted_dependencies">7.5. Ignoring unwanted dependencies</a></span></dt><dt><span class="section"><a href="deps.html#_dependencies_directory">7.6. Dependencies directory</a></span></dt><dt><span class="section"><a href="deps.html#_many_applications_in_one_repository">7.7. Many applications in one repository</a></span></dt><dt><span class="section"><a href="deps.html#_repositories_with_no_application_at_the_root_level">7.8. Repositories with no application at the root level</a></span></dt><dt><span class="section"><a href="deps.html#_autopatch">7.9. Autopatch</a></span></dt><dt><span class="section"><a href="deps.html#_dealing_with_duplicate_modules">7.10. Dealing with duplicate modules</a></span></dt><dt><span class="section"><a href="deps.html#_skipping_deps">7.11. Skipping deps</a></span></dt></dl></dd><dt><span class="chapter"><a href="ports.html">8. NIFs and port drivers</a></span></dt><dd><dl><dt><span class="section"><a href="ports.html#_c_source_code_location_and_erlang_environment">8.1. C source code location and Erlang environment</a></span></dt><dt><span class="section"><a href="ports.html#_using_a_custom_makefile">8.2. Using a custom Makefile</a></span></dt><dt><span class="section"><a href="ports.html#_using_erlang_mk_directly">8.3. Using Erlang.mk directly</a></span></dt><dt><span class="section"><a href="ports.html#_propagating_compile_and_linker_flags_to_sub_makefiles">8.4. Propagating compile and linker flags to sub-Makefiles</a></span></dt></dl></dd><dt><span class="chapter"><a href="relx.html">9. Releases</a></span></dt><dd><dl><dt><span class="section"><a href="relx.html#_setup">9.1. Setup</a></span></dt><dt><span class="section"><a href="relx.html#_configuration">9.2. Configuration</a></span></dt><dt><span class="section"><a href="relx.html#_generating_the_release">9.3. Generating the release</a></span></dt><dt><span class="section"><a href="relx.html#_running_the_release">9.4. Running the release</a></span></dt><dt><span class="section"><a href="relx.html#_upgrading_a_release">9.5. Upgrading a release</a></span></dt><dt><span class="section"><a href="relx.html#_getting_relx_semver_value">9.6. Getting Relx semver value</a></span></dt></dl></dd><dt><span class="chapter"><a href="sfx.html">10. Self-extracting releases</a></span></dt><dd><dl><dt><span class="section"><a href="sfx.html#_generating_the_self_extracting_archive">10.1. Generating the self-extracting archive</a></span></dt><dt><span class="section"><a href="sfx.html#_running_the_release_2">10.2. Running the release</a></span></dt></dl></dd><dt><span class="chapter"><a href="escript.html">11. Escripts</a></span></dt><dd><dl><dt><span class="section"><a href="escript.html#_requirements">11.1. Requirements</a></span></dt><dt><span class="section"><a href="escript.html#_generating_an_escript">11.2. Generating an escript</a></span></dt><dt><span class="section"><a href="escript.html#_configuration_2">11.3. Configuration</a></span></dt><dt><span class="section"><a href="escript.html#_extra_files">11.4. Extra files</a></span></dt><dt><span class="section"><a href="escript.html#_optimizing_for_size">11.5. Optimizing for size</a></span></dt></dl></dd><dt><span class="chapter"><a href="kerl.html">12. OTP version management</a></span></dt><dd><dl><dt><span class="section"><a href="kerl.html#_erlang_versions">12.1. Erlang versions</a></span></dt><dt><span class="section"><a href="kerl.html#otp_version_pinning">12.2. OTP version pinning</a></span></dt><dt><span class="section"><a href="kerl.html#_continuous_integration">12.3. Continuous integration</a></span></dt><dt><span class="section"><a href="kerl.html#_configuring_kerl">12.4. Configuring Kerl</a></span></dt></dl></dd><dt><span class="chapter"><a href="cross_compiling.html">13. Cross compiling</a></span></dt><dd><dl><dt><span class="section"><a href="cross_compiling.html#_compiling">13.1. Compiling</a></span></dt><dt><span class="section"><a href="cross_compiling.html#_building_the_release">13.2. Building the release</a></span></dt></dl></dd><dt><span class="chapter"><a href="compat.html">14. Compatibility with other build tools</a></span></dt><dd><dl><dt><span class="section"><a href="compat.html#_rebar_projects_as_erlang_mk_dependencies">14.1. Rebar projects as Erlang.mk dependencies</a></span></dt><dt><span class="section"><a href="compat.html#_erlang_mk_projects_as_rebar_dependencies">14.2. Erlang.mk projects as Rebar dependencies</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="docs.html">II. Documentation</a></span></dt><dd><dl><dt><span class="chapter"><a href="asciidoc.html">15. AsciiDoc documentation</a></span></dt><dd><dl><dt><span class="section"><a href="asciidoc.html#_requirements_2">15.1. Requirements</a></span></dt><dt><span class="section"><a href="asciidoc.html#_writing_asciidoc_documentation">15.2. Writing AsciiDoc documentation</a></span></dt><dt><span class="section"><a href="asciidoc.html#_configuration_3">15.3. Configuration</a></span></dt><dt><span class="section"><a href="asciidoc.html#_usage">15.4. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="edoc.html">16. EDoc comments</a></span></dt><dd><dl><dt><span class="section"><a href="edoc.html#_writing_edoc_comments">16.1. Writing EDoc comments</a></span></dt><dt><span class="section"><a href="edoc.html#_configuration_4">16.2. Configuration</a></span></dt><dt><span class="section"><a href="edoc.html#_usage_2">16.3. Usage</a></span></dt><dt><span class="section"><a href="edoc.html#_running_edoc_on_all_applications">16.4. Running EDoc on all applications</a></span></dt></dl></dd><dt><span class="chapter"><a href="sphinx.html">17. Sphinx documentation</a></span></dt><dd><dl><dt><span class="section"><a href="sphinx.html#_writing_sphinx_documentation">17.1. Writing Sphinx documentation</a></span></dt><dt><span class="section"><a href="sphinx.html#_basic_setup">17.2. Basic setup</a></span></dt><dt><span class="section"><a href="sphinx.html#_erlang_mk_configuration">17.3. Erlang.mk configuration</a></span></dt><dt><span class="section"><a href="sphinx.html#_generating_man_pages">17.4. Generating man pages</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="tests.html">III. Tests</a></span></dt><dd><dl><dt><span class="chapter"><a href="shell.html">18. Erlang shell</a></span></dt><dd><dl><dt><span class="section"><a href="shell.html#_configuration_5">18.1. Configuration</a></span></dt><dt><span class="section"><a href="shell.html#_usage_3">18.2. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="eunit.html">19. EUnit</a></span></dt><dd><dl><dt><span class="section"><a href="eunit.html#_writing_tests">19.1. Writing tests</a></span></dt><dt><span class="section"><a href="eunit.html#_configuration_6">19.2. Configuration</a></span></dt><dt><span class="section"><a href="eunit.html#_usage_4">19.3. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="ct.html">20. Common Test</a></span></dt><dd><dl><dt><span class="section"><a href="ct.html#_writing_tests_2">20.1. Writing tests</a></span></dt><dt><span class="section"><a href="ct.html#_configuration_7">20.2. Configuration</a></span></dt><dt><span class="section"><a href="ct.html#_usage_5">20.3. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="triq.html">21. Triq</a></span></dt><dt><span class="chapter"><a href="coverage.html">22. Code coverage</a></span></dt><dt><span class="chapter"><a href="ci.html">23. Continuous integration</a></span></dt><dd><dl><dt><span class="section"><a href="ci.html#_configuring_erlang_otp_versions_to_test">23.1. Configuring Erlang/OTP versions to test</a></span></dt><dt><span class="section"><a href="ci.html#_running_tests_across_all_configured_versions">23.2. Running tests across all configured versions</a></span></dt><dt><span class="section"><a href="ci.html#_extending_the_ci_targets">23.3. Extending the CI targets</a></span></dt></dl></dd><dt><span class="chapter"><a href="dialyzer.html">24. Dialyzer</a></span></dt><dd><dl><dt><span class="section"><a href="dialyzer.html#_how_it_works">24.1. How it works</a></span></dt><dt><span class="section"><a href="dialyzer.html#_configuration_8">24.2. Configuration</a></span></dt><dt><span class="section"><a href="dialyzer.html#_usage_6">24.3. Usage</a></span></dt><dt><span class="section"><a href="dialyzer.html#_dialyzing_beam_files">24.4. Dialyzing beam files</a></span></dt></dl></dd><dt><span class="chapter"><a href="xref.html">25. Xref</a></span></dt></dl></dd><dt><span class="part"><a href="plugins.html">IV. Third-party plugins</a></span></dt><dd><dl><dt><span class="chapter"><a href="plugins_usage.html">26. External plugins</a></span></dt><dd><dl><dt><span class="section"><a href="plugins_usage.html#_loading_all_plugins_from_a_dependency">26.1. Loading all plugins from a dependency</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_loading_one_plugin_from_a_dependency">26.2. Loading one plugin from a dependency</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_writing_external_plugins">26.3. Writing external plugins</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_early_stage_plugins">26.4. Early-stage plugins</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_loading_plugins_local_to_the_application">26.5. Loading plugins local to the application</a></span></dt></dl></dd><dt><span class="chapter"><a href="plugins_list.html">27. List of plugins</a></span></dt><dd><dl><dt><span class="section"><a href="plugins_list.html#_ci_erlang_mk">27.1. ci.erlang.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_efene_mk">27.2. efene.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_elixir_mk">27.3. elixir.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_elvis_mk">27.4. elvis.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_geas">27.5. geas</a></span></dt><dt><span class="section"><a href="plugins_list.html#_hexer_mk">27.6. hexer.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_hexpm_mk">27.7. hexpm.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_jorel">27.8. jorel</a></span></dt><dt><span class="section"><a href="plugins_list.html#_lfe_mk">27.9. lfe.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_mix_mk">27.10. mix.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_reload_mk">27.11. reload.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_rust_mk">27.12. rust.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_version_mk">27.13. version.mk</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="about.html">V. About Erlang.mk</a></span></dt><dd><dl><dt><span class="chapter"><a href="why.html">28. Why Erlang.mk</a></span></dt><dd><dl><dt><span class="section"><a href="why.html#_erlang_mk_is_fast">28.1. Erlang.mk is fast</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_gives_you_the_full_power_of_unix">28.2. Erlang.mk gives you the full power of Unix</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_is_a_text_file">28.3. Erlang.mk is a text file</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_can_manage_erlang_itself">28.4. Erlang.mk can manage Erlang itself</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_can_do_more_than_erlang">28.5. Erlang.mk can do more than Erlang</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_integrates_nicely_in_make_and_automake_projects">28.6. Erlang.mk integrates nicely in Make and Automake projects</a></span></dt></dl></dd><dt><span class="chapter"><a href="history.html">29. Short history</a></span></dt><dd><dl><dt><span class="section"><a href="history.html#_before_erlang_mk">29.1. Before Erlang.mk</a></span></dt><dt><span class="section"><a href="history.html#_lifetime_of_the_project">29.2. Lifetime of the project</a></span></dt></dl></dd><dt><span class="chapter"><a href="contributing.html">30. Contributing</a></span></dt><dd><dl><dt><span class="section"><a href="contributing.html#_priorities">30.1. Priorities</a></span></dt><dt><span class="section"><a href="contributing.html#_bugs">30.2. Bugs</a></span></dt><dt><span class="section"><a href="contributing.html#_code">30.3. Code</a></span></dt><dt><span class="section"><a href="contributing.html#_packages">30.4. Packages</a></span></dt><dt><span class="section"><a href="contributing.html#_documentation">30.5. Documentation</a></span></dt><dt><span class="section"><a href="contributing.html#_feature_requests">30.6. Feature requests</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="installation.html">Next</a></td></tr></table></div> </main> </body> </html> diff --git a/guide/kerl.html b/guide/kerl.html index 72a0aa5..1b4348e 100644 --- a/guide/kerl.html +++ b/guide/kerl.html @@ -33,7 +33,7 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="escript.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="compat.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="kerl"></a>Chapter 12. OTP version management</h2></div></div></div><p>Erlang.mk comes with integrated support for +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="escript.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="cross_compiling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="kerl"></a>Chapter 12. OTP version management</h2></div></div></div><p>Erlang.mk comes with integrated support for <a class="ulink" href="https://github.com/kerl/kerl" target="_top">Kerl</a>, a shell script that automates the downloading, building and installing of Erlang/OTP. It can be used to easily build a specific @@ -62,13 +62,13 @@ use the version you configured.</p><p>Note that there has been reports that this is not compatible with the <code class="literal">.ONESHELL</code> feature from GNU Make.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_continuous_integration"></a>12.3. Continuous integration</h2></div></div></div><p>Erlang.mk can automatically test your project against many different Erlang/OTP versions. This functionality -is documented in the <a class="link" href="ci.html" title="Chapter 22. Continuous integration">Continuous integration</a> chapter.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuring_kerl"></a>12.4. Configuring Kerl</h2></div></div></div><p>All of the Kerl variables can be configured directly in the +is documented in the <a class="link" href="ci.html" title="Chapter 23. Continuous integration">Continuous integration</a> chapter.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuring_kerl"></a>12.4. Configuring Kerl</h2></div></div></div><p>All of the Kerl variables can be configured directly in the Makefile. All you need to do is to export them. For example, to change the installation directory for the Erlang/OTP versions managed by Kerl, you could add the following to your Makefile:</p><pre class="programlisting">export KERL_INSTALL_DIR = $(CURDIR)/erlang</pre><p>When configuring paths like this, always make sure to provide an absolute path in the value. Erlang.mk will NOT expand them -automatically for you.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="escript.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="code.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="compat.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> +automatically for you.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="escript.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="code.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="cross_compiling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> </body> </html> diff --git a/guide/overview.html b/guide/overview.html index 87768e4..c78efdc 100644 --- a/guide/overview.html +++ b/guide/overview.html @@ -47,24 +47,24 @@ meant to be used for discovery purposes.</p><p>No package is ever installed, the and are always project-specific. They can be thought of as a shortcut over plain dependencies.</p><p>You can get a list of all packages known to Erlang.mk by using the <code class="literal">search</code> target:</p><pre class="programlisting">$ make search</pre><p>You can also use this target to search across all packages, for -example to find all packages related to Cowboy:</p><pre class="programlisting">$ make search q=cowboy</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_generating_documentation"></a>3.3. Generating documentation</h2></div></div></div><p>Erlang.mk supports <span class="emphasis"><em>EDoc</em></span> and <span class="emphasis"><em>Asciidoc</em></span>.</p><p><a class="link" href="edoc.html" title="Chapter 15. EDoc comments">EDoc</a> generates HTML documentation directly from +example to find all packages related to Cowboy:</p><pre class="programlisting">$ make search q=cowboy</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_generating_documentation"></a>3.3. Generating documentation</h2></div></div></div><p>Erlang.mk supports <span class="emphasis"><em>EDoc</em></span> and <span class="emphasis"><em>Asciidoc</em></span>.</p><p><a class="link" href="edoc.html" title="Chapter 16. EDoc comments">EDoc</a> generates HTML documentation directly from your source code.</p><p>While it is convenient, ask yourself: if all the documentation is inside the source code, why not just open the source code directly? -That’s where <span class="emphasis"><em>Asciidoc</em></span> comes in.</p><p>The <a class="link" href="asciidoc.html" title="Chapter 14. AsciiDoc documentation">Asciidoc</a> plugin expects all documentation +That’s where <span class="emphasis"><em>Asciidoc</em></span> comes in.</p><p>The <a class="link" href="asciidoc.html" title="Chapter 15. AsciiDoc documentation">Asciidoc</a> plugin expects all documentation to be separate from source. It will generate HTML, PDF, man pages and more from the documentation you write in the <span class="emphasis"><em>doc/src/</em></span> folder in your repository.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_running_tests"></a>3.4. Running tests</h2></div></div></div><p>Erlang.mk supports a lot of different testing and static -analysis tools.</p><p>The <a class="link" href="shell.html" title="Chapter 17. Erlang shell">make shell</a> command allows you +analysis tools.</p><p>The <a class="link" href="shell.html" title="Chapter 18. Erlang shell">make shell</a> command allows you to test your project manually. You can automate these -unit tests with <a class="link" href="eunit.html" title="Chapter 18. EUnit">EUnit</a> and test -your entire system with <a class="link" href="ct.html" title="Chapter 19. Common Test">Common Test</a>. -<a class="link" href="coverage.html" title="Chapter 21. Code coverage">Code coverage</a> can of course +unit tests with <a class="link" href="eunit.html" title="Chapter 19. EUnit">EUnit</a> and test +your entire system with <a class="link" href="ct.html" title="Chapter 20. Common Test">Common Test</a>. +<a class="link" href="coverage.html" title="Chapter 22. Code coverage">Code coverage</a> can of course be enabled during tests.</p><p>Erlang.mk comes with features to make your life easier when -setting up and using <a class="link" href="ci.html" title="Chapter 22. Continuous integration">Continuous integration</a>.</p><p>On the static analysis side of things, Erlang.mk comes with -support for <a class="link" href="dialyzer.html" title="Chapter 23. Dialyzer">Dialyzer</a> and <a class="link" href="xref.html" title="Chapter 24. Xref">Xref</a>, +setting up and using <a class="link" href="ci.html" title="Chapter 23. Continuous integration">Continuous integration</a>.</p><p>On the static analysis side of things, Erlang.mk comes with +support for <a class="link" href="dialyzer.html" title="Chapter 24. Dialyzer">Dialyzer</a> and <a class="link" href="xref.html" title="Chapter 25. Xref">Xref</a>, to perform success typing analysis and cross referencing -of the code.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_need_more"></a>3.5. Need more?</h2></div></div></div><p>Not convinced yet? You can read about <a class="link" href="why.html" title="Chapter 27. Why Erlang.mk">why you should use Erlang.mk</a> -and its <a class="link" href="history.html" title="Chapter 28. Short history">history</a>. And if you’re still not +of the code.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_need_more"></a>3.5. Need more?</h2></div></div></div><p>Not convinced yet? You can read about <a class="link" href="why.html" title="Chapter 28. Why Erlang.mk">why you should use Erlang.mk</a> +and its <a class="link" href="history.html" title="Chapter 29. Short history">history</a>. And if you’re still not convinced after that, it’s OK! The world would be boring if everyone agreed on everything all the time.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="getting_started.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="updating.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> diff --git a/guide/plugins_list.html b/guide/plugins_list.html index 2a4e5bc..18d1a8f 100644 --- a/guide/plugins_list.html +++ b/guide/plugins_list.html @@ -33,21 +33,23 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="plugins_usage.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="about.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="plugins_list"></a>Chapter 26. List of plugins</h2></div></div></div><p>This is a non-exhaustive list of Erlang.mk plugins, sorted -alphabetically.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_efene_mk"></a>26.1. efene.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/ninenines/efene.mk" target="_top">Efene plugin</a> for Erlang.mk. -<a class="ulink" href="http://efene.org/" target="_top">Efene</a> is an alternative language for the BEAM.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_elixir_mk"></a>26.2. elixir.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/botsunit/elixir.mk" target="_top">Elixir plugin</a> for +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="plugins_usage.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="about.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="plugins_list"></a>Chapter 27. List of plugins</h2></div></div></div><p>This is a non-exhaustive list of Erlang.mk plugins, sorted +alphabetically.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ci_erlang_mk"></a>27.1. ci.erlang.mk</h2></div></div></div><p>A <a class="ulink" href="https://github.com/ninenines/ci.erlang.mk" target="_top">plugin</a> that keeps +track of released OTP versions to always run CI builds on the +most recent patch(es).</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_efene_mk"></a>27.2. efene.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/ninenines/efene.mk" target="_top">Efene plugin</a> for Erlang.mk. +<a class="ulink" href="http://efene.org/" target="_top">Efene</a> is an alternative language for the BEAM.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_elixir_mk"></a>27.3. elixir.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/botsunit/elixir.mk" target="_top">Elixir plugin</a> for Erlang.mk. <a class="ulink" href="http://elixir-lang.org/" target="_top">Elixir</a> is an alternative -language for the BEAM.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_elvis_mk"></a>26.3. elvis.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/inaka/elvis.mk" target="_top">Elvis plugin</a> for Erlang.mk. -Elvis is an <a class="ulink" href="https://github.com/inaka/elvis" target="_top">Erlang style reviewer</a>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_geas"></a>26.4. geas</h2></div></div></div><p><a class="ulink" href="https://github.com/crownedgrouse/geas" target="_top">Geas</a> gives aggregated +language for the BEAM.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_elvis_mk"></a>27.4. elvis.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/inaka/elvis.mk" target="_top">Elvis plugin</a> for Erlang.mk. +Elvis is an <a class="ulink" href="https://github.com/inaka/elvis" target="_top">Erlang style reviewer</a>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_geas"></a>27.5. geas</h2></div></div></div><p><a class="ulink" href="https://github.com/crownedgrouse/geas" target="_top">Geas</a> gives aggregated information on a project and its dependencies, and is available -as an Erlang.mk plugin.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_hexer_mk"></a>26.5. hexer.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/inaka/hexer.mk" target="_top">Hex plugin</a> for Erlang.mk -using the <code class="literal">hexer</code> tool.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_hexpm_mk"></a>26.6. hexpm.mk</h2></div></div></div><p>Another <a class="ulink" href="https://github.com/botsunit/hexpm.mk" target="_top">Hex plugin</a> for -Erlang.mk, with support for Hex dependency operators.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_jorel"></a>26.7. jorel</h2></div></div></div><p><a class="ulink" href="https://github.com/emedia-project/jorel" target="_top">Jorel</a> is Just anOther RELease -assembler for Erlang/OTP, and is available as an Erlang.mk plugin.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_lfe_mk"></a>26.8. lfe.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/ninenines/lfe.mk" target="_top">LFE plugin</a> for Erlang.mk. +as an Erlang.mk plugin.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_hexer_mk"></a>27.6. hexer.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/inaka/hexer.mk" target="_top">Hex plugin</a> for Erlang.mk +using the <code class="literal">hexer</code> tool.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_hexpm_mk"></a>27.7. hexpm.mk</h2></div></div></div><p>Another <a class="ulink" href="https://github.com/botsunit/hexpm.mk" target="_top">Hex plugin</a> for +Erlang.mk, with support for Hex dependency operators.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_jorel"></a>27.8. jorel</h2></div></div></div><p><a class="ulink" href="https://github.com/emedia-project/jorel" target="_top">Jorel</a> is Just anOther RELease +assembler for Erlang/OTP, and is available as an Erlang.mk plugin.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_lfe_mk"></a>27.9. lfe.mk</h2></div></div></div><p>An <a class="ulink" href="https://github.com/ninenines/lfe.mk" target="_top">LFE plugin</a> for Erlang.mk. LFE, or <a class="ulink" href="http://lfe.io/" target="_top">Lisp Flavoured Erlang</a>, is an alternative -language for the BEAM.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_mix_mk"></a>26.9. mix.mk</h2></div></div></div><p>A <a class="ulink" href="https://github.com/botsunit/mix.mk" target="_top">Mix plugin</a> for Erlang.mk, +language for the BEAM.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_mix_mk"></a>27.10. mix.mk</h2></div></div></div><p>A <a class="ulink" href="https://github.com/botsunit/mix.mk" target="_top">Mix plugin</a> for Erlang.mk, to generate a compatible configuration file for -<a class="ulink" href="http://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html" target="_top">Mix</a>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_reload_mk"></a>26.10. reload.mk</h2></div></div></div><p>A <a class="ulink" href="https://github.com/bullno1/reload.mk" target="_top">live reload plugin</a> for Erlang.mk.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_rust_mk"></a>26.11. rust.mk</h2></div></div></div><p>A <a class="ulink" href="https://github.com/goertzenator/rust.mk" target="_top">plugin</a> to build <a class="ulink" href="https://www.rust-lang.org/" target="_top">Rust</a> crates and install binaries into <code class="literal">priv/</code>.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="plugins_usage.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="plugins.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="about.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> +<a class="ulink" href="http://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html" target="_top">Mix</a>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_reload_mk"></a>27.11. reload.mk</h2></div></div></div><p>A <a class="ulink" href="https://github.com/bullno1/reload.mk" target="_top">live reload plugin</a> for Erlang.mk.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_rust_mk"></a>27.12. rust.mk</h2></div></div></div><p>A <a class="ulink" href="https://github.com/goertzenator/rust.mk" target="_top">plugin</a> to build <a class="ulink" href="https://www.rust-lang.org/" target="_top">Rust</a> crates and install binaries into <code class="literal">priv/</code>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_version_mk"></a>27.13. version.mk</h2></div></div></div><p>A <a class="ulink" href="https://github.com/manifest/version.mk" target="_top">plugin</a> to apply a semantic version automatically to Erlang.mk projects.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="plugins_usage.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="plugins.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="about.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> </body> </html> diff --git a/guide/plugins_usage.html b/guide/plugins_usage.html index a2f01a3..f13f1f1 100644 --- a/guide/plugins_usage.html +++ b/guide/plugins_usage.html @@ -33,7 +33,7 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="plugins.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="plugins_list.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="plugins_usage"></a>Chapter 25. External plugins</h2></div></div></div><p>It is often convenient to be able to keep the build files +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="plugins.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="plugins_list.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="plugins_usage"></a>Chapter 26. External plugins</h2></div></div></div><p>It is often convenient to be able to keep the build files used by all your projects in one place. Those files could be Makefiles, configuration files, templates and more.</p><p>Erlang.mk allows you to automatically load plugins from dependencies. Plugins can do anything, including defining @@ -42,19 +42,19 @@ inside the normal Erlang.mk processing or even adding new rules.</p><p>You can load plugins using one of two methods. You can either load all plugins from a dependency, or just one. We will also cover conventions about writing external -plugins.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_loading_all_plugins_from_a_dependency"></a>25.1. Loading all plugins from a dependency</h2></div></div></div><p>To load plugins from a dependency, all you need to do is add +plugins.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_loading_all_plugins_from_a_dependency"></a>26.1. Loading all plugins from a dependency</h2></div></div></div><p>To load plugins from a dependency, all you need to do is add the dependency name to <code class="literal">DEP_PLUGINS</code> in addition to the list of dependencies.</p><p>For example, if you have <code class="literal">cowboy</code> in <code class="literal">DEPS</code>, add <code class="literal">cowboy</code> in <code class="literal">DEP_PLUGINS</code> also:</p><pre class="programlisting">DEPS = cowboy DEP_PLUGINS = cowboy</pre><p>This will load the file <span class="emphasis"><em>plugins.mk</em></span> in the root folder of -the Cowboy repository.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_loading_one_plugin_from_a_dependency"></a>25.2. Loading one plugin from a dependency</h2></div></div></div><p>Now that we know how to load all plugins, let’s take a look +the Cowboy repository.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_loading_one_plugin_from_a_dependency"></a>26.2. Loading one plugin from a dependency</h2></div></div></div><p>Now that we know how to load all plugins, let’s take a look at how to load one specific plugin from a dependency.</p><p>To do this, instead of writing only the name of the dependency, we will write its name and the path to the plugin file. This means that writing <code class="literal">DEP_PLUGINS = cowboy</code> is equivalent to writing <code class="literal">DEP_PLUGINS = cowboy/plugins.mk</code>.</p><p>Knowing this, if we were to load the plugin <span class="emphasis"><em>mk/dist.mk</em></span> from Cowboy and no other, we would write the following in our Makefile:</p><pre class="programlisting">DEPS = cowboy -DEP_PLUGINS = cowboy/mk/dist.mk</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_external_plugins"></a>25.3. Writing external plugins</h2></div></div></div><p>The <span class="emphasis"><em>plugins.mk</em></span> file is a convention. It is meant to load +DEP_PLUGINS = cowboy/mk/dist.mk</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_external_plugins"></a>26.3. Writing external plugins</h2></div></div></div><p>The <span class="emphasis"><em>plugins.mk</em></span> file is a convention. It is meant to load all the plugins from the dependency. The code for the plugin can be written directly in <span class="emphasis"><em>plugins.mk</em></span> or be separate.</p><p>If you are providing more than one plugin with your repository, the recommended way is to create one file per plugin in the @@ -67,7 +67,7 @@ include $(THIS)/mk/templates.mk</pre><p>The <code class="literal">THIS</code> va plugins, but also select all plugins from the dependency in one go if they wish to do so.</p><p>Plugins can include some help text by extending the target <code class="literal">help-plugins</code>:</p><pre class="programlisting">help-plugins:: - $(verbose) printf "%s\n" "" "Run benchmark: $(MAKE) perfs"</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_early_stage_plugins"></a>25.4. Early-stage plugins</h2></div></div></div><p>Plugins declared in <code class="literal">DEP_PLUGINS</code> are loaded near the end of Erlang.mk. + $(verbose) printf "%s\n" "" "Run benchmark: $(MAKE) perfs"</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_early_stage_plugins"></a>26.4. Early-stage plugins</h2></div></div></div><p>Plugins declared in <code class="literal">DEP_PLUGINS</code> are loaded near the end of Erlang.mk. That’s why you have access to all previously initialized variables. However, if you want your plugin to add common dependencies to your applications, a regular is loaded too late in the process. @@ -81,7 +81,7 @@ BUILD_DEPS = common_deps DEP_EARLY_PLUGINS = common_deps</pre><pre class="programlisting"># In the plugin's early-plugins.mk DEPS += cowboy TEST_DEPS = ct_helper -dep_ct_helper = git https://github.com/ninenines/ct_helper master</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_loading_plugins_local_to_the_application"></a>25.5. Loading plugins local to the application</h2></div></div></div><p>If the Erlang.mk plugin lives in the same directory or repository as your +dep_ct_helper = git https://github.com/ninenines/ct_helper master</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_loading_plugins_local_to_the_application"></a>26.5. Loading plugins local to the application</h2></div></div></div><p>If the Erlang.mk plugin lives in the same directory or repository as your application or library, then you can load it exactly like an external plugin: the dependency name is simply the name of your application or library.</p><p>For example, the following Makefile loads a plugin in the <span class="emphasis"><em>mk</em></span> diff --git a/guide/shell.html b/guide/shell.html index 0d389a5..7a6d3c7 100644 --- a/guide/shell.html +++ b/guide/shell.html @@ -33,15 +33,15 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="tests.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="eunit.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="shell"></a>Chapter 17. Erlang shell</h2></div></div></div><p>Erlang.mk provides a convenient target for starting a shell -with all the paths set properly to experiment with your code.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_5"></a>17.1. Configuration</h2></div></div></div><p>The <code class="literal">SHELL_DEPS</code> variable can be used to define dependencies +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="tests.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="eunit.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="shell"></a>Chapter 18. Erlang shell</h2></div></div></div><p>Erlang.mk provides a convenient target for starting a shell +with all the paths set properly to experiment with your code.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration_5"></a>18.1. Configuration</h2></div></div></div><p>The <code class="literal">SHELL_DEPS</code> variable can be used to define dependencies that are only to be used when the <code class="literal">make shell</code> command is called. For example, if you want to use <span class="emphasis"><em>kjell</em></span> as your shell:</p><pre class="programlisting">SHELL_DEPS = kjell</pre><p>Dependencies are downloaded and compiled the first time you run the <code class="literal">make shell</code> command.</p><p>You can customize the executable used to start the Erlang shell. To continue with our example, if you want to use <span class="emphasis"><em>kjell</em></span> as your shell, you also need to change <code class="literal">SHELL_ERL</code> and point it to the <code class="literal">kjell</code> executable:</p><pre class="programlisting">SHELL_ERL = $(DEPS_DIR)/kjell/bin/kjell</pre><p>You can specify additional options to be used when starting the -shell using the <code class="literal">SHELL_OPTS</code> variable:</p><pre class="programlisting">SHELL_OPTS = -setcookie chocolate</pre><p>Any of the usual <code class="literal">erl</code> options can be used, including <code class="literal">-eval</code>:</p><pre class="programlisting">SHELL_OPTS = -eval 'my_app:run()'</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_3"></a>17.2. Usage</h2></div></div></div><p>To start the shell, all you need is the following command:</p><pre class="programlisting">$ make shell</pre><p>The shell can be stopped as usual with a double Ctrl+C or the +shell using the <code class="literal">SHELL_OPTS</code> variable:</p><pre class="programlisting">SHELL_OPTS = -setcookie chocolate</pre><p>Any of the usual <code class="literal">erl</code> options can be used, including <code class="literal">-eval</code>:</p><pre class="programlisting">SHELL_OPTS = -eval 'my_app:run()'</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_usage_3"></a>18.2. Usage</h2></div></div></div><p>To start the shell, all you need is the following command:</p><pre class="programlisting">$ make shell</pre><p>The shell can be stopped as usual with a double Ctrl+C or the command <code class="literal">q().</code>.</p><p>Note that the <code class="literal">shell</code> target does not build the application. To do it, use either the <code class="literal">app</code> target or, if you want to include also test modules, the <code class="literal">test-build</code> target.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tests.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="eunit.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> diff --git a/guide/sphinx.html b/guide/sphinx.html index 91be9b0..6b4532b 100644 --- a/guide/sphinx.html +++ b/guide/sphinx.html @@ -33,13 +33,13 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="edoc.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="tests.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="sphinx"></a>Chapter 16. Sphinx documentation</h2></div></div></div><p>Erlang.mk includes targets for running the +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="edoc.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="tests.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="sphinx"></a>Chapter 17. Sphinx documentation</h2></div></div></div><p>Erlang.mk includes targets for running the <a class="ulink" href="http://www.sphinx-doc.org/" target="_top">Sphinx documentation generator</a>, which can produce documentation in various formats, like HTML, man pages, Texinfo, LaTeX, and -others.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_sphinx_documentation"></a>16.1. Writing Sphinx documentation</h2></div></div></div><p>Sphinx generates documentation from a set of +others.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_writing_sphinx_documentation"></a>17.1. Writing Sphinx documentation</h2></div></div></div><p>Sphinx generates documentation from a set of <a class="ulink" href="http://www.sphinx-doc.org/en/stable/rest.html" target="_top">reST</a> documents. There is a <a class="ulink" href="http://www.sphinx-doc.org/en/stable/tutorial.html" target="_top">quick start guide</a> on -Sphinx' website. For Erlang.mk, we’ll set up a minimal environment instead.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_basic_setup"></a>16.2. Basic setup</h2></div></div></div><p>By default, Erlang.mk expects Sphinx documentation to be placed in the <span class="emphasis"><em>doc</em></span> +Sphinx' website. For Erlang.mk, we’ll set up a minimal environment instead.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_basic_setup"></a>17.2. Basic setup</h2></div></div></div><p>By default, Erlang.mk expects Sphinx documentation to be placed in the <span class="emphasis"><em>doc</em></span> directory, with <span class="emphasis"><em>doc/conf.py</em></span> config file in particular. The file contains information about the project, among the other things.</p><p>A minimal <span class="emphasis"><em>doc/conf.py</em></span> will look similar to this:</p><pre class="programlisting">project = 'My Project' version = '0.0' @@ -66,7 +66,7 @@ header with some text will do for now:</p><pre class="screen">Other Page ========== Lorem ipsum dolor sit amet...</pre><p>The files above are enough to build HTML documentation to the <span class="emphasis"><em>html</em></span> directory.</p><pre class="programlisting">$ make docs # all the docs, including EDoc and AsciiDoc if applicable -$ make sphinx # Sphinx docs specifically</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_configuration"></a>16.3. Erlang.mk configuration</h2></div></div></div><p>Erlang.mk defaults to the following configuration:</p><pre class="programlisting">SPHINX_FORMATS = html +$ make sphinx # Sphinx docs specifically</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_configuration"></a>17.3. Erlang.mk configuration</h2></div></div></div><p>Erlang.mk defaults to the following configuration:</p><pre class="programlisting">SPHINX_FORMATS = html SPHINX_SOURCE = doc</pre><p>To change the location of Sphinx sources, you need to set the <code class="literal">$(SPHINX_SOURCE)</code> variable. The <span class="emphasis"><em>conf.py</em></span> file should also be placed in that directory, unless you specify <code class="literal">$(SPHINX_CONFDIR)</code>.</p><p>The variable <code class="literal">$(SPHINX_OPTS)</code> allows to provide options to <code class="literal">sphinx-build</code>, which @@ -82,7 +82,7 @@ for <code class="literal">sphinx-build</code> for a list of known formats.</p><p for a specific format, you can set the <code class="literal">$(sphinx_$(format)_output)</code> variable, e.g. <code class="literal">$(sphinx_html_output)</code> for <span class="emphasis"><em>html</em></span> or <code class="literal">$(sphinx_man_output)</code> for <span class="emphasis"><em>man</em></span>. There are also <code class="literal">$(sphinx_$(format)_opts)</code> variables for setting <code class="literal">sphinx-build</code> -options for a single format only.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_generating_man_pages"></a>16.4. Generating man pages</h2></div></div></div><p>To generate man pages, you need to include <code class="literal">man</code> in <code class="literal">$(SPHINX_FORMATS)</code> in +options for a single format only.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_generating_man_pages"></a>17.4. Generating man pages</h2></div></div></div><p>To generate man pages, you need to include <code class="literal">man</code> in <code class="literal">$(SPHINX_FORMATS)</code> in your Makefile and define the <code class="literal">man_pages</code> option in <span class="emphasis"><em>doc/conf.py</em></span>:</p><pre class="programlisting">man_pages = [ ('doc_name', 'page_name', 'Manpage Title', ['Page Author'], 1), ]</pre><p>As the diff --git a/guide/triq.html b/guide/triq.html index dde4b76..eaed248 100644 --- a/guide/triq.html +++ b/guide/triq.html @@ -33,7 +33,7 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="ct.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="coverage.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="triq"></a>Chapter 20. Triq</h2></div></div></div><p><a class="ulink" href="https://triq.gitlab.io/" target="_top">Triq</a> is a QuickCheck-like library for +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="ct.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="coverage.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="triq"></a>Chapter 21. Triq</h2></div></div></div><p><a class="ulink" href="https://triq.gitlab.io/" target="_top">Triq</a> is a QuickCheck-like library for property-based testing. Erlang.mk automates discovery and checking of Triq properties.</p><p>To run all tests (including Triq):</p><pre class="programlisting">$ make tests</pre><p>To run all tests and static checks (including Triq):</p><pre class="programlisting">$ make check</pre><p>You can also run Triq separately:</p><pre class="programlisting">$ make triq</pre><p>To check properties from a single module:</p><pre class="programlisting">$ make triq t=foo_tests</pre><p>To check a single property:</p><pre class="programlisting">$ make triq t=foo_tests:bar</pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ct.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="coverage.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> diff --git a/guide/why.html b/guide/why.html index f7a9bdb..3d1416c 100644 --- a/guide/why.html +++ b/guide/why.html @@ -33,14 +33,14 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="about.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="history.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="why"></a>Chapter 27. Why Erlang.mk</h2></div></div></div><p>Why would you choose Erlang.mk, if not for its +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="about.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="history.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="why"></a>Chapter 28. Why Erlang.mk</h2></div></div></div><p>Why would you choose Erlang.mk, if not for its <a class="link" href="overview.html" title="Chapter 3. Overview">many features</a>? This chapter will -attempt to answer that.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_is_fast"></a>27.1. Erlang.mk is fast</h2></div></div></div><p>Erlang.mk is as fast as it gets.</p><p>Erlang.mk will group the compilation of files so as to avoid +attempt to answer that.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_is_fast"></a>28.1. Erlang.mk is fast</h2></div></div></div><p>Erlang.mk is as fast as it gets.</p><p>Erlang.mk will group the compilation of files so as to avoid running the BEAM more than necessary. This saves many seconds compared to traditional Makefiles, even on small projects.</p><p>Erlang.mk will not try to be too smart. It provides a simple solution that works for most people, and gives additional options for projects that run into edge cases, often in the -form of extra variables or rules to be defined.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_gives_you_the_full_power_of_unix"></a>27.2. Erlang.mk gives you the full power of Unix</h2></div></div></div><p>Erlang.mk is a Makefile.</p><p>You could use Erlang.mk directly without configuring anything +form of extra variables or rules to be defined.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_gives_you_the_full_power_of_unix"></a>28.2. Erlang.mk gives you the full power of Unix</h2></div></div></div><p>Erlang.mk is a Makefile.</p><p>You could use Erlang.mk directly without configuring anything and it would just work. But you can also extend it greatly either through configuration or hooks, and you can of course add your own rules to the Makefile.</p><p>In all cases: for configuration, hooks or custom rules, you @@ -48,22 +48,22 @@ have all the power of Unix at your disposal, and can call any utility <span class="emphasis"><em>or even any language interpreter</em></span> you want, every time you need to. Erlang.mk also allows you to write scripts in this small language called Erlang directly inside -your Makefile if you ever need to…</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_is_a_text_file"></a>27.3. Erlang.mk is a text file</h2></div></div></div><p>Erlang.mk is a Makefile.</p><p>Which means Erlang.mk is a simple text file. You can edit a +your Makefile if you ever need to…</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_is_a_text_file"></a>28.3. Erlang.mk is a text file</h2></div></div></div><p>Erlang.mk is a Makefile.</p><p>Which means Erlang.mk is a simple text file. You can edit a text file. Nothing stops you. If you run into any bug, or behavior that does not suit you, you can just open the <span class="emphasis"><em>erlang.mk</em></span> file in your favorite editor, fix and/or comment -a few lines, save, and try again. It’s as simple as it gets.</p><p>Currently using a binary build tool? Good luck with that.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_can_manage_erlang_itself"></a>27.4. Erlang.mk can manage Erlang itself</h2></div></div></div><p>Erlang.mk isn’t written in Erlang.</p><p>That’s not a good thing, you say? Well, here’s one thing +a few lines, save, and try again. It’s as simple as it gets.</p><p>Currently using a binary build tool? Good luck with that.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_can_manage_erlang_itself"></a>28.4. Erlang.mk can manage Erlang itself</h2></div></div></div><p>Erlang.mk isn’t written in Erlang.</p><p>That’s not a good thing, you say? Well, here’s one thing that Erlang.mk and Makefiles can do for you that Erlang build tool can’t easily: choose what version of Erlang is to be used for compiling the project.</p><p>This really is a one-liner in Erlang.mk (a few more lines if you also let it download and build Erlang directly) and allows for even greater things, like testing your project across all supported Erlang versions in one small -command: <code class="literal">make -k ci</code>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_can_do_more_than_erlang"></a>27.5. Erlang.mk can do more than Erlang</h2></div></div></div><p>Erlang.mk doesn’t care what your dependencies are written in.</p><p>Erlang.mk will happily compile any dependency, as long as +command: <code class="literal">make -k ci</code>.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_can_do_more_than_erlang"></a>28.5. Erlang.mk can do more than Erlang</h2></div></div></div><p>Erlang.mk doesn’t care what your dependencies are written in.</p><p>Erlang.mk will happily compile any dependency, as long as they come with a Makefile. The dependency can be written in C, C++ or even Javascript… Who cares, really? If you need Erlang.mk to fetch it, then Erlang.mk will fetch it -and compile it as needed.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_integrates_nicely_in_make_and_automake_projects"></a>27.6. Erlang.mk integrates nicely in Make and Automake projects</h2></div></div></div><p>If you are planning to put your project in the middle of +and compile it as needed.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_erlang_mk_integrates_nicely_in_make_and_automake_projects"></a>28.6. Erlang.mk integrates nicely in Make and Automake projects</h2></div></div></div><p>If you are planning to put your project in the middle of a Make or Automake-based build environment, then the most logical thing to do is to use a Makefile.</p><p>Erlang.mk will happily sit in such an environment and behave as you expect it to.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="about.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="about.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="history.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> diff --git a/guide/xref.html b/guide/xref.html index a4a9aff..0f87df2 100644 --- a/guide/xref.html +++ b/guide/xref.html @@ -33,7 +33,7 @@ div.navfooter{margin-bottom:1em} </header> <main> -<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="dialyzer.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="plugins.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="xref"></a>Chapter 24. Xref</h2></div></div></div><p>Placeholder chapter.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dialyzer.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="plugins.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> +<div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="dialyzer.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="plugins.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="xref"></a>Chapter 25. Xref</h2></div></div></div><p>Placeholder chapter.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dialyzer.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="tests.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="plugins.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div> </main> </body> </html> |