[gs-commits] ghostpdl branch, master, updated. jbig2dec-0.14-1756-g17ad4a1

[email protected] (Chris Liddell) Fri, 25 Oct 2019 14:43:45 +0000 (UTC)
Newsgroups gmane.comp.printing.ghostscript.cvs
Message-ID <[email protected]>
The ghostpdl branch, master has been updated
       via  17ad4a12dd40799655b71a93de1209a6a0f24204 (commit)
       via  62a1c3cdbb374d2f90b00f7aa276be50961c580a (commit)
       via  e80779ae9f53fac617d1416f7075a1b1b7f7688c (commit)
      from  9ae928f80e70e04e89f0c36a7b58332fb0a9b19d (commit)

----------------------------------------------------------------------
commit 17ad4a12dd40799655b71a93de1209a6a0f24204
Author: Chris Liddell <[email protected]>
Date:   Fri Oct 25 13:52:44 2019 +0100

    Coverity issues: Assignment of overlapping union members
    
    Strictly speaking assigning one element of union to another, overlapping
    element of a different size is undefined behavior, hence assign to intermediate
    variables before setting the other element in the union.
    
    Coverity #: 350159, 350173, 350205, 350176, 350215, 350192

diff --git a/base/gsfunc4.c b/base/gsfunc4.c
index 1508d49..f71fa63 100644
--- a/base/gsfunc4.c
+++ b/base/gsfunc4.c
@@ -305,9 +305,16 @@ fn_PtCr_evaluate(const gs_function_t *pfn_common, const float *in, float *out)
             vsp->value.f = gs_cos_degrees(vsp->value.f);
             continue;
         case PtCr_cvi:
-            vsp->value.i = (int)(vsp->value.f);
+        {
+           /* Strictly speaking assigning one element of union
+            * to another, overlapping element of a different size is
+            * undefined behavior, hence assign to an intermediate variable
+            */
+            int int1 = (int)(vsp->value.f);
+            vsp->value.i = int1;
             vsp->type = CVT_INT;
             continue;
+        }
         case PtCr_cvr:
             continue;	/* prepare handled it */
         case PtCr_div:
