diff options
author | agc <agc@pkgsrc.org> | 2012-04-27 04:48:44 +0000 |
---|---|---|
committer | agc <agc@pkgsrc.org> | 2012-04-27 04:48:44 +0000 |
commit | 15b42739ac7776debf31811b97796366459bfa2c (patch) | |
tree | 39e49c149bc75cbd6a5750f780e8225dfaa41933 /lang/picoc | |
parent | b6b2f612409e83065e3b3acca4e33be3d99e6a2b (diff) | |
download | pkgsrc-15b42739ac7776debf31811b97796366459bfa2c.tar.gz |
Initial import of picoc-2.1 into the Packages Collection
PicoC is a very small C interpreter for scripting. It was originally
written as the script language for a UAV's on-board flight system.
It's also very suitable for other robotic, embedded and non-embedded
applications.
The core C source code is around 4000 lines of code. It's not
intended to be a complete implementation of ISO C but it has all the
essentials. When compiled it only takes a few k of code space and is
also very sparing of data space. This means it can work well in small
embedded devices. It's also a fun example of how to create a very
small language implementation while still keeping the code readable.
picoc has been tested on x86-32, x86-64, powerpc, arm, ultrasparc,
HP-PA and blackfin processors and is easy to port to new targets.
To show it working on the old DECUS grep program (included as one of its
tests):
% time picoc work/picoc/tests/46_grep.c - case work/picoc/tests/46_grep.c
File work/picoc/tests/46_grep.c:
"lower-case are always ignored. Blank lines never match. The expression",
case '^':
case '$':
case '.':
case '[':
case ':':
...
0.651u 0.000s 0:00.68 95.5% 0+0k 0+0io 0pf+0w
% wc work/picoc/tests/46_grep.c
557 1991 15172 work/picoc/tests/46_grep.c
%
Diffstat (limited to 'lang/picoc')
-rw-r--r-- | lang/picoc/DESCR | 14 | ||||
-rw-r--r-- | lang/picoc/Makefile | 23 | ||||
-rw-r--r-- | lang/picoc/PLIST | 2 | ||||
-rw-r--r-- | lang/picoc/distinfo | 9 | ||||
-rw-r--r-- | lang/picoc/patches/patch-aa | 16 | ||||
-rw-r--r-- | lang/picoc/patches/patch-ab | 15 | ||||
-rw-r--r-- | lang/picoc/patches/patch-ac | 18 | ||||
-rw-r--r-- | lang/picoc/patches/patch-ad | 78 |
8 files changed, 175 insertions, 0 deletions
diff --git a/lang/picoc/DESCR b/lang/picoc/DESCR new file mode 100644 index 00000000000..94020c0379e --- /dev/null +++ b/lang/picoc/DESCR @@ -0,0 +1,14 @@ +PicoC is a very small C interpreter for scripting. It was originally +written as the script language for a UAV's on-board flight system. +It's also very suitable for other robotic, embedded and non-embedded +applications. + +The core C source code is around 4000 lines of code. It's not +intended to be a complete implementation of ISO C but it has all the +essentials. When compiled it only takes a few k of code space and is +also very sparing of data space. This means it can work well in small +embedded devices. It's also a fun example of how to create a very +small language implementation while still keeping the code readable. + +picoc has been tested on x86-32, x86-64, powerpc, arm, ultrasparc, +HP-PA and blackfin processors and is easy to port to new targets. diff --git a/lang/picoc/Makefile b/lang/picoc/Makefile new file mode 100644 index 00000000000..01744350e2f --- /dev/null +++ b/lang/picoc/Makefile @@ -0,0 +1,23 @@ +# $NetBSD: Makefile,v 1.1.1.1 2012/04/27 04:48:44 agc Exp $ + +DISTNAME= picoc-2.1 +CATEGORIES= lang +MASTER_SITES= http://picoc.googlecode.com/files/ +EXTRACT_SUFX= .tar.bz2 + +MAINTAINER= agc@NetBSD.org +HOMEPAGE= http://code.google.com/p/picoc/ +COMMENT= C interpreter +LICENSE= modified-bsd + +WRKSRC= ${WRKDIR}/picoc + +PKG_DESTDIR_SUPPORT= user-destdir +AUTO_MKDIRS= yes + +do-install: + ${INSTALL_PROGRAM} ${WRKSRC}/picoc ${DESTDIR}${PREFIX}/bin/picoc + +.include "../../devel/readline/buildlink3.mk" + +.include "../../mk/bsd.pkg.mk" diff --git a/lang/picoc/PLIST b/lang/picoc/PLIST new file mode 100644 index 00000000000..3407bf96d0c --- /dev/null +++ b/lang/picoc/PLIST @@ -0,0 +1,2 @@ +@comment $NetBSD: PLIST,v 1.1.1.1 2012/04/27 04:48:44 agc Exp $ +bin/picoc diff --git a/lang/picoc/distinfo b/lang/picoc/distinfo new file mode 100644 index 00000000000..aaeb3275d18 --- /dev/null +++ b/lang/picoc/distinfo @@ -0,0 +1,9 @@ +$NetBSD: distinfo,v 1.1.1.1 2012/04/27 04:48:44 agc Exp $ + +SHA1 (picoc-2.1.tar.bz2) = 24fdc3c8302915d663fcaefaf878ab5ad5a2d69b +RMD160 (picoc-2.1.tar.bz2) = 9d65bcee54a6d7fa28a66afdd09d3b7554315f68 +Size (picoc-2.1.tar.bz2) = 69991 bytes +SHA1 (patch-aa) = 68819805ddc79a193df17ba2d23fbf388f7bfcd1 +SHA1 (patch-ab) = 616fb42d4bc08f4500d607e33ece112e87ecdd0b +SHA1 (patch-ac) = 879e978d0f2542e5841d5279aa034ec4a7209147 +SHA1 (patch-ad) = e976c920fa6807ab773f6c505e88a5b3ed7e990a diff --git a/lang/picoc/patches/patch-aa b/lang/picoc/patches/patch-aa new file mode 100644 index 00000000000..8ce57ac67b9 --- /dev/null +++ b/lang/picoc/patches/patch-aa @@ -0,0 +1,16 @@ +$NetBSD: patch-aa,v 1.1.1.1 2012/04/27 04:48:44 agc Exp $ + +avoid macro fun with cpp definition + +--- cstdlib/stdio.c 2012/04/26 12:20:00 1.1 ++++ cstdlib/stdio.c 2012/04/26 12:21:03 +@@ -414,7 +414,8 @@ + + void StdioFileno(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) + { +- ReturnValue->Val->Integer = fileno(Param[0]->Val->Pointer); ++ FILE *fp = (FILE *)Param[0]->Val->Pointer; ++ ReturnValue->Val->Integer = fileno(fp); + } + + void StdioFflush(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) diff --git a/lang/picoc/patches/patch-ab b/lang/picoc/patches/patch-ab new file mode 100644 index 00000000000..d7a57263d01 --- /dev/null +++ b/lang/picoc/patches/patch-ab @@ -0,0 +1,15 @@ +$NetBSD: patch-ab,v 1.1.1.1 2012/04/27 04:48:44 agc Exp $ + +hardcode the Hz value + +--- cstdlib/time.c 2012/04/26 12:20:00 1.1 ++++ cstdlib/time.c 2012/04/26 12:21:03 +@@ -11,7 +11,7 @@ + #endif + + #ifdef CLK_TCK +-static int CLK_TCKValue = CLK_TCK; ++static int CLK_TCKValue = 100; + #endif + + void StdAsctime(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) diff --git a/lang/picoc/patches/patch-ac b/lang/picoc/patches/patch-ac new file mode 100644 index 00000000000..bcffd9f31a0 --- /dev/null +++ b/lang/picoc/patches/patch-ac @@ -0,0 +1,18 @@ +$NetBSD: patch-ac,v 1.1.1.1 2012/04/27 04:48:44 agc Exp $ + +use the correct number of args to setpgrp() + +--- cstdlib/unistd.c 2012/04/26 12:20:00 1.1 ++++ cstdlib/unistd.c 2012/04/26 12:21:03 +@@ -278,7 +278,11 @@ + + void UnistdSetpgrp(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) + { ++#ifdef __linux__ + ReturnValue->Val->Integer = setpgrp(); ++#else ++ ReturnValue->Val->Integer = setpgrp(Param[0]->Val->Integer, Param[1]->Val->Integer); ++#endif + } + + void UnistdSetregid(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) diff --git a/lang/picoc/patches/patch-ad b/lang/picoc/patches/patch-ad new file mode 100644 index 00000000000..7f402969e32 --- /dev/null +++ b/lang/picoc/patches/patch-ad @@ -0,0 +1,78 @@ +$NetBSD: patch-ad,v 1.1.1.1 2012/04/27 04:48:44 agc Exp $ + +Use a better (BSD) Makefile + +--- Makefile 2012/04/26 13:04:31 1.1 ++++ Makefile 2012/04/26 13:04:39 +@@ -1,55 +1,18 @@ +-CC=gcc +-CFLAGS=-Wall -pedantic -g -DUNIX_HOST +-LIBS=-lm -lreadline ++PROG=picoc ++CPPFLAGS+= -DUNIX_HOST ++LDADD+=-lm -ledit ++# interpreter source ++SRCS= picoc.c table.c lex.c parse.c expression.c heap.c type.c ++SRCS+= variable.c clibrary.c platform.c include.c ++# platform ++SRCS+= platform_unix.c library_unix.c ++# cstdlib ++SRCS+= stdio.c math.c string.c stdlib.c ++SRCS+= time.c errno.c ctype.c stdbool.c ++SRCS+= unistd.c ++MKMAN=no ++WARNS=0 + +-TARGET = picoc +-SRCS = picoc.c table.c lex.c parse.c expression.c heap.c type.c \ +- variable.c clibrary.c platform.c include.c \ +- platform/platform_unix.c platform/library_unix.c \ +- cstdlib/stdio.c cstdlib/math.c cstdlib/string.c cstdlib/stdlib.c \ +- cstdlib/time.c cstdlib/errno.c cstdlib/ctype.c cstdlib/stdbool.c \ +- cstdlib/unistd.c +-OBJS := $(SRCS:%.c=%.o) ++.PATH: ${.CURDIR} ${.CURDIR}/cstdlib ${.CURDIR}/platform + +-all: $(TARGET) +- +-$(TARGET): $(OBJS) +- $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LIBS) +- +-test: all +- (cd tests; make test) +- +-clean: +- rm -f $(TARGET) $(OBJS) *~ +- +-count: +- @echo "Core:" +- @cat picoc.h interpreter.h picoc.c table.c lex.c parse.c expression.c platform.c heap.c type.c variable.c include.c | grep -v '^[ ]*/\*' | grep -v '^[ ]*$$' | wc +- @echo "" +- @echo "Everything:" +- @cat $(SRCS) *.h */*.h | wc +- +-.PHONY: clibrary.c +- +-picoc.o: picoc.c picoc.h +-table.o: table.c interpreter.h platform.h +-lex.o: lex.c interpreter.h platform.h +-parse.o: parse.c picoc.h interpreter.h platform.h +-expression.o: expression.c interpreter.h platform.h +-heap.o: heap.c interpreter.h platform.h +-type.o: type.c interpreter.h platform.h +-variable.o: variable.c interpreter.h platform.h +-clibrary.o: clibrary.c picoc.h interpreter.h platform.h +-platform.o: platform.c picoc.h interpreter.h platform.h +-include.o: include.c picoc.h interpreter.h platform.h +-platform/platform_unix.o: platform/platform_unix.c picoc.h interpreter.h platform.h +-platform/library_unix.o: platform/library_unix.c interpreter.h platform.h +-cstdlib/stdio.o: cstdlib/stdio.c interpreter.h platform.h +-cstdlib/math.o: cstdlib/math.c interpreter.h platform.h +-cstdlib/string.o: cstdlib/string.c interpreter.h platform.h +-cstdlib/stdlib.o: cstdlib/stdlib.c interpreter.h platform.h +-cstdlib/time.o: cstdlib/time.c interpreter.h platform.h +-cstdlib/errno.o: cstdlib/errno.c interpreter.h platform.h +-cstdlib/ctype.o: cstdlib/ctype.c interpreter.h platform.h +-cstdlib/stdbool.o: cstdlib/stdbool.c interpreter.h platform.h +-cstdlib/unistd.o: cstdlib/unistd.c interpreter.h platform.h ++.include <bsd.prog.mk> |