You can subscribe to this list here.
| 2003 | Jan | Feb (4) | Mar (5) | Apr | May (5) | Jun (30) | Jul (2) | Aug (18) | Sep (14) | Oct (7) | Nov (21) | Dec (44) | 
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 | Jan (63) | Feb (94) | Mar (54) | Apr (39) | May (34) | Jun (25) | Jul (10) | Aug (33) | Sep (16) | Oct (62) | Nov (12) | Dec (2) | 
| 2005 | Jan (71) | Feb (8) | Mar (50) | Apr | May (2) | Jun (12) | Jul (19) | Aug (8) | Sep (3) | Oct (2) | Nov | Dec (8) | 
| 2006 | Jan (10) | Feb (1) | Mar (301) | Apr (232) | May (26) | Jun (20) | Jul (26) | Aug (79) | Sep (92) | Oct (174) | Nov (17) | Dec (93) | 
| 2007 | Jan (27) | Feb (179) | Mar (37) | Apr (81) | May (20) | Jun (5) | Jul | Aug (40) | Sep (68) | Oct (8) | Nov (47) | Dec (34) | 
| 2008 | Jan (154) | Feb (15) | Mar (5) | Apr (21) | May (4) | Jun (1) | Jul (4) | Aug (6) | Sep (8) | Oct (9) | Nov (35) | Dec (50) | 
| 2009 | Jan (8) | Feb (10) | Mar (6) | Apr (9) | May (7) | Jun (40) | Jul (7) | Aug (5) | Sep (2) | Oct (16) | Nov (42) | Dec (5) | 
| 2010 | Jan (3) | Feb (15) | Mar (32) | Apr (18) | May (6) | Jun (9) | Jul | Aug (11) | Sep (16) | Oct | Nov (4) | Dec (35) | 
| 2011 | Jan (24) | Feb (6) | Mar (27) | Apr (119) | May (72) | Jun (20) | Jul (31) | Aug (88) | Sep (86) | Oct (14) | Nov (11) | Dec (30) | 
| 2012 | Jan (4) | Feb (3) | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | 
| 2017 | Jan | Feb | Mar (1) | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | 
| 
      
      
      From: <gi...@gp...> - 2010-03-11 23:50:33
      
     | 
| The branch, master has been updated
       via  be80f0c5771c91dc2795f5832af8fb2013cb3992 (commit)
      from  1d674bcfe2388533001b7789d348ac5fcfa1b788 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 data/pcb.desktop.in |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
=================
 Commit Messages
=================
commit be80f0c5771c91dc2795f5832af8fb2013cb3992
Author: Dan McMahill <da...@mc...>
Commit: Peter Clifton <pc...@ca...>
    Revert "As silly as it seems to group any sort of scientific or EDA"
    
    I've pushed really hard to sort this nonsense out, and this patch is
    not in my opinion suitable for applcation. gEDA, gerbv and PCB all
    deliberately omit the Education category.. this is not where we need
    to fix this issue.
    
    I strongly object to putting bogus categories into our apps.
    If Debian want to patch these in, let them.
    
    This reverts commit b402a144e19225f0648189bca6fbfad95d046047.
:100644 100644 bc61016... 61091b4... M	data/pcb.desktop.in
=========
 Changes
=========
commit be80f0c5771c91dc2795f5832af8fb2013cb3992
Author: Dan McMahill <da...@mc...>
Commit: Peter Clifton <pc...@ca...>
    Revert "As silly as it seems to group any sort of scientific or EDA"
    
    I've pushed really hard to sort this nonsense out, and this patch is
    not in my opinion suitable for applcation. gEDA, gerbv and PCB all
    deliberately omit the Education category.. this is not where we need
    to fix this issue.
    
    I strongly object to putting bogus categories into our apps.
    If Debian want to patch these in, let them.
    
    This reverts commit b402a144e19225f0648189bca6fbfad95d046047.
diff --git a/data/pcb.desktop.in b/data/pcb.desktop.in
index bc61016..61091b4 100644
--- a/data/pcb.desktop.in
+++ b/data/pcb.desktop.in
@@ -7,4 +7,4 @@ Type=Application
 Exec=pcb %f
 Icon=pcb
 MimeType=application/x-pcb-layout;application/x-pcb-footprint;
-Categories=Education;Science;Engineering;Electronics;
+Categories=Engineering;Electronics;
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-11 13:15:55
      
     | 
| The branch, master has been updated
       via  1d674bcfe2388533001b7789d348ac5fcfa1b788 (commit)
      from  b402a144e19225f0648189bca6fbfad95d046047 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/hid/ps/ps.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
=================
 Commit Messages
=================
commit 1d674bcfe2388533001b7789d348ac5fcfa1b788
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Fix an obvious bug in the previous commit.  Caught by harry.
:100644 100644 d680903... f21ce84... M	src/hid/ps/ps.c
=========
 Changes
=========
commit 1d674bcfe2388533001b7789d348ac5fcfa1b788
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Fix an obvious bug in the previous commit.  Caught by harry.
diff --git a/src/hid/ps/ps.c b/src/hid/ps/ps.c
index d680903..f21ce84 100644
--- a/src/hid/ps/ps.c
+++ b/src/hid/ps/ps.c
@@ -1124,13 +1124,13 @@ ps_fill_rect (hidGC gc, int x1, int y1, int x2, int y2)
   if (x1 > x2)
     {
       int t = x1;
-      x2 = x1;
+      x1 = x2;
       x2 = t;
     }
   if (y1 > y2)
     {
       int t = y1;
-      y2 = y1;
+      y1 = y2;
       y2 = t;
     }
 #if 0
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-11 12:21:36
      
     | 
| The branch, master has been updated
       via  b402a144e19225f0648189bca6fbfad95d046047 (commit)
       via  175810a3743aba5d1f34b8630e2b5edb472c1841 (commit)
      from  f3e5290c8a883a103a3931767bdc47d9f5181997 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 data/pcb.desktop.in |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)
=================
 Commit Messages
=================
commit b402a144e19225f0648189bca6fbfad95d046047
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    As silly as it seems to group any sort of scientific or EDA
    software under "Education", this appears to be the standard
    documented by http://standards.freedesktop.org/menu-spec/1.0/apa.html
    Noted in patch #2889228 by Ahmed El-Mahmoudy.
:100644 100644 61091b4... bc61016... M	data/pcb.desktop.in
commit 175810a3743aba5d1f34b8630e2b5edb472c1841
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    "Encoding" is deprecated.  http://standards.freedesktop.org/desktop-entry-spec/1.0/apc.html
    Noted in patch #2889228
:100644 100644 967ba82... 61091b4... M	data/pcb.desktop.in
=========
 Changes
=========
commit b402a144e19225f0648189bca6fbfad95d046047
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    As silly as it seems to group any sort of scientific or EDA
    software under "Education", this appears to be the standard
    documented by http://standards.freedesktop.org/menu-spec/1.0/apa.html
    Noted in patch #2889228 by Ahmed El-Mahmoudy.
diff --git a/data/pcb.desktop.in b/data/pcb.desktop.in
index 61091b4..bc61016 100644
--- a/data/pcb.desktop.in
+++ b/data/pcb.desktop.in
@@ -7,4 +7,4 @@ Type=Application
 Exec=pcb %f
 Icon=pcb
 MimeType=application/x-pcb-layout;application/x-pcb-footprint;
-Categories=Engineering;Electronics;
+Categories=Education;Science;Engineering;Electronics;
commit 175810a3743aba5d1f34b8630e2b5edb472c1841
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    "Encoding" is deprecated.  http://standards.freedesktop.org/desktop-entry-spec/1.0/apc.html
    Noted in patch #2889228
diff --git a/data/pcb.desktop.in b/data/pcb.desktop.in
index 967ba82..61091b4 100644
--- a/data/pcb.desktop.in
+++ b/data/pcb.desktop.in
@@ -1,6 +1,5 @@
 [Desktop Entry]
 Version=1.0
-Encoding=UTF-8
 _Name=PCB Designer
 _GenericName=PCB Design
 _Comment=Create and edit printed circuit board designs
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-11 03:38:16
      
     | 
| The branch, master has been updated
       via  f3e5290c8a883a103a3931767bdc47d9f5181997 (commit)
       via  1590f4c65c15e6a3ba27079866ea8d14252ce7bf (commit)
       via  e2e741ab7589bd3e6c925fc9b2a81c7c2121f820 (commit)
      from  e1d647498921eaca00b2f6930fe1ae9af0c1aab1 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 configure.ac    |    1 +
 src/Makefile.am |   11 ++++++++++-
 2 files changed, 11 insertions(+), 1 deletions(-)
=================
 Commit Messages
=================
commit f3e5290c8a883a103a3931767bdc47d9f5181997
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    It is gcode/hid.conf not gcode/gcode.conf that needs to be distributed.
    Also put this file in the correct sorted location.
:100644 100644 561a6f4... e719268... M	src/Makefile.am
commit 1590f4c65c15e6a3ba27079866ea8d14252ce7bf
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Add missing AC_PROG_MKDIR_P check.
:100644 100644 43ebfaf... f0e19bd... M	configure.ac
commit e2e741ab7589bd3e6c925fc9b2a81c7c2121f820
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Fix building outside of the source tree with dependency tracking
    disabled.  In that case some directories need to be manually
    created.  Fixes bug #2889226.
:100644 100644 a5441d6... 561a6f4... M	src/Makefile.am
=========
 Changes
=========
commit f3e5290c8a883a103a3931767bdc47d9f5181997
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    It is gcode/hid.conf not gcode/gcode.conf that needs to be distributed.
    Also put this file in the correct sorted location.
diff --git a/src/Makefile.am b/src/Makefile.am
index 561a6f4..e719268 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -200,6 +200,7 @@ EXTRA_DIST= \
 	default_font \
 	$(srcdir)/hid/batch/hid.conf \
 	$(srcdir)/hid/bom/hid.conf \
+	$(srcdir)/hid/gcode/hid.conf \
 	$(srcdir)/hid/gerber/hid.conf \
 	$(srcdir)/hid/gtk/gui-icons-misc.data \
 	$(srcdir)/hid/gtk/gui-icons-mode-buttons.data \
@@ -208,7 +209,6 @@ EXTRA_DIST= \
 	$(srcdir)/hid/lesstif/hid.conf \
 	$(srcdir)/hid/lpr/hid.conf \
 	$(srcdir)/hid/png/hid.conf \
-	$(srcdir)/hid/gcode/gcode.conf \
 	$(srcdir)/hid/nelma/hid.conf \
 	$(srcdir)/hid/ps/hid.conf \
 	gpcb-menu.res \
commit 1590f4c65c15e6a3ba27079866ea8d14252ce7bf
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Add missing AC_PROG_MKDIR_P check.
diff --git a/configure.ac b/configure.ac
index 43ebfaf..f0e19bd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -143,6 +143,7 @@ AC_PROG_CC_STDC
 AM_PROG_CC_C_O
 AC_PROG_CPP
 AC_PROG_AWK
+AC_PROG_MKDIR_P
 
 AM_PROG_LEX
 AC_PATH_PROG(LEX_PATH, $LEX, [notfound])
commit e2e741ab7589bd3e6c925fc9b2a81c7c2121f820
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Fix building outside of the source tree with dependency tracking
    disabled.  In that case some directories need to be manually
    created.  Fixes bug #2889226.
diff --git a/src/Makefile.am b/src/Makefile.am
index a5441d6..561a6f4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -233,6 +233,7 @@ gpcb-menu.h : gpcb-menu.res
 	echo '0};' >> $@
 
 hid/common/hidlist.h : Makefile
+	$(MKDIR_P) hid/common
 	true > $@
 	for e in ${HIDLIST}; do \
 	  echo "HID_DEF($${e})" >> $@; \
@@ -269,6 +270,7 @@ LIBGTK_SRCS = \
 libgtk_a_SOURCES = ${LIBGTK_SRCS} hid/gtk/gtk_lists.h
 
 hid/gtk/gtk_lists.h : ${LIBGTK_SRCS} Makefile
+	$(MKDIR_P) hid/gtk
 	true > $@
 	(for f in ${LIBGTK_SRCS} ; do cat $(srcdir)/$$f ; done) | grep "^REGISTER" > $@.tmp
 	mv $@.tmp $@
@@ -317,6 +319,7 @@ LIBLESSTIF_SRCS = \
 liblesstif_a_SOURCES = ${LIBLESSTIF_SRCS} hid/lesstif/lesstif_lists.h
 
 hid/lesstif/lesstif_lists.h : ${LIBLESSTIF_SRCS} Makefile
+	$(MKDIR_P) hid/lesstif
 	true > $@
 	(for f in ${LIBLESSTIF_SRCS} ; do cat $(srcdir)/$$f ; done) | grep "^REGISTER" > $@.tmp
 	mv $@.tmp $@
@@ -364,6 +367,7 @@ LIBGTS_SRCS = \
 libgts_a_SOURCES = ${LIBGTS_SRCS} gts/gts_lists.h
  
 gts/gts_lists.h : ${LIBGTS_SRCS} Makefile
+	$(MKDIR_P) gts
 	true > $@
 # Uncomment out the following if/when we ever end up with REGISTER in any of the gts
 # source files.  For now, there aren't any and so the grep fails and make stops
@@ -377,6 +381,7 @@ LIBBATCH_SRCS = \
 libbatch_a_SOURCES = ${LIBBATCH_SRCS} hid/batch/batch_lists.h
 
 hid/batch/batch_lists.h : ${LIBBATCH_SRCS} Makefile
+	$(MKDIR_P) hid/batch
 	true > $@
 	(for f in ${LIBBATCH_SRCS} ; do cat $(srcdir)/$$f ; done) | grep "^REGISTER" > $@.tmp
 	mv $@.tmp $@
@@ -399,6 +404,7 @@ LIBPS_SRCS = \
 libps_a_SOURCES = ${LIBPS_SRCS} hid/ps/ps_lists.h
 
 hid/ps/ps_lists.h : ${LIBPS_SRCS} Makefile
+	$(MKDIR_P) hid/ps
 	true > $@
 	(for f in ${LIBPS_SRCS} ; do cat $(srcdir)/$$f ; done) | grep "^REGISTER" > $@.tmp
 	mv $@.tmp $@
@@ -412,6 +418,7 @@ LIBPNG_SRCS = \
 libpng_a_SOURCES = ${LIBPNG_SRCS} hid/png/png_lists.h
 
 hid/png/png_lists.h : ${LIBPNG_SRCS} Makefile