diff --git a/base/gsparam.c b/base/gsparam.c
index b235d86..80cb0b2 100644
--- a/base/gsparam.c
+++ b/base/gsparam.c
@@ -171,15 +171,25 @@ param_coerce_typed(gs_param_typed_value * pvalue, gs_param_type req_type,
      * right now we can't.  However, a 0-length heterogenous array
      * will satisfy a request for any specific type.
      */
+    /* Strictly speaking assigning one element of union
+     * to another, overlapping element of a different size is
+     * undefined behavior, hence assign to intermediate variables
+     */
     switch (pvalue->type /* actual type */ ) {
         case gs_param_type_int:
             switch (req_type) {
                 case gs_param_type_long:
-                    pvalue->value.l = pvalue->value.i;
+                {
+                    long l = (long)pvalue->value.i;
+                    pvalue->value.l = l;
                     goto ok;
+                }
                 case gs_param_type_float:
-                    pvalue->value.f = (float)pvalue->value.l;
+                {
+                    float fl = (float)pvalue->value.l;
+                    pvalue->value.f = fl;
                     goto ok;
+                }
                 default:
                     break;
             }
@@ -187,15 +197,22 @@ param_coerce_typed(gs_param_typed_value * pvalue, gs_param_type req_type,
         case gs_param_type_long:
             switch (req_type) {
                 case gs_param_type_int:
+                {
+                    int int1;
 #if ARCH_SIZEOF_INT < ARCH_SIZEOF_LONG
                     if (pvalue->value.l != (int)pvalue->value.l)
                         return_error(gs_error_rangecheck);
 #endif
-                    pvalue->value.i = (int)pvalue->value.l;
+                    int1 = (int)pvalue->value.l;
+                    pvalue->value.i = int1;
                     goto ok;
+                }
                 case gs_param_type_float:
-                    pvalue->value.f = (float)pvalue->value.l;
+                {
+                    float fl = (float)pvalue->value.l;
+                    pvalue->value.f = fl;
                     goto ok;
+                }
                 default:
                     break;
             }
diff --git a/pcl/pcl/pgparse.c b/pcl/pcl/pgparse.c
index aee4f41..d02f9da 100644
--- a/pcl/pcl/pgparse.c
+++ b/pcl/pcl/pgparse.c
@@ -272,7 +272,14 @@ hpgl_arg(const gs_memory_t * mem, hpgl_parser_state_t * pst)
                         pvalue->v_n.r = 0;
                         break;
                     case 1:
-                        pvalue->v_n.r = pvalue->v_n.i;
+                    {
+                       /* Strictly speaking assigning one element of union
+                        * to another, overlapping element of a different size is
+                        * undefined behavior, hence assign to an intermediate variable
+                        */
+                        double r = (double)pvalue->v_n.i;
+                        pvalue->v_n.r = r;
+                    }
                 }
                 parg->have_value = 2;
                 parg->frac_scale = 1.0;
diff --git a/psi/zfont2.c b/psi/zfont2.c
index 19c1e9e..6e424c9 100644
--- a/psi/zfont2.c
+++ b/psi/zfont2.c
@@ -1667,8 +1667,14 @@ undelta(ref *ops, unsigned int cnt)
     unsigned int i;
 
     for (i = 0; i < cnt; i++) {
-        if (!r_has_type(&ops[i], t_real))
-            make_real(&ops[i], (float)ops[i].value.intval);
+        if (!r_has_type(&ops[i], t_real)) {
+            /* Strictly speaking assigning one element of union
+             * to another, overlapping element of a different size is
+             * undefined behavior, hence assign to an intermediate variable
+             */
+            float fl = (float)ops[i].value.intval;
+            make_real(&ops[i], fl);
+        }
     }
     for (i = 1; i < cnt; i++) {
         make_real(&ops[i], ops[i].value.realval + ops[i - 1].value.realval);
diff --git a/psi/ztype.c b/psi/ztype.c
index f42f35e..94e5e03 100644
--- a/psi/ztype.c
+++ b/psi/ztype.c
@@ -304,7 +304,14 @@ zcvr(i_ctx_t *i_ctx_p)
 
     switch (r_type(op)) {
         case t_integer:
-            make_real(op, (float)op->value.intval);
+        {
+            /* Strictly speaking assigning one element of union
+             * to another, overlapping element of a different size is
+             * undefined behavior, hence assign to an intermediate variable
+             */
+            float fl = (float)op->value.intval;
+            make_real(op, fl);
+        }
         case t_real:
             return 0;
         default:

----------------------------------------------------------------------
commit 62a1c3cdbb374d2f90b00f7aa276be50961c580a
Author: Chris Liddell <[email protected]>
Date:   Fri Oct 25 13:30:56 2019 +0100

    Tweak the section on building with Visual Studio

diff --git a/doc/Make.htm b/doc/Make.htm
index 1af8bd1..7671514 100644
--- a/doc/Make.htm
+++ b/doc/Make.htm
@@ -922,7 +922,7 @@ to build the executable.</p>
 
 <h3><a name="Microsoft_build"></a>Microsoft Visual Studio</h3>
 
-<h4><a name="Using_the_MS_Development_Environment"> </a>Using Microsoft Visual Studio</h4>
+<h4><a name="Using_the_MS_Development_Environment"> </a><u>Using Microsoft Visual Studio</u></h4>
 <p>
 The Ghostscript source distribution ships with <code>project</code> and <code>solution</code>
 files for Visual Studio 2005 and later. These can be found in the <code>windows</code> directory.
@@ -937,6 +937,16 @@ configurations. In that case, you need to find the <code>Nmake</code> tab in the
 <code>Property Pages</code> and modify the appropriate entry: <code>Build Command Line</code>,
 <code>Rebuild All Command Line</code> and/or <code>Clean Command Line</code>.</p>
 <p>
+As mentioned above, <code>nmake</code> does not support parallel builds. If you
+have downloaded and are building the <code>GhostPDL</code> source archive (which contains
+Ghostscript, GhostPCL, GhostXPS, and GhostPDL "products"), the <code>GhostPDL.sln</code>
+contains individual projects for each product but, as a result of the limitations of <code>nmake</code>
+the products cannot be built in parallel, because <code>nmake's</code> lack of parallel build
+awareness means it cannot manage the dependencies shared between the products, and may fail as multiple
+builds attempt to access the same dependencies.
+<p> To build all the products in one action, use the <code>All</code> &quot;pseudo-project&quot;. The
+<code>All</code> project uses a single <code>nmake</code> invocation to build all the supported products.
+<p>
 NOTE: changing the <code>Output</code> property in the <code>Nmake</code> properties will not
 change the name of the executable - to do that requires editing of the <code>psi/msvc.mak</code>
 makefile, or you can add: <code>GS=myname.exe</code> to the <code>nmake</code> command line.</p>

----------------------------------------------------------------------
commit e80779ae9f53fac617d1416f7075a1b1b7f7688c
Author: Chris Liddell <[email protected]>
Date:   Thu Oct 24 10:15:19 2019 +0100

    Reduce confusion about contrib.mak dependency
    
    We have two contri.mak files, one in devices/ and one in contrib/, both have
    dependency declarations:
    CONTRIB_MAK=...
    
    This changes the devices/contrib.mak to use:
    DCONTRIB_MAK=...
    
    Prepending the 'D' to avoid the two getting muddled.

diff --git a/devices/contrib.mak b/devices/contrib.mak
index 9b4209e..7f1cf86 100644
--- a/devices/contrib.mak
+++ b/devices/contrib.mak
@@ -16,7 +16,7 @@
 # makefile for contributed device drivers.
 
 # Define the name of this makefile.
-CONTRIB_MAK=$(DEVSRC)contrib.mak $(TOP_MAKEFILES)
+DCONTRIB_MAK=$(DEVSRC)contrib.mak $(TOP_MAKEFILES)
 
 ###### --------------------------- Catalog -------------------------- ######
 
@@ -123,10 +123,10 @@ CONTRIB_MAK=$(DEVSRC)contrib.mak $(TOP_MAKEFILES)
 ###   please contact [email protected] if you have questions.  ###
 
 pe_=$(DEVOBJ)gdevpe.$(OBJ)
-$(DD)pe.dev : $(pe_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pe.dev : $(pe_) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETDEV) $(DD)pe $(pe_)
 
-$(DEVOBJ)gdevpe.$(OBJ) : $(DEVSRC)gdevpe.c $(GDEV) $(memory__h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevpe.$(OBJ) : $(DEVSRC)gdevpe.c $(GDEV) $(memory__h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevpe.$(OBJ) $(C_) $(DEVSRC)gdevpe.c
 
 ###### ----------------------- Other displays ------------------------ ######
@@ -137,10 +137,10 @@ $(DEVOBJ)gdevpe.$(OBJ) : $(DEVSRC)gdevpe.c $(GDEV) $(memory__h) $(CONTRIB_MAK) $
 
 # This is implemented as a 'printer' device.
 sonyfb_=$(DEVOBJ)gdevsnfb.$(OBJ)
-$(DD)sonyfb.dev : $(sonyfb_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)sonyfb.dev : $(sonyfb_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)sonyfb $(sonyfb_)
 
-$(DEVOBJ)gdevsnfb.$(OBJ) : $(DEVSRC)gdevsnfb.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevsnfb.$(OBJ) : $(DEVSRC)gdevsnfb.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevsnfb.$(OBJ) $(C_) $(DEVSRC)gdevsnfb.c
 
 ###### --------------- Memory-buffered printer devices --------------- ######
@@ -149,13 +149,13 @@ $(DEVOBJ)gdevsnfb.$(OBJ) : $(DEVSRC)gdevsnfb.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 
 bj10e_=$(DEVOBJ)gdevbj10.$(OBJ)
 
-$(DD)bj10e.dev : $(bj10e_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)bj10e.dev : $(bj10e_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)bj10e $(bj10e_)
 
-$(DD)bj200.dev : $(bj10e_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)bj200.dev : $(bj10e_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)bj200 $(bj10e_)
 
-$(DEVOBJ)gdevbj10.$(OBJ) : $(DEVSRC)gdevbj10.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevbj10.$(OBJ) : $(DEVSRC)gdevbj10.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevbj10.$(OBJ) $(C_) $(DEVSRC)gdevbj10.c
 
 ### ------------- The CalComp Raster Format ----------------------------- ###
@@ -164,10 +164,10 @@ $(DEVOBJ)gdevbj10.$(OBJ) : $(DEVSRC)gdevbj10.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###       questions.                                                      ###
 
 ccr_=$(DEVOBJ)gdevccr.$(OBJ)
-$(DD)ccr.dev : $(ccr_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)ccr.dev : $(ccr_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)ccr $(ccr_)
 
-$(DEVOBJ)gdevccr.$(OBJ) : $(DEVSRC)gdevccr.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevccr.$(OBJ) : $(DEVSRC)gdevccr.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevccr.$(OBJ) $(C_) $(DEVSRC)gdevccr.c
 
 ### The H-P DeskJet, PaintJet, and DesignJet family color printer devices.###
@@ -186,48 +186,48 @@ $(DEVOBJ)gdevccr.$(OBJ) : $(DEVSRC)gdevccr.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
 
 cdeskjet_=$(DEVOBJ)gdevcdj.$(OBJ) $(HPPCL)
 
-$(DD)cdeskjet.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdeskjet.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)cdeskjet $(cdeskjet_)
 
-$(DD)cdjcolor.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdjcolor.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)cdjcolor $(cdeskjet_)
 
-$(DD)cdjmono.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdjmono.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)cdjmono $(cdeskjet_)
 
-$(DD)cdj500.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdj500.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)cdj500 $(cdeskjet_)
 
-$(DD)cdj550.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cdj550.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)cdj550 $(cdeskjet_)
 
-$(DD)declj250.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)declj250.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)declj250 $(cdeskjet_)
 
