I would recommend taking a step back. Injecting attributes from one module
into the other is almost never going to work because the compiler happens
in parallel. There is no guaranteed order of execution. B may not even be
available unless you require it, which, as you said, means it will be
compiled before A.

I would recommend reversing it if possible and have B explicitly require A.


*José Valim*
www.plataformatec.com.br
Skype: jv.ptec
Founder and Director of R&D

On Tue, Feb 28, 2017 at 10:04 AM, Brian Cardarella <[email protected]>
wrote:

> The problem is the compilation order. The relationship between mod A & B
> is being written in __before_compile__ for each module. mod A is using
> Module.put_attribute(B, :requires, A) in its __before_compile__ then B
> would do something like:
>
> quote do
>   for mod <- @requires, do: require mod
> end
>
> However B gets compiled before A and its @requires is always empty.
>
> On Tuesday, February 28, 2017 at 3:59:09 AM UTC-5, José Valim wrote:
>>
>> Actually, if you invoke the other module explicitly, it should also be
>> enough to list it as a dependency and for Elixir/Mix to track it. Unless
>> you are somehow generating those module names dynamically. Here is a good
>> article on the topic: http://milhouseonsoftwa
>> re.com/2016/08/11/understanding-elixir-recompilation/
>>
>>
>>
>> *José Valim*
>> www.plataformatec.com.br
>> Skype: jv.ptec
>> Founder and Director of R&D
>>
>> On Tue, Feb 28, 2017 at 9:57 AM, José Valim <
>> [email protected]> wrote:
>>
>>> "require OtherModule" should do it. If not, it is a bug in Mix or
>>> Elixir, so please provide a mechanism to reproduce it so we can fix it. :)
>>>
>>>
>>>
>>> *José Valim*
>>> www.plataformatec.com.br
>>> Skype: jv.ptec
>>> Founder and Director of R&D
>>>
>>> On Tue, Feb 28, 2017 at 9:55 AM, Brian Cardarella <[email protected]>
>>> wrote:
>>>
>>>> I am doing some meta programming that has one module depending upon the
>>>> state of another. However it isn't being picked up by the compiler that
>>>> these two modules are related. And when the parent changes the child should
>>>> be marked for recompilation. It would be really nice if we had a simple
>>>> module attribute like: `@dependency_of` that took a list of modules. This
>>>> could be incorporated into the manifest write out for determining
>>>> dependencies. I assume at that point the compiler could work as normal.
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "elixir-lang-core" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>>> gid/elixir-lang-core/947a0dc2-20d0-4c45-8d45-eaaec3e60861%40
>>>> googlegroups.com
>>>> <https://groups.google.com/d/msgid/elixir-lang-core/947a0dc2-20d0-4c45-8d45-eaaec3e60861%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/ms
> gid/elixir-lang-core/6036391b-af14-4594-ae1c-c37b8aa2826a%
> 40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/6036391b-af14-4594-ae1c-c37b8aa2826a%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KKDpLaq7O5rm1gk7Fw%3D1cfLjTnaSbdwax-dE%3D7q7Ttsg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to