+	$(MKDIR_P) hid/png
 	true > $@
 	(for f in ${LIBPNG_SRCS} ; do cat $(srcdir)/$$f ; done) | grep "^REGISTER" > $@.tmp
 	mv $@.tmp $@
@@ -435,6 +442,7 @@ LIBGCODE_SRCS = \
 libgcode_a_SOURCES = ${LIBGCODE_SRCS} hid/gcode/gcode_lists.h
 
 hid/gcode/gcode_lists.h : ${LIBGCODE_SRCS} Makefile
+	$(MKDIR_P) hid/gcode
 	true > $@
 	(for f in ${LIBGCODE_SRCS} ; do cat $(srcdir)/$$f ; done) | grep "^REGISTER" > $@.tmp
 	mv $@.tmp $@
@@ -448,6 +456,7 @@ LIBNELMA_SRCS = \
 libnelma_a_SOURCES = ${LIBNELMA_SRCS} hid/nelma/nelma_lists.h
 
 hid/nelma/nelma_lists.h : ${LIBNELMA_SRCS} Makefile
+	$(MKDIR_P) hid/nelma
 	true > $@
 	(for f in ${LIBNELMA_SRCS} ; do cat $(srcdir)/$$f ; done) | grep "^REGISTER" > $@.tmp
 	mv $@.tmp $@
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-11 02:48:02
      
     | 
| The branch, master has been updated
       via  e1d647498921eaca00b2f6930fe1ae9af0c1aab1 (commit)
       via  e053d592a107887438071ef111ee3f811e2a5490 (commit)
      from  920d274f40b327f3c83f7c6bf360b66f07966a7e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/hid/ps/ps.c |  223 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 187 insertions(+), 36 deletions(-)
=================
 Commit Messages
=================
commit e1d647498921eaca00b2f6930fe1ae9af0c1aab1
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    In the rectangle fill code fix a bug in swapping of the coordinates.
    It doesn't appear that this code path is encountered much.
:100644 100644 98f3eb4... d680903... M	src/hid/ps/ps.c
commit e053d592a107887438071ef111ee3f811e2a5490
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Add DSC to the postscript outputs to keep certain windows based
    postscript viewers a little happier.  Patch supplied in patch #2700352
    by Bob Paddock.
:100644 100644 3a92dc3... 98f3eb4... M	src/hid/ps/ps.c
=========
 Changes
=========
commit e1d647498921eaca00b2f6930fe1ae9af0c1aab1
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    In the rectangle fill code fix a bug in swapping of the coordinates.
    It doesn't appear that this code path is encountered much.
diff --git a/src/hid/ps/ps.c b/src/hid/ps/ps.c
index 98f3eb4..d680903 100644
--- a/src/hid/ps/ps.c
+++ b/src/hid/ps/ps.c
@@ -1124,13 +1124,13 @@ ps_fill_rect (hidGC gc, int x1, int y1, int x2, int y2)
   if (x1 > x2)
     {
       int t = x1;
-      x2 = x2;
+      x2 = x1;
       x2 = t;
     }
   if (y1 > y2)
     {
       int t = y1;
-      y2 = y2;
+      y2 = y1;
       y2 = t;
     }
 #if 0
commit e053d592a107887438071ef111ee3f811e2a5490
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Add DSC to the postscript outputs to keep certain windows based
    postscript viewers a little happier.  Patch supplied in patch #2700352
    by Bob Paddock.
diff --git a/src/hid/ps/ps.c b/src/hid/ps/ps.c
index 3a92dc3..98f3eb4 100644
--- a/src/hid/ps/ps.c
+++ b/src/hid/ps/ps.c
@@ -5,10 +5,11 @@
 #endif
 
 #include <stdio.h>
-#include <stdarg.h>
+#include <stdarg.h> /* not used */
 #include <stdlib.h>
 #include <string.h>
-#include <assert.h>
+#include <assert.h> /* not used */
+#include <time.h>
 
 #include "global.h"
 #include "data.h"
@@ -55,13 +56,13 @@ static double antifade_ratio = 0.6;
 static int multi_file = 0;
 static double media_width, media_height, ps_width, ps_height;
 
-static const char *medias[] = { 
+static const char *medias[] = {
   "A0", "A1", "A2", "A3", "A4", "A5",
   "A6", "A7", "A8", "A9", "A10",
   "B0", "B1", "B2", "B3", "B4", "B5",
   "B6", "B7", "B8", "B9", "B10",
   "Letter", "11x17", "Ledger",
-  "Legal", "Executive", 
+  "Legal", "Executive",
   "A-Size", "B-size",
   "C-Size", "D-size", "E-size",
   "US-Business_Card", "Intl-Business_Card",
@@ -270,13 +271,119 @@ static double scale_value;
 void
 ps_start_file (FILE *f)
 {
-  fprintf (f, "%%!PS-Adobe-3.0\n\n");
+  time_t currenttime = time( NULL );
+
+  fprintf (f, "%%!PS-Adobe-3.0\n");
+
+  /* Document Structuring Conventions (DCS): */
+
+  /* Start General Header Comments: */
+
+  /*
+   * %%Title DCS provides text title for the document that is useful
+   * for printing banner pages.
+   */
+  fprintf (f, "%%%%Title: %s\n", PCB->Filename);
+
+  /*
+   * %%CreationDate DCS indicates the date and time the document was
+   * created. Neither the date nor time need be in any standard
+   * format. This comment is meant to be used purely for informational
+   * purposes, such as printing on banner pages.
+   */
+  fprintf (f, "%%%%CreationDate: %s", asctime (localtime (¤ttime)));
+
+  /*
+   * %%Creator DCS indicates the document creator, usually the name of
+   * the document composition software.
+   */
+  fprintf (f, "%%%%Creator: PCB release: %s " VERSION "\n", Progname);
+
+  /*
+   * %%Version DCS comment can be used to note the version and
+   * revision number of a document or resource. A document manager may
+   * wish to provide version control services, or allow substitution
+   * of compatible versions/revisions of a resource or document.
+   *
+   * The format should be in the form of 'procname':
+   *  <procname>::= < name> < version> < revision>
+   *  < name> ::= < text>
+   *  < version> ::= < real>
+   *  < revision> ::= < uint>
+   *
+   * If a version numbering scheme is not used, these fields should
+   * still be filled with a dummy value of 0.
+   *
+   * There is currently no code in PCB to manage this revision number.
+   *
+   */
+  fprintf (f, "%%%%Version: (PCB %s " VERSION ") 0.0 0\n", Progname );
+
+
+  /*
+   * %%PageOrder DCS is intended to help document managers determine
+   * the order of pages in the document file, which in turn enables a
+   * document manager optionally to reorder the pages.  'Ascend'-The
+   * pages are in ascending order for example, 1-2-3-4-5-6.
+   */
+  fprintf (f, "%%%%PageOrder: Ascend\n" );
+
+  /*
+   * %%Pages: < numpages> | (atend) < numpages> ::= < uint> (Total
+   * %%number of pages)
+   *
+   * %%Pages DCS defines the number of virtual pages that a document
+   * will image.  (atend) defers the count until the end of the file,
+   * which is useful for dynamically generated contents.
+   */
+  fprintf (f, "%%%%Pages: (atend)\n" );
+
+  /* End General Header Comments. */
+
+  /* General Body Comments go here. Currently there are none. */
+
+  /*
+   * %%EndComments DCS indicates an explicit end to the header
+   * comments of the document.  All global DCS's must preceded
+   * this.  A blank line gives an implicit end to the comments.
+   */
+  fprintf (f, "%%%%EndComments\n\n" );
+}
+
+static void
+ps_end_file (FILE *f)
+{
+  /*
+   * %%Trailer DCS must only occur once at the end of the document
+   * script.  Any post-processing or cleanup should be contained in
+   * the trailer of the document, which is anything that follows the
+   * %%Trailer comment. Any of the document level structure comments
+   * that were deferred by using the (atend) convention must be
+   * mentioned in the trailer of the document after the %%Trailer
+   * comment.
+   */
+  fprintf (f, "%%%%Trailer\n" );
+
+  /*
+   * %%Pages was deferred until the end of the document via the
+   * (atend) mentioned, in the General Header section.
+   */
+  fprintf (f, "%%%%Pages: %d\n", pagecount );
+
+  /*
+   * %%EOF DCS signifies the end of the document. When the document
+   * manager sees this comment, it issues an end-of-file signal to the
+   * PostScript interpreter.  This is done so system-dependent file
+   * endings, such as Control-D and end-of-file packets, do not
+   * confuse the PostScript interpreter.
+   */
+  fprintf (f, "%%%%EOF\n" );
 }
 
 static FILE *
 psopen (const char *base, const char *which)
 {
-  FILE *f;
+  FILE *ps_open_file;
   char *buf, *suff, *buf2;
 
   if (!multi_file)
@@ -296,9 +403,9 @@ psopen (const char *base, const char *which)
       sprintf(buf, "%s.%s.ps", base, which);
     }
   printf("PS: open %s\n", buf);
-  f = fopen(buf, "w");
+  ps_open_file = fopen(buf, "w");
   free (buf);
-  return f;
+  return ps_open_file;
 }
 
 static BoxType region;
@@ -405,19 +512,20 @@ ps_hid_export_to_file (FILE * the_file, HID_Attr_Val * options)
 
   if (! multi_file)
     {
-      pagecount = 1;
-      fprintf (f, "%%%%Page: 1\n");
+      fprintf (f, "%%%%Page: TableOfContents 1\n");  /* %%Page DSC requires both a label and an ordinal */
       fprintf (f, "/Times-Roman findfont 24 scalefont setfont\n");
       fprintf (f,
 	       "/rightshow { /s exch def s stringwidth pop -1 mul 0 rmoveto s show } def\n");
       fprintf (f,
 	       "/y 72 9 mul def /toc { 100 y moveto show /y y 24 sub def } bind def\n");
       fprintf (f, "/tocp { /y y 12 sub def 90 y moveto rightshow } bind def\n");
+
       doing_toc = 1;
+      pagecount = 1;      /* 'pagecount' is modified by hid_expose_callback() call */
       hid_expose_callback (&ps_hid, ®ion, 0);
     }
 
-  pagecount = 1;
+  pagecount = 1; /* Reset 'pagecount' if single file */
   doing_toc = 0;
   lastgroup = -1;
   hid_expose_callback (&ps_hid, ®ion, 0);
@@ -468,7 +576,10 @@ ps_do_export (HID_Attr_Val * options)
 
   multi_file = 0;
   if (f)
-   fclose (f);
+    {
+      ps_end_file (f);
+      fclose (f);
+    }
 }
 
 extern void hid_parse_command_line (int *argc, char ***argv);
@@ -493,6 +604,14 @@ corner (int x, int y, int dx, int dy)
   int len2 = 20000;
 #endif
   int thick = 0;
+  /*
+   * Originally 'thick' used thicker lines.  Currently is uses
+   * Postscript's "device thin" line - i.e. zero width means one
+   * device pixel.  The code remains in case you want to make them
+   * thicker - it needs to offset everything so that the *edge* of the
+   * thick line lines up with the edge of the board, not the *center*
+   * of the thick line.
+   */
 
   fprintf (f, "gsave %d setlinewidth %d %d translate %d %d scale\n",
 	   thick * 2, x, y, dx, dy);