-$(DD)dnj650c.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)dnj650c.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)dnj650c $(cdeskjet_)
 
-$(DD)lj4dith.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lj4dith.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)lj4dith $(cdeskjet_)
 
-$(DD)pj.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pj.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)pj $(cdeskjet_)
 
-$(DD)pjxl.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pjxl.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)pjxl $(cdeskjet_)
 
 # Note: the pjxl300 driver also works for the CopyJet.
-$(DD)pjxl300.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pjxl300.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)pjxl300 $(cdeskjet_)
 
 # Note: the BJC600 driver also works for the BJC4000.
-$(DD)bjc600.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)bjc600.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)bjc600 $(cdeskjet_)
 
-$(DD)bjc800.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)bjc800.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)bjc800 $(cdeskjet_)
 
-$(DD)escp.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)escp.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)escp $(cdeskjet_)
 
 # NB: you can also customise the build if required, using
@@ -238,15 +238,15 @@ gdevbjc_h=$(DEVSRC)gdevbjc.h
 
 $(DEVOBJ)gdevcdj.$(OBJ) : $(DEVSRC)gdevcdj.c $(std_h) $(PDEVH)\
  $(gsparam_h) $(gsstate_h) $(gxlum_h)\
- $(gdevbjc_h) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gdevbjc_h) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevcdj.$(OBJ) $(C_) $(DEVSRC)gdevcdj.c
 
 djet500c_=$(DEVOBJ)gdevdjtc.$(OBJ) $(HPPCL)
-$(DD)djet500c.dev : $(djet500c_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)djet500c.dev : $(djet500c_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)djet500c $(djet500c_)
 
 $(DEVOBJ)gdevdjtc.$(OBJ) : $(DEVSRC)gdevdjtc.c $(PDEVH) $(malloc__h) $(gdevpcl_h) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevdjtc.$(OBJ) $(C_) $(DEVSRC)gdevdjtc.c
 
 ### -------------------- The H-P Color LaserJet 5/5M -------------------- ###
@@ -262,24 +262,24 @@ $(DEVOBJ)gdevdjtc.$(OBJ) : $(DEVSRC)gdevdjtc.c $(PDEVH) $(malloc__h) $(gdevpcl_h
 
 cljet5_=$(DEVOBJ)gdevclj.$(OBJ) $(HPPCL)
 
-$(DD)cljet5.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cljet5.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)cljet5 $(cljet5_)
 
 # The cljet5pr driver has hacks for trying to handle page rotation.
 # The hacks only work with one special PCL interpreter.  Don't use it!
-$(DD)cljet5pr.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cljet5pr.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)cljet5pr $(cljet5_)
 
 $(DEVOBJ)gdevclj.$(OBJ) : $(DEVSRC)gdevclj.c $(math__h) $(PDEVH)\
- $(gx_h) $(gsparam_h) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gx_h) $(gsparam_h) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevclj.$(OBJ) $(C_) $(DEVSRC)gdevclj.c
 
 cljet5c_=$(DEVOBJ)gdevcljc.$(OBJ) $(HPPCL)
