Age | Commit message (Collapse) | Author |
|
We use $1 instead of $(1) or $p instead of $(p) when possible,
except when building variable names (pkg_$(p)_name for example,
but also $(dep_fetch_$(1))).
|
|
Use the query_* equivalents instead.
|
|
When switching between normal build and running tests
it takes a while for modules to be rebuilt. With the
beam-cache the files are saved and can be restored
when switching between contexts. This greatly speeds
up the context switching.
|
|
|
|
Loïc: Added more info to guide.
|
|
It was removed by mistake.
|
|
|
|
In some cases the input will be parsed as UTF-8 and converted
to "characters" and in others it won't and will be processed
as bytes (for example, `erl -oldshell` will do that). This means
that encoding-dependent characters such as "é" only need to be
converted to binary in the former case.
To detect which situation we are in we check what the value of
"é" is. If it is [233] then the eval input was parsed as UTF-8
and converted to characters. Otherwise we assume it wasn't.
|
|
|
|
Internally, strings were stored using Unicode code points. However, when
being written to disk with the `file:write_file()` function, there were
converted to ISO-8859-1. According to the documentation, that is because
the file module is bytewise-oriented: the conversion to another encoding
than ISO-8859-1 is the responsibility of the caller.
Using unicode:character_to_binary() permits the script to convert the
Unicode string to an UTF-8-encoded binary.
Without this patch, the added testcase would fail with the following
error:
gmake[3]: *** No rule to make target '(...)/erlang.mk/test/h��test_core_makedep_non_usascii_paths/deps/test_core_makedep_non_usascii_paths_dep/include/hello.hrl', needed by 'src/hello.erl'. Stop.
In this case, the path (passed from the Makefile to the `makedep.erl`
script) contains UTF-8-encoded `é` characters but it was converted when
doing the final file I/O.
|
|
--first-parent is not available on CentOS 7.
|
|
The issue was that when a new dep is added the last-makefile-change
update was done in the dependency and not in the top-level Makefile,
preventing the rebuild of the top-level project.
A test was also added to do the same when editing dependencies and
things seem to work properly in that case.
Thanks to robinchew on IRC for the great help debugging this.
|
|
|
|
|
|
When this option is used no include file is generated.
Therefore don't error out if no include file can be found.
|
|
|
|
This avoids the issue where clean will remove a file that was
otherwise generated and won't be regenerated. This might also
help with parallel building.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Because we were unconditionally including the makedep file,
it would be built even if the target was unrelated (like
"make help"), and it would also trigger building of xrl
and other files that produce Erlang code.
Instead the makedep file is now included as a wildcard:
if it exists it gets included, if it doesn't it's not,
and if it's created in the middle of execution it gets
included only then.
More details on the technique can be found at
http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
A test has been added to make sure the behavior does not
come back at a later time.
|
|
`ERLC_ASN1_OPTS` can be used to pass compiler options when compiling
ASN.1 files. By default, Erlang.mk will leave this empty, but it can
be redefined in a Makefile.
|
|
|
|
This will make sure we don't look twice.
Also make a single call to find the common file formats
rather than many calls.
|
|
The previous approach spawned a shell for every single source files. As
we disable parallel make jobs, this is very time consuming.
The new approach uses an intermediate timestamp file in $(ERLANG_MK_TMP)
to record the last modification of any of $(MAKEFILE_LIST) and touch
all source files in one command. Then, the .app file depends on this
timestamp file.
We test the existence of this timestamp file: if if doesn't exist, don't
touch source files, they will be built anyway.
$(PROJECT).d now depends directly on $(MAKEFILE_LIST); before, this
dependency was indirect through $(ERL_FILES). Also, once $(ERL_FILES)
were touched, we do the same with $(PROJECT).d because there is no need
to regen it because of this.
|
|
This allows to add standard keys which do not have a corresponding
`PROJECT_` Makefile variable, as well as non-standard keys.
|
|
|
|
|
|
Fix #587
|
|
|
|
|
|
|
|
Extended Mode uses { and } as special characters. Making grep
implementations other then GNU grep fail (see
http://www.gnu.org/software/grep/manual/grep.html#Basic-vs-Extended).
|
|
|
|
This makes i18n work. It worked before, but I didn't know,
and broke it. Next commit will add i18n to the index to
ensure this doesn't happen again.
|
|
One case was added, where a -compile attribute specified a list
that included a parse_transform. This affected alog, for example.
The COMPILE_FIRST variable is now filled from a digraph. This
allows us to keep track of the dependency tree properly, rather
than rely on luck. This affected erlando.
With both of these changes in, a large chunk of the rebar
autopatch code can be removed, the part that concerned the
auto detection of file dependencies.
On the other hand, we still need to honor the erl_first_files
configuration value, otherwise the parse_trans project fails
to build. While it would be possible to detect these dependencies
automatically too, it's probably too complex to bother, at least
for now.
|
|
|
|
We can now use 'make -j 32' again. All tests pass. There might
be some issues left with the areas that are not fully tested
yet (some plugins).
A few changes in behavior:
* 'make app' will also do 'make deps' unless SKIP_DEPS is set.
You can use 'make app-build' instead to just build the application.
* 'make rel' will also do 'make app' (and therefore deps). There
are no alternative target to keep the old behavior at this time.
|
|
The `-n` flag is not standard and not portable. It is supported by many
Bourne shell to suppress the trailing newline character. But some old
shells do not support this and "-n" is printed.
This is the case for instance on some old versions of Mac OS X where
`/bin/sh` is Bash 3.2.
|
|
|
|
Everything will be rebuilt when the Makefile or any included
Makefile (like Erlang.mk or plugins) change.
Only the .app will be rebuilt when the .app.src file changes.
|
|
|
|
|
|
This changes adds Rebar-like "apps/" functionality.
From this commit onward, Erlang.mk supports 4 types of repositories:
- Repo with an Erlang app at root level + deps/
- Repo with an Erlang app at root level + apps/ deps/
- Repo with no app at root level + deps/
- Repo with no app at root level + apps/ deps/
Example usage:
- make new-app in=webchat
- make new t=gen_server n=my_chat in=webchat
- make
Replace new-app with new-lib to create an OTP library instead of
an OTP application.
|
|
Replacing $(newline) occurances with \n before passing it to printf
instead of echo ensures valid output accross different platforms.
|
|
|