Giter Club home page Giter Club logo

protobuf's Introduction

Protobuf

Protobuf is a Common Lisp implementation of Google's protocol buffers, version 2. The repository contains a compiler from protocol buffer source code (.proto files) to Lisp and also run-time support needed by the generated Lisp code.

Protobuf passes all but a couple of the required proto2 tests in Google's conformance test suite. It implements neither the JSON nor text encoding formats.

Protobuf has been tested with ABCL, CCL, CLISP, Lispworks, and SBCL. In the past it has also worked with Allegro Common Lisp, but I have not tested it recently.

Installation

The Common Lisp protocol buffer compiler is implemented as a plugin to Google's protocol buffer compiler, so you must first build and install Google's compiler, which is called protoc. The code and instructions here assume you are using release 3.19.4.

The steps for installing protoc from source are approximately:

cd /tmp
git clone https://github.com/protocolbuffers/protobuf.git google-protobuf
cd google-protobuf
git checkout v3.19.4
./autogen.sh
./configure --prefix=~/local/software/package/google-protobuf-3.19.4
make
make check
make install

You can also install protoc by downloading a tar or zip archive for a specific release from here.

After you have installed protoc, clone this Git repository to create a local copy and compile protoc-gen-lisp, the Common Lisp protocol buffer plugin. The required steps for Linux are approximately:

cd /tmp
git clone git://github.com/brown/protobuf.git

cd protobuf/protoc/lisp

# Change INSTALL_ROOT and PROTOC_ROOT in Makefile.  INSTALL_ROOT indicates
# where protoc-gen-lisp should be installed.  PROTOC_ROOT indicates where
# you installed Google's protobuf compiler, when you compiled it in step 1.

# Compile and install the Lisp protoc plugin.
make install

Once both protoc and protoc-gen-lisp are installed, download and install the Common Lisp packages that Protobuf depends on. First, you'll need ASDF, but it comes pre-installed in most Common Lisp distributions. You'll also need the com.google.base package, which is available via Quicklisp. To run all the tests, you'll need the Stefil testing package and its dependencies: hu.dwim.stefil, hu.dwim.asdf, alexandria. All of these can easily be downloaded using Quicklisp.

If you're not using Allegro, CLISP, or SBCL, you may need trivial-utf8, again available via Quicklisp.

Once you have acquired all Protobuf's dependencies, make them available to ASDF. There are several ways to do this and you should consult the ASDF documentation to determine what will work best for you. If you've downloaded dependencies using Quicklisp, then ASDF automatically knows about them.

ASDF and its manual are available here.

On my system, I tell ASDF where to find Protobuf's system files by creating a file called source-registry.conf in directory /home/brown/.config/common-lisp with the following contents:

(:source-registry
 (:tree "/home/brown/src/protobuf/")
 :inherit-configuration)

Make sure ASDF can execute Google's protocol buffer compiler and the Common Lisp plugin. Both protoc and protoc-gen-lisp must be installed in directories that appear in your shell's PATH environment variable.

Compile and load all the protobuf code:

(asdf:load-system 'protobuf)

Optionally, load and run all the tests:

(asdf:test-system 'varint)
(asdf:test-system 'protobuf)

Compile and run the example code, which shows how to incorporate protocol buffer definition files into your own projects:

(asdf:load-system 'protobuf-example)

(in-package address-book)
(add-person :id 100
            :name "Robert Brown"
            :email-address "[email protected]"
            :phone-numbers '((home . "718-555-1212")
                             (work . "212-589-1212")
                             (mobile . "917-555-1212")))
(list-people)

Bugs

Please report bugs and send suggestions on GitHub or contact me directly. My email is robert.brown at the mail hosting site gmail.com.

protobuf's People

Contributors

brown avatar eschulte avatar rpgoldman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

protobuf's Issues

Arithmetic error COMMON-LISP:FLOATING-POINT-INVALID-OPERATION signalled

SBCL 2.1.0 on Linux x64 with protobuf from the current Quicklisp dist.

Compiler policy restricted to (safety 3) (debug 3).

* (ql:quickload :protobuf)
To load "protobuf":
  Load 2 ASDF systems:
    asdf nibbles
  Install 2 Quicklisp releases:
    com.google.base protobuf
Downloading http://beta.quicklisp.org/archive/com.google.base/2020-09-25/com.google.base-20200925-git.tgz
##########################################################################
Downloading http://beta.quicklisp.org/archive/protobuf/2020-12-20/protobuf-20201220-git.tgz
##########################################################################
; Loading "protobuf"
..................................................
[package com.google.base].........................
[package varint]..................................
[package protocol-buffer].........................
[package wire-format]
debugger invoked on a COMMON-LISP:FLOATING-POINT-INVALID-OPERATION in thread
#<THREAD "main thread" RUNNING {10015681E3}>:
  arithmetic error COMMON-LISP:FLOATING-POINT-INVALID-OPERATION signalled
Operation was (COMMON-LISP:> #<SINGLE-FLOAT quiet NaN> #<SINGLE-FLOAT quiet NaN>).

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
(...)

0] backtrace

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10015681E3}>
0: (SB-KERNEL:TWO-ARG-> #<SINGLE-FLOAT quiet NaN> #<SINGLE-FLOAT quiet NaN>)
1: (SB-VM::GENERIC->)
2: (SB-KERNEL:MAKE-NUMERIC-TYPE :CLASS COMMON-LISP:FLOAT :FORMAT COMMON-LISP:SINGLE-FLOAT :COMPLEXP :REAL :LOW #<SINGLE-FLOAT quiet NaN> :HIGH #<SINGLE-FLOAT quiet NaN> :ENUMERABLE COMMON-LISP:NIL)
3: ((COMMON-LISP:FLET SB-KERNEL::TRY-CACHE :IN SB-KERNEL:CTYPE-OF) #<SINGLE-FLOAT quiet NaN>)
4: (SB-KERNEL:CTYPE-OF #<SINGLE-FLOAT quiet NaN>)
5: (SB-C::MAKE-CONSTANT #<SINGLE-FLOAT quiet NaN>) [optional]
6: (SB-C::FIND-CONSTANT #<SINGLE-FLOAT quiet NaN> COMMON-LISP:NIL)
7: (SB-C::REFERENCE-CONSTANT #<SB-C::CTRAN 1 {10040A8183}> #<SB-C::CTRAN 2 {10040A8423}> #<SB-C::LVAR 3 {10040A8453}> #<SINGLE-FLOAT quiet NaN>)
8: (SB-C::IR1-CONVERT-QUOTE #<SB-C::CTRAN 1 {10040A8183}> #<SB-C::CTRAN 2 {10040A8423}> #<SB-C::LVAR 3 {10040A8453}> (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>))
9: (SB-C::IR1-CONVERT #<SB-C::CTRAN 1 {10040A8183}> #<SB-C::CTRAN 2 {10040A8423}> #<SB-C::LVAR 3 {10040A8453}> (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>))
10: (SB-C::IR1-CONVERT-COMBINATION-ARGS #<SB-C::LVAR 4 {10040A7FB3}> #<SB-C::CTRAN 5 {10040A7F83}> #<SB-C::CTRAN 6 {10040A7F43}> COMMON-LISP:NIL ((COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)))
11: (SB-C::IR1-CONVERT-COMBINATION #<SB-C::CTRAN 7 {10040A7DF3}> #<SB-C::CTRAN 6 {10040A7F43}> COMMON-LISP:NIL (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) #<SB-C::GLOBAL-VAR :%SOURCE-NAME SB-C::%DEFINE-SYMBOL-MACRO :TYPE #<SB-KERNEL:BUILT-IN-CLASSOID COMMON-LISP:FUNCTION (read-only)> :DEFINED-TYPE #<SB-KERNEL:FUN-TYPE (COMMON-LISP:FUNCTION (COMMON-LISP:T COMMON-LISP:T COMMON-LISP:T) (COMMON-LISP:VALUES COMMON-LISP:SYMBOL COMMON-LISP:&OPTIONAL))> :WHERE-FROM :DEFINED :KIND :GLOBAL-FUNCTION {1004076523}>)
12: (SB-C::IR1-CONVERT-COMBINATION-CHECKING-TYPE #<SB-C::CTRAN 7 {10040A7DF3}> #<SB-C::CTRAN 6 {10040A7F43}> COMMON-LISP:NIL (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) #<SB-C::GLOBAL-VAR :%SOURCE-NAME SB-C::%DEFINE-SYMBOL-MACRO :TYPE #<SB-KERNEL:BUILT-IN-CLASSOID COMMON-LISP:FUNCTION (read-only)> :DEFINED-TYPE #<SB-KERNEL:FUN-TYPE (COMMON-LISP:FUNCTION (COMMON-LISP:T COMMON-LISP:T COMMON-LISP:T) (COMMON-LISP:VALUES COMMON-LISP:SYMBOL COMMON-LISP:&OPTIONAL))> :WHERE-FROM :DEFINED :KIND :GLOBAL-FUNCTION {1004076523}>)
13: (SB-C::IR1-CONVERT #<SB-C::CTRAN 7 {10040A7DF3}> #<SB-C::CTRAN 6 {10040A7F43}> COMMON-LISP:NIL (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)))
14: (SB-C::IR1-CONVERT-PROGN-BODY #<SB-C::CTRAN 7 {10040A7DF3}> #<SB-C::CTRAN 8 {10040A7B73}> #<SB-C::LVAR 9 {10040A7BA3}> ((SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) COMMON-LISP:NIL))
15: (SB-C::IR1-CONVERT-AUX-BINDINGS #<SB-C::CTRAN 7 {10040A7DF3}> #<SB-C::CTRAN 8 {10040A7B73}> #<SB-C::LVAR 9 {10040A7BA3}> ((SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) COMMON-LISP:NIL) COMMON-LISP:NIL COMMON-LISP:NIL COMMON-LISP:NIL)
16: (SB-C::IR1-CONVERT-SPECIAL-BINDINGS #<SB-C::CTRAN 7 {10040A7DF3}> #<SB-C::CTRAN 8 {10040A7B73}> #<SB-C::LVAR 9 {10040A7BA3}> ((SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) COMMON-LISP:NIL) COMMON-LISP:NIL COMMON-LISP:NIL COMMON-LISP:NIL COMMON-LISP:NIL)
17: (SB-C::IR1-CONVERT-LAMBDA-BODY ((SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) COMMON-LISP:NIL) COMMON-LISP:NIL :AUX-VARS COMMON-LISP:NIL :AUX-VALS COMMON-LISP:NIL :SOURCE-NAME SB-C::.ANONYMOUS. :DEBUG-NAME (SB-C::TOP-LEVEL-FORM (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION))) :NOTE-LEXICAL-BINDINGS COMMON-LISP:T :POST-BINDING-LEXENV COMMON-LISP:NIL :SYSTEM-LAMBDA COMMON-LISP:NIL)
18: (SB-C::IR1-TOPLEVEL (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) (#1=(SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) (COMMON-LISP:EVAL-WHEN (:COMPILE-TOPLEVEL :LOAD-TOPLEVEL :EXECUTE) #1#) SB-C::ORIGINAL-SOURCE-START 0 12) COMMON-LISP:NIL COMMON-LISP:T)
19: (SB-C::CONVERT-AND-MAYBE-COMPILE (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) (#1=(SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) (COMMON-LISP:EVAL-WHEN (:COMPILE-TOPLEVEL :LOAD-TOPLEVEL :EXECUTE) #1#) SB-C::ORIGINAL-SOURCE-START 0 12) COMMON-LISP:T)
20: (SB-C::PROCESS-TOPLEVEL-FORM (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION)) ((COMMON-LISP:EVAL-WHEN (:COMPILE-TOPLEVEL :LOAD-TOPLEVEL :EXECUTE) (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION))) SB-C::ORIGINAL-SOURCE-START 0 12) (:COMPILE-TOPLEVEL))
21: (SB-C::PROCESS-TOPLEVEL-PROGN ((SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION))) ((COMMON-LISP:EVAL-WHEN (:COMPILE-TOPLEVEL :LOAD-TOPLEVEL :EXECUTE) (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION))) SB-C::ORIGINAL-SOURCE-START 0 12) (:COMPILE-TOPLEVEL))
22: (SB-C::PROCESS-TOPLEVEL-FORM (COMMON-LISP:EVAL-WHEN (:COMPILE-TOPLEVEL :LOAD-TOPLEVEL :EXECUTE) (SB-C::%DEFINE-SYMBOL-MACRO (COMMON-LISP:QUOTE +SINGLE-FLOAT-NAN+) (COMMON-LISP:QUOTE #<SINGLE-FLOAT quiet NaN>) (SB-C:SOURCE-LOCATION))) (SB-C::ORIGINAL-SOURCE-START 0 12) COMMON-LISP:NIL)
23: (SB-C::PROCESS-TOPLEVEL-FORM (COMMON-LISP:DEFINE-SYMBOL-MACRO +SINGLE-FLOAT-NAN+ #<SINGLE-FLOAT quiet NaN>) (SB-C::ORIGINAL-SOURCE-START 0 12) COMMON-LISP:NIL)
24: ((COMMON-LISP:LAMBDA (SB-KERNEL:FORM COMMON-LISP:&KEY :CURRENT-INDEX COMMON-LISP:&ALLOW-OTHER-KEYS) :IN SB-C::SUB-COMPILE-FILE) (COMMON-LISP:DEFINE-SYMBOL-MACRO +SINGLE-FLOAT-NAN+ #<SINGLE-FLOAT quiet NaN>) :CURRENT-INDEX 12)
25: (SB-C::%DO-FORMS-FROM-INFO #<FUNCTION (COMMON-LISP:LAMBDA (SB-KERNEL:FORM COMMON-LISP:&KEY :CURRENT-INDEX COMMON-LISP:&ALLOW-OTHER-KEYS) :IN SB-C::SUB-COMPILE-FILE) {5221DEAB}> #<SB-C::SOURCE-INFO {1003F63CE3}> SB-C::INPUT-ERROR-IN-COMPILE-FILE)
26: ((COMMON-LISP:FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-C::SUB-COMPILE-FILE))
27: ((COMMON-LISP:FLET "WITHOUT-INTERRUPTS-BODY-11" :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))
28: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<FUNCTION (COMMON-LISP:FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-C::SUB-COMPILE-FILE) {7F43A6FF38BB}> #<SB-THREAD:MUTEX "World Lock" owner: #<SB-THREAD:THREAD "main thread" RUNNING {10015681E3}>> COMMON-LISP:T COMMON-LISP:NIL)
29: ((COMMON-LISP:FLET "LAMBDA19588" :IN "SYS:SRC;COMPILER;MAIN.LISP"))
30: ((COMMON-LISP:FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
31: (SB-C::SUB-COMPILE-FILE #<SB-C::SOURCE-INFO {1003F63CE3}> COMMON-LISP:NIL)
32: (COMMON-LISP:COMPILE-FILE #P"/home/phoe/.roswell/lisp/quicklisp/dists/quicklisp/software/protobuf-20201220-git/protocol-buffer.lisp" :OUTPUT-FILE #P"/home/phoe/.cache/common-lisp/sbcl-2.1.0-linux-x64/home/phoe/.roswell/lisp/quicklisp/dists/quicklisp/software/protobuf-20201220-git/protocol-buffer-tmpOU81XRV0.fasl" :VERBOSE COMMON-LISP:NIL :PRINT COMMON-LISP:NIL :PROGRESS COMMON-LISP:NIL :EXTERNAL-FORMAT :UTF-8 :TRACE-FILE COMMON-LISP:NIL :BLOCK-COMPILE COMMON-LISP:NIL :ENTRY-POINTS COMMON-LISP:NIL :EMIT-CFASL COMMON-LISP:NIL)
33: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN UIOP/LISP-BUILD:COMPILE-FILE*))
34: (UIOP/UTILITY:CALL-WITH-MUFFLED-CONDITIONS #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN UIOP/LISP-BUILD:COMPILE-FILE*) {1003F624DB}> COMMON-LISP:NIL)
35: (UIOP/LISP-BUILD:CALL-WITH-MUFFLED-COMPILER-CONDITIONS #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN UIOP/LISP-BUILD:COMPILE-FILE*) {1003F624DB}>)
36: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN UIOP/LISP-BUILD:COMPILE-FILE*))
37: (UIOP/LISP-BUILD::CALL-WITH-SAVED-DEFERRED-WARNINGS #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN UIOP/LISP-BUILD:COMPILE-FILE*) {1003F61F3B}> COMMON-LISP:NIL :SOURCE-NAMESTRING "/home/phoe/.roswell/lisp/quicklisp/dists/quicklisp/software/protobuf-20201220-git/protocol-buffer.lisp")
38: ((COMMON-LISP:LAMBDA (UIOP/LISP-BUILD::INPUT-FILE) :IN UIOP/LISP-BUILD:COMPILE-FILE*) #P"/home/phoe/.roswell/lisp/quicklisp/dists/quicklisp/software/protobuf-20201220-git/protocol-buffer.lisp")
39: (UIOP/PATHNAME:CALL-WITH-ENOUGH-PATHNAME #P"/home/phoe/.roswell/lisp/quicklisp/dists/quicklisp/software/protobuf-20201220-git/protocol-buffer.lisp" COMMON-LISP:NIL #<FUNCTION (COMMON-LISP:LAMBDA (UIOP/LISP-BUILD::INPUT-FILE) :IN UIOP/LISP-BUILD:COMPILE-FILE*) {1003F61EFB}>)
40: (UIOP/LISP-BUILD:COMPILE-FILE* #P"/home/phoe/.roswell/lisp/quicklisp/dists/quicklisp/software/protobuf-20201220-git/protocol-buffer.lisp" :OUTPUT-FILE #P"/home/phoe/.cache/common-lisp/sbcl-2.1.0-linux-x64/home/phoe/.roswell/lisp/quicklisp/dists/quicklisp/software/protobuf-20201220-git/protocol-buffer.fasl" :EXTERNAL-FORMAT :UTF-8 :WARNINGS-FILE COMMON-LISP:NIL)
41: ((COMMON-LISP:LAMBDA (COMMON-LISP:&REST ASDF/LISP-ACTION::FLAGS) :IN ASDF/LISP-ACTION:PERFORM-LISP-COMPILATION))
42: (UIOP/UTILITY:CALL-FUNCTION COMMON-LISP:FUNCALL #<FUNCTION (COMMON-LISP:LAMBDA (COMMON-LISP:&REST ASDF/LISP-ACTION::FLAGS) :IN ASDF/LISP-ACTION:PERFORM-LISP-COMPILATION) {1003F54DAB}>)
43: (UIOP/LISP-BUILD:CALL-AROUND-HOOK COMMON-LISP:NIL #<FUNCTION (COMMON-LISP:LAMBDA (COMMON-LISP:&REST ASDF/LISP-ACTION::FLAGS) :IN ASDF/LISP-ACTION:PERFORM-LISP-COMPILATION) {1003F54DAB}>)
44: ((:METHOD ASDF/LISP-ACTION:CALL-WITH-AROUND-COMPILE-HOOK (ASDF/COMPONENT:COMPONENT COMMON-LISP:T)) #<ASDF/LISP-ACTION:CL-SOURCE-FILE "protobuf" "protocol-buffer"> #<FUNCTION (COMMON-LISP:LAMBDA (COMMON-LISP:&REST ASDF/LISP-ACTION::FLAGS) :IN ASDF/LISP-ACTION:PERFORM-LISP-COMPILATION) {1003F54DAB}>) [fast-method]
45: (ASDF/LISP-ACTION:PERFORM-LISP-COMPILATION #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "protobuf" "protocol-buffer">)
46: ((:METHOD ASDF/ACTION:PERFORM (ASDF/LISP-ACTION:COMPILE-OP ASDF/LISP-ACTION:CL-SOURCE-FILE)) #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "protobuf" "protocol-buffer">) [fast-method]
47: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "protobuf" "protocol-buffer">)
48: ((COMMON-LISP:FLET COMMON-LISP:CALL-NEXT-METHOD :IN "/home/phoe/Projects/Lisp/asdf/build/asdf.lisp"))
49: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/ACTION:PERFORM))
50: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION))
51: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION) {1003F4F36B}> :OVERRIDE COMMON-LISP:NIL :KEY COMMON-LISP:NIL :OVERRIDE-CACHE COMMON-LISP:NIL :OVERRIDE-FORCING COMMON-LISP:NIL)
52: (ASDF/ACTION:CALL-WHILE-VISITING-ACTION #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "protobuf" "protocol-buffer"> #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/ACTION:PERFORM) {1003F4F33B}>)
53: ((:METHOD ASDF/ACTION:PERFORM :AROUND (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "protobuf" "protocol-buffer">) [fast-method]
54: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (COMMON-LISP:T COMMON-LISP:T)) #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "protobuf" "protocol-buffer">) [fast-method]
55: ((COMMON-LISP:FLET COMMON-LISP:CALL-NEXT-METHOD :IN "/home/phoe/Projects/Lisp/asdf/build/asdf.lisp"))
56: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (COMMON-LISP:T COMMON-LISP:T)) #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "protobuf" "protocol-buffer">) [fast-method]
57: ((:METHOD ASDF/PLAN:PERFORM-PLAN (COMMON-LISP:T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {10041DADE3}>) [fast-method]
58: ((COMMON-LISP:FLET COMMON-LISP:CALL-NEXT-METHOD :IN "/home/phoe/Projects/Lisp/asdf/build/asdf.lisp"))
59: ((COMMON-LISP:FLET "LAMBDA0" :IN "/home/phoe/Projects/Lisp/asdf/build/asdf.lisp"))
60: ((COMMON-LISP:FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
61: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (COMMON-LISP:T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {10041DADE3}>) [fast-method]
62: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "protobuf"> :PLAN-CLASS COMMON-LISP:NIL :PLAN-OPTIONS COMMON-LISP:NIL) [fast-method]
63: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "protobuf"> :VERBOSE COMMON-LISP:NIL)
64: ((COMMON-LISP:FLET COMMON-LISP:CALL-NEXT-METHOD :IN "/home/phoe/Projects/Lisp/asdf/build/asdf.lisp"))
65: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE))
66: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE) {10041DACAB}> :OVERRIDE COMMON-LISP:NIL :KEY COMMON-LISP:NIL :OVERRIDE-CACHE COMMON-LISP:NIL :OVERRIDE-FORCING COMMON-LISP:NIL)
67: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (COMMON-LISP:T COMMON-LISP:T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "protobuf"> :VERBOSE COMMON-LISP:NIL) [fast-method]
68: ((:METHOD ASDF/OPERATE:OPERATE (COMMON-LISP:SYMBOL COMMON-LISP:T)) ASDF/LISP-ACTION:LOAD-OP "protobuf" :VERBOSE COMMON-LISP:NIL) [fast-method]
69: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:LOAD-OP "protobuf" :VERBOSE COMMON-LISP:NIL)
70: ((COMMON-LISP:FLET COMMON-LISP:CALL-NEXT-METHOD :IN "/home/phoe/Projects/Lisp/asdf/build/asdf.lisp"))
71: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE))
72: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE) {10015996EB}> :OVERRIDE COMMON-LISP:NIL :KEY COMMON-LISP:NIL :OVERRIDE-CACHE COMMON-LISP:NIL :OVERRIDE-FORCING COMMON-LISP:NIL)
73: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (COMMON-LISP:T COMMON-LISP:T)) ASDF/LISP-ACTION:LOAD-OP "protobuf" :VERBOSE COMMON-LISP:NIL) [fast-method]
74: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE))
75: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE) {1001598EDB}> :OVERRIDE COMMON-LISP:T :KEY COMMON-LISP:NIL :OVERRIDE-CACHE COMMON-LISP:T :OVERRIDE-FORCING COMMON-LISP:NIL)
76: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE))
77: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN ASDF/OPERATE:OPERATE) {1004E5C12B}> :OVERRIDE COMMON-LISP:NIL :KEY COMMON-LISP:NIL :OVERRIDE-CACHE COMMON-LISP:NIL :OVERRIDE-FORCING COMMON-LISP:NIL)
78: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (COMMON-LISP:T COMMON-LISP:T)) ASDF/LISP-ACTION:LOAD-OP "protobuf" :VERBOSE COMMON-LISP:NIL) [fast-method]
79: (ASDF/OPERATE:LOAD-SYSTEM "protobuf" :VERBOSE COMMON-LISP:NIL)
80: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {1004E5AA8B}>)
81: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "protobuf" :PROMPT COMMON-LISP:NIL)
82: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (COMMON-LISP:T COMMON-LISP:T)) #<unused argument> #<FUNCTION (COMMON-LISP:FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {10033B921B}>) [fast-method]
83: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL COMMON-LISP:T)) #<QL-IMPL:SBCL {1004F34173}> #<FUNCTION (COMMON-LISP:FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {10033B921B}>) [fast-method]
84: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (COMMON-LISP:T)) :PROTOBUF :PROMPT COMMON-LISP:NIL :SILENT COMMON-LISP:NIL :VERBOSE COMMON-LISP:NIL) [fast-method]
85: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {10033B302B}>)
86: (SB-INT:SIMPLE-EVAL-IN-LEXENV (QUICKLISP-CLIENT:QUICKLOAD :PROTOBUF) #<NULL-LEXENV>)
87: (COMMON-LISP:EVAL (QUICKLISP-CLIENT:QUICKLOAD :PROTOBUF))
88: (SB-EXT:INTERACTIVE-EVAL (QUICKLISP-CLIENT:QUICKLOAD :PROTOBUF) :EVAL COMMON-LISP:NIL)
89: (SB-IMPL::REPL-FUN COMMON-LISP:NIL)
90: ((COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SB-IMPL::TOPLEVEL-REPL))
91: (SB-IMPL::%WITH-REBOUND-IO-SYNTAX #<FUNCTION (COMMON-LISP:LAMBDA COMMON-LISP:NIL :IN SB-IMPL::TOPLEVEL-REPL) {10033B2ECB}>)
92: (SB-IMPL::TOPLEVEL-REPL COMMON-LISP:NIL)
93: (SB-IMPL::TOPLEVEL-INIT)
94: ((COMMON-LISP:FLET SB-UNIX::BODY :IN SB-IMPL::START-LISP))
95: ((COMMON-LISP:FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-IMPL::START-LISP))
96: (SB-IMPL::START-LISP)

Can't Reconfigure for New Platforms

Whilst compiling for MacOS, I get the below error. It looks like some of this is auto-generated, but without a way to regenerate the files for Mac. In my situation, I need this working on both MS Windows and Mac for development.

- Steve

c++ -std=c++0x -I/usr/local/include -I. -c -o message.o message.cc
In file included from message.cc:32:
./hash.h:43:10: fatal error: 'tr1/unordered_map' file not found

include HASH_MAP_H

     ^

./config.h:8:20: note: expanded from macro 'HASH_MAP_H'

define HASH_MAP_H <tr1/unordered_map>

               ^

1 error generated.
make: *** [message.o] Error 1

make install failed

luoxing@localhost lisp $make install

/Users/didi/bin/g++ -std=c++0x -I/local/software/package/protobuf/include -I. -I/Users/didi/include -c -o enum.o enum.cc enum.cc: 在成员函数‘void google::protobuf::compiler::lisp::EnumGenerator::GenerateDefType(google::protobuf::io::Printer*)’中: enum.cc:90:3: 错误:‘set’在此作用域中尚未声明 set numbers;

EXPORT forms

Allegro common lisp objects to the toplevel EXPORT forms generated by the protobuf compiler.

In particular, it seems that Allegro thinks they should be wrapped in EVAL-WHEN in order to ensure that they have compile-time effect.

Is that correct?

For example:

; While FILE-COMPILING #'(:TOP-LEVEL-FORM "descriptor.lisp" 226770) in
#P"/Users/rpg/.cache/common-lisp/acl-10.0-macosx-x64/Users/rpg/projects/gridguard/protobuf-cl/descriptor.lisp"
; starting at file character position 226770:
Warning: compile-file found "EXPORT" at the top-level --  see the
         documentation for
         comp:*cltl1-compile-file-toplevel-compatibility-p*

and see http://franz.com/support/documentation/10.0/doc/variables/compiler/s_cltl1-compile-file-toplevel-compatibility-p_s.htm

Warning from ASDF

I get this warning loading protobuf-example

; Loading
;    /Users/rpg/projects/gridguard/protobuf-cl/example/protobuf-example.asd
Warning: No dependency propagating scheme specified for operation class
         PROTOBUF-SYSTEM::PROTO-TO-LISP.
The class needs to be updated for ASDF 3.1 and specify appropriate
         propagation mixins.

I believe that this operation needs to be defined as a subclass of ASDF:SELFWARD-OPERATION, but I will have to check.

I suspect a possible bug

It appears that parsing is getting thrown off by the attached hello.gtirb.zip protobuf file (zipped for upload).

Specifically, using:

The CL parser parses the top level IR, then down to the containing Module, into the Section and then the last message parsed is the SectionFlag, after which point it is thrown off and then it throws an effort in skip-field when it should have finished that section and moved on to the next section (the SectionFlag was the last message in that section). This same file appears to parse successfully using C++ and Python protobuf implementations.

This should be reproducible by:

  1. cloning the above gtirb project into your quicklisp local-projects
  2. (ql:quickload :gtirb)
  3. (gtirb:read-gtirb "/path/to/hello.gtirb")

Any advice?

Needs Updating for ASDF 3.1 (?)

I just updated to the latest ASDF (for other reasons), and get the following when loading the example in CCL. Not sure if it's ASDF or if there really is a missing package PB.

? (asdf:load-system 'protobuf)
T
? (asdf:load-system 'protobuf-example)
; Warning: No dependency propagating scheme specified for operation class PROTOBUF-SYSTEM::PROTO-TO-LISP.
; The class needs to be updated for ASDF 3.1 and specify appropriate propagation mixins.
; While executing: #<STANDARD-METHOD INITIALIZE-INSTANCE :BEFORE (ASDF/OPERATION:OPERATION)>, in process listener(1).
Read error between positions 893 and 947 in /Users/snunez/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/snunez/src/lisp/protobuf/example/addressbook.lisp.

Error: There is no package named "PB" .
While executing: CCL::%PARSE-TOKEN, in process listener(1).
Type :GO to continue, :POP to abort, :R for a list of available restarts.
If continued: Retry finding package with name "PB".
Type :? for other options.

Modify the protobuf files ASDF component?

In many cases, it's sufficient to distribute the lisp code generated by protobuf, and not require a library user to have the protocol buffer compiler installed locally. Any thoughts about how that might be done? Right now it seems that the .lisp files are generated into the cache by ASDF's compiled code relocation facility. We could make the .lisp files stay in the source directory instead, and then people could check them into repos, and not require the protocol buffer compiler be run.

Something in protobuf system breaks the ASDF output file locations

Normally, ASDF writes my compiled files into ~/.cache/common-lisp/. This lets me work with multiple CL implementations, since the FASL files for different implementations are in different directories.

Somehow, protobuf is breaking this for me. Is this intentional, or did it accidentally happen somehow as a side-effect of handling the protocol buffer operations? Or could this be something that happens because of com.google.base?

Here's an example; see the starred line where it goes awry:

; Fast loading
;    /Users/rpg/.cache/common-lisp/acl-10.0-macosx-x64/Users/rpg/quicklisp/dists/quicklisp/software/nibbles-20150709-git/sbcl-opt/x86-vm.fasl
;;; Compiling file
;;;   /Users/rpg/quicklisp/dists/quicklisp/software/nibbles-20150709-git/sbcl-opt/x86-64-vm.lisp
;;; Writing fasl file
;;;   /Users/rpg/.cache/common-lisp/acl-10.0-macosx-x64/Users/rpg/quicklisp/dists/quicklisp/software/nibbles-20150709-git/sbcl-opt/x86-64-vm-tmpe6to2q24.fasl
;;; Fasl write complete
; Fast loading
;    /Users/rpg/.cache/common-lisp/acl-10.0-macosx-x64/Users/rpg/quicklisp/dists/quicklisp/software/nibbles-20150709-git/sbcl-opt/x86-64-vm.fasl
;;; ************* Here's where things change.
;;; Compiling file
;;;   home:projects;gridguard;protobuf-cl;varint;package.lisp
;;;   (/Users/rpg/projects/gridguard/protobuf-cl/varint/package.lisp)
;;; Writing fasl file
;;;   /Users/rpg/projects/gridguard/protobuf-cl/varint/package-tmpyyle3wr2.fasl
;;; Fasl write complete
; Fast loading home:projects;gridguard;protobuf-cl;varint;package.fasl
;    (/Users/rpg/projects/gridguard/protobuf-cl/varint/package.fasl)
Warning: unable to safely change compiler optimization policy
;;; Compiling file
;;;   home:projects;gridguard;protobuf-cl;varint;varint.lisp
;;;   (/Users/rpg/projects/gridguard/protobuf-cl/varint/varint.lisp)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.