-$(DD)cljet5c.dev : $(DEVS_MAK) $(cljet5c_) $(GLD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cljet5c.dev : $(DEVS_MAK) $(cljet5c_) $(GLD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)cljet5c $(cljet5c_)
 
 $(DEVOBJ)gdevcljc.$(OBJ) : $(DEVSRC)gdevcljc.c $(math__h) $(PDEVH) $(gdevpcl_h) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevcljc.$(OBJ) $(C_) $(DEVSRC)gdevcljc.c
 
 ### --------------- The H-P LaserJet 3100 software device --------------- ###
@@ -291,17 +291,17 @@ $(DEVOBJ)gdevcljc.$(OBJ) : $(DEVSRC)gdevcljc.c $(math__h) $(PDEVH) $(gdevpcl_h)
 ###       Ulrich Schmid ([email protected]) if you have questions. ###
 
 lj3100sw_=$(DEVOBJ)gdevl31s.$(OBJ) $(DEVOBJ)gdevmeds.$(OBJ)
-$(DD)lj3100sw.dev : $(lj3100sw_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lj3100sw.dev : $(lj3100sw_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)lj3100sw $(lj3100sw_)
 
 gdevmeds_h=$(DEVSRC)gdevmeds.h
 
 $(DEVOBJ)gdevl31s.$(OBJ) : $(DEVSRC)gdevl31s.c $(gdevmeds_h) $(PDEVH) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevl31s.$(OBJ) $(C_) $(DEVSRC)gdevl31s.c
 
 $(DEVOBJ)gdevmeds.$(OBJ) : $(DEVSRC)gdevmeds.c $(AK) $(gdevmeds_h) \
- $(CONTRIB_MAK) $(MAKEDIRS)
+ $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevmeds.$(OBJ) $(C_) $(DEVSRC)gdevmeds.c
 
 ### ------ CoStar LabelWriter II II/Plus device ------ ###
@@ -309,13 +309,13 @@ $(DEVOBJ)gdevmeds.$(OBJ) : $(DEVSRC)gdevmeds.c $(AK) $(gdevmeds_h) \
 
 coslw_=$(DEVOBJ)gdevcslw.$(OBJ)
 
-$(DD)coslw2p.dev : $(coslw_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)coslw2p.dev : $(coslw_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)coslw2p $(coslw_)
 
-$(DD)coslwxl.dev : $(coslw_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)coslwxl.dev : $(coslw_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)coslwxl $(coslw_)
 
-$(DEVOBJ)gdevcslw.$(OBJ) : $(DEVSRC)gdevcslw.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevcslw.$(OBJ) : $(DEVSRC)gdevcslw.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevcslw.$(OBJ) $(C_) $(DEVSRC)gdevcslw.c
 
 ### ----------------- The generic Epson printer device ----------------- ###
@@ -327,21 +327,21 @@ $(DEVOBJ)gdevcslw.$(OBJ) : $(DEVSRC)gdevcslw.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 
 epson_=$(DEVOBJ)gdevepsn.$(OBJ)
 
-$(DD)epson.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)epson.dev : $(epson_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)epson $(epson_)
 
-$(DD)eps9mid.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)eps9mid.dev : $(epson_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)eps9mid $(epson_)
 
-$(DD)eps9high.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)eps9high.dev : $(epson_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)eps9high $(epson_)
 
-$(DEVOBJ)gdevepsn.$(OBJ) : $(DEVSRC)gdevepsn.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevepsn.$(OBJ) : $(DEVSRC)gdevepsn.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevepsn.$(OBJ) $(C_) $(DEVSRC)gdevepsn.c
 
 ### ----------------- The IBM Proprinter printer device ---------------- ###
 
-$(DD)ibmpro.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)ibmpro.dev : $(epson_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)ibmpro $(epson_)
 
 ### -------------- The Epson LQ-2550 color printer device -------------- ###
@@ -349,10 +349,10 @@ $(DD)ibmpro.dev : $(epson_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
 ###       Dave St. Clair ([email protected]) if you have questions.         ###
 
 epsonc_=$(DEVOBJ)gdevepsc.$(OBJ)
-$(DD)epsonc.dev : $(epsonc_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)epsonc.dev : $(epsonc_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)epsonc $(epsonc_)
 
-$(DEVOBJ)gdevepsc.$(OBJ) : $(DEVSRC)gdevepsc.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevepsc.$(OBJ) : $(DEVSRC)gdevepsc.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevepsc.$(OBJ) $(C_) $(DEVSRC)gdevepsc.c
 
 ### ------------- The Epson ESC/P 2 language printer devices ------------- ###
@@ -364,36 +364,36 @@ $(DEVOBJ)gdevepsc.$(OBJ) : $(DEVSRC)gdevepsc.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 
 ESCP2=$(DEVOBJ)gdevescp.$(OBJ)
 
-$(DEVOBJ)gdevescp.$(OBJ) : $(DEVSRC)gdevescp.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevescp.$(OBJ) : $(DEVSRC)gdevescp.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevescp.$(OBJ) $(C_) $(DEVSRC)gdevescp.c
 
-$(DD)ap3250.dev : $(ESCP2) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)ap3250.dev : $(ESCP2) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)ap3250 $(ESCP2)
 
-$(DD)st800.dev : $(ESCP2) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)st800.dev : $(ESCP2) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)st800 $(ESCP2)
 
 stcolor1_=$(DEVOBJ)gdevstc.$(OBJ) $(DEVOBJ)gdevstc1.$(OBJ) $(DEVOBJ)gdevstc2.$(OBJ)
 stcolor2_=$(DEVOBJ)gdevstc3.$(OBJ) $(DEVOBJ)gdevstc4.$(OBJ)
-$(DD)stcolor.dev : $(stcolor1_) $(stcolor2_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)stcolor.dev : $(stcolor1_) $(stcolor2_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)stcolor $(stcolor1_)
 	$(ADDMOD) $(DD)stcolor -obj $(stcolor2_)
 
 gdevstc_h=$(DEVSRC)gdevstc.h
 
-$(DEVOBJ)gdevstc.$(OBJ) : $(DEVSRC)gdevstc.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc.$(OBJ) : $(DEVSRC)gdevstc.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevstc.$(OBJ) $(C_) $(DEVSRC)gdevstc.c
 
