https://github.com/runewalsh/fpc-unit-prioritizer
Пример использования:
UnitA.pas
- Код: Выделить всё
- unit UnitA;
 interface
 uses
 Prioritizer;
 implementation
 initialization
 RegisterUnit('UnitA', +1);
 writeln('UnitA(+1) инициализирован');
 end.
UnitB.pas
- Код: Выделить всё
- unit UnitB;
 interface
 uses
 Prioritizer;
 implementation
 initialization
 RegisterUnit('UnitB', 0);
 writeln('UnitB(0) инициализирован');
 end.
UnitC.pas
- Код: Выделить всё
- unit UnitC;
 interface
 uses
 Prioritizer;
 implementation
 initialization
 RegisterUnit('UnitC', -1);
 writeln('UnitC(-1) инициализирован');
 end.
main.pas
- Код: Выделить всё
- uses
 UnitB, UnitC, UnitA;
 begin
 end.
— вызовет секции initialization в порядке UnitA → UnitB → UnitC, независимо от чьего бы то ни было порядка подключения или взаимных зависимостей.
Решение опирается на недокументированные структуры и гвоздями прибито к каким-то платформам и версиям FPC, так что не думаю, что вызовет интерес помимо академического. Но однозначно буду использовать сам, т. к. до этого строил список модулей, которому руками нужно было дёрнуть SortAndInitialize в начале основной программы, что ну очень неудобно.





 ), велосипедики и костылики нужно направлять на уход от implementation uses, благо это можно сделать и красиво и полностью компилеронезависимо
 ), велосипедики и костылики нужно направлять на уход от implementation uses, благо это можно сделать и красиво и полностью компилеронезависимо