File: README.md

package info (click to toggle)
swi-prolog 9.0.4%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 82,408 kB
  • sloc: ansic: 387,503; perl: 359,326; cpp: 6,613; lisp: 6,247; java: 5,540; sh: 3,147; javascript: 2,668; python: 1,900; ruby: 1,594; yacc: 845; makefile: 428; xml: 317; sed: 12; sql: 6
file content (112 lines) | stat: -rw-r--r-- 3,982 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# Inter-operatbility

This directory contains some tests for verifying inter-operability
between Prolog protobufs and other languages. The initial version of
this uses Python, but it is anticipated that other languages will be
added in the future (e.g., C++, JavaScript).

The tests are *not* part of the standard release process because they
require having the protobuf compiler (`protoc`) installed and also a
version of Python 3. There are tests in `CMakeList.txt` to not run the
tests (and emit a warning) if the prerequisite files aren't available.

To run the tests:
```
make test
make clean
```
You can specify these additional variables:
```
make PROTOC=/path/to/protoc PYTHON=/path/to/python3 SWIPL=/path/to/swipl test
```

The tests require the Python protobuf support. One way of installing it is:
```
python3 -mpip install protobuf
```
But you should check the version: it should be at least 3.18.1 (which you can check
by: `python3 -mpip show protobuf`), although it's possible that anything after
3.8.0  will work.
You might be tempted to install using `sudo apt install python3-protobuf`,
but its version (as of 2021-10-12) is 3.6.1, which is too old.

You will also need the protobuf compiler. This can be installed on
Debian (Ubuntu) by:
```
sudo apt install protobuf-compiler
```
Any version 3.6.1 or later should work, although it's best to get the
latest one (3.18.1, as of 2021-10-12).

If you install protoc other than in `/usr/bin` (which is where the Debian/Ubuntu
package puts it), you might need to modify the tests that have C++ code (currently
rules `test_read` and `test_write`, plus `foo` in `../demo/Makefile`).
There are comments in the Makefiles.

To trun these tests under the top-level SWI-Prolog `ctest` (assuming your
sources are in `$HOME/src` and you install a local version to
`$HOME/.local`). Note `-DTEST_PROTOBUFS_PROTOC=ON`, which adds
the tests in this directory (and also the tests in `../demo` and `../bootstrap`).
```
cd $HOME/src/swipl-devel
rm -rf build
mkdir -p build
cd build
# Ensure all the targets get rebuilt:
rm -rf packages/protobufs \
       home/library/protobufs \
       home/doc/packages/examples/protobufs
# Optional: -DCMAKE_BUILD_TYPE=PGO
cmake -DCMAKE_INSTALL_PREFIX=$HOME/.local -DTEST_PROTOBUFS_PROTOC=ON -G Ninja ..
ninja
ctest -j4 -R protobufs  # or: ctest -V -R protobufs:interop
# Optional:
# ninja install
```

## .proto Sources

When the protobuf compiler is installed, the following additional
files are also installed:

```
include/google/protobuf/any.proto
include/google/protobuf/api.proto
include/google/protobuf/compiler/plugin.proto
include/google/protobuf/descriptor.proto
include/google/protobuf/duration.proto
include/google/protobuf/empty.proto
include/google/protobuf/field_mask.proto
include/google/protobuf/source_context.proto
include/google/protobuf/struct.proto
include/google/protobuf/timestamp.proto
include/google/protobuf/type.proto
include/google/protobuf/wrappers.proto
```

Missing from this is (where `$SRC` is the top-level source directory, into which
`git@github.com:protocolbuffers/protobuf.git` is cloned):
```
$SRC/protobuf/src/google/protobuf/unittest.proto
$SRC/protobuf/src/google/protobuf/unittest_import.proto
$SRC/protobuf/src/google/protobuf/unittest_import_public.proto
```

So, a copy of these files hav been made here.
They related to the "golden_message" test in `../test_protobufs.pl`.

## addressbook.proto, addressbook2.proto

These are from the [Google protobuf
tutorial](https://developers.google.com/protocol-buffers/docs/tutorials),
mainly from the [Python
tutorial](https://developers.google.com/protocol-buffers/docs/pythontutorial).

They have been slightly modified to put the `TimeStamps` message into
a second `.proto` file, in order to test a few things.

## Future work

These tests write into the current directory. This prevents using a
read-only source tree, amongst other things. The tests should be
modified to use a separate "build" directory.