-$(DEVOBJ)gdevstc1.$(OBJ) : $(DEVSRC)gdevstc1.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc1.$(OBJ) : $(DEVSRC)gdevstc1.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevstc1.$(OBJ) $(C_) $(DEVSRC)gdevstc1.c
 
-$(DEVOBJ)gdevstc2.$(OBJ) : $(DEVSRC)gdevstc2.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc2.$(OBJ) : $(DEVSRC)gdevstc2.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevstc2.$(OBJ) $(C_) $(DEVSRC)gdevstc2.c
 
-$(DEVOBJ)gdevstc3.$(OBJ) : $(DEVSRC)gdevstc3.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc3.$(OBJ) : $(DEVSRC)gdevstc3.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevstc3.$(OBJ) $(C_) $(DEVSRC)gdevstc3.c
 
-$(DEVOBJ)gdevstc4.$(OBJ) : $(DEVSRC)gdevstc4.c $(gdevstc_h) $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevstc4.$(OBJ) : $(DEVSRC)gdevstc4.c $(gdevstc_h) $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevstc4.$(OBJ) $(C_) $(DEVSRC)gdevstc4.c
 
 ### --------------- Ugly/Update -> Unified Printer Driver ---------------- ###
@@ -401,10 +401,10 @@ $(DEVOBJ)gdevstc4.$(OBJ) : $(DEVSRC)gdevstc4.c $(gdevstc_h) $(PDEVH) $(CONTRIB_M
 ###        Gunther Hess ([email protected])                                 ###
 
 uniprint_=$(DEVOBJ)gdevupd.$(OBJ)
-$(DD)uniprint.dev : $(uniprint_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)uniprint.dev : $(uniprint_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)uniprint $(uniprint_)
 
-$(DEVOBJ)gdevupd.$(OBJ) : $(DEVSRC)gdevupd.c $(PDEVH) $(gsparam_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevupd.$(OBJ) : $(DEVSRC)gdevupd.c $(PDEVH) $(gsparam_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevupd.$(OBJ) $(C_) $(DEVSRC)gdevupd.c
 
 ### ------------ The H-P PaintJet color printer device ----------------- ###
@@ -415,16 +415,16 @@ $(DEVOBJ)gdevupd.$(OBJ) : $(DEVSRC)gdevupd.c $(PDEVH) $(gsparam_h) $(CONTRIB_MAK
 
 PJET=$(DEVOBJ)gdevpjet.$(OBJ) $(HPPCL)
 
-$(DEVOBJ)gdevpjet.$(OBJ) : $(DEVSRC)gdevpjet.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevpjet.$(OBJ) : $(DEVSRC)gdevpjet.c $(PDEVH) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevpjet.$(OBJ) $(C_) $(DEVSRC)gdevpjet.c
 
-$(DD)lj250.dev : $(PJET) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lj250.dev : $(PJET) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)lj250 $(PJET)
 
-$(DD)paintjet.dev : $(PJET) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)paintjet.dev : $(PJET) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)paintjet $(PJET)
 
-$(DD)pjetxl.dev : $(PJET) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)pjetxl.dev : $(PJET) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)pjetxl $(PJET)
 
 ###--------------------- The Brother HL 7x0 printer --------------------- ### 
@@ -435,10 +435,10 @@ $(DD)pjetxl.dev : $(PJET) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
 ###         for questions about usage with the MFC6550MC Fax Machine.     ###
 
 hl7x0_=$(DEVOBJ)gdevhl7x.$(OBJ)
-$(DD)hl7x0.dev : $(hl7x0_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)hl7x0.dev : $(hl7x0_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)hl7x0 $(hl7x0_)
 
-$(DEVOBJ)gdevhl7x.$(OBJ) : $(DEVSRC)gdevhl7x.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevhl7x.$(OBJ) : $(DEVSRC)gdevhl7x.c $(PDEVH) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevhl7x.$(OBJ) $(C_) $(DEVSRC)gdevhl7x.c
 
 ### -------------- Imagen ImPress Laser Printer device ----------------- ###
@@ -449,13 +449,13 @@ $(DEVOBJ)gdevhl7x.$(OBJ) : $(DEVSRC)gdevhl7x.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_M
 ### You may also add -DA4 if needed for A4 paper.			 ###
 
 imagen_=$(DEVOBJ)gdevimgn.$(OBJ)
-$(DD)imagen.dev : $(imagen_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)imagen.dev : $(imagen_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)imagen $(imagen_)
 
 # Uncomment the first line for the ipr spooler, the second line for parallel.
 IMGN_OPT=
 #IMGN_OPT=-DUSE_BYTE_STREAM
-$(DEVOBJ)gdevimgn.$(OBJ) : $(DEVSRC)gdevimgn.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevimgn.$(OBJ) : $(DEVSRC)gdevimgn.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(IMGN_OPT) $(DEVO_)gdevimgn.$(OBJ) $(C_) $(DEVSRC)gdevimgn.c
 
 ### ------- The IBM 3852 JetPrinter color inkjet printer device -------- ###
@@ -466,10 +466,10 @@ $(DEVOBJ)gdevimgn.$(OBJ) : $(DEVSRC)gdevimgn.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###   width of the jetprinter itself.)                                   ###
 
 jetp3852_=$(DEVOBJ)gdev3852.$(OBJ)
-$(DD)jetp3852.dev : $(jetp3852_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)jetp3852.dev : $(jetp3852_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)jetp3852 $(jetp3852_)
 