@@ -513,6 +632,7 @@ static int is_paste;
 static int
 ps_set_layer (const char *name, int group, int empty)
 {
+  time_t currenttime;
   int idx = (group >= 0
 	     && group <
 	     max_layer) ? PCB->LayerGroups.Entries[group][0] : group;
@@ -542,6 +662,18 @@ ps_set_layer (const char *name, int group, int empty)
     {
       if (group < 0 || group != lastgroup)
 	{
+          if( 1 == pagecount )
+            {
+              currenttime = time( NULL );
+              fprintf (f, "30 30 moveto (%s) show\n", PCB->Filename);
+
+              fprintf (f, "(%d.) tocp\n", pagecount);
+              fprintf (f, "(Table of Contents \\(This Page\\)) toc\n" );
+
+              fprintf (f, "(Created on %s) toc\n", asctime (localtime (¤ttime)));
+              fprintf (f, "( ) tocp\n" );
+            }
+
 	  pagecount++;
 	  lastgroup = group;
 	  fprintf (f, "(%d.) tocp\n", pagecount);
@@ -564,17 +696,29 @@ ps_set_layer (const char *name, int group, int empty)
       if (multi_file)
 	{
 	  if (f)
-	    fclose (f);
+            {
+              ps_end_file (f);
+              fclose (f);
+            }
 	  f = psopen (filename, layer_type_to_file_name (idx));
 	  if (!f)
 	  {
 	    perror(filename);
 	    return 0;
 	  }
-		  
+
 	  ps_start_file (f);
 	}
-      fprintf (f, "%%%%Page: %d\n", pagecount);
+
+      /*
+       * %%Page DSC comment marks the beginning of the PostScript
+       * language instructions that describe a particular
+       * page. %%Page: requires two arguments: a page label and a
+       * sequential page number. The label may be anything, but the
+       * ordinal page number must reflect the position of that page in
+       * the body of the PostScript file and must start with 1, not 0.
+       */
+      fprintf (f, "%%%%Page: %s %d\n", layer_type_to_file_name(idx), pagecount);
 
       if (mirror)
 	mirror_this = 1 - mirror_this;
@@ -585,7 +729,7 @@ ps_set_layer (const char *name, int group, int empty)
 	mirror_this = 1 - mirror_this;
 
       fprintf (f, "/Helvetica findfont 10 scalefont setfont\n");
-      if (legend) 
+      if (legend)
 	{
 	  fprintf (f, "30 30 moveto (%s) show\n", PCB->Filename);
 	  if (PCB->Name)
@@ -596,16 +740,16 @@ ps_set_layer (const char *name, int group, int empty)
 		     layer_type_to_file_name (idx));
 	  if (mirror_this)
 	    fprintf (f, "( \\(mirrored\\)) show\n");
-	  
+
 	  if (fillpage)
 	    fprintf (f, "(, not to scale) show\n");
 	  else
 	    fprintf (f, "(, scale = 1:%.3f) show\n", scale_value);
 	}
       fprintf (f, "newpath\n");
-      
+
       fprintf (f, "72 72 scale %g %g translate\n", 0.5*media_width, 0.5*media_height);
-      
+
       boffset = 0.5*media_height;
       if (PCB->MaxWidth > PCB->MaxHeight)
 	{
@@ -1013,8 +1157,13 @@ HID_Attribute ps_calib_attribute_list[] = {
 };
 
 static const char * const calib_lines[] = {
-  "%!PS-Adobe\n",
+  "%!PS-Adobe-3.0\n",
+  "%%Title: Calibration Page\n",
+  "%%PageOrder: Ascend\n",
+  "%%Pages: 1\n",
+  "%%EndComments\n",
   "\n",
+  "%%Page: Calibrate 1\n",
   "72 72 scale\n",
   "\n",
   "0 setlinewidth\n",
@@ -1099,7 +1248,7 @@ void
 ps_calibrate_1 (double xval, double yval, int use_command)
 {
   HID_Attr_Val vals[3];
-  FILE *f;
+  FILE *ps_cal_file;
   int used_popen = 0, c;
 
   if (xval > 0 && yval > 0)
@@ -1142,29 +1291,31 @@ ps_calibrate_1 (double xval, double yval, int use_command)
       char *cmd = vals[0].str_value;
       while (*cmd == ' ' || *cmd == '|')
 	cmd ++;
-      f = popen (cmd, "w");
+      ps_cal_file = popen (cmd, "w");
       used_popen = 1;
     }
   else
-    f = fopen (vals[0].str_value, "w");
+    ps_cal_file = fopen (vals[0].str_value, "w");
 
   for (c=0; calib_lines[c]; c++)
-    fputs(calib_lines[c], f);
+    fputs(calib_lines[c], ps_cal_file);
+
+  fprintf (ps_cal_file, "4 in 0.5 (Y in) cbar\n");
+  fprintf (ps_cal_file, "20 cm 1.5 (Y cm) cbar\n");
+  fprintf (ps_cal_file, "10 in 2.5 (Y in) cbar\n");
+  fprintf (ps_cal_file, "-90 rotate\n");
+  fprintf (ps_cal_file, "4 in -0.5 (X in) cbar\n");
+  fprintf (ps_cal_file, "15 cm -1.5 (X cm) cbar\n");
+  fprintf (ps_cal_file, "7.5 in -2.5 (X in) cbar\n");
 
-  fprintf (f, "4 in 0.5 (Y in) cbar\n");
-  fprintf (f, "20 cm 1.5 (Y cm) cbar\n");
-  fprintf (f, "10 in 2.5 (Y in) cbar\n");
-  fprintf (f, "-90 rotate\n");
-  fprintf (f, "4 in -0.5 (X in) cbar\n");
-  fprintf (f, "15 cm -1.5 (X cm) cbar\n");
-  fprintf (f, "7.5 in -2.5 (X in) cbar\n");
+  fprintf (ps_cal_file, "showpage\n");
 
-  fprintf (f, "showpage\n");
+  fprintf (ps_cal_file, "%%%%EOF\n");
 
   if (used_popen)
-    pclose (f);
+    pclose (ps_cal_file);
   else
-    fclose (f);
+    fclose (ps_cal_file);
 }
 
 static void
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-11 02:32:44
      
     | 
| The branch, master has been updated
       via  920d274f40b327f3c83f7c6bf360b66f07966a7e (commit)
       via  13cada5ddfeb813da99ddf3788a27274958bbfd4 (commit)
      from  91ba9f3a8b5a71914d928aad1e545a154c3678f5 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 INSTALL                  |   11 +++++------
 configure.ac             |    6 +++---
 tests/inputs/Makefile.am |    1 +
 3 files changed, 9 insertions(+), 9 deletions(-)
=================
 Commit Messages
=================
commit 920d274f40b327f3c83f7c6bf360b66f07966a7e
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    The gcode exporter used libgd so make sure we check for it and
    document that we need it.  Noted by Patrick Bernaud in bug #2967313
:100644 100644 db27639... c4df37d... M	INSTALL
:100644 100644 3f8ed62... 43ebfaf... M	configure.ac
commit 13cada5ddfeb813da99ddf3788a27274958bbfd4
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Make sure the simple gcode test layout makes it into the distfile.
:100644 100644 b7dbb1e... ee76973... M	tests/inputs/Makefile.am
=========
 Changes
=========
commit 920d274f40b327f3c83f7c6bf360b66f07966a7e
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    The gcode exporter used libgd so make sure we check for it and
    document that we need it.  Noted by Patrick Bernaud in bug #2967313
diff --git a/INSTALL b/INSTALL
index db27639..c4df37d 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,3 @@
-$Id$
-
 PCB uses a standard GNU autoconf/automake based build
 system which should make compilation go smoothly on most unix-like
 systems.  Please do read this first section however.
@@ -36,6 +34,10 @@ Export HID's:
      ps       -- Postscript and Encapsulated Postscript output.  No
 		 additional libraries are needed for this.
 
+     gcode    -- CNC G-CODE output (experimental).  The gdlib library
+                 is used by this HID.  gdlib may be found at
+                 http://www.libgd.org
+
      gerber   -- RS-274-X (Gerber) and Excellon drill output.  No
 		 additional libraries are needed for this.
 
@@ -44,7 +46,7 @@ Export HID's:
 
      png      -- png/gif/jpeg output.  This HID uses gdlib to do
 		 the majority of the work.  gdlib may be obtained
-		 from http://www.boutell.com/gd.  At the time of
+		 from http://www.libgd.org.  At the time of
 		 writing this document, I have tested with 
 		 gd-2.0.23 and gd-2.0.33.  Other versions may
 		 work as well.
@@ -59,9 +61,6 @@ Export HID's:
 		 formats hopefully it will avoid suprises when the
 		 disabled formats are not available at runtime.
 
-     gcode   -- CNC G-CODE output (experimental).  No
-		 additional libraries are needed for this.
-
     The choice of which export HID's to compile is indicated with:
 
       --with-exporters="ps gerber bom png"
diff --git a/configure.ac b/configure.ac
index 3f8ed62..43ebfaf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -723,7 +723,7 @@ $GTK_PKG_ERRORS])]
 	GLIB_VERSION=`$PKG_CONFIG glib-2.0 --modversion`
 	;;
 
-      nelma|png )
+      gcode|nelma|png )
 	# Check for gdlib-config for gd (www.boutell.com/gd)
 	AC_PATH_PROG(GDLIB_CONFIG, gdlib-config, no)
 	if test "$GDLIB_CONFIG" = "no"; then
@@ -735,10 +735,10 @@ you will get lucky.
 ])
 		if test "$WIN32" != "yes" ; then
 			AC_CHECK_LIB(gd,main,,
-			AC_MSG_ERROR([You have requested the nelma and/or png HID  but -lgd could not be found]))
+			AC_MSG_ERROR([[You have requested gcode, nelma, or png HIDs  but -lgd could not be found]]))
 		else 
 			AC_CHECK_LIB(bgd,main,,
-			AC_MSG_ERROR([You have requested the nelma and/or png HID  but -lbgd could not be found]))
+			AC_MSG_ERROR([[You have requested gcode, nelma, or png HIDs  but -lbgd could not be found]]))
 		fi
 	else
 		if test "$WIN32" = "yes" ; then
commit 13cada5ddfeb813da99ddf3788a27274958bbfd4
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Make sure the simple gcode test layout makes it into the distfile.
diff --git a/tests/inputs/Makefile.am b/tests/inputs/Makefile.am
index b7dbb1e..ee76973 100644
--- a/tests/inputs/Makefile.am
+++ b/tests/inputs/Makefile.am
@@ -2,5 +2,6 @@
 
 EXTRA_DIST= \
 	bom_general.pcb \
+	gcode_oneline.pcb \
 	gerber_oneline.pcb
 
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-10 18:16:21
      
     | 
| The branch, master has been updated
       via  91ba9f3a8b5a71914d928aad1e545a154c3678f5 (commit)
       via  802576013b5d780cd87caafa31c694279ee2dc4f (commit)
      from  6d03d0539e0afd51383f11fd6b06ec7ced0fbf12 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 tests/README.txt   |   56 +++++++++++++++++++++++++++++++++++++++++----------
 tests/run_tests.sh |   16 +++++++++++++-
 2 files changed, 59 insertions(+), 13 deletions(-)
=================
 Commit Messages
=================
commit 802576013b5d780cd87caafa31c694279ee2dc4f
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Update the documentation to more closely match reality.
:100644 100644 dd7750f... 8f2a5fb... M	tests/README.txt
:100755 100755 5320c54... 44bdcc7... M	tests/run_tests.sh
=========
 Changes
=========
commit 802576013b5d780cd87caafa31c694279ee2dc4f
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Update the documentation to more closely match reality.
diff --git a/tests/README.txt b/tests/README.txt
index dd7750f..8f2a5fb 100644
--- a/tests/README.txt
+++ b/tests/README.txt
@@ -1,9 +1,41 @@
-FIXME -- this is not really updated yet.  It is more or less verbatim
-from gerbv and needs updating for pcb.
-
 Please read this file before making any modifications to the test suite.
 
+**********************************************************************
+**********************************************************************
+* Overview
+**********************************************************************
+**********************************************************************
+
+The test suite is based on a shell script, 'run_tests.sh', which
+calls pcb to export various test case layouts to different output
+formats.  The tests to be run are defined in the file 'tests.list'.
+The 'tests.list' file defines the export command line options passed
+to pcb, the name of the input .pcb file, and the names and file types
+for the expected output files.
+
+After a particular test is run, the output files are compared against
+a set of "golden" files which are in the golden/ subdirectory.
+ALL CHANGES TO THE GOLDEN FILES MUST BE HAND VERIFIED.  This point
+can not be emphasized too much.  
+
+While this testsuite is clearly not comprehensive (the GUI is totally
+left out of the testing for example), it is still better than nothing
+and can help detect newly introduced bugs.
+
+**********************************************************************
+**********************************************************************
+* Running an existing test
+**********************************************************************
+**********************************************************************
+
+To run all of the tests defined in tests.list run:
+
+  ./run_tests.sh
+
+To only run a specific test or tests, then simply list them by name
+on the command line like:
 
+  ./run_tests.sh test_one test_two ... 
 
 **********************************************************************
 **********************************************************************
@@ -13,12 +45,14 @@ Please read this file before making any modifications to the test suite.
 
 ./run_tests.sh --regen <testname>
 
-will regenerate the golden file for <testname>.  I suggest saving
-off a copy and using ImageMagick to look for the differences visually.
-The run_tests.sh script has examples of comparing .png files.  Make
-sure the changes are only the expected ones and then check the new
-files back into cvs.  Do not blindly update these files as that defeats
-the purpose of the tests.
+will regenerate the golden file for <testname>.  If you are generating
+ASCII output such as BOMs or RS-274X files, then use the diff(3) program
+to examine all differences.  If you are generating a graphics file
+such as a PNG, then I suggest saving off a copy and using ImageMagick
+to look for the differences visually.  The run_tests.sh script has
+examples of comparing .png files.  Make sure the changes are only
+the expected ones and then check the new files back into git.  Do
+not blindly update these files as that defeats the purpose of the tests.
 
 **********************************************************************
 **********************************************************************
@@ -62,11 +96,11 @@ Update Makefile.am's
 ----------------------------------------------------------------------
 
 Update inputs/Makefile.am and golden/Makefile.am to include your new
-files.
+files.  If you added new Makefile.am's then be sure to also update
+configure.ac at the top level of the source tree.
 
 ----------------------------------------------------------------------
 Add the new files to git
 ----------------------------------------------------------------------
 
-FIXME -- fill in this section
 
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 5320c54..44bdcc7 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -33,9 +33,11 @@ This causes the testsuite to skip all tests and report no errors.
 This is used for certain debugging *only*.  The primary use is to 
 allow testing of the 'distcheck' target without including the effects
 of the testsuite. The reason this is useful is that due to minor differences
-in cairo versions and perhaps roundoff in different CPU's, the testsuite
+in library versions and perhaps roundoff in different CPU's, the testsuite
 may falsely report failures on some systems.  These reported failures
 prevent using 'distcheck' for verifying the rest of the build system.
+These comments only apply to the tests which try to compare image files
+like PNG files.
 
 EOF
 
@@ -62,7 +64,8 @@ The resulting output files are examined in various ways to make sure
 they are correct.  The exact details of how they are compared varies.
 For example, the PNG outputs are compared using tools from the ImageMagick
 suite while the ASCII centroid and bill of materials files are normalized
-with awk and then compared with the standard diff utility.
+with awk and then compared with the standard diff utility.  The normalization
+removes things like a comment line which contains the creation date.
 
 OPTIONS
 
@@ -266,6 +269,12 @@ fi
 # utility functions for comparison
 #
 
+# Usage:
+#  compare_check "test_name" "file1" "file2"
+#
+# Makes sure that file1 and file2 both exist.  If not, mark the current
+# test as skipped and give an error message
+#
 compare_check() {
     fn="$1"
     f1="$2"
@@ -290,6 +299,9 @@ compare_check() {
 # ASCII file comparison routines
 #
 
+# Usage:
+#   run_diff "file1" "file2"
+#
 run_diff() {
     f1="$1"
     f2="$2"
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-10 01:44:47
      
     | 
| The branch, master has been updated
       via  6d03d0539e0afd51383f11fd6b06ec7ced0fbf12 (commit)
      from  a096a8b84c1d0e2beb94a859bde9f2bc2799fe73 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/djopt.c |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)
=================
 Commit Messages
=================
commit 6d03d0539e0afd51383f11fd6b06ec7ced0fbf12
Author: Stephen Ecob <sil...@gm...>
Commit: DJ Delorie <dj...@de...>
    Fix Freckles
    
    The autorouter sometimes ends a trace just past a pad.  The optimizer
    cuts this trace at the pad center, leaving a tiny trace left over.
    This tiny trace is a "freckle" and it inhibits mitering.  Check
    for such freckles and remove them.
:100644 100644 68b3641... c8ae961... M	src/djopt.c
=========
 Changes
=========
commit 6d03d0539e0afd51383f11fd6b06ec7ced0fbf12
Author: Stephen Ecob <sil...@gm...>
Commit: DJ Delorie <dj...@de...>
    Fix Freckles
    
    The autorouter sometimes ends a trace just past a pad.  The optimizer
    cuts this trace at the pad center, leaving a tiny trace left over.
    This tiny trace is a "freckle" and it inhibits mitering.  Check
    for such freckles and remove them.
diff --git a/src/djopt.c b/src/djopt.c
index 68b3641..c8ae961 100644
--- a/src/djopt.c
+++ b/src/djopt.c
@@ -75,6 +75,9 @@ RCSID ("$Id$");
 #define ORIENT(x) ((x) & 0xf0)
 #define DIRECT(x) ((x) & 0x0f)
 
+/* Manhattan length of the longest "freckle" */
+#define LONGEST_FRECKLE	2
+
 struct line_s;
 
 typedef struct corner_s
@@ -1230,6 +1233,33 @@ simple_optimize_corner (corner_s * c)
 	}
     }
   check (c, 0);
