aboutsummaryrefslogtreecommitdiffstats
path: root/core
AgeCommit message (Collapse)Author
2017-05-12Support early-stage plugins through `$(DEP_EARLY_PLUGINS)`Jean-Sébastien Pédron
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`.
2017-05-12Make sure the build fails if a docs/rel/test/shell dep failsJean-Sébastien Pédron
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.
2017-05-12core/deps.mk: Move .app in autopatch2 only if file existsJean-Sébastien Pédron
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.
2017-04-28Consider all projects with a rebar.lock rebar projectsLoïc Hoguin
2017-04-25core/erlc.mk: added src subfolders support in makedep.erlOleksiy Kebkal
2017-04-25compile apps in the right order by looking at their LOCAL_DEPSJeffrey Griffin
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
2017-04-25fix removing deps.log at toplevel when in a multi-app layoutJeffrey Griffin
`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).
2017-04-19Move external plugin loading at the end of erlang.mkLoïc Hoguin
This allows all plugins to append to existing variables and makes it easier to augment the functionality of the core plugins.
2017-04-10Only makedep and build asn1/xrl/mib files when necessaryLoïc Hoguin
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.
2017-01-12Set ASN.1 compilation options using ERLC_ASN1_OPTS2017.01.12Klas Johansson
`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.
2016-12-19core/erlc.mk: Quote application name in .appJean-Sébastien Pédron
2016-11-20Only delete ebin when fetching Erlang.mk projectsLoïc Hoguin
Erlang.mk projects either have a .app.src, or just the Makefile with an optional .app file for compatibility.
2016-11-20Better .app autopatch handlingLoïc Hoguin
If we have a .app and a .app.src we delete the .app. If we have a Rebar project with a .app file, rename it to .app.src and continue with autopatch. If we have a non-Rebar project, leave the .app file, and then... For all cases, delete the ebin/ folder after autopatch completes.
2016-11-19Don't autopatch if rebar is mentioned in commentsLoïc Hoguin
2016-10-30Fix running Dialyzer on apps/* when they have depsLoïc Hoguin
2016-10-30Use := instead of = for list of filesLoïc Hoguin
This will make sure we don't look twice. Also make a single call to find the common file formats rather than many calls.
2016-10-28Add "make relup"Loïc Hoguin
The initial documentation is a bit rough. It's getting late and I'd like to have this in sooner rather than later. :-)
2016-10-28Use an intermediate timestamp file to know when to touch source filesJean-Sébastien Pédron
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.
2016-10-27Fix Hex package downloads on FreeBSDLoïc Hoguin
Error has been detected during the nightly packages build.
2016-10-25Use curl to fetch Hex dependenciesLoïc Hoguin
2016-10-25Use curl instead of wget/erl for fetching filesLoïc Hoguin
After a lot of soul searching and experiments, I am opting to using curl for fetching files. It works with very little manipulation on all supported systems. Some might need it installed, but most come with it. While wget was working, it had TLS validation deactivated because some users didn't have CA certificates on their system or wget was not configured properly. This does not seem to be a problem with curl as far as I tested, in particular on OSX. The fallback to use Erlang was also insecure, and probably not the best idea. Let's keep things simple. Curl is required.
2016-10-25core/deps-tools.mk: New targets `fetch-deps` and `list-deps`Jean-Sébastien Pédron
.. to fetch and list deps recurvively. Therefore, they work on direct dependencies, dependencies' dependencies, and so on. Nothing is built with those targets. The following targets are also available to work on other kinds of dependencies: make fetch-doc-deps make fetch-rel-deps make fetch-test-deps make fetch-shell-deps make list-doc-deps make list-rel-deps make list-test-deps make list-shell-deps In all cases, they include "normal" and eg. "test" dependencies of the top-level project, then only "normal" dependencies' dependencies. It's possible to include several kinds in one go: make fetch-deps DEP_TYPES='doc test' make list-deps DEP_TYPES='doc test' As it may be difficult to use the output of `make list-*` because the list could appear after other targets output (like dependencies fetching), the list is available in files pointed by the following variables: $(ERLANG_MK_RECURSIVE_DEPS_LIST) $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) Internally, `list-deps` is simply implemented on top of `fetch-deps`: the latter fills a sorted log with all the directories it traversed. `list-deps` finally just prints the log file to stdout. Fixes #560.
2016-10-23Support PROJECT_APP_EXTRA_KEYS to add keys to the .app fileJean-Sébastien Pédron
This allows to add standard keys which do not have a corresponding `PROJECT_` Makefile variable, as well as non-standard keys.
2016-10-21Update Copyright notices2016.10.21Loïc Hoguin
2016-10-21Erlang.mk is rolling releasesLoïc Hoguin
2016-10-21Deprecate Make 3Loïc Hoguin
A warning will be displayed for the time being while we keep compatibility. Also improves installation docs for Unix.
2016-10-19Escape % in app_file templatenevar
2016-10-19Add PROJECT_ENVnevar
Fix #587
2016-10-19Added implementation to resolve test.Micah Warren
2016-10-19merge PortSpec env into each output envHesaam Farhang
2016-10-09Support C compiler flag overrides for dependenciesFrank Hunleth
This change makes it possible to override the ERL_CFLAGS and ERL_LDFLAGS Makefile variables in project dependencies. For the main project, the ability to override variables associated with C compilation already existed in plugins/c_src.mk. With this change, the C compiler flag semantics are similar for both the main project and dependencies. This is important for cases where the automatically determined values for the ERTS include and library directories are incorrect. This happens in cross-compiled environments where they point to the host's include and library directories. However, the desired behaviour is to have them point to those that have been cross-compiled for the target.
2016-10-04Update rebar (should be correct this time)Loïc Hoguin
2016-10-04Revert "Update rebar in autopatch"Loïc Hoguin
This reverts commit d5c32474e0690a32371fb8fb0b5d2db2c567269b.
2016-10-04Update rebar in autopatchLoïc Hoguin
This should fix some Windows issues.
2016-07-14Build apps/* only onceKrister Svanlund
Replicating the behavior for deps/*. With refactoring from Loïc.
2016-06-09Clean up output from a previous commitLoïc Hoguin
2016-06-07Add PROJECT_MOD var to make the app callback module configurableJared Flatow
2016-05-17Fix for issue 447.Daniel Goertzen
Create ebin dir for all apps_dir apps before building any of them.
2016-03-19Merge branch 'tag_with_slash' of https://github.com/jeanparpaillon/erlang.mkLoïc Hoguin
2016-03-19Merge branch 'erlc-opts-sed' of https://github.com/Gatzy118/erlang.mkLoïc Hoguin
2016-03-19Merge branch 'fix_grep' of https://github.com/ingwinlu/erlang.mkLoïc Hoguin
2016-03-17Do not use grep Extended Modederwinlu
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).
2016-03-02Properly write hex dependencies in rebar.config for Rebar3Loïc Hoguin
2016-02-01Fix .app compilation when a git tag contains a '/'Jean Parpaillon
2016-01-24Quote paths in autopatch generated MakefileLoïc Hoguin
Fixes build of a few projects on Windows.
2016-01-14Remove unnecessary whitespace from generated rebar.configLoïc Hoguin
2016-01-08Add a function to convert ERLC_OPTS to an Erlang listLoïc Hoguin
For easier reusability in Erlang.mk and plugins.
2016-01-06Remove spaces after commas globallyNick Gates
When preparing erlc_opts, remove all comma/whitespace pairs instead of just the first
2015-12-29If the rebar binary is present, this is a rebar depLoïc Hoguin
Fixes syslog.
2015-12-24Add EUnit tests and documentationLoïc Hoguin
Also includes a fix for multi-application repositories.