34
35:- module(foreign_interface, []). 36
37:- use_module(library(assertions)). 38:- use_module(library(foreign/foreign_generator)). 39:- use_module(library(change_alias)). 40:- use_module(library(codegen)). 41:- reexport(library(compound_expand)). 42:- init_expansors. 43
44term_expansion((:- gen_foreign_library(AliasSO)),
45 foreign_generator:gen_foreign_library(M, AliasSO, [])) :-
46 '$current_source_module'(M).
47term_expansion((:- gen_foreign_library(AliasSO, Init)),
48 foreign_generator:gen_foreign_library(M, AliasSO, InitL)) :-
49 ( is_list(Init)
50 ->InitL = Init
51 ; InitL = [Init]
52 ),
53 '$current_source_module'(M).
54term_expansion((:- pkg_foreign_config(Package)),
55 foreign_generator:pkg_foreign_config(M, Package)) :-
56 '$current_source_module'(M).
57term_expansion((:- use_foreign_source(FAlias)),
58 foreign_generator:use_foreign_source(M, FAlias)) :-
59 '$current_source_module'(M).
60term_expansion((:- use_foreign_header(FAlias)),
61 foreign_generator:use_foreign_header(M, FAlias)) :-
62 '$current_source_module'(M).
63term_expansion((:- foreign_dependency(FAlias)),
64 foreign_generator:foreign_dependency(M, FAlias)) :-
65 '$current_source_module'(M).
66term_expansion((:- include_foreign_dir(DAlias)),
67 foreign_generator:include_foreign_dir(M, DAlias)) :-
68 '$current_source_module'(M).
69term_expansion((:- library_foreign_dir(DAlias)),
70 foreign_generator:library_foreign_dir(M, DAlias)) :-
71 '$current_source_module'(M).
72term_expansion((:- extra_compiler_opts(COpt)),
73 foreign_generator:extra_compiler_opts(M, COpt)) :-
74 '$current_source_module'(M).
75term_expansion((:- link_foreign_library(Lib)),
76 foreign_generator:link_foreign_library(M, Lib)) :-
77 '$current_source_module'(M).
78
82
83term_expansion(end_of_file, Decl) :-
84 '$current_source_module'(M),
85 module_property(M, file(File)),
86 prolog_load_context(source, File),
87 !,
88 gen_foreign_library(M, AliasSO, InitL),
89 change_alias(add_suffix('_so'), AliasSO, AliasSOPl),
90 generate_library(M, AliasSO, AliasSOPl, InitL, File),
91 Decl = [(:- [AliasSOPl]), end_of_file]