+  if (c->n_lines == 1 && !c->via)
+    {
+      corner_s *c0 = other_corner (c->lines[0], c);
+      if (abs(c->x - c0->x) + abs(c->y - c0->y) <= LONGEST_FRECKLE)
+	{
+          /*
+           * Remove this line, as it is a "freckle".  A freckle is an extremely
+           * short line (around 0.01 thou) that is unconnected at one end.
+           * Freckles are almost insignificantly small, but are annoying as
+           * they prevent the mitering optimiser from working.
+           * Freckles sometimes arise because of a bug in the autorouter that
+           * causes it to create small overshoots (typically 0.01 thou) at the
+           * intersections of vertical and horizontal lines. These overshoots
+           * are converted to freckles as a side effect of canonicalize_line().
+           * Note that canonicalize_line() is not at fault, the bug is in the
+           * autorouter creating overshoots.
+           * The autorouter bug arose some time between the 20080202 and 20091103
+           * releases.
+           * This code is probably worth keeping even when the autorouter bug is
+           * fixed, as "freckles" could conceivably arise in other ways.
+           */
+	  dprintf ("freckle %d,%d to %d,%d\n",
+		   c->x, c->y, c0->x, c0->y);
+	  move_corner (c, c0->x, c0->y);
+	}
+    }
+  check (c, 0);
   return rv;
 }
 
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-08 23:23:38
      
     | 
| The branch, master has been updated
       via  b4ca96d312884a8bc2314e490c2c957ab590b427 (commit)
      from  5c7cc398ffc8f646d68eada8d6cd74dff4bceb85 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 configure.ac |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)
=================
 Commit Messages
=================
commit b4ca96d312884a8bc2314e490c2c957ab590b427
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    When building the docs have configure check for epsf.tex being in the TeX
    installation.  Problem noted by Kai-Martin Knaak and the method for checking
    suggested by Peter Clifton.
:100644 100644 415c400... d5578fb... M	configure.ac
=========
 Changes
=========
commit b4ca96d312884a8bc2314e490c2c957ab590b427
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    When building the docs have configure check for epsf.tex being in the TeX
    installation.  Problem noted by Kai-Martin Knaak and the method for checking
    suggested by Peter Clifton.
diff --git a/configure.ac b/configure.ac
index 415c400..d5578fb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -224,6 +224,31 @@ Alternatively, you can disable building the documentation with
 --disable-doc.
 ])
 	fi
+
+
+   AC_PATH_PROG([KPSEWHICH], [kpsewhich], [no])
+   if test "X$KPSEWHICH" = "Xno"; then
+      AC_MSG_ERROR([You have requested a build
+of the documentation.  For this to work, you must have a functional install of
+TeX and LaTeX.  kpsewhich is part of TeX.
+Alternatively, you can disable building the documentation with
+--disable-doc.])
+   fi
+
+   AC_MSG_CHECKING([If your TeX installation contains epsf.tex])
+   f=`$KPSEWHICH epsf.tex`
+   if test $? -eq 0 ; then
+	AC_MSG_RESULT([yes ($f)])
+   else
+	AC_MSG_RESULT([no])
+        AC_MSG_ERROR([You have requested a build
+of the documentation.  For this to work, you must have a functional install of
+TeX and LaTeX that includes epsf.tex.  On some linux distributions this is
+part of the texlive-generic-recommended package.
+Alternatively, you can disable building the documentation with
+--disable-doc.])
+   fi
+
 fi
 
 ##########################################################################
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-02 18:42:40
      
     | 
| The branch, master has been updated
       via  5c7cc398ffc8f646d68eada8d6cd74dff4bceb85 (commit)
      from  ca1af54230754bde0cda442a6d966a4aa1a3e6b4 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 configure.ac |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
=================
 Commit Messages
=================
commit 5c7cc398ffc8f646d68eada8d6cd74dff4bceb85
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Fix test for whether to rebuild the shipped pcblib-newlib library
    
    ${top_srcdir} is a Makefile variable, we need $srcdir in configure.ac
:100644 100644 9c14582... 415c400... M	configure.ac
=========
 Changes
=========
commit 5c7cc398ffc8f646d68eada8d6cd74dff4bceb85
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Fix test for whether to rebuild the shipped pcblib-newlib library
    
    ${top_srcdir} is a Makefile variable, we need $srcdir in configure.ac
diff --git a/configure.ac b/configure.ac
index 9c14582..415c400 100644
--- a/configure.ac
+++ b/configure.ac
@@ -857,7 +857,7 @@ AM_CONDITIONAL(PNG_PREVIEW, test x$enable_m4lib_png = xyes)
 build_pcblib_newlib=no
 if test "$pcb_sources" = "tarball" ; then
 	AC_MSG_CHECKING([If pcblib-newlib was built with png previews])
-	stamp=${top_srcdir}/lib/pcblib-newlib.stamp 
+	stamp=$srcdir/lib/pcblib-newlib.stamp
 	if test ! -f ${stamp} ; then
 		AC_MSG_RESULT([unknown, missing ${stamp}])
 		build_pcblib_newlib=yes
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-02 17:48:10
      
     | 
| The branch, master has been updated
       via  ca1af54230754bde0cda442a6d966a4aa1a3e6b4 (commit)
       via  2eb25f8f7cc9584528b2caa54a6097fc17fcec8b (commit)
      from  d2a7382d1fcecd85a1feee399543a3e89fe1ef6b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 lib/Makefile.am   |    5 +++++
 tools/Makefile.am |    6 ++----
 2 files changed, 7 insertions(+), 4 deletions(-)
=================
 Commit Messages
=================
commit ca1af54230754bde0cda442a6d966a4aa1a3e6b4
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Fix make distcheck by removing regenerated newlib footprints
    
    The generated newlib files need to be removed by make distclean
    if they are being updated by the build process. If the files aren't
    being updated, we should not delete them as they were originally
    distributed with the source tarball.
:100644 100644 95be997... ae1b485... M	lib/Makefile.am
commit 2eb25f8f7cc9584528b2caa54a6097fc17fcec8b
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Fix distribution of gnet-pcbfwd.scm in the dist tarball
    
    Use the dist_ prefix to make this simple, so our installed
    targets are now listed in dist_..._DATA, rather than ..._DATA
    and EXTRA_DIST.
:100644 100644 002fecc... d9665a9... M	tools/Makefile.am
=========
 Changes
=========
commit ca1af54230754bde0cda442a6d966a4aa1a3e6b4
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Fix make distcheck by removing regenerated newlib footprints
    
    The generated newlib files need to be removed by make distclean
    if they are being updated by the build process. If the files aren't
    being updated, we should not delete them as they were originally
    distributed with the source tarball.
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 95be997..ae1b485 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -57,6 +57,11 @@ ${NEWLIB}.stamp : footprint.pcb ${NEWLIB_DEPS}
 		${PREVIEW} --pcb "${PCB}" --awk "${AWK}"
 	echo '${PREVIEW_MSG}' > $@
 
+# Remove any rebuilt footprints
+if BUILD_PCBLIB_NEWLIB
+distclean-local:
+	rm -fr ${NEWLIB}
+endif
 
 install-data-local: ${NEWLIB}.stamp
 	if test -d ${NEWLIB} ; then \
commit 2eb25f8f7cc9584528b2caa54a6097fc17fcec8b
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Fix distribution of gnet-pcbfwd.scm in the dist tarball
    
    Use the dist_ prefix to make this simple, so our installed
    targets are now listed in dist_..._DATA, rather than ..._DATA
    and EXTRA_DIST.
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 002fecc..d9665a9 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -5,12 +5,10 @@
 ## in ${exec_prefix}/bin  (by bin_SCRIPTS and bin_PROGRAMS)
 
 toolsdir=	$(pkgdatadir)/tools
-tools_DATA=	${TOOLS}
+dist_tools_DATA=	${TOOLS}
 
 scmdatadir = $(datadir)/gEDA/scheme
-scmdata_DATA = $(DIST_SCM)
-
-EXTRA_DIST= ${TOOLS}
+dist_scmdata_DATA = $(DIST_SCM)
 
 bin_SCRIPTS= \
 	MergePCBPS \
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-01 18:35:00
      
     | 
| The branch, master has been updated
       via  d2a7382d1fcecd85a1feee399543a3e89fe1ef6b (commit)
      from  99b23b942f4733a6e3c5333b13c90d6343f340dd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/parse_y.y |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
=================
 Commit Messages
=================
commit d2a7382d1fcecd85a1feee399543a3e89fe1ef6b
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Allow empty attribute values.
    
    The STRING token is NULL when an empty string is indicated, but
    empty attributes are different than missing attributes, so if a STRING
    is NULL, store an empty string instead.
:100644 100644 646ef77... bbb7255... M	src/parse_y.y
=========
 Changes
=========
commit d2a7382d1fcecd85a1feee399543a3e89fe1ef6b
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Allow empty attribute values.
    
    The STRING token is NULL when an empty string is indicated, but
    empty attributes are different than missing attributes, so if a STRING
    is NULL, store an empty string instead.
diff --git a/src/parse_y.y b/src/parse_y.y
index 646ef77..bbb7255 100644
--- a/src/parse_y.y
+++ b/src/parse_y.y
@@ -1878,7 +1878,7 @@ attributes	: attribute
 attribute
 		: T_ATTRIBUTE '(' STRING STRING ')'
 			{
-				CreateNewAttribute (attr_list, $3, $4);
+				CreateNewAttribute (attr_list, $3, $4 ? $4 : "");
 				SaveFree ($3);
 				SaveFree ($4);
 			}
 | 
| 
      
      
      From: <gi...@gp...> - 2010-03-01 13:21:16
      
     | 
| The branch, sdb-playpen has been created
        at  dad36270bfac1ac1de2a9dd73accfa040c34a4f5 (commit)
commit dad36270bfac1ac1de2a9dd73accfa040c34a4f5
Merge: 5a9adc85a9c6d82226917f3ea6fc23bccdf6f806 99b23b942f4733a6e3c5333b13c90d6343f340dd
Author: Stuart Brorson <sd...@cl...>
Date:   Mon Mar 1 08:51:11 2010 -0500
    Merge branch 'master' of ssh://sdb@git.gpleda.org/home/git/pcb.
    Conflicts:
    	src/change.c
    Fixed conflict with DJ's mods to change.c.
commit 5a9adc85a9c6d82226917f3ea6fc23bccdf6f806
Author: Stuart Brorson <sd...@cl...>
Date:   Mon Mar 1 08:39:04 2010 -0500
    Added tons of debug spew to various files to aid in program
    tracing.  Also, modify library loading stuff in file.c to
    allow footprints to live directly in library directory (rather
    than only one level down).
commit 6007018230f91d3850a368d17e16d54932646869
Merge: 8ad523aede9563b69f2c7fb0ee3440a9c5853766 16896c571df3105c72619d4b720e3edeb1792103
Author: Stuart Brorson <sd...@cl...>
Date:   Sat Feb 20 20:24:27 2010 -0500
    Merge branch 'master' of ssh://sdb@git.gpleda.org/home/git/pcb
commit 8ad523aede9563b69f2c7fb0ee3440a9c5853766
Merge: a26a36d2d3b60d1b3e039587614b214a46a4e2d5 26af64ecb8eef4ee42a653381f149549c52fb5e7
Author: Stuart Brorson <sd...@cl...>
Date:   Wed Feb 17 08:43:00 2010 -0500
    Merge branch 'master' of ssh://sdb@git.gpleda.org/home/git/pcb
commit a26a36d2d3b60d1b3e039587614b214a46a4e2d5
Author: Stuart Brorson <sd...@cl...>
Date:   Wed Feb 17 08:42:45 2010 -0500
    Added DEBUG printfs all over the place to facilitate
    program tracing.
 | 
| 
      
      
      From: Peter C. <pc...@ca...> - 2010-03-01 12:08:14
      
     | 
| > commit cf5633edad7166066465fbdf4caf826d5d03a31e > Author: DJ Delorie <dj...@de...> > Commit: DJ Delorie <dj...@de...> > > Add more flexibility to the import::make option. > > New attributes: > > make::outfile - the intermediate action file > make::target - the makefile target to call (defaults to outfile or pcb_import) > make::makefile - adds -f to make > > Added more documentation too. Cool - thanks DJ - sorry I didn't reply to your previous email about this stuff. I presume it is still possible to call make with an "" target.. (Can we place an empty make::target attribute?) -- Peter Clifton Electrical Engineering Division, Engineering Department, University of Cambridge, 9, JJ Thomson Avenue, Cambridge CB3 0FA Tel: +44 (0)7729 980173 - (No signal in the lab!) | 
| 
      
      
      From: <gi...@gp...> - 2010-03-01 03:59:04
      
     | 
| The branch, master has been updated
       via  99b23b942f4733a6e3c5333b13c90d6343f340dd (commit)
       via  cf5633edad7166066465fbdf4caf826d5d03a31e (commit)
      from  e3774e28567f5ce142e204ab7e525ba954f49581 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/action.c |   88 ++++++++++++++++++++++++++++++++++++++++++++++------------
 src/change.c |    4 +-
 2 files changed, 72 insertions(+), 20 deletions(-)
=================
 Commit Messages
=================
commit 99b23b942f4733a6e3c5333b13c90d6343f340dd
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Fix bogus cast to BoxType
    
    Instead of casting, which hides real bugs, pass the address of the
    bounding box itself.
:100644 100644 f67e682... db13d5e... M	src/change.c
commit cf5633edad7166066465fbdf4caf826d5d03a31e
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Add more flexibility to the import::make option.
    
    New attributes:
    
    make::outfile - the intermediate action file
    make::target - the makefile target to call (defaults to outfile or pcb_import)
    make::makefile - adds -f to make
    
    Added more documentation too.
