gfngfn / Sesterl

An ML-like statically-typed Erlang
153 stars 5 forks source link

Cannot compile a project with sesterl_stdlib but without sesterl_testing #13

Closed michallepicki closed 3 years ago

michallepicki commented 3 years ago

Hello!

When compiling this project (edit: that was at commit d33db11c533513c24ce26225dbbf380bec552ad8) I am getting the following output:

$ rebar3 sesterl compile
===> Verifying dependencies...
===> Sesterl deps: sesterl_stdlib (at: /home/michal/projects/test_sesterl_proj/_build/default/lib/sesterl_stdlib)
===> Compiling Sesterl programs (command: "sesterl build ./ -o ./_generated -p sesterl_stdlib:/home/michal/projects/test_sesterl_proj/_build/default/lib/sesterl_stdlib") ...
! [Build error] package 'sesterl_testing' not found in:
  - sesterl_stdlib (/home/michal/projects/test_sesterl_proj/_build/default/lib/sesterl_stdlib)
===> Failed to compile Sesterl package(s)

Is this expected behavior? I would imagine that test dependencies of my package's dependencies should be expected not to be present (and I think they will not get downloaded by rebar3 so the test files of dependencies should also not be compiled when compiling the parent project)

gfngfn commented 3 years ago

Thank you for trying Sesterl!

No, this behavior is not expected, and I can reproduce the error. I have to fix this.

I would imagine that test dependencies of my package's dependencies should be expected not to be present (and I think they will not get downloaded by rebar3 so the test files of dependencies should also not be compiled when compiling the parent project)

Ah, probably your guess is correct. The current implementation of Sesterl compiles tests of all the projects as well as source files when rebar3 sesterl compile is invoked. And this behavior requires test dependencies of child projects to be present when compiling parent projects.

The package sesterl_stdlib came to depend on sesterl_testing a few weeks ago, and this newly reveals the problem.

A simple workaround is to treat all test dependencies as source dependencies (although this is of course not very desirable in that it compiles modules that are only for tests as if they were sources):

 package: "test_sesterl_proj"

 source_directories:
   - "src"

 main_module: "App"

 dependencies:
   - name: "sesterl_stdlib"
     source:
       type: "git"
       repository: "https://github.com/gfngfn/sesterl_stdlib"
       spec:
         type: "branch"
         value: "master"
+  - name: "sesterl_testing"
+    source:
+      type: "git"
+      repository: "https://github.com/gfngfn/sesterl_testing"
+      spec:
+        type: "branch"
+        value: "master"

 erlang:
   output_directory: "./_generated"

I will fix this issue. Thank you for reporting!

michallepicki commented 3 years ago

Thank you, confirmed fixed