summaryrefslogtreecommitdiff
path: root/devel/libgpc
diff options
context:
space:
mode:
authorMikhail Teterin <mi@FreeBSD.org>2005-10-22 08:20:15 +0000
committerMikhail Teterin <mi@FreeBSD.org>2005-10-22 08:20:15 +0000
commit024cb10eec4f904ec8ca53e55d53edbce1d11ecd (patch)
tree014583be9085279d36d3dd6d23d8bbbc3c86f8ba /devel/libgpc
parentChase recent libCoin update (diff)
Add ports of the General Polygon Clipping library and its sample
client application. Some day OpenOffice may use this too...
Notes
Notes: svn path=/head/; revision=146102
Diffstat (limited to 'devel/libgpc')
-rw-r--r--devel/libgpc/Makefile28
-rw-r--r--devel/libgpc/distinfo2
-rw-r--r--devel/libgpc/files/BSDmakefile13
-rw-r--r--devel/libgpc/files/patch-alloca65
-rw-r--r--devel/libgpc/pkg-descr22
5 files changed, 130 insertions, 0 deletions
diff --git a/devel/libgpc/Makefile b/devel/libgpc/Makefile
new file mode 100644
index 000000000000..d5745e5f0bcb
--- /dev/null
+++ b/devel/libgpc/Makefile
@@ -0,0 +1,28 @@
+# New ports collection makefile for: gpc
+# Date created: 22 October 2005
+# Whom: Mikhail Teterin
+#
+# $FreeBSD$
+#
+
+PORTNAME= gpc
+PORTVERSION= 2.32
+CATEGORIES= devel math graphics
+MASTER_SITES= ftp://ftp.cs.man.ac.uk/pub/toby/gpc/
+DISTNAME= ${PORTNAME}${PORTVERSION:S/.//}
+
+MAINTAINER= mi@aldan.algebra.com
+COMMENT= Generic Polygon Clipper
+
+USE_ZIP= yes
+PLIST_FILES= lib/libgpc.so.${PORTVERSION} \
+ lib/libgpc.so lib/libgpc.a \
+ include/gpc.h
+INSTALLS_SHLIB= yes
+NO_CDROM= Can't be used for profit without permission
+
+MAKEFILE= ${FILESDIR}/BSDmakefile
+
+EXTRACT_BEFORE_ARGS=-qoa
+
+.include <bsd.port.mk>
diff --git a/devel/libgpc/distinfo b/devel/libgpc/distinfo
new file mode 100644
index 000000000000..8daa03122003
--- /dev/null
+++ b/devel/libgpc/distinfo
@@ -0,0 +1,2 @@
+MD5 (gpc232.zip) = e8ede167d810f26cf01f760a8824e2c9
+SIZE (gpc232.zip) = 15606
diff --git a/devel/libgpc/files/BSDmakefile b/devel/libgpc/files/BSDmakefile
new file mode 100644
index 000000000000..6b4d317d263b
--- /dev/null
+++ b/devel/libgpc/files/BSDmakefile
@@ -0,0 +1,13 @@
+LIB= gpc
+NOPROFILE= yes
+SHLIB_MAJOR= 2
+SHLIB_MINOR= 32
+
+SRCS= gpc.c
+INCS= gpc.h
+
+LIBDIR= ${PREFIX}/lib
+INCSDIR= ${PREFIX}/include
+WARNS?= 4 # level 5 trips over '-Wunused'
+
+.include <bsd.lib.mk>
diff --git a/devel/libgpc/files/patch-alloca b/devel/libgpc/files/patch-alloca
new file mode 100644
index 000000000000..6b45ec7a48db
--- /dev/null
+++ b/devel/libgpc/files/patch-alloca
@@ -0,0 +1,65 @@
+Use alloca() instead of malloc()/free(), where it is easy to do.
+
+Use BSD's err() instead of fprintf()/exit() on fatal failures.
+
+When so exiting, use non-zero code to signal a failure.
+
+ -mi
+
+--- gpc.c Fri Dec 17 10:39:26 2004
++++ gpc.c Sat Oct 22 04:04:31 2005
+@@ -39,4 +39,5 @@ Copyright: (C) 1997-2004, Advanced Inter
+
+ #include "gpc.h"
++#include <err.h>
+ #include <stdlib.h>
+ #include <float.h>
+@@ -104,6 +105,6 @@ Copyright: (C) 1997-2004, Advanced Inter
+ #define MALLOC(p, b, s, t) {if ((b) > 0) { \
+ p= (t*)malloc(b); if (!(p)) { \
+- fprintf(stderr, "gpc malloc failure: %s\n", s); \
+- exit(0);}} else p= NULL;}
++ err(1, "gpc: %s needed %zd bytes\n", s, \
++ (size_t)b); }} else p= NULL;}
+
+ #define FREE(p) {if (p) {free(p); (p)= NULL;}}
+@@ -965,6 +966,5 @@ static void minimax_test(gpc_polygon *su
+ c_bbox= create_contour_bboxes(clip);
+
+- MALLOC(o_table, subj->num_contours * clip->num_contours * sizeof(int),
+- "overlap table creation", int);
++ o_table = alloca(subj->num_contours * clip->num_contours * sizeof(int));
+
+ /* Check all subject contour bounding boxes against clip boxes */
+@@ -1006,5 +1006,4 @@ static void minimax_test(gpc_polygon *su
+ FREE(s_bbox);
+ FREE(c_bbox);
+- FREE(o_table);
+ }
+
+@@ -1166,5 +1165,5 @@ void gpc_polygon_clip(gpc_op op, gpc_pol
+
+ /* Build scanbeam table from scanbeam tree */
+- MALLOC(sbt, sbt_entries * sizeof(double), "sbt creation", double);
++ sbt = alloca(sbt_entries * sizeof(double));
+ build_sbt(&scanbeam, sbt, sbtree);
+ scanbeam= 0;
+@@ -1749,5 +1748,4 @@ void gpc_polygon_clip(gpc_op op, gpc_pol
+ FREE(c_heap);
+ FREE(s_heap);
+- FREE(sbt);
+ }
+
+@@ -1825,5 +1823,5 @@ void gpc_tristrip_clip(gpc_op op, gpc_po
+
+ /* Build scanbeam table from scanbeam tree */
+- MALLOC(sbt, sbt_entries * sizeof(double), "sbt creation", double);
++ sbt = alloca(sbt_entries * sizeof(double));
+ build_sbt(&scanbeam, sbt, sbtree);
+ scanbeam= 0;
+@@ -2463,5 +2461,4 @@ void gpc_tristrip_clip(gpc_op op, gpc_po
+ FREE(c_heap);
+ FREE(s_heap);
+- FREE(sbt);
+ }
+
diff --git a/devel/libgpc/pkg-descr b/devel/libgpc/pkg-descr
new file mode 100644
index 000000000000..0235b8c5f08d
--- /dev/null
+++ b/devel/libgpc/pkg-descr
@@ -0,0 +1,22 @@
+An algorithm for calculating the difference, intersection,
+exclusive-or or union of arbitrary polygon sets.
+
+Author: Alan Murta (email: gpc@cs.man.ac.uk)
+
+Copyright: (C) 1997-2004, Advanced Interfaces Group,
+ University of Manchester.
+
+ This software is free for non-commercial use. It may be copied,
+ modified, and redistributed provided that this copyright notice
+ is preserved on all copies. The intellectual property rights of
+ the algorithms used reside with the University of Manchester
+ Advanced Interfaces Group.
+
+ You may not use this software, in whole or in part, in support
+ of any commercial product without the express consent of the
+ author.
+
+WWW: http://www.cs.man.ac.uk/~toby/alan/software/
+
+ Software documentation at
+WWW: http://www.cs.man.ac.uk/~toby/alan/software/gpc.html