:100644 100644 36125d2... d7c754b... M	src/action.c
=========
 Changes
=========
commit 99b23b942f4733a6e3c5333b13c90d6343f340dd
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Fix bogus cast to BoxType
    
    Instead of casting, which hides real bugs, pass the address of the
    bounding box itself.
diff --git a/src/change.c b/src/change.c
index f67e682..db13d5e 100644
--- a/src/change.c
+++ b/src/change.c
@@ -992,13 +992,13 @@ ChangeElementText (PCBType *pcb, DataType *data, ElementTypePtr Element, int whi
     EraseElementName (Element);
 
   r_delete_entry (data->name_tree[which],
-		  (BoxType *) & Element->Name[which].TextString);
+		  & Element->Name[which].BoundingBox);
 
   Element->Name[which].TextString = new_name;
   SetTextBoundingBox (&PCB->Font, &Element->Name[which]);
 
   r_insert_entry (data->name_tree[which],
-		  (BoxType *) & Element->Name[which].TextString, 0);
+		  & Element->Name[which].BoundingBox, 0);
 
   if (pcb && which == NAME_INDEX (pcb))
     DrawElementName (Element, 0);
commit cf5633edad7166066465fbdf4caf826d5d03a31e
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Add more flexibility to the import::make option.
    
    New attributes:
    
    make::outfile - the intermediate action file
    make::target - the makefile target to call (defaults to outfile or pcb_import)
    make::makefile - adds -f to make
    
    Added more documentation too.
diff --git a/src/action.c b/src/action.c
index 36125d2..d7c754b 100644
--- a/src/action.c
+++ b/src/action.c
@@ -7121,17 +7121,49 @@ The name of the .pcb file
 A space-separated list of source files
 
 @item OUT
-The name of the file in which to put the command script.
+The name of the file in which to put the command script, which may
+contain any @pcb{} actions.  By default, this is a temporary file
+selected by @pcb{}, but if you specify an @code{import::outfile}
+attribute, that file name is used instead (and not automatically
+deleted afterwards).
 
 @end table
 
-The target requested will be @code{pcb_import}.
+The target specified to be built is the first of these that apply:
+
+@itemize @bullet
+
+@item
+The target specified by an @code{import::target} attribute.
+
+@item
+The output file specified by an @code{import::outfile} attribute.
+
+@item
+If nothing else is specified, the target is @code{pcb_import}.
+
+@end itemize
+
+If you specify an @code{import::makefile} attribute, then "-f <that
+file>" will be added to the command line.
 
 If you specify the mode, you may also specify the source files
 (schematics).  If you do not specify any, the list of schematics is
 obtained by reading the @code{import::src@var{N}} attributes (like
 @code{import::src0}, @code{import::src1}, etc).
 
+For compatibility with future extensions to the import file format,
+the generated file @emph{must not} start with the two characters
+@code{#%}.
+
+If a temporary file is needed the @code{TMPDIR} environment variable
+is used to select its location.
+
+Note that the programs @code{gnetlist} and @code{make} may be
+overridden by the user via the @code{make-program} and @code{gnetlist}
+@code{pcb} settings (i.e. in @code{~/.pcb/settings} or on the command
+line).
+
 %end-doc */
 
 static int
@@ -7430,19 +7462,36 @@ ActionImport (int argc, char **argv, int x, int y)
     }
   else if (strcasecmp (mode, "make") == 0)
     {
-      char *tmpfile = tempfile_name_new ("gnetlist_output");
-      char **cmd;
+      int must_free_tmpfile = 0;
+      char *tmpfile;
+      char *cmd[10];
       int i;
       char *srclist;
       int srclen;
+      char *user_outfile = NULL;
+      char *user_makefile = NULL;
+      char *user_target = NULL;
 
 
-      if (tmpfile == NULL) {
-	Message ("Could not create temp file");
-	return 1;
-      }
+      user_outfile = AttributeGet (PCB, "import::outfile");
+      user_makefile = AttributeGet (PCB, "import::makefile");
+      user_target = AttributeGet (PCB, "import::target");
+      if (user_outfile && !user_target)
+	user_target = user_outfile;
+
+      if (user_outfile)
+	tmpfile = user_outfile;
+      else
+	{
+	  tmpfile = tempfile_name_new ("gnetlist_output");
+	  if (tmpfile == NULL) {
+	    Message ("Could not create temp file");
+	    return 1;
+	  }
+	  must_free_tmpfile = 1;
+	}
 
-      srclen = sizeof("SRCLIB=") + 2;
+      srclen = sizeof("SRCLIST=") + 2;
       for (i=0; i<nsources; i++)
 	srclen += strlen (sources[i]) + 2;
       srclist = (char *) malloc (srclen);
@@ -7453,25 +7502,28 @@ ActionImport (int argc, char **argv, int x, int y)
 	    strcat (srclist, " ");
 	  strcat (srclist, sources[i]);
 	}
-
-      printf("Makefile!\n");
       
-      cmd = (char **) malloc (7 * sizeof (char *));
       cmd[0] = Settings.MakeProgram;
       cmd[1] = "-s";
       cmd[2] = Concat ("PCB=", PCB->Filename, NULL);
       cmd[3] = srclist;
       cmd[4] = Concat ("OUT=", tmpfile, NULL);
-      cmd[5] = "pcb_import";
-      cmd[6] = NULL;
+      i = 5;
+      if (user_makefile)
+	{
+	  cmd[i++] = "-f";
+	  cmd[i++] = user_makefile;
+	}
+      cmd[i++] = user_target ? user_target : "pcb_import";
+      cmd[i++] = NULL;
 
       if (pcb_spawnvp (cmd))
 	{
-	  unlink (tmpfile);
+	  if (must_free_tmpfile)
+	    unlink (tmpfile);
 	  free (cmd[2]);
 	  free (cmd[3]);
 	  free (cmd[4]);
-	  free (cmd);
 	  return 1;
 	}
 
@@ -7482,8 +7534,8 @@ ActionImport (int argc, char **argv, int x, int y)
       free (cmd[2]);
       free (cmd[3]);
       free (cmd[4]);
-      free (cmd);
-      tempfile_unlink (tmpfile);
+      if (must_free_tmpfile)
+	tempfile_unlink (tmpfile);
     }
   else
     {
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-24 16:16:42
      
     | 
| The branch, master has been updated
       via  e3774e28567f5ce142e204ab7e525ba954f49581 (commit)
       via  5f8274a12638d913e12f2d5b3e043a39e6970716 (commit)
      from  8bcf1ed4d6a9dfcb196682b551f0ebb00cf93fc8 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/action.c |    1 +
 src/buffer.c |   12 ++++++++++++
 2 files changed, 13 insertions(+), 0 deletions(-)
=================
 Commit Messages
=================
commit e3774e28567f5ce142e204ab7e525ba954f49581
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Check both FOO and FOO.fp for footprints.
:100644 100644 cdb34dd... 7daecf5... M	src/buffer.c
commit 5f8274a12638d913e12f2d5b3e043a39e6970716
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Check for NULL names.
:100644 100644 fff740c... 36125d2... M	src/action.c
=========
 Changes
=========
commit e3774e28567f5ce142e204ab7e525ba954f49581
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Check both FOO and FOO.fp for footprints.
diff --git a/src/buffer.c b/src/buffer.c
index cdb34dd..7daecf5 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -767,6 +767,7 @@ LoadFootprintByName (BufferTypePtr Buffer, char *Footprint)
   FootprintHashEntry *fpe;
   LibraryMenuType *menu;
   LibraryEntryType *entry;
+  char *with_fp = NULL;
 
   if (!footprint_hash)
     make_footprint_hash ();
@@ -774,6 +775,13 @@ LoadFootprintByName (BufferTypePtr Buffer, char *Footprint)
   fpe = search_footprint_hash (Footprint);
   if (!fpe)
     {
+      with_fp = Concat (Footprint, ".fp", NULL);
+      fpe = search_footprint_hash (with_fp);
+      if (fpe)
+	Footprint = with_fp;
+    }
+  if (!fpe)
+    {
       Message("Unable to load footprint %s\n", Footprint);
       return 1;
     }
@@ -784,6 +792,8 @@ LoadFootprintByName (BufferTypePtr Buffer, char *Footprint)
   if (entry->Template == (char *) -1)
     {
       i = LoadElementToBuffer (Buffer, entry->AllocatedMemory, True);
+      if (with_fp)
+	free (with_fp);
       return i ? 0 : 1;
     }
   else
@@ -795,6 +805,8 @@ LoadFootprintByName (BufferTypePtr Buffer, char *Footprint)
       i = LoadElementToBuffer (Buffer, args, False);
 
       free (args);
+      if (with_fp)
+	free (with_fp);
       return i ? 0 : 1;
     }
 
commit 5f8274a12638d913e12f2d5b3e043a39e6970716
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Check for NULL names.
diff --git a/src/action.c b/src/action.c
index fff740c..36125d2 100644
--- a/src/action.c
+++ b/src/action.c
@@ -6826,6 +6826,7 @@ static ElementType *
 find_element_by_refdes (char *refdes)
 {
   if (element_cache
+      && NAMEONPCB_NAME(element_cache)
       && strcmp (NAMEONPCB_NAME(element_cache), refdes) == 0)
     return element_cache;
 
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-24 00:05:25
      
     | 
| The branch, master has been updated
       via  8bcf1ed4d6a9dfcb196682b551f0ebb00cf93fc8 (commit)
      from  d8be4844b96e768c3a872f17d79b89bf6a5c84d8 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/main.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)
=================
 Commit Messages
=================
commit 8bcf1ed4d6a9dfcb196682b551f0ebb00cf93fc8
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Use strdup to copy environment strings into our settings structure.
    
    getenv returns a const char * which is part of the environment and must
    not be free'd.
:100644 100644 400aebc... bb79991... M	src/main.c
=========
 Changes
=========
commit 8bcf1ed4d6a9dfcb196682b551f0ebb00cf93fc8
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Use strdup to copy environment strings into our settings structure.
    
    getenv returns a const char * which is part of the environment and must
    not be free'd.
