documentation support

This commit is contained in:
Vitor Santos Costa 2017-05-19 09:54:35 +01:00
parent a828f3f899
commit 87851a68f4
18 changed files with 149 additions and 340 deletions

11
.gitignore vendored
View File

@ -203,4 +203,13 @@ mxe
build
library/system/#CMakeLists.txt#
*.txt#
*.txt#
cmake/CMakeCache.txt
C/compiling_error.txt
cmake/compile_commands.json
cmake/cudd_config.h
cmake/docs/Doxyfile

View File

@ -60,6 +60,7 @@ option(BUILD_SHARED_LIBS "Build shared library" ON)
set (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
include(Prelims NO_POLICY_SCOPE)
include(Sources NO_POLICY_SCOPE)

View File

@ -6,3 +6,7 @@ v = sysconfig.get_python_version()
p = sysconfig.get_config_var('LIBPL')
l = sysconfig.get_config_var('LDLIBRARY')
print(os.path.join(p,l))
p = sysconfig.get_config_var('DESTDIR')
n = '../libpython3.6m.dylib'
l = os.path.join(p,n)
print(l)

View File

@ -1153,8 +1153,10 @@ HTML_STYLESHEET =
# list). For an example see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_STYLESHEET = @CMAKE_SOURCE_DIR@/docs/custom/customdoxygen.css \
@CMAKE_SOURCE_DIR@/docs/solarized-light.css
HTML_EXTRA_STYLESHEET = @CMAKE_SOURCE_DIR@/docs/custom/customdoxygen.css
# @CMAKE_SOURCE_DIR@/docs/solarized-light.css
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
@ -1582,7 +1584,7 @@ SERVER_BASED_SEARCH = YES
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTERNAL_SEARCH = YAP
EXTERNAL_SEARCH = NO
# The SEARCHENGINE_URL should point to a search engine hosted by a web server
# which will return the search results when EXTERNAL_SEARCH is enabled.
@ -2223,7 +2225,7 @@ DOT_FONTPATH =
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
CLASS_GRAPH = YES
CLASS_GRAPH = NO
# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
# graph for each documented class showing the direct and indirect implementation
@ -2277,16 +2279,16 @@ TEMPLATE_RELATIONS = NO
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH = YES
INCLUDE_GRAPH = NO
# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# set to YES then doxygen will generate a graph for each documented file showing
# the direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH = YES
INCLUDED_BY_GRAPH = NO
# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
# dependency graph for every global function or class method.

15
docs/md/builtins.md Normal file
View File

@ -0,0 +1,15 @@
@defgroup builtins YAP Core Built-ins
@brief This chapter describes the core built-in predicates that control the execution of
Prolog programs, provide fundamental functionality such as termm manipulation or arithmetic, and support interaction with external
resources,
Many of the predicates described here have been standardised by the International Standard Organization.
The corresponding standartised subset of Prolog also known as ISO-Prolog.
In the description of the arguments of predicates the following
notation will be used:
+ a preceding plus sign will denote an argument as an "input
argument" - the argument is read, not written, and it cannot be a free variable at the time of the call;
+ a preceding minus sign will denote an "output argument";
+ an argument with no preceding symbol can be used in both ways.

21
docs/md/extensions.md Normal file
View File

@ -0,0 +1,21 @@
Extensions to core Prolog. {#extensions}
=========================
YAP includes a number of extensions over the original Prolog
language. Next, we discuss how to use the most important ones.
+ @ref Rational_Trees
+ @ref AttributedVariables
+ @ref DepthLimited
+ @ref Tabling
+ @ref Threads
+ @ref Profiling
+ @ref YAPArrays
+ @ref Parallelism

View File

@ -1,15 +1,12 @@
Loading and Organising YAP Programs {#load_files}
===================================
@defgroup load_files Loading and Organising YAP Programs
Next, we present the main predicates and directives available to load
files and to control the Prolog environment.
@brief Next, we present the main predicates and directives available to load
files and to control the Prolog environment. They include
+ @subpage YAPConsulting
+ @subpage YAPModules
+ @ref YAPConsulting
+ @subpage YAPBigLoad
+ @ref QLY
+ @ref YAPBigLoad

View File

@ -1,13 +1,13 @@
YAP packages {#packages}
============
+ @subpage real
+ @subpage realxplxc
+ @subpage BDDs
+ @subpage gecode
+ @subpage myddas
+ @subpage myddas_dbms
+ @ref PFL

10
docs/md/programming.md Normal file
View File

@ -0,0 +1,10 @@
Programming in YAP {#YAPProgramming}
====================
+ @ref Syntax
+ @ref YAPCompilerSettings
+ @ref Indexing
+ @ref Deb_Interaction

View File

@ -5,7 +5,7 @@
![The YAP Logo](docs/icons/yap_128x128x32.png)
</center>
NOTE: this version of YAP is still experimental, documentation may be out of date.
NOTE: this version of YAP is still experimental, documentation may be missing or brout of date.
## Introduction
@ -25,7 +25,7 @@ The manual is organised as follows:
+ @subpage builtins
+ @subpage Extensions
+ @subpage extensions
+ @subpage library
@ -59,21 +59,6 @@ from
Jan Wielemaker. We would also like to gratefully
acknowledge the contributions from Ashwin Srinivasian.
@page builtins YAP Core Built-ins
This chapter describes the core predicates that control the execution of
Prolog programs, provide fundamental functionality such as termm manipulation or arithmetic, and support interaction with external
resources, Many of the predicates described here have been standardised by the ISO. The standartised subset of Prolog also known as ISO-Prolog.
In the description of the arguments of predicates the following
notation will be used:
+ a preceding plus sign will denote an argument as an "input
argument" - it cannot be a free variable at the time of the call;
+ a preceding minus sign will denote an "output argument";
+ an argument with no preceding symbol can be used in both ways.
@page Library YAP Library
@ -89,7 +74,26 @@ argument" - it cannot be a free variable at the time of the call;
YAP includes a number of extensions over the original Prolog
language.
@subpage atts
+ @subpage atts
+ @ref Rational_Trees
+ @ref CohYroutining
+ @ref Attributed_Variables
+ @ref DepthLimited
+ @ref Tabling
+ @ref Threads
+ @ref Profiling
+ @ref YAPArrays
+ @ref Parallelism
@page YAPProgramming Programming in YAP

View File

@ -1,11 +1,12 @@
The MYDDAS Data-base interface {#myddas}
The MYDDAS Data-base interface {#myddas}
===============================
The MYDDAS database project was developed within a FCT project aiming at
the development of a highly efficient deductive database system, based
on the coupling of the MySQL relational database system with the YAP
Prolog system. MYDDAS was later expanded to support the ODBC interface.
### Requirements and Installation Guide {#Requirements_and_Installation_Guide}
### Requirements and Installation Guide {#Requirements_and_Installation_Guide}
Next, we describe how to usen of the YAP with the MYDDAS System. The
use of this system is entirely depend of the MySQL development libraries
@ -21,21 +22,22 @@ The MYDDAS Data-base interface {#myddas}
tested yet. MYDDAS must be enabled at configure time. This can be done
with the following options:
+ --enable-myddas
+ `--enable-myddas`
This option will detect which development libraries are installed on the computer system, MySQL, ODBC or both, and will compile the Yap system with the support for which libraries it detects;
+ --enable-myddas-stats
+ `--enable-myddas-stats`
This option is only available in MySQL. It includes code to get
statistics from the MYDDAS system;
+ --enable-top-level
+ `--enable-top-level`
This option is only available in MySQL. It enables the option to interact with the MySQL server in
two different ways. As if we were on the MySQL Client Shell, and as if
we were using Datalog.
### MYDDAS Architecture {#MYDDAS_Architecture}
The system includes four main blocks that are put together through the
@ -85,6 +87,7 @@ The MYDDAS Data-base interface {#myddas}
FROM 'phonebook' A
WHERE A.Name = 'John Doe';
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### View Level Interface {#View_Level_Interface}
@ -178,6 +181,7 @@ The MYDDAS Data-base interface {#myddas}
To know how to use db `view/3`, please refer to Draxler's Prolog to
SQL Compiler Manual.
### Accessing Tables in Data Sources Using SQL {#Accessing_Tables_in_Data_Sources_Using_SQL}
@ -205,6 +209,7 @@ The MYDDAS Data-base interface {#myddas}
?- db_sql('SELECT * FROM phonebook',LA).
LA = ['D','John Doe',123456789] ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### Insertion of Rows {#Insertion_of_Rows}
@pred db_assert(+,+).
@ -274,7 +279,8 @@ The MYDDAS Data-base interface {#myddas}
?- helloWorldInsert('A',NULL,31).
yes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### Types of AttributesL {#Types_of_Attributes}
### Types of Attributes {#Types_of_Attributes}
@pred db_get_attributes_types(+,+,?).
@ -305,6 +311,7 @@ The MYDDAS Data-base interface {#myddas}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
where <tt>Hello World</tt> is the name of the relation and <tt>myddas</tt> is the
connection identifier.
### Number of Fields {#Number_of_Fields}
@ -331,6 +338,7 @@ The MYDDAS Data-base interface {#myddas}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
where `Hello World` is the name of the
relation and `myddas` is the connection identifier.
### Describing a Relation {#Describing_a_Relation}
@pred db_datalog_describe(+,+).
@ -411,6 +419,7 @@ The MYDDAS Data-base interface {#myddas}
Table = table('Hello World') ? ;
no
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### The MYDDAS MySQL Top Level {#The_MYDDAS_MySQL_Top_Level}
@pred db_top_level(+,+,+,+,+).
@ -461,6 +470,7 @@ The MYDDAS Data-base interface {#myddas}
yes
?-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### Other MYDDAS Properties {#Other_MYDDAS_Properties}
@pred db_verbose(+).
@ -560,5 +570,4 @@ The MYDDAS Data-base interface {#myddas}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can see the available SQL Modes at the MySQL homepage at
<http://www.mysql.org>.
@}
b

View File

@ -12,7 +12,6 @@ from traitlets import Instance, Type, Any, List
from .comm import CommManager
from .kernelbase import Kernel as KernelBase
from .zmqshell import ZMQInteractiveShell
from .interactiveshell import YAPInteraction
class YAPKernel(KernelBase):
shell = Instance('IPython.core.interactiveshell.InteractiveShellABC',
@ -56,8 +55,7 @@ class YAPKernel(KernelBase):
for msg_type in comm_msg_types:
self.shell_handlers[msg_type] = getattr(self.comm_manager, msg_type)
self.engine = YAPInteraction(self)
self.shell.run_cell = self.engine.run_cell
self.engine = YAPInteraction(self.shell, **kwargs)
help_links = List([
{
@ -194,7 +192,7 @@ class YAPKernel(KernelBase):
reply_content = {}
try:
res = self.shell.run_cell(code, store_history=store_history, silent=silent)
res = self.engine.run_cell(code, store_history=store_history, silent=silent)
finally:
self._restore_input()

View File

@ -1,4 +1,4 @@
The R Prolog Progrmming Interface {#real}
The R Prolog Programming Interface {#realxplxc}
===================================
@file real.md
@ -7,8 +7,6 @@ The R Prolog Progrmming Interface {#real}
@version 1:0:4, 2013/12/25, sinter_class
@license Perl Artistic License
@ingroup packages
+ @ref realpl
This library enables the communication with an R process started as a shared library.
@ -46,7 +44,7 @@ Pass Prolog data to R, pass R data to Prolog or assign an R expression to
an assignable R expression.
### Testing Real {#TestingR}
There is a raft of examples packed in a singl```e file that test the library.
There is a raft of examples packed in a single file that tests the library.
~~~~
?- [pack(real/examples/for_real)].
@ -122,7 +120,7 @@ However, not all possible "corrections" are currently supported. For instance,
~~~~
?- c <- [a,b,c,1].
ERROR: real:set_R_variable/2: Type error: `boolean' expected, found `a'
ERROR: real:set_R_variable/2: Type error: `boolean` expected, found `a`
~~~~
In the data passing mode we map Prolog atoms to R strings-
@ -241,7 +239,7 @@ in~\cite{}. Their major differences:
prefer reading double-quote strings as Prolog string.
- Free variables can be used to represent missing
arguments,ie. `a[_,"G23"] would represent the column "G23".
arguments,ie. `a[_,"G23"]` would represent the column "G23".
- All recent versions of real support the common syntax extensions
for [], (), thus realC allows writing `a[[2]] <- f().
@ -262,12 +260,8 @@ in~\cite{}. Their major differences:
---
Nicos Angelopoulos and Vitor Santos Costa
December, 2012.
- Nicos Angelopoulos and Vitor Santos Costa, December, 2012.
Updates: Nicos Angelopoulos
Dec. 2013,
March, 2014
- Updates: Nicos Angelopoulos, Dec. 2013, March, 2014
Updates: Vitor Santos Costa
Dec. 2015
- Updates: Vitor Santos Costa Dec. 2015

View File

@ -1,68 +0,0 @@
#
# default base directory for YAP installation
# (EROOT for architecture-dependent files)
#
prefix = @prefix@
exec_prefix = @exec_prefix@
ROOTDIR = $(prefix)
EROOTDIR = @exec_prefix@
abs_top_builddir = @abs_top_builddir@
#
# where the binary should be
#
BINDIR = $(EROOTDIR)/bin
#
# where YAP should look for libraries
#
LIBDIR=@libdir@
SHAREDIR=$(ROOTDIR)/share/Yap
YAPLIBDIR=@libdir@/Yap
#
#
CC=@CC@
CFLAGS= @SHLIB_CFLAGS@ $(YAP_EXTRAS) $(DEFS) -I$(srcdir) -I../.. -I$(srcdir)/../../include -I$(srcdir)/liblbfgs-1.10/include
LDFLAGS=@LDFLAGS@
#
#
# You shouldn't need to change what follows.
#
INSTALL=@INSTALL@
INSTALL_DATA=@INSTALL_DATA@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
SHELL=/bin/sh
RANLIB=@RANLIB@
srcdir=@srcdir@
SO=@SO@
#4.1VPATH=@srcdir@:@srcdir@/OPTYap
CWD=$(PWD)
#
OBJS=yap_lbfgs.o lbfgs.o
SOBJS=yap_lbfgs.@SO@
PLLIB=$(srcdir)/lbfgs.pl
#in some systems we just create a single object, in others we need to
# create a libray
all: $(SOBJS)
yap_lbfgs.o: $(srcdir)/yap_lbfgs.c
$(CC) -c $(CFLAGS) $(srcdir)/yap_lbfgs.c -o yap_lbfgs.o
lbfgs.o: $(srcdir)/liblbfgs-1.10/lib/lbfgs.c
$(CC) -c $(CFLAGS) -I $(srcdir)/liblbfgs-1.10/lib $(srcdir)/liblbfgs-1.10/lib/lbfgs.c -o lbfgs.o
@DO_SECOND_LD@yap_lbfgs.@SO@: yap_lbfgs.o lbfgs.o
@DO_SECOND_LD@ @SHLIB_LD@ $(LDFLAGS) -o yap_lbfgs.@SO@ yap_lbfgs.o lbfgs.o @EXTRA_LIBS_FOR_DLLS@
install: all
$(INSTALL_PROGRAM) $(SOBJS) $(DESTDIR)$(YAPLIBDIR)
for h in $(PLLIB); do $(INSTALL_DATA) $$h $(DESTDIR)$(SHAREDIR); done
install-examples:
clean:
rm -f *.o *~ $(OBJS) $(SOBJS) *.BAK
distclean: clean
rm -f Makefile

View File

@ -1,4 +1,4 @@
pattr/*************************************************************************
p/*************************************************************************
* *
* YAP Prolog *
* *
@ -24,15 +24,8 @@ pattr/*************************************************************************
*/
:- module('attributes', [delayed_goals/4]).
:- use_system_module( '$_boot', ['$undefp'/1]).
:- use_system_module( '$_errors', ['$do_error'/2]).
:- use_system_module( '$coroutining', [attr_unify_hook/2]).
:- use_system_module( attributes, [all_attvars/1,
:- system_module( attributes, [delayed_goals/4,
all_attvars/1,
bind_attvar/1,
del_all_atts/1,
del_all_module_atts/2,
@ -42,7 +35,13 @@ pattr/*************************************************************************
put_att_term/2,
put_module_atts/2,
unbind_attvar/1,
woken_att_do/4]).
woken_att_do/4], []).
:- use_system_module( '$_boot', ['$undefp'/1]).
:- use_system_module( '$_errors', ['$do_error'/2]).
:- use_system_module( '$coroutining', [attr_unify_hook/2]).
:- dynamic attributes:existing_attribute/4.
:- dynamic attributes:modules_with_attributes/1.

View File

@ -15,6 +15,8 @@
* *
*************************************************************************/
%% @file dbload.yap
:- module('$db_load',
[]).
@ -25,10 +27,12 @@
:- use_system_module( attributes, [get_module_atts/2,
put_module_atts/2]).
%%% @file dbload.yap
%%% @defgroup YAPBigLoad
%%% @brief Fast and Exo Loading
%%
% @defgroup YAPBigLoad Loading Large Tables
%
% @brief Fast and Exo Loading
%
% @{
/*!
* @pred load_mega_clause( +Stream ) is detail

193
run.md
View File

@ -1,193 +0,0 @@
Running YAP (#run)
==============
We next describe how to invoke YAP in Unix systems.
Running YAP Interactively (#interactive_run)
-------------------------
Most often you will want to use YAP in interactive mode. Assuming that
YAP is in the user's search path, the top-level can be invoked under
Unix with the following command:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
yap [-s n] [-h n] [-a n] [-c IP_HOST port ] [filename]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All the arguments and flags are optional and have the following meaning:
+ -?
print a short error message.
+ -s _Size_
allocate _Size_ KBytes for local and global stacks. The user may
specify <tt>M</tt> bytes.
+ -h _Size_
allocate _Size_ KBytes for heap and auxiliary stacks
+ -t _Size_
allocate _Size_ KBytes for the trail stack
+ -L _Size_
SWI-compatible option to allocate _Size_ K bytes for local and global stacks, the local stack
cannot be expanded. To avoid confusion with the load option, _Size_
must immediately follow the letter `L`.
+ -G _Size_
SWI-compatible option to allocate _Size_ K bytes for local and global stacks; the global
stack cannot be expanded
+ -T _Size_
SWI-compatible option to allocate _Size_ K bytes for the trail stack; the trail cannot be expanded.
+ -l _YAP_FILE_
compile the Prolog file _YAP_FILE_ before entering the top-level.
+ -L _YAP_FILE_
compile the Prolog file _YAP_FILE_ and then halt. This option is
useful for implementing scripts.
+ -g _Goal_
run the goal _Goal_ before top-level. The goal is converted from
an atom to a Prolog term.
+ -z _Goal_
run the goal _Goal_ as top-level. The goal is converted from
an atom to a Prolog term.
+ -b _BOOT_FILE_
boot code is in Prolog file _BOOT_FILE_. The filename must define
the predicate `'$live'/0`.
+ -c <tt>IP_HOST</tt> <tt>port</tt>
connect standard streams to host <tt>IP_HOST</tt> at port <tt>port</tt>
+ filename
restore state saved in the given file
+ -f
do not consult initial files
+ -q
do not print informational messages
+ --
separator for arguments to Prolog code. These arguments are visible
through the unix/1 built-in predicate.
Note that YAP will output an error message on the following conditions:
+
a file name was given but the file does not exist or is not a saved
YAP state;
+
the necessary amount of memory could not be allocated;
+
the allocated memory is not enough to restore the state.
When restoring a saved state, YAP will allocate the
same amount of memory as that in use when the state was saved, unless a
different amount is specified by flags in the command line. By default,
YAP restores the file startup.yss from the current directory or from
the YAP library.
+
YAP usually boots from a saved state. The saved state will use the default
installation directory to search for the YAP binary unless you define
the environment variable YAPBINDIR.
+
YAP always tries to find saved states from the current directory
first. If it cannot it will use the environment variable YAPLIBDIR, if
defined, or search the default library directory.
+
YAP will try to find library files from the YAPSHAREDIR/library
directory.
Prolog Scripts
--------------
YAP can also be used to run Prolog files as scripts, at least in
Unix-like environments. A simple example is shown next (do not forget
that the shell comments are very important):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/local/bin/yap -L --
#
# Hello World script file using YAP
#
# put a dot because of syntax errors .
:- write('Hello World'), nl.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The `#!` characters specify that the script should call the binary
file YAP. Notice that many systems will require the complete path to the
YAP binary. The `-L` flag indicates that YAP should consult the
current file when booting and then halt. The remaining arguments are
then passed to YAP. Note that YAP will skip the first lines if they
start with `#` (the comment sign for Unix's shell). YAP will
consult the file and execute any commands.
A slightly more sophisticated example is:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/bin/yap -L --
#
# Hello World script file using YAP
# .
:- initialization(main).
main :- write('Hello World'), nl.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The `initialization` directive tells YAP to execute the goal main
after consulting the file. Source code is thus compiled and `main`
executed at the end. The `.` is useful while debugging the script
as a Prolog program: it guarantees that the syntax error will not
propagate to the Prolog code.
Notice that the `--` is required so that the shell passes the extra
arguments to YAP. As an example, consider the following script
`dump_args`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/bin/yap -L --
#.
main( [] ).
main( [H|T] ) :-
write( H ), nl,
main( T ).
:- unix( argv(AllArgs) ), main( AllArgs ).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you this run this script with the arguments:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./dump_args -s 10000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
the script will start an YAP process with stack size `10MB`, and
the list of arguments to the process will be empty.
Often one wants to run the script as any other program, and for this it
is convenient to ignore arguments to YAP. This is possible by using
`L --` as in the next version of `dump_args`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/bin/yap -L --
main( [] ).
main( [H|T] ) :-
write( H ), nl,
main( T ).
:- unix( argv(AllArgs) ), main( AllArgs ).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The `--` indicates the next arguments are not for YAP. Instead,
they must be sent directly to the argv built-in. Hence, running
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./dump_args test
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
will write `test` on the standard output.
@}

View File

@ -298,7 +298,10 @@ library('..').
prolog_file_type(c, c).
prolog_file_type(h, c).
prolog_file_type('h.cmake', c).
prolog_file_type('i', c).
prolog_file_type('h.in', c).
prolog_file_type('py.cmake', python).
prolog_file_type('hxx', c).
prolog_file_type('py', python).
%
% handle some special cases.