-$(DEVOBJ)gdev3852.$(OBJ) : $(DEVSRC)gdev3852.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdev3852.$(OBJ) : $(DEVSRC)gdev3852.c $(PDEVH) $(gdevpcl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdev3852.$(OBJ) $(C_) $(DEVSRC)gdev3852.c
 
 ### ---------- The Canon LBP-8II and LIPS III printer devices ---------- ###
@@ -478,13 +478,13 @@ $(DEVOBJ)gdev3852.$(OBJ) : $(DEVSRC)gdev3852.c $(PDEVH) $(gdevpcl_h) $(CONTRIB_M
 ###       Lauri Paatero, [email protected]                     ###
 
 lbp8_=$(DEVOBJ)gdevlbp8.$(OBJ)
-$(DD)lbp8.dev : $(lbp8_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lbp8.dev : $(lbp8_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)lbp8 $(lbp8_)
 
-$(DD)lips3.dev : $(lbp8_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lips3.dev : $(lbp8_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)lips3 $(lbp8_)
 
-$(DEVOBJ)gdevlbp8.$(OBJ) : $(DEVSRC)gdevlbp8.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevlbp8.$(OBJ) : $(DEVSRC)gdevlbp8.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevlbp8.$(OBJ) $(C_) $(DEVSRC)gdevlbp8.c
 
 ### -------------- The Epson LP-8000 laser printer device -------------- ###
@@ -492,10 +492,10 @@ $(DEVOBJ)gdevlbp8.$(OBJ) : $(DEVSRC)gdevlbp8.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###       Oleg Fat'yanov <[email protected]> if you have questions.###
 
 lp8000_=$(DEVOBJ)gdevlp8k.$(OBJ)
-$(DD)lp8000.dev : $(lp8000_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lp8000.dev : $(lp8000_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)lp8000 $(lp8000_)
 
-$(DEVOBJ)gdevlp8k.$(OBJ) : $(DEVSRC)gdevlp8k.c $(PDEVH)  $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevlp8k.$(OBJ) : $(DEVSRC)gdevlp8k.c $(PDEVH)  $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevlp8k.$(OBJ) $(C_) $(DEVSRC)gdevlp8k.c
 
 ### -------------- The C.Itoh M8510 printer device --------------------- ###
@@ -503,10 +503,10 @@ $(DEVOBJ)gdevlp8k.$(OBJ) : $(DEVSRC)gdevlp8k.c $(PDEVH)  $(CONTRIB_MAK) $(MAKEDI
 ###       Smith <[email protected]> if you have questions.       ###
 
 m8510_=$(DEVOBJ)gdev8510.$(OBJ)
-$(DD)m8510.dev : $(m8510_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)m8510.dev : $(m8510_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)m8510 $(m8510_)
 
-$(DEVOBJ)gdev8510.$(OBJ) : $(DEVSRC)gdev8510.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdev8510.$(OBJ) : $(DEVSRC)gdev8510.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdev8510.$(OBJ) $(C_) $(DEVSRC)gdev8510.c
 
 ### -------------- 24pin Dot-matrix printer with 360DPI ---------------- ###
@@ -517,13 +517,13 @@ $(DEVOBJ)gdev8510.$(OBJ) : $(DEVSRC)gdev8510.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###      questions about the Epson LQ850.                                ###
 
 dm24_=$(DEVOBJ)gdevdm24.$(OBJ)
-$(DD)necp6.dev : $(dm24_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)necp6.dev : $(dm24_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)necp6 $(dm24_)
 
-$(DD)lq850.dev : $(dm24_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lq850.dev : $(dm24_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)lq850 $(dm24_)
 
-$(DEVOBJ)gdevdm24.$(OBJ) : $(DEVSRC)gdevdm24.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevdm24.$(OBJ) : $(DEVSRC)gdevdm24.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevdm24.$(OBJ) $(C_) $(DEVSRC)gdevdm24.c
 
 ### ----------------- Lexmark 5700 printer ----------------------------- ###
@@ -531,10 +531,10 @@ $(DEVOBJ)gdevdm24.$(OBJ) : $(DEVSRC)gdevdm24.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###   Stephen Taylor ([email protected]) if you have questions.   ###
 
 lxm5700m_=$(DEVOBJ)gdevlxm.$(OBJ)
-$(DD)lxm5700m.dev : $(lxm5700m_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lxm5700m.dev : $(lxm5700m_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)lxm5700m $(lxm5700m_)
 
-$(DEVOBJ)gdevlxm.$(OBJ) : $(DEVSRC)gdevlxm.c $(PDEVH) $(gsparams_h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevlxm.$(OBJ) : $(DEVSRC)gdevlxm.c $(PDEVH) $(gsparams_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevlxm.$(OBJ) $(C_) $(DEVSRC)gdevlxm.c
 
 ### ----------------- The Okidata MicroLine 182 device ----------------- ###
@@ -542,10 +542,10 @@ $(DEVOBJ)gdevlxm.$(OBJ) : $(DEVSRC)gdevlxm.c $(PDEVH) $(gsparams_h) $(CONTRIB_MA
 ###       Maarten Koning ([email protected]) if you have questions.            ###
 
 oki182_=$(DEVOBJ)gdevo182.$(OBJ)
-$(DD)oki182.dev : $(oki182_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)oki182.dev : $(oki182_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)oki182 $(oki182_)
 
-$(DEVOBJ)gdevo182.$(OBJ) : $(DEVSRC)gdevo182.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevo182.$(OBJ) : $(DEVSRC)gdevo182.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevo182.$(OBJ) $(C_) $(DEVSRC)gdevo182.c
 
 ### ------------- The Okidata IBM compatible printer device ------------ ###
@@ -553,10 +553,10 @@ $(DEVOBJ)gdevo182.$(OBJ) : $(DEVSRC)gdevo182.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###       Charles Mack ([email protected]) if you have questions.         ###
 
 okiibm_=$(DEVOBJ)gdevokii.$(OBJ)
-$(DD)okiibm.dev : $(okiibm_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)okiibm.dev : $(okiibm_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)okiibm $(okiibm_)
 
-$(DEVOBJ)gdevokii.$(OBJ) : $(DEVSRC)gdevokii.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevokii.$(OBJ) : $(DEVSRC)gdevokii.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevokii.$(OBJ) $(C_) $(DEVSRC)gdevokii.c
 
 ### ------------------ The Epson Stylus Photo devices ------------------ ###
@@ -564,10 +564,10 @@ $(DEVOBJ)gdevokii.$(OBJ) : $(DEVSRC)gdevokii.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###	Zoltan Kocsi ([email protected]) if you have questions.       ###
 
 photoex_=$(DEVOBJ)gdevphex.$(OBJ)
-$(DD)photoex.dev : $(photoex_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)photoex.dev : $(photoex_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)photoex $(photoex_)
 
-$(DEVOBJ)gdevphex.$(OBJ) : $(DEVSRC)gdevphex.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevphex.$(OBJ) : $(DEVSRC)gdevphex.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevphex.$(OBJ) $(C_) $(DEVSRC)gdevphex.c
 
 ### ------------- The Ricoh 4081 laser printer device ------------------ ###
@@ -575,11 +575,11 @@ $(DEVOBJ)gdevphex.$(OBJ) : $(DEVSRC)gdevphex.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###       please contact [email protected] if you have questions.      ###
 
 r4081_=$(DEVOBJ)gdev4081.$(OBJ)
-$(DD)r4081.dev : $(r4081_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)r4081.dev : $(r4081_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)r4081 $(r4081_)
 
 
-$(DEVOBJ)gdev4081.$(OBJ) : $(DEVSRC)gdev4081.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdev4081.$(OBJ) : $(DEVSRC)gdev4081.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdev4081.$(OBJ) $(C_) $(DEVSRC)gdev4081.c
 
 ### -------------------- Sony NWP533 printer device -------------------- ###
@@ -587,10 +587,10 @@ $(DEVOBJ)gdev4081.$(OBJ) : $(DEVSRC)gdev4081.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###       Kivinen ([email protected]) if you have questions.       ###
 
 nwp533_=$(DEVOBJ)gdevn533.$(OBJ)
-$(DD)nwp533.dev : $(nwp533_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)nwp533.dev : $(nwp533_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)nwp533 $(nwp533_)
 
-$(DEVOBJ)gdevn533.$(OBJ) : $(DEVSRC)gdevn533.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevn533.$(OBJ) : $(DEVSRC)gdevn533.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevn533.$(OBJ) $(C_) $(DEVSRC)gdevn533.c
 
 ### ----------------- The StarJet SJ48 device -------------------------- ###
@@ -599,7 +599,7 @@ $(DEVOBJ)gdevn533.$(OBJ) : $(DEVSRC)gdevn533.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###       please contact Mats Akerblom ([email protected]).           ###
 
 sj48_=$(DEVOBJ)gdevsj48.$(OBJ)
-$(DD)sj48.dev : $(sj48_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)sj48.dev : $(sj48_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)sj48 $(sj48_)
 
 $(DEVOBJ)gdevsj48.$(OBJ) : $(DEVSRC)gdevsj48.c $(PDEVH)
@@ -611,16 +611,16 @@ $(DEVOBJ)gdevsj48.$(OBJ) : $(DEVSRC)gdevsj48.c $(PDEVH)
 ###       if you have questions.                                         ###
 
 t4693d_=$(DEVOBJ)gdev4693.$(OBJ)
-$(DD)t4693d2.dev : $(t4693d_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)t4693d2.dev : $(t4693d_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)t4693d2 $(t4693d_)
 
-$(DD)t4693d4.dev : $(t4693d_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)t4693d4.dev : $(t4693d_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)t4693d4 $(t4693d_)
 
-$(DD)t4693d8.dev : $(t4693d_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)t4693d8.dev : $(t4693d_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)t4693d8 $(t4693d_)
 
-$(DEVOBJ)gdev4693.$(OBJ) : $(DEVSRC)gdev4693.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdev4693.$(OBJ) : $(DEVSRC)gdev4693.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdev4693.$(OBJ) $(C_) $(DEVSRC)gdev4693.c
 
 ### -------------------- Tektronix ink-jet printers -------------------- ###
@@ -628,10 +628,10 @@ $(DEVOBJ)gdev4693.$(OBJ) : $(DEVSRC)gdev4693.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIR
 ###       Karsten Spang ([email protected]) if you have questions.     ###
 
 tek4696_=$(DEVOBJ)gdevtknk.$(OBJ)
-$(DD)tek4696.dev : $(tek4696_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)tek4696.dev : $(tek4696_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)tek4696 $(tek4696_)
 
-$(DEVOBJ)gdevtknk.$(OBJ) : $(DEVSRC)gdevtknk.c $(PDEVH) $(malloc__h) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevtknk.$(OBJ) : $(DEVSRC)gdevtknk.c $(PDEVH) $(malloc__h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevtknk.$(OBJ) $(C_) $(DEVSRC)gdevtknk.c
 
 ###### ------------------------- Fax devices ------------------------- ######
@@ -642,12 +642,12 @@ $(DEVOBJ)gdevtknk.$(OBJ) : $(DEVSRC)gdevtknk.c $(PDEVH) $(malloc__h) $(CONTRIB_M
 
 cfax_=$(DEVOBJ)gdevcfax.$(OBJ)
 
-$(DD)cfax.dev : $(cfax_) $(DD)fax.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cfax.dev : $(cfax_) $(DD)fax.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETDEV) $(DD)cfax $(cfax_)
 	$(ADDMOD) $(DD)cfax -include $(DD)fax
 
 $(DEVOBJ)gdevcfax.$(OBJ) : $(DEVSRC)gdevcfax.c $(PDEVH)\
- $(gdevfax_h) $(scfx_h) $(strimpl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gdevfax_h) $(scfx_h) $(strimpl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevcfax.$(OBJ) $(C_) $(DEVSRC)gdevcfax.c
 
 ### ------------------------- The DigiFAX device ------------------------ ###
@@ -659,16 +659,16 @@ $(DEVOBJ)gdevcfax.$(OBJ) : $(DEVSRC)gdevcfax.c $(PDEVH)\
 
 dfax_=$(DEVOBJ)gdevdfax.$(OBJ)
 
-$(DD)dfaxlow.dev : $(dfax_) $(DD)tfax.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)dfaxlow.dev : $(dfax_) $(DD)tfax.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETDEV) $(DD)dfaxlow $(dfax_)
 	$(ADDMOD) $(DEVGEN)dfaxlow -include $(DD)tfax
 
-$(DD)dfaxhigh.dev : $(dfax_) $(DD)tfax.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)dfaxhigh.dev : $(dfax_) $(DD)tfax.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETDEV) $(DD)dfaxhigh $(dfax_)
 	$(ADDMOD) $(DEVGEN)dfaxhigh -include $(DD)tfax
 
 $(DEVOBJ)gdevdfax.$(OBJ) : $(DEVSRC)gdevdfax.c $(PDEVH)\
- $(gdevfax_h) $(gdevtfax_h) $(scfx_h) $(strimpl_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gdevfax_h) $(gdevtfax_h) $(scfx_h) $(strimpl_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevdfax.$(OBJ) $(C_) $(DEVSRC)gdevdfax.c
 
 ###### --------------------- Raster file formats --------------------- ######
@@ -678,10 +678,10 @@ $(DEVOBJ)gdevdfax.$(OBJ) : $(DEVSRC)gdevdfax.c $(PDEVH)\
 ###       Frederic Petrot ([email protected]) if you have questions.    ###
 
 cif_=$(DEVOBJ)gdevcif.$(OBJ)
-$(DD)cif.dev : $(cif_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)cif.dev : $(cif_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)cif $(cif_)
 
-$(DEVOBJ)gdevcif.$(OBJ) : $(DEVSRC)gdevcif.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DEVOBJ)gdevcif.$(OBJ) : $(DEVSRC)gdevcif.c $(PDEVH) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevcif.$(OBJ) $(C_) $(DEVSRC)gdevcif.c
 
 ### ------------------------- Inferno bitmaps -------------------------- ###
@@ -689,11 +689,11 @@ $(DEVOBJ)gdevcif.$(OBJ) : $(DEVSRC)gdevcif.c $(PDEVH) $(CONTRIB_MAK) $(MAKEDIRS)
 ###       Russ Cox <[email protected]> if you have questions.      ###
 
 inferno_=$(DEVOBJ)gdevifno.$(OBJ)
-$(DD)inferno.dev : $(inferno_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)inferno.dev : $(inferno_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)inferno $(inferno_)
 
 $(DEVOBJ)gdevifno.$(OBJ) : $(DEVSRC)gdevifno.c $(PDEVH)\
- $(gsparam_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gsparam_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevifno.$(OBJ) $(C_) $(DEVSRC)gdevifno.c
 
 ### --------------------------- MGR devices ---------------------------- ###
@@ -705,25 +705,25 @@ MGR=$(DEVOBJ)gdevmgr.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ)
 gdevmgr_h=$(DEVSRC)gdevmgr.h
 
 $(DEVOBJ)gdevmgr.$(OBJ) : $(DEVSRC)gdevmgr.c $(PDEVH)\
- $(gdevmgr_h) $(gdevpccm_h) $(CONTRIB_MAK) $(MAKEDIRS)
+ $(gdevmgr_h) $(gdevpccm_h) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(DEVCC) $(DEVO_)gdevmgr.$(OBJ) $(C_) $(DEVSRC)gdevmgr.c
 
-$(DD)mgrmono.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgrmono.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)mgrmono $(MGR)
 
-$(DD)mgrgray2.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgrgray2.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)mgrgray2 $(MGR)
 
-$(DD)mgrgray4.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgrgray4.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)mgrgray4 $(MGR)
 
-$(DD)mgrgray8.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgrgray8.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)mgrgray8 $(MGR)
 
-$(DD)mgr4.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgr4.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)mgr4 $(MGR)
 
-$(DD)mgr8.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)mgr8.dev : $(MGR) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)mgr8 $(MGR)
 
 #########################################################################
@@ -733,16 +733,16 @@ $(DD)mgr8.dev : $(MGR) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
 ### These drivers are based on patches on existing device drivers in the
 ### src/ directory, therefore they are not in addons/
 
-$(DD)ljet4pjl.dev : $(HPMONO) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)ljet4pjl.dev : $(HPMONO) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)ljet4pjl $(HPMONO)
 
-$(DD)lj4dithp.dev : $(cdeskjet_) $(DD)page.dev $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)lj4dithp.dev : $(cdeskjet_) $(DD)page.dev $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)lj4dithp $(cdeskjet_)
 
-$(DD)dj505j.dev : $(cdeskjet_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)dj505j.dev : $(cdeskjet_) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)dj505j $(cdeskjet_)
 
-$(DD)picty180.dev : $(cdeskjet_) $(CONTRIB_MAK) $(MAKEDIRS)
+$(DD)picty180.dev : $(cdeskjet_) $(DCONTRIB_MAK) $(MAKEDIRS)
 	$(SETPDEV) $(DD)picty180 $(cdeskjet_)
 
 #########################################################################


Summary of changes:
 base/gsfunc4.c      |   9 +-
 base/gsparam.c      |  25 +++++-
 devices/contrib.mak | 230 ++++++++++++++++++++++++++--------------------------
 doc/Make.htm        |  12 ++-
 pcl/pcl/pgparse.c   |   9 +-
 psi/zfont2.c        |  10 ++-
 psi/ztype.c         |   9 +-
 7 files changed, 179 insertions(+), 125 deletions(-)