diff --git a/src/main.c b/src/main.c
index 400aebc..bb79991 100644
--- a/src/main.c
+++ b/src/main.c
@@ -563,6 +563,8 @@ REGISTER_ATTRIBUTES (main_attribute_list)
  */
      static void settings_post_process ()
 {
+  char *tmps;
+
   if (Settings.LibraryCommand[0] != PCB_DIR_SEPARATOR_C && Settings.LibraryCommand[0] != '.')
     {
       Settings.LibraryCommand
@@ -602,14 +604,18 @@ REGISTER_ATTRIBUTES (main_attribute_list)
    * to call
    */
   if (Settings.MakeProgram == NULL) {
-    Settings.MakeProgram = getenv ("PCB_MAKE_PROGRAM");
+    tmps = getenv ("PCB_MAKE_PROGRAM");
+    if (tmps != NULL)
+      Settings.MakeProgram = strdup (tmps);
   }
   if (Settings.MakeProgram == NULL) {
     Settings.MakeProgram = strdup ("make");
   }
 
   if (Settings.GnetlistProgram == NULL) {
-    Settings.GnetlistProgram = getenv ("PCB_GNETLIST");
+    tmps = getenv ("PCB_GNETLIST");
+    if (tmps != NULL)
+      Settings.GnetlistProgram = strdup (tmps);
   }
   if (Settings.GnetlistProgram == NULL) {
     Settings.GnetlistProgram = strdup ("gnetlist");
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-23 23:56:22
      
     | 
| The branch, master has been updated
       via  d8be4844b96e768c3a872f17d79b89bf6a5c84d8 (commit)
      from  e4d4198e6e771c8bd019bc61c34342aa003a217a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/main.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
=================
 Commit Messages
=================
commit d8be4844b96e768c3a872f17d79b89bf6a5c84d8
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Fix default gnetlist executable name to be "gnetlist"
    
    The old value "defgnetlist" appears to have been a mistake.
:100644 100644 9d61ffb... 400aebc... M	src/main.c
=========
 Changes
=========
commit d8be4844b96e768c3a872f17d79b89bf6a5c84d8
Author: Peter Clifton <pc...@ca...>
Commit: Peter Clifton <pc...@ca...>
    Fix default gnetlist executable name to be "gnetlist"
    
    The old value "defgnetlist" appears to have been a mistake.
diff --git a/src/main.c b/src/main.c
index 9d61ffb..400aebc 100644
--- a/src/main.c
+++ b/src/main.c
@@ -612,7 +612,7 @@ REGISTER_ATTRIBUTES (main_attribute_list)
     Settings.GnetlistProgram = getenv ("PCB_GNETLIST");
   }
   if (Settings.GnetlistProgram == NULL) {
-    Settings.GnetlistProgram = strdup ("defgnetlist");
+    Settings.GnetlistProgram = strdup ("gnetlist");
   }
 
 
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-23 23:53:51
      
     | 
| The branch, master has been updated
       via  e4d4198e6e771c8bd019bc61c34342aa003a217a (commit)
      from  f0b3b7b0ccc5b78f9e54b57dc5c02d454dd1de6a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/hid/gtk/gtkhid-main.c        |    4 ++-
 src/hid/gtk/gui-library-window.c |   62 ++++++++++++++++++++---------------
 src/hid/gtk/gui-log-window.c     |   54 ++++++++++++++++++++++++++----
 src/hid/gtk/gui-netlist-window.c |   66 ++++++++++++++++++++++++++-----------
 src/hid/gtk/gui.h                |    3 ++
 5 files changed, 133 insertions(+), 56 deletions(-)
=================
 Commit Messages
=================
commit e4d4198e6e771c8bd019bc61c34342aa003a217a
Author: Jared Casper <jar...@gm...>
Commit: Peter Clifton <pc...@ca...>
    hid/gtk: Prevent extra windows from showing unnecessarily
    
    Prevent the library, log, and netlist windows in the GTK HID from
    being shown unless explicitely requested.  This is done by splitting
    ghid_*_window_show into ghid_*_window_create, which creates all the
    resources for the window, and ghid_*_window_show, which actually shows
    the window (and optionally "presents" it, which pulls it to the
    foreground and gives it focus).
    
    Since the NetlistShow action no longer actually shows the netlist
    window, but sets the node/net that is shown in the window (if and when
    it is visible), this patch also adds NetlistPresent which presents the
    netlist window.  This can be added to the FindConnections menu item to
    restore the behavior of bringing up the netlist window on a find.
    
    Added an action LogShowOnAppend() which can restore the old behavior
    that the log window is shown whenever something is appended to it
    (currently off by default).
:100644 100644 cd30221... 81f0d77... M	src/hid/gtk/gtkhid-main.c
:100644 100644 4396d13... 8bd0d7b... M	src/hid/gtk/gui-library-window.c
:100644 100644 7d11221... 33e1940... M	src/hid/gtk/gui-log-window.c
:100644 100644 8fd5360... 0cfe51d... M	src/hid/gtk/gui-netlist-window.c
:100644 100644 deb3112... 610f30e... M	src/hid/gtk/gui.h
=========
 Changes
=========
commit e4d4198e6e771c8bd019bc61c34342aa003a217a
Author: Jared Casper <jar...@gm...>
Commit: Peter Clifton <pc...@ca...>
    hid/gtk: Prevent extra windows from showing unnecessarily
    
    Prevent the library, log, and netlist windows in the GTK HID from
    being shown unless explicitely requested.  This is done by splitting
    ghid_*_window_show into ghid_*_window_create, which creates all the
    resources for the window, and ghid_*_window_show, which actually shows
    the window (and optionally "presents" it, which pulls it to the
    foreground and gives it focus).
    
    Since the NetlistShow action no longer actually shows the netlist
    window, but sets the node/net that is shown in the window (if and when
    it is visible), this patch also adds NetlistPresent which presents the
    netlist window.  This can be added to the FindConnections menu item to
    restore the behavior of bringing up the netlist window on a find.
    
    Added an action LogShowOnAppend() which can restore the old behavior
    that the log window is shown whenever something is appended to it
    (currently off by default).
diff --git a/src/hid/gtk/gtkhid-main.c b/src/hid/gtk/gtkhid-main.c
index cd30221..81f0d77 100644
--- a/src/hid/gtk/gtkhid-main.c
+++ b/src/hid/gtk/gtkhid-main.c
@@ -1289,7 +1289,9 @@ LayerGroupsChanged (int argc, char **argv, int x, int y)
 static int
 LibraryChanged (int argc, char **argv, int x, int y)
 {
-  ghid_library_window_show (&ghid_port, FALSE);
+  /* No need to show the library window every time it changes...
+   *  ghid_library_window_show (&ghid_port, FALSE);
+   */
   return 0;
 }
 
diff --git a/src/hid/gtk/gui-library-window.c b/src/hid/gtk/gui-library-window.c
index 4396d13..8bd0d7b 100644
--- a/src/hid/gtk/gui-library-window.c
+++ b/src/hid/gtk/gui-library-window.c
@@ -139,46 +139,40 @@ library_window_callback_response (GtkDialog * dialog,
 }
 
 
-/*! \brief Opens a library dialog.
+/*! \brief Creates a library dialog.
  *  \par Function Description
- *  This function opens the library dialog for if it is not already.
- *  In this last case, it only raises the dialog.
+ *  This function create the library dialog if it is not already created.
+ *  It does not show the dialog, use ghid_library_window_show for that.
  *
  */
 void
-ghid_library_window_show (GHidPort * out, gboolean raise)
+ghid_library_window_create (GHidPort * out)
 {
   GtkWidget *current_tab, *entry_filter;
   GtkNotebook *notebook;
 
-  if (library_window == NULL)
-    {
-      library_window = g_object_new (GHID_TYPE_LIBRARY_WINDOW, NULL);
+  if (library_window)
+    return;
 
-      g_signal_connect (library_window,
-			"response",
-			G_CALLBACK (library_window_callback_response), NULL);
-      g_signal_connect (G_OBJECT (library_window), "configure_event",
-			G_CALLBACK (library_window_configure_event_cb), NULL);
-      gtk_window_set_default_size (GTK_WINDOW (library_window),
-				   ghidgui->library_window_width,
-				   ghidgui->library_window_height);
+  library_window = g_object_new (GHID_TYPE_LIBRARY_WINDOW, NULL);
 
-      gtk_window_set_title (GTK_WINDOW (library_window), _("PCB Library"));
-      gtk_window_set_wmclass (GTK_WINDOW (library_window), "PCB_Library",
-			      "PCB");
+  g_signal_connect (library_window,
+                    "response",
+                    G_CALLBACK (library_window_callback_response), NULL);
+  g_signal_connect (G_OBJECT (library_window), "configure_event",
+                    G_CALLBACK (library_window_configure_event_cb), NULL);
+  gtk_window_set_default_size (GTK_WINDOW (library_window),
+                               ghidgui->library_window_width,
+                               ghidgui->library_window_height);
 
-      gtk_widget_realize (library_window);
-      if (Settings.AutoPlace)
-	gtk_widget_set_uposition (GTK_WIDGET (library_window), 10, 10);
+  gtk_window_set_title (GTK_WINDOW (library_window), _("PCB Library"));
+  gtk_window_set_wmclass (GTK_WINDOW (library_window), "PCB_Library",
+                          "PCB");
 
-      gtk_widget_show (library_window);
+  gtk_widget_realize (library_window);
+  if (Settings.AutoPlace)
+    gtk_widget_set_uposition (GTK_WIDGET (library_window), 10, 10);
 
-    }
-  else if (raise)
-    {
-      gtk_window_present (GTK_WINDOW (library_window));
-    }
   gtk_editable_select_region (GTK_EDITABLE
 			      (GHID_LIBRARY_WINDOW (library_window)->
 			       entry_filter), 0, -1);
@@ -197,6 +191,20 @@ ghid_library_window_show (GHidPort * out, gboolean raise)
     }
 }
 
+/*! \brief Show the library dialog.
+ *  \par Function Description
+ *  This function show the library dialog, creating it if it is not
+ *  already created, and presents it to the user (brings it to the
+ *  front with focus).
+ */
+void
+ghid_library_window_show (GHidPort * out, gboolean raise)
+{
+  ghid_library_window_create (out);
+  gtk_widget_show_all (library_window);
+  if (raise)
+    gtk_window_present (GTK_WINDOW(library_window));
+}
 
 static GObjectClass *library_window_parent_class = NULL;
 
diff --git a/src/hid/gtk/gui-log-window.c b/src/hid/gtk/gui-log-window.c
index 7d11221..33e1940 100644
--- a/src/hid/gtk/gui-log-window.c
+++ b/src/hid/gtk/gui-log-window.c
@@ -42,7 +42,7 @@
 RCSID ("$Id$");
 
 static GtkWidget *log_window, *log_text;
-
+static gboolean log_show_on_append = FALSE;
 
 /* Remember user window resizes. */
 static gint
@@ -70,16 +70,12 @@ log_destroy_cb (GtkWidget * widget, gpointer data)
 }
 
 void
-ghid_log_window_show (gboolean raise)
+ghid_log_window_create ()
 {
   GtkWidget *vbox, *hbox, *button;
 
   if (log_window)
-    {
-      if (raise)
-        gtk_window_present(GTK_WINDOW(log_window));
-      return;
-    }
+    return;
 
   log_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   g_signal_connect (G_OBJECT (log_window), "destroy",
@@ -111,13 +107,24 @@ ghid_log_window_show (gboolean raise)
   gtk_widget_realize (log_window);
   if (Settings.AutoPlace)
     gtk_widget_set_uposition (GTK_WIDGET (log_window), 10, 10);
+}
+
+void
+ghid_log_window_show (gboolean raise)
+{
+  ghid_log_window_create ();
   gtk_widget_show_all (log_window);
+  if (raise)
+    gtk_window_present (GTK_WINDOW(log_window));
 }
 
 static void
 ghid_log_append_string (gchar * s)
 {
-  ghid_log_window_show (FALSE);
+  if (log_show_on_append)
+    ghid_log_window_show(FALSE);
+  else
+    ghid_log_window_create ();
   ghid_text_view_append (log_text, s);
 }
 
@@ -189,3 +196,34 @@ ghid_logv (const char *fmt, va_list args)
   ghid_log_append_string (msg_buffer);
 
 }
+
+static const char logshowonappend_syntax[] =
+  "LogShowOnAppend(true|false)";
+
+static const char logshowonappend_help[] =
+  "If true, the log window will be shown whenever something is appended \
+to it.  If false, the log will still be updated, but the window won't \
+be shown.";
+
+static gint
+GhidLogShowOnAppend (int argc, char **argv, int x, int y)
+{
+  char *a = argc == 1 ? argv[0] : "";
+
+  if (strncasecmp(a, "t", 1) == 0)
+    {
+      log_show_on_append = TRUE;
+    }
+  else if (strncasecmp(a, "f", 1) == 0)
+    {
+      log_show_on_append = FALSE;
+    }
+}
+
+HID_Action ghid_log_action_list[] = {
+  {"LogShowOnAppend", 0, GhidLogShowOnAppend,
+   logshowonappend_help, logshowonappend_syntax}
+  ,
+};
+
+REGISTER_ACTIONS (ghid_log_action_list)
diff --git a/src/hid/gtk/gui-netlist-window.c b/src/hid/gtk/gui-netlist-window.c
index 8fd5360..0cfe51d 100644
--- a/src/hid/gtk/gui-netlist-window.c
+++ b/src/hid/gtk/gui-netlist-window.c
@@ -589,11 +589,11 @@ node_get_node_from_name (gchar * node_name, LibraryMenuType ** node_net)
   if (!node_name)
     return NULL;
 
-  /* Have to force the netlist window shown because we need the treeview
+  /* Have to force the netlist window created because we need the treeview
      |  models constructed to do the search.
    */
   if (!netlist_window)
-    ghid_netlist_window_show (gport, FALSE);
+    ghid_netlist_window_create (gport);
 
   while (gtk_events_pending ())	/* Make sure everything gets built */
     gtk_main_iteration ();
@@ -648,9 +648,8 @@ netlist_destroy_cb (GtkWidget * widget, GHidPort * out)
   netlist_window = NULL;
 }
 
-
 void
-ghid_netlist_window_show (GHidPort * out, gboolean raise)
+ghid_netlist_window_create (GHidPort * out)
 {
   GtkWidget *vbox, *hbox, *button, *label, *sep;
   GtkTreeView *treeview;
@@ -665,12 +664,8 @@ ghid_netlist_window_show (GHidPort * out, gboolean raise)
     return;
 
   if (netlist_window)
-    {
-      if (raise)
-        gtk_window_present(GTK_WINDOW(netlist_window));
-      ghid_netlist_window_update (TRUE);
-      return;
-    }
+    return;
+
   netlist_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   g_signal_connect (G_OBJECT (netlist_window), "destroy",
 		    G_CALLBACK (netlist_destroy_cb), out);
@@ -798,7 +793,16 @@ ghid_netlist_window_show (GHidPort * out, gboolean raise)
   if (Settings.AutoPlace)
     gtk_widget_set_uposition (GTK_WIDGET (netlist_window), 10, 10);
 
+}
+
+void
+ghid_netlist_window_show (GHidPort * out, gboolean raise)
+{
+  ghid_netlist_window_create (out);
   gtk_widget_show_all (netlist_window);
+  ghid_netlist_window_update (TRUE);
+  if (raise)
+    gtk_window_present(GTK_WINDOW(netlist_window));
 }
 
 struct ggnfnn_task {
@@ -853,12 +857,12 @@ ghid_get_net_from_node_name (gchar * node_name, gboolean enabled_only)
   if (!node_name)
     return NULL;
 
-  /* Have to force the netlist window shown because we need the treeview
+  /* Have to force the netlist window created because we need the treeview
      |  models constructed so we can find the LibraryMenuType pointer the
      |  caller wants.
    */
   if (!netlist_window)
-    ghid_netlist_window_show (gport, FALSE);
+    ghid_netlist_window_create (gport);
 
   while (gtk_events_pending ())	/* Make sure everything gets built */
     gtk_main_iteration ();
@@ -951,11 +955,9 @@ ghid_netlist_window_update (gboolean init_nodes)
 {
   GtkTreeModel *model;
 
-  if (!netlist_window)
-    {
-      ghid_netlist_window_show (gport, FALSE);
-      return;
-    }
+  /* Make sure there is something to update */
+  ghid_netlist_window_create (gport);
+
   model = net_model;
   net_model = net_model_create ();
   gtk_tree_view_set_model (net_treeview, net_model);
@@ -985,18 +987,42 @@ GhidNetlistChanged (int argc, char **argv, int x, int y)
   return 0;
 }
 
+static const char netlistshow_syntax[] =
+"NetlistShow(pinname|netname)";
+
+static const char netlistshow_help[] =
+"Selects the given pinname or netname in the netlist window. Does not \
+show the window if it isn't already shown.";
+
 static gint
 GhidNetlistShow (int argc, char **argv, int x, int y)
 {
-  ghid_netlist_window_show (gport, FALSE);
+  ghid_netlist_window_create (gport);
   if (argc > 0)
     ghid_netlist_highlight_node(argv[0]);
   return 0;
 }
 
+static const char netlistpresent_syntax[] =
+"NetlistPresent()";
+
+static const char netlistpresent_help[] =
+"Presents the netlist window.";
+
+static gint
+GhidNetlistPresent (int argc, char **argv, int x, int y)
+{
+  ghid_netlist_window_show (gport, TRUE);
+  return 0;
+}
+
 HID_Action ghid_netlist_action_list[] = {
-  {"NetlistChanged", 0, GhidNetlistChanged},
-  {"NetlistShow", 0, GhidNetlistShow}
+  {"NetlistChanged", 0, GhidNetlistChanged,
+   netlistchanged_help, netlistchanged_syntax},
+  {"NetlistShow", 0, GhidNetlistShow,
+   netlistshow_help, netlistshow_syntax},
+  {"NetlistPresent", 0, GhidNetlistPresent,
+   netlistpresent_help, netlistpresent_syntax}
   ,
 };
 
diff --git a/src/hid/gtk/gui.h b/src/hid/gtk/gui.h
index deb3112..610f30e 100644
--- a/src/hid/gtk/gui.h
+++ b/src/hid/gtk/gui.h
@@ -475,6 +475,7 @@ void ghid_set_status_line_label (void);
 
 
 /* gui-netlist-window.c */
+void ghid_netlist_window_create (GHidPort * out);
 void ghid_netlist_window_show (GHidPort * out, gboolean raise);
 void ghid_netlist_window_update (gboolean init_nodes);
 void ghid_netlist_nodes_update (LibraryMenuType * net);
@@ -493,10 +494,12 @@ void ghid_command_use_command_window_sync (void);
 void ghid_keyref_window_show (gboolean raise);
 
 /* gui-library-window.c */
+void ghid_library_window_create (GHidPort * out);
 void ghid_library_window_show (GHidPort * out, gboolean raise);
 
 
 /* gui-log-window.c */
+void ghid_log_window_create ();
 void ghid_log_window_show (gboolean raise);
 void ghid_log (const char *fmt, ...);
 void ghid_logv (const char *fmt, va_list args);
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-22 05:36:32
      
     | 
| The branch, master has been updated
       via  f0b3b7b0ccc5b78f9e54b57dc5c02d454dd1de6a (commit)
      from  16896c571df3105c72619d4b720e3edeb1792103 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 doc/pcb.texi |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)
