This is an automated email from the git hooks/post-receive script. glondu pushed a commit to branch master in repository atdgen.
commit 2bb1730df2cb9b163ddb1b46dd804b6ef0a80834 Author: Stephane Glondu <st...@glondu.net> Date: Thu Aug 4 11:14:45 2016 +0200 Imported Upstream version 1.8.0 --- Makefile | 6 ++++ atdgen-cppo/LICENSE | 24 +++++++++++++++ atdgen-cppo/Makefile | 38 +++++++++++++++++++++++ atdgen-cppo/README.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++++ atdgen-cppo/atdgen-cppo | 74 ++++++++++++++++++++++++++++++++++++++++++++ atdgen-cppo/cppo-json | 56 ++++++++++++++++++++++++++++++++++ atdgen-cppo/example.ml | 5 +++ atdgen.install | 2 ++ src/Makefile | 2 +- 9 files changed, 287 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fde626b..76ad3ee 100644 --- a/Makefile +++ b/Makefile @@ -27,18 +27,23 @@ findlib-uninstall: .PHONY: exe-install exe-uninstall exe-install: $(MAKE) -C src exe-install + $(MAKE) -C atdgen-cppo exe-install exe-uninstall: $(MAKE) -C src exe-uninstall + $(MAKE) -C atdgen-cppo exe-uninstall install: $(MAKE) -C src install + $(MAKE) -C atdgen-cppo install uninstall: $(MAKE) -C src uninstall + $(MAKE) -C atdgen-cppo uninstall reinstall: $(MAKE) -C src reinstall + $(MAKE) -C atdgen-cppo reinstall test: $(MAKE) -C test @@ -50,3 +55,4 @@ clean: rm -f *~ util/*~ example/*~ $(MAKE) -C src clean $(MAKE) -C test clean + $(MAKE) -C atdgen-cppo clean diff --git a/atdgen-cppo/LICENSE b/atdgen-cppo/LICENSE new file mode 100644 index 0000000..93b62ab --- /dev/null +++ b/atdgen-cppo/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2011-2012 Martin Jambon +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/atdgen-cppo/Makefile b/atdgen-cppo/Makefile new file mode 100644 index 0000000..22940ac --- /dev/null +++ b/atdgen-cppo/Makefile @@ -0,0 +1,38 @@ +ifndef PREFIX + PREFIX = $(shell dirname $$(dirname $$(which ocamlfind))) + export PREFIX +endif + +ifndef BINDIR + BINDIR = $(PREFIX)/bin + export BINDIR +endif + +.PHONY: default demo clean install uninstall reinstall +.PHONY: exe-install exe-uninstall + +default: demo + +demo: + @echo "--- Demo ---" + ocamlfind opt -o example \ + -pp cppo-json \ + -package atdgen -linkpkg \ + example.ml + ./example + +exe-install: + cp atdgen-cppo cppo-json "$(BINDIR)" + +exe-uninstall: + rm -f "$(BINDIR)"/atdgen-cppo "$(BINDIR)"/cppo-json + +install: exe-install +uninstall: exe-uninstall + +reinstall: + $(MAKE) uninstall BINDIR="$(BINDIR)" + $(MAKE) install BINDIR="$(BINDIR)" + +clean: + rm -f *.cm[iox] *.o *~ example diff --git a/atdgen-cppo/README.md b/atdgen-cppo/README.md new file mode 100644 index 0000000..1fb6790 --- /dev/null +++ b/atdgen-cppo/README.md @@ -0,0 +1,81 @@ +`cppo-json` is a preprocessor that replaces embedded type definition +directives with OCaml type definitions and JSON +serialization/deserialization code. + +`atdgen-cppo` is the script that reads type definitions from stdin and +generates OCaml code. It takes options allowing users to pick what +kind of code needs to be generated (type definitions, JSON +serialization, Biniou serialization, validators). + +Example +------- + +Sample input: + +``` +$ cat example.ml +#ext json +type mytype = string list +#endext +let data = [ "Hello"; "world" ] +let () = print_endline (J.string_of_mytype data) +``` + +How to view the OCaml code produced by cppo-json: + +``` +$ cppo-json < example.ml | less +``` + +How to compile an OCaml program: + +``` +$ ocamlfind opt -o example \ + -pp cppo-json \ + -package atdgen -linkpkg \ + example.ml +``` + +cppo-json ships with atdgen-cppo and is shorthand for the following command: + +``` +cppo -x "json:atdgen-cppo t j v" +``` + +where `t` stands for "type definitions", `j` stands for "JSON", and +`v` stands for "validators". + +See also: +``` +$ cppo-json --help +$ atdgen-cppo --help +$ cppo --help +``` + + +Documentation +------------- + +Documentation is provided by the `--help` option of each command. + +Direct dependencies +------------------- + +* [atdgen](https://github.com/MyLifeLabs/atdgen) +* [cppo](https://github.com/mjambon/cppo) + +Installation +------------ + +It's just two shell scripts. You can copy them by hand to the +directory of your choice or run: + +``` +$ make install # installs into $HOME/bin +``` + +or + +``` +$ BINDIR=/path/to/bin make install +``` diff --git a/atdgen-cppo/atdgen-cppo b/atdgen-cppo/atdgen-cppo new file mode 100755 index 0000000..808f76e --- /dev/null +++ b/atdgen-cppo/atdgen-cppo @@ -0,0 +1,74 @@ +#! /bin/sh -e +version=1.0.0 + +self="$0" +usage () { + echo "\ +Usage: $self [t] [b] [j] [v] + +atdgen-cppo makes it possible to use atdgen to derive code from ATD +type definitions embedded in OCaml source files rather than in +separate .atd files. This is similar to how json-static is used, +except that the preprocessor is not camlp4 but the simpler program cppo. + +Modes: + t produce a module T containing OCaml type definitions translated from ATD + b produce a module B containing OCaml code for biniou serialization + j produce a module J containing OCaml code JSON serialization + v produce a module V containing OCaml code for validation + +Typical usage: + + \$ cat example.ml + #ext json + type mytype = string list + #endext + let data = [ \"Hello\"; \"world\" ] + let () = print_endline (J.string_of_mytype data) + + \$ ocamlfind opt -o example \\ + -pp 'cppo -x \"json:$self t j\"' \\ + -package atdgen -linkpkg example.ml + + \$ ./example + [\"Hello\",\"world\"] +" >&2 +} + +case "$1" in + -h|-help|--help) usage; exit 0 ;; + *) ;; +esac + +tmp=$(tempfile -p ml- -s -atdgen-cppo.ml) +cat > $tmp + +fail () { + rm -f $tmp + exit 1 +} + +# CPPO_FIRST_LINE is off by one in cppo 0.9.1. +# Should be fixed in cppo rather than here. +gen () { + echo "module $1 = (" + atdgen \ + -pos-fname "$CPPO_FILE" \ + -pos-lnum $(( $CPPO_FIRST_LINE + 1 )) \ + -$2 < $tmp || fail + echo ")" +} + +while [ $# != 0 ]; do + case "$1" in + t) gen T t ;; + b) gen B b ;; + j) gen J j ;; + v) gen V v ;; + --help|-help) usage; exit 0 ;; + *) usage; exit 2 + esac + shift +done + +rm -f $tmp diff --git a/atdgen-cppo/cppo-json b/atdgen-cppo/cppo-json new file mode 100755 index 0000000..c2b54d4 --- /dev/null +++ b/atdgen-cppo/cppo-json @@ -0,0 +1,56 @@ +#! /bin/sh + +usage () { + echo "\ +Usage: cppo-json [cppo arguments] + +cppo-json processes an OCaml file written with embedded type definitions +directives and replaces them by OCaml type definitions and JSON +serialization/deserialization code. + +Sample input: + + \$ cat example.ml + #ext json + type mytype = string list + #endext + let data = [ \"Hello\"; \"world\" ] + let () = print_endline (J.string_of_mytype data) + +How to view the OCaml code produced by cppo-json: + + \$ cppo-json < example.ml | less + +How to compile an OCaml program: + + \$ ocamlfind opt -o example \\ + -pp cppo-json \\ + -package atdgen -linkpkg \\ + example.ml + +cppo-json ships with atdgen-cppo and is shorthand for the following command: + + cppo -x \"json:atdgen-cppo t j v\" + +where 't' stands for 'type definitions', 'j' stands for 'JSON', and +'v' stands for \"validators\". + +See also: + atdgen-cppo --help + cppo --help +" >&2 +} + +case "$1" in + --help|-help) usage; exit 0 ;; + *) +esac + +cppo -x "json:atdgen-cppo t j v" "$@" + +case $? in + 0) ;; + *) + echo "cppo-json failed" >&2 + exit 2 +esac diff --git a/atdgen-cppo/example.ml b/atdgen-cppo/example.ml new file mode 100644 index 0000000..3e1238a --- /dev/null +++ b/atdgen-cppo/example.ml @@ -0,0 +1,5 @@ +#ext json +type mytype = string list +#endext +let data = [ "Hello"; "world" ] +let () = print_endline (J.string_of_mytype data) diff --git a/atdgen.install b/atdgen.install index 1cc261b..1f5dc8c 100644 --- a/atdgen.install +++ b/atdgen.install @@ -1,4 +1,6 @@ bin: [ "src/atdgen.run" "src/atdgen" + "atdgen-cppo/atdgen-cppo" + "atdgen-cppo/cppo-json" ] diff --git a/src/Makefile b/src/Makefile index a067942..1daea7f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,4 +1,4 @@ -VERSION = 1.7.2 +VERSION = 1.8.0 ifeq "$(shell ocamlc -config |grep os_type)" "os_type: Win32" EXE=.exe else -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/atdgen.git _______________________________________________ Pkg-ocaml-maint-commits mailing list Pkg-ocaml-maint-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-ocaml-maint-commits