[ 
https://issues.apache.org/jira/browse/THRIFT-6186?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jens Geyer updated THRIFT-6186:
-------------------------------
    Description: 
lib/erl itself compiles on OTP 29, but {{make -C lib/erl check}} cannot get as 
far as running a test, because the eunit-only {{meck}} dependency does not 
compile there.

rebar.config pins it in the test profile:

{code}
{profiles, [
    {test, [
        {deps, [{meck, "0.9.2"}]},
{code}

meck 0.9.2 compiles with warnings treated as errors, and {{catch ...}} became 
deprecated in OTP 29:

{code}
===> Fetching meck v0.9.2
===> Compiling meck
===> Compiling _build/test/lib/meck/src/meck_matcher.erl failed
    /-- _build/test/lib/meck/src/meck_matcher.erl:
    |
 76 |  (catch erlang:apply(hamcrest, assert_that, [Value, HamcrestMatcher])) == 
true;
    |   \-- 'catch ...' is deprecated; please use 'try ... catch ... end' 
instead.
Compile directive 'nowarn_deprecated_catch' can be used to suppress warnings in 
selected modules.
{code}

Verified on a clean ubuntu:24.04 with the prebuilt OTP 29.0.6 build from 
builds.hex.pm. 25.3.2.9, 26.2.5.21, 27.3.4.17 and 28.5.0.6 all give 349 tests 
and 0 failures on the same tree, so this is specific to 29.

Worth noting that lib/erl's own sources use the same deprecated construct in 
several places -- thrift_sslsocket_transport, thrift_reconnecting_client and 
thrift_socket_server among them. Those are warnings rather than errors because 
the project does not set warnings_as_errors, so they do not block the build 
today, but they are the same cleanup and could reasonably be done in the same 
pass.

Options, roughly in order of preference:

# Raise the meck pin. 1.0.0 is current and compiles on 29.
# Keep 0.9.2 and add {{nowarn_deprecated_catch}} for the dependency, which is 
awkward to do cleanly for a hex dep.

The CI job added in THRIFT-6171 covers 25.3, 26.2, 27.3 and 28.5 and 
deliberately leaves 29 out, with a comment in the matrix pointing here. Once 
this is fixed, 29 should be added to that matrix.

----
Investigated and written with AI assistance (Claude Opus 5). The build failures 
quoted above were reproduced by hand in clean containers.

  was:
lib/erl itself compiles on OTP 29, but {{make -C lib/erl check}} cannot get as 
far as running a test, because the eunit-only {{meck}} dependency does not 
compile there.

rebar.config pins it in the test profile:

{code}
{profiles, [
    {test, [
        {deps, [{meck, "0.9.2"}]},
{code}

meck 0.9.2 compiles with warnings treated as errors, and {{catch ...}} became 
deprecated in OTP 29:

{code}
===> Fetching meck v0.9.2
===> Compiling meck
===> Compiling _build/test/lib/meck/src/meck_matcher.erl failed
    /-- _build/test/lib/meck/src/meck_matcher.erl:
    |
 76 |  (catch erlang:apply(hamcrest, assert_that, [Value, HamcrestMatcher])) == 
true;
    |   \-- 'catch ...' is deprecated; please use 'try ... catch ... end' 
instead.
Compile directive 'nowarn_deprecated_catch' can be used to suppress warnings in 
selected modules.
{code}

Verified on a clean ubuntu:24.04 with the prebuilt OTP 29.0.6 build from 
builds.hex.pm. 25.3.2.9, 26.2.5.21, 27.3.4.17 and 28.5.0.6 all give 349 tests 
and 0 failures on the same tree, so this is specific to 29.

Worth noting that lib/erl's own sources use the same deprecated construct in 
several places -- thrift_sslsocket_transport, thrift_reconnecting_client and 
thrift_socket_server among them. Those are warnings rather than errors because 
the project does not set warnings_as_errors, so they do not block the build 
today, but they are the same cleanup and could reasonably be done in the same 
pass.

Options, roughly in order of preference:

# Raise the meck pin. 1.0.0 is current and compiles on 29.
# Keep 0.9.2 and add {{nowarn_deprecated_catch}} for the dependency, which is 
awkward to do cleanly for a hex dep.

The CI job added in THRIFT-6171 covers 25.3, 26.2, 27.3 and 28.5 and 
deliberately leaves 29 out, with a comment in the matrix pointing here. Once 
this is fixed, 29 should be added to that matrix.


> lib/erl eunit tests cannot run on OTP 29: the pinned meck 0.9.2 does not 
> compile
> --------------------------------------------------------------------------------
>
>                 Key: THRIFT-6186
>                 URL: https://issues.apache.org/jira/browse/THRIFT-6186
>             Project: Thrift
>          Issue Type: Bug
>          Components: Build Process, Erlang - Library
>            Reporter: Jens Geyer
>            Priority: Major
>
> lib/erl itself compiles on OTP 29, but {{make -C lib/erl check}} cannot get 
> as far as running a test, because the eunit-only {{meck}} dependency does not 
> compile there.
> rebar.config pins it in the test profile:
> {code}
> {profiles, [
>     {test, [
>         {deps, [{meck, "0.9.2"}]},
> {code}
> meck 0.9.2 compiles with warnings treated as errors, and {{catch ...}} became 
> deprecated in OTP 29:
> {code}
> ===> Fetching meck v0.9.2
> ===> Compiling meck
> ===> Compiling _build/test/lib/meck/src/meck_matcher.erl failed
>     /-- _build/test/lib/meck/src/meck_matcher.erl:
>     |
>  76 |  (catch erlang:apply(hamcrest, assert_that, [Value, HamcrestMatcher])) 
> == true;
>     |   \-- 'catch ...' is deprecated; please use 'try ... catch ... end' 
> instead.
> Compile directive 'nowarn_deprecated_catch' can be used to suppress warnings 
> in selected modules.
> {code}
> Verified on a clean ubuntu:24.04 with the prebuilt OTP 29.0.6 build from 
> builds.hex.pm. 25.3.2.9, 26.2.5.21, 27.3.4.17 and 28.5.0.6 all give 349 tests 
> and 0 failures on the same tree, so this is specific to 29.
> Worth noting that lib/erl's own sources use the same deprecated construct in 
> several places -- thrift_sslsocket_transport, thrift_reconnecting_client and 
> thrift_socket_server among them. Those are warnings rather than errors 
> because the project does not set warnings_as_errors, so they do not block the 
> build today, but they are the same cleanup and could reasonably be done in 
> the same pass.
> Options, roughly in order of preference:
> # Raise the meck pin. 1.0.0 is current and compiles on 29.
> # Keep 0.9.2 and add {{nowarn_deprecated_catch}} for the dependency, which is 
> awkward to do cleanly for a hex dep.
> The CI job added in THRIFT-6171 covers 25.3, 26.2, 27.3 and 28.5 and 
> deliberately leaves 29 out, with a comment in the matrix pointing here. Once 
> this is fixed, 29 should be added to that matrix.
> ----
> Investigated and written with AI assistance (Claude Opus 5). The build 
> failures quoted above were reproduced by hand in clean containers.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to