%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Parallel Logtalk processes setup for selected backend Prolog compilers % Last updated on December 6, 2024 % % This file is part of Logtalk % SPDX-FileCopyrightText: 1998-2024 Paulo Moura % % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. % You may obtain a copy of the License at % % http://www.apache.org/licenses/LICENSE-2.0 % % Unless required by applicable law or agreed to in writing, software % distributed under the License is distributed on an "AS IS" BASIS, % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % See the License for the specific language governing permissions and % limitations under the License. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % if you move backend Prolog compiler specific code to an initialization % file, don't forget to also copy the following two directives! :- multifile(logtalk_library_path/2). :- dynamic(logtalk_library_path/2). :- if(current_prolog_flag(dialect, swi)). % usage: % swilgt -f parallel_logtalk_processes_setup.pl % logtalk_tester -p swi -i "-f parallel_logtalk_processes_setup.pl" % in alternative, add the code to your .swiplrc or swipl.ini file and start Logtalk as usual :- use_module(library(uuid), []). logtalk_library_path(scratch_directory, Directory) :- current_prolog_flag(tmp_dir, Prefix), uuid:uuid(UUID), atomic_list_concat([Prefix, '/', UUID], Directory). :- elif(current_prolog_flag(dialect, gprolog)). % usage: gplgt --init-goal "consult('parallel_logtalk_processes_setup.pl')" logtalk_library_path(scratch_directory, Directory) :- temporary_name(lgtXXXXXX, Name), decompose_file_name(Name, _, Prefix, _), atom_concat('/tmp/', Prefix, Directory), ( file_exists(Directory) -> true ; make_directory(Directory) ). :- elif(current_prolog_flag(dialect, yap)). % usage: yaplgt -f parallel_logtalk_processes_setup.pl % in alternative, add the code to your ~/.yaprc, ~/.prologrc, or ~/prolog.ini file and start Logtalk as usual :- use_module(library(system), [tmpnam/1, delete_file/1, file_exists/1, make_directory/1]). logtalk_library_path(scratch_directory, Directory) :- tmpnam(Directory), delete_file(Directory), ( file_exists(Directory) -> true ; make_directory(Directory) ). :- elif(current_prolog_flag(dialect, eclipse)). % usage: eclipse -L iso -t user -f parallel_logtalk_processes_setup.pl -f "$LOGTALKHOME/integration/logtalk_eclipse.pl" logtalk_library_path(scratch_directory, Directory) :- get_flag(tmp_dir, TMP_DIR0), atom_string(TMP_DIR, TMP_DIR0), get_flag(pid, PID), number_codes(PID, PIDCodes), atom_codes(PIDAtom, PIDCodes), atom_concat(TMP_DIR, logtalk, Directory0), atom_concat(Directory0, PIDAtom, Directory), ( exists(Directory) -> true ; mkdir(Directory) ). :- elif(current_prolog_flag(dialect, xvm)). % usage: xvmlgt -i parallel_logtalk_processes_setup.pl logtalk_library_path(scratch_directory, Directory) :- config_property(system/tempDir, TMP_DIR0), absolute_file_name(TMP_DIR0, TMP_DIR), pid(PID), atomic_list_concat([TMP_DIR, logtalk, PID], Directory), make_directory_path(Directory). :- elif(current_prolog_flag(dialect, sicstus)). % usage on SICStus Prolog 4.4.1 and earlier versions: % cat parallel_logtalk_processes_setup.pl "$LOGTALKHOME/integration/logtalk_sicstus.pl" > combined.pl && sicstus -l combined.pl % usage on SICStus Prolog 4.5.0 and later versions: % sicstus -l parallel_logtalk_processes_setup.pl -l "$LOGTALKHOME/integration/logtalk_sicstus.pl" :- use_module(library(system), [environ/2]). :- use_module(library(system3), [pid/1]). :- use_module(library(file_systems), [directory_exists/1, make_directory/1]). logtalk_library_path(scratch_directory, Directory) :- environ('SP_TEMP_DIR', SP_TEMP_DIR), pid(PID), number_codes(PID, PIDCodes), atom_codes(PIDAtom, PIDCodes), atom_concat(SP_TEMP_DIR, logtalk, Directory0), atom_concat(Directory0, PIDAtom, Directory), ( directory_exists(Directory) -> true ; make_directory(Directory) ). :- endif.