#!/usr/bin/env bash
#############################################################################
##
## Logtalk installation script
## Last updated on November 10, 2024
##
## This file is part of Logtalk
## SPDX-FileCopyrightText: 1998-2024 Paulo Moura
## 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.
##
#############################################################################
if [ -f "/etc/debian_version" ]; then
default_prefix=/usr
else
case $( uname -s ) in
Darwin ) default_prefix=/opt/local;;
* ) default_prefix=/usr/local;;
esac
fi
# allow using this script from any directory
cd "$(dirname "$0")" || exit 1
version=$(cat ../VERSION.txt)
version_base=$(cat ../VERSION.txt | cut -f1 -d"-")
default_directory=logtalk-$version
print_version() {
echo "Current $(basename "$0") version:"
echo " 0.12"
exit 0
}
usage_help()
{
echo
echo "This script install Logtalk on a default or a user-specified directory."
echo "It may require a user with administrative privileges or the use of sudo."
echo
echo "Usage:"
echo " $(basename "$0") [-p prefix] [-d directory]"
echo " $(basename "$0") -v"
echo " $(basename "$0") -h"
echo
echo "Optional arguments:"
echo " -p prefix directory for the installation (default is $default_prefix)"
echo " -d installation directory (default is $default_directory)"
echo " -v print script version"
echo " -h help"
echo
}
while getopts "p:d:vh" option
do
case $option in
v) print_version;;
p) prefix_argument="$OPTARG";;
d) directory_argument="$OPTARG";;
h) usage_help; exit;;
*) usage_help; exit;;
esac
done
if [ "$prefix_argument" != "" ] && [ ! -d "$prefix_argument" ] ; then
echo "Error! Prefix directory does not exist: $prefix_argument"
usage_help
exit 1
elif [ "$prefix_argument" != "" ] ; then
prefix="$prefix_argument"
else
prefix="$default_prefix"
fi
if [ "$directory_argument" != "" ] ; then
directory="$directory_argument"
else
directory="$default_directory"
fi
if [ ! -w "$prefix" ] ; then
echo "Error! No write permission for the prefix directory: $prefix" >&2
usage_help
exit 1
fi
echo
echo "Installing Logtalk $version on \"$prefix/share\" ..."
echo
mkdir -p "$prefix/share"
rm -rf "$prefix/share/$directory"
rm -f "$prefix/share/logtalk"
mkdir -p "$prefix/share/$directory"
cp -R ../* "$prefix/share/$directory"
cd "$prefix/share/$directory" || exit 1
chmod a+x scripts/cleandist.sh
scripts/cleandist.sh
cd ..
ln -sf "$directory" logtalk
mkdir -p "$prefix/bin"
cd "$prefix/bin" || exit 1
ln -sf ../share/logtalk/scripts/logtalk_allure_report.sh logtalk_allure_report
ln -sf ../share/logtalk/scripts/logtalk_tester.sh logtalk_tester
ln -sf ../share/logtalk/scripts/logtalk_doclet.sh logtalk_doclet
ln -sf ../share/logtalk/scripts/logtalk_user_setup.sh logtalk_user_setup
cp -f ../share/logtalk/scripts/logtalk_version_select.sh logtalk_version_select
ln -sf ../share/logtalk/scripts/logtalk_backend_select.sh logtalk_backend_select
ln -sf ../share/logtalk/tools/diagrams/lgt2svg.sh lgt2svg
ln -sf ../share/logtalk/tools/lgtdoc/xml/lgt2pdf.sh lgt2pdf
ln -sf ../share/logtalk/tools/lgtdoc/xml/lgt2html.sh lgt2html
ln -sf ../share/logtalk/tools/lgtdoc/xml/lgt2xml.sh lgt2xml
ln -sf ../share/logtalk/tools/lgtdoc/xml/lgt2md.sh lgt2md
ln -sf ../share/logtalk/tools/lgtdoc/xml/lgt2rst.sh lgt2rst
ln -sf ../share/logtalk/tools/lgtdoc/xml/lgt2txt.sh lgt2txt
ln -sf ../share/logtalk/tools/packs/lgtenv.sh lgtenv
echo "Links to the following scripts have been created on \"$prefix/bin\":"
echo
echo "- logtalk_user_setup, logtalk_backend_select, logtalk_version_select"
echo "- logtalk_tester, logtalk_allure_report, logtalk_doclet"
echo "- lgt2svg, lgt2pdf, lgt2html, lgt2xml, lgt2md, lgt2rst, lgt2txt"
echo "- lgtenv"
echo
echo "Ensure that the \"$prefix/bin\" directory is in your PATH."
ln -sf ../share/logtalk/integration/bplgt.sh bplgt
ln -sf ../share/logtalk/integration/ciaolgt.sh ciaolgt
ln -sf ../share/logtalk/integration/cxlgt.sh cxlgt
ln -sf ../share/logtalk/integration/eclipselgt.sh eclipselgt
ln -sf ../share/logtalk/integration/gplgt.sh gplgt
ln -sf ../share/logtalk/integration/jiplgt.sh jiplgt
ln -sf ../share/logtalk/integration/xvmlgt.sh xvmlgt
ln -sf ../share/logtalk/integration/quintuslgt.sh quintuslgt
ln -sf ../share/logtalk/integration/sicstuslgt.sh sicstuslgt
ln -sf ../share/logtalk/integration/swilgt.sh swilgt
ln -sf ../share/logtalk/integration/taulgt.sh taulgt
ln -sf ../share/logtalk/integration/tplgt.sh tplgt
ln -sf ../share/logtalk/integration/xsblgt.sh xsblgt
ln -sf ../share/logtalk/integration/yaplgt.sh yaplgt
mkdir -p ../share/man/man1
cd ../share/man/man1 || exit 1
gzip --best ../../logtalk/man/man1/*.1
for file in ../../logtalk/man/man1/*.1.gz ; do
ln -sf "$file" "$(basename "$file")"
done
if [ "$(command -v install-info)" != "" ]; then
mkdir -p ../../info
cd ../../info || exit 1
if [ -f ../logtalk/docs/LogtalkAPIs-$version_base.info ] ; then
if [ -f dir ] ; then
for file in ./LogtalkAPIs-*.info ; do
[ -e "$file" ] || continue
rm "$file"
install-info --silent --delete "$file" dir > /dev/null 2>&1
done
fi
cp ../logtalk/docs/LogtalkAPIs-$version_base.info .
install-info LogtalkAPIs-$version_base.info dir
fi
if [ -f ../logtalk/manuals/TheLogtalkHandbook-$version_base.info ] ; then
if [ -f dir ] ; then
for file in ./TheLogtalkHandbook-*.info ; do
[ -e "$file" ] || continue
rm "$file"
install-info --silent --delete "$file" dir > /dev/null 2>&1
done
fi
cp ../logtalk/manuals/TheLogtalkHandbook-$version_base.info .
install-info TheLogtalkHandbook-$version_base.info dir
fi
echo "Ensure that the \"$prefix/share/info\" directory is in your INFOPATH."
fi
echo
echo "The following integration scripts are installed for running Logtalk"
echo "with selected backend Prolog compilers:"
echo
echo "* B-Prolog (8.1 or later): bplgt (experimental)"
echo "* Ciao Prolog (1.22.0 or later): ciaolgt (experimental; first run may require sudo)"
echo "* CxProlog (0.98.1 or later): cxlgt"
echo "* ECLiPSe (6.1#143 or later): eclipselgt"
echo "* GNU Prolog (1.4.5 or later): gplgt"
echo "* JIProlog (4.1.7.1 or later): jiplgt (first run may require sudo)"
echo "* Quintus Prolog (3.3 or later): quintuslgt (experimental)"
echo "* SICStus Prolog (4.1.0 or later): sicstuslgt"
echo "* SWI-Prolog (6.6.0 or later): swilgt"
echo "* Tau Prolog (0.3.2 or later): taulgt"
echo "* Trealla Prolog (2.59.21 or later): tplgt"
echo "* XSB (3.8.0 or later): xsblgt (first run may require sudo)"
echo "* XVM (10.0.0 or later): xvmlgt"
echo "* YAP (6.3.4 or later): yaplgt"
echo
echo "Links to the Prolog integration scripts can be found on \"$prefix/bin\"."
echo "Make sure that the Prolog compilers are properly installed and available"
echo "on your execution path."
echo
echo "Users should ensure that the environment variable LOGTALKHOME is set to"
echo "\"$prefix/share/logtalk\" and then run the \"logtalk_user_setup\" shell script"
echo "once before running the integration scripts to ensure their LOGTALKUSER"
echo "directory is up-to-date. For more details on manual installation setups,"
echo "see the \"INSTALL.md\" file."
echo
echo "If you get an unexpected failure when using one of the Prolog integration"
echo "scripts, consult the \"$prefix/share/logtalk/adapters/NOTES.md\" file"
echo "for compatibility notes or consult the integration script man page."
echo
if [ "$(command -v update-mime-database)" != "" ]; then
mkdir -p "$prefix/share/mime/packages"
rm -f "$prefix/share/mime/packages/logtalk.xml"
cp "$prefix/share/$directory/scripts/freedesktop/logtalk.xml" "$prefix/share/mime/packages/logtalk.xml"
update-mime-database "$prefix/share/mime"
echo "Added the Logtalk mime-type to the Shared MIME-info Database."
echo
fi
echo "Logtalk $version basic installation completed."
echo