=================
 Commit Messages
=================
commit f0b3b7b0ccc5b78f9e54b57dc5c02d454dd1de6a
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Document that it is pcb-menu.res for the lesstif HID and gpcb-menu.res for the GTK+ HID.
:100644 100644 143d9e9... 526ad9a... M	doc/pcb.texi
=========
 Changes
=========
commit f0b3b7b0ccc5b78f9e54b57dc5c02d454dd1de6a
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Document that it is pcb-menu.res for the lesstif HID and gpcb-menu.res for the GTK+ HID.
diff --git a/doc/pcb.texi b/doc/pcb.texi
index 143d9e9..526ad9a 100644
--- a/doc/pcb.texi
+++ b/doc/pcb.texi
@@ -5637,7 +5637,10 @@ MainMenu = @{ # This is also a comment
 
 To best understand this section, you should find the
 @file{pcb-menu.res} file that your Pcb uses and refer to it for
-examples (@pxref{Menu Files and Defaults}).
+examples (@pxref{Menu Files and Defaults}).  Note that the lesstif
+GUI uses @file{pcb-menu.res} and the GTK+ GUI uses @file{gpcb-menu.res}.
+The file format is identical however and if so desired, one can make
+one file be a soft link to the other.
 
 A resource defines a menu when it meets certain semantic requirements.
 The menu hierarchy is reflected as a hierarchy of unnamed
@@ -5692,7 +5695,8 @@ documentation for these comments.
 @section Menu Files and Defaults
 
 Pcb will look for a file which defines its menus, trying the following
-names:
+names (the example is for the lesstif GUI, the GTK+ GUI has ``gpcb-menu.res''
+in place of ``pcb-menu.res''):
 
 @example
 ./pcb-menu.res
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-19 17:06:36
      
     | 
| The branch, master has been updated
       via  16896c571df3105c72619d4b720e3edeb1792103 (commit)
      from  26af64ecb8eef4ee42a653381f149549c52fb5e7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 lib/m4lib_to_newlib.sh |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
=================
 Commit Messages
=================
commit 16896c571df3105c72619d4b720e3edeb1792103
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Add some quoting to handle the case where there are spaces in some of the directory names.
    
    As noted by peque on irc, this script failed when the build directory was located
    somewhere that had a space in a directory name.  Adding the extra quotes fixes that.
:100644 100644 e609e33... ca491de... M	lib/m4lib_to_newlib.sh
=========
 Changes
=========
commit 16896c571df3105c72619d4b720e3edeb1792103
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Add some quoting to handle the case where there are spaces in some of the directory names.
    
    As noted by peque on irc, this script failed when the build directory was located
    somewhere that had a space in a directory name.  Adding the extra quotes fixes that.
diff --git a/lib/m4lib_to_newlib.sh b/lib/m4lib_to_newlib.sh
index e609e33..ca491de 100644
--- a/lib/m4lib_to_newlib.sh
+++ b/lib/m4lib_to_newlib.sh
@@ -118,7 +118,7 @@ if test -d ${outd} ; then
 else
 	mkdir -p ${outd}
 fi
-outd_full=`cd $outd && pwd`
+outd_full="`cd $outd && pwd`"
 
 $AWK '
 
@@ -325,7 +325,7 @@ function finish_libind() {
 	}
 }
 
-' cmd_path=./ do_png=$do_png outd=$outd_full awk=$AWK PCB="${PCB}" $contents
+' cmd_path=./ do_png=$do_png outd="$outd_full" awk=$AWK PCB="${PCB}" $contents
 
 
 
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-16 16:45:13
      
     | 
| The branch, master has been updated
       via  26af64ecb8eef4ee42a653381f149549c52fb5e7 (commit)
      from  4e4541f936ee1780e9c90e5e0a86cc1154955d08 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/hid/lesstif/main.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)
=================
 Commit Messages
=================
commit 26af64ecb8eef4ee42a653381f149549c52fb5e7
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Revert an unintended change.
:100644 100644 6dfc513... 84e095a... M	src/hid/lesstif/main.c
=========
 Changes
=========
commit 26af64ecb8eef4ee42a653381f149549c52fb5e7
Author: DJ Delorie <dj...@de...>
Commit: DJ Delorie <dj...@de...>
    Revert an unintended change.
diff --git a/src/hid/lesstif/main.c b/src/hid/lesstif/main.c
index 6dfc513..84e095a 100644
--- a/src/hid/lesstif/main.c
+++ b/src/hid/lesstif/main.c
@@ -3116,8 +3116,6 @@ lesstif_set_line_cap (hidGC gc, EndCapStyle style)
 static void
 lesstif_set_line_width (hidGC gc, int width)
 {
-  if (width == 1)
-    width = 0;
   gc->width = width;
 }
 
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-16 15:42:22
      
     | 
| The branch, master has been updated
       via  4e4541f936ee1780e9c90e5e0a86cc1154955d08 (commit)
      from  a0d58e34da81b9b92f60577ec283dfaac6e71d41 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/global.h |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
=================
 Commit Messages
=================
commit 4e4541f936ee1780e9c90e5e0a86cc1154955d08
Author: Ineiev <in...@gm...>
Commit: Peter Clifton <pc...@ca...>
    Fix broken build due to missing struct members
    
    Looks like a part of commit ef2efdd2a18a744eb715ffc1278aace1a2cded46
    was omitted by mistake.
:100644 100644 1462e50... 3794448... M	src/global.h
=========
 Changes
=========
commit 4e4541f936ee1780e9c90e5e0a86cc1154955d08
Author: Ineiev <in...@gm...>
Commit: Peter Clifton <pc...@ca...>
    Fix broken build due to missing struct members
    
    Looks like a part of commit ef2efdd2a18a744eb715ffc1278aace1a2cded46
    was omitted by mistake.
diff --git a/src/global.h b/src/global.h
index 1462e50..3794448 100644
--- a/src/global.h
+++ b/src/global.h
@@ -635,6 +635,8 @@ typedef struct			/* some resources... */
    *ScriptFilename,		/* PCB Actions script to execute on startup */
    *ActionString,		/* PCB Actions string to execute on startup */
    *FabAuthor,			/* Full name of author for FAB drawings */
+   *GnetlistProgram,		/* gnetlist program name */
+   *MakeProgram,		/* make program name */
    *InitialLayerStack;		/* If set, the initial layer stack is set to this */
   Boolean DumpMenuFile;		/* dump internal menu definitions */
   LocationType PinoutOffsetX,	/* offset of origin */
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-16 01:21:40
      
     | 
| The branch, master has been updated
       via  a0d58e34da81b9b92f60577ec283dfaac6e71d41 (commit)
      from  69e400c21211758b2b3c2d71dc6083c455396e80 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/find.c   |  211 +++++++++++++++++++++++++++++++++++++++-------------------
 src/search.c |   55 +++++++++------
 2 files changed, 175 insertions(+), 91 deletions(-)
=================
 Commit Messages
=================
commit a0d58e34da81b9b92f60577ec283dfaac6e71d41
Author: Ineiev <in...@gm...>
Commit: Peter Clifton <pc...@ca...>
    Fix bugs in the arc intersection routine. Bug #2942582
    
    This bug resulted in various false identificaton of connectivity
    between arcs and other object. Notes from Ineiev's emails:
    
    So I built a montecarlo; fixed some ugly unrealistic cases like thin
    arc merged in bloat and arc->Delta<-360; ran the test program (aat.c)
    several hours on different machins; that discovered no errors, though
    the number of points was not very high (a thousand or slightly more):
    the reference functions are really slow.
    
    That resulted in arc.bis.patch. I tested it also with already mentioned
    teardropped OSDCU.pcb and t1.pcb. Then, eliminate two precision losses.
    
    I feel I ought to stop here: the patch fixes many more bugs than
    originally reported.
:100644 100644 1962234... 6fb62b6... M	src/find.c
:100644 100644 07015f0... 4d450d3... M	src/search.c
=========
 Changes
=========
commit a0d58e34da81b9b92f60577ec283dfaac6e71d41
Author: Ineiev <in...@gm...>
Commit: Peter Clifton <pc...@ca...>
    Fix bugs in the arc intersection routine. Bug #2942582
    
    This bug resulted in various false identificaton of connectivity
    between arcs and other object. Notes from Ineiev's emails:
    
    So I built a montecarlo; fixed some ugly unrealistic cases like thin
    arc merged in bloat and arc->Delta<-360; ran the test program (aat.c)
    several hours on different machins; that discovered no errors, though
    the number of points was not very high (a thousand or slightly more):
    the reference functions are really slow.
    
    That resulted in arc.bis.patch. I tested it also with already mentioned
    teardropped OSDCU.pcb and t1.pcb. Then, eliminate two precision losses.
    
    I feel I ought to stop here: the patch fixes many more bugs than
    originally reported.
diff --git a/src/find.c b/src/find.c
index 1962234..6fb62b6 100644
--- a/src/find.c
+++ b/src/find.c
@@ -1327,11 +1327,61 @@ PVTouchesLine (LineTypePtr line)
   return (False);
 }
 
+/* reduce arc start angle and delta to 0..360 */
+static void
+normalize_angles (int *sa, int *d)
+{
+  if (*d < 0)
+    {
+      *sa += *d;
+      *d = - *d;
+    }
+  if (*d > 360) /* full circle */
+    *d = 360;
+  if (*sa < 0)
+    *sa = 360 - ((-*sa) % 360);
+  if (*sa >= 360)
+    *sa %= 360;
+}
+
+static int
+radius_crosses_arc (double x, double y, ArcTypePtr arc)
+{
+  double alpha = atan2 (y - arc->Y, -x + arc->X) * RAD_TO_DEG;
+  int sa = arc->StartAngle, d = arc->Delta;
+
+  normalize_angles (&sa, &d);
+  if (alpha < 0)
+    alpha += 360;
+  if ((double)sa <= alpha)
+    return (double)(sa + d) >= alpha;
+  return (double)(sa + d - 360) >= alpha;
+}
+
+static void
+get_arc_ends (double *box, ArcTypePtr arc)
+{
+  double ca, sa, angle;
+
+  angle  = arc->StartAngle;
+  angle *= M180;
+  ca = cos (angle);
+  sa = sin (angle);
+  box[0] = arc->X - arc->Width * ca;
+  box[1] = arc->Y + arc->Height * sa;
+
+  angle  = arc->StartAngle + arc->Delta;
+  angle *= M180;
+  ca = cos (angle);
+  sa = sin (angle);
+  box[2] = arc->X - arc->Width * ca;
+  box[3] = arc->Y + arc->Height * sa;
+}
 /* ---------------------------------------------------------------------------
  * check if two arcs intersect
  * first we check for circle intersections,
  * then find the actual points of intersection
- * and test them to see if they are on both arcs
+ * and test them to see if they are on arcs
  *
  * consider a, the distance from the center of arc 1
  * to the point perpendicular to the intersecting points.
@@ -1355,18 +1405,32 @@ PVTouchesLine (LineTypePtr line)
 static Boolean
 ArcArcIntersect (ArcTypePtr Arc1, ArcTypePtr Arc2)
 {
-  register float x, y, dx, dy, r1, r2, a, d, l, t, t2;
-  register LocationType pdx, pdy;
-  BoxTypePtr box;
-  BoxType box1, box2;
+  double x, y, dx, dy, r1, r2, a, d, l, t, t1, t2, dl;
+  LocationType pdx, pdy;
+  double box[4];
+
+  t = 0.5 * Arc1->Thickness + fBloat;
+  if (t < 0) /* too thin arc */
+    return (False);
+  t2 = 0.5 * Arc2->Thickness;
+  t1 = t2 + fBloat;
+  if (t1 < 0) /* too thin arc */
+    return (False);
+  /* try the end points first */
+  get_arc_ends (box, Arc1);
+  if (IsPointOnArc ((float) box[0], (float) box[1], (float)t, Arc2)
+      || IsPointOnArc ((float) box[2], (float) box[3], (float)t, Arc2))
+    return (True);
 
+  get_arc_ends (box, Arc2);
+  if (IsPointOnArc ((float) box[0], (float) box[1], (float)t1, Arc1)
+      || IsPointOnArc ((float) box[2], (float) box[3], (float)t1, Arc1))
+    return (True);
   pdx = Arc2->X - Arc1->X;
   pdy = Arc2->Y - Arc1->Y;
   l = pdx * pdx + pdy * pdy;
-  t = MAX (0.5 * Arc1->Thickness + fBloat, 0.0);
-  t2 = 0.5 * Arc2->Thickness;
   /* concentric arcs, simpler intersection conditions */
