processone / ejabberd

Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server)
https://www.process-one.net/en/ejabberd/
Other
6k stars 1.5k forks source link

Crash compiling ejabberd with Erlang/OTP 27.0-rc2 #4186

Closed badlop closed 1 month ago

badlop commented 3 months ago

In Erlang/OTP 27.0-rc2, code:lib_dir/2 was marked as deprecated: https://erlang.org/documentation/doc-15.0-rc2/doc/deprecations.html#otp-27

Several libraries required by ejabberd include C source code and use rebar3, so they depend on the port_compiler rebar3 plugin (see pc in hex.pm and port_compiler in github).

That plugin uses the deprecated function in https://github.com/blt/port_compiler/blob/master/src/pc_port_env.erl#L190

This itself is not an urgent problem, it just means we all should stop using that function as soon as possible.

Unfortunately, port_compiler has the erlang option warnings_as_errors enabled: https://github.com/blt/port_compiler/blob/master/rebar.config#L13 and consequently, the erlang 27.0-rc2 compiler warning is considered a compilation error.

The result is that, when compiling ejabberd or many of its dependencies, compilation crashes with a message like:

===> Analyzing applications...
===> Compiling configure_deps
===> Verifying dependencies...
===> Fetching base64url v1.0.1
===> Fetching cache_tab v1.0.30
===> Fetching pc v1.14.0
===> Analyzing applications...
===> Compiling pc
===> Compiling _build/default/plugins/pc/src/pc_port_env.erl failed
_build/default/plugins/pc/src/pc_port_env.erl:190:10: code:lib_dir/2 is deprecated; this functionality will be removed in a future release

===> Errors loading plugin pc. Run rebar3 with DEBUG=1 set to see errors.

...

===> Uncaught error in rebar_core. Run with DIAGNOSTIC=1 to see stacktrace or consult rebar3.crashdump
===> When submitting a bug report, please include the output of `rebar3 report "your command"`
make: *** [Makefile:215: _build/default/lib/.built] Error 1

This problem appears when compiling ejabberd with rebar3, mix, or whatever, because the dependencies themselves use rebar3 as compilation method.


A related fix was committed to rebar3 in https://github.com/erlang/rebar3/commit/17f6861c1540d8e4df586f29cb2d4e490e8f4bb7

However, a fixed rebar3 release was not yet published.


This is already reported in port_compiler, a fix is ready, and just awaiting a release: https://github.com/blt/port_compiler/issues/79

badlop commented 1 month ago

Fixed in https://github.com/processone/ejabberd/commit/ca9ca7f5af93ce5edc80660b7623819279419e2f