Index: configh.in
===================================================================
--- configh.in	(revision 10206)
+++ configh.in	(working copy)
@@ -321,5 +321,10 @@
 #undef HAVE_DLSYM
 
 /*
+ * Did the user request no printing?
+ */
+#undef FL_NO_PRINTING
+
+/*
  * End of "$Id$".
  */
Index: configure.in
===================================================================
--- configure.in	(revision 10206)
+++ configure.in	(working copy)
@@ -341,6 +343,8 @@
 
 AC_ARG_ENABLE(threads, [  --enable-threads        enable multi-threading support (default=yes)])
 
+AC_ARG_ENABLE(printing, [  --enable-printing       enable printing support (default=yes)])
+
 AC_ARG_WITH(optim, [  --with-optim="flags"    use custom optimization flags])
 
 AC_ARG_WITH(archflags, [  --with-archflags="flags"
@@ -354,6 +358,10 @@
 	;;
 esac
 
+if test "x$enable_printing" = "xno"; then
+	AC_DEFINE(FL_NO_PRINTING)
+fi
+
 dnl Find commands...
 AC_PROG_CC
 AC_PROG_CXX
@@ -1394,6 +1426,12 @@
     echo "        Threads: YES"
 fi
 
+if test x$enable_printing = xno; then
+    echo "       Printing: NO"
+else
+    echo "       Printing: YES"
+fi
+
 dnl Write all of the files...
 AC_CONFIG_HEADER(config.h:configh.in)
 AC_OUTPUT(makeinclude fltk.list fltk-config fltk.spec FL/Makefile)
Index: src/Fl_PostScript_dummy.cxx
===================================================================
--- src/Fl_PostScript_dummy.cxx	(revision 0)
+++ src/Fl_PostScript_dummy.cxx	(working copy)
@@ -0,0 +1,337 @@
+//
+// "$Id: Fl_PostScript.cxx 10006 2013-10-23 09:24:30Z manolo $"
+//
+// PostScript device support for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2010-2011 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file.  If this
+// file is missing or damaged, see the license at:
+//
+//     http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems to:
+//
+//     http://www.fltk.org/str.php
+//
+
+#include <config.h>
+#include <stdio.h>
+#include <FL/Fl_PostScript.H>
+
+const char *Fl_PostScript_Graphics_Driver::class_id = "Fl_PostScript_Graphics_Driver_dummy";
+const char *Fl_PostScript_File_Device::class_id = "Fl_PostScript_File_Device";
+/** \brief Label of the PostScript file chooser window */
+const char *Fl_PostScript_File_Device::file_chooser_title = "Select a .ps file";
+
+/**
+ @brief The constructor.
+ */
+Fl_PostScript_Graphics_Driver::Fl_PostScript_Graphics_Driver(void)
+{
+  fprintf(stderr, "Printing support disabled in build config.\n");
+}
+
+/** \brief The destructor. */
+Fl_PostScript_Graphics_Driver::~Fl_PostScript_Graphics_Driver() {
+}
+
+/**
+ @brief The constructor.
+ */
+Fl_PostScript_File_Device::Fl_PostScript_File_Device(void)
+{
+}
+
+/**
+ \brief Returns the PostScript driver of this drawing surface.
+ */
+Fl_PostScript_Graphics_Driver *Fl_PostScript_File_Device::driver()
+{
+  return (Fl_PostScript_Graphics_Driver*)Fl_Surface_Device::driver();
+}
+
+
+/**
+ @brief Begins the session where all graphics requests will go to a local PostScript file.
+ *
+ Opens a file dialog entitled with Fl_PostScript_File_Device::file_chooser_title to select an output PostScript file.
+ @param pagecount The total number of pages to be created. Use 0 if this number is unknown when this function is called.
+ @param format Desired page format.
+ @param layout Desired page layout.
+ @return 0 if OK, 1 if user cancelled the file dialog, 2 if fopen failed on user-selected output file.
+ */
+int Fl_PostScript_File_Device::start_job (int pagecount, enum Fl_Paged_Device::Page_Format format, 
+					  enum Fl_Paged_Device::Page_Layout layout)
+{
+  return 0;
+}
+
+/**
+ @brief Begins the session where all graphics requests will go to FILE pointer.
+ *
+ @param ps_output A writable FILE pointer that will receive PostScript output and that should not be closed
+ until after end_job() has been called.
+ @param pagecount The total number of pages to be created. Use 0 if this number is unknown when this function is called.
+ @param format Desired page format.
+ @param layout Desired page layout.
+ @return always 0.
+ */
+int Fl_PostScript_File_Device::start_job (FILE *ps_output, int pagecount, 
+    enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout)
+{
+  return 0;
+}
+
+/**
+ @brief The destructor.
+ */
+Fl_PostScript_File_Device::~Fl_PostScript_File_Device() {
+}
+
+int Fl_PostScript_Graphics_Driver::start_postscript (int pagecount, 
+    enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout)
+//returns 0 iff OK
+{
+  return 0;
+}
+
+void Fl_PostScript_Graphics_Driver::recover(){
+}
+
+void Fl_PostScript_Graphics_Driver::reset(){
+}
+
+void Fl_PostScript_Graphics_Driver::page_policy(int p){
+}
+
+// //////////////////// paging //////////////////////////////////////////
+
+void Fl_PostScript_Graphics_Driver::page(double pw, double ph, int media) {
+}
+
+void Fl_PostScript_Graphics_Driver::page(int format){
+}
+
+void Fl_PostScript_Graphics_Driver::rect(int x, int y, int w, int h) {
+}
+
+void Fl_PostScript_Graphics_Driver::rectf(int x, int y, int w, int h) {
+}
+
+void Fl_PostScript_Graphics_Driver::line(int x1, int y1, int x2, int y2) {
+}
+
+void Fl_PostScript_Graphics_Driver::line(int x0, int y0, int x1, int y1, int x2, int y2) {
+}
+
+void Fl_PostScript_Graphics_Driver::xyline(int x, int y, int x1, int y2, int x3){
+}
+
+void Fl_PostScript_Graphics_Driver::xyline(int x, int y, int x1, int y2){
+}
+
+void Fl_PostScript_Graphics_Driver::xyline(int x, int y, int x1){
+}
+
+void Fl_PostScript_Graphics_Driver::yxline(int x, int y, int y1, int x2, int y3){
+}
+
+void Fl_PostScript_Graphics_Driver::yxline(int x, int y, int y1, int x2){
+}
+
+void Fl_PostScript_Graphics_Driver::yxline(int x, int y, int y1){
+}
+
+void Fl_PostScript_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2) {
+}
+
+void Fl_PostScript_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
+}
+
+void Fl_PostScript_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2) {
+}
+
+void Fl_PostScript_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
+}
+
+void Fl_PostScript_Graphics_Driver::point(int x, int y){
+}
+
+void Fl_PostScript_Graphics_Driver::line_style(int style, int width, char* dashes){
+}
+
+void Fl_PostScript_Graphics_Driver::font(int f, int s) {
+}
+
+double Fl_PostScript_Graphics_Driver::width(const char *s, int n) {
+  return Fl_Display_Device::display_device()->driver()->width(s, n);
+}
+
+double Fl_PostScript_Graphics_Driver::width(unsigned u) {
+  return Fl_Display_Device::display_device()->driver()->width(u);
+}
+
+int Fl_PostScript_Graphics_Driver::height() {
+  return Fl_Display_Device::display_device()->driver()->height();
+}
+
+int Fl_PostScript_Graphics_Driver::descent() {
+  return Fl_Display_Device::display_device()->driver()->descent();
+}
+
+void Fl_PostScript_Graphics_Driver::text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h) {
+}
+
+
+void Fl_PostScript_Graphics_Driver::color(Fl_Color c) {
+}
+
+void Fl_PostScript_Graphics_Driver::color(unsigned char r, unsigned char g, unsigned char b) {
+}
+
+void Fl_PostScript_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y)
+{
+}
+
+// outputs in PostScript a UTF8 string using the same width in points as on display
+void Fl_PostScript_Graphics_Driver::transformed_draw(const char* str, int n, double x, double y) {
+}
+
+void Fl_PostScript_Graphics_Driver::rtl_draw(const char* str, int n, int x, int y) {
+}
+
+void Fl_PostScript_Graphics_Driver::concat(){
+}
+
+void Fl_PostScript_Graphics_Driver::reconcat(){
+}
+
+/////////////////  transformed (double) drawings ////////////////////////////////
+
+
+void Fl_PostScript_Graphics_Driver::begin_points(){
+}
+
+void Fl_PostScript_Graphics_Driver::begin_line(){
+}
+
+void Fl_PostScript_Graphics_Driver::begin_loop(){
+}
+
+void Fl_PostScript_Graphics_Driver::begin_polygon(){
+}
+
+void Fl_PostScript_Graphics_Driver::vertex(double x, double y){
+}
+
+void Fl_PostScript_Graphics_Driver::curve(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3){
+}
+
+
+void Fl_PostScript_Graphics_Driver::circle(double x, double y, double r){
+}
+
+void Fl_PostScript_Graphics_Driver::arc(double x, double y, double r, double start, double a){
+}
+
+void Fl_PostScript_Graphics_Driver::arc(int x, int y, int w, int h, double a1, double a2) {
+}
+
+void Fl_PostScript_Graphics_Driver::pie(int x, int y, int w, int h, double a1, double a2) {
+}
+
+void Fl_PostScript_Graphics_Driver::end_points(){
+}
+
+void Fl_PostScript_Graphics_Driver::end_line(){
+}
+
+void Fl_PostScript_Graphics_Driver::end_loop(){
+}
+
+void Fl_PostScript_Graphics_Driver::end_polygon(){
+}
+
+void Fl_PostScript_Graphics_Driver::transformed_vertex(double x, double y){
+}
+
+/////////////////////////////   Clipping /////////////////////////////////////////////
+
+void Fl_PostScript_Graphics_Driver::push_clip(int x, int y, int w, int h) {
+}
+
+void Fl_PostScript_Graphics_Driver::push_no_clip() {
+}
+
+void Fl_PostScript_Graphics_Driver::pop_clip() {
+}
+
+int Fl_PostScript_Graphics_Driver::clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H){
+  return 0;
+}
+
+int Fl_PostScript_Graphics_Driver::not_clipped(int x, int y, int w, int h){
+  return 0;
+}
+
+void Fl_PostScript_File_Device::margins(int *left, int *top, int *right, int *bottom) // to implement
+{
+}
+
+int Fl_PostScript_File_Device::printable_rect(int *w, int *h)
+//returns 0 iff OK
+{
+  return 0;
+}
+
+void Fl_PostScript_File_Device::origin(int *x, int *y)
+{
+}
+
+void Fl_PostScript_File_Device::origin(int x, int y)
+{
+}
+
+void Fl_PostScript_File_Device::scale (float s_x, float s_y)
+{
+}
+
+void Fl_PostScript_File_Device::rotate (float rot_angle)
+{
+}
+
+void Fl_PostScript_File_Device::translate(int x, int y)
+{
+}
+
+void Fl_PostScript_File_Device::untranslate(void)
+{
+}
+
+int Fl_PostScript_File_Device::start_page (void)
+{
+  return 0;
+}
+
+int Fl_PostScript_File_Device::end_page (void)
+{
+  return 0;
+}
+
+void Fl_PostScript_File_Device::end_job (void)
+// finishes PostScript & closes file
+{
+}
+
+#if ! (defined(__APPLE__) || defined(WIN32) )
+int Fl_PostScript_Printer::start_job(int pages, int *firstpage, int *lastpage) {
+    return 1;
+}
+
+#endif // ! (defined(__APPLE__) || defined(WIN32) )
+
+//
+// End of "$Id: Fl_PostScript.cxx 10006 2013-10-23 09:24:30Z manolo $".
+//
Index: src/Fl_Printer.cxx
===================================================================
--- src/Fl_Printer.cxx	(revision 10206)
+++ src/Fl_Printer.cxx	(working copy)
@@ -17,6 +17,8 @@
 //     http://www.fltk.org/str.php
 //
 
+#include "config.h"
+
 #include <FL/Fl_Printer.H>
 
 #ifdef __APPLE__
@@ -25,7 +27,11 @@
 #include "Fl_GDI_Printer.cxx"
 #endif
 
+#ifdef FL_NO_PRINTING
+#include "Fl_PostScript_dummy.cxx"
+#else
 #include "Fl_PostScript.cxx"
+#endif
 
 // print dialog customization strings
 /** [this text may be customized at run-time] */
