Did you know ... Search Documentation:
Pack logtalk -- logtalk-3.85.0/scripts/embedding/gprolog/NOTES.md

This file is part of Logtalk https://logtalk.org/ SPDX-FileCopyrightText: 1998-2023 Paulo Moura <pmoura@logtalk.org> SPDX-License-Identifier: Apache-2.0

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.

This directory contains example scripts for creating GNU Prolog generated executable files that embed Logtalk and an optional Logtalk application.

The following scripts are provided:

[103, 112, 114, 111, 108, 111, 103, 95, 101, 109, 98, 101, 100, 95, 108, 111, 103, 116, 97, 108, 107, 46, 115, 104]
Bash shell script for POSIX systems
[103, 112, 114, 111, 108, 111, 103, 95, 101, 109, 98, 101, 100, 95, 108, 111, 103, 116, 97, 108, 107, 46, 112, 115, 49]
PowerShell script for Windows systems

Both scrips create a logtalk executable that embeds the Logtalk compiler/runtime and an optional application; starts the top-level interpreter when run.

Usage

Use gprolog_embed_logtalk.sh -h or gprolog_embed_logtalk.ps1 -h for a list and description of the script options.

To define an application goal to be called automatically when running an executable, try e.g.

$ gprolog_embed_logtalk.sh ... -- --strip --no-top-level /full/path/to/init.pl

With the contents of the init.pl file being an initialization/1 directive calling the startup goal. For example:

:- initialization('::'(app,start)).

To avoid syntax errors, you may need to use canonical notation in the argument of the directive as exemplified.

Another example is generating a new top-level that includes Logtalk and accepts the same command-line options as gprolog:

$ ./gprolog_embed_logtalk.sh -c -d ~/collect -- --new-top-level

See other script usage examples in the `../SCRIPT.txt` file.

Known issues

The script generates some `suspicious predicate {}/1` warnings for the adapter file, gnu.pl. These can be safely ignored.

A gplc limitation when compiling calls to multifile predicates requires files that contain those calls but don't define clauses for the multifile predicates to include the multifile predicate directives (or to meta-call the multifile predicates). For example, if your code calls the predicate logtalk_library_path/2 but doesn't define clauses for it (in the same file):

:- if(current_logtalk_flag(prolog_dialect, gnu)).
        % workaround gplc limitation when dealing with multifile predicates
        % that are called from a file but not defined in that file
        :- multifile(logtalk_library_path/2).
:- endif.

Be sure to read the GNU Prolog manual on gplc, specially the discussion on how the calling order for initialization goals found in different files is machine-dependent. This may dictate listing the files being compiled by it in a specific order to avoid runtime predicate existence errors.