diff options
author | Loïc Hoguin <[email protected]> | 2024-01-23 13:55:08 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2024-01-23 13:55:08 +0100 |
commit | 62684cfaaff153700d61b8f94a745577751cbf4b (patch) | |
tree | 27da00ab71d29cb85bae8ab977fcd95fe37ae40e | |
parent | 869c8d3dadfab24c5dc1324f25e47ac6e3f31612 (diff) | |
download | erlang.mk-62684cfaaff153700d61b8f94a745577751cbf4b.tar.gz erlang.mk-62684cfaaff153700d61b8f94a745577751cbf4b.tar.bz2 erlang.mk-62684cfaaff153700d61b8f94a745577751cbf4b.zip |
Update user guide
-rw-r--r-- | guide/ci.html | 8 | ||||
-rw-r--r-- | guide/coverage.html | 6 | ||||
-rw-r--r-- | guide/ct.html | 3 | ||||
-rw-r--r-- | guide/deps.html | 15 | ||||
-rw-r--r-- | guide/index.html | 2 | ||||
-rw-r--r-- | guide/installation.html | 2 | ||||
-rw-r--r-- | guide/ports.html | 2 | ||||
-rw-r--r-- | guide/relx.html | 10 |
8 files changed, 25 insertions, 23 deletions
diff --git a/guide/ci.html b/guide/ci.html index 81706a3..bd18f24 100644 --- a/guide/ci.html +++ b/guide/ci.html @@ -38,12 +38,8 @@ 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>24.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 -the most recent patch releases of Erlang/OTP 19 and above:</p><pre class="programlisting">CI_OTP = OTP-19.0.7 OTP-19.1.6 OTP-19.2.3 OTP-19.3.6.2 OTP-20.0.4</pre><p>If you want to test against HiPE and ErLLVM but only with the -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 +of Erlang/OTP will be used.</p><p>At the time of writing, this is how you would test against all +the most recent patch releases of Erlang/OTP 19 and above:</p><pre class="programlisting">CI_OTP = OTP-19.0.7 OTP-19.1.6 OTP-19.2.3 OTP-19.3.6.2 OTP-20.0.4</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>24.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 diff --git a/guide/coverage.html b/guide/coverage.html index 85d5935..dffab2d 100644 --- a/guide/coverage.html +++ b/guide/coverage.html @@ -48,10 +48,12 @@ report that Erlang.mk generates is however common to all test frameworks and might be more useful.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_adding_applications_to_the_cover_report"></a>23.2. Adding applications to the cover report</h2></div></div></div><p>By default Erlang.mk will include all the applications in the code coverage report, except external dependencies.</p><p>To include some dependencies in the report, you can define the <code class="literal">COVER_DEPS</code> variable:</p><pre class="programlisting">COVER_DEPS = cowlib</pre><p>When using multi application repositories you can exclude -some applications by defining the <code class="literal">COVER_APPS</code> variable:</p><pre class="programlisting">COVER_APPS = presence backend</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuring_paths"></a>23.3. Configuring paths</h2></div></div></div><p>By default Erlang.mk will store <span class="emphasis"><em>coverdata</em></span> files and +some applications by defining the <code class="literal">COVER_APPS</code> variable:</p><pre class="programlisting">COVER_APPS = presence backend</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_removing_modules_from_the_cover_report"></a>23.3. Removing modules from the cover report</h2></div></div></div><p>By default Erlang.mk will include all modules in the +cover report.</p><p>To exclude some modules from the report, you can +define the <code class="literal">COVER_EXCLUDE_MODS</code> variable:</p><pre class="programlisting">COVER_EXCLUDE_MODS = cowboy_app cowboy_sup</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuring_paths"></a>23.4. Configuring paths</h2></div></div></div><p>By default Erlang.mk will store <span class="emphasis"><em>coverdata</em></span> files and code coverage reports under the <span class="emphasis"><em>cover/</em></span> directory. The variables <code class="literal">COVER_DATA_DIR</code> and <code class="literal">COVER_REPORT_DIR</code> can be -set to use a different location.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_merging_coverdata_files"></a>23.4. Merging coverdata files</h2></div></div></div><p>The target <code class="literal">all.coverdata</code> will take all existing +set to use a different location.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_merging_coverdata_files"></a>23.5. Merging coverdata files</h2></div></div></div><p>The target <code class="literal">all.coverdata</code> will take all existing <span class="emphasis"><em>coverdata</em></span> files and merge them into one:</p><pre class="programlisting">$ make all.coverdata</pre></div></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> diff --git a/guide/ct.html b/guide/ct.html index 0230259..9520c37 100644 --- a/guide/ct.html +++ b/guide/ct.html @@ -57,7 +57,8 @@ 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 23. 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>A test within a specific subgroup can be run by providing a +group path:</p><pre class="programlisting">$ make ct-http t=[top_level_group,second_level_group,third_level_group]:my_case</pre><p>Finally, <a class="link" href="coverage.html" title="Chapter 23. 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="proper.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 f2de869..fe08502 100644 --- a/guide/deps.html +++ b/guide/deps.html @@ -81,7 +81,12 @@ target <code class="literal">deps::</code> before including <span class="emphasi deps </span></dt><dd> $(CURDIR)/deps/triq -</dd></dl></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_modifying_the_dependency_source_or_version"></a>7.2.1. Modifying the dependency source or version</h3></div></div></div><p>By default, Erlang.mk will look into its package index to +</dd></dl></div><p>Sometimes dependencies are allowed to be missing. However, your application +may depend on an optional application being started. To ensure that an +optional dependency is started before your application, the variable +<code class="literal">OPTIONAL_DEPS</code> may be used:</p><pre class="programlisting">OPTIONAL_DEPS = quicer</pre><p>The top-level project can then decide whether to include this +application by adding it to its <code class="literal">BUILD_DEPS</code> and including +it in the release dependencies.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_modifying_the_dependency_source_or_version"></a>7.2.1. Modifying the dependency source or version</h3></div></div></div><p>By default, Erlang.mk will look into its package index to find the project you are looking for, if you only provide its name. This is this case:</p><pre class="programlisting">DEPS = cowboy</pre><p>If you need a different version, you need to define another variable. There are two ways to do this, each being useful @@ -89,7 +94,7 @@ for different reasons.</p><p>If you simply want to change the commit number, all need to do is to define the <code class="literal">dep_$(DEP_NAME)_commit</code> variable. In the case of Cowboy, this would look like this:</p><pre class="programlisting">DEPS = cowboy dep_cowboy_commit = 2.0.0-pre.2</pre><p>Erlang.mk will use the package index to get all information -about Cowboy, except the commit number which will be overriden.</p><p>If you need to set the fetch method or repository information +about Cowboy, except the commit number which will be overridden.</p><p>If you need to set the fetch method or repository information too, for example because you want to use your own fork, or simply because the project is missing from the index, you can define the <code class="literal">dep_$(DEP_NAME)</code> variable with everything:</p><pre class="programlisting">DEPS = cowboy @@ -316,10 +321,8 @@ 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 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 +enabled. There are currently two: <code class="literal">ELIXIR_PATCH</code> for the <code class="literal">elixir</code> +dependency and <code class="literal">HUT_PATCH</code> for the <code class="literal">hut</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 diff --git a/guide/index.html b/guide/index.html index 4c7664d..2730877 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="idm1"></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#_querying_dependencies">7.5. Querying dependencies</a></span></dt><dt><span class="section"><a href="deps.html#_ignoring_unwanted_dependencies">7.6. Ignoring unwanted dependencies</a></span></dt><dt><span class="section"><a href="deps.html#_dependencies_directory">7.7. Dependencies directory</a></span></dt><dt><span class="section"><a href="deps.html#_many_applications_in_one_repository">7.8. 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.9. Repositories with no application at the root level</a></span></dt><dt><span class="section"><a href="deps.html#_autopatch">7.10. Autopatch</a></span></dt><dt><span class="section"><a href="deps.html#_dealing_with_duplicate_modules">7.11. Dealing with duplicate modules</a></span></dt><dt><span class="section"><a href="deps.html#_skipping_deps">7.12. 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="proper.html">21. PropEr</a></span></dt><dt><span class="chapter"><a href="triq.html">22. Triq</a></span></dt><dt><span class="chapter"><a href="coverage.html">23. Code coverage</a></span></dt><dd><dl><dt><span class="section"><a href="coverage.html#_enabling_cover_when_running_tests">23.1. Enabling cover when running tests</a></span></dt><dt><span class="section"><a href="coverage.html#_adding_applications_to_the_cover_report">23.2. Adding applications to the cover report</a></span></dt><dt><span class="section"><a href="coverage.html#_configuring_paths">23.3. Configuring paths</a></span></dt><dt><span class="section"><a href="coverage.html#_merging_coverdata_files">23.4. Merging coverdata files</a></span></dt></dl></dd><dt><span class="chapter"><a href="ci.html">24. Continuous integration</a></span></dt><dd><dl><dt><span class="section"><a href="ci.html#_configuring_erlang_otp_versions_to_test">24.1. Configuring Erlang/OTP versions to test</a></span></dt><dt><span class="section"><a href="ci.html#_running_tests_across_all_configured_versions">24.2. Running tests across all configured versions</a></span></dt><dt><span class="section"><a href="ci.html#_extending_the_ci_targets">24.3. Extending the CI targets</a></span></dt></dl></dd><dt><span class="chapter"><a href="dialyzer.html">25. Dialyzer</a></span></dt><dd><dl><dt><span class="section"><a href="dialyzer.html#_how_it_works">25.1. How it works</a></span></dt><dt><span class="section"><a href="dialyzer.html#_configuration_8">25.2. Configuration</a></span></dt><dt><span class="section"><a href="dialyzer.html#_usage_6">25.3. Usage</a></span></dt><dt><span class="section"><a href="dialyzer.html#_dialyzing_beam_files">25.4. Dialyzing beam files</a></span></dt></dl></dd><dt><span class="chapter"><a href="concuerror.html">26. Concuerror</a></span></dt><dd><dl><dt><span class="section"><a href="concuerror.html#_configuration_9">26.1. Configuration</a></span></dt><dt><span class="section"><a href="concuerror.html#_writing_tests_3">26.2. Writing tests</a></span></dt><dt><span class="section"><a href="concuerror.html#_usage_7">26.3. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="xref.html">27. Xref</a></span></dt><dd><dl><dt><span class="section"><a href="xref.html#_usage_8">27.1. Usage</a></span></dt><dt><span class="section"><a href="xref.html#_queries">27.2. Queries</a></span></dt><dt><span class="section"><a href="xref.html#_analysis_scope">27.3. Analysis scope</a></span></dt><dt><span class="section"><a href="xref.html#_ignoring_warnings">27.4. Ignoring warnings</a></span></dt></dl></dd></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">28. External plugins</a></span></dt><dd><dl><dt><span class="section"><a href="plugins_usage.html#_loading_all_plugins_from_a_dependency">28.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">28.2. Loading one plugin from a dependency</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_writing_external_plugins">28.3. Writing external plugins</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_early_stage_plugins">28.4. Early-stage plugins</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_loading_plugins_local_to_the_application">28.5. Loading plugins local to the application</a></span></dt></dl></dd><dt><span class="chapter"><a href="plugins_list.html">29. List of plugins</a></span></dt><dd><dl><dt><span class="section"><a href="plugins_list.html#_ci_erlang_mk">29.1. ci.erlang.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_efene_mk">29.2. efene.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_elixir_mk">29.3. elixir.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_elvis_mk">29.4. elvis.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_esh_mk">29.5. esh.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_geas">29.6. geas</a></span></dt><dt><span class="section"><a href="plugins_list.html#_hexer_mk">29.7. hexer.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_hexpm_mk">29.8. hexpm.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_jorel">29.9. jorel</a></span></dt><dt><span class="section"><a href="plugins_list.html#_lfe_mk">29.10. lfe.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_mix_mk">29.11. mix.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_reload_mk">29.12. reload.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_rust_mk">29.13. rust.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_version_mk">29.14. 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">30. Why Erlang.mk</a></span></dt><dd><dl><dt><span class="section"><a href="why.html#_erlang_mk_is_fast">30.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">30.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">30.3. Erlang.mk is a text file</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_can_manage_erlang_itself">30.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">30.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">30.6. Erlang.mk integrates nicely in Make and Automake projects</a></span></dt></dl></dd><dt><span class="chapter"><a href="history.html">31. Short history</a></span></dt><dd><dl><dt><span class="section"><a href="history.html#_before_erlang_mk">31.1. Before Erlang.mk</a></span></dt><dt><span class="section"><a href="history.html#_lifetime_of_the_project">31.2. Lifetime of the project</a></span></dt></dl></dd><dt><span class="chapter"><a href="contributing.html">32. Contributing</a></span></dt><dd><dl><dt><span class="section"><a href="contributing.html#_priorities">32.1. Priorities</a></span></dt><dt><span class="section"><a href="contributing.html#_bugs">32.2. Bugs</a></span></dt><dt><span class="section"><a href="contributing.html#_code">32.3. Code</a></span></dt><dt><span class="section"><a href="contributing.html#_packages">32.4. Packages</a></span></dt><dt><span class="section"><a href="contributing.html#_documentation">32.5. Documentation</a></span></dt><dt><span class="section"><a href="contributing.html#_feature_requests">32.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="id1337"></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#_querying_dependencies">7.5. Querying dependencies</a></span></dt><dt><span class="section"><a href="deps.html#_ignoring_unwanted_dependencies">7.6. Ignoring unwanted dependencies</a></span></dt><dt><span class="section"><a href="deps.html#_dependencies_directory">7.7. Dependencies directory</a></span></dt><dt><span class="section"><a href="deps.html#_many_applications_in_one_repository">7.8. 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.9. Repositories with no application at the root level</a></span></dt><dt><span class="section"><a href="deps.html#_autopatch">7.10. Autopatch</a></span></dt><dt><span class="section"><a href="deps.html#_dealing_with_duplicate_modules">7.11. Dealing with duplicate modules</a></span></dt><dt><span class="section"><a href="deps.html#_skipping_deps">7.12. 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="proper.html">21. PropEr</a></span></dt><dt><span class="chapter"><a href="triq.html">22. Triq</a></span></dt><dt><span class="chapter"><a href="coverage.html">23. Code coverage</a></span></dt><dd><dl><dt><span class="section"><a href="coverage.html#_enabling_cover_when_running_tests">23.1. Enabling cover when running tests</a></span></dt><dt><span class="section"><a href="coverage.html#_adding_applications_to_the_cover_report">23.2. Adding applications to the cover report</a></span></dt><dt><span class="section"><a href="coverage.html#_removing_modules_from_the_cover_report">23.3. Removing modules from the cover report</a></span></dt><dt><span class="section"><a href="coverage.html#_configuring_paths">23.4. Configuring paths</a></span></dt><dt><span class="section"><a href="coverage.html#_merging_coverdata_files">23.5. Merging coverdata files</a></span></dt></dl></dd><dt><span class="chapter"><a href="ci.html">24. Continuous integration</a></span></dt><dd><dl><dt><span class="section"><a href="ci.html#_configuring_erlang_otp_versions_to_test">24.1. Configuring Erlang/OTP versions to test</a></span></dt><dt><span class="section"><a href="ci.html#_running_tests_across_all_configured_versions">24.2. Running tests across all configured versions</a></span></dt><dt><span class="section"><a href="ci.html#_extending_the_ci_targets">24.3. Extending the CI targets</a></span></dt></dl></dd><dt><span class="chapter"><a href="dialyzer.html">25. Dialyzer</a></span></dt><dd><dl><dt><span class="section"><a href="dialyzer.html#_how_it_works">25.1. How it works</a></span></dt><dt><span class="section"><a href="dialyzer.html#_configuration_8">25.2. Configuration</a></span></dt><dt><span class="section"><a href="dialyzer.html#_usage_6">25.3. Usage</a></span></dt><dt><span class="section"><a href="dialyzer.html#_dialyzing_beam_files">25.4. Dialyzing beam files</a></span></dt></dl></dd><dt><span class="chapter"><a href="concuerror.html">26. Concuerror</a></span></dt><dd><dl><dt><span class="section"><a href="concuerror.html#_configuration_9">26.1. Configuration</a></span></dt><dt><span class="section"><a href="concuerror.html#_writing_tests_3">26.2. Writing tests</a></span></dt><dt><span class="section"><a href="concuerror.html#_usage_7">26.3. Usage</a></span></dt></dl></dd><dt><span class="chapter"><a href="xref.html">27. Xref</a></span></dt><dd><dl><dt><span class="section"><a href="xref.html#_usage_8">27.1. Usage</a></span></dt><dt><span class="section"><a href="xref.html#_queries">27.2. Queries</a></span></dt><dt><span class="section"><a href="xref.html#_analysis_scope">27.3. Analysis scope</a></span></dt><dt><span class="section"><a href="xref.html#_ignoring_warnings">27.4. Ignoring warnings</a></span></dt></dl></dd></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">28. External plugins</a></span></dt><dd><dl><dt><span class="section"><a href="plugins_usage.html#_loading_all_plugins_from_a_dependency">28.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">28.2. Loading one plugin from a dependency</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_writing_external_plugins">28.3. Writing external plugins</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_early_stage_plugins">28.4. Early-stage plugins</a></span></dt><dt><span class="section"><a href="plugins_usage.html#_loading_plugins_local_to_the_application">28.5. Loading plugins local to the application</a></span></dt></dl></dd><dt><span class="chapter"><a href="plugins_list.html">29. List of plugins</a></span></dt><dd><dl><dt><span class="section"><a href="plugins_list.html#_ci_erlang_mk">29.1. ci.erlang.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_efene_mk">29.2. efene.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_elixir_mk">29.3. elixir.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_elvis_mk">29.4. elvis.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_esh_mk">29.5. esh.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_geas">29.6. geas</a></span></dt><dt><span class="section"><a href="plugins_list.html#_hexer_mk">29.7. hexer.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_hexpm_mk">29.8. hexpm.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_jorel">29.9. jorel</a></span></dt><dt><span class="section"><a href="plugins_list.html#_lfe_mk">29.10. lfe.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_mix_mk">29.11. mix.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_reload_mk">29.12. reload.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_rust_mk">29.13. rust.mk</a></span></dt><dt><span class="section"><a href="plugins_list.html#_version_mk">29.14. 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">30. Why Erlang.mk</a></span></dt><dd><dl><dt><span class="section"><a href="why.html#_erlang_mk_is_fast">30.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">30.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">30.3. Erlang.mk is a text file</a></span></dt><dt><span class="section"><a href="why.html#_erlang_mk_can_manage_erlang_itself">30.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">30.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">30.6. Erlang.mk integrates nicely in Make and Automake projects</a></span></dt></dl></dd><dt><span class="chapter"><a href="history.html">31. Short history</a></span></dt><dd><dl><dt><span class="section"><a href="history.html#_before_erlang_mk">31.1. Before Erlang.mk</a></span></dt><dt><span class="section"><a href="history.html#_lifetime_of_the_project">31.2. Lifetime of the project</a></span></dt></dl></dd><dt><span class="chapter"><a href="contributing.html">32. Contributing</a></span></dt><dd><dl><dt><span class="section"><a href="contributing.html#_priorities">32.1. Priorities</a></span></dt><dt><span class="section"><a href="contributing.html#_bugs">32.2. Bugs</a></span></dt><dt><span class="section"><a href="contributing.html#_code">32.3. Code</a></span></dt><dt><span class="section"><a href="contributing.html#_packages">32.4. Packages</a></span></dt><dt><span class="section"><a href="contributing.html#_documentation">32.5. Documentation</a></span></dt><dt><span class="section"><a href="contributing.html#_feature_requests">32.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/installation.html b/guide/installation.html index 0af92d6..2dd2962 100644 --- a/guide/installation.html +++ b/guide/installation.html @@ -84,7 +84,7 @@ use the following commands to extract it:</p><pre class="screen">C:\> 7z x ms C:\> 7z x msys2.tar > NUL</pre><p>Then you can run the two commands needed to perform the post-installation setup:</p><pre class="screen">C:\> C:\msys64\usr\bin\bash -lc "pacman --needed --noconfirm -Sy bash pacman pacman-mirrors msys2-runtime" C:\> C:\msys64\usr\bin\bash -lc "pacman --noconfirm -Syu"</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_installing_the_required_msys2_packages"></a>1.2.3. Installing the required MSYS2 packages</h3></div></div></div><p>After following these instructions, you can install GNU Make, -Git and any other required softwares. From an MSYS2 shell, +Git and any other required software. From an MSYS2 shell, you can call <code class="literal">pacman</code> directly:</p><pre class="programlisting">$ pacman -S git make</pre><p>You can use <code class="literal">pacman -Ss</code> to search packages. For example, to find all packages related to GCC:</p><pre class="programlisting">$ pacman -Ss gcc</pre><p>If you are going to compile C/C++ code, you will need to install this package, as Erlang.mk cannot use the normal diff --git a/guide/ports.html b/guide/ports.html index a741cba..008b256 100644 --- a/guide/ports.html +++ b/guide/ports.html @@ -72,7 +72,7 @@ being <span class="emphasis"><em>$(CURDIR)/priv/$(PROJECT)</em></span> followed default except for the extension: <code class="literal">.exe</code> on Windows, and otherwise nothing.</p><p>Erlang.mk sets appropriate compile and linker flags by default. These flags vary depending on the platform, and can of course -be overriden.</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"> +be overridden.</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"> <code class="literal">CC</code> </span></dt><dd> The compiler to be used. diff --git a/guide/relx.html b/guide/relx.html index 88fc617..1b5f44b 100644 --- a/guide/relx.html +++ b/guide/relx.html @@ -35,8 +35,10 @@ div.navfooter{margin-bottom:1em} <div class="navheader"><table width="100%" summary="Navigation header"><tr><td width="20%" align="left"><a accesskey="p" href="ports.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="sfx.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="relx"></a>Chapter 9. Releases</h2></div></div></div><p>Erlang.mk relies on <span class="emphasis"><em>Relx</em></span> for generating releases. This chapter covers the Erlang.mk-specific bits. Consult the -<a class="ulink" href="https://erlware.github.io/relx/" target="_top">Relx website</a> for more information.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_setup"></a>9.1. Setup</h2></div></div></div><p>Erlang.mk will create a release if it detects a Relx configuration -file in the <span class="emphasis"><em>$(RELX_CONFIG)</em></span> location. This defaults to +<a class="ulink" href="https://erlware.github.io/relx/" target="_top">Relx website</a> for more information.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_setup"></a>9.1. Setup</h2></div></div></div><p>First, <code class="literal">relx</code> must be added in the dependencies of your +project. You can add it to <code class="literal">REL_DEPS</code> so that it is fetched +whenever you need to build the release:</p><pre class="programlisting">REL_DEPS = relx</pre><p>Then, you need to create a <span class="emphasis"><em>relx.config</em></span> file in the +<span class="emphasis"><em>$(RELX_CONFIG)</em></span> location. This defaults to <span class="emphasis"><em>$(CURDIR)/relx.config</em></span>. You can override it by defining the variable before including Erlang.mk:</p><pre class="programlisting">RELX_CONFIG = $(CURDIR)/webchat.config</pre><p>It is also possible to have multiple <span class="emphasis"><em>relx.config</em></span> files. For example you might have one for development and one for @@ -45,9 +47,7 @@ should be used:</p><pre class="programlisting">ifdef PROD RELX_CONFIG = $(CURDIR)/relx.prod.config else RELX_CONFIG = $(CURDIR)/relx.dev.config -endif</pre><p>Relx does not need to be installed. Erlang.mk will download -and build it automatically.</p><p>The Relx executable will be saved in the <span class="emphasis"><em>$(RELX)</em></span> file. This -location defaults to <span class="emphasis"><em>$(CURDIR)/relx</em></span> and can be overriden.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration"></a>9.2. Configuration</h2></div></div></div><p>You can specify additional Relx options using the <code class="literal">RELX_OPTS</code> +endif</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_configuration"></a>9.2. Configuration</h2></div></div></div><p>You can specify additional Relx options using the <code class="literal">RELX_OPTS</code> variable. For example, to enable <code class="literal">dev_mode</code>:</p><pre class="programlisting">RELX_OPTS = -d true</pre><p>While you can specify the output directory for the release in the Relx options directly, Erlang.mk provides a specific variable for it: <code class="literal">RELX_OUTPUT_DIR</code>. It defaults to the <span class="emphasis"><em>_rel</em></span> |