2001-04-09 20:54:03 +01:00
|
|
|
/*************************************************************************
|
|
|
|
* *
|
|
|
|
* YAP Prolog *
|
|
|
|
* *
|
|
|
|
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
|
|
|
* *
|
|
|
|
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
|
|
|
|
* *
|
|
|
|
**************************************************************************
|
|
|
|
* *
|
|
|
|
* File: load_foreign.yap *
|
|
|
|
* Last rev: 8/2/88 *
|
|
|
|
* mods: *
|
|
|
|
* comments: Utility predicates for load_foreign *
|
|
|
|
* *
|
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
load_foreign_files(Objs,Libs,Entry) :-
|
|
|
|
'$check_objs_for_load_foreign_files'(Objs,NewObjs,load_foreign_files(Objs,Libs,Entry)),
|
2007-05-24 20:54:45 +01:00
|
|
|
'$check_libs_for_load_foreign_files'(Libs,NewLibs,load_foreign_files(Objs,Libs,Entry)),
|
2001-04-09 20:54:03 +01:00
|
|
|
'$check_entry_for_load_foreign_files'(Entry,load_foreign_files(Objs,Libs,Entry)),
|
2007-05-24 20:54:45 +01:00
|
|
|
'$load_foreign_files'(NewObjs,NewLibs,Entry).
|
2001-04-09 20:54:03 +01:00
|
|
|
|
|
|
|
'$check_objs_for_load_foreign_files'(V,_,G) :- var(V), !,
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(instantiation_error,G).
|
2001-04-09 20:54:03 +01:00
|
|
|
'$check_objs_for_load_foreign_files'([],[],_) :- !.
|
|
|
|
'$check_objs_for_load_foreign_files'([Obj|Objs],[NObj|NewObjs],G) :- !,
|
|
|
|
'$check_obj_for_load_foreign_files'(Obj,NObj,G),
|
|
|
|
'$check_objs_for_load_foreign_files'(Objs,NewObjs,G).
|
|
|
|
'$check_objs_for_load_foreign_files'(Objs,_,G) :-
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(type_error(list,Objs),G).
|
2001-04-09 20:54:03 +01:00
|
|
|
|
|
|
|
'$check_obj_for_load_foreign_files'(V,_,G) :- var(V), !,
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(instantiation_error,G).
|
2001-04-09 20:54:03 +01:00
|
|
|
'$check_obj_for_load_foreign_files'(Obj,NewObj,_) :- atom(Obj), !,
|
2013-11-15 16:04:14 +00:00
|
|
|
'$process_obj_suffix'(Obj,NewObj).
|
2001-04-09 20:54:03 +01:00
|
|
|
'$check_obj_for_load_foreign_files'(Obj,_,G) :-
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(type_error(atom,Obj),G).
|
2001-04-09 20:54:03 +01:00
|
|
|
|
2007-05-24 20:54:45 +01:00
|
|
|
'$check_libs_for_load_foreign_files'(V,_,G) :- var(V), !,
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(instantiation_error,G).
|
2007-05-24 20:54:45 +01:00
|
|
|
'$check_libs_for_load_foreign_files'([],[],_) :- !.
|
|
|
|
'$check_libs_for_load_foreign_files'([Lib|Libs],[NLib|NLibs],G) :- !,
|
|
|
|
'$check_lib_for_load_foreign_files'(Lib,NLib,G),
|
|
|
|
'$check_libs_for_load_foreign_files'(Libs,NLibs,G).
|
|
|
|
'$check_libs_for_load_foreign_files'(Libs,_,G) :-
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(type_error(list,Libs),G).
|
2001-04-09 20:54:03 +01:00
|
|
|
|
2007-05-24 20:54:45 +01:00
|
|
|
'$check_lib_for_load_foreign_files'(V,_,G) :- var(V), !,
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(instantiation_error,G).
|
2007-05-24 20:54:45 +01:00
|
|
|
'$check_lib_for_load_foreign_files'(Lib,NLib,_) :- atom(Lib), !,
|
2013-11-15 16:04:14 +00:00
|
|
|
'$process_obj_suffix'(Lib,NewLib),
|
|
|
|
'$checklib_prefix'(NewLib,NLib).
|
2007-05-24 20:54:45 +01:00
|
|
|
'$check_lib_for_load_foreign_files'(Lib,_,G) :-
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(type_error(atom,Lib),G).
|
2001-04-09 20:54:03 +01:00
|
|
|
|
2013-11-15 16:04:14 +00:00
|
|
|
'$process_obj_suffix'(Obj,Obj) :-
|
|
|
|
'$swi_current_prolog_flag'(shared_object_extension, ObjSuffix),
|
|
|
|
sub_atom(Obj, _, _, 0, ObjSuffix), !.
|
|
|
|
'$process_obj_suffix'(Obj,NewObj) :-
|
|
|
|
'$swi_current_prolog_flag'(shared_object_extension, ObjSuffix),
|
|
|
|
atom_concat([Obj,'.',ObjSuffix],NewObj).
|
2007-05-24 20:54:45 +01:00
|
|
|
|
2013-11-15 16:04:14 +00:00
|
|
|
'$checklib_prefix'(F,F) :- is_absolute_file_name(F), !.
|
|
|
|
'$checklib_prefix'(F, F) :-
|
|
|
|
sub_atom(F, 0, _, _, lib), !.
|
|
|
|
'$checklib_prefix'(F, Lib) :-
|
|
|
|
atom_concat(lib, F, Lib).
|
2007-05-24 20:54:45 +01:00
|
|
|
|
|
|
|
|
2001-04-09 20:54:03 +01:00
|
|
|
'$check_entry_for_load_foreign_files'(V,G) :- var(V), !,
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(instantiation_error,G).
|
2001-04-09 20:54:03 +01:00
|
|
|
'$check_entry_for_load_foreign_files'(Entry,_) :- atom(Entry), !.
|
|
|
|
'$check_entry_for_load_foreign_files'(Entry,G) :-
|
2002-09-09 18:40:12 +01:00
|
|
|
'$do_error'(type_error(atom,Entry),G).
|
2001-04-09 20:54:03 +01:00
|
|
|
|
2010-06-17 00:29:01 +01:00
|
|
|
open_shared_object(File, Handle) :-
|
|
|
|
'$open_shared_object'(File, 0, Handle).
|
2001-04-09 20:54:03 +01:00
|
|
|
|
2010-06-17 00:29:01 +01:00
|
|
|
open_shared_object(File, Opts, Handle) :-
|
|
|
|
'$open_shared_opts'(Opts, open_shared_object(File, Opts, Handle), OptsI),
|
|
|
|
'$open_shared_object'(File, OptsI, Handle).
|
2001-04-09 20:54:03 +01:00
|
|
|
|
2010-06-17 00:29:01 +01:00
|
|
|
'$open_shared_opts'(Opts, G, OptsI) :-
|
|
|
|
var(Opts), !,
|
|
|
|
'$do_error'(instantiation_error,G).
|
|
|
|
'$open_shared_opts'([], _, 0) :- !.
|
2013-11-11 10:28:45 +00:00
|
|
|
'$open_shared_opts'([Opt|Opts], G, V) :-
|
2010-06-17 00:29:01 +01:00
|
|
|
'$open_shared_opts'(Opts, G, V0),
|
|
|
|
'$open_shared_opt'(Opt, G, OptV),
|
|
|
|
V0 is V \/ OptV.
|
|
|
|
|
|
|
|
'$open_shared_opt'(Opt, G, _) :-
|
|
|
|
var(Opt), !,
|
|
|
|
'$do_error'(instantiation_error,G).
|
|
|
|
'$open_shared_opt'(now, __, 1) :- !.
|
|
|
|
'$open_shared_opt'(global, __, 2) :- !.
|
|
|
|
'$open_shared_opt'(Opt, Goal, _) :-
|
|
|
|
'$do_error'(domain_error(open_shared_object_option,Opt),Goal).
|
|
|
|
|