[gl2ps] 02/07: Add autopkgtest.
Anton Gladky
gladk at moszumanska.debian.org
Fri May 27 16:58:09 UTC 2016
This is an automated email from the git hooks/post-receive script.
gladk pushed a commit to branch master
in repository gl2ps.
commit 9b26219c91fa2395c9df228080acd579354f7c12
Author: Anton Gladky <gladk at debian.org>
Date: Fri May 27 18:53:30 2016 +0200
Add autopkgtest.
---
debian/tests/build1 | 657 +++++++++++++++++++++++++++++++++++++++++++++++++++
debian/tests/build2 | 193 +++++++++++++++
debian/tests/control | 2 +
3 files changed, 852 insertions(+)
diff --git a/debian/tests/build1 b/debian/tests/build1
new file mode 100755
index 0000000..e6461de
--- /dev/null
+++ b/debian/tests/build1
@@ -0,0 +1,657 @@
+#!/bin/sh
+# autopkgtest check: Build a program against libgl2ps-dev
+# (C) 2016 Anton Gladky
+# Author: Anton Gladky <gladk at debian.org>
+
+set -e
+
+WORKDIR=$(mktemp -d)
+trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM
+cd $WORKDIR
+cat <<EOF > gl2psTestSimple.cpp
+/*
+ * GL2PS, an OpenGL to PostScript Printing Library
+ * Copyright (C) 1999-2015 Christophe Geuzaine <geuz at geuz.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of either:
+ *
+ * a) the GNU Library General Public License as published by the Free
+ * Software Foundation, either version 2 of the License, or (at your
+ * option) any later version; or
+ *
+ * b) the GL2PS License as published by Christophe Geuzaine, either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either
+ * the GNU Library General Public License or the GL2PS License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library in the file named "COPYING.LGPL";
+ * if not, write to the Free Software Foundation, Inc., 51 Franklin
+ * Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * You should have received a copy of the GL2PS License with this
+ * library in the file named "COPYING.GL2PS"; if not, I will be glad
+ * to provide one.
+ *
+ * For the latest info about gl2ps and a full list of contributors,
+ * see http://www.geuz.org/gl2ps/.
+ *
+ * Please report all bugs and problems to <gl2ps at geuz.org>.
+ */
+
+/*
+ To compile on Linux:
+ gcc gl2psTest.c gl2ps.c -lglut -lGL -lGLU -lX11 -lm
+
+ To compile on MacOSX:
+ gcc gl2psTest.c gl2ps.c -framework OpenGL -framework GLUT -framework Cocoa
+
+ (To enable file compression you must add "-DHAVE_ZLIB -lz" to the
+ commands above. To enable embedded bitmaps in SVG files you must
+ add "-DHAVE_LIBPNG -DHAVE_ZLIB -lpng -lz".)
+*/
+
+#ifdef _MSC_VER /* MSVC Compiler */
+#pragma comment(linker, "/entry:\"mainCRTStartup\"")
+#endif
+
+#include "gl2ps.h"
+
+#include <string.h>
+#ifdef __APPLE__
+# include <GLUT/glut.h>
+#else
+# include <GL/glut.h>
+#endif
+
+static const char *format_string = "Postscript";
+static float rotation = -58.;
+static GLsizei window_w = 0;
+static GLsizei window_h = 0;
+static GLboolean display_multi = GL_TRUE;
+static GLboolean blend = GL_FALSE;
+static GLboolean teapot = GL_FALSE;
+static const char *pixmap[] = {
+ "****************************************************************",
+ "*..............................................................*",
+ "*..................++++++++++++++++++++++++++..................*",
+ "*.............+++++++++++++++++++++++++++++++++++++............*",
+ "*.......++++++++++++aaaaaaaaaaaaaaaaaaaaaaaa++++++++++++.......*",
+ "*.......++++++aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++++++.......*",
+ "*.......++aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++.......*",
+ "*.......++aaaa++++aa+aaaaaaaa++++aaa++++++aaa+++++aaaa++.......*",
+ "*.......++aaa+aaaa+a+aaaaaaa+aaaa+aa+aaaaa+a+aaaaa+aaa++.......*",
+ "*.......++aa+aaaaaaa+aaaaaaaaaaa+aaa+aaaaa+a+aaaaaaaaa++.......*",
+ "*.......++aa+aaa+++a+aaaaaaaaaa+aaaa++++++aaa+++++aaaa++.......*",
+ "*.......++aa+aaaaa+a+aaaaaaaaa+aaaaa+aaaaaaaaaaaaa+aaa++.......*",
+ "*.......++aaa+aaaa+a+aaaaaaaa+aaaaaa+aaaaaaa+aaaaa+aaa++.......*",
+ "*.......++aaaa+++++a++++++aa++++++aa+aaaaaaaa+++++aaaa++.......*",
+ "*.......++aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++.......*",
+ "*.......++aaaaaaaaa++++++++++++++++++++++++++aaaaaaaaa++.......*",
+ "*.......++aaa+++++++@@@@@@@@@@@+++++++++++++++++++aaaa++.......*",
+ "*.......++++++@@+@@@+@@@++@@@@@+++++++++++++++++++++++++.......*",
+ "*.......++@@@@@+@@@+@@@+@@@@+@@+++++++++++++++++++++++++.......*",
+ "*.......++@@@@+@@@+@@+++++++@@@+++++++++++++++++++++++++.......*",
+ "*.......++@@@@+++++++@@@@@@++@@++#####################++.......*",
+ "*.......++ at +++++@@@@@@@@@@@@@@@++#####################++.......*",
+ "*.......++ at +++@@@@@@@@@@@@@@@@@++#####################++.......*",
+ "*.......++ at ++@@@@@@@+@@+@@@@@@@++#####################++.......*",
+ "*.......++@@@@@+@@@+@@+@@@@@@@@++#####################++.......*",
+ "*.......++@@@@+@@@+@@+@@++++++++++++++++++++++++++++++++.......*",
+ "*.......++@@@@+ at +++++++++@++++ at +@+ at +++++++++++++++++++++.......*",
+ "*.......++@@@@+++@@@@@@@+ at ++@+++ at +@+ at +@+++++++++++++++++.......*",
+ "*.......++ at ++++@@@@@@@@@@+ at +++@+ at +@+++++++++++++++++++++.......*",
+ "*.......++ at +++@@@@@@@@@@+@@@@@@@@@@@@@@+++++++++++++++++.......*",
+ "*.......++ at ++@@@@@@+@@+ at +@@@+++@@@@@@@@+++++++++++++++++.......*",
+ "*.......++@@@@@+@@+@@+@@+@@+++++@@@@@@@+##############++.......*",
+ "*.......++@@@@+@@+@@+@@++@@+ at +++@@@@@+ at +##############++.......*",
+ "*.......++@@@@+ at +++++++@+@@@@+++@@@@++ at +##############++.......*",
+ "*.......++ at ++++++@@@@@@++@@@@+++@@@@++ at +##############++.......*",
+ "*.......++ at +++@@@@@@@@@@+@@@+++++@@@+@@+##############++.......*",
+ "*.......++ at ++@@@@@@@@@@@+ at +++++++++++@@+##############++.......*",
+ "*.......+++++++++++++++++ at +@+++++++++@@+++++++++++++++++.......*",
+ "*.......+++++++++++++++++ at +@+@@@@++++@@+@@@@@@@@@@@@@@++.......*",
+ "*.......+++++++++++++++++@@@+@@@@@+ at +@@+@@@+@@+@@@@@@@++.......*",
+ "*........++++++++++++++++@@@@+@@@++ at ++@+@@+@@+@@@+@@@++........*",
+ "*........++++++++++++++++@@@@@@@@+@@+@@+ at +@@+@@@+@@@@++........*",
+ "*........+++++++++++++++++@@@@@@+@@+@@+ at ++++++++++@@@++........*",
+ "*.........++##############+@@@@@@@@@@++++@@@@@@@@++ at ++.........*",
+ "*.........++###############+@@@@@@@@++++@@@@@@@@@@@@++.........*",
+ "*..........++###############++++++++@@@@@@@+@@+@@@@++..........*",
+ "*..........++##################++@@@@@+@@@+@@+@@+@@++..........*",
+ "*...........++#################++@@@@+@@@+@@+@@+@@++...........*",
+ "*...........++#################++@@@+@@++++++++@@@++...........*",
+ "*............++++++++++++++++++++@@@++++@@@@@@++ at ++............*",
+ "*.............+++++++++++++++++++@@+++@@@@@@@@@@@+.............*",
+ "*.............+++++++++++++++++++ at +++@@@@@@@@@@@++.............*",
+ "*..............++++++++++++++++++ at ++@@@@+@@@@@@++..............*",
+ "*...............+++++++++++++++++@@@+@@+@@+@@@++...............*",
+ "*................++++++++++++++++@@+@@+@@+@@@++................*",
+ "*.................++###########++@@+++++++@@++.................*",
+ "*..................++##########++ at +++@@@@+ at ++..................*",
+ "*...................++#########++ at ++@@@@@@++...................*",
+ "*....................+++#######++ at ++@@@@+++....................*",
+ "*.....................++++#####++@@@@@++++.....................*",
+ "*.......................++++###++@@@++++.......................*",
+ "*.........................++++#++ at ++++.........................*",
+ "*...........................++++++++...........................*",
+ "*.............................++++.............................*",
+ "*..............................................................*",
+ "****************************************************************"};
+
+void triangles()
+{
+ /* two intersecting triangles */
+ glBegin(GL_TRIANGLES);
+
+ glColor3f(1., 0., 0.);
+ glVertex3f(-1., 0.9, 0.);
+ glColor4f(1., 1., 0., 0.1);
+ glVertex3f(-1., 0., 0.);
+ glColor4f(1., 0., 1., 1.0);
+ glVertex3f(1., 0., 0.2);
+
+ glColor3f(0., 1., 0.);
+ glVertex3f(1., 0., 0.);
+ glColor3f(0., 1., 1.);
+ glVertex3f(1., 0.5, 0.);
+ glColor3f(0., 1., 1.);
+ glVertex3f(-1., 0.5, 0.1);
+
+ glEnd();
+}
+
+void extras()
+{
+ glColor3f(1., 0., 0.);
+
+ glPointSize(1.);
+ gl2psPointSize(1.);
+ glBegin(GL_POINTS);
+ glVertex3f(-1., 1.0, 0.);
+ glEnd();
+
+ glPointSize(3.);
+ gl2psPointSize(3.);
+ glBegin(GL_POINTS);
+ glVertex3f(-0.8, 1.0, 0.);
+ glEnd();
+
+ glPointSize(5.);
+ gl2psPointSize(5.);
+ glBegin(GL_POINTS);
+ glVertex3f(-0.6, 1.0, 0.);
+ glEnd();
+
+ glPointSize(7.);
+ gl2psPointSize(7.);
+ glBegin(GL_POINTS);
+ glVertex3f(-0.4, 1.0, 0.);
+ glEnd();
+
+ glLineWidth(1.);
+ gl2psLineWidth(1.);
+ glBegin(GL_LINES);
+ glVertex3f(-0.2, 1.05, 0.);
+ glVertex3f(0.2, 1.05, 0.);
+ glEnd();
+
+ glEnable(GL_LINE_STIPPLE);
+ glLineStipple(1, 0x087F);
+ gl2psEnable(GL2PS_LINE_STIPPLE);
+ glBegin(GL_LINES);
+ glVertex3f(-0.2, 0.95, 0.);
+ glVertex3f(0.2, 0.95, 0.);
+ glEnd();
+ glDisable(GL_LINE_STIPPLE);
+ gl2psDisable(GL2PS_LINE_STIPPLE);
+
+ glLineWidth(3.);
+ gl2psLineWidth(3.);
+ glBegin(GL_LINES);
+ glVertex3f(0.4, 1.05, 0.);
+ glVertex3f(0.8, 1.05, 0.);
+ glEnd();
+
+ glEnable(GL_LINE_STIPPLE);
+ glLineStipple(2, 0x0F0F);
+ /* glLineStipple(1, 0xAAAA); */
+ gl2psEnable(GL2PS_LINE_STIPPLE);
+ glBegin(GL_LINES);
+ glVertex3f(0.4, 0.95, 0.);
+ glVertex3f(0.8, 0.95, 0.);
+ glEnd();
+ glDisable(GL_LINE_STIPPLE);
+ gl2psDisable(GL2PS_LINE_STIPPLE);
+
+ glPointSize(1);
+ gl2psPointSize(1);
+ glLineWidth(1);
+ gl2psLineWidth(1);
+}
+
+void objects()
+{
+ glPushMatrix();
+ glEnable(GL_LIGHTING);
+ glRotatef(rotation, 2., 0., 1.);
+ glColor4d(0.2, 0.2, 0.9, 0.2);
+ if(teapot == GL_TRUE){
+ glutSolidTeapot(0.7);
+ }
+ else{
+ glutSolidTorus(0.3, 0.6, 20, 20);
+ }
+ glDisable(GL_LIGHTING);
+ glPopMatrix();
+}
+
+void printstring(const char *string, float angle)
+{
+ unsigned int i;
+ const char *fonts[] =
+ { "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic",
+ "Helvetica", "Helvetica-Bold", "Helvetica-Oblique", "Helvetica-BoldOblique",
+ "Courier", "Courier-Bold", "Courier-Oblique", "Courier-BoldOblique",
+ "Symbol", "ZapfDingbats" };
+
+ /* call gl2psText before the glut function since glutBitmapCharacter
+ changes the raster position... */
+ gl2psTextOpt(string, fonts[4], 12, GL2PS_TEXT_BL, angle);
+
+ for (i = 0; i < strlen(string); i++)
+ glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, string[i]);
+}
+
+void text()
+{
+ double x = -1.25, y = -0.33, dy = 0.13;
+
+ glColor3f(1., 1., 0.);
+
+ glRasterPos2d(x, y);
+ printstring("Press:", 0.);
+ y -= dy;
+ glRasterPos2d(x, y);
+ printstring(" p: to change the print format (PS, EPS, PDF, ...)", 0.);
+ y -= dy;
+ glRasterPos2d(x, y);
+ printstring(" s: to save the images", 0.);
+ y -= dy;
+ glRasterPos2d(x, y);
+ printstring(" t: to alternate between teapot and torus", 0.);
+ y -= dy;
+ glRasterPos2d(x, y);
+ printstring(" v: to alternate between single and multiple viewport modes", 0.);
+ y -= dy;
+ glRasterPos2d(x, y);
+ printstring(" b: to change the blending mode (transparency)", 0.);
+ y -= dy;
+ glRasterPos2d(x, y);
+ printstring(" q: to quit", 0.);
+ y -= dy;
+ glRasterPos2d(x, y);
+ printstring("Click and move the mouse to rotate the objects", 0.);
+
+ glRasterPos2d(0, 0.75);
+ printstring("rotated!", 45.);
+
+ glRasterPos2d(x, 1.15);
+ printstring(format_string, 0.);
+
+ gl2psSpecial(GL2PS_TEX, "% This should only be printed in LaTeX output!");
+}
+
+void cube()
+{
+ glColor3d (0.0,1.0,0.);
+ glBegin(GL_POLYGON);
+ glVertex3d( 0.5,-0.5,-0.5);
+ glColor4d (0.0,1.0,0.,0.2);
+ glVertex3d( 0.5, 0.5,-0.5);
+ glVertex3d(-0.5, 0.5,-0.5);
+ glColor4d (0.0,1.0,0.,1);
+ glVertex3d(-0.5,-0.5,-0.5);
+ glEnd();
+
+ glColor3d (1.0,0.0,0.);
+ glBegin(GL_POLYGON);
+ glColor4d (1.0,0.0,0.,0.1);
+ glVertex3d( 0.5,-0.5,0.5);
+ glColor4d (1.0,0.5,1.,0.9);
+ glVertex3d( 0.5, 0.5,0.5);
+ glVertex3d(-0.5, 0.5,0.5);
+ glColor4d (1.0,0.5,1.,0.1);
+ glVertex3d(-0.5,-0.5,0.5);
+ glEnd();
+ glLineWidth(4.0);
+ glColor3d (1.0,1.0,0.);
+ glBegin(GL_LINES);
+ glVertex3d( 0.5,-0.5, 0.5);
+ glVertex3d( 0.5,-0.5,-0.5);
+ glVertex3d( 0.5, 0.5, 0.5);
+ glVertex3d( 0.5, 0.5,-0.5);
+ glVertex3d(-0.5, 0.5, 0.5);
+ glVertex3d(-0.5, 0.5,-0.5);
+ glVertex3d(-0.5,-0.5, 0.5);
+ glVertex3d(-0.5,-0.5,-0.5);
+ glEnd();
+}
+
+void image(float x, float y, GLboolean opaque)
+{
+ int w = 64, h = 66, row, col, pos = 0;
+ float *pixels, r = 0., g = 0., b = 0.;
+
+ /* Fill a pixmap (each pixel contains three floats defining an RGB
+ color) */
+ pixels = (opaque == GL_TRUE)
+ ? (float*)malloc(3 * w * h * sizeof(float))
+ : (float*)malloc(4 * w * h * sizeof(float));
+
+ for(row = h-1; row >= 0; row--){
+ for(col = 0; col < w; col++){
+ switch(pixmap[row][col]){
+ case '.' : r = 255.; g = 255.; b = 255.; break;
+ case '+' : r = 0. ; g = 0. ; b = 0. ; break;
+ case '@' : r = 255.; g = 209.; b = 0. ; break;
+ case '#' : r = 255.; g = 0. ; b = 0. ; break;
+ case 'a' : r = 255.; g = 209.; b = 0. ; break;
+ case '*' : r = 0.; g = 0. ; b = 20. ; break;
+ }
+ r /= 255.; g /= 255.; b /= 255.;
+ pixels[pos] = r; pos++;
+ pixels[pos] = g; pos++;
+ pixels[pos] = b; pos++;
+
+ if(opaque)
+ continue;
+
+ switch(pixmap[row][col]){
+ case '.' : pixels[pos] = col / (float)w ; break;
+ case 'a' : pixels[pos] = 1 - col / ((float)w - 7) ; break;
+ default : pixels[pos] = 1. ; break;
+ }
+ pos++;
+ }
+ }
+
+ glRasterPos2f(x, y);
+
+ /* call gl2psDrawPixels first since glDrawPixels can change the
+ raster position */
+ if(opaque){
+ gl2psDrawPixels((GLsizei)w, (GLsizei)h, 0, 0, GL_RGB, GL_FLOAT, pixels);
+ glDrawPixels((GLsizei)w, (GLsizei)h, GL_RGB, GL_FLOAT, pixels);
+ }
+ else{
+ gl2psDrawPixels((GLsizei)w, (GLsizei)h, 0, 0, GL_RGBA, GL_FLOAT, pixels);
+ glDrawPixels((GLsizei)w, (GLsizei)h, GL_RGBA, GL_FLOAT, pixels);
+ }
+ free(pixels);
+}
+
+/* A simple drawing function, using the default viewport */
+void draw_single()
+{
+ glScissor(0, 0, window_w, window_h);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ triangles();
+ extras();
+ objects();
+ text();
+ glFlush();
+}
+
+/* A more complex drawing function, using 2 separate viewports */
+void draw_multi()
+{
+ GLint viewport[4];
+
+ glScissor(0, 0, window_w, window_h);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ /* First viewport with triangles, teapot or torus, etc. */
+ glViewport((GLint)(window_w * 0.05), (GLint)(window_h * 0.525),
+ (GLsizei)(window_w * 0.9), (GLsizei)(window_h * 0.45));
+ glScissor((GLint)(window_w * 0.05), (GLint)(window_h * 0.525),
+ (GLsizei)(window_w * 0.9), (GLsizei)(window_h * 0.45));
+ glClearColor(0.2, 0.2, 0.2, 0.);
+ glGetIntegerv(GL_VIEWPORT, viewport);
+
+ gl2psBeginViewport(viewport);
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glOrtho(-1.3,1.3, -1.3,1.3, -1.3,1.3);
+ glMatrixMode(GL_MODELVIEW);
+
+ objects();
+ triangles();
+ extras();
+ text();
+
+ gl2psEndViewport();
+
+ /* Second viewport with cube, image, etc. */
+ glViewport((GLint)(window_w * 0.05), (GLint)(window_h * 0.025),
+ (GLsizei)(window_w * 0.9), (GLsizei)(window_h * 0.45));
+ glScissor((GLint)(window_w * 0.05), (GLint)(window_h * 0.025),
+ (GLsizei)(window_w * 0.9), (GLsizei)(window_h * 0.45));
+ glClearColor(0.8, 0.8, 0.8, 0.);
+ glGetIntegerv(GL_VIEWPORT, viewport);
+
+ gl2psBeginViewport(viewport);
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glOrtho(-1.3,1.3, -1.3,1.3, -1.3,1.3);
+ glMatrixMode(GL_MODELVIEW);
+
+ glPushMatrix();
+ glRotatef(rotation, 1., 1., 1.);
+ image(-0.8, -0.3, GL_TRUE);
+ cube();
+ extras();
+ image(-0.8, 0.4, GL_FALSE);
+ glPopMatrix();
+
+ gl2psEndViewport();
+
+ glClearColor(0.5, 0.5, 0.5, 0.);
+ glFlush();
+}
+
+void display()
+{
+ GLfloat spec[4] = {0.6, 0.6, 0.6, 1.0};
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_SCISSOR_TEST);
+ glEnable(GL_COLOR_MATERIAL);
+ glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec);
+ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 60);
+ if(blend){
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ else{
+ glDisable(GL_BLEND);
+ }
+ if(display_multi == GL_TRUE){
+ draw_multi();
+ }
+ else{
+ draw_single();
+ }
+}
+
+void reshape(int w, int h)
+{
+ window_w = w;
+ window_h = h;
+
+ glViewport(0, 0, (GLsizei)window_w, (GLsizei)window_h);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glOrtho(-1.3,1.3, -1.3,1.3, -1.3,1.3);
+ glMatrixMode(GL_MODELVIEW);
+
+ glClearColor(0.5, 0.5, 0.5, 0.);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+}
+
+void writefile(int format, int sort, int options, int nbcol,
+ const char *filename, const char *extension)
+{
+ FILE *fp;
+ char file[256];
+ int state = GL2PS_OVERFLOW, buffsize = 0;
+ GLint viewport[4];
+
+ strcpy(file, filename);
+ strcat(file, ".");
+ strcat(file, extension);
+
+ viewport[0] = 0;
+ viewport[1] = 0;
+ viewport[2] = window_w;
+ viewport[3] = window_h;
+
+ fp = fopen(file, "wb");
+
+ if(!fp){
+ printf("Unable to open file %s for writing\n", file);
+ exit(1);
+ }
+
+ printf("Saving image to file %s... ", file);
+ fflush(stdout);
+
+ while(state == GL2PS_OVERFLOW){
+ buffsize += 1024*1024;
+ gl2psBeginPage(file, "gl2psTest", viewport, format, sort, options,
+ GL_RGBA, 0, NULL, nbcol, nbcol, nbcol,
+ buffsize, fp, file);
+ display();
+ state = gl2psEndPage();
+ }
+
+ fclose(fp);
+
+ printf("Done!\n");
+ fflush(stdout);
+}
+
+void keyboard(unsigned char key, int x, int y)
+{
+ int opt;
+ char ext[32];
+ static int format = GL2PS_PS;
+
+ switch(key){
+ case 27:
+ case 'q':
+ exit(0);
+ break;
+ case 't':
+ teapot = (teapot) ? GL_FALSE : GL_TRUE;
+ display();
+ break;
+ case 'p':
+ if (format == GL2PS_PS) format = GL2PS_EPS;
+ else if(format == GL2PS_EPS) format = GL2PS_TEX;
+ else if(format == GL2PS_TEX) format = GL2PS_PDF;
+ else if(format == GL2PS_PDF) format = GL2PS_SVG;
+ else if(format == GL2PS_SVG) format = GL2PS_PGF;
+ else format = GL2PS_PS;
+ format_string = gl2psGetFormatDescription(format);
+ display();
+ break;
+ case 'b':
+ blend = !blend;
+ display();
+ break;
+ case 'v':
+ display_multi = display_multi ? GL_FALSE : GL_TRUE;
+ reshape(window_w, window_h);
+ display();
+ break;
+ case 's':
+ strcpy(ext, gl2psGetFileExtension(format));
+
+ opt = GL2PS_DRAW_BACKGROUND;
+ writefile(format, GL2PS_SIMPLE_SORT, opt, 0, "outSimple", ext);
+
+ opt = GL2PS_DRAW_BACKGROUND | GL2PS_OCCLUSION_CULL;
+ writefile(format, GL2PS_SIMPLE_SORT, opt, 0, "outSimpleCulled", ext);
+
+ opt = GL2PS_DRAW_BACKGROUND | GL2PS_NO_PS3_SHADING | GL2PS_TIGHT_BOUNDING_BOX;
+ writefile(format, GL2PS_SIMPLE_SORT, opt, 2, "outSimpleShading2", ext);
+ writefile(format, GL2PS_SIMPLE_SORT, opt, 8, "outSimpleShading8", ext);
+ writefile(format, GL2PS_SIMPLE_SORT, opt, 16, "outSimpleShading16", ext);
+
+ opt = GL2PS_NO_TEXT;
+ writefile(format, GL2PS_SIMPLE_SORT, opt, 0, "outSimpleNoText", ext);
+
+ opt = GL2PS_DRAW_BACKGROUND | GL2PS_BEST_ROOT;
+ writefile(format, GL2PS_BSP_SORT, opt, 0, "outBsp", ext);
+
+ opt = GL2PS_DRAW_BACKGROUND | GL2PS_OCCLUSION_CULL | GL2PS_BEST_ROOT;
+ writefile(format, GL2PS_BSP_SORT, opt, 0, "outBspCulled", ext);
+
+#ifdef GL2PS_HAVE_ZLIB
+ opt = GL2PS_DRAW_BACKGROUND | GL2PS_OCCLUSION_CULL | GL2PS_BEST_ROOT | GL2PS_COMPRESS;
+ if(format == GL2PS_PS || format == GL2PS_EPS) strcat(ext, ".gz");
+ else if(format == GL2PS_SVG) strcat(ext, "z");
+ writefile(format, GL2PS_BSP_SORT, opt, 0, "outBspCulledCompressed", ext);
+#endif
+
+ printf("GL2PS %d.%d.%d%s done with all images\n", GL2PS_MAJOR_VERSION,
+ GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION);
+ break;
+ }
+}
+
+void motion(int x, int y)
+{
+ rotation += 10.;
+ display();
+}
+
+int main(int argc, char **argv)
+{
+ glutInit(&argc, argv);
+ glutInitDisplayMode(GLUT_SINGLE | GLUT_DEPTH);
+ glutInitWindowSize(400, 600);
+ glutInitWindowPosition(100, 100);
+ glutCreateWindow(argv[0]);
+ glutDisplayFunc(display);
+ glutReshapeFunc(reshape);
+ glutKeyboardFunc(keyboard);
+ glutMotionFunc(motion);
+ glutMainLoop();
+ return 0;
+}
+
+
+EOF
+
+arch_triplet="$(gcc -print-multiarch)"
+
+g++ -lgl2ps -lGL -lglut -fPIC -o gl2psTestSimple gl2psTestSimple.cpp
+
+echo "build: OK"
+[ -x gl2psTestSimple ]
+
+ls -ln
diff --git a/debian/tests/build2 b/debian/tests/build2
new file mode 100755
index 0000000..848a617
--- /dev/null
+++ b/debian/tests/build2
@@ -0,0 +1,193 @@
+#!/bin/sh
+# autopkgtest check: Build a program against libgl2ps-dev
+# (C) 2016 Anton Gladky
+# Author: Anton Gladky <gladk at debian.org>
+
+set -e
+
+WORKDIR=$(mktemp -d)
+trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM
+cd $WORKDIR
+cat <<EOF > gl2psTestSimple.cpp
+/*
+ * GL2PS, an OpenGL to PostScript Printing Library
+ * Copyright (C) 1999-2015 Christophe Geuzaine <geuz at geuz.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of either:
+ *
+ * a) the GNU Library General Public License as published by the Free
+ * Software Foundation, either version 2 of the License, or (at your
+ * option) any later version; or
+ *
+ * b) the GL2PS License as published by Christophe Geuzaine, either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either
+ * the GNU Library General Public License or the GL2PS License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library in the file named "COPYING.LGPL";
+ * if not, write to the Free Software Foundation, Inc., 51 Franklin
+ * Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * You should have received a copy of the GL2PS License with this
+ * library in the file named "COPYING.GL2PS"; if not, I will be glad
+ * to provide one.
+ *
+ * For the latest info about gl2ps and a full list of contributors,
+ * see http://www.geuz.org/gl2ps/.
+ *
+ * Please report all bugs and problems to <gl2ps at geuz.org>.
+ */
+
+/*
+ To compile on Linux:
+ gcc gl2psTestSimple.c gl2ps.c -lglut -lGL -lGLU -lX11 -lm
+
+ To compile on MacOSX:
+ gcc gl2psTestSimple.c gl2ps.c -framework OpenGL -framework GLUT -framework Cocoa
+*/
+
+#ifdef __APPLE__
+# include <GLUT/glut.h>
+#else
+# include <GL/glut.h>
+#endif
+
+#include <string.h>
+#include "gl2ps.h"
+
+static void display(void)
+{
+ unsigned int i;
+ unsigned int N = 50;
+ const char *help = "Press 's' to save image or 'q' to quit";
+
+ glClearColor(0.3, 0.5, 0.8, 0.);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ /* draw a smooth-shaded torus */
+ glPushMatrix();
+ glRotatef(-60., 2., 0., 1.);
+ glEnable(GL_LIGHTING);
+ glutSolidTorus(0.3, 0.6, 30, 30);
+ glDisable(GL_LIGHTING);
+ glPopMatrix();
+
+
+ /* draw three triangles on the same zplane and use polygon offset
+ to order the layers: the grey triangle should be drawn on the
+ middle layer */
+ glEnable(GL_POLYGON_OFFSET_FILL);
+ glPolygonOffset(1.0, 1.0);
+ gl2psEnable(GL2PS_POLYGON_OFFSET_FILL);
+ glColor3f(0.,0.,0.);
+ glBegin(GL_TRIANGLES);
+ glVertex3f(0.6, 0.8, 0);
+ glVertex3f(0.8, 0.8, 0);
+ glVertex3f(0.7, 0.92, 0);
+ glEnd();
+
+ glPolygonOffset(2.0, 2.0);
+ gl2psEnable(GL2PS_POLYGON_OFFSET_FILL);
+ glColor3f(1.,1.,1.);
+ glBegin(GL_TRIANGLES);
+ glVertex3f(0.7, 0.8, 0);
+ glVertex3f(0.9, 0.8, 0);
+ glVertex3f(0.8, 0.92, 0);
+ glEnd();
+
+ glPolygonOffset(1.5, 1.5);
+ gl2psEnable(GL2PS_POLYGON_OFFSET_FILL);
+ glColor3f(0.5,0.5,0.5);
+ glBegin(GL_TRIANGLES);
+ glVertex3f(0.65, 0.86, 0);
+ glVertex3f(0.85, 0.86, 0);
+ glVertex3f(0.75, 0.98, 0);
+ glEnd();
+
+ glDisable(GL_POLYGON_OFFSET_FILL);
+ gl2psDisable(GL2PS_POLYGON_OFFSET_FILL);
+
+ glColor3f(0.1,0.1,0.1);
+
+ /* draw a stippled line with many small segments (this tests the
+ ability of gl2ps to render lines using as few strokes as
+ possible) */
+ glEnable(GL_LINE_STIPPLE);
+ glLineStipple(1, 0x087F);
+ gl2psEnable(GL2PS_LINE_STIPPLE);
+ glBegin(GL_LINE_STRIP);
+ for(i = 0; i < N; i++)
+ glVertex3f(-0.75 + 1.5 * (double)i/(double)(N - 1), 0.75, -0.9);
+ glEnd();
+ glDisable(GL_LINE_STIPPLE);
+ gl2psDisable(GL2PS_LINE_STIPPLE);
+
+ /* draw a text string */
+ glRasterPos2d(-0.9,-0.9);
+ gl2psText(help, "Times-Roman", 24);
+ for (i = 0; i < strlen(help); i++)
+ glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, help[i]);
+
+ glFlush();
+}
+
+static void keyboard(unsigned char key, int x, int y)
+{
+ FILE *fp;
+ int state = GL2PS_OVERFLOW, buffsize = 0;
+
+ (void) x; (void) y; /* not used */
+ key = 'q';
+ fp = fopen("out.eps", "wb");
+ printf("Writing 'out.eps'... ");
+ while(state == GL2PS_OVERFLOW){
+ buffsize += 1024*1024;
+ gl2psBeginPage("test", "gl2psTestSimple", NULL, GL2PS_EPS, GL2PS_SIMPLE_SORT,
+ GL2PS_DRAW_BACKGROUND | GL2PS_USE_CURRENT_VIEWPORT,
+ GL_RGBA, 0, NULL, 0, 0, 0, buffsize, fp, "out.eps");
+ display();
+ state = gl2psEndPage();
+ }
+ fclose(fp);
+ printf("Done!\n");
+
+}
+
+int main(int argc, char **argv)
+{
+ GLfloat pos[4] = {1., 1., -1., 0.};
+
+ glutInit(&argc, argv);
+ glutInitDisplayMode(GLUT_DEPTH);
+ glutInitWindowSize(400, 400);
+ glutInitWindowPosition(100, 100);
+ glutCreateWindow(argv[0]);
+
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_LIGHT0);
+ glLightfv(GL_LIGHT0, GL_POSITION, pos);
+
+ glutDisplayFunc(display);
+ glutKeyboardFunc(keyboard);
+ glutMainLoop();
+ return 0;
+}
+
+EOF
+
+arch_triplet="$(gcc -print-multiarch)"
+
+g++ -lgl2ps -lGL -lglut -fPIC -o gl2psTestSimple gl2psTestSimple.cpp
+
+echo "build: OK"
+[ -x gl2psTestSimple ]
+
+ls -ln
diff --git a/debian/tests/control b/debian/tests/control
new file mode 100644
index 0000000..ea720c0
--- /dev/null
+++ b/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: build1 build2
+Depends: libgl2ps-dev build-essential
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/gl2ps.git
More information about the debian-science-commits
mailing list