Dynamic multifile hook predicate used to specify‘path aliases’.
This hook is called by absolute_file_name/3
to search files specified as
Alias(Name)
, e.g., library(lists)
. This
feature is best described using an example. Given the definition:
file_search_path(demo, '/usr/lib/prolog/demo').
the file specification demo(myfile)
will be expanded to
/usr/lib/prolog/demo/myfile
. The second argument of
file_search_path/2
may be another alias.
Below is the initial definition of the file search path. This path
implies swi(<Path>)
and refers to a file
in the SWI-Prolog home directory. The alias foreign(<Path>)
is intended for storing shared libraries (.so
or .DLL
files). See also
use_foreign_library/1.
user:(file_search_path(library, Dir) :-
library_directory(Dir)).
user:file_search_path(swi, Home) :-
current_prolog_flag(home, Home).
user:file_search_path(swi, Home) :-
current_prolog_flag(shared_home, Home).
user:file_search_path(library, app_config(lib)).
user:file_search_path(library, swi(library)).
user:file_search_path(library, swi(library/clp)).
user:file_search_path(foreign, swi(ArchLib)) :-
current_prolog_flag(apple_universal_binary, true),
ArchLib = 'lib/fat-darwin'.
user:file_search_path(foreign, swi(ArchLib)) :-
\+ current_prolog_flag(windows, true),
current_prolog_flag(arch, Arch),
atom_concat('lib/', Arch, ArchLib).
user:file_search_path(foreign, swi(ArchLib)) :-
current_prolog_flag(msys2, true),
current_prolog_flag(arch, Arch),
atomic_list_concat([lib, Arch], /, ArchLib).
user:file_search_path(foreign, swi(SoLib)) :-
current_prolog_flag(msys2, true),
current_prolog_flag(arch, Arch),
atomic_list_concat([bin, Arch], /, SoLib).
user:file_search_path(foreign, swi(SoLib)) :-
( current_prolog_flag(windows, true)
-> SoLib = bin
; SoLib = lib
).
user:file_search_path(path, Dir) :-
getenv('PATH', Path),
( current_prolog_flag(windows, true)
-> atomic_list_concat(Dirs, (;), Path)
; atomic_list_concat(Dirs, :, Path)
),
'$member'(Dir, Dirs).
user:file_search_path(user_app_data, Dir) :-
'$xdg_prolog_directory'(data, Dir).
user:file_search_path(common_app_data, Dir) :-
'$xdg_prolog_directory'(common_data, Dir).
user:file_search_path(user_app_config, Dir) :-
'$xdg_prolog_directory'(config, Dir).
user:file_search_path(common_app_config, Dir) :-
'$xdg_prolog_directory'(common_config, Dir).
user:file_search_path(app_data, user_app_data('.')).
user:file_search_path(app_data, common_app_data('.')).
user:file_search_path(app_config, user_app_config('.')).
user:file_search_path(app_config, common_app_config('.')).
user:file_search_path(app, swi(app)).
user:file_search_path(app, app_data(app)).
user:file_search_path(working_directory, CWD) :-
working_directory(CWD, CWD).
The '$xdg_prolog_directory'/2 uses
either the
XDG
Base Directory or win_folder/2
on Windows. On Windows, user config is mapped to roaming appdata
(CSIDL_APPDATA), user data to the non-roaming (CSIDL_LOCAL_APPDATA) and
common data to (CSIDL_COMMON_APPDATA).
The file_search_path/2
expansion is used by all loading predicates as well as by absolute_file_name/[2,3].
The Prolog flag verbose_file_search
can be set to true
to help debugging Prolog's search for
files.