[GNC-dev] Can a module call a function from another module?
jean laroche
ripngo at gmail.com
Sat Apr 18 15:06:38 EDT 2020
Thanks for all the background, I understand it a lot better now. Indeed,
I've noticed the intermingled UI/logic code in places, and I agree
that's not good.
What I want to try is launch the reconcile from the import, exactly like
aqbanking, so that shouldn't be a problem. No specific implementation
function.
Jean
On 4/18/2020 12:02 PM, John Ralls wrote:
> One other consideration: The dependency should make sense architecturally: A dependency on code in libgnucash/engine nearly always makes sense; a dependency in the register on a function in import/export does not. That doesn't mean that you should copy-and-paste the code instead, it means that the code should be extracted from import/export and moved somewhere that does make sense. The logical place for GUI code is gnome-utils while business logic code belongs in libgnucash/engine--and note that there is a *lot* of business logic code that has gotten intermingled with GUI code and needs to be refactored out. It's a major maintenance headache because it often means that the same business logic is implemented in more than one place, often with subtle differences.
>
> Whether that's the case for your window-reconcile.c example depends on what you need to do: If you want to launch the reconcile window from the OFX importer the way AQBanking does, no problem. If you need some implementation function in window-reconcile.c then it strongly suggests that that function is of more general use than just the reconcile window and probably belongs somewhere else.
>
> Regards,
> John Ralls
>
>
>> On Apr 18, 2020, at 5:29 AM, Geert Janssens <geert.gnucash at kobaltwit.be> wrote:
>>
>> First off, modules are mostly on the way out. I have been working on removing most uses of
>> those and plan to eliminate even more. The gnc_module code itself will remain until we have a
>> better alternative.
>>
>> Other than that, yes, you are allowed to include headers from other "modules". Or more
>> generally from other compile units (the objects defined with add_library or add_object). There
>> are other restrictions though:
>>
>> 1. you may have to add the proper include and library directories to the compile unit's
>> CMakeLists.txt file. Without this the compiler won't find the header file (and later the library to
>> link to)
>>
>> 2. In doing so you should be careful not to introduce circular dependencies. That is if unit A
>> already depends on unit B, you can't make unit B also depend unit A.
>>
>> 3. reconcile-window.h is a C header file, while gnc-ofx-import.cpp is a C++ source file. You may
>> have to include it inside an 'extern "C"' block.
>>
>> You didn't provide any details as to what errors you got, so at this point it's hard to tell what
>> exactly went wrong.
>>
>> Regards,
>>
>> Geert
>>
>> Op zaterdag 18 april 2020 07:29:15 CEST schreef jeanl:
>>> Devs, I have a question to which I can't find an answer. It is possible for
>>> a function from a module (say import-ofx) to call a function from another
>>> module (declared in "reconcile-window.h" for example).
>>> I'm not able to include reconcile-window.h from gnc-ofx-import.cpp , I
>>> assume the build isn't setup to include the right headers.
>>> But perhaps this is by design and a module isn't supposed to be able to call
>>> another one. In that case, how can we make it so a function from a certain
>>> module is followed by a call to a function from a different module
>>> automatically?
>>> J.
>>>
>>>
>>>
>>> --
>>> Sent from: http://gnucash.1415818.n4.nabble.com/GnuCash-Dev-f1435356.html
>>> _______________________________________________
>>> gnucash-devel mailing list
>>> gnucash-devel at gnucash.org
>>> https://lists.gnucash.org/mailman/listinfo/gnucash-devel
>>
>> _______________________________________________
>> gnucash-devel mailing list
>> gnucash-devel at gnucash.org
>> https://lists.gnucash.org/mailman/listinfo/gnucash-devel
> _______________________________________________
> gnucash-devel mailing list
> gnucash-devel at gnucash.org
> https://lists.gnucash.org/mailman/listinfo/gnucash-devel
More information about the gnucash-devel
mailing list