-  if (l == 0.0)
+  if (l < 0.5)
     {
       if ((Arc1->Width - t >= Arc2->Width - t2
            && Arc1->Width - t <=
@@ -1374,82 +1438,93 @@ ArcArcIntersect (ArcTypePtr Arc1, ArcTypePtr Arc2)
           || (Arc1->Width + t >=
               Arc2->Width - t2 && Arc1->Width + t <= Arc2->Width + t2))
         {
-          if ((Arc2->BoundingBox.X1 +
-               MAX (Arc2->Thickness + Bloat,
-                    0) >= Arc1->BoundingBox.X1
-               && Arc2->BoundingBox.X1 <=
-               Arc1->BoundingBox.X2
-               && Arc2->BoundingBox.Y1 +
-               MAX (Arc2->Thickness + Bloat,
-                    0) >= Arc1->BoundingBox.Y1
-               && Arc2->BoundingBox.Y1 <=
-               Arc1->BoundingBox.Y2)
-              || (Arc2->BoundingBox.X2 +
-                  MAX (Arc2->Thickness +
-                       Bloat,
-                       0) >=
-                  Arc1->BoundingBox.X1
-                  && Arc2->BoundingBox.X2 <=
-                  Arc1->BoundingBox.X2
-                  && Arc2->BoundingBox.Y2 +
-                  MAX (Arc2->Thickness +
-                       Bloat,
-                       0) >=
-                  Arc1->BoundingBox.Y1
-                  && Arc2->BoundingBox.Y2 <= Arc1->BoundingBox.Y2))
-            return (True);
+	  int sa1 = Arc1->StartAngle, d1 = Arc1->Delta;
+	  int sa2 = Arc2->StartAngle, d2 = Arc2->Delta;
+	  /* NB the endpoints have already been checked,
+	     so we just compare the angles */
+
+	  normalize_angles (&sa1, &d1);
+	  normalize_angles (&sa2, &d2);
+	  /* cases like sa1 == sa2 are catched when checking the endpoints */
+	  if (sa1 > sa2)
+	    {
+	      if (sa1 < sa2 + d2)
+		return (True);
+	      if (sa1 + d1 > 360 && sa1 + d1 - 360 > sa2)
+		return (True);
+	    }
+	  if (sa2 > sa1)
+	    {
+	      if (sa2 < sa1 + d1)
+		return (True);
+	      if (sa2 + d2 > 360 && sa2 + d2 - 360 > sa1)
+		return (True);
+	    }
         }
       return (False);
     }
-  r1 = Arc1->Width + t;
+  r1 = Arc1->Width;
+  r2 = Arc2->Width;
+  dl = sqrt (l);
+  if (dl > r1 + r2 || dl + r1 < r2
+      || dl + r2 < r1) /* arcs centerlines are too far or too near */
+    {
+      /* check the nearst to the other arc center point */
+      dx = pdx * r1 / dl;
+      dy = pdy * r1 / dl;
+      if (dl + r1 < r2) /* Arc1 inside Arc2 */
+	{
+	  dx = - dx;
+	  dy = - dy;
+	}
+
+      if (radius_crosses_arc (Arc1->X + dx, Arc1->Y + dy, Arc1)
+	  && IsPointOnArc ((float)(Arc1->X + dx), (float)(Arc1->Y + dy),
+			   (float)t, Arc2))
+	return (True);
+
+      dx = - pdx * r2 / dl;
+      dy = - pdy * r2 / dl;
+      if (dl + r2 < r1) /* Arc2 inside Arc1 */
+	{
+	  dx = - dx;
+	  dy = - dy;
+	}
+
+      if (radius_crosses_arc (Arc2->X + dx, Arc2->Y + dy, Arc2)
+	  && IsPointOnArc ((float)(Arc2->X + dx), (float)(Arc2->Y + dy),
+			   (float)t1, Arc1))
+	return (True);
+      return (False);
+    }
+
   r1 *= r1;
-  r2 = Arc2->Width + t2;
   r2 *= r2;
   a = 0.5 * (r1 - r2 + l) / l;
   r1 = r1 / l;
-  /* add a tiny positive number for round-off problems */
-  d = r1 - a * a + 1e-5;
-  /* the circles are too far apart to touch */
+  d = r1 - a * a;
+  /* the circles are too far apart to touch or probably just touch:
+     check the nearest point */
   if (d < 0)
-    return (False);
-  d = sqrt (d);
+    d = 0;
+  else
+    d = sqrt (d);
   x = Arc1->X + a * pdx;
   y = Arc1->Y + a * pdy;
   dx = d * pdx;
   dy = d * pdy;
-  if (x + dy >= Arc1->BoundingBox.X1
-      && x + dy <= Arc1->BoundingBox.X2
-      && y - dx >= Arc1->BoundingBox.Y1
-      && y - dx <= Arc1->BoundingBox.Y2
-      && x + dy >= Arc2->BoundingBox.X1
-      && x + dy <= Arc2->BoundingBox.X2
-      && y - dx >= Arc2->BoundingBox.Y1 && y - dx <= Arc2->BoundingBox.Y2)
+  if (radius_crosses_arc (x + dy, y - dx, Arc1)
+      && IsPointOnArc ((float)(x + dy), (float)(y - dx), (float)t, Arc2))
     return (True);
-
-  if (x - dy >= Arc1->BoundingBox.X1
-      && x - dy <= Arc1->BoundingBox.X2
-      && y + dx >= Arc1->BoundingBox.Y1
-      && y + dx <= Arc1->BoundingBox.Y2
-      && x - dy >= Arc2->BoundingBox.X1
-      && x - dy <= Arc2->BoundingBox.X2
-      && y + dx >= Arc2->BoundingBox.Y1 && y + dx <= Arc2->BoundingBox.Y2)
+  if (radius_crosses_arc (x + dy, y - dx, Arc2)
+      && IsPointOnArc ((float)(x + dy), (float)(y - dx), (float)t1, Arc1))
     return (True);
 
-  /* try the end points in case the ends don't actually pierce the outer radii */
-  box = GetArcEnds (Arc1);
-  box1 = *box;
-  box = GetArcEnds (Arc2);
-  box2 = *box;
-  if (IsPointOnArc
-      ((float) box1.X1, (float) box1.Y1, t,
-       Arc2) || IsPointOnArc ((float) box1.X2, (float) box1.Y2, t, Arc2))
+  if (radius_crosses_arc (x - dy, y + dx, Arc1)
+      && IsPointOnArc ((float)(x - dy), (float)(y + dx), (float)t, Arc2))
     return (True);
-
-  if (IsPointOnArc
-      ((float) box2.X1, (float) box2.Y1,
-       MAX (t2 + fBloat, 0.0), Arc1)
-      || IsPointOnArc ((float) box2.X2,
-                       (float) box2.Y2, MAX (t2 + fBloat, 0.0), Arc1))
+  if (radius_crosses_arc (x - dy, y + dx, Arc2)
+      && IsPointOnArc ((float)(x - dy), (float)(y + dx), (float)t1, Arc1))
     return (True);
   return (False);
 }
diff --git a/src/search.c b/src/search.c
index 07015f0..4d450d3 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1040,32 +1040,35 @@ IsPointInBox (LocationType X, LocationType Y, BoxTypePtr box, BDimension Radius)
 Boolean
 IsPointOnArc (float X, float Y, float Radius, ArcTypePtr Arc)
 {
-
-  register float x, y, dx, dy, r1, r2, a, d, l;
-  register float pdx, pdy;
-  int ang1, ang2, delta;
+  double x, y, dx, dy, r1, r2, a, d, l;
+  double pdx, pdy;
+  double ang1, ang2, ang0, delta;
   int startAngle, arcDelta;
 
   pdx = X - Arc->X;
   pdy = Y - Arc->Y;
   l = pdx * pdx + pdy * pdy;
+  Radius += 0.5 * Arc->Thickness;
+  if (Radius < 0) /* thin arc: trivial condition */
+    return (False);
   /* concentric arcs, simpler intersection conditions */
-  if (l == 0.0)
+  if (l < 0.5)
     {
-      if (Arc->Width <= Radius + 0.5 * Arc->Thickness)
+      if (Arc->Width <= Radius)
 	return (True);
       else
 	return (False);
     }
   r1 = Arc->Width;
+  r2 = Radius;
+  if (sqrt (l) < r2 - r1) /* the arc merged in the circle */
+    return (True);
   r1 *= r1;
-  r2 = Radius + 0.5 * Arc->Thickness;
   r2 *= r2;
   a = 0.5 * (r1 - r2 + l) / l;
   r1 = r1 / l;
-  /* add a tiny positive number for round-off problems */
-  d = r1 - a * a + 1e-5;
-  /* the circles are too far apart to touch */
+  d = r1 - a * a;
+  /* the circles are too far apart to touch or probably just touch */
   if (d < 0)
     return (False);
   /* project the points of intersection */
@@ -1077,32 +1080,38 @@ IsPointOnArc (float X, float Y, float Radius, ArcTypePtr Arc)
   /* arrgh! calculate the angles, and put them in a standard range */
   startAngle = Arc->StartAngle;
   arcDelta = Arc->Delta;
-  while (startAngle < 0)
-    startAngle += 360;
   if (arcDelta < 0)
     {
       startAngle += arcDelta;
       arcDelta = -arcDelta;
-      while (startAngle < 0)
-	startAngle += 360;
     }
+  if (arcDelta > 360)
+    arcDelta = 360;
+  while (startAngle < 0)
+    startAngle += 360;
+  while (startAngle > 360)
+    startAngle -= 360;
   ang1 = RAD_TO_DEG * atan2 ((y + dy), -(x + dx));
   if (ang1 < 0)
     ang1 += 360;
   ang2 = RAD_TO_DEG * atan2 ((y - dy), -(x - dx));
   if (ang2 < 0)
     ang2 += 360;
+  if (ang1 > ang2)
+    {
+      ang0 = ang1;
+      ang1 = ang2;
+      ang2 = ang0;
+    }
   delta = ang2 - ang1;
-  if (delta > 180)
-    delta -= 360;
-  else if (delta < -180)
-    delta += 360;
-  if (delta < 0)
+  /* ang0 does not belong to intersection range */
+  ang0 = RAD_TO_DEG * atan2 (-pdy, pdx);
+  if (ang0 < 0)
+    ang0 += 360;
+  if (ang0 > ang1 && ang0 < ang2) /* we need the other part of circle */
     {
-      ang1 += delta;
-      delta = -delta;
-      while (ang1 < 0)
-	ang1 += 360;
+      ang1 = ang2;
+      delta = 360 - delta;
     }
   if (ang1 >= startAngle && ang1 <= startAngle + arcDelta)
     return (True);
 | 
| 
      
      
      From: <gi...@gp...> - 2010-02-13 17:44:17
      
     | 
| The branch, master has been updated
       via  69e400c21211758b2b3c2d71dc6083c455396e80 (commit)
       via  ef2efdd2a18a744eb715ffc1278aace1a2cded46 (commit)
      from  24cc5981d799645300927af9251713bbc53a1f2e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
 Summary
=========
 src/action.c |    4 ++--
 src/main.c   |   28 ++++++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 2 deletions(-)
=================
 Commit Messages
=================
commit ef2efdd2a18a744eb715ffc1278aace1a2cded46
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Don't hardcode 'make' and 'gnetlist'.  Rather look for settings
    PCB_MAKE_PROGRAM, PCB_GNETLIST environment variables or command line
    values.  This should help those who may need a different 'make' (say
    gmake or bmake) or gnetlist.
:100644 100644 34df05e... a5f9771... M	src/action.c
:100644 100644 9fba9f8... 9d61ffb... M	src/main.c
=========
 Changes
=========
commit ef2efdd2a18a744eb715ffc1278aace1a2cded46
Author: Dan McMahill <da...@mc...>
Commit: Dan McMahill <da...@mc...>
    Don't hardcode 'make' and 'gnetlist'.  Rather look for settings
    PCB_MAKE_PROGRAM, PCB_GNETLIST environment variables or command line
    values.  This should help those who may need a different 'make' (say
    gmake or bmake) or gnetlist.
diff --git a/src/action.c b/src/action.c
index 34df05e..a5f9771 100644
--- a/src/action.c
+++ b/src/action.c
@@ -7397,7 +7397,7 @@ ActionImport (int argc, char **argv, int x, int y)
       }
 
       cmd = (char **) malloc ((6 + nsources) * sizeof (char *));
-      cmd[0] = "gnetlist";
+      cmd[0] =  Settings.GnetlistProgram;
       cmd[1] = "-g";
       cmd[2] = "pcblf";
       cmd[3] = "-o";
@@ -7448,7 +7448,7 @@ ActionImport (int argc, char **argv, int x, int y)
       printf("Makefile!\n");
       
       cmd = (char **) malloc (7 * sizeof (char *));
-      cmd[0] = "make";
+      cmd[0] = Settings.MakeProgram;
       cmd[1] = "-s";
       cmd[2] = Concat ("PCB=", PCB->Filename, NULL);
       cmd[3] = srclist;
diff --git a/src/main.c b/src/main.c
index 9fba9f8..9d61ffb 100644
--- a/src/main.c
+++ b/src/main.c
@@ -534,6 +534,11 @@ HID_Attribute main_attribute_list[] = {
   SSET (InitialLayerStack, "", "layer-stack",
 	"Initial layer stackup, for setting up an export."),
 
+  SSET (MakeProgram, NULL, "make-program",
+	"Sets the name and optionally full path to a make(3) program"),
+  SSET (GnetlistProgram, NULL, "gnetlist",
+	"Sets the name and optionally full path to the gnetlist(3) program"),
+
   ISET (PinoutOffsetX, 100, "pinout-offset-x", 0),
   ISET (PinoutOffsetY, 100, "pinout-offset-y", 0),
   ISET (PinoutTextOffsetX, 800, "pinout-text-offset-x", 0),
@@ -592,6 +597,25 @@ REGISTER_ATTRIBUTES (main_attribute_list)
 
   ParseRouteString (Settings.Routes, &Settings.RouteStyle[0], 1);
 
+  /*
+   * Make sure we have settings for some various programs we may wish
+   * to call
+   */
+  if (Settings.MakeProgram == NULL) {
+    Settings.MakeProgram = getenv ("PCB_MAKE_PROGRAM");
+  }
+  if (Settings.MakeProgram == NULL) {
+    Settings.MakeProgram = strdup ("make");
+  }
+
+  if (Settings.GnetlistProgram == NULL) {
+    Settings.GnetlistProgram = getenv ("PCB_GNETLIST");
+  }
+  if (Settings.GnetlistProgram == NULL) {
+    Settings.GnetlistProgram = strdup ("defgnetlist");
+  }
+
+
 }
 
 /* ---------------------------------------------------------------------- 
@@ -1030,6 +1054,10 @@ main (int argc, char *argv[])
 	      Settings.LibraryPath);
       printf ("Settings.LibraryTree       = \"%s\"\n", 
 	      Settings.LibraryTree);
+      printf ("Settings.MakeProgram = \"%s\"\n",
+	      UNKNOWN (Settings.MakeProgram));
+      printf ("Settings.GnetlistProgram = \"%s\"\n",
+	      UNKNOWN (Settings.GnetlistProgram));
 #endif
 
       gui->do_export (0);
 |