Age | Commit message (Collapse) | Author |
|
... in addition to the `$(force_rebuild_dep)` function.
It's easier for the common use case than specify a function.
|
|
|
|
|
|
By default, Erlang.mk only builds dependencies once, the first time the
top-level project is compiled. A forced rebuild of all dependencies can
be forced by setting the `$(FULL)` variable to a non-empty value.
For developers working on the top-level project and one or more
dependencies at the same time, Erlang.mk now accepts a variable/function
called `$(force_rebuilding_dep)` which is called to determine if the
dependency passed as the first argument should be forcibly rebuilt.
It allows a developer to filter the dependencies he works on (so they
are always rebuilt) from other third-party dependencies he never touches
(i.e. they are only built once at the beginning).
The content of `$(force_rebuilding_dep)` is expected to be a shell
one-liner where the `$(1)` Make variable is set to the path to the
dependency.
Here is an example from the testsuite:
force_rebuilding_dep = test '$(1)' = '$(CURDIR)/deps/cowlib'
|
|
Allow a lack of space in the front. This will of course need
to be handled better eventually.
|
|
... exactly as it is displayed for Git-based dependencies.
|
|
|
|
For now, ~> is expanded to a full version only.
|
|
|
|
|
|
This solution should work better, previous one would sometimes
expand incorrectly and fail.
|
|
And use this in the tests to fetch Rebar only once and then
clone from the local repository. This should speed up tests
a little.
|
|
|
|
|
|
|
|
Unless it's a symbolic link, it's built directly, FULL=1 is set
or the file ebin/dep_built in the dependency is removed.
See the documentation changes for more details.
This provides immense build speed gains, for example on a
RabbitMQ project it went from 10s to 1s for the 2nd+ builds.
|
|
For example:
DEPS = elixir
ELIXIR_PATCH = 1
include erlang.mk
A language test suite will soon be added with a test for this.
|
|
The $(...) form was improperly converted. In addition it
must be changed into a $(shell ...) form.
|
|
|
|
Currently experimental. It'll enable lfe.mk when it encounters
the rebar3 plugin lfe-compile. Tested against some small library.
Note that it adds lfe as a build dependency with no version given
so the latest master will be fetched right now. This can be
overriden in the parent project.
|
|
Until it is found that one is needed to compile a project.
|
|
|
|
|
|
When the $(MAKE) is inside an $(eval $(call ...)) then it needs
to be escaped as $$(MAKE).
When the $(MAKE) is inside a $(call ...) then I did not figure
out a way other than passing it as an argument.
When the $(MAKE) is inside many levels of $(call $(call ...))
it's easier to avoid it if at all possible, so I replaced the
rebar $(MAKE) call with ./bootstrap. I confirmed it works fine
on Windows as well.
|
|
Fetching rebar is conditional depending on the project
being built, and if two projects require it and -j is
used this could mean the fetching happens at the same
time and one would fail.
|
|
I've reworked how the multi-apps projects are built. In particular
I've made sure the test build is made from the top-level once, and
then only tests are run on this build. It used to build multiple
times and some builds would not include test mode, not good. I've
also fixed issues with running tests in parallel.
All tests now pass with -j8 on my machine. It's possible more
issues remain that are not covered by tests yet though.
|
|
It clones and checkouts like the git fetch method, but
does so in the Erlang.mk temporary directory. It then
creates a symbolic link to the subfolder for the dependency.
|
|
|
|
Also add a missing space character.
|
|
It's cheap, can be useful to detect issues, so why not?
|
|
|
|
This fixes hackney.
|
|
|
|
(i.e. not wrapped inside a list - rebar3 allows this as well)
|
|
Ew, rebar, again!
|
|
Ew rebar, geez!
|
|
|
|
This will support defining macro in `rebar.config.script`. An extra data type pattern matching is added in `dep_autopatch_rebar` function.
|
|
|
|
|
|
If the application's Makefile specify either:
DEP_PLUGINS = $(PROJECT)
or e.g.:
DEP_PLUGINS = $(PROJECT)/mk/dist.mk
then load the plugin from the application instead of a dependency.
This helps when you have an application with common Erlang modules and
Erlang.mk plugins: your common application can load Erlang.mk plugins
exactly like other applications depending on the common application.
|
|
|
|
We do not touch the erlang.mk file anymore. We only patch the
Makefile to include the top-level Erlang.mk by changing the
'include erlang.mk' line to look for ERLANG_MK_FILENAME if it
is defined. The modified Makefile can be committed safely.
|
|
Regular plugins (`$(DEP_PLUGINS)`) are loaded near the end of Erlang.mk.
This is fine when you want to modify variables initialized earlier in
Erlang.mk or add new targets and variables.
However, it doesn't allow you to declare more dependencies because they
are loaded too late for that.
This commit introduces a new variable, `$(DEP_EARLY_PLUGINS)`, which can
be used to list plugins meant to be loaded near the beginning of
Erlang.mk. Those allow to append to the list of dependencies.
They work exactly like regular plugins otherwise. The default filename
loaded is `early-plugins.mk`.
|
|
Before this change, the build would continue, even if a dependency
failed to build. This could lead to obscure errors in the middle of a
testsuite for instance.
With this change, the build fails immediately, exactly like when a
regular dependency fails to build.
While here, replace most uses of `|| exit $$?` with `set -e`. This
simplifies error handling if we need to add more commands to each
blocks.
Also, echo error messages to stderr.
|
|
This silences warnings such as:
mv: rename file.app to file.app.src: No such file or directory
They are harmless really, but still annoying.
|
|
|
|
we also use LOCAL_DEPS at the top-level, if it exists, to determine
which local apps to compile, in the interest of saving compile time
for projects that have many apps and multiple release configurations
|
|
`rm deps.log` was not being executed, because of 1) the ifeq around
it, checking for an empty ALL_DEPS_DIRS, which i believe was a logical
error; and 2) deps depended on apps, which means apps were compiled
before its recipe was executed, and the `rm deps.log` would be
executed after it had been written to by recursive make of the
apps.
the important reason to remove deps.log is so that dependencies get
remade when they change. otherwise you'll get mysterious errors about
missing dependencies if they need to be rebuilt, or worse, have wrong
stale beam files bundled in your release.
tests core-deps-apps and core-deps-apps-only now manually clean the
cowlib dep and rebuild at the top-level to make sure cowlib gets
rebuilt. both tests indeed fail without this fix.
this attempts to fix #1 by removing the ifeq, and #2 by having deps
and apps depend on deps.log, with deps.log 'built' (but actually
removed) by a double-colon rule with no prerequisites (which means its
recipe always be run).
|
|
This allows all plugins to append to existing variables
and makes it easier to augment the functionality of the
core plugins.
|