diff -Nru ghostscript-9.15+dfsg/base/expat.mak ghostscript-9.16~dfsg~0/base/expat.mak --- ghostscript-9.15+dfsg/base/expat.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/expat.mak 2015-03-30 08:21:24.000000000 +0000 @@ -70,25 +70,25 @@ $(EXPATSRC)expat_external.h \ $(EXPATSRC)internal.h -$(EXPATOBJ)xmlparse.$(OBJ) : $(EXPATSRC)xmlparse.c $(expat_xmlparse_hdrs) +$(EXPATOBJ)xmlparse.$(OBJ) : $(EXPATSRC)xmlparse.c $(expat_xmlparse_hdrs) $(MAKEDIRS) $(EXPATCC) $(EXPATO_)xmlparse.$(OBJ) $(C_) $(EXPATSRC)xmlparse.c -$(EXPATOBJ)xmlrole.$(OBJ) : $(EXPATSRC)xmlrole.c $(expat_xmlrole_hdrs) +$(EXPATOBJ)xmlrole.$(OBJ) : $(EXPATSRC)xmlrole.c $(expat_xmlrole_hdrs) $(MAKEDIRS) $(EXPATCC) $(EXPATO_)xmlrole.$(OBJ) $(C_) $(EXPATSRC)xmlrole.c -$(EXPATOBJ)xmltok.$(OBJ) : $(EXPATSRC)xmltok.c $(expat_xmltok_hdrs) +$(EXPATOBJ)xmltok.$(OBJ) : $(EXPATSRC)xmltok.c $(expat_xmltok_hdrs) $(MAKEDIRS) $(EXPATCC) $(EXPATO_)xmltok.$(OBJ) $(C_) $(EXPATSRC)xmltok.c # Copy the target definition we want $(EXPATGEN)expat.dev : $(TOP_MAKEFILES) $(EXPAT_MAK) \ - $(EXPATGEN)expat_$(SHARE_EXPAT).dev + $(EXPATGEN)expat_$(SHARE_EXPAT).dev $(MAKEDIRS) $(CP_) $(EXPATGEN)expat_$(SHARE_EXPAT).dev $(EXPATGEN)expat.dev # Define the compiled in target -$(EXPATGEN)expat_0.dev : $(EXPAT_MAK) $(ECHOGS_XE) $(expat_) +$(EXPATGEN)expat_0.dev : $(EXPAT_MAK) $(ECHOGS_XE) $(expat_) $(MAKEDIRS) $(SETMOD) $(EXPATGEN)expat_0 $(expat_) # Define the external link target -$(EXPATGEN)expat_1.dev : $(EXPAT_MAK) $(ECHOGS_XE) +$(EXPATGEN)expat_1.dev : $(EXPAT_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(EXPATGEN)expat_1 -lib expat diff -Nru ghostscript-9.15+dfsg/base/fapi_bs.mak ghostscript-9.16~dfsg~0/base/fapi_bs.mak --- ghostscript-9.15+dfsg/base/fapi_bs.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/fapi_bs.mak 2015-03-30 08:21:24.000000000 +0000 @@ -36,7 +36,7 @@ $(GLOBJ)t2ktt.$(OBJ) $(GLOBJ)cstream.$(OBJ) $(GLOBJ)fft1hint.$(OBJ) $(GLOBJ)ghints.$(OBJ)\ $(GLOBJ)glyph.$(OBJ) $(GLOBJ)t1.$(OBJ) $(GLOBJ)t2kstrm.$(OBJ) $(GLOBJ)truetype.$(OBJ)\ $(GLOBJ)util.$(OBJ) $(GLOBJ)fnt.$(OBJ) $(GLOBJ)pclread.$(OBJ) $(GLOBJ)t2ksc.$(OBJ)\ - $(GLOBJ)write_t1.$(OBJ) $(GLOBJ)write_t2.$(OBJ) $(GLOBJ)wrfont.$(OBJ) + $(GLOBJ)write_t1.$(OBJ) $(GLOBJ)write_t2.$(OBJ) $(GLOBJ)wrfont.$(OBJ) $(MAKEDIRS) $(SETMOD) $(GLD)fapib1 $(GLOBJ)fapibstm.$(OBJ) $(ADDMOD) $(GLD)fapib1 $(GLOBJ)t2k.$(OBJ) $(GLOBJ)t2kextra.$(OBJ) $(GLOBJ)fnt.$(OBJ) $(ADDMOD) $(GLD)fapib1 $(GLOBJ)tsimem.$(OBJ) $(GLOBJ)t2ktt.$(OBJ) $(GLOBJ)util.$(OBJ) @@ -48,50 +48,50 @@ $(GLOBJ)fapibstm.$(OBJ) : $(FAPI_BS_MAK) $(GLSRC)fapibstm.c $(AK)\ $(stdio__h) $(memory__h) $(math__h) $(strmio_h)\ - $(ierrors_h) $(iplugin_h) $(gxfapi_h) $(gxfapi_h) $(gp_h) + $(ierrors_h) $(iplugin_h) $(gxfapi_h) $(gxfapi_h) $(gp_h) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)fapibstm.$(OBJ) $(C_) $(GLSRC)fapibstm.c -$(GLOBJ)t2k.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2k.c" $(AK) +$(GLOBJ)t2k.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2k.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)t2k.$(OBJ) $(C_) "$(BITSTREAM_LIB)t2k.c" -$(GLOBJ)t2kextra.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2kextra.c" $(AK) +$(GLOBJ)t2kextra.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2kextra.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)t2kextra.$(OBJ) $(C_) "$(BITSTREAM_LIB)t2kextra.c" -$(GLOBJ)tsimem.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)tsimem.c" $(AK) +$(GLOBJ)tsimem.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)tsimem.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)tsimem.$(OBJ) $(C_) "$(BITSTREAM_LIB)tsimem.c" -$(GLOBJ)t2ktt.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2ktt.c" $(AK) +$(GLOBJ)t2ktt.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2ktt.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)t2ktt.$(OBJ) $(C_) "$(BITSTREAM_LIB)t2ktt.c" -$(GLOBJ)cstream.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)cstream.c" $(AK) +$(GLOBJ)cstream.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)cstream.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)cstream.$(OBJ) $(C_) "$(BITSTREAM_LIB)cstream.c" -$(GLOBJ)fft1hint.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)fft1hint.c" $(AK) +$(GLOBJ)fft1hint.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)fft1hint.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)fft1hint.$(OBJ) $(C_) "$(BITSTREAM_LIB)fft1hint.c" -$(GLOBJ)ghints.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)ghints.c" $(AK) +$(GLOBJ)ghints.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)ghints.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)ghints.$(OBJ) $(C_) "$(BITSTREAM_LIB)ghints.c" -$(GLOBJ)glyph.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)glyph.c" $(AK) +$(GLOBJ)glyph.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)glyph.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)glyph.$(OBJ) $(C_) "$(BITSTREAM_LIB)glyph.c" -$(GLOBJ)t1.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t1.c" $(AK) +$(GLOBJ)t1.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t1.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)t1.$(OBJ) $(C_) "$(BITSTREAM_LIB)t1.c" -$(GLOBJ)t2kstrm.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2kstrm.c" $(AK) +$(GLOBJ)t2kstrm.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2kstrm.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)t2kstrm.$(OBJ) $(C_) "$(BITSTREAM_LIB)t2kstrm.c" -$(GLOBJ)truetype.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)truetype.c" $(AK) +$(GLOBJ)truetype.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)truetype.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)truetype.$(OBJ) $(C_) "$(BITSTREAM_LIB)truetype.c" -$(GLOBJ)util.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)util.c" $(AK) +$(GLOBJ)util.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)util.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)util.$(OBJ) $(C_) "$(BITSTREAM_LIB)util.c" -$(GLOBJ)fnt.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)fnt.c" $(AK) +$(GLOBJ)fnt.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)fnt.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)fnt.$(OBJ) $(C_) "$(BITSTREAM_LIB)fnt.c" -$(GLOBJ)pclread.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)pclread.c" $(AK) +$(GLOBJ)pclread.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)pclread.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)pclread.$(OBJ) $(C_) "$(BITSTREAM_LIB)pclread.c" -$(GLOBJ)t2ksc.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2ksc.c" $(AK) +$(GLOBJ)t2ksc.$(OBJ) : $(FAPI_BS_MAK) "$(BITSTREAM_LIB)t2ksc.c" $(AK) $(MAKEDIRS) $(GLCC) $(BITSTREAM_CFLAGS) $(BITSTREAM_INC) $(GLO_)t2ksc.$(OBJ) $(C_) "$(BITSTREAM_LIB)t2ksc.c" diff -Nru ghostscript-9.15+dfsg/base/fapi_ft.c ghostscript-9.16~dfsg~0/base/fapi_ft.c --- ghostscript-9.15+dfsg/base/fapi_ft.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/fapi_ft.c 2015-03-30 08:21:24.000000000 +0000 @@ -56,6 +56,9 @@ /* Note: structure definitions here start with FF_, which stands for 'FAPI FreeType". */ +#define ft_emprintf(m,s) { outflush(m); emprintf(m, s); outflush(m); } +#define ft_emprintf1(m,s,d) { outflush(m); emprintf1(m, s, d); outflush(m); } + typedef struct ff_server_s { gs_fapi_server fapi_server; @@ -790,12 +793,12 @@ if (ft_error == FT_Err_Too_Many_Hints) { #ifdef DEBUG if (gs_debug_c('1')) { - emprintf1(a_fapi_font->memory, + ft_emprintf1(a_fapi_font->memory, "TrueType glyph %"PRId64" uses more instructions than the declared maximum in the font.", a_char_ref->char_codes[0]); if (!ft_error_fb) { - emprintf(a_fapi_font->memory, + ft_emprintf(a_fapi_font->memory, " Continuing, falling back to notdef\n\n"); } } @@ -806,12 +809,12 @@ if (ft_error == FT_Err_Invalid_Argument) { #ifdef DEBUG if (gs_debug_c('1')) { - emprintf1(a_fapi_font->memory, + ft_emprintf1(a_fapi_font->memory, "TrueType parsing error in glyph %"PRId64" in the font.", a_char_ref->char_codes[0]); if (!ft_error_fb) { - emprintf(a_fapi_font->memory, + ft_emprintf(a_fapi_font->memory, " Continuing, falling back to notdef\n\n"); } } @@ -822,12 +825,12 @@ if (ft_error == FT_Err_Too_Many_Function_Defs) { #ifdef DEBUG if (gs_debug_c('1')) { - emprintf1(a_fapi_font->memory, + ft_emprintf1(a_fapi_font->memory, "TrueType instruction error in glyph %"PRId64" in the font.", a_char_ref->char_codes[0]); if (!ft_error_fb) { - emprintf(a_fapi_font->memory, + ft_emprintf(a_fapi_font->memory, " Continuing, falling back to notdef\n\n"); } } @@ -838,12 +841,12 @@ if (ft_error == FT_Err_Invalid_Glyph_Index) { #ifdef DEBUG if (gs_debug_c('1')) { - emprintf1(a_fapi_font->memory, + ft_emprintf1(a_fapi_font->memory, "FreeType is unable to find the glyph %"PRId64" in the font.", a_char_ref->char_codes[0]); if (!ft_error_fb) { - emprintf(a_fapi_font->memory, + ft_emprintf(a_fapi_font->memory, " Continuing, falling back to notdef\n\n"); } } diff -Nru ghostscript-9.15+dfsg/base/fapiufst.c ghostscript-9.16~dfsg~0/base/fapiufst.c --- ghostscript-9.15+dfsg/base/fapiufst.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/fapiufst.c 2015-03-30 08:21:24.000000000 +0000 @@ -82,6 +82,9 @@ #include "t1itype1.h" #endif +#define ufst_emprintf(m,s) { outflush(m); emprintf(m, s); outflush(m); } +#define ufst_emprintf1(m,s,d) { outflush(m); emprintf1(m, s, d); outflush(m); } + #if UFST_VERSION_MAJOR >= 6 && UFST_VERSION_MINOR >= 2 #undef true #undef false @@ -296,13 +299,13 @@ bPlugIn = TRUE; } else if (gs_debug_c('1')) - emprintf(r->mem, "Warning: Unknown UFST parameter ignored.\n"); + ufst_emprintf(r->mem, "Warning: Unknown UFST parameter ignored.\n"); } #if !NO_SYMSET_MAPPING if (!bSSdir) { strcpy(ufst_root_dir, "."); if (gs_debug_c('1')) - emprintf(r->mem, + ufst_emprintf(r->mem, "Warning: UFST_SSdir is not specified, will search *.ss files in the curent directory.\n"); } #endif @@ -319,7 +322,7 @@ } else { #ifdef FCO_RDR - emprintf(r->mem, + ufst_emprintf(r->mem, "Warning: UFST_PlugIn is not specified, some characters may be missing.\n"); #endif } @@ -340,7 +343,7 @@ { code = open_UFST(r, (byte *)server_param, server_param_size); if (code < 0) { - emprintf(r->mem, "Error opening the UFST font server.\n"); + ufst_emprintf(r->mem, "Error opening the UFST font server.\n"); return code; } } @@ -970,7 +973,7 @@ stream *f = sfopen(font_file_path, "rb", r->mem); if (f == NULL) { - emprintf1(r->mem, + ufst_emprintf1(r->mem, "fapiufst: Can't open %s\n", font_file_path); return gs_error_undefinedfilename; } diff -Nru ghostscript-9.15+dfsg/base/freetype.mak ghostscript-9.16~dfsg~0/base/freetype.mak --- ghostscript-9.15+dfsg/base/freetype.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/freetype.mak 2015-03-30 08:21:24.000000000 +0000 @@ -194,11 +194,11 @@ ft_winfonts=$(FTOBJ)winfnt.$(OBJ) # instantiate the requested build option (shared or compiled in) -$(FTGEN)freetype.dev : $(TOP_MAKEFILES) $(FTGEN)freetype_$(SHARE_FT).dev +$(FTGEN)freetype.dev : $(TOP_MAKEFILES) $(FTGEN)freetype_$(SHARE_FT).dev $(MAKEDIRS) $(CP_) $(FTGEN)freetype_$(SHARE_FT).dev $(FTGEN)freetype.dev # Define the shared version. -$(FTGEN)freetype_1.dev : $(TOP_MAKEFILES) $(FT_MAK) $(ECHOGS_XE) +$(FTGEN)freetype_1.dev : $(TOP_MAKEFILES) $(FT_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(FTGEN)freetype_1 -link $(FT_LIBS) # Define the non-shared version. @@ -206,7 +206,7 @@ $(ft_autofit) $(ft_base) $(ft_bdf) $(ft_cache) $(ft_cff) $(ft_cid) \ $(ft_gzip) $(ft_lzw) $(ft_pcf) $(ft_pfr) $(ft_psaux) $(ft_pshinter) \ $(ft_psnames) $(ft_raster) $(ft_smooth) $(ft_sfnt) $(ft_truetype) \ - $(ft_type1) $(ft_type42) $(ft_winfonts) + $(ft_type1) $(ft_type42) $(ft_winfonts) $(MAKEDIRS) $(SETMOD) $(FTGEN)freetype_0 $(ft_autofit) $(ADDMOD) $(FTGEN)freetype_0 $(ft_base) $(ADDMOD) $(FTGEN)freetype_0 $(ft_bdf) @@ -231,354 +231,354 @@ # custom build rules for each source file -$(FTOBJ)afangles.$(OBJ) : $(FTSRC)autofit$(D)afangles.c +$(FTOBJ)afangles.$(OBJ) : $(FTSRC)autofit$(D)afangles.c $(MAKEDIRS) $(FTCC) $(FTO_)afangles.$(OBJ) $(C_) $(FTSRC)autofit$(D)afangles.c -$(FTOBJ)afcjk.$(OBJ) : $(FTSRC)autofit$(D)afcjk.c +$(FTOBJ)afcjk.$(OBJ) : $(FTSRC)autofit$(D)afcjk.c $(MAKEDIRS) $(FTCC) $(FTO_)afcjk.$(OBJ) $(C_) $(FTSRC)autofit$(D)afcjk.c -$(FTOBJ)afdummy.$(OBJ) : $(FTSRC)autofit$(D)afdummy.c +$(FTOBJ)afdummy.$(OBJ) : $(FTSRC)autofit$(D)afdummy.c $(MAKEDIRS) $(FTCC) $(FTO_)afdummy.$(OBJ) $(C_) $(FTSRC)autofit$(D)afdummy.c -$(FTOBJ)afglobal.$(OBJ) : $(FTSRC)autofit$(D)afglobal.c +$(FTOBJ)afglobal.$(OBJ) : $(FTSRC)autofit$(D)afglobal.c $(MAKEDIRS) $(FTCC) $(FTO_)afglobal.$(OBJ) $(C_) $(FTSRC)autofit$(D)afglobal.c -$(FTOBJ)afhints.$(OBJ) : $(FTSRC)autofit$(D)afhints.c +$(FTOBJ)afhints.$(OBJ) : $(FTSRC)autofit$(D)afhints.c $(MAKEDIRS) $(FTCC) $(FTO_)afhints.$(OBJ) $(C_) $(FTSRC)autofit$(D)afhints.c -$(FTOBJ)afindic.$(OBJ) : $(FTSRC)autofit$(D)afindic.c +$(FTOBJ)afindic.$(OBJ) : $(FTSRC)autofit$(D)afindic.c $(MAKEDIRS) $(FTCC) $(FTO_)afindic.$(OBJ) $(C_) $(FTSRC)autofit$(D)afindic.c -$(FTOBJ)aflatin.$(OBJ) : $(FTSRC)autofit$(D)aflatin.c +$(FTOBJ)aflatin.$(OBJ) : $(FTSRC)autofit$(D)aflatin.c $(MAKEDIRS) $(FTCC) $(FTO_)aflatin.$(OBJ) $(C_) $(FTSRC)autofit$(D)aflatin.c -$(FTOBJ)afloader.$(OBJ) : $(FTSRC)autofit$(D)afloader.c +$(FTOBJ)afloader.$(OBJ) : $(FTSRC)autofit$(D)afloader.c $(MAKEDIRS) $(FTCC) $(FTO_)afloader.$(OBJ) $(C_) $(FTSRC)autofit$(D)afloader.c -$(FTOBJ)afmodule.$(OBJ) : $(FTSRC)autofit$(D)afmodule.c +$(FTOBJ)afmodule.$(OBJ) : $(FTSRC)autofit$(D)afmodule.c $(MAKEDIRS) $(FTCC) $(FTO_)afmodule.$(OBJ) $(C_) $(FTSRC)autofit$(D)afmodule.c -$(FTOBJ)afwarp.$(OBJ) : $(FTSRC)autofit$(D)afwarp.c +$(FTOBJ)afwarp.$(OBJ) : $(FTSRC)autofit$(D)afwarp.c $(MAKEDIRS) $(FTCC) $(FTO_)afwarp.$(OBJ) $(C_) $(FTSRC)autofit$(D)afwarp.c -$(FTOBJ)ftadvanc.$(OBJ) : $(FTSRC)base$(D)ftadvanc.c +$(FTOBJ)ftadvanc.$(OBJ) : $(FTSRC)base$(D)ftadvanc.c $(MAKEDIRS) $(FTCC) $(FTO_)ftadvanc.$(OBJ) $(C_) $(FTSRC)base$(D)ftadvanc.c -$(FTOBJ)ftcalc.$(OBJ) : $(FTSRC)base$(D)ftcalc.c +$(FTOBJ)ftcalc.$(OBJ) : $(FTSRC)base$(D)ftcalc.c $(MAKEDIRS) $(FTCC) $(FTO_)ftcalc.$(OBJ) $(C_) $(FTSRC)base$(D)ftcalc.c -$(FTOBJ)ftdbgmem.$(OBJ) : $(FTSRC)base$(D)ftdbgmem.c +$(FTOBJ)ftdbgmem.$(OBJ) : $(FTSRC)base$(D)ftdbgmem.c $(MAKEDIRS) $(FTCC) $(FTO_)ftdbgmem.$(OBJ) $(C_) $(FTSRC)base$(D)ftdbgmem.c -$(FTOBJ)ftgloadr.$(OBJ) : $(FTSRC)base$(D)ftgloadr.c +$(FTOBJ)ftgloadr.$(OBJ) : $(FTSRC)base$(D)ftgloadr.c $(MAKEDIRS) $(FTCC) $(FTO_)ftgloadr.$(OBJ) $(C_) $(FTSRC)base$(D)ftgloadr.c -$(FTOBJ)ftobjs.$(OBJ) : $(FTSRC)base$(D)ftobjs.c +$(FTOBJ)ftobjs.$(OBJ) : $(FTSRC)base$(D)ftobjs.c $(MAKEDIRS) $(FTCC) $(FTO_)ftobjs.$(OBJ) $(C_) $(FTSRC)base$(D)ftobjs.c -$(FTOBJ)ftoutln.$(OBJ) : $(FTSRC)base$(D)ftoutln.c +$(FTOBJ)ftoutln.$(OBJ) : $(FTSRC)base$(D)ftoutln.c $(MAKEDIRS) $(FTCC) $(FTO_)ftoutln.$(OBJ) $(C_) $(FTSRC)base$(D)ftoutln.c -$(FTOBJ)ftrfork.$(OBJ) : $(FTSRC)base$(D)ftrfork.c +$(FTOBJ)ftrfork.$(OBJ) : $(FTSRC)base$(D)ftrfork.c $(MAKEDIRS) $(FTCC) $(FTO_)ftrfork.$(OBJ) $(C_) $(FTSRC)base$(D)ftrfork.c -$(FTOBJ)ftsnames.$(OBJ) : $(FTSRC)base$(D)ftsnames.c +$(FTOBJ)ftsnames.$(OBJ) : $(FTSRC)base$(D)ftsnames.c $(MAKEDIRS) $(FTCC) $(FTO_)ftsnames.$(OBJ) $(C_) $(FTSRC)base$(D)ftsnames.c -$(FTOBJ)ftstream.$(OBJ) : $(FTSRC)base$(D)ftstream.c +$(FTOBJ)ftstream.$(OBJ) : $(FTSRC)base$(D)ftstream.c $(MAKEDIRS) $(FTCC) $(FTO_)ftstream.$(OBJ) $(C_) $(FTSRC)base$(D)ftstream.c -$(FTOBJ)fttrigon.$(OBJ) : $(FTSRC)base$(D)fttrigon.c +$(FTOBJ)fttrigon.$(OBJ) : $(FTSRC)base$(D)fttrigon.c $(MAKEDIRS) $(FTCC) $(FTO_)fttrigon.$(OBJ) $(C_) $(FTSRC)base$(D)fttrigon.c -$(FTOBJ)ftutil.$(OBJ) : $(FTSRC)base$(D)ftutil.c +$(FTOBJ)ftutil.$(OBJ) : $(FTSRC)base$(D)ftutil.c $(MAKEDIRS) $(FTCC) $(FTO_)ftutil.$(OBJ) $(C_) $(FTSRC)base$(D)ftutil.c -$(FTOBJ)ftbbox.$(OBJ) : $(FTSRC)base$(D)ftbbox.c +$(FTOBJ)ftbbox.$(OBJ) : $(FTSRC)base$(D)ftbbox.c $(MAKEDIRS) $(FTCC) $(FTO_)ftbbox.$(OBJ) $(C_) $(FTSRC)base$(D)ftbbox.c -$(FTOBJ)ftbdf.$(OBJ) : $(FTSRC)base$(D)ftbdf.c +$(FTOBJ)ftbdf.$(OBJ) : $(FTSRC)base$(D)ftbdf.c $(MAKEDIRS) $(FTCC) $(FTO_)ftbdf.$(OBJ) $(C_) $(FTSRC)base$(D)ftbdf.c -$(FTOBJ)ftbitmap.$(OBJ) : $(FTSRC)base$(D)ftbitmap.c +$(FTOBJ)ftbitmap.$(OBJ) : $(FTSRC)base$(D)ftbitmap.c $(MAKEDIRS) $(FTCC) $(FTO_)ftbitmap.$(OBJ) $(C_) $(FTSRC)base$(D)ftbitmap.c -$(FTOBJ)ftdebug.$(OBJ) : $(FTSRC)base$(D)ftdebug.c +$(FTOBJ)ftdebug.$(OBJ) : $(FTSRC)base$(D)ftdebug.c $(MAKEDIRS) $(FTCC) $(FTO_)ftdebug.$(OBJ) $(C_) $(FTSRC)base$(D)ftdebug.c -$(FTOBJ)ftgasp.$(OBJ) : $(FTSRC)base$(D)ftgasp.c +$(FTOBJ)ftgasp.$(OBJ) : $(FTSRC)base$(D)ftgasp.c $(MAKEDIRS) $(FTCC) $(FTO_)ftgasp.$(OBJ) $(C_) $(FTSRC)base$(D)ftgasp.c -$(FTOBJ)ftglyph.$(OBJ) : $(FTSRC)base$(D)ftglyph.c +$(FTOBJ)ftglyph.$(OBJ) : $(FTSRC)base$(D)ftglyph.c $(MAKEDIRS) $(FTCC) $(FTO_)ftglyph.$(OBJ) $(C_) $(FTSRC)base$(D)ftglyph.c -$(FTOBJ)ftgxval.$(OBJ) : $(FTSRC)base$(D)ftgxval.c +$(FTOBJ)ftgxval.$(OBJ) : $(FTSRC)base$(D)ftgxval.c $(MAKEDIRS) $(FTCC) $(FTO_)ftgxval.$(OBJ) $(C_) $(FTSRC)base$(D)ftgxval.c -$(FTOBJ)ftinit.$(OBJ) : $(FTSRC)base$(D)ftinit.c +$(FTOBJ)ftinit.$(OBJ) : $(FTSRC)base$(D)ftinit.c $(MAKEDIRS) $(FTCC) $(FTO_)ftinit.$(OBJ) $(C_) $(FTSRC)base$(D)ftinit.c -$(FTOBJ)ftlcdfil.$(OBJ) : $(FTSRC)base$(D)ftlcdfil.c +$(FTOBJ)ftlcdfil.$(OBJ) : $(FTSRC)base$(D)ftlcdfil.c $(MAKEDIRS) $(FTCC) $(FTO_)ftlcdfil.$(OBJ) $(C_) $(FTSRC)base$(D)ftlcdfil.c -$(FTOBJ)ftmm.$(OBJ) : $(FTSRC)base$(D)ftmm.c +$(FTOBJ)ftmm.$(OBJ) : $(FTSRC)base$(D)ftmm.c $(MAKEDIRS) $(FTCC) $(FTO_)ftmm.$(OBJ) $(C_) $(FTSRC)base$(D)ftmm.c -$(FTOBJ)ftotval.$(OBJ) : $(FTSRC)base$(D)ftotval.c +$(FTOBJ)ftotval.$(OBJ) : $(FTSRC)base$(D)ftotval.c $(MAKEDIRS) $(FTCC) $(FTO_)ftotval.$(OBJ) $(C_) $(FTSRC)base$(D)ftotval.c -$(FTOBJ)ftpfr.$(OBJ) : $(FTSRC)base$(D)ftpfr.c +$(FTOBJ)ftpfr.$(OBJ) : $(FTSRC)base$(D)ftpfr.c $(MAKEDIRS) $(FTCC) $(FTO_)ftpfr.$(OBJ) $(C_) $(FTSRC)base$(D)ftpfr.c -$(FTOBJ)ftstroke.$(OBJ) : $(FTSRC)base$(D)ftstroke.c +$(FTOBJ)ftstroke.$(OBJ) : $(FTSRC)base$(D)ftstroke.c $(MAKEDIRS) $(FTCC) $(FTO_)ftstroke.$(OBJ) $(C_) $(FTSRC)base$(D)ftstroke.c -$(FTOBJ)ftsynth.$(OBJ) : $(FTSRC)base$(D)ftsynth.c +$(FTOBJ)ftsynth.$(OBJ) : $(FTSRC)base$(D)ftsynth.c $(MAKEDIRS) $(FTCC) $(FTO_)ftsynth.$(OBJ) $(C_) $(FTSRC)base$(D)ftsynth.c -$(FTOBJ)ftsystem.$(OBJ) : $(FTSRC)base$(D)ftsystem.c +$(FTOBJ)ftsystem.$(OBJ) : $(FTSRC)base$(D)ftsystem.c $(MAKEDIRS) $(FTCC) $(FTO_)ftsystem.$(OBJ) $(C_) $(FTSRC)base$(D)ftsystem.c -$(FTOBJ)fttype1.$(OBJ) : $(FTSRC)base$(D)fttype1.c +$(FTOBJ)fttype1.$(OBJ) : $(FTSRC)base$(D)fttype1.c $(MAKEDIRS) $(FTCC) $(FTO_)fttype1.$(OBJ) $(C_) $(FTSRC)base$(D)fttype1.c -$(FTOBJ)ftwinfnt.$(OBJ) : $(FTSRC)base$(D)ftwinfnt.c +$(FTOBJ)ftwinfnt.$(OBJ) : $(FTSRC)base$(D)ftwinfnt.c $(MAKEDIRS) $(FTCC) $(FTO_)ftwinfnt.$(OBJ) $(C_) $(FTSRC)base$(D)ftwinfnt.c -$(FTOBJ)ftxf86.$(OBJ) : $(FTSRC)base$(D)ftxf86.c +$(FTOBJ)ftxf86.$(OBJ) : $(FTSRC)base$(D)ftxf86.c $(MAKEDIRS) $(FTCC) $(FTO_)ftxf86.$(OBJ) $(C_) $(FTSRC)base$(D)ftxf86.c -$(FTOBJ)ftpatent.$(OBJ) : $(FTSRC)base$(D)ftpatent.c +$(FTOBJ)ftpatent.$(OBJ) : $(FTSRC)base$(D)ftpatent.c $(MAKEDIRS) $(FTCC) $(FTO_)ftpatent.$(OBJ) $(C_) $(FTSRC)base$(D)ftpatent.c -$(FTOBJ)bdflib.$(OBJ) : $(FTSRC)bdf$(D)bdflib.c +$(FTOBJ)bdflib.$(OBJ) : $(FTSRC)bdf$(D)bdflib.c $(MAKEDIRS) $(FTCC) $(FTO_)bdflib.$(OBJ) $(C_) $(FTSRC)bdf$(D)bdflib.c -$(FTOBJ)bdfdrivr.$(OBJ) : $(FTSRC)bdf$(D)bdfdrivr.c +$(FTOBJ)bdfdrivr.$(OBJ) : $(FTSRC)bdf$(D)bdfdrivr.c $(MAKEDIRS) $(FTCC) $(FTO_)bdfdrivr.$(OBJ) $(C_) $(FTSRC)bdf$(D)bdfdrivr.c -$(FTOBJ)ftcbasic.$(OBJ) : $(FTSRC)cache$(D)ftcbasic.c +$(FTOBJ)ftcbasic.$(OBJ) : $(FTSRC)cache$(D)ftcbasic.c $(MAKEDIRS) $(FTCC) $(FTO_)ftcbasic.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcbasic.c -$(FTOBJ)ft2ccache.$(OBJ) : $(FTSRC)cache$(D)ftccache.c +$(FTOBJ)ft2ccache.$(OBJ) : $(FTSRC)cache$(D)ftccache.c $(MAKEDIRS) $(FTCC) $(FTO_)ft2ccache.$(OBJ) $(C_) $(FTSRC)cache$(D)ftccache.c -$(FTOBJ)ftccmap.$(OBJ) : $(FTSRC)cache$(D)ftccmap.c +$(FTOBJ)ftccmap.$(OBJ) : $(FTSRC)cache$(D)ftccmap.c $(MAKEDIRS) $(FTCC) $(FTO_)ftccmap.$(OBJ) $(C_) $(FTSRC)cache$(D)ftccmap.c -$(FTOBJ)ftcglyph.$(OBJ) : $(FTSRC)cache$(D)ftcglyph.c +$(FTOBJ)ftcglyph.$(OBJ) : $(FTSRC)cache$(D)ftcglyph.c $(MAKEDIRS) $(FTCC) $(FTO_)ftcglyph.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcglyph.c -$(FTOBJ)ftcimage.$(OBJ) : $(FTSRC)cache$(D)ftcimage.c +$(FTOBJ)ftcimage.$(OBJ) : $(FTSRC)cache$(D)ftcimage.c $(MAKEDIRS) $(FTCC) $(FTO_)ftcimage.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcimage.c -$(FTOBJ)ftcmanag.$(OBJ) : $(FTSRC)cache$(D)ftcmanag.c +$(FTOBJ)ftcmanag.$(OBJ) : $(FTSRC)cache$(D)ftcmanag.c $(MAKEDIRS) $(FTCC) $(FTO_)ftcmanag.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcmanag.c -$(FTOBJ)ftcmru.$(OBJ) : $(FTSRC)cache$(D)ftcmru.c +$(FTOBJ)ftcmru.$(OBJ) : $(FTSRC)cache$(D)ftcmru.c $(MAKEDIRS) $(FTCC) $(FTO_)ftcmru.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcmru.c -$(FTOBJ)ftcsbits.$(OBJ) : $(FTSRC)cache$(D)ftcsbits.c +$(FTOBJ)ftcsbits.$(OBJ) : $(FTSRC)cache$(D)ftcsbits.c $(MAKEDIRS) $(FTCC) $(FTO_)ftcsbits.$(OBJ) $(C_) $(FTSRC)cache$(D)ftcsbits.c -$(FTOBJ)cffobjs.$(OBJ) : $(FTSRC)cff$(D)cffobjs.c +$(FTOBJ)cffobjs.$(OBJ) : $(FTSRC)cff$(D)cffobjs.c $(MAKEDIRS) $(FTCC) $(FTO_)cffobjs.$(OBJ) $(C_) $(FTSRC)cff$(D)cffobjs.c -$(FTOBJ)cffload.$(OBJ) : $(FTSRC)cff$(D)cffload.c +$(FTOBJ)cffload.$(OBJ) : $(FTSRC)cff$(D)cffload.c $(MAKEDIRS) $(FTCC) $(FTO_)cffload.$(OBJ) $(C_) $(FTSRC)cff$(D)cffload.c -$(FTOBJ)cffgload.$(OBJ) : $(FTSRC)cff$(D)cffgload.c +$(FTOBJ)cffgload.$(OBJ) : $(FTSRC)cff$(D)cffgload.c $(MAKEDIRS) $(FTCC) $(FTO_)cffgload.$(OBJ) $(C_) $(FTSRC)cff$(D)cffgload.c -$(FTOBJ)cffparse.$(OBJ) : $(FTSRC)cff$(D)cffparse.c +$(FTOBJ)cffparse.$(OBJ) : $(FTSRC)cff$(D)cffparse.c $(MAKEDIRS) $(FTCC) $(FTO_)cffparse.$(OBJ) $(C_) $(FTSRC)cff$(D)cffparse.c -$(FTOBJ)cffcmap.$(OBJ) : $(FTSRC)cff$(D)cffcmap.c +$(FTOBJ)cffcmap.$(OBJ) : $(FTSRC)cff$(D)cffcmap.c $(MAKEDIRS) $(FTCC) $(FTO_)cffcmap.$(OBJ) $(C_) $(FTSRC)cff$(D)cffcmap.c -$(FTOBJ)cffdrivr.$(OBJ) : $(FTSRC)cff$(D)cffdrivr.c +$(FTOBJ)cffdrivr.$(OBJ) : $(FTSRC)cff$(D)cffdrivr.c $(MAKEDIRS) $(FTCC) $(FTO_)cffdrivr.$(OBJ) $(C_) $(FTSRC)cff$(D)cffdrivr.c -$(FTOBJ)cidparse.$(OBJ) : $(FTSRC)cid$(D)cidparse.c +$(FTOBJ)cidparse.$(OBJ) : $(FTSRC)cid$(D)cidparse.c $(MAKEDIRS) $(FTCC) $(FTO_)cidparse.$(OBJ) $(C_) $(FTSRC)cid$(D)cidparse.c -$(FTOBJ)cidload.$(OBJ) : $(FTSRC)cid$(D)cidload.c +$(FTOBJ)cidload.$(OBJ) : $(FTSRC)cid$(D)cidload.c $(MAKEDIRS) $(FTCC) $(FTO_)cidload.$(OBJ) $(C_) $(FTSRC)cid$(D)cidload.c -$(FTOBJ)cidriver.$(OBJ) : $(FTSRC)cid$(D)cidriver.c +$(FTOBJ)cidriver.$(OBJ) : $(FTSRC)cid$(D)cidriver.c $(MAKEDIRS) $(FTCC) $(FTO_)cidriver.$(OBJ) $(C_) $(FTSRC)cid$(D)cidriver.c -$(FTOBJ)cidgload.$(OBJ) : $(FTSRC)cid$(D)cidgload.c +$(FTOBJ)cidgload.$(OBJ) : $(FTSRC)cid$(D)cidgload.c $(MAKEDIRS) $(FTCC) $(FTO_)cidgload.$(OBJ) $(C_) $(FTSRC)cid$(D)cidgload.c -$(FTOBJ)cidobjs.$(OBJ) : $(FTSRC)cid$(D)cidobjs.c +$(FTOBJ)cidobjs.$(OBJ) : $(FTSRC)cid$(D)cidobjs.c $(MAKEDIRS) $(FTCC) $(FTO_)cidobjs.$(OBJ) $(C_) $(FTSRC)cid$(D)cidobjs.c -$(FTOBJ)ftgzip.$(OBJ) : $(FTSRC)gzip$(D)ftgzip.c +$(FTOBJ)ftgzip.$(OBJ) : $(FTSRC)gzip$(D)ftgzip.c $(MAKEDIRS) $(FTCC) $(FTO_)ftgzip.$(OBJ) $(C_) $(FTSRC)gzip$(D)ftgzip.c -$(FTOBJ)ftlzw.$(OBJ) : $(FTSRC)lzw$(D)ftlzw.c +$(FTOBJ)ftlzw.$(OBJ) : $(FTSRC)lzw$(D)ftlzw.c $(MAKEDIRS) $(FTCC) $(FTO_)ftlzw.$(OBJ) $(C_) $(FTSRC)lzw$(D)ftlzw.c -$(FTOBJ)pcfdrivr.$(OBJ) : $(FTSRC)pcf$(D)pcfdrivr.c +$(FTOBJ)pcfdrivr.$(OBJ) : $(FTSRC)pcf$(D)pcfdrivr.c $(MAKEDIRS) $(FTCC) $(FTO_)pcfdrivr.$(OBJ) $(C_) $(FTSRC)pcf$(D)pcfdrivr.c -$(FTOBJ)pcfread.$(OBJ) : $(FTSRC)pcf$(D)pcfread.c +$(FTOBJ)pcfread.$(OBJ) : $(FTSRC)pcf$(D)pcfread.c $(MAKEDIRS) $(FTCC) $(FTO_)pcfread.$(OBJ) $(C_) $(FTSRC)pcf$(D)pcfread.c -$(FTOBJ)pcfutil.$(OBJ) : $(FTSRC)pcf$(D)pcfutil.c +$(FTOBJ)pcfutil.$(OBJ) : $(FTSRC)pcf$(D)pcfutil.c $(MAKEDIRS) $(FTCC) $(FTO_)pcfutil.$(OBJ) $(C_) $(FTSRC)pcf$(D)pcfutil.c -$(FTOBJ)pfrload.$(OBJ) : $(FTSRC)pfr$(D)pfrload.c +$(FTOBJ)pfrload.$(OBJ) : $(FTSRC)pfr$(D)pfrload.c $(MAKEDIRS) $(FTCC) $(FTO_)pfrload.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrload.c -$(FTOBJ)pfrgload.$(OBJ) : $(FTSRC)pfr$(D)pfrgload.c +$(FTOBJ)pfrgload.$(OBJ) : $(FTSRC)pfr$(D)pfrgload.c $(MAKEDIRS) $(FTCC) $(FTO_)pfrgload.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrgload.c -$(FTOBJ)pfrcmap.$(OBJ) : $(FTSRC)pfr$(D)pfrcmap.c +$(FTOBJ)pfrcmap.$(OBJ) : $(FTSRC)pfr$(D)pfrcmap.c $(MAKEDIRS) $(FTCC) $(FTO_)pfrcmap.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrcmap.c -$(FTOBJ)pfrdrivr.$(OBJ) : $(FTSRC)pfr$(D)pfrdrivr.c +$(FTOBJ)pfrdrivr.$(OBJ) : $(FTSRC)pfr$(D)pfrdrivr.c $(MAKEDIRS) $(FTCC) $(FTO_)pfrdrivr.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrdrivr.c -$(FTOBJ)pfrsbit.$(OBJ) : $(FTSRC)pfr$(D)pfrsbit.c +$(FTOBJ)pfrsbit.$(OBJ) : $(FTSRC)pfr$(D)pfrsbit.c $(MAKEDIRS) $(FTCC) $(FTO_)pfrsbit.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrsbit.c -$(FTOBJ)pfrobjs.$(OBJ) : $(FTSRC)pfr$(D)pfrobjs.c +$(FTOBJ)pfrobjs.$(OBJ) : $(FTSRC)pfr$(D)pfrobjs.c $(MAKEDIRS) $(FTCC) $(FTO_)pfrobjs.$(OBJ) $(C_) $(FTSRC)pfr$(D)pfrobjs.c -$(FTOBJ)psobjs.$(OBJ) : $(FTSRC)psaux$(D)psobjs.c +$(FTOBJ)psobjs.$(OBJ) : $(FTSRC)psaux$(D)psobjs.c $(MAKEDIRS) $(FTCC) $(FTO_)psobjs.$(OBJ) $(C_) $(FTSRC)psaux$(D)psobjs.c -$(FTOBJ)t1decode.$(OBJ) : $(FTSRC)psaux$(D)t1decode.c +$(FTOBJ)t1decode.$(OBJ) : $(FTSRC)psaux$(D)t1decode.c $(MAKEDIRS) $(FTCC) $(FTO_)t1decode.$(OBJ) $(C_) $(FTSRC)psaux$(D)t1decode.c -$(FTOBJ)t1cmap.$(OBJ) : $(FTSRC)psaux$(D)t1cmap.c +$(FTOBJ)t1cmap.$(OBJ) : $(FTSRC)psaux$(D)t1cmap.c $(MAKEDIRS) $(FTCC) $(FTO_)t1cmap.$(OBJ) $(C_) $(FTSRC)psaux$(D)t1cmap.c -$(FTOBJ)afmparse.$(OBJ) : $(FTSRC)psaux$(D)afmparse.c +$(FTOBJ)afmparse.$(OBJ) : $(FTSRC)psaux$(D)afmparse.c $(MAKEDIRS) $(FTCC) $(FTO_)afmparse.$(OBJ) $(C_) $(FTSRC)psaux$(D)afmparse.c -$(FTOBJ)psconv.$(OBJ) : $(FTSRC)psaux$(D)psconv.c +$(FTOBJ)psconv.$(OBJ) : $(FTSRC)psaux$(D)psconv.c $(MAKEDIRS) $(FTCC) $(FTO_)psconv.$(OBJ) $(C_) $(FTSRC)psaux$(D)psconv.c -$(FTOBJ)psauxmod.$(OBJ) : $(FTSRC)psaux$(D)psauxmod.c +$(FTOBJ)psauxmod.$(OBJ) : $(FTSRC)psaux$(D)psauxmod.c $(MAKEDIRS) $(FTCC) $(FTO_)psauxmod.$(OBJ) $(C_) $(FTSRC)psaux$(D)psauxmod.c -$(FTOBJ)pshrec.$(OBJ) : $(FTSRC)pshinter$(D)pshrec.c +$(FTOBJ)pshrec.$(OBJ) : $(FTSRC)pshinter$(D)pshrec.c $(MAKEDIRS) $(FTCC) $(FTO_)pshrec.$(OBJ) $(C_) $(FTSRC)pshinter$(D)pshrec.c -$(FTOBJ)pshglob.$(OBJ) : $(FTSRC)pshinter$(D)pshglob.c +$(FTOBJ)pshglob.$(OBJ) : $(FTSRC)pshinter$(D)pshglob.c $(MAKEDIRS) $(FTCC) $(FTO_)pshglob.$(OBJ) $(C_) $(FTSRC)pshinter$(D)pshglob.c -$(FTOBJ)pshmod.$(OBJ) : $(FTSRC)pshinter$(D)pshmod.c +$(FTOBJ)pshmod.$(OBJ) : $(FTSRC)pshinter$(D)pshmod.c $(MAKEDIRS) $(FTCC) $(FTO_)pshmod.$(OBJ) $(C_) $(FTSRC)pshinter$(D)pshmod.c -$(FTOBJ)pshalgo.$(OBJ) : $(FTSRC)pshinter$(D)pshalgo.c +$(FTOBJ)pshalgo.$(OBJ) : $(FTSRC)pshinter$(D)pshalgo.c $(MAKEDIRS) $(FTCC) $(FTO_)pshalgo.$(OBJ) $(C_) $(FTSRC)pshinter$(D)pshalgo.c -$(FTOBJ)psmodule.$(OBJ) : $(FTSRC)psnames$(D)psmodule.c +$(FTOBJ)psmodule.$(OBJ) : $(FTSRC)psnames$(D)psmodule.c $(MAKEDIRS) $(FTCC) $(FTO_)psmodule.$(OBJ) $(C_) $(FTSRC)psnames$(D)psmodule.c -$(FTOBJ)pspic.$(OBJ) : $(FTSRC)psnames$(D)pspic.c +$(FTOBJ)pspic.$(OBJ) : $(FTSRC)psnames$(D)pspic.c $(MAKEDIRS) $(FTCC) $(FTO_)pspic.$(OBJ) $(C_) $(FTSRC)psnames$(D)pspic.c -$(FTOBJ)ftraster.$(OBJ) : $(FTSRC)raster$(D)ftraster.c +$(FTOBJ)ftraster.$(OBJ) : $(FTSRC)raster$(D)ftraster.c $(MAKEDIRS) $(FTCC) $(FTO_)ftraster.$(OBJ) $(C_) $(FTSRC)raster$(D)ftraster.c -$(FTOBJ)ftrend1.$(OBJ) : $(FTSRC)raster$(D)ftrend1.c +$(FTOBJ)ftrend1.$(OBJ) : $(FTSRC)raster$(D)ftrend1.c $(MAKEDIRS) $(FTCC) $(FTO_)ftrend1.$(OBJ) $(C_) $(FTSRC)raster$(D)ftrend1.c -$(FTOBJ)rastpic.$(OBJ) : $(FTSRC)raster$(D)rastpic.c +$(FTOBJ)rastpic.$(OBJ) : $(FTSRC)raster$(D)rastpic.c $(MAKEDIRS) $(FTCC) $(FTO_)rastpic.$(OBJ) $(C_) $(FTSRC)raster$(D)rastpic.c -$(FTOBJ)ftgrays.$(OBJ) : $(FTSRC)smooth$(D)ftgrays.c +$(FTOBJ)ftgrays.$(OBJ) : $(FTSRC)smooth$(D)ftgrays.c $(MAKEDIRS) $(FTCC) $(FTO_)ftgrays.$(OBJ) $(C_) $(FTSRC)smooth$(D)ftgrays.c -$(FTOBJ)ftsmooth.$(OBJ) : $(FTSRC)smooth$(D)ftsmooth.c +$(FTOBJ)ftsmooth.$(OBJ) : $(FTSRC)smooth$(D)ftsmooth.c $(MAKEDIRS) $(FTCC) $(FTO_)ftsmooth.$(OBJ) $(C_) $(FTSRC)smooth$(D)ftsmooth.c -$(FTOBJ)ftspic.$(OBJ) : $(FTSRC)smooth$(D)ftspic.c +$(FTOBJ)ftspic.$(OBJ) : $(FTSRC)smooth$(D)ftspic.c $(MAKEDIRS) $(FTCC) $(FTO_)ftspic.$(OBJ) $(C_) $(FTSRC)smooth$(D)ftspic.c -$(FTOBJ)sfobjs.$(OBJ) : $(FTSRC)sfnt$(D)sfobjs.c +$(FTOBJ)sfobjs.$(OBJ) : $(FTSRC)sfnt$(D)sfobjs.c $(MAKEDIRS) $(FTCC) $(FTO_)sfobjs.$(OBJ) $(C_) $(FTSRC)sfnt$(D)sfobjs.c -$(FTOBJ)sfdriver.$(OBJ) : $(FTSRC)sfnt$(D)sfdriver.c +$(FTOBJ)sfdriver.$(OBJ) : $(FTSRC)sfnt$(D)sfdriver.c $(MAKEDIRS) $(FTCC) $(FTO_)sfdriver.$(OBJ) $(C_) $(FTSRC)sfnt$(D)sfdriver.c -$(FTOBJ)ttcmap.$(OBJ) : $(FTSRC)sfnt$(D)ttcmap.c +$(FTOBJ)ttcmap.$(OBJ) : $(FTSRC)sfnt$(D)ttcmap.c $(MAKEDIRS) $(FTCC) $(FTO_)ttcmap.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttcmap.c -$(FTOBJ)ttmtx.$(OBJ) : $(FTSRC)sfnt$(D)ttmtx.c +$(FTOBJ)ttmtx.$(OBJ) : $(FTSRC)sfnt$(D)ttmtx.c $(MAKEDIRS) $(FTCC) $(FTO_)ttmtx.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttmtx.c -$(FTOBJ)ttpost.$(OBJ) : $(FTSRC)sfnt$(D)ttpost.c +$(FTOBJ)ttpost.$(OBJ) : $(FTSRC)sfnt$(D)ttpost.c $(MAKEDIRS) $(FTCC) $(FTO_)ttpost.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttpost.c -$(FTOBJ)ft2ttload.$(OBJ) : $(FTSRC)sfnt$(D)ttload.c +$(FTOBJ)ft2ttload.$(OBJ) : $(FTSRC)sfnt$(D)ttload.c $(MAKEDIRS) $(FTCC) $(FTO_)ft2ttload.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttload.c -$(FTOBJ)ttsbit.$(OBJ) : $(FTSRC)sfnt$(D)ttsbit.c +$(FTOBJ)ttsbit.$(OBJ) : $(FTSRC)sfnt$(D)ttsbit.c $(MAKEDIRS) $(FTCC) $(FTO_)ttsbit.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttsbit.c -$(FTOBJ)ttkern.$(OBJ) : $(FTSRC)sfnt$(D)ttkern.c +$(FTOBJ)ttkern.$(OBJ) : $(FTSRC)sfnt$(D)ttkern.c $(MAKEDIRS) $(FTCC) $(FTO_)ttkern.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttkern.c -$(FTOBJ)ttbdf.$(OBJ) : $(FTSRC)sfnt$(D)ttbdf.c +$(FTOBJ)ttbdf.$(OBJ) : $(FTSRC)sfnt$(D)ttbdf.c $(MAKEDIRS) $(FTCC) $(FTO_)ttbdf.$(OBJ) $(C_) $(FTSRC)sfnt$(D)ttbdf.c -$(FTOBJ)sfntpic.$(OBJ) : $(FTSRC)sfnt$(D)sfntpic.c +$(FTOBJ)sfntpic.$(OBJ) : $(FTSRC)sfnt$(D)sfntpic.c $(MAKEDIRS) $(FTCC) $(FTO_)sfntpic.$(OBJ) $(C_) $(FTSRC)sfnt$(D)sfntpic.c -$(FTOBJ)ttdriver.$(OBJ) : $(FTSRC)truetype$(D)ttdriver.c +$(FTOBJ)ttdriver.$(OBJ) : $(FTSRC)truetype$(D)ttdriver.c $(MAKEDIRS) $(FTCC) $(FTO_)ttdriver.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttdriver.c -$(FTOBJ)ft2ttobjs.$(OBJ) : $(FTSRC)truetype$(D)ttobjs.c +$(FTOBJ)ft2ttobjs.$(OBJ) : $(FTSRC)truetype$(D)ttobjs.c $(MAKEDIRS) $(FTCC) $(FTO_)ft2ttobjs.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttobjs.c -$(FTOBJ)ttpload.$(OBJ) : $(FTSRC)truetype$(D)ttpload.c +$(FTOBJ)ttpload.$(OBJ) : $(FTSRC)truetype$(D)ttpload.c $(MAKEDIRS) $(FTCC) $(FTO_)ttpload.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttpload.c -$(FTOBJ)ttgload.$(OBJ) : $(FTSRC)truetype$(D)ttgload.c +$(FTOBJ)ttgload.$(OBJ) : $(FTSRC)truetype$(D)ttgload.c $(MAKEDIRS) $(FTCC) $(FTO_)ttgload.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttgload.c -$(FTOBJ)ft2ttinterp.$(OBJ) : $(FTSRC)truetype$(D)ttinterp.c +$(FTOBJ)ft2ttinterp.$(OBJ) : $(FTSRC)truetype$(D)ttinterp.c $(MAKEDIRS) $(FTCC) $(FTO_)ft2ttinterp.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttinterp.c -$(FTOBJ)ttgxvar.$(OBJ) : $(FTSRC)truetype$(D)ttgxvar.c +$(FTOBJ)ttgxvar.$(OBJ) : $(FTSRC)truetype$(D)ttgxvar.c $(MAKEDIRS) $(FTCC) $(FTO_)ttgxvar.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttgxvar.c -$(FTOBJ)ttpic.$(OBJ) : $(FTSRC)truetype$(D)ttpic.c +$(FTOBJ)ttpic.$(OBJ) : $(FTSRC)truetype$(D)ttpic.c $(MAKEDIRS) $(FTCC) $(FTO_)ttpic.$(OBJ) $(C_) $(FTSRC)truetype$(D)ttpic.c -$(FTOBJ)t1afm.$(OBJ) : $(FTSRC)type1$(D)t1afm.c +$(FTOBJ)t1afm.$(OBJ) : $(FTSRC)type1$(D)t1afm.c $(MAKEDIRS) $(FTCC) $(FTO_)t1afm.$(OBJ) $(C_) $(FTSRC)type1$(D)t1afm.c -$(FTOBJ)t1driver.$(OBJ) : $(FTSRC)type1$(D)t1driver.c +$(FTOBJ)t1driver.$(OBJ) : $(FTSRC)type1$(D)t1driver.c $(MAKEDIRS) $(FTCC) $(FTO_)t1driver.$(OBJ) $(C_) $(FTSRC)type1$(D)t1driver.c -$(FTOBJ)t1objs.$(OBJ) : $(FTSRC)type1$(D)t1objs.c +$(FTOBJ)t1objs.$(OBJ) : $(FTSRC)type1$(D)t1objs.c $(MAKEDIRS) $(FTCC) $(FTO_)t1objs.$(OBJ) $(C_) $(FTSRC)type1$(D)t1objs.c -$(FTOBJ)t1load.$(OBJ) : $(FTSRC)type1$(D)t1load.c +$(FTOBJ)t1load.$(OBJ) : $(FTSRC)type1$(D)t1load.c $(MAKEDIRS) $(FTCC) $(FTO_)t1load.$(OBJ) $(C_) $(FTSRC)type1$(D)t1load.c -$(FTOBJ)t1gload.$(OBJ) : $(FTSRC)type1$(D)t1gload.c +$(FTOBJ)t1gload.$(OBJ) : $(FTSRC)type1$(D)t1gload.c $(MAKEDIRS) $(FTCC) $(FTO_)t1gload.$(OBJ) $(C_) $(FTSRC)type1$(D)t1gload.c -$(FTOBJ)t1parse.$(OBJ) : $(FTSRC)type1$(D)t1parse.c +$(FTOBJ)t1parse.$(OBJ) : $(FTSRC)type1$(D)t1parse.c $(MAKEDIRS) $(FTCC) $(FTO_)t1parse.$(OBJ) $(C_) $(FTSRC)type1$(D)t1parse.c -$(FTOBJ)t42objs.$(OBJ) : $(FTSRC)type42$(D)t42objs.c +$(FTOBJ)t42objs.$(OBJ) : $(FTSRC)type42$(D)t42objs.c $(MAKEDIRS) $(FTCC) $(FTO_)t42objs.$(OBJ) $(C_) $(FTSRC)type42$(D)t42objs.c -$(FTOBJ)t42parse.$(OBJ) : $(FTSRC)type42$(D)t42parse.c +$(FTOBJ)t42parse.$(OBJ) : $(FTSRC)type42$(D)t42parse.c $(MAKEDIRS) $(FTCC) $(FTO_)t42parse.$(OBJ) $(C_) $(FTSRC)type42$(D)t42parse.c -$(FTOBJ)t42drivr.$(OBJ) : $(FTSRC)type42$(D)t42drivr.c +$(FTOBJ)t42drivr.$(OBJ) : $(FTSRC)type42$(D)t42drivr.c $(MAKEDIRS) $(FTCC) $(FTO_)t42drivr.$(OBJ) $(C_) $(FTSRC)type42$(D)t42drivr.c -$(FTOBJ)winfnt.$(OBJ) : $(FTSRC)winfonts$(D)winfnt.c +$(FTOBJ)winfnt.$(OBJ) : $(FTSRC)winfonts$(D)winfnt.c $(MAKEDIRS) $(FTCC) $(FTO_)winfnt.$(OBJ) $(C_) $(FTSRC)winfonts$(D)winfnt.c diff -Nru ghostscript-9.15+dfsg/base/gdevdevn.c ghostscript-9.16~dfsg~0/base/gdevdevn.c --- ghostscript-9.15+dfsg/base/gdevdevn.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gdevdevn.c 2015-03-30 08:21:24.000000000 +0000 @@ -334,8 +334,11 @@ if ( (code = sample_device_crd_get_params(pdev, plist, "CRDDefault")) < 0 || (code = param_write_name_array(plist, "SeparationColorNames", &scna)) < 0 || (code = param_write_name_array(plist, "SeparationOrder", &sona)) < 0 || - (code = param_write_bool(plist, "Separations", &seprs)) < 0 || - (code = param_write_int(plist, "PageSpotColors", &(pdevn_params->page_spot_colors))) < 0) + (code = param_write_bool(plist, "Separations", &seprs)) < 0) + return code; + + if (pdev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE && + (code = param_write_int(plist, "PageSpotColors", &(pdevn_params->page_spot_colors))) < 0) return code; if (pdevn_params->separations.num_separations > 0) diff -Nru ghostscript-9.15+dfsg/base/gdevp14.c ghostscript-9.16~dfsg~0/base/gdevp14.c --- ghostscript-9.15+dfsg/base/gdevp14.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gdevp14.c 2015-03-30 08:21:24.000000000 +0000 @@ -1230,14 +1230,13 @@ buf->blend_mode = BLEND_MODE_Normal; buf->transfer_fn = transfer_fn; buf->mask_id = mask_id; - { /* If replacing=false, we start the mask for an image with SMask. - In this case the image's SMask temporary replaces the - mask of the containing group. Save the containing droup's mask - in buf->mask_stack */ - buf->mask_stack = ctx->mask_stack; - if (buf->mask_stack){ - rc_increment(buf->mask_stack->rc_mask); - } + /* If replacing=false, we start the mask for an image with SMask. + In this case the image's SMask temporary replaces the + mask of the containing group. Save the containing droup's mask + in buf->mask_stack */ + buf->mask_stack = ctx->mask_stack; + if (buf->mask_stack){ + rc_increment(buf->mask_stack->rc_mask); } #if RAW_DUMP /* Dump the current buffer to see what we have. */ @@ -1621,7 +1620,6 @@ transbuff->has_shape = buf->has_shape; transbuff->width = buf->rect.q.x - buf->rect.p.x; transbuff->height = buf->rect.q.y - buf->rect.p.y; - transbuff->blending_mode = pdev->blend_mode; if (free_device) { transbuff->pdev14 = NULL; @@ -2493,7 +2491,7 @@ for (k = 0; k < num_chan; ++k) dst_ptr[k * planestride] = dst[k]; } else { - if (overprint) { + if (overprint && dst_ptr[num_comp * planestride] != 0) { if (blendspot) { /* Overprint simulation of spot colorants */ for (k = 0; k < num_comp; ++k) { @@ -2594,7 +2592,7 @@ group_rect.q.y = y + h; if (!(w <= 0 || h <= 0)) { code = pdf14_push_transparency_group(p14dev->ctx, &group_rect, - 1, 0, 255,255, ptile->ttrans->blending_mode, 0, 0, + 1, 0, 255,255, ptile->blending_mode, 0, 0, ptile->ttrans->n_chan-1, false, NULL, NULL, NULL, NULL); if (code < 0) return code; @@ -2730,20 +2728,18 @@ conversion. In this way, we ensure that if the tile has any overlapping occuring it will be blended in the proper manner i.e in the tile underlying color space. */ - ptile = pdevc->colors.pattern.p_tile; if (ptile->cdev == NULL) { n_chan_tile = ptile->ttrans->n_chan; - blend_mode = ptile->ttrans->blending_mode; - code = pdf14_push_transparency_group(p14dev->ctx, &rect, 1, 0, 255,255, - blend_mode, 0, 0, n_chan_tile-1, - false, NULL, NULL, pis_noconst, - pdev); - if (code < 0) - return code; } else { n_chan_tile = ptile->cdev->common.color_info.num_components+1; - blend_mode = p14dev->blend_mode; } + blend_mode = ptile->blending_mode; + code = pdf14_push_transparency_group(p14dev->ctx, &rect, 1, 0, 255,255, + blend_mode, 0, 0, n_chan_tile-1, + false, NULL, NULL, pis_noconst, + pdev); + if (code < 0) + return code; /* Set the blending procs and the is_additive setting based upon the number of channels */ @@ -2761,7 +2757,6 @@ if (ptile->cdev == NULL) { fill_trans_buffer = new_pattern_trans_buff(pis->memory); pdf14_get_buffer_information(pdev, fill_trans_buffer, NULL, false); - fill_trans_buffer->blending_mode = blend_mode; /* Based upon if the tiles overlap pick the type of rect fill that we will want to use */ if (ptile->has_overlap) { @@ -2825,16 +2820,13 @@ gs_free_object(pis->memory, fill_trans_buffer, "pdf14_tile_pattern_fill"); ptile->ttrans->fill_trans_buffer = NULL; /* Avoid GC issues */ } - /* pop our transparency group which will force the blending. In clist - case, rendering occurs directly into primary buffer since it includes - the device push etc. This was all needed for Bug 693498 */ - if (ptile->cdev == NULL) { - code = pdf14_pop_transparency_group(pis_noconst, p14dev->ctx, - p14dev->blend_procs, - p14dev->color_info.num_components, - p14dev->icc_struct->device_profile[0], - pdev); - } + /* pop our transparency group which will force the blending. + This was all needed for Bug 693498 */ + code = pdf14_pop_transparency_group(pis_noconst, p14dev->ctx, + p14dev->blend_procs, + p14dev->color_info.num_components, + p14dev->icc_struct->device_profile[0], + pdev); } return code; } @@ -2936,7 +2928,7 @@ } /* Set the blending mode in the ptile based upon the current setting in the imager state */ - ptile->ttrans->blending_mode = pis->blend_mode; + ptile->blending_mode = pis->blend_mode; /* Based upon if the tiles overlap pick the type of rect fill that we will want to use */ if (ptile->has_overlap) { @@ -3292,6 +3284,54 @@ return 0; } +/* When playing back the clist, we need to know if the buffer device is compatible */ +/* with the pdf14 compositor that was used when writing the clist. Colorspace and */ +/* depth are critical since these must match when reading back colors. */ +bool +pdf14_ok_to_optimize(gx_device *dev) +{ + pdf14_default_colorspace_t pdf14_cs = pdf14_determine_default_blend_cs(dev); + gsicc_colorbuffer_t dev_icc_cs; + bool ok = false; + int tag_depth = (dev->graphics_type_tag & GS_DEVICE_ENCODES_TAGS) ? 8 : 0; + cmm_dev_profile_t *dev_profile; + int code = dev_proc(dev, get_profile)(dev, &dev_profile); + + if (code < 0) + return false; + dev_icc_cs = dev_profile->device_profile[0]->data_cs; + /* If the outputprofile is not "standard" then colors converted to device color */ + /* during clist writing won't match the colors written for the pdf14 clist dev */ + if (!(dev_icc_cs == gsGRAY || dev_icc_cs == gsRGB || dev_icc_cs == gsCMYK)) + return false; /* can't handle funky output profiles */ + + switch (pdf14_cs) { + case PDF14_DeviceGray: + ok = dev->color_info.max_gray == 255 && dev->color_info.depth == 8 + tag_depth; + break; + case PDF14_DeviceRGB: + ok = dev->color_info.max_color == 255 && dev->color_info.depth == 24 + tag_depth; + break; + case PDF14_DeviceCMYK: + ok = dev->color_info.max_color == 255 && dev->color_info.depth == 32 + tag_depth; + break; + case PDF14_DeviceCMYKspot: + ok = false; /* punt for this case */ + break; + case PDF14_DeviceCustom: + /* + * We are using the output device's process color model. The + * color_info for the PDF 1.4 compositing device needs to match + * the output device, but it may not have been contone. + */ + ok = dev->color_info.depth == dev->color_info.num_components * 8 + tag_depth; + break; + default: /* Should not occur */ + ok = false; + } + return ok; +} + /* * Recreate the PDF 1.4 compositor device. Once created, the PDF 1.4 * compositor device is never removed. (We do not have a remove compositor @@ -4464,13 +4504,26 @@ { pdf14_device *pdev = (pdf14_device *)dev; byte bg_alpha = 0; /* By default the background alpha (area outside mask) is zero */ - byte *transfer_fn = (byte *)gs_alloc_bytes(pdev->ctx->memory, 256, - "pdf14_begin_transparency_mask"); + byte *transfer_fn; gs_int_rect rect; int code; int group_color_numcomps; gs_transparency_color_t group_color; + if (ptmp->subtype == TRANSPARENCY_MASK_None) { + pdf14_ctx *ctx = pdev->ctx; + + /* free up any maskbuf on the current tos */ + if (ctx->mask_stack) { + if (ctx->mask_stack->rc_mask->mask_buf != NULL ) { + pdf14_buf_free(ctx->mask_stack->rc_mask->mask_buf, ctx->mask_stack->memory); + ctx->mask_stack->rc_mask->mask_buf = NULL; + } + } + return 0; + } + transfer_fn = (byte *)gs_alloc_bytes(pdev->ctx->memory, 256, + "pdf14_begin_transparency_mask"); if (transfer_fn == NULL) return_error(gs_error_VMerror); code = compute_group_device_int_rect(pdev, &rect, pbbox, pis); @@ -5799,8 +5852,10 @@ } break; case PDF14_BEGIN_TRANS_MASK: - pdf14_needed = true; /* the compositor will be needed while reading */ - smask_level++; + if (pparams->subtype != TRANSPARENCY_MASK_None) { + pdf14_needed = true; /* the compositor will be needed while reading */ + smask_level++; + } code = c_pdf14trans_write_ctm(&pbuf, pparams); if (code < 0) return code; @@ -7308,7 +7363,27 @@ the group color space. For simplicity, the list item is created even if the color space did not change */ /* First store the current ones */ + if (pdf14pct->params.subtype == TRANSPARENCY_MASK_None) + break; pdf14_push_parent_color(dev, pis); + /* If we are playing back from a clist, the iccprofile may need to be loaded */ + if (pdf14pct->params.iccprofile == NULL) { + gs_pdf14trans_params_t *pparams_noconst = (gs_pdf14trans_params_t *)&(pdf14pct->params); + + pparams_noconst->iccprofile = gsicc_read_serial_icc((gx_device *) cdev, + pdf14pct->params.icc_hash); + if (pparams_noconst->iccprofile == NULL) + return gs_throw(-1, "ICC data not found in clist"); + /* Keep a pointer to the clist device */ + pparams_noconst->iccprofile->dev = (gx_device *)cdev; + /* Now we need to load the rest of the profile buffer */ + if (pparams_noconst->iccprofile->buffer == NULL) { + gcmmhprofile_t dummy = gsicc_get_profile_handle_clist(pparams_noconst->iccprofile, mem); + + if (dummy == NULL) + return_error(gs_error_VMerror); + } + } /* Now update the device procs */ code = pdf14_update_device_color_procs_push_c(dev, pdf14pct->params.group_color, @@ -7800,7 +7875,7 @@ } /* Set the blending mode in the ptile based upon the current setting in the imager state */ - ptile->ttrans->blending_mode = pis->blend_mode; + ptile->blending_mode = pis->blend_mode; /* Set the procs so that we use the proper filling method. */ /* Let the imaging stuff get set up */ code = gx_default_begin_typed_image(dev, pis, pmat, pic, @@ -8461,8 +8536,7 @@ smaskcolor->profiles->smask_gray = smaskcolor->profiles->smask_rgb = smaskcolor->profiles->smask_cmyk = NULL; - - + pdf14_free_smask_color(pdev); } } diff -Nru ghostscript-9.15+dfsg/base/gdevp14.h ghostscript-9.16~dfsg~0/base/gdevp14.h --- ghostscript-9.15+dfsg/base/gdevp14.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gdevp14.h 2015-03-30 08:21:24.000000000 +0000 @@ -285,4 +285,9 @@ /* Needed so that we can set the monitoring in the target device */ int gs_pdf14_device_color_mon_set(gx_device *pdev, bool monitoring); +/* When playing back the clist, we need to know if the buffer device is compatible */ +/* with the pdf14 compositor that was used when writing the clist. Colorspace and */ +/* depth are critical since these must match when reading back colors. */ +bool pdf14_ok_to_optimize(gx_device *bdev); + #endif /* gdevp14_INCLUDED */ diff -Nru ghostscript-9.15+dfsg/base/gdevprn.c ghostscript-9.16~dfsg~0/base/gdevprn.c --- ghostscript-9.15+dfsg/base/gdevprn.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gdevprn.c 2015-03-30 08:21:24.000000000 +0000 @@ -111,6 +111,24 @@ teardown_device_and_mem_for_thread(ppdev->bg_print.device, ppdev->bg_print.thread_id, true); ppdev->bg_print.device = NULL; + if (ppdev->bg_print.ocfile) { + closecode = ppdev->bg_print.oio_procs->fclose(ppdev->bg_print.ocfile, ppdev->bg_print.ocfname, true); + if (ppdev->bg_print.return_code == 0) + ppdev->bg_print.return_code = closecode; + } + if (ppdev->bg_print.ocfname) { + gs_free_object(ppdev->memory->non_gc_memory, ppdev->bg_print.ocfname, "prn_finish_bg_print(ocfname)"); + } + if (ppdev->bg_print.obfile) { + closecode = ppdev->bg_print.oio_procs->fclose(ppdev->bg_print.obfile, ppdev->bg_print.obfname, true); + if (ppdev->bg_print.return_code == 0) + ppdev->bg_print.return_code = closecode; + } + if (ppdev->bg_print.obfname) { + gs_free_object(ppdev->memory->non_gc_memory, ppdev->bg_print.obfname, "prn_finish_bg_print(obfname)"); + } + ppdev->bg_print.ocfile = ppdev->bg_print.obfile = + ppdev->bg_print.ocfname = ppdev->bg_print.obfname = NULL; } } /* Generic closing for the printer device. */ @@ -276,6 +294,27 @@ ppdev->buffer_space = 0; was_command_list = true; + if (ppdev->bg_print.ocfile) { + (void)ppdev->bg_print.oio_procs->fclose(ppdev->bg_print.ocfile, ppdev->bg_print.ocfname, true); + } + if (ppdev->bg_print.obfile) { + (void)ppdev->bg_print.oio_procs->fclose(ppdev->bg_print.obfile, ppdev->bg_print.obfname, true); + } + ppdev->bg_print.ocfile = ppdev->bg_print.obfile = NULL; + if (ppdev->bg_print.ocfname) { + gs_free_object(ppdev->memory->non_gc_memory, ppdev->bg_print.ocfname, "gdev_prn_tear_down(ocfname)"); + } + if (ppdev->bg_print.obfname) { + gs_free_object(ppdev->memory->non_gc_memory, ppdev->bg_print.obfname, "gdev_prn_tear_down(obfname)"); + } + ppdev->bg_print.ocfname = ppdev->bg_print.obfname = NULL; + + rc_decrement(pcldev->icc_cache_cl, "gdev_prn_tear_down"); + pcldev->icc_cache_cl = NULL; + + clist_free_icc_table(pcldev->icc_table, pcldev->memory); + pcldev->icc_table = NULL; + /* If the clist is a reader clist, free any color_usage_array * memory used by same. */ @@ -417,6 +456,8 @@ /* Buffer the image in a command list. */ /* Release the buffer if we allocated it. */ int code; + gx_device_printer * const ppdev = (gx_device_printer *)pdev; + if (!reallocate) { gs_free_object(buffer_memory, the_memory, "printer buffer(open)"); @@ -426,6 +467,9 @@ ecode = gs_note_error(gs_error_VMerror); continue; } + ppdev->bg_print.ocfname = ppdev->bg_print.obfname = + ppdev->bg_print.obfile = ppdev->bg_print.ocfile = NULL; + code = gdev_prn_setup_as_command_list(pdev, buffer_memory, &the_memory, &space_params, !bufferSpace_is_default); @@ -867,7 +911,7 @@ if (ppdev->bg_print_requested && !bg_print_requested) { prn_finish_bg_print(ppdev); } - + ppdev->bg_print_requested = bg_print_requested; if (duplex_set >= 0) { ppdev->Duplex = duplex; @@ -978,7 +1022,10 @@ threads_enabled = 0; /* and allow current page to try foreground */ } /* Use 'while' instead of 'if' to avoid nesting */ - while (ppdev->bg_print_requested && threads_enabled) { + while (ppdev->bg_print_requested && threads_enabled && + /* FIXME: Don't allow bg_print if multiple rendering threads are used. */ + /* TEMPORARY WORK AROUND FOR BUG 695711 */ + ppdev->num_render_threads_requested == 0) { gx_device *ndev; gx_device_printer *npdev; gx_device_clist_reader *crdev = (gx_device_clist_reader *)ppdev; @@ -987,6 +1034,26 @@ /* should not happen -- do foreground print */ break; + /* We need to hang onto references to these files, so we can ensure the main file data + * gets freed with the correct allocator. + */ + ppdev->bg_print.ocfname = + (char *)gs_alloc_bytes(ppdev->memory->non_gc_memory, + strnlen(crdev->page_info.cfname, gp_file_name_sizeof - 1) + 1, "gdev_prn_output_page_aux(ocfname)"); + ppdev->bg_print.obfname = + (char *)gs_alloc_bytes(ppdev->memory->non_gc_memory, + strnlen(crdev->page_info.bfname, gp_file_name_sizeof - 1) + 1,"gdev_prn_output_page_aux(ocfname)"); + + if (!ppdev->bg_print.ocfname || !ppdev->bg_print.obfname) + break; + + strncpy(ppdev->bg_print.ocfname, crdev->page_info.cfname, strnlen(crdev->page_info.cfname, gp_file_name_sizeof - 1) + 1); + strncpy(ppdev->bg_print.obfname, crdev->page_info.bfname, strnlen(crdev->page_info.bfname, gp_file_name_sizeof - 1) + 1); + ppdev->bg_print.obfile = crdev->page_info.bfile; + ppdev->bg_print.ocfile = crdev->page_info.cfile; + ppdev->bg_print.oio_procs = crdev->page_info.io_procs; + crdev->page_info.cfile = crdev->page_info.bfile = NULL; + if (ppdev->bg_print.sema == NULL) if (((ppdev->bg_print.sema = gx_semaphore_alloc(ppdev->memory->non_gc_memory)) == NULL)) break; /* couldn't create the semaphore */ @@ -1011,18 +1078,17 @@ /* Page was succesfully started in bg_print mode */ print_foreground = 0; /* Now we need to set up the next page so it will use new clist files */ - /* Close (but don't delete) the files since the background printing now owns them */ - if ((code = crdev->page_info.io_procs->fclose(crdev->page_info.cfile, crdev->page_info.cfname, false)) < 0 || - (code = crdev->page_info.io_procs->fclose(crdev->page_info.bfile, crdev->page_info.bfname, false)) < 0) { - return_error(gs_error_unknownerror); /* shouldn't happen */ - } - crdev->page_info.cfile = crdev->page_info.bfile = NULL; if ((code = clist_open(pdev)) < 0) /* this should do it */ /* OOPS! can't proceed with the next page */ return code; /* probably ioerror */ break; /* exit the while loop */ } if (print_foreground) { + + gs_free_object(ppdev->memory->non_gc_memory, ppdev->bg_print.ocfname, "gdev_prn_output_page_aux(ocfname)"); + gs_free_object(ppdev->memory->non_gc_memory, ppdev->bg_print.obfname, "gdev_prn_output_page_aux(obfname)"); + ppdev->bg_print.ocfname = ppdev->bg_print.obfname = NULL; + /* either bg_print was not requested or was not able to start */ if (ppdev->bg_print.sema != NULL && ppdev->bg_print.device != NULL) { /* There was a problem. Teardown the device and its allocator, but */ diff -Nru ghostscript-9.15+dfsg/base/gdevprn.h ghostscript-9.16~dfsg~0/base/gdevprn.h --- ghostscript-9.15+dfsg/base/gdevprn.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gdevprn.h 2015-03-30 08:21:24.000000000 +0000 @@ -193,6 +193,11 @@ gp_thread_id thread_id; int num_copies; int return_code; /* result from background print thread */ + char *ocfname; /* command file name */ + clist_file_ptr ocfile; /* command file, normally 0 */ + char *obfname; /* block file name */ + clist_file_ptr obfile; /* block file, normally 0 */ + const clist_io_procs_t *oio_procs; } bg_print_t; #define gx_prn_device_common\ diff -Nru ghostscript-9.15+dfsg/base/gdevpxen.h ghostscript-9.16~dfsg~0/base/gdevpxen.h --- ghostscript-9.15+dfsg/base/gdevpxen.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gdevpxen.h 2015-03-30 08:21:24.000000000 +0000 @@ -52,11 +52,6 @@ } pxeColorDepth_t; typedef enum { - eCRGB = 5, /* Note: for this enumeration, 0 is not a valid value */ - pxeColorimetricColorSpace_next -} pxeColorimetricColorSpace_t; /* 2.0 */ - -typedef enum { eDirectPixel = 0, eIndexedPixel, pxeColorMapping_next diff -Nru ghostscript-9.15+dfsg/base/gdevvec.c ghostscript-9.16~dfsg~0/base/gdevvec.c --- ghostscript-9.15+dfsg/base/gdevvec.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gdevvec.c 2015-03-30 08:21:24.000000000 +0000 @@ -993,6 +993,8 @@ { int ecode = 0; int code; + int igni; + bool ignb; gs_param_name param_name; gs_param_string ofns; bool open = dev->is_open, HighLevelDevice; @@ -1032,6 +1034,23 @@ ofns.data = 0; break; } + /* Ignore the following printer device params */ + switch (code = param_read_bool(plist, (param_name = "BGPrint"), &ignb)) { + default: + ecode = code; + param_signal_error(plist, param_name, ecode); + case 0: + case 1: + break; + } + switch (code = param_read_int(plist, (param_name = "NumRenderingThreads"), &igni)) { + default: + ecode = code; + param_signal_error(plist, param_name, ecode); + case 0: + case 1: + break; + } if (ecode < 0) return ecode; diff -Nru ghostscript-9.15+dfsg/base/gp.h ghostscript-9.16~dfsg~0/base/gp.h --- ghostscript-9.15+dfsg/base/gp.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gp.h 2015-03-30 08:21:24.000000000 +0000 @@ -232,6 +232,24 @@ /* Open a file with the given name, as a stream of uninterpreted bytes. */ FILE *gp_fopen(const char *fname, const char *mode); +/* Test whether this platform supports the sharing of file descriptors */ +int gp_can_share_fdesc(void); + +/* Create a self-deleting scratch file */ +FILE *gp_open_scratch_file_rm(const gs_memory_t *mem, + const char *prefix, + char fname[gp_file_name_sizeof], + const char *mode); + +/* Create a second open FILE on the basis of a given one */ +FILE *gp_fdup(FILE *f, const char *mode); + +/* Read from a specified offset within a FILE into a buffer */ +int gp_fpread(char *buf, uint count, int64_t offset, FILE *f); + +/* Write to a specified offset within a FILE from a buffer */ +int gp_fpwrite(char *buf, uint count, int64_t offset, FILE *f); + /* Force given file into binary mode (no eol translations, etc) */ /* if 2nd param true, text mode if 2nd param false */ int gp_setmode_binary(FILE * pfile, bool mode); diff -Nru ghostscript-9.15+dfsg/base/gp_macio.c ghostscript-9.16~dfsg~0/base/gp_macio.c --- ghostscript-9.15+dfsg/base/gp_macio.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gp_macio.c 2015-03-30 08:21:24.000000000 +0000 @@ -549,6 +549,34 @@ } +int gp_can_share_fdesc(void) +{ + return 0; +} + +FILE *gp_open_scratch_file_rm(const gs_memory_t *mem, + const char *prefix, + char fname[gp_file_name_sizeof], + const char *mode) +{ + return NULL; +} + +FILE *gp_fdup(FILE *f, const char *mode) +{ + return NULL; +} + +int gp_fpread(char *buf, uint count, int64_t offset, FILE *f) +{ + return -1; +} + +int gp_fpwrite(char *buf, uint count, int64_t offset, FILE *f) +{ + return -1; +} + FILE * popen (const char * fname, const char * mode ) { return gp_fopen (fname, mode); diff -Nru ghostscript-9.15+dfsg/base/gp_mswin.c ghostscript-9.16~dfsg~0/base/gp_mswin.c --- ghostscript-9.15+dfsg/base/gp_mswin.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gp_mswin.c 2015-03-30 08:21:24.000000000 +0000 @@ -612,11 +612,12 @@ /* Create and open a scratch file with a given name prefix. */ /* Write the actual file name at fname. */ -FILE * -gp_open_scratch_file(const gs_memory_t *mem, - const char *prefix, - char *fname, - const char *mode) +static FILE * +gp_open_scratch_file_generic(const gs_memory_t *mem, + const char *prefix, + char *fname, + const char *mode, + int remove) { UINT n; DWORD l; @@ -721,26 +722,19 @@ hfile = CreateFile2(uni, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ | FILE_SHARE_WRITE, - CREATE_ALWAYS, + CREATE_ALWAYS | (remove ? FILE_FLAG_DELETE_ON_CLOSE : 0), NULL); #else hfile = CreateFileW(uni, GENERIC_READ | GENERIC_WRITE | DELETE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL /* | FILE_FLAG_DELETE_ON_CLOSE */, + FILE_ATTRIBUTE_NORMAL | (remove ? FILE_FLAG_DELETE_ON_CLOSE : 0), NULL); #endif free(uni); } #endif - /* - * Can't apply FILE_FLAG_DELETE_ON_CLOSE due to - * the logics of clist_fclose. Also note that - * gdev_prn_render_pages requires multiple temporary files - * to exist simultaneousely, so that keeping all them opened - * may exceed available CRTL file handles. - */ } } if (hfile != INVALID_HANDLE_VALUE) { @@ -769,6 +763,24 @@ return f; } +FILE * +gp_open_scratch_file(const gs_memory_t *mem, + const char *prefix, + char *fname, + const char *mode) +{ + return gp_open_scratch_file_generic(mem, prefix, fname, mode, 0); +} + +FILE * +gp_open_scratch_file_rm(const gs_memory_t *mem, + const char *prefix, + char *fname, + const char *mode) +{ + return gp_open_scratch_file_generic(mem, prefix, fname, mode, 1); +} + /* Open a file with the given name, as a stream of uninterpreted bytes. */ FILE * gp_fopen(const char *fname, const char *mode) @@ -794,6 +806,66 @@ #endif } +/* test whether gp_fdup is supported on this platform */ +int gp_can_share_fdesc(void) +{ + return 1; +} + +/* Create a second open FILE on the basis of a given one */ +FILE *gp_fdup(FILE *f, const char *mode) +{ + int fd = fileno(f); + if (fd < 0) + return NULL; + + fd = dup(fd); + if (fd < 0) + return NULL; + + return fdopen(fd, mode); +} + +/* Read from a specified offset within a FILE into a buffer */ +int gp_fpread(char *buf, uint count, int64_t offset, FILE *f) +{ + OVERLAPPED overlapped; + DWORD ret; + HANDLE hnd = _get_osfhandle(fileno(f)); + + if (hnd == INVALID_HANDLE_VALUE) + return -1; + + memset(&overlapped, 0, sizeof(OVERLAPPED)); + overlapped.Offset = (DWORD)offset; + overlapped.OffsetHigh = (DWORD)(offset >> 32); + + if (!ReadFile((HANDLE)hnd, buf, count, &ret, &overlapped)) + return -1; + + return ret; +} + +/* Write to a specified offset within a FILE from a buffer */ +int gp_fpwrite(char *buf, uint count, int64_t offset, FILE *f) +{ + OVERLAPPED overlapped; + DWORD ret; + HANDLE hnd = _get_osfhandle(fileno(f)); + + if (hnd == INVALID_HANDLE_VALUE) + return -1; + + memset(&overlapped, 0, sizeof(OVERLAPPED)); + overlapped.Offset = (DWORD)offset; + overlapped.OffsetHigh = (DWORD)(offset >> 32); + + if (!WriteFile((HANDLE)hnd, buf, count, &ret, &overlapped)) + return -1; + + return ret; +} + /* ------ Font enumeration ------ */ /* This is used to query the native os for a list of font names and diff -Nru ghostscript-9.15+dfsg/base/gp_ntfs.c ghostscript-9.16~dfsg~0/base/gp_ntfs.c --- ghostscript-9.15+dfsg/base/gp_ntfs.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gp_ntfs.c 2015-03-30 08:21:24.000000000 +0000 @@ -180,8 +180,11 @@ /* but it's simpler for GC and freeing to allocate it as bytes. */ pattern = (char *)gs_alloc_bytes(mem, pat_size, "gp_enumerate_files(pattern)"); - if (pattern == 0) + if (pattern == 0) { + gs_free_object(mem, pden, "free directory enumerator on error"); + gs_free_object(mem, pfen, "free file enumerator on error"); return 0; + } /* translate the template into a pattern. Note that */ /* a final '\' or '/' in the string is discarded. */ @@ -383,9 +386,9 @@ gs_free_object(mem, pden, "gp_enumerate_files_close"); pden = ptenum; }; + gs_free_object(mem, pfen->pattern, + "gp_enumerate_files_close(pattern)"); gs_free_object(mem, pfen, "gp_enumerate_files_close"); -/* gs_free_object(mem, pfen->pattern, - "gp_enumerate_files_close(pattern)");*/ } /* -------------- Helpers for gp_file_name_combine_generic ------------- */ diff -Nru ghostscript-9.15+dfsg/base/gp_os2fs.c ghostscript-9.16~dfsg~0/base/gp_os2fs.c --- ghostscript-9.15+dfsg/base/gp_os2fs.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gp_os2fs.c 2015-03-30 08:21:24.000000000 +0000 @@ -262,6 +262,34 @@ return fopen(fname, mode); } +int gp_can_share_fdesc(void) +{ + return 0; +} + +FILE *gp_open_scratch_file_rm(const gs_memory_t *mem, + const char *prefix, + char fname[gp_file_name_sizeof], + const char *mode) +{ + return NULL; +} + +FILE *gp_fdup(FILE *f, const char *mode) +{ + return NULL; +} + +int gp_fpread(char *buf, uint count, int64_t offset, FILE *f) +{ + return -1; +} + +int gp_fpwrite(char *buf, uint count, int64_t offset, FILE *f) +{ + return -1; +} + /* -------------- Helpers for gp_file_name_combine_generic ------------- */ uint gp_file_name_root(const char *fname, uint len) diff -Nru ghostscript-9.15+dfsg/base/gp_psync.c ghostscript-9.16~dfsg~0/base/gp_psync.c --- ghostscript-9.15+dfsg/base/gp_psync.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gp_psync.c 2015-03-30 08:21:24.000000000 +0000 @@ -17,10 +17,11 @@ /* POSIX pthreads threads / semaphore / monitor implementation */ #include "std.h" #include "malloc_.h" +#include "unistd_.h" /* for __USE_UNIX98 */ #include #include "gserrors.h" #include "gpsync.h" - +#include "assert_.h" /* * Thanks to Larry Jones for this revision of * Aladdin's original code into a form that depends only on POSIX APIs. @@ -128,13 +129,20 @@ /* Monitor supports enter/leave semantics */ /* - * We need PTHREAD_MUTEX_RECURSIVE behavior, but this isn't totally portable - * so we implement it in a more portable fashion, keeping track of the - * owner thread using 'pthread_self()' + * We need PTHREAD_MUTEX_RECURSIVE behavior, but this isn't + * supported on all pthread platforms, so if it's available + * we'll use it, otherwise we'll emulate it. + * GS_RECURSIVE_MUTEXATTR is set by the configure script + * on Unix-like machines to the attribute setting for + * PTHREAD_MUTEX_RECURSIVE - on linux this is usually + * PTHREAD_MUTEX_RECURSIVE_NP */ typedef struct gp_pthread_recursive_s { pthread_mutex_t mutex; /* actual mutex */ +#ifndef GS_RECURSIVE_MUTEXATTR pthread_t self_id; /* owner */ + int lcount; +#endif } gp_pthread_recursive_t; uint @@ -148,12 +156,32 @@ { pthread_mutex_t *mon; int scode; + pthread_mutexattr_t attr; + pthread_mutexattr_t *attrp = NULL; if (!mona) return -1; /* monitors are not movable */ - mon = &((gp_pthread_recursive_t *)mona)->mutex; + + +#ifdef GS_RECURSIVE_MUTEXATTR + attrp = &attr; + scode = pthread_mutexattr_init(attrp); + if (scode < 0) goto done; + + scode = pthread_mutexattr_settype(attrp, GS_RECURSIVE_MUTEXATTR); + if (scode < 0) { + goto done; + } +#else ((gp_pthread_recursive_t *)mona)->self_id = 0; /* Not valid unless mutex is locked */ - scode = pthread_mutex_init(mon, NULL); + ((gp_pthread_recursive_t *)mona)->lcount = 0; +#endif + + mon = &((gp_pthread_recursive_t *)mona)->mutex; + scode = pthread_mutex_init(mon, attrp); + if (attrp) + (void)pthread_mutexattr_destroy(attrp); +done: return SEM_ERROR_CODE(scode); } @@ -173,29 +201,52 @@ pthread_mutex_t * const mon = (pthread_mutex_t *)mona; int scode; +#ifdef GS_RECURSIVE_MUTEXATTR + scode = pthread_mutex_lock(mon); +#else + assert(((gp_pthread_recursive_t *)mona)->lcount >= 0); + if ((scode = pthread_mutex_trylock(mon)) == 0) { ((gp_pthread_recursive_t *)mona)->self_id = pthread_self(); - return SEM_ERROR_CODE(scode); + ((gp_pthread_recursive_t *)mona)->lcount++; } else { - if (pthread_equal(pthread_self(),((gp_pthread_recursive_t *)mona)->self_id)) - return 0; + if (pthread_equal(pthread_self(),((gp_pthread_recursive_t *)mona)->self_id)) { + ((gp_pthread_recursive_t *)mona)->lcount++; + scode = 0; + } else { /* we were not the owner, wait */ scode = pthread_mutex_lock(mon); ((gp_pthread_recursive_t *)mona)->self_id = pthread_self(); - return SEM_ERROR_CODE(scode); + ((gp_pthread_recursive_t *)mona)->lcount++; } } +#endif + return SEM_ERROR_CODE(scode); } int gp_monitor_leave(gp_monitor * mona) { pthread_mutex_t * const mon = (pthread_mutex_t *)mona; - int scode; + int scode = 0; +#ifdef GS_RECURSIVE_MUTEXATTR scode = pthread_mutex_unlock(mon); - ((gp_pthread_recursive_t *)mona)->self_id = 0; /* Not valid unless mutex is locked */ +#else + assert(((gp_pthread_recursive_t *)mona)->lcount > 0 && ((gp_pthread_recursive_t *)mona)->self_id != 0); + + if (pthread_equal(pthread_self(),((gp_pthread_recursive_t *)mona)->self_id)) { + if ((--((gp_pthread_recursive_t *)mona)->lcount) == 0) { + ((gp_pthread_recursive_t *)mona)->self_id = 0; /* Not valid unless mutex is locked */ + scode = pthread_mutex_unlock(mon); + + } + } + else { + scode = -1 /* should be EPERM */; + } +#endif return SEM_ERROR_CODE(scode); } diff -Nru ghostscript-9.15+dfsg/base/gp_unifn.c ghostscript-9.16~dfsg~0/base/gp_unifn.c --- ghostscript-9.15+dfsg/base/gp_unifn.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gp_unifn.c 2015-03-30 08:21:24.000000000 +0000 @@ -25,7 +25,12 @@ /* Define the string to be concatenated with the file mode */ /* for opening files without end-of-line conversion. */ +#if (defined(__MINGW32__) && __MINGW32__ == 1) || (defined(__CYGWIN__) && __CYGWIN__ == 1) +const char gp_fmode_binary_suffix[] = "b"; +#else const char gp_fmode_binary_suffix[] = ""; +#endif + /* Define the file modes for binary reading or writing. */ #if (defined(__MINGW32__) && __MINGW32__ == 1) || (defined(__CYGWIN__) && __CYGWIN__ == 1) diff -Nru ghostscript-9.15+dfsg/base/gp_unifs.c ghostscript-9.16~dfsg~0/base/gp_unifs.c --- ghostscript-9.15+dfsg/base/gp_unifs.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gp_unifs.c 2015-03-30 08:21:24.000000000 +0000 @@ -151,6 +151,80 @@ return fopen(fname, mode); } +int gp_can_share_fdesc(void) +{ + return 1; +} + +FILE *gp_open_scratch_file_rm(const gs_memory_t *mem, + const char *prefix, + char fname[gp_file_name_sizeof], + const char *mode) +{ + FILE *f = gp_open_scratch_file_generic(mem, prefix, fname, mode, false); + /* Unlink file immediately to avoid it being left around if the program + * is killed. On this platform readers access temp files by cloning the + * FILE pointer and without accessing the file by name */ + if (f) + unlink(fname); + return f; +} + +FILE *gp_fdup(FILE *f, const char *mode) +{ + int fd = fileno(f); + if (fd < 0) + return NULL; + fd = dup(fd); + if (fd < 0) + return NULL; + return fdopen(fd, mode); +} + +int gp_fpread(char *buf, uint count, int64_t offset, FILE *f) +{ +#if defined(HAVE_PREAD_PWRITE) && HAVE_PREAD_PWRITE == 1 + return pread(fileno(f), buf, count, offset); +#else + uint c; + int64_t os, curroff = gp_ftell_64(f); + if (curroff < 0) return curroff; + + os = gp_fseek_64(f, offset, 0); + if (os < 0) return os; + + c = fread(buf, 1, count, f); + if (c < 0) return c; + + os = gp_fseek_64(f, curroff, 0); + if (os < 0) return os; + + return c; +#endif +} + +int gp_fpwrite(char *buf, uint count, int64_t offset, FILE *f) +{ +#if defined(HAVE_PREAD_PWRITE) && HAVE_PREAD_PWRITE == 1 + return pwrite(fileno(f), buf, count, offset); +#else + uint c; + int64_t os, curroff = gp_ftell_64(f); + if (curroff < 0) return curroff; + + os = gp_fseek_64(f, offset, 0); + if (os < 0) return os; + + c = fwrite(buf, 1, count, f); + if (c < 0) return c; + + os = gp_fseek_64(f, curroff, 0); + if (os < 0) return os; + + return c; +#endif +} + /* Set a file into binary or text mode. */ int gp_setmode_binary(FILE * pfile, bool mode) diff -Nru ghostscript-9.15+dfsg/base/gp_vms.c ghostscript-9.16~dfsg~0/base/gp_vms.c --- ghostscript-9.15+dfsg/base/gp_vms.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gp_vms.c 2015-03-30 08:21:24.000000000 +0000 @@ -287,6 +287,34 @@ return fopen(fname, mode); } +int gp_can_share_fdesc(void) +{ + return 0; +} + +FILE *gp_open_scratch_file_rm(const gs_memory_t *mem, + const char *prefix, + char fname[gp_file_name_sizeof], + const char *mode) +{ + return NULL; +} + +FILE *gp_fdup(FILE *f, const char *mode) +{ + return NULL; +} + +int gp_fpread(char *buf, uint count, int64_t offset, FILE *f) +{ + return -1; +} + +int gp_fpwrite(char *buf, uint count, int64_t offset, FILE *f) +{ + return -1; +} + /* Set a file into binary or text mode. */ int gp_setmode_binary(FILE * pfile, bool binary) diff -Nru ghostscript-9.15+dfsg/base/gscdef.c ghostscript-9.16~dfsg~0/base/gscdef.c --- ghostscript-9.15+dfsg/base/gscdef.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gscdef.c 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2014 Artifex Software, Inc. +/* Copyright (C) 2001-2015 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -33,7 +33,7 @@ #ifndef GS_COPYRIGHT # define GS_COPYRIGHT\ - "Copyright (C) 2014 Artifex Software, Inc. All rights reserved." + "Copyright (C) 2015 Artifex Software, Inc. All rights reserved." #endif const char *const gs_copyright = GS_COPYRIGHT; diff -Nru ghostscript-9.15+dfsg/base/gscdevn.c ghostscript-9.16~dfsg~0/base/gscdevn.c --- ghostscript-9.15+dfsg/base/gscdevn.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gscdevn.c 2015-03-30 08:21:24.000000000 +0000 @@ -373,13 +373,14 @@ frac conc[GS_CLIENT_COLOR_MAX_COMPONENTS]; const gs_color_space *pconcs; int i = pcs->type->num_components(pcs),k; - int code; + int code = 0; const gs_color_space *pacs = pcs->base_space; gs_client_color temp; + bool mapped = false; if ( pcs->cmm_icc_profile_data != NULL && pis->color_component_map.use_alt_cspace) { - /* If needed, reorganize the data. The ICC colorants tag drives the - the laydown order */ + /* This is the case where we have placed a N-CLR source profile for + this color space */ if (pcs->cmm_icc_profile_data->devicen_permute_needed) { for ( k = 0; k < i; k++) { temp.paint.values[k] = pcc->paint.values[pcs->cmm_icc_profile_data->devicen_permute[k]]; @@ -390,11 +391,21 @@ } return(code); } else { - code = (*pcs->type->concretize_color)(pcc, pcs, conc, pis, dev); - if (code < 0) - return code; - pconcs = cs_concrete_space(pcs, pis); - code = (*pconcs->type->remap_concrete_color)(conc, pconcs, pdc, pis, dev, select); + /* Check if we are doing any named color management. This check happens + regardless if we are doing the alternate tint transform or not. If + desired, that check could be made in gsicc_transform_named_color and + a decision made to return true or false */ + if (pis->icc_manager->device_named != NULL) { + /* Try to apply the direct replacement */ + mapped = gx_remap_named_color(pcc, pcs, pdc, pis, dev, select); + } + if (!mapped) { + code = (*pcs->type->concretize_color)(pcc, pcs, conc, pis, dev); + if (code < 0) + return code; + pconcs = cs_concrete_space(pcs, pis); + code = (*pconcs->type->remap_concrete_color)(conc, pconcs, pdc, pis, dev, select); + } /* Save original color space and color info into dev color */ i = any_abs(i); for (i--; i >= 0; i--) @@ -413,10 +424,6 @@ gs_color_space *pacs = (gs_color_space*) (pcs->base_space); gs_device_n_map *map = pcs->params.device_n.map; bool is_lab; - int k; - int num_des_comps = dev->color_info.num_components; - gsicc_namedcolor_t *named_color; - const gs_separation_name *names = pcs->params.device_n.names; int num_src_comps = pcs->params.device_n.num_components; #ifdef DEBUG @@ -433,49 +440,6 @@ */ if (pis->color_component_map.use_alt_cspace) { - /* First see if we have a named color object that we can use to try - to map from the spot color into device values. */ - if (pis->icc_manager->device_named != NULL) { - /* There is a table present. If we have the colorant name - then get the device values */ - gx_color_value device_values[GX_DEVICE_COLOR_MAX_COMPONENTS]; - byte *pname; - uint name_size; - gsicc_rendering_param_t rendering_params; - - /* Define the rendering intents. */ - rendering_params.black_point_comp = pis->blackptcomp; - rendering_params.graphics_type_tag = dev->graphics_type_tag; - rendering_params.override_icc = false; - rendering_params.preserve_black = gsBKPRESNOTSPECIFIED; - rendering_params.rendering_intent = pis->renderingintent; - rendering_params.cmm = gsCMM_DEFAULT; - - /* Allocate and initialize name structure */ - named_color = - (gsicc_namedcolor_t*) gs_alloc_bytes(dev->memory, - num_src_comps * sizeof(gsicc_namedcolor_t), - "gx_remap_concrete_DeviceN"); - - for (k = 0; k < num_src_comps; k++) { - pcs->params.device_n.get_colorname_string(dev->memory, names[k], - &pname, &name_size); - named_color[k].colorant_name = (char*) pname; - named_color[k].name_size = name_size; - } - code = gsicc_transform_named_color(pc->paint.values, named_color, - num_src_comps, device_values, - pis, dev, NULL, - &rendering_params); - gs_free_object(dev->memory, named_color, - "gx_remap_concrete_DeviceN"); - if (code == 0) { - for (k = 0; k < num_des_comps; k++){ - pconc[k] = float2frac(((float) device_values[k])/65535.0); - } - return(0); - } - } /* Check the 1-element cache first. */ if (map->cache_valid) { int i; @@ -533,7 +497,7 @@ gx_device_color * pdc, const gs_imager_state * pis, gx_device * dev, gs_color_select_t select) { - int code; + int code = 0; #ifdef DEBUG /* @@ -547,8 +511,7 @@ return (*pacs->type->remap_concrete_color) (pconc, pacs, pdc, pis, dev, select); - } - else { + } else { /* If we are going DeviceN out to real sep device that understands these, and if the destination profile is DeviceN, we print the colors directly. Make sure to disable the DeviceN profile color map so that is does not @@ -558,7 +521,7 @@ bool temp_val; code = dev_proc(dev, get_profile)(dev, &dev_profile); - if (dev_profile->spotnames != NULL) { + if (dev_profile->spotnames != NULL && code >= 0) { temp_val = dev_profile->spotnames->equiv_cmyk_set; dev_profile->spotnames->equiv_cmyk_set = false; gx_remap_concrete_devicen(pconc, pdc, pis, dev, select); diff -Nru ghostscript-9.15+dfsg/base/gscms.h ghostscript-9.16~dfsg~0/base/gscms.h --- ghostscript-9.15+dfsg/base/gscms.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gscms.h 2015-03-30 08:21:24.000000000 +0000 @@ -118,6 +118,9 @@ gscms_monitor_proc_t is_color; } gscms_procs_t; +/* Allow different methods for releasing the opaque profile contents */ +typedef void(*gscms_free_profile_proc_t) (void *profile_handle); + /* Enumerate the ICC rendering intents and other parameters. A note on these. 0-3 are for different values. 4-7 are for Override cases where we are trying to override some value specified in the document. @@ -337,22 +340,23 @@ */ struct cmm_profile_s { gsicc_serial_data; - byte *buffer; /* A buffer with ICC profile content */ - gx_device *dev; /* A pointer to the clist device in which the ICC data may be contained */ - gsicc_namelist_t *spotnames; /* Used for profiles that have non-standard colorants */ - void *profile_handle; /* The profile handle */ - rc_header rc; /* Reference count. So we know when to free */ - int name_length; /* Length of file name */ - char *name; /* Name of file name (if there is one) where profile is found. - * If it was embedded in the stream, there will not be a file - * name. This is primarily here for the system profiles, and - * so that we avoid resetting them everytime the user params - * are reloaded. */ - gsicc_version_t vers; /* Is this profile V2 */ - byte *v2_data; /* V2 data that is equivalent to this profile. Used for PDF-A1 support */ - int v2_size; /* Number of bytes in v2_data */ - gs_memory_t *memory; /* In case we have some in non-gc and some in gc memory */ - gx_monitor_t *lock; /* handle for the monitor */ + byte *buffer; /* A buffer with ICC profile content */ + gx_device *dev; /* A pointer to the clist device in which the ICC data may be contained */ + gsicc_namelist_t *spotnames; /* Used for profiles that have non-standard colorants */ + void *profile_handle; /* The profile handle */ + rc_header rc; /* Reference count. So we know when to free */ + int name_length; /* Length of file name */ + char *name; /* Name of file name (if there is one) where profile is found. + * If it was embedded in the stream, there will not be a file + * name. This is primarily here for the system profiles, and + * so that we avoid resetting them everytime the user params + * are reloaded. */ + gsicc_version_t vers; /* Is this profile V2 */ + byte *v2_data; /* V2 data that is equivalent to this profile. Used for PDF-A1 support */ + int v2_size; /* Number of bytes in v2_data */ + gs_memory_t *memory; /* In case we have some in non-gc and some in gc memory */ + gx_monitor_t *lock; /* handle for the monitor */ + gscms_free_profile_proc_t release; /* Release the profile handle at CMM */ }; #ifndef cmm_profile_DEFINED diff -Nru ghostscript-9.15+dfsg/base/gscolor2.c ghostscript-9.16~dfsg~0/base/gscolor2.c --- ghostscript-9.15+dfsg/base/gscolor2.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gscolor2.c 2015-03-30 08:21:24.000000000 +0000 @@ -185,6 +185,7 @@ static cs_proc_restrict_color(gx_restrict_Indexed); static cs_proc_concrete_space(gx_concrete_space_Indexed); static cs_proc_concretize_color(gx_concretize_Indexed); +static cs_proc_remap_color(gx_remap_IndexedNamed); static cs_proc_install_cspace(gx_install_Indexed); static cs_proc_set_overprint(gx_set_overprint_Indexed); static cs_proc_final(gx_final_Indexed); @@ -204,6 +205,24 @@ gx_cspace_is_linear_default, gx_polarity_Indexed }; +/* To keep things vectorized and avoid an if test during the remap proc we + have another set of procedures to use for indexed color spaces when + someone has specified a named color profile and the base space of the + index color space is DeviceN or Separation */ +const gs_color_space_type gs_color_space_type_Indexed_Named = { + gs_color_space_index_Indexed, false, false, + &st_color_space_Indexed, gx_num_components_1, + gx_init_paint_1, gx_restrict_Indexed, + gx_concrete_space_Indexed, + gx_concretize_Indexed, NULL, + gx_remap_IndexedNamed, + gx_install_Indexed, + gx_set_overprint_Indexed, + gx_final_Indexed, gx_no_adjust_color_count, + gx_serialize_Indexed, + gx_cspace_is_linear_default, gx_polarity_Indexed +}; + /* GC procedures. */ static uint @@ -477,7 +496,6 @@ gx_concretize_Indexed(const gs_client_color * pc, const gs_color_space * pcs, frac * pconc, const gs_imager_state * pis, gx_device *dev) { - gs_client_color cc; const gs_color_space *pbcs = (const gs_color_space *)pcs->base_space; @@ -488,6 +506,47 @@ return (*pbcs->type->concretize_color) (&cc, pbcs, pconc, pis, dev); } +/* We should only be here for cases where the base space is DeviceN or Sep and + we are doing named color replacement. */ +static int +gx_remap_IndexedNamed(const gs_client_color * pcc, const gs_color_space * pcs, +gx_device_color * pdc, const gs_imager_state * pis, gx_device * dev, +gs_color_select_t select) +{ + frac conc[GS_CLIENT_COLOR_MAX_COMPONENTS]; + const gs_color_space *pconcs; + int i = pcs->type->num_components(pcs); + gs_client_color cc; + bool mapped; + int code = gs_indexed_limit_and_lookup(pcc, pcs, &cc); + + if (code < 0) + return code; + + pconcs = cs_concrete_space(pcs, pis); + /* Now see if we can do the named color replacement */ + mapped = gx_remap_named_color(&cc, pconcs, pdc, pis, dev, select); + + if (!mapped) { + /* Named color remap failed perhaps due to colorant not found. Do the + old approach of concretize of the base space and remap concrete color */ + const gs_color_space *pbcs = + (const gs_color_space *)pcs->base_space; + + code = (*pbcs->type->concretize_color) (&cc, pbcs, conc, pis, dev); + if (code < 0) + return code; + code = (*pconcs->type->remap_concrete_color)(conc, pconcs, pdc, pis, dev, select); + } + + /* Save original color space and color info into dev color */ + i = any_abs(i); + for (i--; i >= 0; i--) + pdc->ccolor.paint.values[i] = pcc->paint.values[i]; + pdc->ccolor_valid = true; + return code; +} + /* Look up an index in an Indexed color space. */ int gs_cspace_indexed_lookup(const gs_color_space *pcs, int index, diff -Nru ghostscript-9.15+dfsg/base/gscolor2.h ghostscript-9.16~dfsg~0/base/gscolor2.h --- ghostscript-9.15+dfsg/base/gscolor2.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gscolor2.h 2015-03-30 08:21:24.000000000 +0000 @@ -46,6 +46,7 @@ /* Declare the Indexed color space type. */ extern const gs_color_space_type gs_color_space_type_Indexed; +extern const gs_color_space_type gs_color_space_type_Indexed_Named; /* CIE-specific routines */ #ifndef gs_cie_render_DEFINED diff -Nru ghostscript-9.15+dfsg/base/gscsepr.c ghostscript-9.16~dfsg~0/base/gscsepr.c --- ghostscript-9.15+dfsg/base/gscsepr.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gscsepr.c 2015-03-30 08:21:24.000000000 +0000 @@ -301,10 +301,21 @@ gs_color_select_t select) { int code = 0; + bool mapped = false; - if (pcs->params.separation.sep_type != SEP_NONE) - code = gx_default_remap_color(pcc, pcs, pdc, pis, dev, select); - else { + if (pcs->params.separation.sep_type != SEP_NONE) { + /* First see if we want to do a direct remap with a named color table. + Note that this call occurs regardless of the alt color space boolean + value. A decision can be made in gsicc_transform_named_color to + return false if you don't want those named colors to be mapped */ + if (pcs->params.separation.sep_type == SEP_OTHER && + pis->icc_manager->device_named != NULL) { + /* Try to apply the direct replacement */ + mapped = gx_remap_named_color(pcc, pcs, pdc, pis, dev, select); + } + if (!mapped) + code = gx_default_remap_color(pcc, pcs, pdc, pis, dev, select); + } else { color_set_null(pdc); } /* Save original color space and color info into dev color */ @@ -321,46 +332,10 @@ gs_client_color cc; gs_color_space *pacs = pcs->base_space; bool is_lab; - int k; - int num_des_comps = dev->color_info.num_components; - gsicc_namedcolor_t named_color; if (pcs->params.separation.sep_type == SEP_OTHER && pcs->params.separation.use_alt_cspace) { gs_device_n_map *map = pcs->params.separation.map; - /* First see if we have a named color object that we can use to try - to map from the spot color into device values. */ - if (pis->icc_manager->device_named != NULL) { - /* There is a table present. If we have the colorant name - then get the device values */ - gx_color_value device_values[GX_DEVICE_COLOR_MAX_COMPONENTS]; - const gs_separation_name name = pcs->params.separation.sep_name; - byte *pname; - uint name_size; - gsicc_rendering_param_t rendering_params; - - /* Define the rendering intents. */ - rendering_params.black_point_comp = pis->blackptcomp; - rendering_params.graphics_type_tag = dev->graphics_type_tag; - rendering_params.override_icc = false; - rendering_params.preserve_black = gsBKPRESNOTSPECIFIED; - rendering_params.rendering_intent = pis->renderingintent; - rendering_params.cmm = gsCMM_DEFAULT; - pcs->params.separation.get_colorname_string(pis->memory, name, - &pname, &name_size); - /* Make the name structure and initialized it */ - named_color.colorant_name = (char*) pname; - named_color.name_size = name_size; - code = gsicc_transform_named_color(pc->paint.values, &named_color, - 1, device_values, pis, dev, NULL, - &rendering_params); - if (code == 0) { - for (k = 0; k < num_des_comps; k++){ - pconc[k] = float2frac(((float) device_values[k])/65535.0); - } - return(0); - } - } /* Check the 1-element cache first. */ if (map->cache_valid && map->tint[0] == pc->paint.values[0]) { int i, num_out = gs_color_space_num_components(pacs); @@ -394,8 +369,7 @@ cc.paint.values[2] = (cc.paint.values[2]+128)/255.0; } return cs_concretize_color(&cc, pacs, pconc, pis, dev); - } - else { + } else { pconc[0] = gx_unit_frac(pc->paint.values[0]); } return 0; @@ -419,8 +393,8 @@ return (*pacs->type->remap_concrete_color) (pconc, pacs, pdc, pis, dev, select); - } - else { + } else { + /* We need to determine if we did a direct color replacement */ gx_remap_concrete_separation(pconc[0], pdc, pis, dev, select); return 0; } diff -Nru ghostscript-9.15+dfsg/base/gsdevice.c ghostscript-9.16~dfsg~0/base/gsdevice.c --- ghostscript-9.15+dfsg/base/gsdevice.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsdevice.c 2015-03-30 08:21:24.000000000 +0000 @@ -1133,6 +1133,11 @@ goto done; } + if (strlen(fname) == 0) { + code = gs_note_error(gs_error_undefinedfilename); + emprintf1(dev->memory, "Device '%s' requires an output file but no file was specified.\n", dev->dname); + goto done; + } code = gx_parse_output_file_name(&parsed, &fmt, fname, strlen(fname), dev->memory); if (code < 0) { goto done; @@ -1187,7 +1192,7 @@ else { *pfile = gp_open_printer(dev->memory, (pfname[0] ? pfname : fname), binary); if (!(*pfile)) { - emprintf1(dev->memory, "**** Could not open the file %s .\n", (pfname[0] ? pfname : fname)); + emprintf1(dev->memory, "**** Could not open the file '%s'.\n", (pfname[0] ? pfname : fname)); code = gs_note_error(gs_error_invalidfileaccess); } diff -Nru ghostscript-9.15+dfsg/base/gsdparam.c ghostscript-9.16~dfsg~0/base/gsdparam.c --- ghostscript-9.15+dfsg/base/gsdparam.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsdparam.c 2015-03-30 08:21:24.000000000 +0000 @@ -290,7 +290,7 @@ blackptcomps[k] = gsBPNOTSPECIFIED; blackpreserve[k] = gsBKPRESNOTSPECIFIED; } else { - param_string_from_string(profile_array[k], + param_string_from_transient_string(profile_array[k], dev_profile->device_profile[k]->name); profile_intents[k] = dev_profile->rendercond[k].rendering_intent; blackptcomps[k] = dev_profile->rendercond[k].black_point_comp; @@ -300,13 +300,13 @@ if (dev_profile->proof_profile == NULL) { param_string_from_string(proof_profile, null_str); } else { - param_string_from_string(proof_profile, + param_string_from_transient_string(proof_profile, dev_profile->proof_profile->name); } if (dev_profile->link_profile == NULL) { param_string_from_string(link_profile, null_str); } else { - param_string_from_string(link_profile, + param_string_from_transient_string(link_profile, dev_profile->link_profile->name); } devicegraytok = dev_profile->devicegraytok; @@ -325,7 +325,7 @@ colorant_names = gsicc_get_dev_icccolorants(dev_profile); if (colorant_names != NULL) { - param_string_from_string(icc_colorants, colorant_names); + param_string_from_transient_string(icc_colorants, colorant_names); } else { param_string_from_string(icc_colorants, null_str); } @@ -501,7 +501,7 @@ blackptcomps[k] = gsBPNOTSPECIFIED; blackpreserve[k] = gsBKPRESNOTSPECIFIED; } else { - param_string_from_string(profile_array[k], + param_string_from_transient_string(profile_array[k], dev_profile->device_profile[k]->name); profile_intents[k] = dev_profile->rendercond[k].rendering_intent; blackptcomps[k] = dev_profile->rendercond[k].black_point_comp; @@ -512,13 +512,13 @@ if (dev_profile->proof_profile == NULL) { param_string_from_string(proof_profile, null_str); } else { - param_string_from_string(proof_profile, + param_string_from_transient_string(proof_profile, dev_profile->proof_profile->name); } if (dev_profile->link_profile == NULL) { param_string_from_string(link_profile, null_str); } else { - param_string_from_string(link_profile, + param_string_from_transient_string(link_profile, dev_profile->link_profile->name); } devicegraytok = dev_profile->devicegraytok; @@ -537,7 +537,7 @@ colorant_names = gsicc_get_dev_icccolorants(dev_profile); if (colorant_names != NULL) { - param_string_from_string(icc_colorants, colorant_names); + param_string_from_transient_string(icc_colorants, colorant_names); } else { param_string_from_string(icc_colorants, null_str); } @@ -1423,27 +1423,30 @@ (*dev_proc(dev, get_page_device))(dev) != 0 ) { switch (code = param_read_int(plist, (param_name = "NumCopies"), &nci)) { - case 0: - if (nci < 0) - ecode = gs_error_rangecheck; - else { - ncset = 1; - break; - } - goto nce; - default: - if ((code = param_read_null(plist, param_name)) == 0) { - ncset = 0; - break; - } - ecode = code; /* can't be 1 */ + case 0: + if (nci < 0) + ecode = gs_error_rangecheck; + else { + ncset = 1; + break; + } + goto nce; + default: + if ((code = param_read_null(plist, param_name)) == 0) { + ncset = 0; + break; + } + ecode = code; /* can't be 1 */ nce: - param_signal_error(plist, param_name, ecode); - case 1: - break; + param_signal_error(plist, param_name, ecode); + case 1: + break; + } } + /* Set the ICC output colors first */ + if ((code = param_read_string(plist, "ICCOutputColors", &icc_pro)) != 1) { + gx_default_put_icc_colorants(&icc_pro, dev); } - /* Set the directory first */ if ((code = param_read_string(plist, "OutputICCProfile", &icc_pro)) != 1) { gx_default_put_icc(&icc_pro, dev, gsDEFAULTPROFILE); } @@ -1464,9 +1467,6 @@ if ((code = param_read_string(plist, "DeviceLinkProfile", &icc_pro)) != 1) { gx_default_put_icc(&icc_pro, dev, gsLINKPROFILE); } - if ((code = param_read_string(plist, "ICCOutputColors", &icc_pro)) != 1) { - gx_default_put_icc_colorants(&icc_pro, dev); - } if ((code = param_read_int(plist, (param_name = "RenderIntent"), &(rend_intent[0]))) < 0) { ecode = code; diff -Nru ghostscript-9.15+dfsg/base/gsequivc.c ghostscript-9.16~dfsg~0/base/gsequivc.c --- ghostscript-9.15+dfsg/base/gsequivc.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsequivc.c 2015-03-30 08:21:24.000000000 +0000 @@ -199,7 +199,6 @@ } } - static void update_DeviceN_spot_equivalent_cmyk_colors(gx_device * pdev, const gs_state * pgs, const gs_color_space * pcs, @@ -291,6 +290,9 @@ int code; code = dev_proc(pdev, get_profile)(pdev, &dev_profile); + if (code < 0) + return; + /* If all of the color_info is valid then there is nothing to do. */ if (pparams->all_color_info_valid) return; @@ -332,7 +334,7 @@ static void save_spot_equivalent_cmyk_color(int sep_num, - equivalent_cmyk_color_params * pparams, frac cmyk[4]) + equivalent_cmyk_color_params * pparams, const frac cmyk[4]) { pparams->color[sep_num].c = cmyk[0]; pparams->color[sep_num].m = cmyk[1]; @@ -433,11 +435,19 @@ dmprintf(pis->memory, "cmap_separation_capture_cmyk_color - this routine should not be executed\n"); } +/* The call to this is actually going to occur if we happen to be using a + named color profile and doing a replacement. Since the destination profile + will have been CMYK based during the swap out to find the equivalent color, we can + go ahead and just grab the cmyk portion */ static void cmap_devicen_capture_cmyk_color(const frac * pcc, gx_device_color * pdc, const gs_imager_state * pis, gx_device * dev, gs_color_select_t select) { - dmprintf(pis->memory, "cmap_devicen_capture_cmyk_color - this routine should not be executed\n"); + equivalent_cmyk_color_params * pparams = + ((color_capture_device *)dev)->pequiv_cmyk_colors; + int sep_num = ((color_capture_device *)dev)->sep_num; + + save_spot_equivalent_cmyk_color(sep_num, pparams, pcc); } /* @@ -453,7 +463,6 @@ color_capture_device temp_device = { 0 }; gx_device_color dev_color; gsicc_rendering_param_t render_cond; - int code; cmm_dev_profile_t *dev_profile; cmm_profile_t *curr_output_profile; cmm_dev_profile_t temp_profile = { /* Initialize to 0's/NULL's */ @@ -467,7 +476,7 @@ { 0 } /* rc_header */ }; - code = dev_proc(pdev, get_profile)(pdev, &dev_profile); + dev_proc(pdev, get_profile)(pdev, &dev_profile); gsicc_extract_profile(pdev->graphics_type_tag, dev_profile, &(curr_output_profile), &render_cond); /* @@ -521,3 +530,11 @@ pcs->type->remap_color (pcc, pcs, &dev_color, &temp_state, (gx_device *)&temp_device, gs_color_select_texture); } + +/* Used for detecting if we are trying to find the equivalant color during + named color replacement */ +bool +named_color_equivalent_cmyk_colors(const gs_imager_state * pis) +{ + return pis->cmap_procs == &cmap_capture_cmyk_color; +} diff -Nru ghostscript-9.15+dfsg/base/gsequivc.h ghostscript-9.16~dfsg~0/base/gsequivc.h --- ghostscript-9.15+dfsg/base/gsequivc.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsequivc.h 2015-03-30 08:21:24.000000000 +0000 @@ -61,4 +61,8 @@ const gs_color_space * pcs, int sep_num, equivalent_cmyk_color_params * pparams); +/* Used in named color replacement to detect that we are doing the equivalent + computation */ +bool named_color_equivalent_cmyk_colors(const gs_imager_state * pis); + #endif /* define gsequivc_INCLUDED */ diff -Nru ghostscript-9.15+dfsg/base/gsform1.h ghostscript-9.16~dfsg~0/base/gsform1.h --- ghostscript-9.15+dfsg/base/gsform1.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsform1.h 2015-03-30 08:21:24.000000000 +0000 @@ -21,5 +21,6 @@ gs_matrix form_matrix; gs_matrix CTM; gx_clip_path * pcpath; + int FormID; } gs_form_template_t; diff -Nru ghostscript-9.15+dfsg/base/gsicc_cache.c ghostscript-9.16~dfsg~0/base/gsicc_cache.c --- ghostscript-9.15+dfsg/base/gsicc_cache.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsicc_cache.c 2015-03-30 08:21:24.000000000 +0000 @@ -261,6 +261,19 @@ (hash->des_hash >> 1) ^ (hash->rend_hash) ^ (hash->src_hash); } +int64_t +gsicc_get_hash(cmm_profile_t *profile) +{ + if (!profile->hash_is_valid) { + int64_t hash; + + gsicc_get_icc_buff_hash(profile->buffer, &hash, profile->buffer_size); + profile->hashcode = hash; + profile->hash_is_valid = true; + } + return profile->hashcode; +} + void gsicc_get_icc_buff_hash(unsigned char *buffer, int64_t *hash, unsigned int buff_size) { @@ -1029,7 +1042,9 @@ buffer are parsed and placed into a custom stucture that is pointed to by the profile pointer. Note that this pointer is not visible to the garbage collector and should be allocated in non-gc memory as is demonstrated in - this sample. + this sample. The structure elements are released when the profile is + destroyed through the call to gsicc_named_profile_release, which is set + as the value of the profile member variable release. Note that there are calls defined in gsicc_littlecms.c that will create link transforms between Named Color ICC profiles and the output device. Such @@ -1046,8 +1061,8 @@ !!!!IT WILL BE NECESSARY TO PERFORM THE PROPER DEALLOCATION CLEAN-UP OF THE STRUCTURES WHEN rc_free_icc_profile OCCURS FOR THE NAMED - COLOR PROFILE!!!!!! - + COLOR PROFILE!!!!!! See gsicc_named_profile_release below for an example. + This is set in the profile release member variable. */ /* Define the demo structure and function for named color look-up */ @@ -1055,6 +1070,7 @@ typedef struct gsicc_namedcolortable_s { gsicc_namedcolor_t *named_color; /* The named color */ unsigned int number_entries; /* The number of entries */ + gs_memory_t *memory; } gsicc_namedcolortable_t; /* Support functions for parsing buffer */ @@ -1077,7 +1093,38 @@ } } -/* Function returns -1 if name not found. Otherwise transform the color. */ +/* Release the structures we allocated in gsicc_transform_named_color */ +static void +gsicc_named_profile_release(void *ptr) +{ + gsicc_namedcolortable_t *namedcolor_table = (gsicc_namedcolortable_t*) ptr; + unsigned int num_entries; + gs_memory_t *mem; + int k; + gsicc_namedcolor_t *namedcolor_data; + + if (namedcolor_table != NULL) { + mem = namedcolor_table->memory; + num_entries = namedcolor_table->number_entries; + namedcolor_data = namedcolor_table->named_color; + + for (k = 0; k < num_entries; k++) { + gs_free(mem, namedcolor_data[k].colorant_name, 1, + namedcolor_data[k].name_size + 1, + "gsicc_named_profile_release (colorant_name)"); + } + + gs_free(mem, namedcolor_data, num_entries, sizeof(gsicc_namedcolor_t), + "gsicc_named_profile_release (namedcolor_data)"); + + gs_free(namedcolor_table->memory, namedcolor_table, 1, + sizeof(gsicc_namedcolortable_t), + "gsicc_named_profile_release (namedcolor_table)"); + } +} + +/* Function returns -1 if a name is not found. Otherwise it will transform + the named colors and return 0 */ int gsicc_transform_named_color(const float tint_values[], gsicc_namedcolor_t color_names[], @@ -1087,11 +1134,11 @@ cmm_profile_t *gs_output_profile, gsicc_rendering_param_t *rendering_params) { - gsicc_namedcolor_t *namedcolor_data; unsigned int num_entries; cmm_profile_t *named_profile; gsicc_namedcolortable_t *namedcolor_table; + int num_nonnone_names; int k,j,n; float lab[3]; char *buffptr; @@ -1113,6 +1160,7 @@ gsicc_rendering_param_t render_cond; cmm_dev_profile_t *dev_profile; int indices[GS_CLIENT_COLOR_MAX_COMPONENTS]; + gs_memory_t *nongc_mem = pis->memory->non_gc_memory; /* Check if the data that we have has already been generated. */ if (pis->icc_manager != NULL) { @@ -1124,37 +1172,38 @@ /* Note that we do this in non-GC memory since the profile pointer is not GC'd */ namedcolor_table = - (gsicc_namedcolortable_t*) gs_malloc(pis->memory->stable_memory, 1, + (gsicc_namedcolortable_t*) gs_malloc(nongc_mem, 1, sizeof(gsicc_namedcolortable_t), "gsicc_transform_named_color"); - if (namedcolor_table == NULL) return(gs_error_VMerror); + if (namedcolor_table == NULL) + return(gs_error_VMerror); + namedcolor_table->memory = nongc_mem; /* Parse buffer and load the structure we will be searching */ buffptr = (char*) named_profile->buffer; buffer_count = named_profile->buffer_size; count = sscanf(buffptr,"%d",&num_entries); if (num_entries < 1 || count == 0) { - gs_free(pis->memory, namedcolor_table, 1, + gs_free(nongc_mem, namedcolor_table, 1, sizeof(gsicc_namedcolortable_t), "gsicc_transform_named_color"); - return (-1); + return -1; } code = get_to_next_line(&buffptr,&buffer_count); if (code < 0) { - gs_free(pis->memory, - namedcolor_table, 1, + gs_free(nongc_mem, namedcolor_table, 1, sizeof(gsicc_namedcolortable_t), "gsicc_transform_named_color"); - return (-1); + return -1; } namedcolor_data = - (gsicc_namedcolor_t*) gs_malloc(pis->memory->stable_memory, num_entries, + (gsicc_namedcolor_t*) gs_malloc(nongc_mem, num_entries, sizeof(gsicc_namedcolor_t), "gsicc_transform_named_color"); if (namedcolor_data == NULL) { - gs_free(pis->memory, namedcolor_table, 1, + gs_free(nongc_mem, namedcolor_table, num_entries, sizeof(gsicc_namedcolortable_t), "gsicc_transform_named_color"); - return (gs_error_VMerror); + return gs_error_VMerror; } namedcolor_table->number_entries = num_entries; namedcolor_table->named_color = namedcolor_data; @@ -1178,8 +1227,7 @@ namedcolor_data[k].name_size = curr_name_size; /* +1 for the null */ namedcolor_data[k].colorant_name = - (char*) gs_malloc(pis->memory->stable_memory,1, - curr_name_size+1, + (char*)gs_malloc(nongc_mem, 1, curr_name_size + 1, "gsicc_transform_named_color"); if (namedcolor_data[k].colorant_name == NULL) return gs_error_VMerror; @@ -1197,53 +1245,62 @@ if (lab[j] < 0) lab[j] = 0; namedcolor_data[k].lab[j] = (unsigned short) lab[j]; } - if (code < 0) { - gs_free(pis->memory, namedcolor_table, 1, - sizeof(gsicc_namedcolortable_t), - "gsicc_transform_named_color"); - gs_free(pis->memory, namedcolor_data, num_entries, - sizeof(gsicc_namedcolordata_t), - "gsicc_transform_named_color"); - return (-1); - } } /* Assign to the profile pointer */ named_profile->profile_handle = namedcolor_table; + named_profile->release = gsicc_named_profile_release; } else { if (named_profile->profile_handle != NULL ) { namedcolor_table = (gsicc_namedcolortable_t*) named_profile->profile_handle; num_entries = namedcolor_table->number_entries; } else { - return(-1); + return -1; } } /* Go through each of our spot names, getting the color value for each one. */ + num_nonnone_names = num_names; for (n = 0; n < num_names; n++) { - /* Search our structure for the color name */ + /* Search our structure for the color name. Ignore the None + colorant names. All is a special case that someone may + want to detect and do some special handling for. In this + particular example we would punt with All and let the default + methods handle it */ found_match = false; - for (k = 0; k < num_entries; k++) { - if (color_names[n].name_size == - namedcolor_table->named_color[k].name_size) { - if( strncmp((const char *) namedcolor_table->named_color[k].colorant_name, - (const char *) color_names[n].colorant_name, color_names[n].name_size) == 0) { - found_match = true; - break; + + if (strncmp("None", (const char *)color_names[n].colorant_name, + color_names[n].name_size) == 0) { + num_nonnone_names--; + } else { + /* Colorant was not None */ + for (k = 0; k < num_entries; k++) { + if (color_names[n].name_size == + namedcolor_table->named_color[k].name_size) { + if (strncmp((const char *)namedcolor_table->named_color[k].colorant_name, + (const char *)color_names[n].colorant_name, color_names[n].name_size) == 0) { + found_match = true; + break; + } } } - } - if (found_match) { - indices[n] = k; - } else { - /* We do not know this colorant, return -1 */ - return -1; + if (found_match) { + indices[n] = k; + } else { + /* We do not know this colorant, return -1 */ + return -1; + } } } + if (num_nonnone_names < 1) + return -1; /* No non-None colorants. */ /* We have all the colorants. Lets go through and see if we can make something that looks like a merge of the various ones */ - /* Apply tint, blend LAB values */ - for (n = 0; n < num_names; n++) { + /* Apply tint, blend LAB values. Note that we may have wanted to + check if we even want to do this. It is possible that the + device directly supports this particular colorant. One may + want to check the alt tint transform boolean */ + for (n = 0; n < num_nonnone_names; n++) { for (j = 0; j < 3; j++) { temp = (float) namedcolor_table->named_color[indices[n]].lab[j] * tint_values[n] + (float) white_lab[j] * (1.0 - tint_values[n]); @@ -1261,11 +1318,20 @@ psrc[2] = (psrc[2] + temp_lab[2]) / 2; /* b* */ } } - /* Push LAB value through CMM to get device values */ + /* Push LAB value through CMM to get CMYK device values */ + /* Note that there are several options here. You could us an NCLR + icc profile to compute the device colors that you want. For, + example if the output device had an NCLR profile. + However, what you MUST do here is set ALL the device values. + Hence, below we initialize all of them to zero and in this + particular example, set only the ones that were output from + the device profile */ if ( gs_output_profile != NULL ) { curr_output_profile = gs_output_profile; } else { - /* Use the device profile */ + /* Use the device profile. Note if one was not set for the + device, the default CMYK profile is used. Note that + if we specified and NCLR profile it will be used here */ code = dev_proc(dev, get_profile)(dev, &dev_profile); gsicc_extract_profile(dev->graphics_type_tag, dev_profile, &(curr_output_profile), @@ -1283,17 +1349,28 @@ (icc_link->procs.map_color)(dev, icc_link, psrc, psrc_temp, 2); } gsicc_release_link(icc_link); - for ( k = 0; k < curr_output_profile->num_comps; k++){ + + /* Clear out ALL the color values */ + for (k = 0; k < dev->color_info.num_components; k++){ + device_values[k] = 0; + } + /* Set only the values that came from the profile. By default + this would generally be just CMYK values. For the equivalent + color computation case it certainly will be. If someone + specified an NCLR profile it could be more. Note that if an + NCLR profile is being used we will want to make sure the colorant + order is correct */ + for (k = 0; k < curr_output_profile->num_comps; k++){ device_values[k] = psrc_temp[k]; } return 0; } } - return -1; + return -1; /* Color not found */ } /* Used by gs to notify the ICC manager that we are done with this link for now */ -/* This may release elements waiting on a icc_link_cache slot */ +/* This may release elements waiting on an icc_link_cache slot */ void gsicc_release_link(gsicc_link_t *icclink) { @@ -1346,7 +1423,6 @@ } /* Used to initialize the buffer description prior to color conversion */ - void gsicc_init_buffer(gsicc_bufferdesc_t *buffer_desc, unsigned char num_chan, unsigned char bytes_per_chan, bool has_alpha, bool alpha_first, bool is_planar, int plane_stride, int row_stride, diff -Nru ghostscript-9.15+dfsg/base/gsicc_cache.h ghostscript-9.16~dfsg~0/base/gsicc_cache.h --- ghostscript-9.15+dfsg/base/gsicc_cache.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsicc_cache.h 2015-03-30 08:21:24.000000000 +0000 @@ -59,6 +59,7 @@ void gsicc_release_link(gsicc_link_t *icclink); void gsicc_link_free(gsicc_link_t *icc_link, gs_memory_t *memory); void gsicc_get_icc_buff_hash(unsigned char *buffer, int64_t *hash, unsigned int buff_size); +int64_t gsicc_get_hash(cmm_profile_t *profile); int gsicc_transform_named_color(const float tint_values[], gsicc_namedcolor_t color_names[], uint num_names, diff -Nru ghostscript-9.15+dfsg/base/gsicc_create.c ghostscript-9.16~dfsg~0/base/gsicc_create.c --- ghostscript-9.15+dfsg/base/gsicc_create.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsicc_create.c 2015-03-30 08:21:24.000000000 +0000 @@ -3364,6 +3364,11 @@ return srcprofile->buffer; } + if (srcprofile->profile_handle == NULL) + srcprofile->profile_handle = + gsicc_get_profile_handle_buffer(srcprofile->buffer, + srcprofile->buffer_size, pis->memory); + /* Need to create v2 profile */ gsicc_create_v2(pis, srcprofile); diff -Nru ghostscript-9.15+dfsg/base/gsicc_manage.c ghostscript-9.16~dfsg~0/base/gsicc_manage.c --- ghostscript-9.15+dfsg/base/gsicc_manage.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsicc_manage.c 2015-03-30 08:21:24.000000000 +0000 @@ -58,8 +58,8 @@ static gsicc_colorname_t* gsicc_new_colorname(gs_memory_t *memory); static gsicc_namelist_t* gsicc_get_spotnames(gcmmhprofile_t profile, gs_memory_t *memory); -static void gsicc_manager_free_contents(gs_memory_t * mem, gsicc_manager_t *icc_man, - client_name_t cname); +static void gsicc_manager_free_contents(gsicc_manager_t *icc_man, + client_name_t cname); static void rc_gsicc_manager_free(gs_memory_t * mem, void *ptr_in, client_name_t cname); @@ -1366,6 +1366,10 @@ int num_comps = profile_struct->device_profile[0]->num_comps; char temp_str[DEFAULT_ICC_COLORANT_LENGTH+2]; + /* If names are already set then we do not want to set default ones */ + if (profile_struct->spotnames != NULL) + return 0; + free_str = true; /* Assume first 4 are CMYK */ total_len = ((DEFAULT_ICC_COLORANT_LENGTH + 1) * (num_comps-4)) + @@ -1387,6 +1391,7 @@ if (profile_struct->spotnames != NULL && profile_struct->spotnames->name_str != NULL && strlen(profile_struct->spotnames->name_str) == str_len) { + /* Here we check if the names are the same */ if (strncmp(name_str, profile_struct->spotnames->name_str, str_len) == 0) { if (free_str) gs_free_object(dev->memory, name_str, @@ -1768,6 +1773,8 @@ result->vers = ICCVERS_UNKNOWN; result->v2_data = NULL; result->v2_size = 0; + result->release = gscms_release_profile; /* Default case */ + if (result->lock == NULL) { gs_free_object(mem_nongc, result, "gsicc_profile_new"); gs_free_object(mem_nongc, nameptr, "gsicc_profile_new"); @@ -1789,18 +1796,18 @@ ptr_in, profile->rc.ref_count); if (profile->rc.ref_count <= 1 ) { /* Clear out the buffer if it is full */ - if(profile->buffer != NULL) { + if (profile->buffer != NULL) { gs_free_object(mem_nongc, profile->buffer, "rc_free_icc_profile(buffer)"); profile->buffer = NULL; } if_debug0m(gs_debug_flag_icc, mem, "[icc] profile freed\n"); /* Release this handle if it has been set */ - if(profile->profile_handle != NULL) { - gscms_release_profile(profile->profile_handle); + if (profile->profile_handle != NULL) { + profile->release(profile->profile_handle); profile->profile_handle = NULL; } /* Release the name if it has been set */ - if(profile->name != NULL) { + if (profile->name != NULL) { gs_free_object(mem_nongc, profile->name,"rc_free_icc_profile(name)"); profile->name = NULL; profile->name_length = 0; @@ -1810,8 +1817,7 @@ gx_monitor_free(profile->lock); profile->lock = NULL; } - /* If we had a DeviceN profile with names - deallocate that now */ + /* If we had a DeviceN profile with names deallocate that now */ if (profile->spotnames != NULL) { /* Free the linked list in this object */ gsicc_free_spotnames(profile->spotnames, mem_nongc); @@ -1922,7 +1928,7 @@ { gsicc_manager_t *icc_man = (gsicc_manager_t *)vptr; - gsicc_manager_free_contents(memory, icc_man, "gsicc_manager_finalize"); + gsicc_manager_free_contents(icc_man, "gsicc_manager_finalize"); } gsicc_manager_t * @@ -1952,7 +1958,7 @@ return result; } -static void gsicc_manager_free_contents(gs_memory_t * mem, gsicc_manager_t *icc_manager, +static void gsicc_manager_free_contents(gsicc_manager_t *icc_manager, client_name_t cname) { int k; @@ -2057,13 +2063,13 @@ if (code < 0) return code; /* Allocate the buffer, stuff with the profile */ - buffer_ptr = gs_alloc_bytes(memory, profile_size, + buffer_ptr = gs_alloc_bytes(memory->non_gc_memory, profile_size, "gsicc_load_profile"); if (buffer_ptr == NULL) return gs_throw(gs_error_VMerror, "Insufficient memory for profile buffer"); num_bytes = sfread(buffer_ptr,sizeof(unsigned char),profile_size,s); if( num_bytes != profile_size) { - gs_free_object(memory, buffer_ptr, "gsicc_load_profile"); + gs_free_object(memory->non_gc_memory, buffer_ptr, "gsicc_load_profile"); return -1; } profile->buffer = buffer_ptr; diff -Nru ghostscript-9.15+dfsg/base/gsicc_nocm.c ghostscript-9.16~dfsg~0/base/gsicc_nocm.c --- ghostscript-9.15+dfsg/base/gsicc_nocm.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsicc_nocm.c 2015-03-30 08:21:24.000000000 +0000 @@ -32,8 +32,6 @@ /* A link structure for our non-cm color transform */ typedef struct nocm_link_s { - /* device (or default) procs to do the transformation */ - gx_cm_color_map_procs cm_procs; /* Since RGB to CMYK requires BG and UCR, we need to have the imager state available */ gs_imager_state *pis; @@ -252,18 +250,18 @@ frac_in[k] = byte2frac(data[k]); } } - /* Use the device procedure */ + /* Use the device procedures to do the mapping */ switch (num_in) { case 1: - (link->cm_procs.map_gray)(dev, frac_in[0], frac_out); + dev_proc(dev, get_color_mapping_procs)(dev)->map_gray(dev, frac_in[0], frac_out); break; case 3: - (link->cm_procs.map_rgb)(dev, link->pis, frac_in[0], frac_in[1], - frac_in[2], frac_out); + dev_proc(dev, get_color_mapping_procs)(dev)->map_rgb(dev, link->pis, frac_in[0], frac_in[1], + frac_in[2], frac_out); break; case 4: - (link->cm_procs.map_cmyk)(dev, frac_in[0], frac_in[1], frac_in[2], - frac_in[3], frac_out); + dev_proc(dev, get_color_mapping_procs)(dev)->map_cmyk(dev, frac_in[0], frac_in[1], + frac_in[2], frac_in[3], frac_out); break; default: break; @@ -348,7 +346,6 @@ gsicc_hashlink_t hash; nocm_link_t *nocm_link; gs_memory_t *mem = pis->memory->non_gc_memory; - const gx_cm_color_map_procs * cm_procs; bool pageneutralcolor = false; cmm_dev_profile_t *dev_profile; int code; @@ -364,13 +361,6 @@ } } - /* If the cm_procs are forwarding due to the overprint device or other - odd thing, drill down now and get the proper ones */ - if (fwd_uses_fwd_cmap_procs(dev)) { - cm_procs = fwd_get_target_cmap_procs(dev); - } else { - cm_procs = dev_proc(dev, get_color_mapping_procs)(dev); - } /* We will add this to the link cache so that we can avoid the issue of black_generation and undercolor removal being GC values. Since the link is not GC we would need to copy the contents over @@ -426,9 +416,6 @@ } nocm_link->num_out = min(dev->color_info.num_components, GS_CLIENT_COLOR_MAX_COMPONENTS); - nocm_link->cm_procs.map_cmyk = cm_procs->map_cmyk; - nocm_link->cm_procs.map_rgb = cm_procs->map_rgb; - nocm_link->cm_procs.map_gray = cm_procs->map_gray; nocm_link->num_in = src_index; result->num_input = nocm_link->num_in; diff -Nru ghostscript-9.15+dfsg/base/gsiodev.c ghostscript-9.16~dfsg~0/base/gsiodev.c --- ghostscript-9.15+dfsg/base/gsiodev.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsiodev.c 2015-03-30 08:21:24.000000000 +0000 @@ -63,7 +63,7 @@ gs_iodev_init(gs_memory_t * mem) { /* Make writable copies of all IODevices. */ gx_io_device **table = - gs_alloc_struct_array(mem, gx_io_device_table_count, + gs_alloc_struct_array_immovable(mem, gx_io_device_table_count, gx_io_device *, &st_io_device_ptr_element, "gs_iodev_init(table)"); gs_lib_ctx_t *libctx = gs_lib_ctx_get_interp_instance(mem); @@ -75,7 +75,7 @@ for (i = 0; i < gx_io_device_table_count; ++i) { gx_io_device *iodev = - gs_alloc_struct(mem, gx_io_device, &st_io_device, + gs_alloc_struct_immovable(mem, gx_io_device, &st_io_device, "gs_iodev_init(iodev)"); if (iodev == 0) diff -Nru ghostscript-9.15+dfsg/base/gspcolor.c ghostscript-9.16~dfsg~0/base/gspcolor.c --- ghostscript-9.15+dfsg/base/gspcolor.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gspcolor.c 2015-03-30 08:21:24.000000000 +0000 @@ -38,6 +38,7 @@ #include "gsimage.h" #include "gsiparm4.h" #include "stream.h" +#include "gsovrc.h" /* GC descriptors */ public_st_pattern_template(); @@ -266,10 +267,22 @@ /* * Set the overprint compositor for a Pattern color space. This does nothing; * for patterns the overprint compositor is set at set_device_color time. + * However, it is possible that this pattern color has nothing to do with what + * is about to happen (e.g. an image enumeration and fill). Hence, we should + * at least disable the overprint compositor if overprint is off. If overprint + * is not off, it is not clear how we should proceed, as the color space is + * a factor in that set up and here the color space is a pattern. */ static int gx_set_overprint_Pattern(const gs_color_space * pcs, gs_state * pgs) { + gs_overprint_params_t params; + + if (!pgs->overprint) { + params.retain_any_comps = false; + pgs->effective_overprint_mode = 0; + return gs_state_update_overprint(pgs, ¶ms); + } return 0; } diff -Nru ghostscript-9.15+dfsg/base/gsptype1.c ghostscript-9.16~dfsg~0/base/gsptype1.c --- ghostscript-9.15+dfsg/base/gsptype1.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gsptype1.c 2015-03-30 08:21:24.000000000 +0000 @@ -1563,7 +1563,6 @@ int n_chan; /* number of pixel planes including alpha */ int width; int height; - gs_blend_mode_t blend_mode; } tile_trans_clist_info_t; typedef struct gx_dc_serialized_tile_s { @@ -1573,6 +1572,7 @@ gs_matrix step_matrix; gs_rect bbox; int flags; + gs_blend_mode_t blending_mode; /* in case tile has transparency */ } gx_dc_serialized_tile_t; enum { @@ -1713,6 +1713,7 @@ | (ptile->has_overlap ? TILE_HAS_OVERLAP : 0); buf.step_matrix = ptile->step_matrix; buf.bbox = ptile->bbox; + buf.blending_mode = ptile->blending_mode; if (sizeof(buf) > left) { /* For a while we require the client to provide enough buffer size. */ return_error(gs_error_unregistered); /* Must not happen. */ @@ -1723,7 +1724,6 @@ offset1 += sizeof(buf); /* Do the transparency information now */ - trans_info.blend_mode = ptile->ttrans->blending_mode; trans_info.height = ptile->ttrans->height; trans_info.n_chan = ptile->ttrans->n_chan; trans_info.planestride = ptile->ttrans->planestride; @@ -1838,6 +1838,7 @@ | (ptile->is_simple ? TILE_IS_SIMPLE : 0) | (ptile->has_overlap ? TILE_HAS_OVERLAP : 0) | (ptile->cdev->common.page_uses_transparency ? TILE_USES_TRANSP : 0); + buf.blending_mode = ptile->blending_mode; /* in case tile has transparency */ if (sizeof(buf) > left) { /* For a while we require the client to provide enough buffer size. */ return_error(gs_error_unregistered); /* Must not happen. */ @@ -1993,7 +1994,7 @@ int64_t offset1 = offset; gx_color_tile *ptile; int code, l; - tile_trans_clist_info_t trans_info; + tile_trans_clist_info_t trans_info = { 0 }; int cache_space_needed; if (offset == 0) { @@ -2061,6 +2062,7 @@ ptile->tiling_type = (buf.flags & TILE_TYPE_MASK)>>TILE_TYPE_SHIFT; ptile->is_simple = !!(buf.flags & TILE_IS_SIMPLE); ptile->has_overlap = !!(buf.flags & TILE_HAS_OVERLAP); + ptile->blending_mode = buf.blending_mode; ptile->is_dummy = 0; if (!(buf.flags & TILE_IS_CLIST)) { @@ -2072,7 +2074,6 @@ ptile->ttrans = new_pattern_trans_buff(mem); /* trans_info was loaded above */ - ptile->ttrans->blending_mode = trans_info.blend_mode; ptile->ttrans->height = trans_info.height; ptile->ttrans->n_chan = trans_info.n_chan; ptile->ttrans->pdev14 = NULL; diff -Nru ghostscript-9.15+dfsg/base/gstparam.h ghostscript-9.16~dfsg~0/base/gstparam.h --- ghostscript-9.15+dfsg/base/gstparam.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gstparam.h 2015-03-30 08:21:24.000000000 +0000 @@ -80,11 +80,12 @@ /* Define the parameter structure for a transparency mask. */ typedef enum { TRANSPARENCY_MASK_Alpha, - TRANSPARENCY_MASK_Luminosity + TRANSPARENCY_MASK_Luminosity, + TRANSPARENCY_MASK_None /* special case for removing a SMask from the tos */ } gs_transparency_mask_subtype_t; #define GS_TRANSPARENCY_MASK_SUBTYPE_NAMES\ - "Alpha", "Luminosity" + "Alpha", "Luminosity", "None" /* See the gx_transparency_mask_params_t type below */ /* (Update gs_trans_mask_params_init if these change.) */ diff -Nru ghostscript-9.15+dfsg/base/gstrans.c ghostscript-9.16~dfsg~0/base/gstrans.c --- ghostscript-9.15+dfsg/base/gstrans.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gstrans.c 2015-03-30 08:21:24.000000000 +0000 @@ -162,7 +162,7 @@ gx_device *pdf14dev = NULL; int code; int curr_num = dev->color_info.num_components; - + /* * Send the PDF 1.4 create compositor action specified by the parameters. */ @@ -177,7 +177,7 @@ gx_set_device_only(pgs, pdf14dev); } - /* If we had a color space change and we are in overprint, then we need to + /* If we had a color space change and we are in overprint, then we need to update the drawn_comps */ if (pgs->overprint && curr_num != pdf14dev->color_info.num_components) { code = gs_do_set_overprint(pgs); @@ -373,7 +373,7 @@ } #endif if (dev_proc(pdev, begin_transparency_group) != 0) - return (*dev_proc(pdev, begin_transparency_group)) (pdev, &tgp, &bbox, pis, + return (*dev_proc(pdev, begin_transparency_group)) (pdev, &tgp, &bbox, pis, NULL); else return 0; @@ -560,49 +560,51 @@ } /* A new soft mask group, make sure the profiles are set */ if_debug0m('v', pgs->memory, "[v]pushing soft mask color sending\n"); - params_color.pdf14_op = PDF14_PUSH_SMASK_COLOR; - code = gs_state_update_pdf14trans(pgs, ¶ms_color); - if (code < 0) - return(code); - blend_color_space = gs_cspace_new_DeviceGray(pgs->memory); - blend_color_space->cmm_icc_profile_data = pgs->icc_manager->default_gray; - rc_increment(blend_color_space->cmm_icc_profile_data); - if_debug8m('v', pgs->memory, "[v](0x%lx)gs_begin_transparency_mask [%g %g %g %g]\n\ - subtype = %d Background_components = %d %s\n", - (ulong)pgs, pbbox->p.x, pbbox->p.y, pbbox->q.x, pbbox->q.y, - (int)ptmp->subtype, ptmp->Background_components, - (ptmp->TransferFunction == mask_transfer_identity ? "no TR" : - "has TR")); - /* Sample the transfer function */ - for (i = 0; i < MASK_TRANSFER_FUNCTION_SIZE; i++) { - float in = (float)(i * (1.0 / (MASK_TRANSFER_FUNCTION_SIZE - 1))); - float out; - - ptmp->TransferFunction(in, &out, ptmp->TransferFunction_data); - params.transfer_fn[i] = (byte)floor((double)(out * 255 + 0.5)); - } - /* Note: This function is called during the c-list writer side. */ - if ( blend_color_space->cmm_icc_profile_data != NULL ) { - /* Blending space is ICC based. If we are doing c-list rendering we will - need to write this color space into the clist. */ - params.group_color = ICC; - params.group_color_numcomps = - blend_color_space->cmm_icc_profile_data->num_comps; - /* Get the ICC profile */ - /* We don't reference count this - see comment in - * pdf14_update_device_color_procs_pop_c() + if (params.subtype != TRANSPARENCY_MASK_None) { + params_color.pdf14_op = PDF14_PUSH_SMASK_COLOR; + code = gs_state_update_pdf14trans(pgs, ¶ms_color); + if (code < 0) + return(code); + blend_color_space = gs_cspace_new_DeviceGray(pgs->memory); + blend_color_space->cmm_icc_profile_data = pgs->icc_manager->default_gray; + rc_increment(blend_color_space->cmm_icc_profile_data); + if_debug8m('v', pgs->memory, "[v](0x%lx)gs_begin_transparency_mask [%g %g %g %g]\n\ + subtype = %d Background_components = %d %s\n", + (ulong)pgs, pbbox->p.x, pbbox->p.y, pbbox->q.x, pbbox->q.y, + (int)ptmp->subtype, ptmp->Background_components, + (ptmp->TransferFunction == mask_transfer_identity ? "no TR" : + "has TR")); + /* Sample the transfer function */ + for (i = 0; i < MASK_TRANSFER_FUNCTION_SIZE; i++) { + float in = (float)(i * (1.0 / (MASK_TRANSFER_FUNCTION_SIZE - 1))); + float out; + + ptmp->TransferFunction(in, &out, ptmp->TransferFunction_data); + params.transfer_fn[i] = (byte)floor((double)(out * 255 + 0.5)); + } + /* Note: This function is called during the c-list writer side. */ + if ( blend_color_space->cmm_icc_profile_data != NULL ) { + /* Blending space is ICC based. If we are doing c-list rendering we will + need to write this color space into the clist. */ + params.group_color = ICC; + params.group_color_numcomps = + blend_color_space->cmm_icc_profile_data->num_comps; + /* Get the ICC profile */ + /* We don't reference count this - see comment in + * pdf14_update_device_color_procs_pop_c() + */ + params.iccprofile = blend_color_space->cmm_icc_profile_data; + params.icc_hash = blend_color_space->cmm_icc_profile_data->hashcode; + } else { + params.group_color = GRAY_SCALE; + params.group_color_numcomps = 1; /* Need to check */ + } + /* Explicitly decrement the profile data since blend_color_space may not + * be an ICC color space object. */ - params.iccprofile = blend_color_space->cmm_icc_profile_data; - params.icc_hash = blend_color_space->cmm_icc_profile_data->hashcode; - } else { - params.group_color = GRAY_SCALE; - params.group_color_numcomps = 1; /* Need to check */ + rc_decrement(blend_color_space->cmm_icc_profile_data, "gs_begin_transparency_mask"); + rc_decrement_only_cs(blend_color_space, "gs_begin_transparency_mask"); } - /* Explicitly decrement the profile data since blend_color_space may not - * be an ICC color space object. - */ - rc_decrement(blend_color_space->cmm_icc_profile_data, "gs_begin_transparency_mask"); - rc_decrement_only_cs(blend_color_space, "gs_begin_transparency_mask"); return gs_state_update_pdf14trans(pgs, ¶ms); } @@ -743,15 +745,15 @@ { gs_pdf14trans_params_t params = { 0 }; cmm_profile_t *icc_profile; - gsicc_rendering_param_t render_cond; + gsicc_rendering_param_t render_cond; int code; cmm_dev_profile_t *dev_profile; code = dev_proc(pgs->device, get_profile)(pgs->device, &dev_profile); if (code < 0) return code; - gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile, &icc_profile, - &render_cond); + gsicc_extract_profile(GS_UNKNOWN_TAG, dev_profile, &icc_profile, + &render_cond); params.pdf14_op = PDF14_PUSH_DEVICE; /* * We really only care about the number of spot colors when we have diff -Nru ghostscript-9.15+dfsg/base/gxclfile.c ghostscript-9.16~dfsg~0/base/gxclfile.c --- ghostscript-9.15+dfsg/base/gxclfile.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxclfile.c 2015-03-30 08:21:24.000000000 +0000 @@ -15,6 +15,7 @@ /* File-based command list implementation */ +#include "assert.h" #include "stdio_.h" #include "string_.h" #include "unistd_.h" @@ -27,9 +28,255 @@ #include "valgrind.h" #endif + /* This is an implementation of the command list I/O interface */ /* that uses the file system for storage. */ +/* clist cache code so that wrapped files don't incur a performance penalty */ +#define CL_CACHE_NSLOTS (3) +#define CL_CACHE_SLOT_SIZE_LOG2 (15) +#define CL_CACHE_SLOT_EMPTY (-1) + +static clist_io_procs_t clist_io_procs_file; + +typedef struct +{ + int64_t blocknum; + byte *base; +} CL_CACHE_SLOT; + +typedef struct +{ + gs_memory_t *memory; /* save our allocator */ + int64_t filesize; + int64_t block_size; /* full block size, MUST BE powerr of 2 */ + int nslots; + CL_CACHE_SLOT *slots; /* array of slots */ + byte *base; /* save base of slot data area */ +} CL_CACHE; + +/* Forward references */ +CL_CACHE *cl_cache_alloc(gs_memory_t *mem); +void cl_cache_destroy(CL_CACHE *cache); +CL_CACHE *cl_cache_read_init(CL_CACHE *cache, int nslots, int64_t block_size, int64_t filesize); +int cl_cache_read(byte *data, int len, int64_t pos, CL_CACHE *cache); +CL_CACHE_SLOT * cl_cache_get_empty_slot(CL_CACHE *cache, int64_t pos); +void cl_cache_load_slot(CL_CACHE *cache, CL_CACHE_SLOT *slot, int64_t pos, byte *data, int len); + +#define CL_CACHE_NEEDS_INIT(cache) (cache != NULL && cache->filesize == 0) + +CL_CACHE * +cl_cache_alloc(gs_memory_t *mem) +{ + CL_CACHE *cache; + + /* allocate and initialilze the cache to filesize = 0 to signal read_init needed */ + cache = (CL_CACHE *)gs_alloc_bytes(mem, sizeof(CL_CACHE), "alloc CL_CACHE"); + if (cache != NULL) { + cache->filesize = 0; + cache->nslots = 0; + cache->block_size = 0; + cache->slots = NULL; + cache->base = NULL; + cache->memory = mem; + } + return cache; +} + +void +cl_cache_destroy(CL_CACHE *cache) +{ + if (cache == NULL) + return; + + if (cache->slots != NULL) { + gs_free_object(cache->memory, cache->base, "CL_CACHE SLOT data"); + gs_free_object(cache->memory, cache->slots, "CL_CACHE slots array"); + } + gs_free_object(cache->memory, cache, "CL_CACHE for IFILE"); +} + +/* Set the cache up for reading. The filesize is used for EOF */ +CL_CACHE * +cl_cache_read_init(CL_CACHE *cache, int nslots, int64_t block_size, int64_t filesize) +{ + /* NB: if fail, and cache is still NULL, proceed without cache, reading will cope */ + if (cache == NULL || cache->filesize != 0) + return cache; /* once we've done the init, filesize will be set */ + + if ((filesize+block_size)/block_size < nslots) + nslots = (filesize + block_size)/block_size; /* limit at blocks needed for entire file */ + cache->slots = (CL_CACHE_SLOT *)gs_alloc_bytes(cache->memory, nslots * sizeof(CL_CACHE_SLOT), + "CL_CACHE slots array"); + if (cache->slots == NULL) { + gs_free_object(cache->memory, cache, "Free CL_CACHE for IFILE"); + cache = NULL; /* cache not possible */ + } else { + cache->slots[0].base = (byte *)gs_alloc_bytes(cache->memory, nslots * block_size, + "CL_CACHE_SLOT data"); + if (cache->slots[0].base == NULL) { + gs_free_object(cache->memory, cache->slots, "Free CL_CACHE for IFILE"); + gs_free_object(cache->memory, cache, "Free CL_CACHE for IFILE"); + cache = NULL; /* cache not possible */ + } else { + /* success, initialize the slots */ + int i; + + for (i=0; i < nslots; i++) { + cache->slots[i].blocknum = CL_CACHE_SLOT_EMPTY; + cache->slots[i].base = cache->slots[0].base + (i * block_size); + } + cache->base = cache->slots[0].base; /* save for the 'destroy' (slots array moves around) */ + cache->nslots = nslots; + cache->block_size = block_size; + cache->filesize = filesize; + } + } + return cache; /* May be NULL. If so, no cache used */ +} + +/* Find the cache for the slot containing the 'pos'. */ +/* return the number of bytes read, up to 'len' bytes */ +/* returns 0 if 'pos' not in cache, -1 if pos at or past EOF. */ +int +cl_cache_read(byte *data, int len, int64_t pos, CL_CACHE *cache) +{ + int nread = 0; + int slot; + int offset; + int64_t blocknum = pos / cache->block_size; + + if (pos >= cache->filesize) + return -1; + + /* find the slot */ + for (slot = 0; slot < cache->nslots; slot++) { + if (blocknum == cache->slots[slot].blocknum) + break; + } + if (slot >= cache->nslots) + return 0; /* block not in cache */ + + if (slot != 0) { + /* move the slot we found to the top, moving the rest down */ + byte *base = cache->slots[slot].base; + int i; + + for (i = slot; i > 0; i--) { + cache->slots[i].base = cache->slots[i-1].base; + cache->slots[i].blocknum = cache->slots[i-1].blocknum; + } + cache->slots[0].blocknum = blocknum; + cache->slots[0].base = base; + } + offset = pos - cache->slots[0].blocknum * cache->block_size; + nread = min(cache->block_size - offset, len); + if (nread + pos > cache->filesize) + nread = cache->filesize - pos; /* limit for EOF */ + memcpy(data, cache->slots[0].base + offset, nread); + return nread; +} + +/* 'pos' not used yet */ +/* discard the LRU, move remaining slots down and return the first as new MRU */ +CL_CACHE_SLOT * +cl_cache_get_empty_slot(CL_CACHE *cache, int64_t pos) +{ + /* the LRU is in the last slot, so re-use it */ + CL_CACHE_SLOT *pslot = &(cache->slots[0]); /* slot used will always be first, possibly after moving */ + int64_t slot0_blocknum = pslot->blocknum; + + if (slot0_blocknum == CL_CACHE_SLOT_EMPTY) + return pslot; + + /* if more than on slot in the cache, handle moving slots to bump the LRU (last) */ + /* If the block at slot 0 hasn't been flushed at least once before, just use slot 0 */ + if (cache->nslots > 1) { + /* rotate the cache to re-use the last slot (LRU) and move it to the top, moving the rest down */ + byte *last_slot_base = cache->slots[cache->nslots - 1].base; /* save the base for the last slot */ + int i; + + /* move the rest down */ + for (i=cache->nslots - 1; i > 0; i--) { + cache->slots[i].blocknum = cache->slots[i-1].blocknum; + cache->slots[i].base = cache->slots[i-1].base; + } + pslot->base = last_slot_base; + } + pslot->blocknum = CL_CACHE_SLOT_EMPTY; + return pslot; +} + +void +cl_cache_load_slot(CL_CACHE *cache, CL_CACHE_SLOT *slot, int64_t pos, byte *data, int len) +{ + slot->blocknum = pos / cache->block_size; + memcpy(slot->base, data, len); +} + +/* Use our own FILE structure so that, on some platforms, we write and read + * tmp files via a single file descriptor. That allows cleaning of tmp files + * to be addressed via DELETE_ON_CLOSE under Windows, and immediate unlink + * after opening under Linux. When running in this mode, we keep our own + * record of position within the file for the sake of thread safety + */ + +#define ENC_FILE_STR ("encoded_file_ptr_%p") +#define ENC_FILE_STRX ("encoded_file_ptr_0x%p") + +typedef struct +{ + gs_memory_t *mem; + FILE *f; + int64_t pos; + CL_CACHE *cache; +} IFILE; + +static void +file_to_fake_path(clist_file_ptr file, char fname[gp_file_name_sizeof]) +{ + gs_sprintf(fname, ENC_FILE_STR, file); +} + +static clist_file_ptr +fake_path_to_file(const char *fname) +{ + clist_file_ptr i1, i2; + + int r1 = sscanf(fname, ENC_FILE_STR, &i1); + int r2 = sscanf(fname, ENC_FILE_STRX, &i2); + return r2 == 1 ? i2 : (r1 == 1 ? i1 : NULL); +} + +static IFILE *wrap_file(gs_memory_t *mem, FILE *f, const char *fmode) +{ + IFILE *ifile; + + if (!f) return NULL; + ifile = (IFILE *)gs_alloc_bytes(mem->non_gc_memory, sizeof(*ifile), "Allocate wrapped IFILE"); + if (!ifile) { + fclose(f); + return NULL; + } + ifile->mem = mem->non_gc_memory; + ifile->f = f; + ifile->pos = 0; + ifile->cache = cl_cache_alloc(ifile->mem); + return ifile; +} + +static int close_file(IFILE *ifile) +{ + int res = 0; + if (ifile) { + res = fclose(ifile->f); + if (ifile->cache != NULL) + cl_cache_destroy(ifile->cache); + gs_free_object(ifile->mem, ifile, "Free wrapped IFILE"); + } + return res; +} + /* ------ Open/close/unlink ------ */ static int @@ -40,30 +287,64 @@ if (*fname == 0) { if (fmode[0] == 'r') return_error(gs_error_invalidfileaccess); - *pcf = (clist_file_ptr)gp_open_scratch_file_64(mem, - gp_scratch_file_name_prefix, - fname, fmode); - } else - *pcf = gp_fopen(fname, fmode); + if (gp_can_share_fdesc()) { + *pcf = (clist_file_ptr)wrap_file(mem, gp_open_scratch_file_rm(mem, + gp_scratch_file_name_prefix, + fname, fmode), fmode); + /* If the platform supports FILE duplication then we overwrite the + * file name with an encoded form of the FILE pointer */ + file_to_fake_path(*pcf, fname); + } else { + *pcf = (clist_file_ptr)wrap_file(mem, gp_open_scratch_file_64(mem, + gp_scratch_file_name_prefix, + fname, fmode), fmode); + } + } else { + // Check if a special path is passed in. If so, clone the FILE handle + clist_file_ptr ocf = fake_path_to_file(fname); + if (ocf) { + *pcf = wrap_file(mem, gp_fdup(((IFILE *)ocf)->f, fmode), fmode); + } else { + *pcf = wrap_file(mem, gp_fopen(fname, fmode), fmode); + } + } + if (*pcf == NULL) { emprintf1(mem, "Could not open the scratch file %s.\n", fname); return_error(gs_error_invalidfileaccess); } + return 0; } static int clist_unlink(const char *fname) { - return (unlink(fname) != 0 ? gs_note_error(gs_error_ioerror) : 0); + clist_file_ptr ocf = fake_path_to_file(fname); + if (ocf) { + /* fname is an encoded file pointer. The file will either have been + * created with the delete-on-close option, or already have been + * unlinked. We need only close the FILE */ + return close_file((IFILE *)ocf) != 0 ? gs_note_error(gs_error_ioerror) : 0; + } else { + return (unlink(fname) != 0 ? gs_note_error(gs_error_ioerror) : 0); + } } static int clist_fclose(clist_file_ptr cf, const char *fname, bool delete) { - return (fclose((FILE *) cf) != 0 ? gs_note_error(gs_error_ioerror) : - delete ? clist_unlink(fname) : - 0); + clist_file_ptr ocf = fake_path_to_file(fname); + if (ocf == cf) { + /* fname is an encoded file pointer, and cf is the FILE used to create it. + * We shouldn't close it unless we have been asked to delete it, in which + * case closing it will delete it */ + return delete ? (close_file((IFILE *)ocf) ? gs_note_error(gs_error_ioerror) : 0) : 0; + } else { + return (close_file((IFILE *) cf) != 0 ? gs_note_error(gs_error_ioerror) : + delete ? clist_unlink(fname) : + 0); + } } /* ------ Writing ------ */ @@ -71,7 +352,13 @@ static int clist_fwrite_chars(const void *data, uint len, clist_file_ptr cf) { - return fwrite(data, 1, len, (FILE *) cf); + if (gp_can_share_fdesc()) { + int res = gp_fpwrite((char *)data, len, ((IFILE *)cf)->pos, ((IFILE *)cf)->f); + if (res >= 0) + ((IFILE *)cf)->pos += len; return res; + } else { + return fwrite(data, 1, len, ((IFILE *)cf)->f); + } } /* ------ Reading ------ */ @@ -79,33 +366,75 @@ static int clist_fread_chars(void *data, uint len, clist_file_ptr cf) { - FILE *f = (FILE *) cf; - byte *str = data; + int nread = 0; - /* The typical implementation of fread */ - /* is extremely inefficient for small counts, */ - /* so we just use straight-line code instead. */ - switch (len) { - default: - return fread(str, 1, len, f); - case 8: - *str++ = (byte) getc(f); - case 7: - *str++ = (byte) getc(f); - case 6: - *str++ = (byte) getc(f); - case 5: - *str++ = (byte) getc(f); - case 4: - *str++ = (byte) getc(f); - case 3: - *str++ = (byte) getc(f); - case 2: - *str++ = (byte) getc(f); - case 1: - *str = (byte) getc(f); + if (gp_can_share_fdesc()) { + IFILE *icf = (IFILE *)cf; + byte *dp = data; + + /* if we have a cache, check if it needs init, and do it */ + if (CL_CACHE_NEEDS_INIT(icf->cache)) { + int64_t filesize; + + /* NB: We don't need to preserve the position for a wrapped file */ + gp_fseek_64(icf->f, 0, SEEK_END); + filesize = gp_ftell_64(icf->f); + icf->cache = cl_cache_read_init(icf->cache, CL_CACHE_NSLOTS, 1<cache != NULL) { + do { + int n; + + if ((n = cl_cache_read(dp, len-nread, icf->pos+nread, icf->cache)) < 0) + break; + if (n == 0) { + /* pos was not in cache, get a slot and load it, then loop */ + CL_CACHE_SLOT *slot = cl_cache_get_empty_slot(icf->cache, icf->pos+nread); /* cannot fail */ + int64_t block_pos = (icf->pos+nread) & ~(icf->cache->block_size - 1); + int fill_len = gp_fpread((char *)(slot->base), icf->cache->block_size, block_pos, icf->f); + + cl_cache_load_slot(icf->cache, slot, block_pos, slot->base, fill_len); + } + nread += n; + dp += n; + } while (nread < len); + } else { + /* no cache -- just do the read */ + nread = gp_fpread(data, len, icf->pos, icf->f); + } + if (nread >= 0) + icf->pos += nread; + } else { + FILE *f = ((IFILE *)cf)->f; + byte *str = data; + + /* The typical implementation of fread */ + /* is extremely inefficient for small counts, */ + /* so we just use straight-line code instead. */ + switch (len) { + default: + return fread(str, 1, len, f); + case 8: + *str++ = (byte) getc(f); + case 7: + *str++ = (byte) getc(f); + case 6: + *str++ = (byte) getc(f); + case 5: + *str++ = (byte) getc(f); + case 4: + *str++ = (byte) getc(f); + case 3: + *str++ = (byte) getc(f); + case 2: + *str++ = (byte) getc(f); + case 1: + *str = (byte) getc(f); + } + nread = len; } - return len; + return nread; } /* ------ Position/status ------ */ @@ -119,43 +448,83 @@ static int clist_ferror_code(clist_file_ptr cf) { - return (ferror((FILE *) cf) ? gs_error_ioerror : 0); + return (ferror(((IFILE *)cf)->f) ? gs_error_ioerror : 0); } static int64_t clist_ftell(clist_file_ptr cf) { - return gp_ftell_64((FILE *) cf); + IFILE *ifile = (IFILE *)cf; + + return gp_can_share_fdesc() ? ifile->pos : ftell(ifile->f); } static void clist_rewind(clist_file_ptr cf, bool discard_data, const char *fname) { - FILE *f = (FILE *) cf; - - if (discard_data) { - /* - * The ANSI C stdio specification provides no operation for - * truncating a file at a given position, or even just for - * deleting its contents; we have to use a bizarre workaround to - * get the same effect. - */ - char fmode[4]; - - /* Opening with "w" mode deletes the contents when closing. */ - (void)freopen(fname, gp_fmode_wb, f); - strcpy(fmode, "w+"); - strcat(fmode, gp_fmode_binary_suffix); - (void)freopen(fname, fmode, f); + FILE *f = ((IFILE *)cf)->f; + IFILE *ocf = fake_path_to_file(fname); + char fmode[4]; + + strcpy(fmode, "w+"); + strcat(fmode, gp_fmode_binary_suffix); + + if (ocf) { + if (discard_data) { + /* fname is an encoded ifile pointer. We can use an entirely + * new scratch file. */ + char tfname[gp_file_name_sizeof]; + fclose(ocf->f); + ocf->f = gp_open_scratch_file_rm(NULL, gp_scratch_file_name_prefix, tfname, fmode); + /* if there was a cache, get rid of it an get a new (empty) one */ + /* When we start reading, we will allocate a cache based on the filesize */ + if (ocf->cache != NULL) { + cl_cache_destroy(ocf->cache); + ocf->cache = cl_cache_alloc(ocf->mem); + } + } + ((IFILE *)cf)->pos = 0; } else { - rewind(f); + if (discard_data) { + /* + * The ANSI C stdio specification provides no operation for + * truncating a file at a given position, or even just for + * deleting its contents; we have to use a bizarre workaround to + * get the same effect. + */ + + /* Opening with "w" mode deletes the contents when closing. */ + (void)freopen(fname, gp_fmode_wb, f); + (void)freopen(fname, fmode, f); + } else { + rewind(f); + } } } static int clist_fseek(clist_file_ptr cf, int64_t offset, int mode, const char *ignore_fname) { - return gp_fseek_64((FILE *) cf, offset, mode); + IFILE *ifile = (IFILE *)cf; + + if (gp_can_share_fdesc()) { + switch (mode) + { + case SEEK_SET: + ifile->pos = offset; + break; + case SEEK_CUR: + ifile->pos += offset; + break; + case SEEK_END: + gp_fseek_64(ifile->f, 0, SEEK_END); + ifile->pos = ftell(ifile->f); + break; + } + return 0; + } else { + return gp_fseek_64(ifile->f, offset, mode); + } } static clist_io_procs_t clist_io_procs_file = { diff -Nru ghostscript-9.15+dfsg/base/gxclimag.c ghostscript-9.16~dfsg~0/base/gxclimag.c --- ghostscript-9.15+dfsg/base/gxclimag.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxclimag.c 2015-03-30 08:21:24.000000000 +0000 @@ -44,9 +44,7 @@ #include "gxdevsop.h" #include "gscindex.h" #include "gsicc_cms.h" -#include "gxsample.h" -#include "gximage.h" -#include "gxfrac.h" +#include "gximdecode.h" extern_gx_image_type_table(); @@ -350,12 +348,8 @@ int y; bool color_map_is_known; bool monitor_color; - int bps; - int spp; - SAMPLE_UNPACK_PROC((*unpack)); + image_decode_t decode; byte *buffer; /* needed for unpacking during monitoring */ - int spread; - sample_map map[GS_IMAGE_MAX_COMPONENTS]; } clist_image_enum; gs_private_st_suffix_add4(st_clist_image_enum, clist_image_enum, "clist_image_enum", clist_image_enum_enum_ptrs, @@ -375,7 +369,7 @@ { clist_color_space_t pclcs = pie_c->color_space; bool ((*is_neutral)(void*, int)); - int step_size = data_size * pie_c->spp; + int step_size = data_size * pie_c->decode.spp; byte *ptr; bool is_mono; int k; @@ -406,152 +400,6 @@ return false; } -/* We need to have the unpacking proc so that we can monitor the data. */ -static void -get_unpack_proc(clist_image_enum *pie, const float *decode) { - -static sample_unpack_proc_t procs[2][6] = { - { sample_unpack_1, sample_unpack_2, - sample_unpack_4, sample_unpack_8, - 0, 0 - }, - { sample_unpack_1_interleaved, sample_unpack_2_interleaved, - sample_unpack_4_interleaved, sample_unpack_8_interleaved, - 0, 0 - }}; - int num_planes = pie->num_planes; - bool interleaved = (num_planes == 1 && pie->plane_depths[0] != pie->bps); - int i; - int index_bps = (pie->bps < 8 ? pie->bps >> 1 : (pie->bps >> 2) + 1); - gs_image_format_t format = pie->format; - int log2_xbytes = (pie->bps <= 8 ? 0 : arch_log2_sizeof_frac); - - switch (format) { - case gs_image_format_chunky: - pie->spread = 1 << log2_xbytes; - break; - case gs_image_format_component_planar: - pie->spread = (pie->spp) << log2_xbytes; - break; - case gs_image_format_bit_planar: - pie->spread = (pie->spp) << log2_xbytes; - break; - default: - pie->spread = 0; - } - - procs[0][4] = procs[1][4] = sample_unpack_12_proc; - procs[0][5] = procs[1][5] = sample_unpackicc_16_proc; - if (interleaved) { - int num_components = pie->plane_depths[0] / pie->bps; - - for (i = 1; i < num_components; i++) { - if (decode[0] != decode[i * 2 + 0] || - decode[1] != decode[i * 2 + 1]) - break; - } - if (i == num_components) - interleaved = false; /* Use single table. */ - } - pie->unpack = procs[interleaved][index_bps]; -} - -/* We also need the mapping method for the unpacking proc */ -static void -get_map(clist_image_enum *pie, gs_image_format_t format, const float *decode) -{ - int ci, decode_type; - int bps = pie->bps; - int spp = pie->spp; - static const float default_decode[] = { - 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0 - }; - - decode_type = 3; /* 0=custom, 1=identity, 2=inverted, 3=impossible */ - for (ci = 0; ci < spp; ci +=2 ) { - decode_type &= (decode[ci] == 0. && decode[ci + 1] == 1.) | - (decode[ci] == 1. && decode[ci + 1] == 0.) << 1; - } - - /* Initialize the maps from samples to intensities. */ - for (ci = 0; ci < spp; ci++) { - sample_map *pmap = &pie->map[ci]; - - /* If the decoding is [0 1] or [1 0], we can fold it */ - /* into the expansion of the sample values; */ - /* otherwise, we have to use the floating point method. */ - - const float *this_decode = &decode[ci * 2]; - const float *map_decode; /* decoding used to */ - /* construct the expansion map */ - const float *real_decode; /* decoding for expanded samples */ - - map_decode = real_decode = this_decode; - if (!(decode_type & 1)) { - if ((decode_type & 2) && bps <= 8) { - real_decode = default_decode; - } else { - map_decode = default_decode; - } - } - if (bps > 2 || format != gs_image_format_chunky) { - if (bps <= 8) - image_init_map(&pmap->table.lookup8[0], 1 << bps, - map_decode); - } else { /* The map index encompasses more than one pixel. */ - byte map[4]; - register int i; - - image_init_map(&map[0], 1 << bps, map_decode); - switch (bps) { - case 1: - { - register bits32 *p = &pmap->table.lookup4x1to32[0]; - - if (map[0] == 0 && map[1] == 0xff) - memcpy((byte *) p, lookup4x1to32_identity, 16 * 4); - else if (map[0] == 0xff && map[1] == 0) - memcpy((byte *) p, lookup4x1to32_inverted, 16 * 4); - else - for (i = 0; i < 16; i++, p++) - ((byte *) p)[0] = map[i >> 3], - ((byte *) p)[1] = map[(i >> 2) & 1], - ((byte *) p)[2] = map[(i >> 1) & 1], - ((byte *) p)[3] = map[i & 1]; - } - break; - case 2: - { - register bits16 *p = &pmap->table.lookup2x2to16[0]; - - for (i = 0; i < 16; i++, p++) - ((byte *) p)[0] = map[i >> 2], - ((byte *) p)[1] = map[i & 3]; - } - break; - } - } - pmap->decode_base /* = decode_lookup[0] */ = real_decode[0]; - pmap->decode_factor = - (real_decode[1] - real_decode[0]) / - (bps <= 8 ? 255.0 : (float)frac_1); - pmap->decode_max /* = decode_lookup[15] */ = real_decode[1]; - if (decode_type) { - pmap->decoding = sd_none; - pmap->inverted = map_decode[0] != 0; - } else if (bps <= 4) { - int step = 15 / ((1 << bps) - 1); - int i; - - pmap->decoding = sd_lookup; - for (i = 15 - step; i > 0; i -= step) - pmap->decode_lookup[i] = pmap->decode_base + - i * (255.0 / 15) * pmap->decode_factor; - } else - pmap->decoding = sd_compute; - } -} - /* Forward declarations */ static bool image_band_box(gx_device * dev, const clist_image_enum * pie, int y, int h, gs_int_rect * pbox); @@ -749,8 +597,8 @@ int bytes_per_plane, bytes_per_row; bits_per_pixel = pim->BitsPerComponent * num_components; - pie->bps = bits_per_pixel/num_components; - pie->spp = num_components; + pie->decode.bps = bits_per_pixel/num_components; + pie->decode.spp = num_components; pie->image = *pim; pie->dcolor = *pdcolor; if (prect) @@ -951,22 +799,23 @@ } /* Decide if we need to do any monitoring of the colors. Note that multiple source (planes) is treated as color */ - pie->unpack = NULL; + pie->decode.unpack = NULL; if (dev_profile->pageneutralcolor && pie->color_space.icc_info.data_cs != gsGRAY) { /* If it is an index image, then check the pallete only */ if (!indexed) { pie->monitor_color = true; /* Set up the unpacking proc for monitoring */ - get_unpack_proc(pie, pim->Decode); - get_map(pie, pim->format, pim->Decode); - if (pie->unpack == NULL) { + get_unpack_proc((gx_image_enum_common_t*) pie, &(pie->decode), + pim->format, pim->Decode); + get_map(&(pie->decode), pim->format, pim->Decode); + if (pie->decode.unpack == NULL) { /* If we cant unpack, then end monitoring now. Treat as has color */ dev_profile->pageneutralcolor = false; gsicc_mcm_end_monitor(pis->icc_link_cache, dev); } else { /* We need to allocate the buffer for unpacking during monitoring. This is mainly for the 12bit case */ - int bsize = ((pie->bps > 8 ? (pim->Width) * 2 : pim->Width) + 15) * num_components; + int bsize = ((pie->decode.bps > 8 ? (pim->Width) * 2 : pim->Width) + 15) * num_components; pie->buffer = gs_alloc_bytes(mem, bsize, "image buffer"); if (pie->buffer == 0) { gs_free_object(mem, pie, "clist_begin_typed_image"); @@ -2162,9 +2011,9 @@ int plane, i; int code; int width = pie_c->rect.q.x - pie_c->rect.p.x; - int dsize = (((width + (planes[0]).data_x) * pie_c->spp * - pie_c->bps / pie->num_planes + 7) >> 3); - int data_size = pie_c->spread / pie->num_planes; + int dsize = (((width + (planes[0]).data_x) * pie_c->decode.spp * + pie_c->decode.bps / pie->num_planes + 7) >> 3); + int data_size = pie_c->decode.spread / pie->num_planes; *found_color = false; @@ -2187,15 +2036,16 @@ to see if we have any non-neutral colors */ int pdata_x; byte *data_ptr = (byte *)(planes[0].data + i * planes[0].raster + offsets[0] + offset); - byte *buffer = (byte *)(*pie_c->unpack)(pie_c->buffer, &pdata_x, data_ptr, 0, dsize, pie_c->map, - pie_c->spread, pie_c->spp); + byte *buffer = (byte *)(*pie_c->decode.unpack)(pie_c->buffer, &pdata_x, + data_ptr, 0, dsize, pie_c->decode.map, + pie_c->decode.spread, pie_c->decode.spp); for (plane = 1; plane < pie->num_planes; ++plane) { /* unpack planes after the first (if any), relying on spread to place the */ /* data at the correct spacing, with the buffer start adjusted for each plane */ data_ptr = (byte *)(planes[plane].data + i * planes[plane].raster + offsets[plane] + offset); - (*pie_c->unpack)(pie_c->buffer + (data_size * plane), &pdata_x, data_ptr, 0, - dsize, pie_c->map, pie_c->spread, pie_c->spp); + (*pie_c->decode.unpack)(pie_c->buffer + (data_size * plane), &pdata_x, data_ptr, 0, + dsize, pie_c->decode.map, pie_c->decode.spread, pie_c->decode.spp); } if (row_has_color(buffer, pie_c, data_size, width)) { /* Has color. We are done monitoring */ diff -Nru ghostscript-9.15+dfsg/base/gxclist.c ghostscript-9.16~dfsg~0/base/gxclist.c --- ghostscript-9.15+dfsg/base/gxclist.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxclist.c 2015-03-30 08:21:24.000000000 +0000 @@ -688,10 +688,12 @@ if (ppi->cfile != NULL) { ppi->io_procs->fclose(ppi->cfile, ppi->cfname, true); ppi->cfile = NULL; + ppi->cfname[0] = 0; /* prevent re-use in case this is a fake path */ } if (ppi->bfile != NULL) { ppi->io_procs->fclose(ppi->bfile, ppi->bfname, true); ppi->bfile = NULL; + ppi->bfname[0] = 0; /* prevent re-use in case this is a fake path */ } return 0; } diff -Nru ghostscript-9.15+dfsg/base/gxclrast.c ghostscript-9.16~dfsg~0/base/gxclrast.c --- ghostscript-9.15+dfsg/base/gxclrast.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxclrast.c 2015-03-30 08:21:24.000000000 +0000 @@ -622,10 +622,6 @@ imager_state.line_params.dash.pattern = dash_pattern; if (tdev != 0) { gx_set_cmap_procs(&imager_state, tdev); - /* We can only optimize contone color devices */ - if ( !(tdev->color_info.max_gray > 15 || tdev->color_info.max_color > 15) && - playback_action == playback_action_render_no_pdf14) - playback_action = playback_action_render; /* can't optimize these cases */ } gx_imager_setscreenphase(&imager_state, -x0, -y0, gs_color_select_all); halftone_type = ht_type_none; diff -Nru ghostscript-9.15+dfsg/base/gxclread.c ghostscript-9.16~dfsg~0/base/gxclread.c --- ghostscript-9.15+dfsg/base/gxclread.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxclread.c 2015-03-30 08:21:24.000000000 +0000 @@ -28,6 +28,7 @@ #include "gxgetbit.h" #include "gxhttile.h" #include "gdevplnx.h" +#include "gdevp14.h" #include "gsmemory.h" #include "gsmemlok.h" #include "vdtrace.h" @@ -836,8 +837,12 @@ bdev->band_offset_x = ppage->offset.x; bdev->band_offset_y = ppage->offset.y + (band_first * band_height); } - /* if any of the requested bands need transparency, use it for all of them */ - for (band=band_first; band <= band_last; band++) + /* if any of the requested bands need transparency, use it for all of them */ + /* The pdf14_ok_to_optimize checks if the target device (bdev) is compatible */ + /* with the pdf14 compositor info that was written to the clist: colorspace, */ + /* colorspace, etc. */ + pdf14_needed = !pdf14_ok_to_optimize(bdev); + for (band=band_first; !pdf14_needed && band <= band_last; band++) pdf14_needed |= (crdev->color_usage_array[band].trans_bbox.p.y <= crdev->color_usage_array[band].trans_bbox.q.y) ? true : false; diff -Nru ghostscript-9.15+dfsg/base/gxclthrd.c ghostscript-9.16~dfsg~0/base/gxclthrd.c --- ghostscript-9.15+dfsg/base/gxclthrd.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxclthrd.c 2015-03-30 08:21:24.000000000 +0000 @@ -101,7 +101,7 @@ rc_increment(ndev->icc_struct); #endif /* get the current device parameters to put into the cloned device */ - gs_c_param_list_write(¶mlist, dev->memory); + gs_c_param_list_write(¶mlist, thread_mem); if ((code = gs_getdeviceparams(dev, (gs_param_list *)¶mlist)) < 0) { emprintf1(dev->memory, "Error getting device params, code=%d. Rendering threads not started.\n", @@ -423,6 +423,13 @@ } else { /* make sure this doesn't get freed by gdev_prn_free_memory below */ ((gx_device_clist_reader *)thread_cdev)->color_usage_array = NULL; + + /* For non-bg_print cases the icc_table is shared between devices, but + * is not reference counted or anything. We rely on it being shared with + * and owned by the "parent" device in the interpreter thread, hence + * null it here to avoid it being freed as we cleanup the thread device. + */ + thread_crdev->icc_table = NULL; } rc_decrement(thread_crdev->icc_cache_cl, "teardown_render_thread"); thread_crdev->icc_cache_cl = NULL; @@ -434,10 +441,14 @@ */ /* If this thread was being used for background printing and NumRenderingThreads > 0 */ /* the clist_setup_render_threads may have already closed these files */ - if (thread_cdev->page_info.cfile != NULL) - thread_cdev->page_info.io_procs->fclose(thread_cdev->page_info.bfile, thread_cdev->page_info.bfname, bg_print); + /* Note that in the case of back ground printing, we only want to close the instance */ + /* of the files for the reader (hence the final parameter being false). We'll clean */ + /* the original instance of the files in prn_finish_bg_print() */ if (thread_cdev->page_info.bfile != NULL) - thread_cdev->page_info.io_procs->fclose(thread_cdev->page_info.cfile, thread_cdev->page_info.cfname, bg_print); + thread_cdev->page_info.io_procs->fclose(thread_cdev->page_info.bfile, thread_cdev->page_info.bfname, false); + if (thread_cdev->page_info.cfile != NULL) + thread_cdev->page_info.io_procs->fclose(thread_cdev->page_info.cfile, thread_cdev->page_info.cfname, false); + thread_cdev->page_info.bfile = thread_cdev->page_info.cfile = NULL; thread_cdev->do_not_open_or_close_bandfiles = true; /* we already closed the files */ gdev_prn_free_memory((gx_device *)thread_cdev); diff -Nru ghostscript-9.15+dfsg/base/gxcmap.c ghostscript-9.16~dfsg~0/base/gxcmap.c --- ghostscript-9.15+dfsg/base/gxcmap.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxcmap.c 2015-03-30 08:21:24.000000000 +0000 @@ -589,8 +589,131 @@ return_error(gs_error_rangecheck); } -/* By default, remap a color by concretizing it and then */ -/* remapping the concrete color. */ +/* If someone has specified a table for handling named spot colors then we will + be attempting to do the special handling to go directly to the device colors + here */ +bool +gx_remap_named_color(const gs_client_color * pcc, const gs_color_space * pcs, +gx_device_color * pdc, const gs_imager_state * pis, gx_device * dev, +gs_color_select_t select) +{ + gx_color_value device_values[GX_DEVICE_COLOR_MAX_COMPONENTS]; + const gs_separation_name name = pcs->params.separation.sep_name; + byte *pname; + uint name_size; + gsicc_rendering_param_t rendering_params; + int code; + gsicc_namedcolor_t named_color_sep; + gsicc_namedcolor_t *named_color_devn = NULL; + gsicc_namedcolor_t *named_color_ptr = NULL; + int num_des_comps = dev->color_info.num_components; + int k; + frac conc[GS_CLIENT_COLOR_MAX_COMPONENTS]; + int i = pcs->type->num_components(pcs); + cmm_dev_profile_t *dev_profile = NULL; + gs_color_space_index type = gs_color_space_get_index(pcs); + int num_src_comps = 1; + + /* Define the rendering intents. */ + rendering_params.black_point_comp = pis->blackptcomp; + rendering_params.graphics_type_tag = dev->graphics_type_tag; + rendering_params.override_icc = false; + rendering_params.preserve_black = gsBKPRESNOTSPECIFIED; + rendering_params.rendering_intent = pis->renderingintent; + rendering_params.cmm = gsCMM_DEFAULT; + + if (type == gs_color_space_index_Separation) { + pcs->params.separation.get_colorname_string(pis->memory, name, + &pname, &name_size); + named_color_sep.colorant_name = (char*)pname; + named_color_sep.name_size = name_size; + named_color_ptr = &named_color_sep; + } else if (type == gs_color_space_index_DeviceN) { + const gs_separation_name *names = pcs->params.device_n.names; + num_src_comps = pcs->params.device_n.num_components; + /* Allocate and initialize name structure */ + named_color_devn = + (gsicc_namedcolor_t*)gs_alloc_bytes(dev->memory->non_gc_memory, + num_src_comps * sizeof(gsicc_namedcolor_t), + "gx_remap_named_color"); + if (named_color_devn == NULL) + return false; /* Clearly a bigger issue. But lets not end here */ + for (k = 0; k < num_src_comps; k++) { + pcs->params.device_n.get_colorname_string(dev->memory, names[k], + &pname, &name_size); + named_color_devn[k].colorant_name = (char*)pname; + named_color_devn[k].name_size = name_size; + } + named_color_ptr = named_color_devn; + } else + return false; /* Only sep and deviceN for named color replacement */ + + code = gsicc_transform_named_color(pcc->paint.values, named_color_ptr, + num_src_comps, device_values, pis, dev, NULL, &rendering_params); + if (named_color_devn != NULL) + gs_free_object(dev->memory->non_gc_memory, named_color_devn, + "gx_remap_named_color"); + + if (code == 0) { + /* Named color was found and set. Note that gsicc_transform_named_color + MUST set ALL the colorant values AND they must be in the proper + order already. If we have specified the colorants with + -sICCOutputColors (i.e. if you are using an NCLR output profile) then + we should be good. If not or if instead one used SeparationColorNames and + SeparationOrder to set up the device, then we need to make a copy + of the imager state and make sure that we set color_component_map is + properly set up for the gx_remap_concrete_devicen proc. */ + for (k = 0; k < num_des_comps; k++) + conc[k] = float2frac(((float)device_values[k]) / 65535.0); + + /* If we are looking to create the equivalent CMYK value then no need + to worry about NCLR profiles or about altering the colorant map */ + if (!named_color_equivalent_cmyk_colors(pis)) { + /* We need to apply transfer functions, possibily halftone and + encode the color for the device. To get proper mapping of the + colors to the device positions, you MUST specify -sICCOutputColors + which will enumerate the positions of the colorants and enable + proper color management for the CMYK portions IF you are using + an NCLR output profile. */ + code = dev_proc(dev, get_profile)(dev, &dev_profile); + /* Check if the profile is DeviceN (NCLR) */ + if (dev_profile->device_profile[0]->data_cs == gsNCHANNEL) { + if (dev_profile->spotnames == NULL) + return false; + if (!dev_profile->spotnames->equiv_cmyk_set) { + /* Note that if the improper NCLR profile is used, then the + composite preview will be wrong. */ + code = gsicc_set_devicen_equiv_colors(dev, pis, dev_profile->device_profile[0]); + dev_profile->spotnames->equiv_cmyk_set = true; + } + gx_remap_concrete_devicen(conc, pdc, pis, dev, select); + } else { + gs_imager_state temp_state = *((const gs_imager_state *)pis); + + /* No NCLR profile with spot names. So set up the + color_component_map in the imager state. Again, note that + gsicc_transform_named_color must have set ALL the device + colors */ + for (i = 0; i < dev->color_info.num_components; i++) + temp_state.color_component_map.color_map[i] = i; + temp_state.color_component_map.num_components = dev->color_info.num_components; + gx_remap_concrete_devicen(conc, pdc, &temp_state, dev, select); + } + } else { + gx_remap_concrete_devicen(conc, pdc, pis, dev, select); + } + /* Save original color space and color info into dev color */ + i = any_abs(i); + for (i--; i >= 0; i--) + pdc->ccolor.paint.values[i] = pcc->paint.values[i]; + pdc->ccolor_valid = true; + return true; + } + return false; +} + +/* By default, remap a color by concretizing it and then remapping the concrete + color. */ int gx_default_remap_color(const gs_client_color * pcc, const gs_color_space * pcs, gx_device_color * pdc, const gs_imager_state * pis, gx_device * dev, @@ -935,7 +1058,6 @@ int black_index; cmm_dev_profile_t *dev_profile; gsicc_colorbuffer_t src_space = gsUNDEFINED; - int code; bool gray_to_k; /* map to the color model */ @@ -952,7 +1074,7 @@ /* Check if source space is gray. In this case we are to use only the transfer function on the K channel. Do this only if gray to K is also set */ - code = dev_proc(dev, get_profile)(dev, &dev_profile); + dev_proc(dev, get_profile)(dev, &dev_profile); gray_to_k = dev_profile->devicegraytok; if (source_pcs != NULL && source_pcs->cmm_icc_profile_data != NULL) { src_space = source_pcs->cmm_icc_profile_data->data_cs; @@ -1183,12 +1305,11 @@ gx_color_value cv[GX_DEVICE_COLOR_MAX_COMPONENTS]; gx_color_index color; bool use_rgb2dev_icc = false; - gsicc_rendering_param_t render_cond; - int code; + gsicc_rendering_param_t render_cond; cmm_dev_profile_t *dev_profile = NULL; cmm_profile_t *des_profile = NULL; - code = dev_proc(dev, get_profile)(dev, &dev_profile); + dev_proc(dev, get_profile)(dev, &dev_profile); gsicc_extract_profile(dev->graphics_type_tag, dev_profile, &des_profile, &render_cond); for (i=0; i < ncomps; i++) @@ -1303,12 +1424,11 @@ unsigned short psrc_cm[GS_CLIENT_COLOR_MAX_COMPONENTS]; int k; unsigned short *psrc_temp; - gsicc_rendering_param_t render_cond; - int code; + gsicc_rendering_param_t render_cond; cmm_dev_profile_t *dev_profile = NULL; cmm_profile_t *des_profile = NULL; - code = dev_proc(dev, get_profile)(dev, &dev_profile); + dev_proc(dev, get_profile)(dev, &dev_profile); gsicc_extract_profile(dev->graphics_type_tag, dev_profile, &des_profile, &render_cond); /* Define the rendering intents. */ @@ -1355,12 +1475,11 @@ { int i, ncomps = dev->color_info.num_components; frac cm_comps[GX_DEVICE_COLOR_MAX_COMPONENTS]; - int code; - gsicc_rendering_param_t render_cond; + gsicc_rendering_param_t render_cond; cmm_dev_profile_t *dev_profile = NULL; cmm_profile_t *des_profile = NULL; - code = dev_proc(dev, get_profile)(dev, &dev_profile); + dev_proc(dev, get_profile)(dev, &dev_profile); gsicc_extract_profile(dev->graphics_type_tag, dev_profile, &des_profile, &render_cond); /* map to the color model */ @@ -1370,7 +1489,7 @@ /* See comments in cmap_devicen_direct for details on below operations */ if (devicen_has_cmyk(dev) && des_profile->data_cs == gsCMYK) { - code = devicen_icc_cmyk(cm_comps, pis, dev); + devicen_icc_cmyk(cm_comps, pis, dev); } /* apply the transfer function(s); convert to color values */ if (dev->color_info.polarity == GX_CINFO_POLARITY_ADDITIVE) @@ -1401,17 +1520,16 @@ frac cm_comps[GX_DEVICE_COLOR_MAX_COMPONENTS]; gx_color_value cv[GX_DEVICE_COLOR_MAX_COMPONENTS]; gx_color_index color; - int code; - gsicc_rendering_param_t render_cond; + gsicc_rendering_param_t render_cond; cmm_dev_profile_t *dev_profile = NULL; cmm_profile_t *des_profile = NULL; - code = dev_proc(dev, get_profile)(dev, &dev_profile); + dev_proc(dev, get_profile)(dev, &dev_profile); gsicc_extract_profile(dev->graphics_type_tag, dev_profile, &des_profile, &render_cond); /* See the comment below */ /* map to the color model */ - for (i=0; i < ncomps; i++) + for (i = 0; i < ncomps; i++) cm_comps[i] = 0; if (dev_profile->spotnames != NULL && dev_profile->spotnames->equiv_cmyk_set) { map_components_to_colorants(pcc, dev_profile->spotnames->color_map, @@ -1437,7 +1555,7 @@ and possibly permute the colorants, much as is done on the input side for the case when we add DeviceN icc source profiles for use in PDF and PS data. */ - code = devicen_icc_cmyk(cm_comps, pis, dev); + devicen_icc_cmyk(cm_comps, pis, dev); } /* apply the transfer function(s); convert to color values. assign directly if output device supports devn */ @@ -1983,11 +2101,10 @@ { const gx_cm_color_map_procs *pprocs; gsicc_rendering_param_t render_cond; - int code; cmm_dev_profile_t *dev_profile = NULL; cmm_profile_t *des_profile = NULL; - code = dev_proc(dev, get_profile)(dev, &dev_profile); + dev_proc(dev, get_profile)(dev, &dev_profile); gsicc_extract_profile(dev->graphics_type_tag, dev_profile, &des_profile, &render_cond); diff -Nru ghostscript-9.15+dfsg/base/gxcspace.h ghostscript-9.16~dfsg~0/base/gxcspace.h --- ghostscript-9.15+dfsg/base/gxcspace.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxcspace.h 2015-03-30 08:21:24.000000000 +0000 @@ -244,6 +244,7 @@ cs_proc_concrete_space(gx_same_concrete_space); cs_proc_concretize_color(gx_no_concretize_color); cs_proc_remap_color(gx_default_remap_color); +cs_proc_remap_color(gx_remap_named_color); cs_proc_install_cspace(gx_no_install_cspace); cs_proc_set_overprint(gx_spot_colors_set_overprint); cs_proc_set_overprint(gx_simulated_set_overprint); diff -Nru ghostscript-9.15+dfsg/base/gxdevsop.h ghostscript-9.16~dfsg~0/base/gxdevsop.h --- ghostscript-9.15+dfsg/base/gxdevsop.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxdevsop.h 2015-03-30 08:21:24.000000000 +0000 @@ -273,10 +273,19 @@ */ gxdso_supports_saved_pages, /* Form handling, we need one to start and one to stop a form - * its up to the device to recognise duplicate execution of forms. */ gxdso_form_begin, gxdso_form_end, + /* These next two relate to high level form handling. After executing a form the + * PostScript will request an ID for the form. If it gets one, it stores it in the + * /Implementation in the Form dictioanry. Next time it encoutners 'execform' for that + * form it will not call gxdso_form_begin and gxdso_form_end, instead it will simply call + * gxdso_repeat_form with the ID presented earlier. You should not return anything in response + * to the gxdso_form_ID unless the device is capable of storing the form and repeating it + * without running the PaintProc again. + */ + gxdso_get_form_ID, + gxdso_repeat_form, /* gxdso_adjust_bandheight: * Adjust the bandheight given in 'size' (normally downwards). Typically * to round it to a multiple of a given number. diff -Nru ghostscript-9.15+dfsg/base/gximask.c ghostscript-9.16~dfsg~0/base/gximask.c --- ghostscript-9.15+dfsg/base/gximask.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gximask.c 2015-03-30 08:21:24.000000000 +0000 @@ -104,11 +104,21 @@ gx_device *cdev = dev; int code; - code = gx_image_fill_masked_start(dev, pdc, pcpath, dev->memory, &cdev); - if (code >= 0) + if ((code = gx_image_fill_masked_start(dev, pdc, pcpath, dev->memory, &cdev)) < 0) + return code; + + if (cdev == dev) code = (*dev_proc(cdev, fill_mask))(cdev, data, data_x, raster, id, x, y, width, height, pdc, depth, lop, pcpath); - if (code >= 0 && cdev != dev) - code = gx_image_fill_masked_end(cdev, dev, pdc); + else { + /* cdev != dev means that a cpath_accum device was inserted */ + gx_device_color dc_temp; /* if fill_masked_start did cpath_accum, use pure color */ + + set_nonclient_dev_color(&dc_temp, 1); /* arbitrary color since cpath_accum doesn't use it */ + if ((code = (*dev_proc(cdev, fill_mask))(cdev, data, data_x, raster, id, + x, y, width, height, &dc_temp, depth, lop, pcpath)) < 0) + return code; + code = gx_image_fill_masked_end(cdev, dev, pdc); /* fill with the actual device color */ + } return code; } diff -Nru ghostscript-9.15+dfsg/base/gximdecode.c ghostscript-9.16~dfsg~0/base/gximdecode.c --- ghostscript-9.15+dfsg/base/gximdecode.c 1970-01-01 00:00:00.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gximdecode.c 2015-03-30 08:21:24.000000000 +0000 @@ -0,0 +1,251 @@ +/* Copyright (C) 2014-2015 Artifex Software, Inc. +All Rights Reserved. + +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +Refer to licensing information at http://www.artifex.com or contact +Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, San Rafael, +CA 94903, U.S.A., +1(415)492-9861, for further information. +*/ + +/* Methods for decoding and unpacking image data. Used for color +monitoring in clist and for creating TIFF files for xpswrite device */ + +#include "gximdecode.h" +#include "string_.h" + +/* We need to have the unpacking proc so that we can monitor the data for color + or decode during xpswrite */ +void +get_unpack_proc(gx_image_enum_common_t *pie, image_decode_t *imd, + gs_image_format_t format, const float *decode) { + + static sample_unpack_proc_t procs[2][6] = { + { sample_unpack_1, sample_unpack_2, + sample_unpack_4, sample_unpack_8, + 0, 0 + }, + { sample_unpack_1_interleaved, sample_unpack_2_interleaved, + sample_unpack_4_interleaved, sample_unpack_8_interleaved, + 0, 0 + } }; + int num_planes = pie->num_planes; + bool interleaved = (num_planes == 1 && pie->plane_depths[0] != imd->bps); + int i; + int index_bps = (imd->bps < 8 ? imd->bps >> 1 : (imd->bps >> 2) + 1); + int log2_xbytes = (imd->bps <= 8 ? 0 : arch_log2_sizeof_frac); + + switch (format) { + case gs_image_format_chunky: + imd->spread = 1 << log2_xbytes; + break; + case gs_image_format_component_planar: + imd->spread = (imd->spp) << log2_xbytes; + break; + case gs_image_format_bit_planar: + imd->spread = (imd->spp) << log2_xbytes; + break; + default: + imd->spread = 0; + } + + procs[0][4] = procs[1][4] = sample_unpack_12_proc; + procs[0][5] = procs[1][5] = sample_unpackicc_16_proc; + if (interleaved) { + int num_components = pie->plane_depths[0] / imd->bps; + + for (i = 1; i < num_components; i++) { + if (decode[0] != decode[i * 2 + 0] || + decode[1] != decode[i * 2 + 1]) + break; + } + if (i == num_components) + interleaved = false; /* Use single table. */ + } + imd->unpack = procs[interleaved][index_bps]; +} + +/* We also need the mapping method for the unpacking proc */ +void +get_map(image_decode_t *imd, gs_image_format_t format, const float *decode) +{ + int ci = 0; + int decode_type; + int bps = imd->bps; + int spp = imd->spp; + static const float default_decode[] = { + 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0 + }; + const float *this_decode = &decode[ci * 2]; + const float *map_decode; /* decoding used to */ + /* construct the expansion map */ + const float *real_decode; /* decoding for expanded samples */ + + decode_type = 3; /* 0=custom, 1=identity, 2=inverted, 3=impossible */ + for (ci = 0; ci < spp; ci += 2) { + decode_type &= (decode[ci] == 0. && decode[ci + 1] == 1.) | + (decode[ci] == 1. && decode[ci + 1] == 0.) << 1; + } + + /* Initialize the maps from samples to intensities. */ + for (ci = 0; ci < spp; ci++) { + sample_map *pmap = &imd->map[ci]; + + if (bps > 8) + imd->applymap = applymap16; + else + imd->applymap = applymap8; + + /* If the decoding is [0 1] or [1 0], we can fold it */ + /* into the expansion of the sample values; */ + /* otherwise, we have to use the floating point method. */ + + this_decode = &decode[ci * 2]; + + map_decode = real_decode = this_decode; + if (!(decode_type & 1)) { + if ((decode_type & 2) && bps <= 8) { + real_decode = default_decode; + } + else { + map_decode = default_decode; + } + } + if (bps > 2 || format != gs_image_format_chunky) { + if (bps <= 8) + image_init_map(&pmap->table.lookup8[0], 1 << bps, + map_decode); + } + else { /* The map index encompasses more than one pixel. */ + byte map[4]; + register int i; + + image_init_map(&map[0], 1 << bps, map_decode); + switch (bps) { + case 1: + { + register bits32 *p = &pmap->table.lookup4x1to32[0]; + + if (map[0] == 0 && map[1] == 0xff) + memcpy((byte *)p, lookup4x1to32_identity, 16 * 4); + else if (map[0] == 0xff && map[1] == 0) + memcpy((byte *)p, lookup4x1to32_inverted, 16 * 4); + else + for (i = 0; i < 16; i++, p++) + ((byte *)p)[0] = map[i >> 3], + ((byte *)p)[1] = map[(i >> 2) & 1], + ((byte *)p)[2] = map[(i >> 1) & 1], + ((byte *)p)[3] = map[i & 1]; + } + break; + case 2: + { + register bits16 *p = &pmap->table.lookup2x2to16[0]; + + for (i = 0; i < 16; i++, p++) + ((byte *)p)[0] = map[i >> 2], + ((byte *)p)[1] = map[i & 3]; + } + break; + } + } + pmap->decode_base /* = decode_lookup[0] */ = real_decode[0]; + pmap->decode_factor = + (real_decode[1] - real_decode[0]) / + (bps <= 8 ? 255.0 : (float)frac_1); + pmap->decode_max /* = decode_lookup[15] */ = real_decode[1]; + if (decode_type) { + pmap->decoding = sd_none; + pmap->inverted = map_decode[0] != 0; + } + else if (bps <= 4) { + int step = 15 / ((1 << bps) - 1); + int i; + + pmap->decoding = sd_lookup; + for (i = 15 - step; i > 0; i -= step) + pmap->decode_lookup[i] = pmap->decode_base + + i * (255.0 / 15) * pmap->decode_factor; + } + else + pmap->decoding = sd_compute; + } +} + +/* We only provide 8 or 16 bit output with the application of the mapping */ +void applymap8(sample_map map[], const void *psrc_in, int spp, void *pdes, + void *bufend) +{ + byte* psrc = (byte*)psrc_in; + byte *curr_pos = (byte*) pdes; + int k; + float temp; + + while (curr_pos < (byte*) bufend) { + for (k = 0; k < spp; k++) { + switch (map[k].decoding) { + case sd_none: + *curr_pos = *psrc; + break; + case sd_lookup: + temp = map[k].decode_lookup[(*psrc) >> 4] * 255; + if (temp > 255) temp = 255; + if (temp < 0) temp = 0; + *curr_pos = (byte)temp; + break; + case sd_compute: + temp = map[k].decode_base + + *(psrc) * map[k].decode_factor; + temp *= 255; + if (temp > 255) temp = 255; + if (temp < 0) temp = 0; + *curr_pos = (byte)temp; + default: + break; + } + curr_pos++; + psrc++; + } + } +} + +void applymap16(sample_map map[], const void *psrc_in, int spp, void *pdes, + void *bufend) +{ + unsigned short *curr_pos = (unsigned short*)pdes; + unsigned short *psrc = (unsigned short*)psrc_in; + int k; + float temp; + + while (curr_pos < (unsigned short*) bufend) { + for (k = 0; k < spp; k++) { + switch (map[k].decoding) { + case sd_none: + *curr_pos = *psrc; + break; + case sd_lookup: + temp = map[k].decode_lookup[*(psrc) >> 4] * 65535.0; + if (temp > 65535) temp = 65535; + if (temp < 0) temp = 0; + *curr_pos = (unsigned short)temp; + break; + case sd_compute: + temp = map[k].decode_base + + *psrc * map[k].decode_factor; + temp *= 65535; + if (temp > 65535) temp = 65535; + if (temp < 0) temp = 0; + *curr_pos = (unsigned short)temp; + default: + break; + } + curr_pos++; + psrc++; + } + } +} \ No newline at end of file diff -Nru ghostscript-9.15+dfsg/base/gximdecode.h ghostscript-9.16~dfsg~0/base/gximdecode.h --- ghostscript-9.15+dfsg/base/gximdecode.h 1970-01-01 00:00:00.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gximdecode.h 2015-03-30 08:21:24.000000000 +0000 @@ -0,0 +1,42 @@ +/* Copyright (C) 2014-2015 Artifex Software, Inc. +All Rights Reserved. + +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +Refer to licensing information at http://www.artifex.com or contact +Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, San Rafael, +CA 94903, U.S.A., +1(415)492-9861, for further information. +*/ + +/* Prototypes for decoding and unpacking image data. Used for color + monitoring in clist and for creating TIFF files for xpswrite device */ + +#include "gx.h" +#include "gxfixed.h" +#include "gximage.h" +#include "gxsample.h" +#include "gxfrac.h" + +typedef void(*applymap_t) (sample_map map[], const void *psrc, int spp, + void *pdes, void *bufend); + +/* Define the structure the image_enums can use for handling decoding */ +typedef struct image_decode_s { + int bps; + int spp; + SAMPLE_UNPACK_PROC((*unpack)); + int spread; + sample_map map[GS_IMAGE_MAX_COMPONENTS]; + applymap_t applymap; +} image_decode_t; + +void get_unpack_proc(gx_image_enum_common_t *pie, image_decode_t *imd, + gs_image_format_t format, const float *decode); +void get_map(image_decode_t *imd, gs_image_format_t format, const float *decode); +void applymap16(sample_map map[], const void *psrc, int spp, void *pdes, void *bufend); +void applymap8(sample_map map[], const void *psrc, int spp, void *pdes, void *bufend); diff -Nru ghostscript-9.15+dfsg/base/gxipixel.c ghostscript-9.16~dfsg~0/base/gxipixel.c --- ghostscript-9.15+dfsg/base/gxipixel.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxipixel.c 2015-03-30 08:21:24.000000000 +0000 @@ -455,7 +455,7 @@ penum->matrix.yy = mat.yy; penum->matrix.tx = mat.tx; penum->matrix.ty = mat.ty; - if_debug6m('b', pis->memory, " [%g %g %g %g %g %g]\n", + if_debug6m('b', mem, " [%g %g %g %g %g %g]\n", mat.xx, mat.xy, mat.yx, mat.yy, mat.tx, mat.ty); /* following works for 1, 2, 4, 8, 12, 16 */ index_bps = (bps < 8 ? bps >> 1 : (bps >> 2) + 1); @@ -778,10 +778,10 @@ mty = (((mty + diff) | fixed_half) & -fixed_half) - diff; } } - if_debug5m('b', penum->memory, "[b]Image: %sspp=%d, bps=%d, mt=(%g,%g)\n", + if_debug5m('b', mem, "[b]Image: %sspp=%d, bps=%d, mt=(%g,%g)\n", (masked? "masked, " : ""), spp, bps, fixed2float(mtx), fixed2float(mty)); - if_debug9m('b', penum->memory, + if_debug9m('b', mem, "[b] cbox=(%g,%g),(%g,%g), obox=(%g,%g),(%g,%g), clip_image=0x%x\n", fixed2float(cbox.p.x), fixed2float(cbox.p.y), fixed2float(cbox.q.x), fixed2float(cbox.q.y), @@ -876,7 +876,7 @@ } else { penum->unpack = procs[interleaved][index_bps]; } - if_debug1m('b', penum->memory, "[b]unpack=%d\n", bps); + if_debug1m('b', mem, "[b]unpack=%d\n", bps); /* Set up pixel0 for image class procedures. */ penum->dda.pixel0 = penum->dda.strip; for (i = 0; i < gx_image_class_table_count; ++i) diff -Nru ghostscript-9.15+dfsg/base/gxp1fill.c ghostscript-9.16~dfsg~0/base/gxp1fill.c --- ghostscript-9.15+dfsg/base/gxp1fill.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxp1fill.c 2015-03-30 08:21:24.000000000 +0000 @@ -329,6 +329,7 @@ crdev->offset_map = NULL; crdev->page_info.io_procs->rewind(crdev->page_info.bfile, false, NULL); crdev->page_info.io_procs->rewind(crdev->page_info.cfile, false, NULL); + clist_render_init(cdev); /* Check for and get ICC profile table */ if (crdev->icc_table == NULL) code = clist_read_icctable(crdev); @@ -902,7 +903,7 @@ /* Blend */ art_pdf_composite_pixel_alpha_8(dst, src, ptile->ttrans->n_chan-1, - ptile->ttrans->blending_mode, + ptile->blending_mode, ptile->ttrans->blending_procs); /* Store the color values */ diff -Nru ghostscript-9.15+dfsg/base/gxpcmap.c ghostscript-9.16~dfsg~0/base/gxpcmap.c --- ghostscript-9.15+dfsg/base/gxpcmap.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxpcmap.c 2015-03-30 08:21:24.000000000 +0000 @@ -209,7 +209,7 @@ /* be needed in the pattern cache). If we end up using the clist, this is only */ /* a guess -- we use the tile size which will _probably_ be too large. */ static int -gx_pattern_size_estimate(gs_pattern1_instance_t *pinst, int has_tags) +gx_pattern_size_estimate(gs_pattern1_instance_t *pinst, bool has_tags) { gx_device *tdev = pinst->saved->device; int depth = (pinst->templat.PaintType == 2 ? 1 : tdev->color_info.depth); @@ -217,14 +217,14 @@ int64_t size; if (pinst->templat.uses_transparency) { - raster = (pinst->size.x * ((depth/8) + 1 + has_tags)); - size = raster > max_int / pinst->size.y ? (max_int & ~0xFFFF) : raster * pinst->size.y; + /* if the device has tags, add in an extra tag byte for the pdf14 compositor */ + raster = (pinst->size.x * ((depth/8) + 1 + (has_tags ? 1 : 0))); } else { raster = (pinst->size.x * depth + 7) / 8; - size = raster * pinst->size.y; } + size = raster > max_int / pinst->size.y ? (max_int & ~0xFFFF) : raster * pinst->size.y; if (size > (int64_t)max_int) - size = (int64_t)max_int; + size = (max_int & ~0xFFFF); return (int)size; } @@ -250,7 +250,7 @@ gs_pattern1_instance_t *pinst, client_name_t cname) { gx_device *tdev = pinst->saved->device; - int has_tags = tdev->graphics_type_tag & GS_DEVICE_ENCODES_TAGS; + bool has_tags = (tdev->graphics_type_tag & GS_DEVICE_ENCODES_TAGS) != 0; int size = gx_pattern_size_estimate(pinst, has_tags); gx_device_forward *fdev; int force_no_clist = 0; @@ -874,6 +874,7 @@ gx_device_memory *mbits = NULL; gx_pattern_trans_t *trans = NULL; int size_b, size_c; + gs_state *pgs = (gs_state *)pis; if (code < 0) return code; @@ -950,6 +951,10 @@ ctile->is_simple = pinst->is_simple; ctile->has_overlap = pinst->has_overlap; ctile->is_dummy = false; + if (pinst->templat.uses_transparency) + ctile->blending_mode = ((pdf14_device *)(pgs->device))->blend_mode; + else + ctile->blending_mode = 0; if (fdev->procs.open_device != pattern_clist_open_device) { if (mbits != 0) { make_bitmap(&ctile->tbits, mbits, gs_next_ids(pis->memory, 1)); @@ -980,15 +985,6 @@ ctile->tmask.size.x = 0; ctile->tmask.size.y = 0; ctile->cdev = cdev; -#if 0 /* Don't free - tile cache is used by clist reader. */ - gs_free_object(cwdev->bandlist_memory, cwdev->data, "gx_pattern_cache_add_entry"); - cwdev->data = NULL; - cwdev->states = NULL; - cwdev->cbuf = NULL; - cwdev->cnext = NULL; - cwdev->cend = NULL; - cwdev->ccl = NULL; -#endif /* Prevent freeing files on pattern_paint_cleanup : */ cwdev->do_not_open_or_close_bandfiles = true; } @@ -1237,7 +1233,7 @@ gs_state *saved; gx_color_tile *ctile; gs_memory_t *mem = pis->memory; - int has_tags = dev->graphics_type_tag & GS_DEVICE_ENCODES_TAGS; + bool has_tags = (dev->graphics_type_tag & GS_DEVICE_ENCODES_TAGS) != 0; int code; if (pis->pattern_cache == NULL) diff -Nru ghostscript-9.15+dfsg/base/gxpcolor.h ghostscript-9.16~dfsg~0/base/gxpcolor.h --- ghostscript-9.15+dfsg/base/gxpcolor.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/gxpcolor.h 2015-03-30 08:21:24.000000000 +0000 @@ -172,7 +172,6 @@ int height; const pdf14_nonseparable_blending_procs_t *blending_procs; bool is_additive; - gs_blend_mode_t blending_mode; gs_int_rect *dirty; void (* pat_trans_fill)(int xmin, int ymin, int xmax, int ymax, int px, int py, const gx_color_tile *ptile, @@ -215,6 +214,7 @@ /* (i.e., the mask is all 1's) */ gx_pattern_trans_t *ttrans; /* !=0 if has trans. in this case tbits == 0 */ + gs_blend_mode_t blending_mode; /* used if the pattern has transparency */ gx_device_clist *cdev; /* not NULL if the graphics is a command list. */ byte is_simple; /* true if xstep/ystep = tile size */ diff -Nru ghostscript-9.15+dfsg/base/ijs.mak ghostscript-9.16~dfsg~0/base/ijs.mak --- ghostscript-9.15+dfsg/base/ijs.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/ijs.mak 2015-03-30 08:21:24.000000000 +0000 @@ -58,14 +58,14 @@ ijslib_=$(IJSOBJ)ijs.$(OBJ) $(IJSOBJ)ijs_server.$(OBJ) \ $(IJSOBJ)ijs_client.$(OBJ) $(IJSOBJ)ijs_exec_$(IJSEXECTYPE).$(OBJ) -$(IJSGEN)ijslib_0.dev : $(TOP_MAKEFILES) $(IJS_MAK) $(ECHOGS_XE) $(ijslib_) +$(IJSGEN)ijslib_0.dev : $(TOP_MAKEFILES) $(IJS_MAK) $(ECHOGS_XE) $(ijslib_) $(MAKEDIRS) $(SETMOD) $(IJSGEN)ijslib_0 $(ijslib_) -$(IJSGEN)ijslib_1.dev : $(TOP_MAKEFILES) $(IJS_MAK) $(ECHOGS_XE) +$(IJSGEN)ijslib_1.dev : $(TOP_MAKEFILES) $(IJS_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(IJSGEN)ijslib_1 -lib $(IJS_NAME) -$(IJSGEN)ijslib.dev : $(TOP_MAKEFILES) $(IJS_MAK) $(IJSGEN)ijslib_$(SHARE_IJS).dev +$(IJSGEN)ijslib.dev : $(TOP_MAKEFILES) $(IJS_MAK) $(IJSGEN)ijslib_$(SHARE_IJS).dev $(MAKEDIRS) $(CP_) $(IJSGEN)ijslib_$(SHARE_IJS).dev $(IJSGEN)ijslib.dev @@ -74,25 +74,25 @@ ijs_client_h=$(IJSSRC)$(D)ijs_client.h ijs_server_h=$(IJSSRC)$(D)ijs_server.h -$(IJSOBJ)ijs.$(OBJ) : $(IJSSRC)ijs.c $(IJSDEP) $(ijs_h) $(ECHOGS_XE) +$(IJSOBJ)ijs.$(OBJ) : $(IJSSRC)ijs.c $(IJSDEP) $(ijs_h) $(ECHOGS_XE) $(MAKEDIRS) # echo $(IJS_CCFLAGS) $(EXP)$(ECHOGS_XE) $(IJS_CCFLAGS) $(IJS_CC) $(IJSO_)ijs.$(OBJ) $(C_) $(IJSSRC)ijs.c $(IJSOBJ)ijs_client.$(OBJ) : $(IJSSRC)ijs_client.c \ - $(IJSDEP) $(ijs_h) $(ijs_client_h) + $(IJSDEP) $(ijs_h) $(ijs_client_h) $(MAKEDIRS) $(IJS_CC) $(IJSO_)ijs_client.$(OBJ) $(C_) $(IJSSRC)ijs_client.c $(IJSOBJ)ijs_server.$(OBJ) : $(IJSSRC)ijs_server.c \ - $(IJSDEP) $(ijs_h) $(ijs_server_h) + $(IJSDEP) $(ijs_h) $(ijs_server_h) $(MAKEDIRS) $(IJS_CC) $(IJSO_)ijs_server.$(OBJ) $(C_) $(IJSSRC)ijs_server.c $(IJSOBJ)ijs_exec_unix.$(OBJ) : $(IJSSRC)ijs_exec_unix.c \ - $(IJSDEP) $(ijs_h) $(ijs_client_h) + $(IJSDEP) $(ijs_h) $(ijs_client_h) $(MAKEDIRS) $(IJS_CC) $(IJSO_)ijs_exec_unix.$(OBJ) $(C_) $(IJSSRC)ijs_exec_unix.c $(IJSOBJ)ijs_exec_win.$(OBJ) : $(IJSSRC)ijs_exec_win.c \ - $(IJSDEP) $(ijs_h) $(ijs_client_h) + $(IJSDEP) $(ijs_h) $(ijs_client_h) $(MAKEDIRS) # This can't be compiled with /Za because it needs windows.h. $(CC_WX) $(IJS_CCFLAGS) $(IJSO_)ijs_exec_win.$(OBJ) $(C_) $(IJSSRC)ijs_exec_win.c @@ -108,20 +108,20 @@ ijs_examples_=$(ijs_server_example_) $(ijs_client_example_) $(IJSGEN)ijs_examples.dev : $(IJS_MAK) $(ECHOGS_XE) \ - $(ijs_examples_) $(ijslib_) + $(ijs_examples_) $(ijslib_) $(MAKEDIRS) $(SETMOD) $(IJSGEN)ijs_examples $(ijs_examples_) $(ADDMOD) $(IJSGEN)ijs_examples $(ijslib_) $(IJSOBJ)ijs_client_example.$(OBJ) : $(IJSSRC)ijs_client_example.c \ - $(IJSDEP) $(ijs_h) $(ijs_client_h) + $(IJSDEP) $(ijs_h) $(ijs_client_h) $(MAKEDIRS) $(IJS_CC) $(IJSO_)ijs_client_example.$(OBJ) $(C_) $(IJSSRC)ijs_client_example.c -$(BINDIR)$(D)ijs_client_example : $(IJSOBJ)ijs_client_example.$(OBJ) $(ijslib_) +$(BINDIR)$(D)ijs_client_example : $(IJSOBJ)ijs_client_example.$(OBJ) $(ijslib_) $(MAKEDIRS) $(IJS_CC) -o bin/ijs_client_example $(IJSOBJ)ijs_client_example.$(OBJ) $(ijslib_) $(IJSOBJ)ijs_server_example.$(OBJ) : $(IJSSRC)ijs_server_example.c \ - $(IJSDEP) $(ijs_h) $(ijs_server_h) + $(IJSDEP) $(ijs_h) $(ijs_server_h) $(MAKEDIRS) $(IJS_CC) $(IJSO_)ijs_server_example.$(OBJ) $(C_) $(IJSSRC)ijs_server_example.c -$(BINDIR)$(D)ijs_server_example : $(IJSOBJ)ijs_server_example.$(OBJ) $(ijslib_) +$(BINDIR)$(D)ijs_server_example : $(IJSOBJ)ijs_server_example.$(OBJ) $(ijslib_) $(MAKEDIRS) $(IJS_CC) -o bin/ijs_server_example $(IJSOBJ)ijs_server_example.$(OBJ) $(ijslib_) diff -Nru ghostscript-9.15+dfsg/base/jbig2.mak ghostscript-9.16~dfsg~0/base/jbig2.mak --- ghostscript-9.15+dfsg/base/jbig2.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/jbig2.mak 2015-03-30 08:21:24.000000000 +0000 @@ -97,83 +97,83 @@ JBIG2O_=$(O_)$(JBIG2OBJ) # switch in the version of libjbig2.dev we're actually using -$(JBIG2GEN)jbig2dec.dev : $(TOP_MAKEFILES) $(JBIG2GEN)jbig2dec_$(SHARE_JBIG2).dev +$(JBIG2GEN)jbig2dec.dev : $(TOP_MAKEFILES) $(JBIG2GEN)jbig2dec_$(SHARE_JBIG2).dev $(MAKEDIRS) $(CP_) $(JBIG2GEN)jbig2dec_$(SHARE_JBIG2).dev $(JBIG2GEN)jbig2dec.dev # dev file for shared (separately built) jbig2dec library -$(JBIG2GEN)jbig2dec_1.dev : $(TOP_MAKEFILES) $(JBIG2_MAK) $(ECHOGS_XE) +$(JBIG2GEN)jbig2dec_1.dev : $(TOP_MAKEFILES) $(JBIG2_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(JBIG2GEN)jbig2dec_1 -lib jbig2dec # dev file for compiling our own from source -$(JBIG2GEN)jbig2dec_0.dev : $(TOP_MAKEFILES) $(JBIG2_MAK) $(ECHOGS_XE) $(libjbig2_OBJS) +$(JBIG2GEN)jbig2dec_0.dev : $(TOP_MAKEFILES) $(JBIG2_MAK) $(ECHOGS_XE) $(libjbig2_OBJS) $(MAKEDIRS) $(SETMOD) $(JBIG2GEN)jbig2dec_0 $(libjbig2_OBJS1) $(ADDMOD) $(JBIG2GEN)jbig2dec_0 $(libjbig2_OBJS2) # explicit rules for building the source files. -$(JBIG2OBJ)snprintf.$(OBJ) : $(JBIG2SRC)snprintf.c $(JBIG2DEP) +$(JBIG2OBJ)snprintf.$(OBJ) : $(JBIG2SRC)snprintf.c $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)snprintf.$(OBJ) $(C_) $(JBIG2SRC)snprintf.c -$(JBIG2OBJ)getopt.$(OBJ) : $(JBIG2SRC)getopt.c $(JBIG2SRC)getopt.h $(JBIG2DEP) +$(JBIG2OBJ)getopt.$(OBJ) : $(JBIG2SRC)getopt.c $(JBIG2SRC)getopt.h $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)getopt.$(OBJ) $(C_) $(JBIG2SRC)getopt.c -$(JBIG2OBJ)getopt1.$(OBJ) : $(JBIG2SRC)getopt1.c $(JBIG2SRC)getopt.h $(JBIG2DEP) +$(JBIG2OBJ)getopt1.$(OBJ) : $(JBIG2SRC)getopt1.c $(JBIG2SRC)getopt.h $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)getopt1.$(OBJ) $(C_) $(JBIG2SRC)getopt1.c -$(JBIG2OBJ)jbig2.$(OBJ) : $(JBIG2SRC)jbig2.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2.$(OBJ) : $(JBIG2SRC)jbig2.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2.$(OBJ) $(C_) $(JBIG2SRC)jbig2.c -$(JBIG2OBJ)jbig2_arith.$(OBJ) : $(JBIG2SRC)jbig2_arith.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_arith.$(OBJ) : $(JBIG2SRC)jbig2_arith.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_arith.$(OBJ) $(C_) $(JBIG2SRC)jbig2_arith.c -$(JBIG2OBJ)jbig2_arith_iaid.$(OBJ) : $(JBIG2SRC)jbig2_arith_iaid.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_arith_iaid.$(OBJ) : $(JBIG2SRC)jbig2_arith_iaid.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_arith_iaid.$(OBJ) $(C_) $(JBIG2SRC)jbig2_arith_iaid.c -$(JBIG2OBJ)jbig2_arith_int.$(OBJ) : $(JBIG2SRC)jbig2_arith_int.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_arith_int.$(OBJ) : $(JBIG2SRC)jbig2_arith_int.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_arith_int.$(OBJ) $(C_) $(JBIG2SRC)jbig2_arith_int.c -$(JBIG2OBJ)jbig2_generic.$(OBJ) : $(JBIG2SRC)jbig2_generic.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_generic.$(OBJ) : $(JBIG2SRC)jbig2_generic.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_generic.$(OBJ) $(C_) $(JBIG2SRC)jbig2_generic.c -$(JBIG2OBJ)jbig2_refinement.$(OBJ) : $(JBIG2SRC)jbig2_refinement.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_refinement.$(OBJ) : $(JBIG2SRC)jbig2_refinement.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_refinement.$(OBJ) $(C_) $(JBIG2SRC)jbig2_refinement.c -$(JBIG2OBJ)jbig2_huffman.$(OBJ) : $(JBIG2SRC)jbig2_huffman.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_huffman.$(OBJ) : $(JBIG2SRC)jbig2_huffman.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_huffman.$(OBJ) $(C_) $(JBIG2SRC)jbig2_huffman.c -$(JBIG2OBJ)jbig2_image.$(OBJ) : $(JBIG2SRC)jbig2_image.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_image.$(OBJ) : $(JBIG2SRC)jbig2_image.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_image.$(OBJ) $(C_) $(JBIG2SRC)jbig2_image.c -$(JBIG2OBJ)jbig2_image_pbm.$(OBJ) : $(JBIG2SRC)jbig2_image_pbm.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_image_pbm.$(OBJ) : $(JBIG2SRC)jbig2_image_pbm.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_image_pbm.$(OBJ) $(C_) $(JBIG2SRC)jbig2_image_pbm.c -$(JBIG2OBJ)jbig2_image_png.$(OBJ) : $(JBIG2SRC)jbig2_image_png.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_image_png.$(OBJ) : $(JBIG2SRC)jbig2_image_png.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_image_png.$(OBJ) $(C_) $(JBIG2SRC)jbig2_image_png.c -$(JBIG2OBJ)jbig2_mmr.$(OBJ) : $(JBIG2SRC)jbig2_mmr.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_mmr.$(OBJ) : $(JBIG2SRC)jbig2_mmr.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_mmr.$(OBJ) $(C_) $(JBIG2SRC)jbig2_mmr.c -$(JBIG2OBJ)jbig2_page.$(OBJ) : $(JBIG2SRC)jbig2_page.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_page.$(OBJ) : $(JBIG2SRC)jbig2_page.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_page.$(OBJ) $(C_) $(JBIG2SRC)jbig2_page.c -$(JBIG2OBJ)jbig2_segment.$(OBJ) : $(JBIG2SRC)jbig2_segment.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_segment.$(OBJ) : $(JBIG2SRC)jbig2_segment.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_segment.$(OBJ) $(C_) $(JBIG2SRC)jbig2_segment.c -$(JBIG2OBJ)jbig2_symbol_dict.$(OBJ) : $(JBIG2SRC)jbig2_symbol_dict.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_symbol_dict.$(OBJ) : $(JBIG2SRC)jbig2_symbol_dict.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_symbol_dict.$(OBJ) $(C_) $(JBIG2SRC)jbig2_symbol_dict.c -$(JBIG2OBJ)jbig2_text.$(OBJ) : $(JBIG2SRC)jbig2_text.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_text.$(OBJ) : $(JBIG2SRC)jbig2_text.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_text.$(OBJ) $(C_) $(JBIG2SRC)jbig2_text.c -$(JBIG2OBJ)jbig2_halftone.$(OBJ) : $(JBIG2SRC)jbig2_halftone.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_halftone.$(OBJ) : $(JBIG2SRC)jbig2_halftone.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_halftone.$(OBJ) $(C_) $(JBIG2SRC)jbig2_halftone.c -$(JBIG2OBJ)jbig2_metadata.$(OBJ) : $(JBIG2SRC)jbig2_metadata.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2_metadata.$(OBJ) : $(JBIG2SRC)jbig2_metadata.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2_metadata.$(OBJ) $(C_) $(JBIG2SRC)jbig2_metadata.c -$(JBIG2OBJ)jbig2dec.$(OBJ) : $(JBIG2SRC)jbig2dec.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)jbig2dec.$(OBJ) : $(JBIG2SRC)jbig2dec.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)jbig2dec.$(OBJ) $(C_) $(JBIG2SRC)jbig2dec.c -$(JBIG2OBJ)sha1.$(OBJ) : $(JBIG2SRC)sha1.c $(libjbig2_HDRS) $(JBIG2DEP) +$(JBIG2OBJ)sha1.$(OBJ) : $(JBIG2SRC)sha1.c $(libjbig2_HDRS) $(JBIG2DEP) $(MAKEDIRS) $(JBIG2_CC) $(JBIG2O_)sha1.$(OBJ) $(C_) $(JBIG2SRC)sha1.c diff -Nru ghostscript-9.15+dfsg/base/jpeg.mak ghostscript-9.16~dfsg~0/base/jpeg.mak --- ghostscript-9.15+dfsg/base/jpeg.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/jpeg.mak 2015-03-30 08:21:24.000000000 +0000 @@ -207,13 +207,13 @@ # Encoding (compression) code. -$(JGEN)jpege.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(JGEN)jpege_$(SHARE_JPEG).dev +$(JGEN)jpege.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(JGEN)jpege_$(SHARE_JPEG).dev $(MAKEDIRS) $(CP_) $(JGEN)jpege_$(SHARE_JPEG).dev $(JGEN)jpege.dev -$(JGEN)jpege_1.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(ECHOGS_XE) +$(JGEN)jpege_1.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(JGEN)jpege_1 -lib $(JPEG_NAME) -$(JGEN)jpege_0.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(JGEN)jpege6.dev +$(JGEN)jpege_0.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(JGEN)jpege6.dev $(MAKEDIRS) $(CP_) $(JGEN)jpege6.dev $(JGEN)jpege_0.dev jpege6=$(JOBJ)jcapimin.$(OBJ) $(JOBJ)jcapistd.$(OBJ) $(JOBJ)jcinit.$(OBJ) @@ -222,7 +222,8 @@ jpege_2=$(JOBJ)jchuff.$(OBJ) $(JOBJ)jcmainct.$(OBJ) $(JOBJ)jcmarker.$(OBJ) $(JOBJ)jcmaster.$(OBJ) jpege_3=$(JOBJ)jcparam.$(OBJ) $(JOBJ)jcprepct.$(OBJ) $(JOBJ)jcsample.$(OBJ) $(JOBJ)jfdctint.$(OBJ) -$(JGEN)jpege6.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JGEN)jpegc0.dev $(jpege6) $(jpege_1) $(jpege_2) $(jpege_3) +$(JGEN)jpege6.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JGEN)jpegc0.dev $(jpege6) $(jpege_1) $(jpege_2) $(jpege_3) \ + $(MAKEDIRS) $(SETMOD) $(JGEN)jpege6 $(jpege6) $(ADDMOD) $(JGEN)jpege6 -include $(JGEN)jpegc0.dev $(ADDMOD) $(JGEN)jpege6 -obj $(jpege_1) @@ -306,13 +307,14 @@ # Decompression code -$(JGEN)jpegd.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(JGEN)jpegd_$(SHARE_JPEG).dev +$(JGEN)jpegd.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(JGEN)jpegd_$(SHARE_JPEG).dev \ + $(MAKEDIRS) $(CP_) $(JGEN)jpegd_$(SHARE_JPEG).dev $(JGEN)jpegd.dev -$(JGEN)jpegd_1.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(ECHOGS_XE) +$(JGEN)jpegd_1.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(JGEN)jpegd_1 -lib $(JPEG_NAME) -$(JGEN)jpegd_0.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(JGEN)jpegd6.dev +$(JGEN)jpegd_0.dev : $(TOP_MAKEFILES) $(JPEG_MAK) $(JGEN)jpegd6.dev $(MAKEDIRS) $(CP_) $(JGEN)jpegd6.dev $(JGEN)jpegd_0.dev jpegd6=$(JOBJ)jdapimin.$(OBJ) $(JOBJ)jdapistd.$(OBJ) $(JOBJ)jdinput.$(OBJ) $(JOBJ)jdhuff.$(OBJ) @@ -321,7 +323,8 @@ jpegd_2=$(JOBJ)jddctmgr.$(OBJ) $(JOBJ)jdhuff.$(OBJ) $(JOBJ)jdmainct.$(OBJ) $(JOBJ)jdmarker.$(OBJ) jpegd_3=$(JOBJ)jdmaster.$(OBJ) $(JOBJ)jdpostct.$(OBJ) $(JOBJ)jdsample.$(OBJ) $(JOBJ)jidctint.$(OBJ) $(JOBJ)jdarith.$(OBJ) -$(JGEN)jpegd6.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JGEN)jpegc0.dev $(jpegd6) $(jpegd_1) $(jpegd_2) $(jpegd_3) +$(JGEN)jpegd6.dev : $(JPEG_MAK) $(ECHOGS_XE) $(JGEN)jpegc0.dev $(jpegd6) $(jpegd_1) $(jpegd_2) $(jpegd_3) \ + $(MAKEDIRS) $(SETMOD) $(JGEN)jpegd6 $(jpegd6) $(ADDMOD) $(JGEN)jpegd6 -include $(JGEN)jpegc0.dev $(ADDMOD) $(JGEN)jpegd6 -obj $(jpegd_1) diff -Nru ghostscript-9.15+dfsg/base/jpegxr.mak ghostscript-9.16~dfsg~0/base/jpegxr.mak --- ghostscript-9.15+dfsg/base/jpegxr.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/jpegxr.mak 2015-03-30 08:21:24.000000000 +0000 @@ -63,53 +63,53 @@ $(JPEGXR_OBJ)w_tile_frequency.$(OBJ) \ $(JPEGXR_OBJ)x_strip.$(OBJ) -jpegxr_hdrs=$(JPEGXR_SRC)jpegxr.h $(JPEGXR_SRC)jxr_priv.h +jpegxr_deps=$(JPEGXR_SRC)jpegxr.h $(JPEGXR_SRC)jxr_priv.h $(MAKEDIRS) -$(JPEGXR_OBJ)algo.$(OBJ) : $(JPEGXR_SRC)algo.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)algo.$(OBJ) : $(JPEGXR_SRC)algo.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)algo.$(OBJ) $(C_) $(JPEGXR_SRC)algo.c -$(JPEGXR_OBJ)api.$(OBJ) : $(JPEGXR_SRC)api.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)api.$(OBJ) : $(JPEGXR_SRC)api.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)api.$(OBJ) $(C_) $(JPEGXR_SRC)api.c -$(JPEGXR_OBJ)w_emit.$(OBJ) : $(JPEGXR_SRC)w_emit.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)w_emit.$(OBJ) : $(JPEGXR_SRC)w_emit.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)w_emit.$(OBJ) $(C_) $(JPEGXR_SRC)w_emit.c -$(JPEGXR_OBJ)flags.$(OBJ) : $(JPEGXR_SRC)flags.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)flags.$(OBJ) : $(JPEGXR_SRC)flags.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)flags.$(OBJ) $(C_) $(JPEGXR_SRC)flags.c -$(JPEGXR_OBJ)init.$(OBJ) : $(JPEGXR_SRC)init.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)init.$(OBJ) : $(JPEGXR_SRC)init.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)init.$(OBJ) $(C_) $(JPEGXR_SRC)init.c -$(JPEGXR_OBJ)io.$(OBJ) : $(JPEGXR_SRC)io.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)io.$(OBJ) : $(JPEGXR_SRC)io.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)io.$(OBJ) $(C_) $(JPEGXR_SRC)io.c -$(JPEGXR_OBJ)cr_parse.$(OBJ) : $(JPEGXR_SRC)cr_parse.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)cr_parse.$(OBJ) : $(JPEGXR_SRC)cr_parse.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)cr_parse.$(OBJ) $(C_) $(JPEGXR_SRC)cr_parse.c -$(JPEGXR_OBJ)cw_emit.$(OBJ) : $(JPEGXR_SRC)cw_emit.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)cw_emit.$(OBJ) : $(JPEGXR_SRC)cw_emit.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)cw_emit.$(OBJ) $(C_) $(JPEGXR_SRC)cw_emit.c -$(JPEGXR_OBJ)r_parse.$(OBJ) : $(JPEGXR_SRC)r_parse.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)r_parse.$(OBJ) : $(JPEGXR_SRC)r_parse.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)r_parse.$(OBJ) $(C_) $(JPEGXR_SRC)r_parse.c -$(JPEGXR_OBJ)jpegxr_pixelformat.$(OBJ) : $(JPEGXR_SRC)jpegxr_pixelformat.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)jpegxr_pixelformat.$(OBJ) : $(JPEGXR_SRC)jpegxr_pixelformat.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)jpegxr_pixelformat.$(OBJ) $(C_) $(JPEGXR_SRC)jpegxr_pixelformat.c -$(JPEGXR_OBJ)r_strip.$(OBJ) : $(JPEGXR_SRC)r_strip.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)r_strip.$(OBJ) : $(JPEGXR_SRC)r_strip.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)r_strip.$(OBJ) $(C_) $(JPEGXR_SRC)r_strip.c -$(JPEGXR_OBJ)r_tile_spatial.$(OBJ) : $(JPEGXR_SRC)r_tile_spatial.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)r_tile_spatial.$(OBJ) : $(JPEGXR_SRC)r_tile_spatial.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)r_tile_spatial.$(OBJ) $(C_) $(JPEGXR_SRC)r_tile_spatial.c -$(JPEGXR_OBJ)r_tile_frequency.$(OBJ) : $(JPEGXR_SRC)r_tile_frequency.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)r_tile_frequency.$(OBJ) : $(JPEGXR_SRC)r_tile_frequency.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)r_tile_frequency.$(OBJ) $(C_) $(JPEGXR_SRC)r_tile_frequency.c -$(JPEGXR_OBJ)w_strip.$(OBJ) : $(JPEGXR_SRC)w_strip.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)w_strip.$(OBJ) : $(JPEGXR_SRC)w_strip.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)w_strip.$(OBJ) $(C_) $(JPEGXR_SRC)w_strip.c -$(JPEGXR_OBJ)w_tile_spatial.$(OBJ) : $(JPEGXR_SRC)w_tile_spatial.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)w_tile_spatial.$(OBJ) : $(JPEGXR_SRC)w_tile_spatial.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)w_tile_spatial.$(OBJ) $(C_) $(JPEGXR_SRC)w_tile_spatial.c -$(JPEGXR_OBJ)w_tile_frequency.$(OBJ) : $(JPEGXR_SRC)w_tile_frequency.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)w_tile_frequency.$(OBJ) : $(JPEGXR_SRC)w_tile_frequency.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)w_tile_frequency.$(OBJ) $(C_) $(JPEGXR_SRC)w_tile_frequency.c -$(JPEGXR_OBJ)x_strip.$(OBJ) : $(JPEGXR_SRC)x_strip.c $(jpegxr_hdrs) +$(JPEGXR_OBJ)x_strip.$(OBJ) : $(JPEGXR_SRC)x_strip.c $(jpegxr_deps) $(JPEGXR_CC) $(JPEGXR_O_)x_strip.$(OBJ) $(C_) $(JPEGXR_SRC)x_strip.c # Copy the target definition we want $(JPEGXR_GEN)jpegxr.dev : $(TOP_MAKEFILES) $(JPEGXR_MAK) \ - $(JPEGXR_GEN)jpegxr_$(SHARE_JPEGXR).dev + $(JPEGXR_GEN)jpegxr_$(SHARE_JPEGXR).dev $(MAKEDIRS) $(CP_) $(JPEGXR_GEN)jpegxr_$(SHARE_JPEGXR).dev $(JPEGXR_GEN)jpegxr.dev # Define the compiled in target -$(JPEGXR_GEN)jpegxr_0.dev : $(JPEGXR_MAK) $(ECHOGS_XE) $(jpegxr_objs) +$(JPEGXR_GEN)jpegxr_0.dev : $(JPEGXR_MAK) $(ECHOGS_XE) $(jpegxr_objs) $(MAKEDIRS) $(SETMOD) $(JPEGXR_GEN)jpegxr_0 $(jpegxr_objs) # Define the external link target -$(JPEGXR_GEN)jpegxr_1.dev : $(JPEGXR_MAK) $(ECHOGS_XE) +$(JPEGXR_GEN)jpegxr_1.dev : $(JPEGXR_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(JPEGXR_GEN)jpegxr_1 -lib jpegxr diff -Nru ghostscript-9.15+dfsg/base/lcms2.mak ghostscript-9.16~dfsg~0/base/lcms2.mak --- ghostscript-9.15+dfsg/base/lcms2.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/lcms2.mak 2015-03-30 08:21:24.000000000 +0000 @@ -65,9 +65,9 @@ $(LCMS2OBJ)cmswtpnt.$(OBJ) \ $(LCMS2OBJ)cmsxform.$(OBJ) -lcms2_HDRS=\ +lcms2_deps=\ $(LCMS2SRCDIR)$(D)include$(D)lcms2.h \ - $(GLSRC)icc34.h + $(GLSRC)icc34.h $(MAKEDIRS) lcms2.clean : lcms2.config-clean lcms2.clean-not-config-clean @@ -84,87 +84,87 @@ LCMS2O_=$(O_)$(LCMS2OBJ) # switch in the version of lcms2.dev we're actually using -$(LCMS2GEN)lcms2.dev : $(TOP_MAKEFILES) $(LCMS2GEN)lcms2_$(SHARE_LCMS).dev +$(LCMS2GEN)lcms2.dev : $(TOP_MAKEFILES) $(LCMS2GEN)lcms2_$(SHARE_LCMS).dev $(MAKEDIRS) $(CP_) $(LCMS2GEN)lcms2_$(SHARE_LCMS).dev $(LCMS2GEN)lcms2.dev # dev file for shared (separately built) lcms library -$(LCMS2GEN)lcms2_1.dev : $(TOP_MAKEFILES) $(LCMS2_MAK) $(ECHOGS_XE) +$(LCMS2GEN)lcms2_1.dev : $(TOP_MAKEFILES) $(LCMS2_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(LCMS2GEN)lcms2_1 -lib lcms2 # dev file for compiling our own from source -$(LCMS2GEN)lcms2_0.dev : $(TOP_MAKEFILES) $(LCMS2_MAK) $(ECHOGS_XE) $(lcms2_OBJS) +$(LCMS2GEN)lcms2_0.dev : $(TOP_MAKEFILES) $(LCMS2_MAK) $(ECHOGS_XE) $(lcms2_OBJS) $(MAKEDIRS) $(SETMOD) $(LCMS2GEN)lcms2_0 $(lcms2_OBJS) # explicit rules for building the source files. -$(LCMS2OBJ)cmscam02.$(OBJ) : $(LCMS2SRC)cmscam02.c $(lcms2_HDRS) +$(LCMS2OBJ)cmscam02.$(OBJ) : $(LCMS2SRC)cmscam02.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmscam02.$(OBJ) $(C_) $(LCMS2SRC)cmscam02.c -$(LCMS2OBJ)cmscgats.$(OBJ) : $(LCMS2SRC)cmscgats.c $(lcms2_HDRS) +$(LCMS2OBJ)cmscgats.$(OBJ) : $(LCMS2SRC)cmscgats.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmscgats.$(OBJ) $(C_) $(LCMS2SRC)cmscgats.c -$(LCMS2OBJ)cmscnvrt.$(OBJ) : $(LCMS2SRC)cmscnvrt.c $(lcms2_HDRS) +$(LCMS2OBJ)cmscnvrt.$(OBJ) : $(LCMS2SRC)cmscnvrt.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmscnvrt.$(OBJ) $(C_) $(LCMS2SRC)cmscnvrt.c -$(LCMS2OBJ)cmserr.$(OBJ) : $(LCMS2SRC)cmserr.c $(lcms2_HDRS) +$(LCMS2OBJ)cmserr.$(OBJ) : $(LCMS2SRC)cmserr.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmserr.$(OBJ) $(C_) $(LCMS2SRC)cmserr.c -$(LCMS2OBJ)cmsgamma.$(OBJ) : $(LCMS2SRC)cmsgamma.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsgamma.$(OBJ) : $(LCMS2SRC)cmsgamma.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsgamma.$(OBJ) $(C_) $(LCMS2SRC)cmsgamma.c -$(LCMS2OBJ)cmsgmt.$(OBJ) : $(LCMS2SRC)cmsgmt.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsgmt.$(OBJ) : $(LCMS2SRC)cmsgmt.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsgmt.$(OBJ) $(C_) $(LCMS2SRC)cmsgmt.c -$(LCMS2OBJ)cmshalf.$(OBJ) : $(LCMS2SRC)cmshalf.c $(lcms2_HDRS) +$(LCMS2OBJ)cmshalf.$(OBJ) : $(LCMS2SRC)cmshalf.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmshalf.$(OBJ) $(C_) $(LCMS2SRC)cmshalf.c -$(LCMS2OBJ)cmsintrp.$(OBJ) : $(LCMS2SRC)cmsintrp.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsintrp.$(OBJ) : $(LCMS2SRC)cmsintrp.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsintrp.$(OBJ) $(C_) $(LCMS2SRC)cmsintrp.c -$(LCMS2OBJ)cmsio0.$(OBJ) : $(LCMS2SRC)cmsio0.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsio0.$(OBJ) : $(LCMS2SRC)cmsio0.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsio0.$(OBJ) $(C_) $(LCMS2SRC)cmsio0.c -$(LCMS2OBJ)cmsio1.$(OBJ) : $(LCMS2SRC)cmsio1.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsio1.$(OBJ) : $(LCMS2SRC)cmsio1.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsio1.$(OBJ) $(C_) $(LCMS2SRC)cmsio1.c -$(LCMS2OBJ)cmslut.$(OBJ) : $(LCMS2SRC)cmslut.c $(lcms2_HDRS) +$(LCMS2OBJ)cmslut.$(OBJ) : $(LCMS2SRC)cmslut.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmslut.$(OBJ) $(C_) $(LCMS2SRC)cmslut.c -$(LCMS2OBJ)cmsmd5.$(OBJ) : $(LCMS2SRC)cmsmd5.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsmd5.$(OBJ) : $(LCMS2SRC)cmsmd5.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsmd5.$(OBJ) $(C_) $(LCMS2SRC)cmsmd5.c -$(LCMS2OBJ)cmsmtrx.$(OBJ) : $(LCMS2SRC)cmsmtrx.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsmtrx.$(OBJ) : $(LCMS2SRC)cmsmtrx.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsmtrx.$(OBJ) $(C_) $(LCMS2SRC)cmsmtrx.c -$(LCMS2OBJ)cmsnamed.$(OBJ) : $(LCMS2SRC)cmsnamed.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsnamed.$(OBJ) : $(LCMS2SRC)cmsnamed.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsnamed.$(OBJ) $(C_) $(LCMS2SRC)cmsnamed.c -$(LCMS2OBJ)cmsopt.$(OBJ) : $(LCMS2SRC)cmsopt.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsopt.$(OBJ) : $(LCMS2SRC)cmsopt.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsopt.$(OBJ) $(C_) $(LCMS2SRC)cmsopt.c -$(LCMS2OBJ)cmspack.$(OBJ) : $(LCMS2SRC)cmspack.c $(lcms2_HDRS) +$(LCMS2OBJ)cmspack.$(OBJ) : $(LCMS2SRC)cmspack.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmspack.$(OBJ) $(C_) $(LCMS2SRC)cmspack.c -$(LCMS2OBJ)cmspcs.$(OBJ) : $(LCMS2SRC)cmspcs.c $(lcms2_HDRS) +$(LCMS2OBJ)cmspcs.$(OBJ) : $(LCMS2SRC)cmspcs.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmspcs.$(OBJ) $(C_) $(LCMS2SRC)cmspcs.c -$(LCMS2OBJ)cmsplugin.$(OBJ) : $(LCMS2SRC)cmsplugin.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsplugin.$(OBJ) : $(LCMS2SRC)cmsplugin.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsplugin.$(OBJ) $(C_) $(LCMS2SRC)cmsplugin.c -$(LCMS2OBJ)cmsps2.$(OBJ) : $(LCMS2SRC)cmsps2.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsps2.$(OBJ) : $(LCMS2SRC)cmsps2.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsps2.$(OBJ) $(C_) $(LCMS2SRC)cmsps2.c -$(LCMS2OBJ)cmssamp.$(OBJ) : $(LCMS2SRC)cmssamp.c $(lcms2_HDRS) +$(LCMS2OBJ)cmssamp.$(OBJ) : $(LCMS2SRC)cmssamp.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmssamp.$(OBJ) $(C_) $(LCMS2SRC)cmssamp.c -$(LCMS2OBJ)cmstypes.$(OBJ) : $(LCMS2SRC)cmstypes.c $(lcms2_HDRS) +$(LCMS2OBJ)cmstypes.$(OBJ) : $(LCMS2SRC)cmstypes.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmstypes.$(OBJ) $(C_) $(LCMS2SRC)cmstypes.c -$(LCMS2OBJ)cmswtpnt.$(OBJ) : $(LCMS2SRC)cmswtpnt.c $(lcms2_HDRS) +$(LCMS2OBJ)cmswtpnt.$(OBJ) : $(LCMS2SRC)cmswtpnt.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmswtpnt.$(OBJ) $(C_) $(LCMS2SRC)cmswtpnt.c -$(LCMS2OBJ)cmsvirt.$(OBJ) : $(LCMS2SRC)cmsvirt.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsvirt.$(OBJ) : $(LCMS2SRC)cmsvirt.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsvirt.$(OBJ) $(C_) $(LCMS2SRC)cmsvirt.c -$(LCMS2OBJ)cmsxform.$(OBJ) : $(LCMS2SRC)cmsxform.c $(lcms2_HDRS) +$(LCMS2OBJ)cmsxform.$(OBJ) : $(LCMS2SRC)cmsxform.c $(lcms2_deps) $(LCMS2_CC) $(LCMS2O_)cmsxform.$(OBJ) $(C_) $(LCMS2SRC)cmsxform.c diff -Nru ghostscript-9.15+dfsg/base/lcms.mak ghostscript-9.16~dfsg~0/base/lcms.mak --- ghostscript-9.15+dfsg/base/lcms.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/lcms.mak 1970-01-01 00:00:00.000000000 +0000 @@ -1,160 +0,0 @@ -# Copyright (C) 2001-2012 Artifex Software, Inc. -# All Rights Reserved. -# -# This software is provided AS-IS with no warranty, either express or -# implied. -# -# This software is distributed under license and may not be copied, -# modified or distributed except as expressly authorized under the terms -# of the license contained in the file LICENSE in this distribution. -# -# Refer to licensing information at http://www.artifex.com or contact -# Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, San Rafael, -# CA 94903, U.S.A., +1(415)492-9861, for further information. -# - -# makefile for the lcms library code. -# Users of this makefile must define the following: -# SHARE_LCMS - whether to compile in or link to the library -# LCMSSRCDIR - the library source directory -# -# gs.mak and friends define the following: -# LCMSOBJDIR - the output obj directory -# LCMSGENDIR - generated (.dev) file directory -# LCMSI_ LCMS_CFLAGS - include and cflags for compiling the lib - -# We define the lcms.dev target and its dependencies -# -# This partial makefile compiles the lcms library for use in -# Ghostscript. - -# Define the name of this makefile. -LCMS_MAK=$(GLSRC)lcms.mak - -LCMSSRC=$(LCMSSRCDIR)$(D)src$(D) -LCMSGEN=$(LCMSGENDIR)$(D) -LCMSOBJ=$(LCMSOBJDIR)$(D) - -# This makefile was originally written for lcms-1.18. -# Other versions may require adjustments to the OBJS list below - -lcms_OBJS=\ - $(LCMSOBJ)cmscnvrt.$(OBJ) \ - $(LCMSOBJ)cmserr.$(OBJ) \ - $(LCMSOBJ)cmsgamma.$(OBJ) \ - $(LCMSOBJ)cmsgmt.$(OBJ) \ - $(LCMSOBJ)cmsintrp.$(OBJ) \ - $(LCMSOBJ)cmsio0.$(OBJ) \ - $(LCMSOBJ)cmsio1.$(OBJ) \ - $(LCMSOBJ)cmslut.$(OBJ) \ - $(LCMSOBJ)cmsmatsh.$(OBJ) \ - $(LCMSOBJ)cmsmtrx.$(OBJ) \ - $(LCMSOBJ)cmspack.$(OBJ) \ - $(LCMSOBJ)cmspcs.$(OBJ) \ - $(LCMSOBJ)cmswtpnt.$(OBJ) \ - $(LCMSOBJ)cmsxform.$(OBJ) \ - $(LCMSOBJ)cmssamp.$(OBJ) \ - $(LCMSOBJ)cmscam97.$(OBJ) \ - $(LCMSOBJ)cmsnamed.$(OBJ) \ - $(LCMSOBJ)cmsps2.$(OBJ) \ - $(LCMSOBJ)cmscam02.$(OBJ) \ - $(LCMSOBJ)cmsvirt.$(OBJ) \ - $(LCMSOBJ)cmscgats.$(OBJ) - -# use of LCMS_USER_ALLOC avoids the lcms allocator. -lcms_HDRS=\ - $(LCMSSRCDIR)$(D)include$(D)lcms.h \ - $(GLSRC)icc34.h - -lcms.clean : lcms.config-clean lcms.clean-not-config-clean - -lcms.clean-not-config-clean : - $(EXP)$(ECHOGS_XE) $(LCMSSRCDIR) $(LCMSOBJDIR) - $(RM_) $(lcms_OBJS) - -lcms.config-clean : - $(RMN_) $(LCMSGEN)$(D)lcms*.dev - -LCMSCF_=$(D_)LCMS_USER_ALLOC$(_D_)1$(_D) - -# NB: we can't use the normal $(CC_) here because msvccmd.mak -# adds /Za which conflicts with the lcms source. -LCMS_CC=$(CC) $(D_)SHARE_LCMS=$(SHARE_LCMS)$(_D) $(CFLAGS) $(LCMS_CFLAGS) $(I_)$(GLSRC) $(I_)$(LCMSSRCDIR)$(D)include $(LCMSCF_) -LCMSO_=$(O_)$(LCMSOBJ) - -# switch in the version of lcms.dev we're actually using -$(LCMSGEN)lcms.dev : $(TOP_MAKEFILES) $(LCMSGEN)lcms_$(SHARE_LCMS).dev - $(CP_) $(LCMSGEN)lcms_$(SHARE_LCMS).dev $(LCMSGEN)lcms.dev - -# dev file for shared (separately built) lcms library -$(LCMSGEN)lcms_1.dev : $(TOP_MAKEFILES) $(LCMS_MAK) $(ECHOGS_XE) - $(SETMOD) $(LCMSGEN)lcms_1 -lib lcms - -# dev file for compiling our own from source -$(LCMSGEN)lcms_0.dev : $(TOP_MAKEFILES) $(LCMS_MAK) $(ECHOGS_XE) $(lcms_OBJS) - $(SETMOD) $(LCMSGEN)lcms_0 $(lcms_OBJS) - -# explicit rules for building the source files. - -$(LCMSOBJ)cmscnvrt.$(OBJ) : $(LCMSSRC)cmscnvrt.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmscnvrt.$(OBJ) $(C_) $(LCMSSRC)cmscnvrt.c - -$(LCMSOBJ)cmserr.$(OBJ) : $(LCMSSRC)cmserr.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmserr.$(OBJ) $(C_) $(LCMSSRC)cmserr.c - -$(LCMSOBJ)cmsgamma.$(OBJ) : $(LCMSSRC)cmsgamma.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsgamma.$(OBJ) $(C_) $(LCMSSRC)cmsgamma.c - -$(LCMSOBJ)cmsgmt.$(OBJ) : $(LCMSSRC)cmsgmt.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsgmt.$(OBJ) $(C_) $(LCMSSRC)cmsgmt.c - -$(LCMSOBJ)cmsintrp.$(OBJ) : $(LCMSSRC)cmsintrp.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsintrp.$(OBJ) $(C_) $(LCMSSRC)cmsintrp.c - -$(LCMSOBJ)cmsio0.$(OBJ) : $(LCMSSRC)cmsio0.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsio0.$(OBJ) $(C_) $(LCMSSRC)cmsio0.c - -$(LCMSOBJ)cmsio1.$(OBJ) : $(LCMSSRC)cmsio1.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsio1.$(OBJ) $(C_) $(LCMSSRC)cmsio1.c - -$(LCMSOBJ)cmslut.$(OBJ) : $(LCMSSRC)cmslut.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmslut.$(OBJ) $(C_) $(LCMSSRC)cmslut.c - -$(LCMSOBJ)cmsmatsh.$(OBJ) : $(LCMSSRC)cmsmatsh.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsmatsh.$(OBJ) $(C_) $(LCMSSRC)cmsmatsh.c - -$(LCMSOBJ)cmsmtrx.$(OBJ) : $(LCMSSRC)cmsmtrx.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsmtrx.$(OBJ) $(C_) $(LCMSSRC)cmsmtrx.c - -$(LCMSOBJ)cmspack.$(OBJ) : $(LCMSSRC)cmspack.c $(LCMSSRC)cmsxform.h $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmspack.$(OBJ) $(C_) $(LCMSSRC)cmspack.c - -$(LCMSOBJ)cmspcs.$(OBJ) : $(LCMSSRC)cmspcs.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmspcs.$(OBJ) $(C_) $(LCMSSRC)cmspcs.c - -$(LCMSOBJ)cmswtpnt.$(OBJ) : $(LCMSSRC)cmswtpnt.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmswtpnt.$(OBJ) $(C_) $(LCMSSRC)cmswtpnt.c - -$(LCMSOBJ)cmsxform.$(OBJ) : $(LCMSSRC)cmsxform.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsxform.$(OBJ) $(C_) $(LCMSSRC)cmsxform.c - -$(LCMSOBJ)cmssamp.$(OBJ) : $(LCMSSRC)cmssamp.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmssamp.$(OBJ) $(C_) $(LCMSSRC)cmssamp.c - -$(LCMSOBJ)cmscam97.$(OBJ) : $(LCMSSRC)cmscam97.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmscam97.$(OBJ) $(C_) $(LCMSSRC)cmscam97.c - -$(LCMSOBJ)cmsnamed.$(OBJ) : $(LCMSSRC)cmsnamed.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsnamed.$(OBJ) $(C_) $(LCMSSRC)cmsnamed.c - -$(LCMSOBJ)cmsps2.$(OBJ) : $(LCMSSRC)cmsps2.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsps2.$(OBJ) $(C_) $(LCMSSRC)cmsps2.c - -$(LCMSOBJ)cmscam02.$(OBJ) : $(LCMSSRC)cmscam02.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmscam02.$(OBJ) $(C_) $(LCMSSRC)cmscam02.c - -$(LCMSOBJ)cmsvirt.$(OBJ) : $(LCMSSRC)cmsvirt.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmsvirt.$(OBJ) $(C_) $(LCMSSRC)cmsvirt.c - -$(LCMSOBJ)cmscgats.$(OBJ) : $(LCMSSRC)cmscgats.c $(lcms_HDRS) - $(LCMS_CC) $(LCMSO_)cmscgats.$(OBJ) $(C_) $(LCMSSRC)cmscgats.c diff -Nru ghostscript-9.15+dfsg/base/lcupsi.mak ghostscript-9.16~dfsg~0/base/lcupsi.mak --- ghostscript-9.15+dfsg/base/lcupsi.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/lcupsi.mak 2015-03-30 08:21:24.000000000 +0000 @@ -42,11 +42,12 @@ $(LIBCUPSIOBJ)interpret.$(OBJ) \ $(LIBCUPSIOBJ)raster.$(OBJ) -LIBCUPSIHEADERS = \ +LIBCUPSI_DEPS = \ $(LIBCUPSISRC)common.h \ $(LIBCUPSISRC)image.h \ $(LIBCUPSISRC)image-private.h \ - $(LIBCUPSISRC)image-sgi.h + $(LIBCUPSISRC)image-sgi.h \ + $(MAKEDIRS) libcupsi.clean : libcupsi.config-clean libcupsi.clean-not-config-clean @@ -58,69 +59,71 @@ $(RMN_) $(LIBCUPSIGEN)$(D)lcupsi*.dev # instantiate the requested build option (shared or compiled in) -$(LIBCUPSIGEN)lcupsi.dev : $(TOP_MAKEFILES) $(LIBCUPSIGEN)lcupsi_$(SHARE_LCUPSI).dev +$(LIBCUPSIGEN)lcupsi.dev : $(TOP_MAKEFILES) $(LIBCUPSIGEN)lcupsi_$(SHARE_LCUPSI).dev\ + $(MAKEDIRS) $(CP_) $(LIBCUPSIGEN)lcupsi_$(SHARE_LCUPSI).dev $(LIBCUPSIGEN)lcupsi.dev # Define the shared version. -$(LIBCUPSIGEN)lcupsi_1.dev : $(TOP_MAKEFILES) $(LCUPSI_MAK) $(ECHOGS_XE) +$(LIBCUPSIGEN)lcupsi_1.dev : $(TOP_MAKEFILES) $(LCUPSI_MAK) $(ECHOGS_XE) \ + $(MAKEDIRS) $(SETMOD) $(LIBCUPSIGEN)lcupsi_1 -link $(LCUPSI_LIBS) # Define the non-shared version. $(LIBCUPSIGEN)lcupsi_0.dev : $(TOP_MAKEFILES) $(LCUPSI_MAK) $(ECHOGS_XE) \ - $(LIBCUPSI_OBJS) + $(LIBCUPSI_OBJS) $(MAKEDIRS) $(SETMOD) $(LIBCUPSIGEN)lcupsi_0 $(LIBCUPSI_OBJS) # explicit rules for building the source files # for simplicity we have every source file depend on all headers -$(LIBCUPSIOBJ)image-bmp.$(OBJ) : $(LIBCUPSISRC)image-bmp.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-bmp.$(OBJ) : $(LIBCUPSISRC)image-bmp.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-bmp.$(OBJ) $(C_) $(LIBCUPSISRC)image-bmp.c -$(LIBCUPSIOBJ)image-colorspace.$(OBJ) : $(LIBCUPSISRC)image-colorspace.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-colorspace.$(OBJ) : $(LIBCUPSISRC)image-colorspace.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-colorspace.$(OBJ) $(C_) $(LIBCUPSISRC)image-colorspace.c -$(LIBCUPSIOBJ)image-gif.$(OBJ) : $(LIBCUPSISRC)image-gif.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-gif.$(OBJ) : $(LIBCUPSISRC)image-gif.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-gif.$(OBJ) $(C_) $(LIBCUPSISRC)image-gif.c -$(LIBCUPSIOBJ)image-jpeg.$(OBJ) : $(LIBCUPSISRC)image-jpeg.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-jpeg.$(OBJ) : $(LIBCUPSISRC)image-jpeg.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-jpeg.$(OBJ) $(C_) $(LIBCUPSISRC)image-jpeg.c -$(LIBCUPSIOBJ)image-photocd.$(OBJ) : $(LIBCUPSISRC)image-photocd.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-photocd.$(OBJ) : $(LIBCUPSISRC)image-photocd.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-photocd.$(OBJ) $(C_) $(LIBCUPSISRC)image-photocd.c -$(LIBCUPSIOBJ)image-pix.$(OBJ) : $(LIBCUPSISRC)image-pix.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-pix.$(OBJ) : $(LIBCUPSISRC)image-pix.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-pix.$(OBJ) $(C_) $(LIBCUPSISRC)image-pix.c -$(LIBCUPSIOBJ)image-png.$(OBJ) : $(LIBCUPSISRC)image-png.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-png.$(OBJ) : $(LIBCUPSISRC)image-png.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-png.$(OBJ) $(C_) $(LIBCUPSISRC)image-png.c -$(LIBCUPSIOBJ)image-pnm.$(OBJ) : $(LIBCUPSISRC)image-pnm.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-pnm.$(OBJ) : $(LIBCUPSISRC)image-pnm.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-pnm.$(OBJ) $(C_) $(LIBCUPSISRC)image-pnm.c -$(LIBCUPSIOBJ)image-sgi.$(OBJ) : $(LIBCUPSISRC)image-sgi.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-sgi.$(OBJ) : $(LIBCUPSISRC)image-sgi.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-sgi.$(OBJ) $(C_) $(LIBCUPSISRC)image-sgi.c -$(LIBCUPSIOBJ)image-sgilib.$(OBJ) : $(LIBCUPSISRC)image-sgilib.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-sgilib.$(OBJ) : $(LIBCUPSISRC)image-sgilib.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-sgilib.$(OBJ) $(C_) $(LIBCUPSISRC)image-sgilib.c -$(LIBCUPSIOBJ)image-sun.$(OBJ) : $(LIBCUPSISRC)image-sun.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-sun.$(OBJ) : $(LIBCUPSISRC)image-sun.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-sun.$(OBJ) $(C_) $(LIBCUPSISRC)image-sun.c -$(LIBCUPSIOBJ)image-tiff.$(OBJ) : $(LIBCUPSISRC)image-tiff.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-tiff.$(OBJ) : $(LIBCUPSISRC)image-tiff.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-tiff.$(OBJ) $(C_) $(LIBCUPSISRC)image-tiff.c -$(LIBCUPSIOBJ)image-zoom.$(OBJ) : $(LIBCUPSISRC)image-zoom.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image-zoom.$(OBJ) : $(LIBCUPSISRC)image-zoom.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image-zoom.$(OBJ) $(C_) $(LIBCUPSISRC)image-zoom.c -$(LIBCUPSIOBJ)image.$(OBJ) : $(LIBCUPSISRC)image.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)image.$(OBJ) : $(LIBCUPSISRC)image.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)image.$(OBJ) $(C_) $(LIBCUPSISRC)image.c -$(LIBCUPSIOBJ)error.$(OBJ) : $(LIBCUPSISRC)error.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)error.$(OBJ) : $(LIBCUPSISRC)error.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)error.$(OBJ) $(C_) $(LIBCUPSISRC)error.c -$(LIBCUPSIOBJ)interpret.$(OBJ) : $(LIBCUPSISRC)interpret.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)interpret.$(OBJ) : $(LIBCUPSISRC)interpret.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)interpret.$(OBJ) $(C_) $(LIBCUPSISRC)interpret.c -$(LIBCUPSIOBJ)raster.$(OBJ) : $(LIBCUPSISRC)raster.c $(LIBSCUPSIHEADERS) +$(LIBCUPSIOBJ)raster.$(OBJ) : $(LIBCUPSISRC)raster.c $(LIBCUPSI_DEPS) $(LCUPSI_CC) $(LCUPSIO_)raster.$(OBJ) $(C_) $(LIBCUPSISRC)raster.c diff -Nru ghostscript-9.15+dfsg/base/lcups.mak ghostscript-9.16~dfsg~0/base/lcups.mak --- ghostscript-9.15+dfsg/base/lcups.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/lcups.mak 2015-03-30 08:21:24.000000000 +0000 @@ -85,7 +85,7 @@ # $(LIBCUPSOBJ)pwg-ppd.$(OBJ) \ # $(LIBCUPSOBJ)pwg-file.$(OBJ) \ -LIBCUPSHEADERS = \ +LIBCUPS_DEPS = \ $(LIBCUPSSRC)adminutil.h \ $(LIBCUPSSRC)array.h \ $(LIBCUPSSRC)backend.h \ @@ -99,7 +99,8 @@ $(LIBCUPSSRC)raster.h \ $(LIBCUPSSRC)sidechannel.h \ $(LIBCUPSSRC)transcode.h \ - $(LIBCUPSSRC)versioning.h + $(LIBCUPSSRC)versioning.h \ + $(MAKEDIRS) libcups.clean : libcups.config-clean libcups.clean-not-config-clean @@ -115,169 +116,171 @@ $(RMN_) $(LIBCUPSGEN)$(D)cups_util.c # instantiate the requested build option (shared or compiled in) -$(LIBCUPSGEN)lcups.dev : $(TOP_MAKEFILES) $(LIBCUPSGEN)lcups_$(SHARE_LCUPS).dev +$(LIBCUPSGEN)lcups.dev : $(TOP_MAKEFILES) $(LIBCUPSGEN)lcups_$(SHARE_LCUPS).dev \ + $(MAKEDIRS) $(CP_) $(LIBCUPSGEN)lcups_$(SHARE_LCUPS).dev $(LIBCUPSGEN)lcups.dev # Define the shared version. -$(LIBCUPSGEN)lcups_1.dev : $(TOP_MAKEFILES) $(LCUPS_MAK) $(ECHOGS_XE) +$(LIBCUPSGEN)lcups_1.dev : $(TOP_MAKEFILES) $(LCUPS_MAK) $(ECHOGS_XE)\ + $(MAKEDIRS) $(SETMOD) $(LIBCUPSGEN)lcups_1 -link $(LCUPS_LIBS) $(ADDMOD) $(DD)lcups_1 -libpath $(CUPSLIBDIRS) $(ADDMOD) $(DD)lcups_1 -lib $(CUPSLIBS) # Define the non-shared version. $(LIBCUPSGEN)lcups_0.dev : $(TOP_MAKEFILES) $(LCUPS_MAK) $(ECHOGS_XE) \ - $(LIBCUPS_OBJS) + $(LIBCUPS_OBJS) $(MAKEDIRS) $(SETMOD) $(LIBCUPSGEN)lcups_0 $(LIBCUPS_OBJS) # explicit rules for building the source files # for simplicity we have every source file depend on all headers -$(LIBCUPSGEN)$(D)cups$(D)config.h : $(LCUPSSRCDIR)$(D)libs$(D)config$(LCUPSBUILDTYPE).h +$(LIBCUPSGEN)$(D)cups$(D)config.h : $(LCUPSSRCDIR)$(D)libs$(D)config$(LCUPSBUILDTYPE).h $(MAKEDIRS) $(CP_) $(LCUPSSRCDIR)$(D)libs$(D)config$(LCUPSBUILDTYPE).h $(LIBCUPSGEN)$(D)cups$(D)config.h -$(LIBCUPSOBJ)adminutil.$(OBJ) : $(LIBCUPSSRC)adminutil.c $(LIBSCUPSHEADERS) $(LIBCUPSGEN)$(D)cups$(D)config.h +$(LIBCUPSOBJ)adminutil.$(OBJ) : $(LIBCUPSSRC)adminutil.c $(LIBCUPSGEN)$(D)cups$(D)config.h $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)adminutil.$(OBJ) $(C_) $(LIBCUPSSRC)adminutil.c -$(LIBCUPSOBJ)array.$(OBJ) : $(LIBCUPSSRC)array.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)array.$(OBJ) : $(LIBCUPSSRC)array.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)array.$(OBJ) $(C_) $(LIBCUPSSRC)array.c -$(LIBCUPSOBJ)attr.$(OBJ) : $(LIBCUPSSRC)attr.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)attr.$(OBJ) : $(LIBCUPSSRC)attr.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)attr.$(OBJ) $(C_) $(LIBCUPSSRC)attr.c -$(LIBCUPSOBJ)auth.$(OBJ) : $(LIBCUPSSRC)auth.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)auth.$(OBJ) : $(LIBCUPSSRC)auth.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)auth.$(OBJ) $(C_) $(LIBCUPSSRC)auth.c -$(LIBCUPSOBJ)backchannel.$(OBJ) : $(LIBCUPSSRC)backchannel.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)backchannel.$(OBJ) : $(LIBCUPSSRC)backchannel.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)backchannel.$(OBJ) $(C_) $(LIBCUPSSRC)backchannel.c -$(LIBCUPSOBJ)backend.$(OBJ) : $(LIBCUPSSRC)backend.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)backend.$(OBJ) : $(LIBCUPSSRC)backend.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)backend.$(OBJ) $(C_) $(LIBCUPSSRC)backend.c -$(LIBCUPSOBJ)conflicts.$(OBJ) : $(LIBCUPSSRC)conflicts.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)conflicts.$(OBJ) : $(LIBCUPSSRC)conflicts.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)conflicts.$(OBJ) $(C_) $(LIBCUPSSRC)conflicts.c -$(LIBCUPSOBJ)custom.$(OBJ) : $(LIBCUPSSRC)custom.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)custom.$(OBJ) : $(LIBCUPSSRC)custom.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)custom.$(OBJ) $(C_) $(LIBCUPSSRC)custom.c -$(LIBCUPSOBJ)debug.$(OBJ) : $(LIBCUPSSRC)debug.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)debug.$(OBJ) : $(LIBCUPSSRC)debug.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)debug.$(OBJ) $(C_) $(LIBCUPSSRC)debug.c -$(LIBCUPSOBJ)dest.$(OBJ) : $(LIBCUPSSRC)dest.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)dest.$(OBJ) : $(LIBCUPSSRC)dest.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)dest.$(OBJ) $(C_) $(LIBCUPSSRC)dest.c -$(LIBCUPSOBJ)dir.$(OBJ) : $(LIBCUPSSRC)dir.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)dir.$(OBJ) : $(LIBCUPSSRC)dir.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)dir.$(OBJ) $(C_) $(LIBCUPSSRC)dir.c -$(LIBCUPSOBJ)emit.$(OBJ) : $(LIBCUPSSRC)emit.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)emit.$(OBJ) : $(LIBCUPSSRC)emit.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)emit.$(OBJ) $(C_) $(LIBCUPSSRC)emit.c -$(LIBCUPSOBJ)encode.$(OBJ) : $(LIBCUPSSRC)encode.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)encode.$(OBJ) : $(LIBCUPSSRC)encode.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)encode.$(OBJ) $(C_) $(LIBCUPSSRC)encode.c -$(LIBCUPSOBJ)file.$(OBJ) : $(LIBCUPSSRC)file.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)file.$(OBJ) : $(LIBCUPSSRC)file.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)file.$(OBJ) $(C_) $(LIBCUPSSRC)file.c -$(LIBCUPSOBJ)getdevices.$(OBJ) : $(LIBCUPSSRC)getdevices.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)getdevices.$(OBJ) : $(LIBCUPSSRC)getdevices.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)getdevices.$(OBJ) $(C_) $(LIBCUPSSRC)getdevices.c -$(LIBCUPSOBJ)getifaddrs.$(OBJ) : $(LIBCUPSSRC)getifaddrs.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)getifaddrs.$(OBJ) : $(LIBCUPSSRC)getifaddrs.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)getifaddrs.$(OBJ) $(C_) $(LIBCUPSSRC)getifaddrs.c -$(LIBCUPSOBJ)getputfile.$(OBJ) : $(LIBCUPSSRC)getputfile.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)getputfile.$(OBJ) : $(LIBCUPSSRC)getputfile.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)getputfile.$(OBJ) $(C_) $(LIBCUPSSRC)getputfile.c -$(LIBCUPSOBJ)globals.$(OBJ) : $(LIBCUPSSRC)globals.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)globals.$(OBJ) : $(LIBCUPSSRC)globals.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)globals.$(OBJ) $(C_) $(LIBCUPSSRC)globals.c -$(LIBCUPSOBJ)http.$(OBJ) : $(LIBCUPSSRC)http.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)http.$(OBJ) : $(LIBCUPSSRC)http.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)http.$(OBJ) $(C_) $(LIBCUPSSRC)http.c -$(LIBCUPSOBJ)http-addr.$(OBJ) : $(LIBCUPSSRC)http-addr.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)http-addr.$(OBJ) : $(LIBCUPSSRC)http-addr.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)http-addr.$(OBJ) $(C_) $(LIBCUPSSRC)http-addr.c -$(LIBCUPSOBJ)http-addrlist.$(OBJ) : $(LIBCUPSSRC)http-addrlist.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)http-addrlist.$(OBJ) : $(LIBCUPSSRC)http-addrlist.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)http-addrlist.$(OBJ) $(C_) $(LIBCUPSSRC)http-addrlist.c -$(LIBCUPSOBJ)http-support.$(OBJ) : $(LIBCUPSSRC)http-support.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)http-support.$(OBJ) : $(LIBCUPSSRC)http-support.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)http-support.$(OBJ) $(C_) $(LIBCUPSSRC)http-support.c -$(LIBCUPSOBJ)ipp.$(OBJ) : $(LIBCUPSSRC)ipp.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)ipp.$(OBJ) : $(LIBCUPSSRC)ipp.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)ipp.$(OBJ) $(C_) $(LIBCUPSSRC)ipp.c -$(LIBCUPSOBJ)ipp-support.$(OBJ) : $(LIBCUPSSRC)ipp-support.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)ipp-support.$(OBJ) : $(LIBCUPSSRC)ipp-support.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)ipp-support.$(OBJ) $(C_) $(LIBCUPSSRC)ipp-support.c -$(LIBCUPSOBJ)langprintf.$(OBJ) : $(LIBCUPSSRC)langprintf.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)langprintf.$(OBJ) : $(LIBCUPSSRC)langprintf.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)langprintf.$(OBJ) $(C_) $(LIBCUPSSRC)langprintf.c -$(LIBCUPSOBJ)language.$(OBJ) : $(LIBCUPSSRC)language.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)language.$(OBJ) : $(LIBCUPSSRC)language.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)language.$(OBJ) $(C_) $(LIBCUPSSRC)language.c -$(LIBCUPSOBJ)localize.$(OBJ) : $(LIBCUPSSRC)localize.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)localize.$(OBJ) : $(LIBCUPSSRC)localize.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)localize.$(OBJ) $(C_) $(LIBCUPSSRC)localize.c -$(LIBCUPSOBJ)mark.$(OBJ) : $(LIBCUPSSRC)mark.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)mark.$(OBJ) : $(LIBCUPSSRC)mark.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)mark.$(OBJ) $(C_) $(LIBCUPSSRC)mark.c -$(LIBCUPSOBJ)cups_md5.$(OBJ) : $(LIBCUPSSRC)md5.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)cups_md5.$(OBJ) : $(LIBCUPSSRC)md5.c $(LIBCUPS_DEPS) $(CP_) $(LIBCUPSSRC)md5.c $(LIBCUPSGEN)cups_md5.c $(LCUPS_CC) $(LCUPSO_)cups_md5.$(OBJ) $(C_) $(LIBCUPSGEN)cups_md5.c -$(LIBCUPSOBJ)md5passwd.$(OBJ) : $(LIBCUPSSRC)md5passwd.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)md5passwd.$(OBJ) : $(LIBCUPSSRC)md5passwd.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)md5passwd.$(OBJ) $(C_) $(LIBCUPSSRC)md5passwd.c -$(LIBCUPSOBJ)notify.$(OBJ) : $(LIBCUPSSRC)notify.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)notify.$(OBJ) : $(LIBCUPSSRC)notify.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)notify.$(OBJ) $(C_) $(LIBCUPSSRC)notify.c -$(LIBCUPSOBJ)options.$(OBJ) : $(LIBCUPSSRC)options.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)options.$(OBJ) : $(LIBCUPSSRC)options.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)options.$(OBJ) $(C_) $(LIBCUPSSRC)options.c -$(LIBCUPSOBJ)page.$(OBJ) : $(LIBCUPSSRC)page.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)page.$(OBJ) : $(LIBCUPSSRC)page.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)page.$(OBJ) $(C_) $(LIBCUPSSRC)page.c -$(LIBCUPSOBJ)ppd.$(OBJ) : $(LIBCUPSSRC)ppd.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)ppd.$(OBJ) : $(LIBCUPSSRC)ppd.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)ppd.$(OBJ) $(C_) $(LIBCUPSSRC)ppd.c -$(LIBCUPSOBJ)pwg-file.$(OBJ) : $(LIBCUPSSRC)pwg-file.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)pwg-file.$(OBJ) : $(LIBCUPSSRC)pwg-file.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)pwg-file.$(OBJ) $(C_) $(LIBCUPSSRC)pwg-file.c -$(LIBCUPSOBJ)pwg-media.$(OBJ) : $(LIBCUPSSRC)pwg-media.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)pwg-media.$(OBJ) : $(LIBCUPSSRC)pwg-media.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)pwg-media.$(OBJ) $(C_) $(LIBCUPSSRC)pwg-media.c -$(LIBCUPSOBJ)pwg-ppd.$(OBJ) : $(LIBCUPSSRC)pwg-ppd.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)pwg-ppd.$(OBJ) : $(LIBCUPSSRC)pwg-ppd.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)pwg-ppd.$(OBJ) $(C_) $(LIBCUPSSRC)pwg-ppd.c -$(LIBCUPSOBJ)request.$(OBJ) : $(LIBCUPSSRC)request.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)request.$(OBJ) : $(LIBCUPSSRC)request.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)request.$(OBJ) $(C_) $(LIBCUPSSRC)request.c -$(LIBCUPSOBJ)sidechannel.$(OBJ) : $(LIBCUPSSRC)sidechannel.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)sidechannel.$(OBJ) : $(LIBCUPSSRC)sidechannel.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)sidechannel.$(OBJ) $(C_) $(LIBCUPSSRC)sidechannel.c -$(LIBCUPSOBJ)snmp.$(OBJ) : $(LIBCUPSSRC)snmp.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)snmp.$(OBJ) : $(LIBCUPSSRC)snmp.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)snmp.$(OBJ) $(C_) $(LIBCUPSSRC)snmp.c -$(LIBCUPSOBJ)cups_snpf.$(OBJ) : $(LIBCUPSSRC)snprintf.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)cups_snpf.$(OBJ) : $(LIBCUPSSRC)snprintf.c $(LIBCUPS_DEPS) $(CP_) $(LIBCUPSSRC)snprintf.c $(LIBCUPSGEN)cups_snpf.c $(LCUPS_CC) $(LCUPSO_)cups_snpf.$(OBJ) $(C_) $(LIBCUPSGEN)cups_snpf.c -$(LIBCUPSOBJ)string.$(OBJ) : $(LIBCUPSSRC)string.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)string.$(OBJ) : $(LIBCUPSSRC)string.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)string.$(OBJ) $(C_) $(LIBCUPSSRC)string.c -$(LIBCUPSOBJ)tempfile.$(OBJ) : $(LIBCUPSSRC)tempfile.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)tempfile.$(OBJ) : $(LIBCUPSSRC)tempfile.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)tempfile.$(OBJ) $(C_) $(LIBCUPSSRC)tempfile.c -$(LIBCUPSOBJ)transcode.$(OBJ) : $(LIBCUPSSRC)transcode.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)transcode.$(OBJ) : $(LIBCUPSSRC)transcode.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)transcode.$(OBJ) $(C_) $(LIBCUPSSRC)transcode.c -$(LIBCUPSOBJ)usersys.$(OBJ) : $(LIBCUPSSRC)usersys.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)usersys.$(OBJ) : $(LIBCUPSSRC)usersys.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)usersys.$(OBJ) $(C_) $(LIBCUPSSRC)usersys.c -$(LIBCUPSOBJ)ppd-cache.$(OBJ) : $(LIBCUPSSRC)ppd-cache.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)ppd-cache.$(OBJ) : $(LIBCUPSSRC)ppd-cache.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)ppd-cache.$(OBJ) $(C_) $(LIBCUPSSRC)ppd-cache.c -$(LIBCUPSOBJ)thread.$(OBJ) : $(LIBCUPSSRC)thread.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)thread.$(OBJ) : $(LIBCUPSSRC)thread.c $(LIBCUPS_DEPS) $(LCUPS_CC) $(LCUPSO_)thread.$(OBJ) $(C_) $(LIBCUPSSRC)thread.c -$(LIBCUPSOBJ)cups_util.$(OBJ) : $(LIBCUPSSRC)util.c $(LIBSCUPSHEADERS) +$(LIBCUPSOBJ)cups_util.$(OBJ) : $(LIBCUPSSRC)util.c $(LIBCUPS_DEPS) $(CP_) $(LIBCUPSSRC)util.c $(LIBCUPSGEN)cups_util.c $(LCUPS_CC) $(LCUPSO_)cups_util.$(OBJ) $(C_) $(LIBCUPSGEN)cups_util.c diff -Nru ghostscript-9.15+dfsg/base/ldf_jb2.mak ghostscript-9.16~dfsg~0/base/ldf_jb2.mak --- ghostscript-9.15+dfsg/base/ldf_jb2.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/ldf_jb2.mak 2015-03-30 08:21:24.000000000 +0000 @@ -222,15 +222,18 @@ ldf_jb2_HDRS=$(ldf_jb2_common_HDRS) $(ldf_jb2_compress_HDRS) # switch in the selected library .dev -$(LDF_JB2_GEN)ldf_jb2.dev : $(TOP_MAKEFILES) $(LDF_JB2_MAK) $(LDF_JB2_GEN)ldf_jb2_$(SHARE_JBIG2).dev +$(LDF_JB2_GEN)ldf_jb2.dev : $(TOP_MAKEFILES) $(LDF_JB2_MAK) $(LDF_JB2_GEN)ldf_jb2_$(SHARE_JBIG2).dev \ + $(MAKEDIRS) $(CP_) $(LDF_JB2_GEN)ldf_jb2_$(SHARE_JBIG2).dev $(LDF_JB2_GEN)ldf_jb2.dev # external link .dev -$(LDF_JB2_GEN)ldf_jb2_1.dev : $(TOP_MAKEFILES) $(LDF_JB2_MAK) $(ECHOGS_XE) +$(LDF_JB2_GEN)ldf_jb2_1.dev : $(TOP_MAKEFILES) $(LDF_JB2_MAK) $(ECHOGS_XE) \ + $(MAKEDIRS) $(SETMOD) $(LDF_JB2_GEN)ldf_jb2_1 -lib ldf_jb2 # compile our own .dev -$(LDF_JB2_GEN)ldf_jb2_0.dev : $(TOP_MAKEFILES) $(LDF_JB2_MAK) $(ECHOGS_XE) $(ldf_jb2_OBJS) +$(LDF_JB2_GEN)ldf_jb2_0.dev : $(TOP_MAKEFILES) $(LDF_JB2_MAK) $(ECHOGS_XE) $(ldf_jb2_OBJS) \ + $(MAKEDIRS) $(SETMOD) $(LDF_JB2_GEN)ldf_jb2_0 $(ldf_jb2_common_OBJS) $(ADDMOD) $(LDF_JB2_GEN)ldf_jb2_0 $(ldf_jb2_compress_OBJS) @@ -238,256 +241,256 @@ LDF_JB2_CC=$(CC_) $(I_)$(LDF_JB2I_) $(II)$(LDF_JB2_COMMON) $(II)$(LDF_JB2_COMPRESS)$(_I) $(JB2CF_) LDF_JB2_O=$(O_)$(LDF_JB2_OBJ) -LDF_JB2_DEP=$(AK) $(LDF_JB2_MAK) +LDF_JB2_DEP=$(AK) $(LDF_JB2_MAK) $(MAKEDIRS) # explicit rules for building each source file # for simplicity we have every source file depend on all headers -$(LDF_JB2_OBJ)jb2_adt_cache.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_cache.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_cache.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_cache.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_cache.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_cache.c -$(LDF_JB2_OBJ)jb2_adt_context_buffer.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_context_buffer.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_context_buffer.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_context_buffer.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_context_buffer.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_context_buffer.c -$(LDF_JB2_OBJ)jb2_adt_context_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_context_decoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_context_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_context_decoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_context_decoder.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_context_decoder.c -$(LDF_JB2_OBJ)jb2_adt_context_ref_buffer.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_context_ref_buffer.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_context_ref_buffer.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_context_ref_buffer.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_context_ref_buffer.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_context_ref_buffer.c -$(LDF_JB2_OBJ)jb2_adt_context_ref_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_context_ref_decoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_context_ref_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_context_ref_decoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_context_ref_decoder.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_context_ref_decoder.c -$(LDF_JB2_OBJ)jb2_adt_decoder_collective_bitmap.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_collective_bitmap.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_decoder_collective_bitmap.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_collective_bitmap.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_decoder_collective_bitmap.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_decoder_collective_bitmap.c -$(LDF_JB2_OBJ)jb2_adt_decoder_generic_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_generic_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_decoder_generic_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_generic_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_decoder_generic_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_decoder_generic_region.c -$(LDF_JB2_OBJ)jb2_adt_decoder_halftone_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_halftone_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_decoder_halftone_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_halftone_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_decoder_halftone_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_decoder_halftone_region.c -$(LDF_JB2_OBJ)jb2_adt_decoder_pattern_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_pattern_dict.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_decoder_pattern_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_pattern_dict.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_decoder_pattern_dict.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_decoder_pattern_dict.c -$(LDF_JB2_OBJ)jb2_adt_decoder_symbol_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_symbol_dict.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_decoder_symbol_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_symbol_dict.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_decoder_symbol_dict.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_decoder_symbol_dict.c -$(LDF_JB2_OBJ)jb2_adt_decoder_text_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_text_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_decoder_text_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_decoder_text_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_decoder_text_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_decoder_text_region.c -$(LDF_JB2_OBJ)jb2_adt_external_cache.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_external_cache.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_external_cache.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_external_cache.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_external_cache.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_external_cache.c -$(LDF_JB2_OBJ)jb2_adt_file.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_file.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_file.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_file.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_file.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_file.c -$(LDF_JB2_OBJ)jb2_adt_file_extras.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_file_extras.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_file_extras.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_file_extras.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_file_extras.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_file_extras.c -$(LDF_JB2_OBJ)jb2_adt_handle_document.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_handle_document.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_handle_document.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_handle_document.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_handle_document.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_handle_document.c -$(LDF_JB2_OBJ)jb2_adt_huffman_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_decoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_huffman_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_decoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_huffman_decoder.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_huffman_decoder.c -$(LDF_JB2_OBJ)jb2_adt_huffman_table.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_table.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_huffman_table.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_table.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_huffman_table.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_huffman_table.c -$(LDF_JB2_OBJ)jb2_adt_huffman_table_standard.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_table_standard.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_huffman_table_standard.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_table_standard.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_huffman_table_standard.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_huffman_table_standard.c -$(LDF_JB2_OBJ)jb2_adt_huffman_table_symbol.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_table_symbol.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_huffman_table_symbol.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_table_symbol.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_huffman_table_symbol.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_huffman_table_symbol.c -$(LDF_JB2_OBJ)jb2_adt_huffman_table_user_defined.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_table_user_defined.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_huffman_table_user_defined.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_table_user_defined.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_huffman_table_user_defined.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_huffman_table_user_defined.c -$(LDF_JB2_OBJ)jb2_adt_huffman_tree.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_tree.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_huffman_tree.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_huffman_tree.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_huffman_tree.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_huffman_tree.c -$(LDF_JB2_OBJ)jb2_adt_location.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_location.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_location.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_location.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_location.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_location.c -$(LDF_JB2_OBJ)jb2_adt_memory.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_memory.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_memory.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_memory.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_memory.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_memory.c -$(LDF_JB2_OBJ)jb2_adt_message.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_message.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_message.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_message.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_message.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_message.c -$(LDF_JB2_OBJ)jb2_adt_mmr_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_mmr_decoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_mmr_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_mmr_decoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_mmr_decoder.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_mmr_decoder.c -$(LDF_JB2_OBJ)jb2_adt_mmr_tables.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_mmr_tables.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_mmr_tables.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_mmr_tables.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_mmr_tables.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_mmr_tables.c -$(LDF_JB2_OBJ)jb2_adt_mq_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_mq_decoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_mq_decoder.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_mq_decoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_mq_decoder.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_mq_decoder.c -$(LDF_JB2_OBJ)jb2_adt_mq_state.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_mq_state.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_mq_state.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_mq_state.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_mq_state.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_mq_state.c -$(LDF_JB2_OBJ)jb2_adt_pattern_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_pattern_dict.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_pattern_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_pattern_dict.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_pattern_dict.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_pattern_dict.c -$(LDF_JB2_OBJ)jb2_adt_pdf_file.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_pdf_file.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_pdf_file.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_pdf_file.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_pdf_file.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_pdf_file.c -$(LDF_JB2_OBJ)jb2_adt_pdf_stream.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_pdf_stream.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_pdf_stream.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_pdf_stream.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_pdf_stream.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_pdf_stream.c -$(LDF_JB2_OBJ)jb2_adt_props_decompress.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_props_decompress.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_props_decompress.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_props_decompress.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_props_decompress.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_props_decompress.c -$(LDF_JB2_OBJ)jb2_adt_read_bit_buffer.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_read_bit_buffer.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_read_bit_buffer.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_read_bit_buffer.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_read_bit_buffer.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_read_bit_buffer.c -$(LDF_JB2_OBJ)jb2_adt_read_data.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_read_data.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_read_data.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_read_data.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_read_data.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_read_data.c -$(LDF_JB2_OBJ)jb2_adt_render_common.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_render_common.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_render_common.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_render_common.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_render_common.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_render_common.c -$(LDF_JB2_OBJ)jb2_adt_render_generic_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_render_generic_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_render_generic_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_render_generic_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_render_generic_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_render_generic_region.c -$(LDF_JB2_OBJ)jb2_adt_render_halftone_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_render_halftone_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_render_halftone_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_render_halftone_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_render_halftone_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_render_halftone_region.c -$(LDF_JB2_OBJ)jb2_adt_render_text_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_render_text_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_render_text_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_render_text_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_render_text_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_render_text_region.c -$(LDF_JB2_OBJ)jb2_adt_segment.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment.c -$(LDF_JB2_OBJ)jb2_adt_segment_array.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_array.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_array.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_array.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_array.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_array.c -$(LDF_JB2_OBJ)jb2_adt_segment_end_of_file.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_end_of_file.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_end_of_file.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_end_of_file.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_end_of_file.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_end_of_file.c -$(LDF_JB2_OBJ)jb2_adt_segment_end_of_page.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_end_of_page.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_end_of_page.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_end_of_page.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_end_of_page.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_end_of_page.c -$(LDF_JB2_OBJ)jb2_adt_segment_end_of_stripe.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_end_of_stripe.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_end_of_stripe.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_end_of_stripe.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_end_of_stripe.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_end_of_stripe.c -$(LDF_JB2_OBJ)jb2_adt_segment_generic_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_generic_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_generic_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_generic_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_generic_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_generic_region.c -$(LDF_JB2_OBJ)jb2_adt_segment_halftone_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_halftone_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_halftone_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_halftone_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_halftone_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_halftone_region.c -$(LDF_JB2_OBJ)jb2_adt_segment_page_info.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_page_info.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_page_info.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_page_info.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_page_info.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_page_info.c -$(LDF_JB2_OBJ)jb2_adt_segment_pattern_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_pattern_dict.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_pattern_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_pattern_dict.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_pattern_dict.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_pattern_dict.c -$(LDF_JB2_OBJ)jb2_adt_segment_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_region.c -$(LDF_JB2_OBJ)jb2_adt_segment_symbol_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_symbol_dict.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_symbol_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_symbol_dict.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_symbol_dict.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_symbol_dict.c -$(LDF_JB2_OBJ)jb2_adt_segment_table.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_table.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_table.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_table.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_table.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_table.c -$(LDF_JB2_OBJ)jb2_adt_segment_text_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_text_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_text_region.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_text_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_text_region.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_text_region.c -$(LDF_JB2_OBJ)jb2_adt_segment_types.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_types.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_segment_types.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_segment_types.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_segment_types.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_segment_types.c -$(LDF_JB2_OBJ)jb2_adt_symbol.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_symbol.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_symbol.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_symbol.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_symbol.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_symbol.c -$(LDF_JB2_OBJ)jb2_adt_symbol_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_symbol_dict.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_symbol_dict.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_symbol_dict.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_symbol_dict.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_symbol_dict.c -$(LDF_JB2_OBJ)jb2_adt_symbol_instance.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_symbol_instance.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_symbol_instance.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_symbol_instance.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_symbol_instance.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_symbol_instance.c -$(LDF_JB2_OBJ)jb2_adt_write_bits.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_write_bits.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_write_bits.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_write_bits.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_write_bits.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_write_bits.c -$(LDF_JB2_OBJ)jb2_adt_write_data.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_write_data.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_write_data.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_write_data.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_write_data.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_write_data.c -$(LDF_JB2_OBJ)jb2_adt_write_pdf.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_write_pdf.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_write_pdf.$(OBJ) : $(LDF_JB2_COMMON)jb2_adt_write_pdf.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_write_pdf.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_adt_write_pdf.c -$(LDF_JB2_OBJ)jb2_common.$(OBJ) : $(LDF_JB2_COMMON)jb2_common.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_common.$(OBJ) : $(LDF_JB2_COMMON)jb2_common.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_common.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_common.c -$(LDF_JB2_OBJ)jb2_license_dummy.$(OBJ) : $(LDF_JB2_COMMON)jb2_license_dummy.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_license_dummy.$(OBJ) : $(LDF_JB2_COMMON)jb2_license_dummy.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_license_dummy.$(OBJ) $(C_) $(LDF_JB2_COMMON)jb2_license_dummy.c -$(LDF_JB2_OBJ)jb2_adt_component.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_component.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_component.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_component.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_component.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_component.c -$(LDF_JB2_OBJ)jb2_adt_component_class.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_component_class.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_component_class.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_component_class.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_component_class.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_component_class.c -$(LDF_JB2_OBJ)jb2_adt_component_group.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_component_group.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_component_group.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_component_group.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_component_group.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_component_group.c -$(LDF_JB2_OBJ)jb2_adt_component_match.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_component_match.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_component_match.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_component_match.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_component_match.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_component_match.c -$(LDF_JB2_OBJ)jb2_adt_context_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_context_encoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_context_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_context_encoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_context_encoder.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_context_encoder.c -$(LDF_JB2_OBJ)jb2_adt_context_ref_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_context_ref_encoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_context_ref_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_context_ref_encoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_context_ref_encoder.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_context_ref_encoder.c -$(LDF_JB2_OBJ)jb2_adt_encoder_generic_region.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_encoder_generic_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_encoder_generic_region.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_encoder_generic_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_encoder_generic_region.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_encoder_generic_region.c -$(LDF_JB2_OBJ)jb2_adt_encoder_symbol_dict.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_encoder_symbol_dict.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_encoder_symbol_dict.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_encoder_symbol_dict.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_encoder_symbol_dict.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_encoder_symbol_dict.c -$(LDF_JB2_OBJ)jb2_adt_encoder_text_region.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_encoder_text_region.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_encoder_text_region.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_encoder_text_region.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_encoder_text_region.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_encoder_text_region.c -$(LDF_JB2_OBJ)jb2_adt_handle_compress.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_handle_compress.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_handle_compress.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_handle_compress.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_handle_compress.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_handle_compress.c -$(LDF_JB2_OBJ)jb2_adt_huffman_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_huffman_encoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_huffman_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_huffman_encoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_huffman_encoder.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_huffman_encoder.c -$(LDF_JB2_OBJ)jb2_adt_mmr_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_mmr_encoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_mmr_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_mmr_encoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_mmr_encoder.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_mmr_encoder.c -$(LDF_JB2_OBJ)jb2_adt_mq_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_mq_encoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_mq_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_mq_encoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_mq_encoder.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_mq_encoder.c -$(LDF_JB2_OBJ)jb2_adt_props_compress.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_props_compress.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_props_compress.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_props_compress.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_props_compress.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_props_compress.c -$(LDF_JB2_OBJ)jb2_adt_run_array.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_run_array.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_run_array.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_run_array.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_run_array.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_run_array.c -$(LDF_JB2_OBJ)jb2_adt_stack.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stack.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_stack.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stack.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_stack.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_stack.c -$(LDF_JB2_OBJ)jb2_adt_stripe_clean_up.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_clean_up.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_stripe_clean_up.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_clean_up.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_stripe_clean_up.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_stripe_clean_up.c -$(LDF_JB2_OBJ)jb2_adt_stripe_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_encoder.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_stripe_encoder.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_encoder.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_stripe_encoder.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_stripe_encoder.c -$(LDF_JB2_OBJ)jb2_adt_stripe_half_tone.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_half_tone.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_stripe_half_tone.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_half_tone.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_stripe_half_tone.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_stripe_half_tone.c -$(LDF_JB2_OBJ)jb2_adt_stripe_preprocessing.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_preprocessing.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_stripe_preprocessing.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_preprocessing.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_stripe_preprocessing.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_stripe_preprocessing.c -$(LDF_JB2_OBJ)jb2_adt_stripe_text.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_text.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_stripe_text.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_stripe_text.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_stripe_text.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_stripe_text.c -$(LDF_JB2_OBJ)jb2_adt_symbol_unify.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_symbol_unify.c $(LDF_JB2_DEP) $(ldf_jb2_HDRS) +$(LDF_JB2_OBJ)jb2_adt_symbol_unify.$(OBJ) : $(LDF_JB2_COMPRESS)jb2_adt_symbol_unify.c $(ldf_jb2_HDRS) $(LDF_JB2_DEP) $(LDF_JB2_CC) $(LDF_JB2_O)jb2_adt_symbol_unify.$(OBJ) $(C_) $(LDF_JB2_COMPRESS)jb2_adt_symbol_unify.c diff -Nru ghostscript-9.15+dfsg/base/lib.mak ghostscript-9.16~dfsg~0/base/lib.mak --- ghostscript-9.15+dfsg/base/lib.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/lib.mak 2015-03-30 08:21:24.000000000 +0000 @@ -125,6 +125,7 @@ time__h=$(GLSRC)time_.h $(std_h) $(gconfig__h) unistd__h=$(GLSRC)unistd_.h $(std_h) windows__h=$(GLSRC)windows_.h +assert__h=$(GLSRC)assert_.h # Out of order pipe__h=$(GLSRC)pipe_.h $(stdio__h) @@ -347,7 +348,7 @@ # We have to use a slightly different compilation approach in order to # get std.h included when compiling md5.c. md5_=$(GLOBJ)md5.$(OBJ) -$(GLOBJ)md5.$(OBJ) : $(GLSRC)md5.c $(AK) $(md5_h) $(std_h) $(MAKEDIRS) $(EXP)$(ECHOGS_XE) +$(GLOBJ)md5.$(OBJ) : $(GLSRC)md5.c $(AK) $(md5_h) $(std_h) $(EXP)$(ECHOGS_XE) $(MAKEDIRS) $(EXP)$(ECHOGS_XE) -w $(GLGEN)md5.h -x 23 include -x 2022 memory_.h -x 22 $(EXP)$(ECHOGS_XE) -a $(GLGEN)md5.h -+R $(GLSRC)md5.h $(CP_) $(GLSRC)md5.c $(GLGEN)md5.c @@ -538,6 +539,7 @@ $(gscolor_h) $(gscpm_h) $(gscsel_h) $(gsdevice_h) $(gsht_h) $(gsline_h) gscolorbuffer_h=$(GLSRC)gscolorbuffer.h gsicc_create_h=$(GLSRC)gsicc_create.h $(gscie_h) +gximdecode_h=$(GLSRC)gximdecode.h $(gx_h) $(gxfixed_h) $(gximage_h) $(gxsample_h) $(gxfrac_h) gzacpath_h=$(GLSRC)gzacpath.h $(gxcpath_h) gzcpath_h=$(GLSRC)gzcpath.h $(gxcpath_h) $(gzpath_h) @@ -983,7 +985,7 @@ $(GLOBJ)gsinit.$(OBJ) : $(GLSRC)gsinit.c $(AK) $(memory__h) $(stdio__h)\ $(gdebug_h) $(gp_h) $(gscdefs_h) $(gslib_h) $(gsmalloc_h) $(gsmemory_h)\ - $(gxfapi_h) $(MAKEDIRS) $(valgrind_h) + $(gxfapi_h) $(valgrind_h) $(MAKEDIRS) $(GLCC) $(GLO_)gsinit.$(OBJ) $(C_) $(GLSRC)gsinit.c $(GLOBJ)gsiodev.$(OBJ) : $(GLSRC)gsiodev.c $(AK) $(gx_h) $(gserrors_h)\ @@ -1057,7 +1059,7 @@ # We make gsiodevs a separate module so the PS interpreter can replace it. $(GLD)gsiodevs.dev : $(ECHOGS_XE) $(LIB_MAK) $(GLOBJ)gsiodevs.$(OBJ)\ - $(GLD)sfile.dev + $(GLD)sfile.dev $(MAKEDIRS) $(SETMOD) $(GLD)gsiodevs $(GLOBJ)gsiodevs.$(OBJ) $(ADDMOD) $(GLD)gsiodevs -include $(GLD)sfile $(ADDMOD) $(GLD)gsiodevs -iodev stdin stdout stderr @@ -1071,10 +1073,10 @@ ### Device support # PC display color mapping $(GLOBJ)gdevpccm.$(OBJ) : $(GLSRC)gdevpccm.c $(AK)\ - $(gx_h) $(gsmatrix_h) $(gxdevice_h) $(gdevpccm_h) + $(gx_h) $(gsmatrix_h) $(gxdevice_h) $(gdevpccm_h) $(MAKEDIRS) $(GLCC) $(GLO_)gdevpccm.$(OBJ) $(C_) $(GLSRC)gdevpccm.c -$(GLOBJ)ConvertUTF.$(OBJ) : $(GLSRC)ConvertUTF.c $(ConvertUTF_h) +$(GLOBJ)ConvertUTF.$(OBJ) : $(GLSRC)ConvertUTF.c $(ConvertUTF_h) $(MAKEDIRS) $(GLCC) $(GLO_)ConvertUTF.$(OBJ) $(C_) $(GLSRC)ConvertUTF.c ### Memory devices @@ -1156,10 +1158,10 @@ # the bboxutil.dev pseudo device to allow inclusion without putting # the bbox device on the list of devices. -$(GLD)bboxutil.dev : $(ECHOGS_XE) $(LIB_MAK) $(GLOBJ)gdevbbox.$(OBJ) +$(GLD)bboxutil.dev : $(ECHOGS_XE) $(LIB_MAK) $(GLOBJ)gdevbbox.$(OBJ) $(MAKEDIRS) $(SETMOD) $(GLD)bboxutil $(GLOBJ)gdevbbox.$(OBJ) -$(GLD)bbox.dev : $(ECHOGS_XE) $(LIB_MAK) $(GLOBJ)gdevbbox.$(OBJ) +$(GLD)bbox.dev : $(ECHOGS_XE) $(LIB_MAK) $(GLOBJ)gdevbbox.$(OBJ) $(MAKEDIRS) $(SETDEV2) $(GLD)bbox $(GLOBJ)gdevbbox.$(OBJ) $(GLOBJ)gdevbbox.$(OBJ) : $(GLSRC)gdevbbox.c $(AK) $(gx_h)\ @@ -1230,7 +1232,7 @@ # stub for UFST bridge support : -$(GLD)gxfapiu.dev : $(LIB_MAK) $(ECHOGS_XE) +$(GLD)gxfapiu.dev : $(LIB_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(GLD)gxfapiu wrfont_h=$(stdpre_h) $(GLSRC)wrfont.h @@ -1238,25 +1240,26 @@ write_t2_h=$(gxfapi_h) $(GLSRC)write_t2.h $(GLOBJ)write_t1.$(OBJ) : $(GLSRC)write_t1.c $(AK)\ - $(wrfont_h) $(write_t1_h) + $(wrfont_h) $(write_t1_h) $(MAKEDIRS) $(GLCC) $(FT_CFLAGS) $(GLO_)write_t1.$(OBJ) $(C_) $(GLSRC)write_t1.c $(GLOBJ)write_t2.$(OBJ) : $(GLSRC)write_t2.c $(AK)\ - $(wrfont_h) $(write_t2_h) $(gxfont_h) $(gxfont1_h) $(gzstate_h) $(stdpre_h) + $(wrfont_h) $(write_t2_h) $(gxfont_h) $(gxfont1_h) $(gzstate_h) $(stdpre_h) \ + $(MAKEDIRS) $(GLCC) $(FT_CFLAGS) $(GLO_)write_t2.$(OBJ) $(C_) $(GLSRC)write_t2.c $(GLOBJ)wrfont.$(OBJ) : $(GLSRC)wrfont.c $(AK)\ - $(wrfont_h) $(stdio__h) + $(wrfont_h) $(stdio__h) $(MAKEDIRS) $(GLCC) $(FT_CFLAGS) $(GLO_)wrfont.$(OBJ) $(C_) $(GLSRC)wrfont.c # stub for UFST bridge : -$(GLD)fapiu.dev : $(INT_MAK) $(ECHOGS_XE) +$(GLD)fapiu.dev : $(INT_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(GLD)fapiu # stub for Bitstream bridge (see fapi_bs.mak): -$(GLD)fapib.dev : $(INT_MAK) $(ECHOGS_XE) +$(GLD)fapib.dev : $(INT_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(GLD)fapib # FreeType bridge : @@ -1266,7 +1269,7 @@ $(GLD)fapif1.dev : $(INT_MAK) $(ECHOGS_XE) $(GLOBJ)fapi_ft.$(OBJ) \ $(GLOBJ)write_t1.$(OBJ) $(GLOBJ)write_t2.$(OBJ) $(GLOBJ)wrfont.$(OBJ) \ - $(GLD)freetype.dev + $(GLD)freetype.dev $(MAKEDIRS) $(SETMOD) $(GLD)fapif1 $(GLOBJ)fapi_ft.$(OBJ) $(GLOBJ)write_t1.$(OBJ) $(ADDMOD) $(GLD)fapif1 $(GLOBJ)write_t2.$(OBJ) $(GLOBJ)wrfont.$(OBJ) $(ADDMOD) $(GLD)fapif1 -include $(GLD)freetype @@ -1275,23 +1278,23 @@ $(GLOBJ)fapi_ft.$(OBJ) : $(GLSRC)fapi_ft.c $(AK)\ $(stdio__h) $(malloc__h) $(write_t1_h) $(write_t2_h) $(math__h) $(gserrors_h)\ $(gsmemory_h) $(gsmalloc_h) $(gxfixed_h) $(gdebug_h) $(gxbitmap_h) $(gsmchunk_h) \ - $(stream_h) $(gxiodev_h) $(gsfname_h) $(gxfapi_h) + $(stream_h) $(gxiodev_h) $(gsfname_h) $(gxfapi_h) $(MAKEDIRS) $(GLCC) $(FT_CFLAGS) $(GLO_)fapi_ft.$(OBJ) $(C_) $(GLSRC)fapi_ft.c # stub for FreeType bridge : -$(GLD)fapif0.dev : $(INT_MAK) $(ECHOGS_XE) +$(GLD)fapif0.dev : $(INT_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(GLD)fapif0 $(GLOBJ)gxfapi.$(OBJ) : $(GLSRC)gxfapi.c $(memory__h) $(gsmemory_h) $(gserrors_h) $(gxdevice_h) \ $(gxfont_h) $(gxfont1_h) $(gxpath_h) $(gxfcache_h) $(gxchrout_h) $(gximask_h) \ $(gscoord_h) $(gspaint_h) $(gspath_h) $(gzstate_h) $(gxfcid_h) $(gxchar_h) \ - $(gdebug_h) $(gsimage_h) $(gxfapi_h) $(gsbittab_h) + $(gdebug_h) $(gsimage_h) $(gxfapi_h) $(gsbittab_h) $(MAKEDIRS) $(GLCC) $(GLO_)gxfapi.$(OBJ) $(C_) $(GLSRC)gxfapi.c $(GLD)gxfapi.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLOBJ)gxfapi.$(OBJ) $(GLD)fapiu$(UFST_BRIDGE).dev \ - $(GLD)fapif$(FT_BRIDGE).dev $(GLD)fapib$(BITSTREAM_BRIDGE).dev + $(GLD)fapif$(FT_BRIDGE).dev $(GLD)fapib$(BITSTREAM_BRIDGE).dev $(MAKEDIRS) $(SETMOD) $(GLD)gxfapi $(GLOBJ)gxfapi.$(OBJ) $(ADDMOD) $(GLD)gxfapi -include $(GLD)fapiu$(UFST_BRIDGE) $(ADDMOD) $(GLD)gxfapi -include $(GLD)fapif$(FT_BRIDGE) @@ -1337,7 +1340,7 @@ LIB4x=$(GLOBJ)gxdcconv.$(OBJ) $(GLOBJ)gxdcolor.$(OBJ) $(GLOBJ)gxhldevc.$(OBJ) LIB5x=$(GLOBJ)gxfill.$(OBJ) $(GLOBJ)gxfdrop.$(OBJ) $(GLOBJ)gxht.$(OBJ) $(GLOBJ)gxhtbit.$(OBJ)\ $(GLOBJ)gxht_thresh.$(OBJ) -LIB6x=$(GLOBJ)gxidata.$(OBJ) $(GLOBJ)gxifast.$(OBJ) $(GLOBJ)gximage.$(OBJ) +LIB6x=$(GLOBJ)gxidata.$(OBJ) $(GLOBJ)gxifast.$(OBJ) $(GLOBJ)gximage.$(OBJ) $(GLOBJ)gximdecode.$(OBJ) LIB7x=$(GLOBJ)gximage1.$(OBJ) $(GLOBJ)gximono.$(OBJ) $(GLOBJ)gxipixel.$(OBJ) $(GLOBJ)gximask.$(OBJ) LIB8x=$(GLOBJ)gxi12bit.$(OBJ) $(GLOBJ)gxi16bit.$(OBJ) $(GLOBJ)gxiscale.$(OBJ) $(GLOBJ)gxpaint.$(OBJ) $(GLOBJ)gxpath.$(OBJ) $(GLOBJ)gxpath2.$(OBJ) LIB9x=$(GLOBJ)gxpcopy.$(OBJ) $(GLOBJ)gxpdash.$(OBJ) $(GLOBJ)gxpflat.$(OBJ) @@ -1357,7 +1360,7 @@ # but not in the link, to catch compilation problems. LIB_O=$(GLOBJ)gdevmpla.$(OBJ) $(GLOBJ)gdevmrun.$(OBJ) $(GLOBJ)gshtx.$(OBJ) $(GLOBJ)gsnogc.$(OBJ) $(GLD)libs.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIBs) $(LIB_O) $(GLD)gsiodevs.dev $(GLD)translib.dev \ - $(GLD)clist.dev $(GLD)gxfapi.dev $(TRIOGEN)trio.dev + $(GLD)clist.dev $(GLD)gxfapi.dev $(TRIOGEN)trio.dev $(MAKEDIRS) $(SETMOD) $(GLD)libs $(LIB0s) $(ADDMOD) $(GLD)libs $(LIB1s) $(ADDMOD) $(GLD)libs $(LIB2s) @@ -1381,7 +1384,7 @@ $(ADDMOD) $(GLD)libs $(TRIOGEN)trio $(ADDMOD) $(GLD)libs $(GLD)gxfapi $(ADDMOD) $(GLD)libs -init fapi -$(GLD)libx.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIBx) +$(GLD)libx.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIBx) $(MAKEDIRS) $(SETMOD) $(GLD)libx $(LIB1x) $(ADDMOD) $(GLD)libx $(LIB2x) $(ADDMOD) $(GLD)libx $(LIB3x) @@ -1396,7 +1399,7 @@ $(ADDMOD) $(GLD)libx -imageclass 1_simple 3_mono $(ADDMOD) $(GLD)libx -imagetype 1 mask1 -$(GLD)libd.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIBd) +$(GLD)libd.dev : $(LIB_MAK) $(ECHOGS_XE) $(LIBd) $(MAKEDIRS) $(SETMOD) $(GLD)libd $(LIB1d) $(ADDMOD) $(GLD)libd $(LIB2d) $(ADDMOD) $(GLD)libd $(LIB3d) @@ -1406,7 +1409,7 @@ $(GLD)libcore.dev : $(LIB_MAK) $(ECHOGS_XE)\ $(GLD)libs.dev $(GLD)libx.dev $(GLD)libd.dev\ - $(GLD)iscale.dev $(GLD)roplib.dev $(GLD)strdline.dev + $(GLD)iscale.dev $(GLD)roplib.dev $(GLD)strdline.dev $(MAKEDIRS) $(SETMOD) $(GLD)libcore $(ADDMOD) $(GLD)libcore -dev2 nullpage $(ADDMOD) $(GLD)libcore -include $(GLD)libs $(GLD)libx $(GLD)libd @@ -1423,7 +1426,7 @@ # Default, stream-based readline. strdline_=$(GLOBJ)gp_strdl.$(OBJ) -$(GLD)strdline.dev : $(LIB_MAK) $(ECHOGS_XE) $(strdline_) +$(GLD)strdline.dev : $(LIB_MAK) $(ECHOGS_XE) $(strdline_) $(MAKEDIRS) $(SETMOD) $(GLD)strdline $(strdline_) $(GLOBJ)gp_strdl.$(OBJ) : $(GLSRC)gp_strdl.c $(AK) $(std_h) $(gp_h)\ @@ -1437,7 +1440,7 @@ sfile_=$(GLOBJ)sfx$(FILE_IMPLEMENTATION).$(OBJ) $(GLOBJ)sfxcommon.$(OBJ)\ $(GLOBJ)stream.$(OBJ) -$(GLD)sfile.dev : $(LIB_MAK) $(ECHOGS_XE) $(sfile_) +$(GLD)sfile.dev : $(LIB_MAK) $(ECHOGS_XE) $(sfile_) $(MAKEDIRS) $(SETMOD) $(GLD)sfile $(sfile_) $(GLOBJ)sfxcommon.$(OBJ) : $(GLSRC)sfxcommon.c $(AK) $(stdio__h)\ @@ -1477,7 +1480,7 @@ # These are used by clists, some drivers, and Level 2 in general. cfe_=$(GLOBJ)scfe.$(OBJ) $(GLOBJ)scfetab.$(OBJ) $(GLOBJ)shc.$(OBJ) -$(GLD)cfe.dev : $(LIB_MAK) $(ECHOGS_XE) $(cfe_) +$(GLD)cfe.dev : $(LIB_MAK) $(ECHOGS_XE) $(cfe_) $(MAKEDIRS) $(SETMOD) $(GLD)cfe $(cfe_) $(GLOBJ)scfe.$(OBJ) : $(GLSRC)scfe.c $(AK) $(memory__h) $(stdio__h)\ @@ -1493,7 +1496,7 @@ $(GLCC) $(GLO_)shc.$(OBJ) $(C_) $(GLSRC)shc.c cfd_=$(GLOBJ)scfd.$(OBJ) $(GLOBJ)scfdtab.$(OBJ) -$(GLD)cfd.dev : $(LIB_MAK) $(ECHOGS_XE) $(cfd_) +$(GLD)cfd.dev : $(LIB_MAK) $(ECHOGS_XE) $(cfd_) $(MAKEDIRS) $(SETMOD) $(GLD)cfd $(cfd_) $(GLOBJ)scfd.$(OBJ) : $(GLSRC)scfd.c $(AK) $(memory__h) $(stdio__h)\ @@ -1534,7 +1537,7 @@ $(gserrors_h) $(sjpeg_h) $(sdct_h) $(strimpl_h) $(gsmchunk_h) $(MAKEDIRS) $(GLJCC) $(GLO_)sjpegc_0.$(OBJ) $(C_) $(GLSRC)sjpegc.c -$(GLOBJ)sjpegc.$(OBJ) : $(GLOBJ)sjpegc_$(SHARE_JPEG).$(OBJ) +$(GLOBJ)sjpegc.$(OBJ) : $(GLOBJ)sjpegc_$(SHARE_JPEG).$(OBJ) $(MAKEDIRS) $(CP_) $(GLOBJ)sjpegc_$(SHARE_JPEG).$(OBJ) $(GLOBJ)sjpegc.$(OBJ) # sdcparam is used by the filter operator and the PS/PDF writer. @@ -1548,7 +1551,8 @@ # Encoding (compression) sdcte_=$(sdctc_) $(GLOBJ)sdcte.$(OBJ) $(GLOBJ)sjpege.$(OBJ) -$(GLD)sdcte.dev : $(LIB_MAK) $(ECHOGS_XE) $(sdcte_) $(JGENDIR)$(D)jpege.dev +$(GLD)sdcte.dev : $(LIB_MAK) $(ECHOGS_XE) $(sdcte_) $(JGENDIR)$(D)jpege.dev \ + $(MAKEDIRS) $(SETMOD) $(GLD)sdcte $(sdcte_) $(ADDMOD) $(GLD)sdcte -include $(JGENDIR)$(D)jpege.dev @@ -1584,7 +1588,7 @@ # sdeparam is used by the filter operator and the PS/PDF writer. # It is not included automatically in sdcte. sdeparam_=$(GLOBJ)sdeparam.$(OBJ) $(GLOBJ)sdcparam.$(OBJ) -$(GLD)sdeparam.dev : $(LIB_MAK) $(ECHOGS_XE) $(sdeparam_) +$(GLD)sdeparam.dev : $(LIB_MAK) $(ECHOGS_XE) $(sdeparam_) $(MAKEDIRS) $(SETMOD) $(GLD)sdeparam $(sdeparam_) $(GLOBJ)sdeparam.$(OBJ) : $(GLSRC)sdeparam.c $(AK) $(memory__h)\ @@ -1596,7 +1600,8 @@ # Decoding (decompression) sdctd_=$(sdctc_) $(GLOBJ)sdctd.$(OBJ) $(GLOBJ)sjpegd.$(OBJ) -$(GLD)sdctd.dev : $(LIB_MAK) $(ECHOGS_XE) $(sdctd_) $(JGENDIR)$(D)jpegd.dev +$(GLD)sdctd.dev : $(LIB_MAK) $(ECHOGS_XE) $(sdctd_) $(JGENDIR)$(D)jpegd.dev \ + $(MAKEDIRS) $(SETMOD) $(GLD)sdctd $(sdctd_) $(ADDMOD) $(GLD)sdctd -include $(JGENDIR)$(D)jpegd.dev @@ -1633,7 +1638,7 @@ # sddparam is used by the filter operator. # It is not included automatically in sdctd. sddparam_=$(GLOBJ)sddparam.$(OBJ) $(GLOBJ)sdcparam.$(OBJ) -$(GLD)sddparam.dev : $(LIB_MAK) $(ECHOGS_XE) $(sddparam_) +$(GLD)sddparam.dev : $(LIB_MAK) $(ECHOGS_XE) $(sddparam_) $(MAKEDIRS) $(SETMOD) $(GLD)sddparam $(sddparam_) $(GLOBJ)sddparam.$(OBJ) : $(GLSRC)sddparam.c $(AK) $(std_h)\ @@ -1646,11 +1651,11 @@ # These are used by Level 2 in general. lzwe_=$(GLOBJ)slzwe.$(OBJ) $(GLOBJ)slzwc.$(OBJ) -$(GLD)lzwe.dev : $(LIB_MAK) $(ECHOGS_XE) $(lzwe_) +$(GLD)lzwe.dev : $(LIB_MAK) $(ECHOGS_XE) $(lzwe_) $(MAKEDIRS) $(SETMOD) $(GLD)lzwe $(lzwe_) # We need slzwe.dev as a synonym for lzwe.dev for BAND_LIST_STORAGE = memory. -$(GLD)slzwe.dev : $(GLD)lzwe.dev +$(GLD)slzwe.dev : $(GLD)lzwe.dev $(MAKEDIRS) $(CP_) $(GLD)lzwe.dev $(GLD)slzwe.dev $(GLOBJ)slzwe.$(OBJ) : $(GLSRC)slzwe.c $(AK) $(stdio__h) $(gdebug_h)\ @@ -1662,11 +1667,11 @@ $(GLCC) $(GLO_)slzwc.$(OBJ) $(C_) $(GLSRC)slzwc.c lzwd_=$(GLOBJ)slzwd.$(OBJ) $(GLOBJ)slzwc.$(OBJ) -$(GLD)lzwd.dev : $(LIB_MAK) $(ECHOGS_XE) $(lzwd_) +$(GLD)lzwd.dev : $(LIB_MAK) $(ECHOGS_XE) $(lzwd_) $(MAKEDIRS) $(SETMOD) $(GLD)lzwd $(lzwd_) # We need slzwd.dev as a synonym for lzwd.dev for BAND_LIST_STORAGE = memory. -$(GLD)slzwd.dev : $(GLD)lzwd.dev +$(GLD)slzwd.dev : $(GLD)lzwd.dev $(MAKEDIRS) $(CP_) $(GLD)lzwd.dev $(GLD)slzwd.dev $(GLOBJ)slzwd.$(OBJ) : $(GLSRC)slzwd.c $(AK) $(stdio__h) $(gdebug_h)\ @@ -1676,7 +1681,7 @@ # ---------------- MD5 digest filter ---------------- # smd5_=$(GLOBJ)smd5.$(OBJ) -$(GLD)smd5.dev : $(LIB_MAK) $(ECHOGS_XE) $(smd5_) $(md5_) +$(GLD)smd5.dev : $(LIB_MAK) $(ECHOGS_XE) $(smd5_) $(md5_) $(MAKEDIRS) $(SETMOD) $(GLD)smd5 $(smd5_) $(md5_) $(GLOBJ)smd5.$(OBJ) : $(GLSRC)smd5.c $(AK) $(memory__h)\ @@ -1687,7 +1692,8 @@ ssha2_h=$(GLSRC)ssha2.h $(sha2_h) ssha2_=$(GLOBJ)ssha2.$(OBJ) -$(GLD)ssha2.dev : $(LIB_MAK) $(ECHOGS_XE) $(ssha2_) $(sha2_) +$(GLD)ssha2.dev : $(LIB_MAK) $(ECHOGS_XE) $(ssha2_) $(sha2_) \ + $(MAKEDIRS) $(SETMOD) $(GLD)ssha2 $(ssha2_) $(sha2_) $(GLOBJ)ssha2.$(OBJ) : $(GLSRC)ssha2.c $(AK) $(memory__h)\ @@ -1697,7 +1703,7 @@ # -------------- Arcfour cipher filter --------------- # sarc4_=$(GLOBJ)sarc4.$(OBJ) -$(GLD)sarc4.dev : $(LIB_MAK) $(ECHOGS_XE) $(sarc4_) +$(GLD)sarc4.dev : $(LIB_MAK) $(ECHOGS_XE) $(sarc4_) $(MAKEDIRS) $(SETMOD) $(GLD)sarc4 $(sarc4_) $(GLOBJ)sarc4.$(OBJ) : $(GLSRC)sarc4.c $(AK) $(memory__h)\ @@ -1707,7 +1713,7 @@ # -------------- AES cipher filter --------------- # saes_=$(GLOBJ)saes.$(OBJ) -$(GLD)saes.dev : $(LIB_MAK) $(ECHOGS_XE) $(saes_) $(aes_) +$(GLD)saes.dev : $(LIB_MAK) $(ECHOGS_XE) $(saes_) $(aes_) $(MAKEDIRS) $(SETMOD) $(GLD)saes $(saes_) $(aes_) $(GLOBJ)saes.$(OBJ) : $(GLSRC)saes.c $(AK) $(memory__h)\ @@ -1716,14 +1722,15 @@ # ---------------- JBIG2 compression filter ---------------- # -$(GLD)sjbig2.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)sjbig2_$(JBIG2_LIB).dev +$(GLD)sjbig2.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)sjbig2_$(JBIG2_LIB).dev \ + $(MAKEDIRS) $(CP_) $(GLD)sjbig2_$(JBIG2_LIB).dev $(GLD)sjbig2.dev # jbig2dec version sjbig2_jbig2dec=$(GLOBJ)sjbig2.$(OBJ) $(GLD)sjbig2_jbig2dec.dev : $(LIB_MAK) $(ECHOGS_XE) \ - $(GLD)jbig2dec.dev $(sjbig2_jbig2dec) + $(GLD)jbig2dec.dev $(sjbig2_jbig2dec) $(MAKEDIRS) $(SETMOD) $(GLD)sjbig2_jbig2dec $(sjbig2_jbig2dec) $(ADDMOD) $(GLD)sjbig2_jbig2dec -include $(GLD)jbig2dec.dev @@ -1752,7 +1759,7 @@ # ---------------- JPEG 2000 compression filter ---------------- # -$(GLD)sjpx.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)sjpx_$(JPX_LIB).dev +$(GLD)sjpx.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)sjpx_$(JPX_LIB).dev $(MAKEDIRS) $(CP_) $(GLD)sjpx_$(JPX_LIB).dev $(GLD)sjpx.dev $(GLOBJ)sjpx.$(OBJ) : $(GLSRC)sjpx.c $(AK) \ @@ -1763,11 +1770,11 @@ # luratech version sjpx_luratech=$(GLOBJ)sjpx_luratech.$(OBJ) $(GLD)sjpx_luratech.dev : $(LIB_MAK) $(ECHOGS_XE) \ - $(GLD)lwf_jp2.dev $(sjpx_luratech) + $(GLD)lwf_jp2.dev $(sjpx_luratech) $(MAKEDIRS) $(SETMOD) $(GLD)sjpx_luratech $(sjpx_luratech) $(ADDMOD) $(GLD)sjpx_luratech -include $(GLD)lwf_jp2.dev -$(GLD)luratech_jp2.dev : $(TOP_MAKEFILES) $(LIB_MAK) $(ECHOGS_XE) +$(GLD)luratech_jp2.dev : $(TOP_MAKEFILES) $(LIB_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(GLD)luratech_jp2 $(GLD)liblwf_jp2.a $(GLOBJ)sjpx_luratech.$(OBJ) : $(GLSRC)sjpx_luratech.c $(AK) \ @@ -1779,7 +1786,7 @@ # openjpeg version sjpx_openjpeg=$(GLOBJ)sjpx_openjpeg.$(OBJ) $(GLD)sjpx_openjpeg.dev : $(LIB_MAK) $(ECHOGS_XE) \ - $(GLD)openjpeg.dev $(sjpx_openjpeg) + $(GLD)openjpeg.dev $(sjpx_openjpeg) $(MAKEDIRS) $(SETMOD) $(GLD)sjpx_openjpeg $(sjpx_openjpeg) $(ADDMOD) $(GLD)sjpx_openjpeg -include $(GLD)openjpeg.dev @@ -1793,7 +1800,7 @@ # The Predictor facility of the LZW and Flate filters uses these. pdiff_=$(GLOBJ)spdiff.$(OBJ) -$(GLD)pdiff.dev : $(LIB_MAK) $(ECHOGS_XE) $(pdiff_) +$(GLD)pdiff.dev : $(LIB_MAK) $(ECHOGS_XE) $(pdiff_) $(MAKEDIRS) $(SETMOD) $(GLD)pdiff $(pdiff_) $(GLOBJ)spdiff.$(OBJ) : $(GLSRC)spdiff.c $(AK) $(memory__h) $(stdio__h)\ @@ -1804,7 +1811,7 @@ # The Predictor facility of the LZW and Flate filters uses these. pngp_=$(GLOBJ)spngp.$(OBJ) -$(GLD)pngp.dev : $(LIB_MAK) $(ECHOGS_XE) $(pngp_) +$(GLD)pngp.dev : $(LIB_MAK) $(ECHOGS_XE) $(pngp_) $(MAKEDIRS) $(SETMOD) $(GLD)pngp $(pngp_) $(GLOBJ)spngp.$(OBJ) : $(GLSRC)spngp.c $(AK) $(memory__h)\ @@ -1815,7 +1822,7 @@ # These are used by clists and also by Level 2 in general. rle_=$(GLOBJ)srle.$(OBJ) -$(GLD)rle.dev : $(LIB_MAK) $(ECHOGS_XE) $(rle_) +$(GLD)rle.dev : $(LIB_MAK) $(ECHOGS_XE) $(rle_) $(MAKEDIRS) $(SETMOD) $(GLD)rle $(rle_) $(GLOBJ)srle.$(OBJ) : $(GLSRC)srle.c $(AK) $(stdio__h) $(memory__h)\ @@ -1823,7 +1830,7 @@ $(GLCC) $(GLO_)srle.$(OBJ) $(C_) $(GLSRC)srle.c rld_=$(GLOBJ)srld.$(OBJ) -$(GLD)rld.dev : $(LIB_MAK) $(ECHOGS_XE) $(rld_) +$(GLD)rld.dev : $(LIB_MAK) $(ECHOGS_XE) $(rld_) $(MAKEDIRS) $(SETMOD) $(GLD)rld $(rld_) $(GLOBJ)srld.$(OBJ) : $(GLSRC)srld.c $(AK) $(stdio__h) $(memory__h)\ @@ -1885,7 +1892,8 @@ $(CP_) $(GLOBJ)szlibc_$(SHARE_ZLIB).$(OBJ) $(GLOBJ)szlibc.$(OBJ) szlibe_=$(szlibc_) $(GLOBJ)szlibe.$(OBJ) -$(GLD)szlibe.dev : $(LIB_MAK) $(ECHOGS_XE) $(ZGENDIR)$(D)zlibe.dev $(szlibe_) +$(GLD)szlibe.dev : $(LIB_MAK) $(ECHOGS_XE) $(ZGENDIR)$(D)zlibe.dev $(szlibe_) \ + $(MAKEDIRS) $(SETMOD) $(GLD)szlibe $(szlibe_) $(ADDMOD) $(GLD)szlibe -include $(ZGENDIR)$(D)zlibe.dev @@ -1901,7 +1909,8 @@ $(CP_) $(GLOBJ)szlibe_$(SHARE_ZLIB).$(OBJ) $(GLOBJ)szlibe.$(OBJ) szlibd_=$(szlibc_) $(GLOBJ)szlibd.$(OBJ) -$(GLD)szlibd.dev : $(LIB_MAK) $(ECHOGS_XE) $(ZGENDIR)$(D)zlibd.dev $(szlibd_) +$(GLD)szlibd.dev : $(LIB_MAK) $(ECHOGS_XE) $(ZGENDIR)$(D)zlibd.dev $(szlibd_) \ + $(MAKEDIRS) $(SETMOD) $(GLD)szlibd $(szlibd_) $(ADDMOD) $(GLD)szlibd -include $(ZGENDIR)$(D)zlibd.dev @@ -1924,22 +1933,22 @@ $(gserrors_h) $(gsmatrix_h) $(gsparam_h) $(gsutil_h) $(gxclpage_h)\ $(gxclist_h) $(gxdevice_h) $(gxdevmem_h) $(gxrplane_h) $(gxclthrd_h) -page_=$(GLOBJ)gdevprn.$(OBJ) $(downscale_) -$(GLD)page.dev : $(LIB_MAK) $(ECHOGS_XE) $(page_) +page_=$(GLOBJ)gdevprn.$(OBJ) $(GLOBJ)gdevppla.$(OBJ) $(downscale_) +$(GLD)page.dev : $(LIB_MAK) $(ECHOGS_XE) $(page_) $(MAKEDIRS) $(SETMOD) $(GLD)page $(page_) $(ADDMOD) $(GLD)page -include $(GLD)clist $(GLOBJ)gdevprn.$(OBJ) : $(GLSRC)gdevprn.c $(ctype__h)\ $(gdevprn_h) $(gp_h) $(gsdevice_h) $(gsfname_h) $(gsparam_h)\ $(gxclio_h) $(gxgetbit_h) $(gdevplnx_h) $(gstrans_h) \ - $(gxdownscale_h) $(gdevdevn_h) $(gxdevsop_h) + $(gxdownscale_h) $(gdevdevn_h) $(gxdevsop_h) $(MAKEDIRS) $(GLCC) $(GLO_)gdevprn.$(OBJ) $(C_) $(GLSRC)gdevprn.c # Planar page devices gdevppla_h=$(GLSRC)gdevppla.h $(GLOBJ)gdevppla.$(OBJ) : $(GLSRC)gdevppla.c\ - $(gdevmpla_h) $(gdevppla_h) $(gdevprn_h) $(gxdevsop_h) + $(gdevmpla_h) $(gdevppla_h) $(gdevprn_h) $(gxdevsop_h) $(MAKEDIRS) $(GLCC) $(GLO_)gdevppla.$(OBJ) $(C_) $(GLSRC)gdevppla.c # ---------------- Masked images ---------------- # @@ -1969,7 +1978,7 @@ $(GLCC) $(GLO_)gximage4.$(OBJ) $(C_) $(GLSRC)gximage4.c imasklib_=$(GLOBJ)gxclipm.$(OBJ) $(GLOBJ)gximage3.$(OBJ) $(GLOBJ)gximage4.$(OBJ) $(GLOBJ)gxmclip.$(OBJ) -$(GLD)imasklib.dev : $(LIB_MAK) $(ECHOGS_XE) $(imasklib_) +$(GLD)imasklib.dev : $(LIB_MAK) $(ECHOGS_XE) $(imasklib_) $(MAKEDIRS) $(SETMOD) $(GLD)imasklib $(imasklib_) $(ADDMOD) $(GLD)imasklib -imagetype 3 4 @@ -1996,7 +2005,8 @@ $(GLD)clist.dev : $(LIB_MAK) $(ECHOGS_XE) $(clist_)\ $(GLD)cl$(BAND_LIST_STORAGE).dev $(GLD)clmemory.dev $(GLD)$(SYNC).dev\ - $(GLD)cfe.dev $(GLD)cfd.dev $(GLD)rle.dev $(GLD)rld.dev $(GLD)psl2cs.dev + $(GLD)cfe.dev $(GLD)cfd.dev $(GLD)rle.dev $(GLD)rld.dev $(GLD)psl2cs.dev \ + $(MAKEDIRS) $(SETMOD) $(GLD)clist $(clbase1_) $(ADDMOD) $(GLD)clist -obj $(clbase2_) $(ADDMOD) $(GLD)clist -obj $(clbase3_) @@ -2060,8 +2070,8 @@ $(gxdevice_h) $(gxdevmem_h) $(gxfmap_h) $(gxiparam_h) $(gxpath_h)\ $(sisparam_h) $(stream_h) $(strimpl_h) $(gxcomp_h) $(gsserial_h)\ $(gxdhtserial_h) $(gsptype1_h) $(gsicc_manage_h) $(gsicc_cache_h)\ - $(gxdevsop_h) $(gscindex_h) $(gsicc_cms_h) $(gxsample_h)\ - $(gximage_h) $(gxfrac_h) $(MAKEDIRS) + $(gxdevsop_h) $(gscindex_h) $(gsicc_cms_h) $(gximdecode_h)\ + $(MAKEDIRS) $(GLCC) $(GLO_)gxclimag.$(OBJ) $(C_) $(GLSRC)gxclimag.c $(GLOBJ)gxclpath.$(OBJ) : $(GLSRC)gxclpath.c $(AK) $(gx_h)\ @@ -2086,18 +2096,20 @@ # Implement band lists on files. clfile_=$(GLOBJ)gxclfile.$(OBJ) -$(GLD)clfile.dev : $(LIB_MAK) $(ECHOGS_XE) $(clfile_) +$(GLD)clfile.dev : $(LIB_MAK) $(ECHOGS_XE) $(clfile_) $(MAKEDIRS) $(SETMOD) $(GLD)clfile $(clfile_) $(ADDMOD) $(GLD)clfile -init gxclfile $(GLOBJ)gxclfile.$(OBJ) : $(GLSRC)gxclfile.c $(stdio__h) $(string__h)\ - $(gp_h) $(gsmemory_h) $(gserrors_h) $(gxclio_h) $(unistd__h) $(valgrind_h) + $(gp_h) $(gsmemory_h) $(gserrors_h) $(gxclio_h) $(unistd__h) $(valgrind_h) \ + $(MAKEDIRS) $(GLCC) $(GLO_)gxclfile.$(OBJ) $(C_) $(GLSRC)gxclfile.c # Implement band lists in memory (RAM). clmemory_=$(GLOBJ)gxclmem.$(OBJ) $(GLOBJ)gxcl$(BAND_LIST_COMPRESSOR).$(OBJ) -$(GLD)clmemory.dev : $(LIB_MAK) $(ECHOGS_XE) $(clmemory_) $(GLD)s$(BAND_LIST_COMPRESSOR)e.dev $(GLD)s$(BAND_LIST_COMPRESSOR)d.dev +$(GLD)clmemory.dev : $(LIB_MAK) $(ECHOGS_XE) $(clmemory_) $(GLD)s$(BAND_LIST_COMPRESSOR)e.dev \ + $(GLD)s$(BAND_LIST_COMPRESSOR)d.dev $(MAKEDIRS) $(SETMOD) $(GLD)clmemory $(clmemory_) $(ADDMOD) $(GLD)clmemory -include $(GLD)s$(BAND_LIST_COMPRESSOR)e $(ADDMOD) $(GLD)clmemory -include $(GLD)s$(BAND_LIST_COMPRESSOR)d @@ -2106,7 +2118,7 @@ gxclmem_h=$(GLSRC)gxclmem.h $(gxclio_h) $(strimpl_h) $(GLOBJ)gxclmem.$(OBJ) : $(GLSRC)gxclmem.c $(AK) $(gx_h) $(gserrors_h)\ - $(LIB_MAK) $(memory__h) $(gxclmem_h) $(gssprintf_h) $(MAKEDIRS) $(valgrind_h) + $(LIB_MAK) $(memory__h) $(gxclmem_h) $(gssprintf_h) $(valgrind_h) $(MAKEDIRS) $(GLCC) $(GLO_)gxclmem.$(OBJ) $(C_) $(GLSRC)gxclmem.c # Implement the compression method for RAM-based band lists. @@ -2142,7 +2154,7 @@ vector_=$(GLOBJ)gdevvec.$(OBJ) $(GLD)vector.dev : $(LIB_MAK) $(ECHOGS_XE) $(vector_)\ - $(GLD)bboxutil.dev $(GLD)sfile.dev + $(GLD)bboxutil.dev $(GLD)sfile.dev $(MAKEDIRS) $(SETMOD) $(GLD)vector $(vector_) $(ADDMOD) $(GLD)vector -include $(GLD)bboxutil $(GLD)sfile @@ -2156,7 +2168,7 @@ # ---------------- Image scaling filters ---------------- # iscale_=$(GLOBJ)siinterp.$(OBJ) $(GLOBJ)siscale.$(OBJ) $(GLOBJ)sidscale.$(OBJ) -$(GLD)iscale.dev : $(LIB_MAK) $(ECHOGS_XE) $(iscale_) +$(GLD)iscale.dev : $(LIB_MAK) $(ECHOGS_XE) $(iscale_) $(MAKEDIRS) $(SETMOD) $(GLD)iscale $(iscale_) $(GLOBJ)siinterp.$(OBJ) : $(GLSRC)siinterp.c $(AK)\ @@ -2177,7 +2189,7 @@ # -------------- imagemask scaling filter --------------- # simscale_=$(GLOBJ)simscale.$(OBJ) -$(GLD)simscale.dev : $(LIB_MAK) $(ECHOGS_XE) $(simscale_) +$(GLD)simscale.dev : $(LIB_MAK) $(ECHOGS_XE) $(simscale_) $(MAKEDIRS) $(SETMOD) $(GLD)simscale $(simscale_) $(GLOBJ)simscale.$(OBJ) : $(GLSRC)simscale.c $(AK) $(memory__h)\ @@ -2191,7 +2203,7 @@ gshtx_h=$(GLSRC)gshtx.h $(gsht1_h) $(gsmemory_h) $(gxtmap_h) $(gscspace_h) htxlib_=$(GLOBJ)gshtx.$(OBJ) -$(GLD)htxlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(htxlib_) +$(GLD)htxlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(htxlib_) $(MAKEDIRS) $(SETMOD) $(GLD)htxlib $(htxlib_) $(GLOBJ)gshtx.$(OBJ) : $(GLSRC)gshtx.c $(AK) $(gx_h) $(gserrors_h)\ @@ -2205,7 +2217,7 @@ roplib2_=$(GLOBJ)gdevmr1.$(OBJ) $(GLOBJ)gdevmr2n.$(OBJ) $(GLOBJ)gdevmr8n.$(OBJ) roplib3_=$(GLOBJ)gdevrops.$(OBJ) $(GLOBJ)gsrop.$(OBJ) $(GLOBJ)gsroptab.$(OBJ) roplib_=$(roplib1_) $(roplib2_) $(roplib3_) -$(GLD)roplib.dev : $(LIB_MAK) $(ECHOGS_XE) $(roplib_) +$(GLD)roplib.dev : $(LIB_MAK) $(ECHOGS_XE) $(roplib_) $(MAKEDIRS) $(SETMOD) $(GLD)roplib $(roplib1_) $(ADDMOD) $(GLD)roplib $(roplib2_) $(ADDMOD) $(GLD)roplib $(roplib3_) @@ -2251,7 +2263,7 @@ gsroprun8_h=$(GLSRC)gsroprun8.h gsroprun24_h=$(GLSRC)gsroprun24.h $(GLOBJ)gsroprun.$(OBJ) : $(GLSRC)gsroprun.c $(std_h) $(stdpre_h) $(gsropt_h)\ - $(gsroprun1_h) $(gsroprun8_h) $(gsroprun24_h) $(gp_h) $(arch_h) + $(gsroprun1_h) $(gsroprun8_h) $(gsroprun24_h) $(gp_h) $(arch_h) $(MAKEDIRS) $(GLCC) $(GLO_)gsroprun.$(OBJ) $(C_) $(GLSRC)gsroprun.c # ---------------- Async rendering ---------------- # @@ -2261,7 +2273,7 @@ async_=$(GLOBJ)gdevprna.$(OBJ) $(GLOBJ)gxpageq.$(OBJ) $(GLOBJ)gsmemlok.$(OBJ) async_inc=$(GLD)clist.dev $(GLD)gsnogc.dev $(GLD)$(SYNC).dev -$(GLD)async.dev : $(LIB_MAK) $(ECHOGS_XE) $(async_) $(async_inc) +$(GLD)async.dev : $(LIB_MAK) $(ECHOGS_XE) $(async_) $(async_inc) $(MAKEDIRS) $(SETMOD) $(GLD)async $(async_) $(ADDMOD) $(GLD)async -include $(async_inc) @@ -2285,7 +2297,7 @@ $(GLOBJ)ttinterp.$(OBJ) $(GLOBJ)ttload.$(OBJ) $(GLOBJ)ttobjs.$(OBJ) \ $(GLOBJ)gxttfb.$(OBJ) $(GLOBJ)gzspotan.$(OBJ) -$(GLD)ttflib.dev : $(LIB_MAK) $(ECHOGS_XE) $(ttflib_) +$(GLD)ttflib.dev : $(LIB_MAK) $(ECHOGS_XE) $(ttflib_) $(MAKEDIRS) $(SETMOD) $(GLD)ttflib $(ttflib_) # "gxfont42_h=$(GLSRC)gxfont42.h" already defined above @@ -2370,7 +2382,8 @@ cidlib_=$(GLOBJ)gsfcid.$(OBJ) $(GLOBJ)gsfcid2.$(OBJ) # cidlib requires ttflib for CIDFontType 2 fonts. -$(GLD)cidlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cidlib_) $(GLD)ttflib.dev +$(GLD)cidlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cidlib_) $(GLD)ttflib.dev \ + $(MAKEDIRS) $(SETMOD) $(GLD)cidlib $(cidlib_) $(ADDMOD) $(GLD)cidlib -include $(GLD)ttflib @@ -2384,7 +2397,8 @@ $(GLCC) $(GLO_)gsfcid2.$(OBJ) $(C_) $(GLSRC)gsfcid2.c cmaplib_=$(GLOBJ)gsfcmap.$(OBJ) $(GLOBJ)gsfcmap1.$(OBJ) -$(GLD)cmaplib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cmaplib_) $(GLD)cidlib.dev +$(GLD)cmaplib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cmaplib_) $(GLD)cidlib.dev \ + $(MAKEDIRS) $(SETMOD) $(GLD)cmaplib $(cmaplib_) $(ADDMOD) $(GLD)cmaplib -include $(GLD)cidlib @@ -2398,7 +2412,8 @@ $(GLCC) $(GLO_)gsfcmap1.$(OBJ) $(C_) $(GLSRC)gsfcmap1.c psf0lib_=$(GLOBJ)gschar0.$(OBJ) $(GLOBJ)gsfont0.$(OBJ) -$(GLD)psf0lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)cmaplib.dev $(psf0lib_) +$(GLD)psf0lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(GLD)cmaplib.dev $(psf0lib_) \ + $(MAKEDIRS) $(SETMOD) $(GLD)psf0lib $(psf0lib_) $(ADDMOD) $(GLD)psf0lib -include $(GLD)cmaplib @@ -2436,7 +2451,7 @@ $(gsimage_h) $(gsiparm4_h) $(gspath_h) $(gsrop_h) $(gsstruct_h) $(gsutil_h)\ $(gxarith_h) $(gxcolor2_h) $(gxcoord_h) $(gxclip2_h) $(gxcspace_h)\ $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxfixed_h) $(gxmatrix_h)\ - $(gxpath_h) $(gxpcolor_h) $(gzstate_h) $(stream_h) $(MAKEDIRS) + $(gxpath_h) $(gxpcolor_h) $(gzstate_h) $(stream_h) $(gsovrc_h) $(MAKEDIRS) $(GLCC) $(GLO_)gspcolor.$(OBJ) $(C_) $(GLSRC)gspcolor.c $(GLOBJ)gsptype1.$(OBJ) : $(GLSRC)gsptype1.c $(AK)\ @@ -2503,7 +2518,7 @@ # Note that seexec is not needed for rasterizing Type 1/2/4 fonts, # only for reading or writing them. seexec_=$(GLOBJ)seexec.$(OBJ) $(GLOBJ)gscrypt1.$(OBJ) -$(GLD)seexec.dev : $(LIB_MAK) $(ECHOGS_XE) $(seexec_) +$(GLD)seexec.dev : $(LIB_MAK) $(ECHOGS_XE) $(seexec_) $(MAKEDIRS) $(SETMOD) $(GLD)seexec $(seexec_) $(GLOBJ)seexec.$(OBJ) : $(GLSRC)seexec.c $(AK) $(stdio__h)\ @@ -2517,7 +2532,8 @@ # Type 1 charstrings psf1lib_=$(GLOBJ)gstype1.$(OBJ) -$(GLD)psf1lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(psf1lib_) $(type1lib_) +$(GLD)psf1lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(psf1lib_) $(type1lib_) \ + $(MAKEDIRS) $(SETMOD) $(GLD)psf1lib $(psf1lib_) $(ADDMOD) $(GLD)psf1lib $(type1lib_) @@ -2531,7 +2547,8 @@ # Type 2 charstrings psf2lib_=$(GLOBJ)gstype2.$(OBJ) -$(GLD)psf2lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(psf2lib_) $(type1lib_) +$(GLD)psf2lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(psf2lib_) $(type1lib_) \ + $(MAKEDIRS) $(SETMOD) $(GLD)psf2lib $(psf2lib_) $(ADDMOD) $(GLD)psf2lib $(type1lib_) @@ -2545,7 +2562,7 @@ # -------- Level 1 color extensions (CMYK color and colorimage) -------- # cmyklib_=$(GLOBJ)gscolor1.$(OBJ) $(GLOBJ)gsht1.$(OBJ) -$(GLD)cmyklib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cmyklib_) +$(GLD)cmyklib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cmyklib_) $(MAKEDIRS) $(SETMOD) $(GLD)cmyklib $(cmyklib_) $(GLOBJ)gscolor1.$(OBJ) : $(GLSRC)gscolor1.c $(AK) $(gx_h)\ @@ -2560,7 +2577,7 @@ $(GLCC) $(GLO_)gsht1.$(OBJ) $(C_) $(GLSRC)gsht1.c colimlib_=$(GLOBJ)gxicolor.$(OBJ) -$(GLD)colimlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(colimlib_) +$(GLD)colimlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(colimlib_) $(MAKEDIRS) $(SETMOD) $(GLD)colimlib $(colimlib_) $(ADDMOD) $(GLD)colimlib -imageclass 4_color @@ -2577,7 +2594,7 @@ # ---- Level 1 path miscellany (arcs, pathbbox, path enumeration) ---- # path1lib_=$(GLOBJ)gspath1.$(OBJ) -$(GLD)path1lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(path1lib_) +$(GLD)path1lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(path1lib_) $(MAKEDIRS) $(SETMOD) $(GLD)path1lib $(path1lib_) $(GLOBJ)gspath1.$(OBJ) : $(GLSRC)gspath1.c $(AK) $(gx_h) $(gserrors_h)\ @@ -2589,7 +2606,7 @@ # --------------- Level 2 color space and color image support --------------- # psl2cs_=$(GLOBJ)gscolor2.$(OBJ) -$(GLD)psl2cs.dev : $(LIB_MAK) $(ECHOGS_XE) $(psl2cs_) +$(GLD)psl2cs.dev : $(LIB_MAK) $(ECHOGS_XE) $(psl2cs_) $(MAKEDIRS) $(SETMOD) $(GLD)psl2cs $(psl2cs_) $(GLOBJ)gscolor2.$(OBJ) : $(GLSRC)gscolor2.c $(AK) $(gx_h)\ @@ -2600,7 +2617,7 @@ $(GLCC) $(GLO_)gscolor2.$(OBJ) $(C_) $(GLSRC)gscolor2.c $(GLD)psl2lib.dev : $(LIB_MAK) $(ECHOGS_XE) \ - $(GLD)colimlib.dev $(GLD)psl2cs.dev + $(GLD)colimlib.dev $(GLD)psl2cs.dev $(MAKEDIRS) $(SETMOD) $(GLD)psl2lib -include $(GLD)colimlib $(GLD)psl2cs $(ADDMOD) $(GLD)psl2lib -imageclass 2_fracs @@ -2617,7 +2634,7 @@ # ---------------- Display Postscript / Level 2 support ---------------- # dps2lib_=$(GLOBJ)gsdps1.$(OBJ) -$(GLD)dps2lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(dps2lib_) +$(GLD)dps2lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(dps2lib_) $(MAKEDIRS) $(SETMOD) $(GLD)dps2lib $(dps2lib_) $(GLOBJ)gsdps1.$(OBJ) : $(GLSRC)gsdps1.c $(AK) $(gx_h) $(gserrors_h)\ @@ -2637,7 +2654,7 @@ # Generic support, and FunctionType 0. funclib_=$(GLOBJ)gsdsrc.$(OBJ) $(GLOBJ)gsfunc.$(OBJ) $(GLOBJ)gsfunc0.$(OBJ) -$(GLD)funclib.dev : $(LIB_MAK) $(ECHOGS_XE) $(funclib_) +$(GLD)funclib.dev : $(LIB_MAK) $(ECHOGS_XE) $(funclib_) $(MAKEDIRS) $(SETMOD) $(GLD)funclib $(funclib_) $(GLOBJ)gsdsrc.$(OBJ) : $(GLSRC)gsdsrc.c $(AK) $(gx_h) $(memory__h)\ @@ -2660,7 +2677,8 @@ gsfunc4_h=$(GLSRC)gsfunc4.h $(gsfunc_h) func4lib_=$(GLOBJ)gsfunc4.$(OBJ) $(GLOBJ)spprint.$(OBJ) -$(GLD)func4lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(func4lib_) $(GLD)funclib.dev +$(GLD)func4lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(func4lib_) $(GLD)funclib.dev \ + $(MAKEDIRS) $(SETMOD) $(GLD)func4lib $(func4lib_) $(ADDMOD) $(GLD)func4lib -include $(GLD)funclib @@ -2675,7 +2693,8 @@ gscpixel_h=$(GLSRC)gscpixel.h cspixlib_=$(GLOBJ)gscpixel.$(OBJ) -$(GLD)cspixlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cspixlib_) +$(GLD)cspixlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cspixlib_) \ + $(MAKEDIRS) $(SETMOD) $(GLD)cspixlib $(cspixlib_) $(GLOBJ)gscpixel.$(OBJ) : $(GLSRC)gscpixel.c $(AK) $(gx_h)\ @@ -2689,7 +2708,7 @@ cielib1_=$(GLOBJ)gscie.$(OBJ) $(GLOBJ)gsciemap.$(OBJ) $(GLOBJ)gscscie.$(OBJ) cielib2_=$(GLOBJ)gscrd.$(OBJ) $(GLOBJ)gscrdp.$(OBJ) $(GLOBJ)gxctable.$(OBJ) cielib_=$(cielib1_) $(cielib2_) -$(GLD)cielib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cielib_) +$(GLD)cielib.dev : $(LIB_MAK) $(ECHOGS_XE) $(cielib_) $(MAKEDIRS) $(SETMOD) $(GLD)cielib $(cielib1_) $(ADDMOD) $(GLD)cielib $(cielib2_) @@ -2738,7 +2757,7 @@ sicclib_=$(GLOBJ)gsicc.$(OBJ) $(GLD)sicclib.dev : $(LIB_MAK) $(ECHOGS_XE) $(sicclib_) $(gsicc_)\ - $(GLD)cielib.dev $(LCMSGENDIR)$(D)$(WHICH_CMS).dev + $(GLD)cielib.dev $(LCMSGENDIR)$(D)$(WHICH_CMS).dev $(MAKEDIRS) $(SETMOD) $(GLD)sicclib $(sicclib_) $(ADDMOD) $(GLD)sicclib $(gsicc_) $(ADDMOD) $(GLD)sicclib -include $(LCMSGENDIR)$(D)$(WHICH_CMS).dev @@ -2796,27 +2815,29 @@ $(GLCC) $(GLO_)gsicc_profilecache.$(OBJ) $(C_) $(GLSRC)gsicc_profilecache.c $(GLOBJ)gsicc_lcms_1.$(OBJ) : $(GLSRC)gsicc_lcms.c\ - $(gsicc_cms_h) $(gslibctx_h) $(gserrors_h) + $(gsicc_cms_h) $(gslibctx_h) $(gserrors_h) $(MAKEDIRS) $(GLLCMSCC) $(GLO_)gsicc_lcms_1.$(OBJ) $(C_) $(GLSRC)gsicc_lcms.c $(GLOBJ)gsicc_lcms_0.$(OBJ) : $(GLSRC)gsicc_lcms.c\ - $(gsicc_cms_h) $(lcms_h) $(gslibctx_h) $(gserrors_h) + $(gsicc_cms_h) $(lcms_h) $(gslibctx_h) $(gserrors_h) $(MAKEDIRS) $(GLLCMSCC) $(GLO_)gsicc_lcms_0.$(OBJ) $(C_) $(GLSRC)gsicc_lcms.c -$(GLOBJ)gsicc_lcms.$(OBJ) : $(GLOBJ)gsicc_lcms_$(SHARE_LCMS).$(OBJ) $(gp_h) +$(GLOBJ)gsicc_lcms.$(OBJ) : $(GLOBJ)gsicc_lcms_$(SHARE_LCMS).$(OBJ) $(gp_h) \ + $(MAKEDIRS) $(CP_) $(GLOBJ)gsicc_lcms_$(SHARE_LCMS).$(OBJ) $(GLOBJ)gsicc_lcms.$(OBJ) $(GLOBJ)gsicc_lcms2_1.$(OBJ) : $(GLSRC)gsicc_lcms2.c\ - $(memory__h) $(gsicc_cms_h) $(gslibctx_h) $(gserrors_h) + $(memory__h) $(gsicc_cms_h) $(gslibctx_h) $(gserrors_h) $(MAKEDIRS) $(GLLCMS2CC) $(GLO_)gsicc_lcms2_1.$(OBJ) $(C_) $(GLSRC)gsicc_lcms2.c $(GLOBJ)gsicc_lcms2_0.$(OBJ) : $(GLSRC)gsicc_lcms2.c\ - $(memory__h) $(gsicc_cms_h) $(lcms2_h) $(gslibctx_h) $(lcms2_plugin_h) $(gserrors_h) + $(memory__h) $(gsicc_cms_h) $(lcms2_h) $(gslibctx_h) $(lcms2_plugin_h) $(gserrors_h) \ + $(MAKEDIRS) $(GLLCMS2CC) $(GLO_)gsicc_lcms2_0.$(OBJ) $(C_) $(GLSRC)gsicc_lcms2.c $(GLOBJ)gsicc_lcms2.$(OBJ) : $(GLOBJ)gsicc_lcms2_$(SHARE_LCMS).$(OBJ) $(gp_h) \ - $(gxsync_h) + $(gxsync_h) $(MAKEDIRS) $(CP_) $(GLOBJ)gsicc_lcms2_$(SHARE_LCMS).$(OBJ) $(GLOBJ)gsicc_lcms2.$(OBJ) # Note that gsicc_create requires compile with lcms to obtain icc34.h @@ -2845,7 +2866,7 @@ # ---------------- Separation colors ---------------- # seprlib_=$(GLOBJ)gscsepr.$(OBJ) $(GLOBJ)gsnamecl.$(OBJ) $(GLOBJ)gsncdummy.$(OBJ) -$(GLD)seprlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(seprlib_) +$(GLD)seprlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(seprlib_) $(MAKEDIRS) $(SETMOD) $(GLD)seprlib $(seprlib_) $(GLOBJ)gscsepr.$(OBJ) : $(GLSRC)gscsepr.c $(AK) $(gx_h) $(gserrors_h)\ @@ -2875,6 +2896,12 @@ $(MAKEDIRS) $(GLCC) $(GLO_)gscolorbuffer.$(OBJ) $(C_) $(GLSRC)gscolorbuffer.c +# ------------- Image Color Decode. Used in color mon and xpswrite --------- # + +$(GLOBJ)gximdecode.$(OBJ) : $(GLSRC)gximdecode.c $(gximdecode_h) $(string__h)\ + $(MAKEDIRS) + $(GLCC) $(GLO_)gximdecode.$(OBJ) $(C_) $(GLSRC)gximdecode.c + # ================ Display Postscript extensions ================ # gsiparm2_h=$(GLSRC)gsiparm2.h $(gsiparam_h) @@ -2883,7 +2910,8 @@ # Display PostScript needs the DevicePixel color space to implement # the PixelCopy option of ImageType 2 images. dpslib_=$(GLOBJ)gsdps.$(OBJ) $(GLOBJ)gximage2.$(OBJ) -$(GLD)dpslib.dev : $(LIB_MAK) $(ECHOGS_XE) $(dpslib_) $(GLD)cspixlib.dev +$(GLD)dpslib.dev : $(LIB_MAK) $(ECHOGS_XE) $(dpslib_) $(GLD)cspixlib.dev \ + $(MAKEDIRS) $(SETMOD) $(GLD)dpslib $(dpslib_) $(ADDMOD) $(GLD)dpslib -imagetype 2 $(ADDMOD) $(GLD)dpslib -include $(GLD)cspixlib @@ -2914,7 +2942,7 @@ $(GLCC) $(GLO_)gximagec.$(OBJ) $(C_) $(GLSRC)gximagec.c dpnxtlib_=$(GLOBJ)gsalphac.$(OBJ) -$(GLD)dpnxtlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(dpnxtlib_) +$(GLD)dpnxtlib.dev : $(LIB_MAK) $(ECHOGS_XE) $(dpnxtlib_) $(MAKEDIRS) $(SETMOD) $(GLD)dpnxtlib $(dpnxtlib_) $(ADDCOMP) $(GLD)dpnxtlib alpha @@ -2941,7 +2969,8 @@ psl3lib_=$(GLOBJ)gsclipsr.$(OBJ) $(GLOBJ)gscdevn.$(OBJ) $(GLOBJ)gxdevndi.$(OBJ) $(GLD)psl3lib.dev : $(LIB_MAK) $(ECHOGS_XE) $(psl3lib_)\ - $(GLD)imasklib.dev $(GLD)shadelib.dev $(GLD)gxfapiu$(UFST_BRIDGE).dev + $(GLD)imasklib.dev $(GLD)shadelib.dev $(GLD)gxfapiu$(UFST_BRIDGE).dev \ + $(MAKEDIRS) $(SETMOD) $(GLD)psl3lib $(psl3lib_) $(ADDMOD) $(GLD)psl3lib -include $(GLD)imasklib $(GLD)shadelib $(ADDMOD) $(GLD)psl3lib -include $(GLD)gxfapiu$(UFST_BRIDGE) @@ -2955,7 +2984,7 @@ $(GLCC) $(GLO_)gstrap.$(OBJ) $(C_) $(GLSRC)gstrap.c traplib_=$(GLOBJ)gsparamx.$(OBJ) $(GLOBJ)gstrap.$(OBJ) -$(GLD)traplib.dev : $(LIB_MAK) $(ECHOGS_XE) $(traplib_) +$(GLD)traplib.dev : $(LIB_MAK) $(ECHOGS_XE) $(traplib_) $(MAKEDIRS) $(SETMOD) $(GLD)traplib $(traplib_) ### ------------------------ The DeviceN device ------------------------ ### @@ -2963,16 +2992,16 @@ devn_=$(GLOBJ)gdevdevn.$(OBJ) -$(DD)spotcmyk.dev : $(LIB_MAK) $(devn_) $(GLD)page.dev $(GDEV) +$(DD)spotcmyk.dev : $(LIB_MAK) $(devn_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)spotcmyk $(devn_) -$(DD)devicen.dev : $(LIB_MAK) $(devn_) $(GLD)page.dev $(GDEV) +$(DD)devicen.dev : $(LIB_MAK) $(devn_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)devicen $(devn_) $(GLOBJ)gdevdevn.$(OBJ) : $(GLSRC)gdevdevn.c $(gx_h) $(math__h) $(string__h)\ $(gdevprn_h) $(gsparam_h) $(gscrd_h) $(gscrdp_h) $(gxlum_h) $(gdevdcrd_h)\ $(gstypes_h) $(gxdcconv_h) $(gdevdevn_h) $(gsequivc_h) $(gdevp14_h)\ - $(gxblend_h) $(gdevdevnprn_h) + $(gxblend_h) $(gdevdevnprn_h) $(MAKEDIRS) $(GLCC) $(GLO_)gdevdevn.$(OBJ) $(C_) $(GLSRC)gdevdevn.c @@ -2981,13 +3010,13 @@ $(GLOBJ)gdevdcrd.$(OBJ) : $(GLSRC)gdevdcrd.c $(AK)\ $(math__h) $(memory__h) $(string__h)\ $(gscrd_h) $(gscrdp_h) $(gserrors_h) $(gsparam_h) $(gscspace_h)\ - $(gx_h) $(gxdevcli_h) $(gdevdcrd_h) + $(gx_h) $(gxdevcli_h) $(gdevdcrd_h) $(MAKEDIRS) $(GLCC) $(GLO_)gdevdcrd.$(OBJ) $(C_) $(GLSRC)gdevdcrd.c $(GLOBJ)gsequivc.$(OBJ) : $(GLSRC)gsequivc.c $(math__h)\ $(PDEVH) $(gsparam_h) $(gstypes_h) $(gxdconv_h) $(gdevdevn_h)\ $(gsequivc_h) $(gzstate_h) $(gsstate_h) $(gscspace_h) $(gxcspace_h)\ - $(gsicc_manage_h) $(gxdevsop_h) + $(gsicc_manage_h) $(gxdevsop_h) $(MAKEDIRS) $(GLCC) $(GLO_)gsequivc.$(OBJ) $(C_) $(GLSRC)gsequivc.c @@ -3037,9 +3066,10 @@ translib_=$(GLOBJ)gstrans.$(OBJ) $(GLOBJ)gximag3x.$(OBJ)\ $(GLOBJ)gxblend.$(OBJ) $(GLOBJ)gxblend1.$(OBJ) $(GLOBJ)gdevp14.$(OBJ) $(GLOBJ)gdevdevn.$(OBJ)\ - $(GLOBJ)gdevdcrd.$(OBJ) $(GLOBJ)gscolorbuffer.$(OBJ) + $(GLOBJ)gsequivc.$(OBJ) $(GLOBJ)gdevdcrd.$(OBJ) $(GLOBJ)gscolorbuffer.$(OBJ) + $(GLD)translib.dev : $(LIB_MAK) $(ECHOGS_XE) $(translib_)\ - $(GLD)cspixlib.dev $(GLD)bboxutil.dev $(GLD)cielib.dev + $(GLD)cspixlib.dev $(GLD)bboxutil.dev $(GLD)cielib.dev $(MAKEDIRS) $(SETMOD) $(GLD)translib $(translib_) $(ADDMOD) $(GLD)translib -imagetype 3x $(ADDMOD) $(GLD)translib -include $(GLD)cspixlib $(GLD)bboxutil @@ -3111,7 +3141,7 @@ shadelib_2=$(GLOBJ)gxshade.$(OBJ) $(GLOBJ)gxshade1.$(OBJ) $(GLOBJ)gxshade4.$(OBJ) $(GLOBJ)gxshade6.$(OBJ) shadelib_=$(shadelib_1) $(shadelib_2) $(GLD)shadelib.dev : $(LIB_MAK) $(ECHOGS_XE) $(shadelib_)\ - $(GLD)funclib.dev $(GLD)patlib.dev + $(GLD)funclib.dev $(GLD)patlib.dev $(MAKEDIRS) $(SETMOD) $(GLD)shadelib $(shadelib_1) $(ADDMOD) $(GLD)shadelib -obj $(shadelib_2) $(ADDMOD) $(GLD)shadelib -include $(GLD)funclib $(GLD)patlib @@ -3120,12 +3150,12 @@ # This is used to access compressed, compiled-in support files gsiorom_h=$(GLSRC)gsiorom.h romfs_=$(GLOBJ)gsiorom.$(OBJ) -$(GLD)romfs1.dev : $(LIB_MAK) $(ECHOGS_XE) $(romfs_) +$(GLD)romfs1.dev : $(LIB_MAK) $(ECHOGS_XE) $(romfs_) $(MAKEDIRS) $(SETMOD) $(GLD)romfs1 $(romfs_) $(ADDMOD) $(GLD)romfs1 -iodev rom # A dummy romfs when we aren't using COMPILE_INITS -$(GLD)romfs0.dev : $(LIB_MAK) $(ECHOGS_XE) +$(GLD)romfs0.dev : $(LIB_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(GLD)romfs0 $(GLGEN)gsromfs1_.c : $(MKROMFS_XE) $(PS_ROMFS_DEPS) $(MAKEDIRS) @@ -3178,18 +3208,19 @@ # ---------------- Support for %ram% IODevice ----------------- # gsioram_h=$(GLSRC)gsioram.h ramfs_=$(GLOBJ)gsioram.$(OBJ) $(GLOBJ)ramfs.$(OBJ) -$(GLD)ramfs.dev : $(LIB_MAK) $(ECHOGS_XE) $(ramfs_) +$(GLD)ramfs.dev : $(LIB_MAK) $(ECHOGS_XE) $(ramfs_) $(MAKEDIRS) $(SETMOD) $(GLD)ramfs $(ramfs_) $(ADDMOD) $(GLD)ramfs -iodev ram $(ADDMOD) $(GLD)ramfs -obj $(GLOBJ)ramfs.$(OBJ) $(GLOBJ)ramfs.$(OBJ) : $(GLSRC)ramfs.c $(gp_h) $(gscdefs_h) $(gserrors_h)\ - $(gsparam_h) $(gsstruct_h) $(gx_h) $(ramfs_h) $(string__h) $(unistd__h) + $(gsparam_h) $(gsstruct_h) $(gx_h) $(ramfs_h) $(string__h) $(unistd__h)\ + $(MAKEDIRS) $(GLCC) $(GLO_)ramfs.$(OBJ) $(C_) $(GLSRC)ramfs.c $(GLOBJ)gsioram.$(OBJ) : $(GLSRC)gsioram.c $(gp_h) $(gscdefs_h) $(gserrors_h)\ $(gsparam_h) $(gsstruct_h) $(gsutil_h) $(gx_h) $(gxiodev_h) $(ramfs_h)\ - $(stream_h) $(string__h) $(unistd__h) + $(stream_h) $(string__h) $(unistd__h) $(MAKEDIRS) $(GLCC) $(GLO_)gsioram.$(OBJ) $(C_) $(GLSRC)gsioram.c @@ -3205,7 +3236,7 @@ # This is used to load native-format fonts on MacOS # Define the macres.dev FEATURE macres_=$(GLOBJ)gsiomacres.$(OBJ) -$(GLD)macres.dev : $(LIB_MAK) $(ECHOGS_XE) $(macres_) +$(GLD)macres.dev : $(LIB_MAK) $(ECHOGS_XE) $(macres_) $(MAKEDIRS) $(SETMOD) $(GLD)macres $(macres_) $(ADDMOD) $(GLD)macres -iodev macresource @@ -3275,7 +3306,7 @@ # Pipes. These are actually the same on all platforms that have them. pipe_=$(GLOBJ)gdevpipe.$(OBJ) -$(GLD)pipe.dev : $(LIB_MAK) $(ECHOGS_XE) $(pipe_) +$(GLD)pipe.dev : $(LIB_MAK) $(ECHOGS_XE) $(pipe_) $(MAKEDIRS) $(SETMOD) $(GLD)pipe $(pipe_) $(ADDMOD) $(GLD)pipe -iodev pipe @@ -3289,7 +3320,7 @@ # Dummy implementation. nosync_=$(GLOBJ)gp_nsync.$(OBJ) -$(GLD)nosync.dev : $(LIB_MAK) $(ECHOGS_XE) $(nosync_) +$(GLD)nosync.dev : $(LIB_MAK) $(ECHOGS_XE) $(nosync_) $(MAKEDIRS) $(SETMOD) $(GLD)nosync $(nosync_) $(GLOBJ)gp_nsync.$(OBJ) : $(GLSRC)gp_nsync.c $(AK) $(std_h)\ @@ -3298,12 +3329,12 @@ # POSIX pthreads-based implementation. pthreads_=$(GLOBJ)gp_psync.$(OBJ) -$(GLD)posync.dev : $(LIB_MAK) $(ECHOGS_XE) $(pthreads_) +$(GLD)posync.dev : $(LIB_MAK) $(ECHOGS_XE) $(pthreads_) $(MAKEDIRS) $(SETMOD) $(GLD)posync $(pthreads_) $(ADDMOD) $(GLD)posync -replace $(GLD)nosync $(GLOBJ)gp_psync.$(OBJ) : $(GLSRC)gp_psync.c $(AK) $(malloc__h)\ - $(std_h) $(gpsync_h) $(gserrors_h) $(MAKEDIRS) + $(std_h) $(gpsync_h) $(gserrors_h) $(assert__h) $(MAKEDIRS) $(GLCC) $(GLO_)gp_psync.$(OBJ) $(C_) $(GLSRC)gp_psync.c # Other stuff. diff -Nru ghostscript-9.15+dfsg/base/lwf_jp2.mak ghostscript-9.16~dfsg~0/base/lwf_jp2.mak --- ghostscript-9.15+dfsg/base/lwf_jp2.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/lwf_jp2.mak 2015-03-30 08:21:24.000000000 +0000 @@ -175,219 +175,222 @@ $(LWF_JP2_SRC)lwf_jp2.h # switch in the selected library .dev -$(LWF_JP2_GEN)lwf_jp2.dev : $(TOP_MAKEFILES) $(LWF_JP2_GEN)lwf_jp2_$(SHARE_JPX).dev +$(LWF_JP2_GEN)lwf_jp2.dev : $(TOP_MAKEFILES) $(LWF_JP2_GEN)lwf_jp2_$(SHARE_JPX).dev \ + $(MAKEDIRS) $(CP_) $(LWF_JP2_GEN)lwf_jp2_$(SHARE_JPX).dev $(LWF_JP2_GEN)lwf_jp2.dev # external link .dev -$(LWF_JP2_GEN)lwf_jp2_1.dev : $(TOP_MAKEFILES) $(LWF_JP2_MAK) $(ECHOGS_XE) +$(LWF_JP2_GEN)lwf_jp2_1.dev : $(TOP_MAKEFILES) $(LWF_JP2_MAK) $(ECHOGS_XE) \ + $(MAKEDIRS) $(SETMOD) $(LWF_JP2_GEN)lwf_jp2_1 -lib lwf_jp2 # compile our own .dev -$(LWF_JP2_GEN)lwf_jp2_0.dev : $(TOP_MAKEFILES) $(LWF_JP2_MAK) $(ECHOGS_XE) $(lwf_jp2_OBJS) +$(LWF_JP2_GEN)lwf_jp2_0.dev : $(TOP_MAKEFILES) $(LWF_JP2_MAK) $(ECHOGS_XE) $(lwf_jp2_OBJS) \ + $(MAKEDIRS) $(SETMOD) $(LWF_JP2_GEN)lwf_jp2_0 $(lwf_jp2_OBJS) # define our specific compiler LWF_JP2_CC=$(CC_) $(CFLAGS) $(I_)$(LWF_JPXI_)$(_I) $(JPXCF_) LWF_JP2_O=$(O_)$(LWF_JP2_OBJ) -LWF_JP2_DEP=$(AK) $(LWF_JP2_MAK) +LWF_JP2_DEP=$(AK) $(LWF_JP2_MAK) $(MAKEDIRS) # explicit rules for building each source file # for simplicity we have every source file depend on all headers -$(LWF_JP2_OBJ)jp2_adt_band_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_band_array.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_band_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_band_array.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_band_array.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_band_array.c -$(LWF_JP2_OBJ)jp2_adt_band_buffer.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_band_buffer.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_band_buffer.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_band_buffer.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_band_buffer.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_band_buffer.c -$(LWF_JP2_OBJ)jp2_adt_block_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_block_array.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_block_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_block_array.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_block_array.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_block_array.c -$(LWF_JP2_OBJ)jp2_adt_cache.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_cache.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_cache.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_cache.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_cache.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_cache.c -$(LWF_JP2_OBJ)jp2_adt_comp.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_comp.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_comp.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_comp.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_comp.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_comp.c -$(LWF_JP2_OBJ)jp2_adt_component_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_component_array.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_component_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_component_array.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_component_array.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_component_array.c -$(LWF_JP2_OBJ)jp2_adt_decomp.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_decomp.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_decomp.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_decomp.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_decomp.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_decomp.c -$(LWF_JP2_OBJ)jp2_adt_ebcot_decoder.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_ebcot_decoder.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_ebcot_decoder.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_ebcot_decoder.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_ebcot_decoder.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_ebcot_decoder.c -$(LWF_JP2_OBJ)jp2_adt_external_cache.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_external_cache.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_external_cache.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_external_cache.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_external_cache.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_external_cache.c -$(LWF_JP2_OBJ)jp2_adt_image.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_image.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_image.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_image.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_image.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_image.c -$(LWF_JP2_OBJ)jp2_adt_memory.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_memory.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_memory.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_memory.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_memory.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_memory.c -$(LWF_JP2_OBJ)jp2_adt_mq_decoder.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_mq_decoder.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_mq_decoder.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_mq_decoder.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_mq_decoder.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_mq_decoder.c -$(LWF_JP2_OBJ)jp2_adt_mq_state.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_mq_state.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_mq_state.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_mq_state.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_mq_state.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_mq_state.c -$(LWF_JP2_OBJ)jp2_adt_packet_decoder.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_packet_decoder.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_packet_decoder.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_packet_decoder.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_packet_decoder.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_packet_decoder.c -$(LWF_JP2_OBJ)jp2_adt_precinct_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_precinct_array.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_precinct_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_precinct_array.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_precinct_array.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_precinct_array.c -$(LWF_JP2_OBJ)jp2_adt_rate.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_rate.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_rate.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_rate.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_rate.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_rate.c -$(LWF_JP2_OBJ)jp2_adt_rate_list.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_rate_list.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_rate_list.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_rate_list.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_rate_list.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_rate_list.c -$(LWF_JP2_OBJ)jp2_adt_read_bits.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_read_bits.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_read_bits.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_read_bits.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_read_bits.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_read_bits.c -$(LWF_JP2_OBJ)jp2_adt_read_data.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_read_data.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_read_data.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_read_data.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_read_data.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_read_data.c -$(LWF_JP2_OBJ)jp2_adt_reader_requirements.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_reader_requirements.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_reader_requirements.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_reader_requirements.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_reader_requirements.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_reader_requirements.c -$(LWF_JP2_OBJ)jp2_adt_resolution_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_resolution_array.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_resolution_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_resolution_array.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_resolution_array.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_resolution_array.c -$(LWF_JP2_OBJ)jp2_adt_tile_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_tile_array.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_tile_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_tile_array.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_tile_array.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_tile_array.c -$(LWF_JP2_OBJ)jp2_adt_tlm_marker_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_tlm_marker_array.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_tlm_marker_array.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_tlm_marker_array.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_tlm_marker_array.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_tlm_marker_array.c -$(LWF_JP2_OBJ)jp2_adt_write_data.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_write_data.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_adt_write_data.$(OBJ) : $(LWF_JP2_SRC)jp2_adt_write_data.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_adt_write_data.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_adt_write_data.c -$(LWF_JP2_OBJ)jp2_buffer.$(OBJ) : $(LWF_JP2_SRC)jp2_buffer.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_buffer.$(OBJ) : $(LWF_JP2_SRC)jp2_buffer.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_buffer.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_buffer.c -$(LWF_JP2_OBJ)jp2c_code_cb.$(OBJ) : $(LWF_JP2_SRC)jp2c_code_cb.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_code_cb.$(OBJ) : $(LWF_JP2_SRC)jp2c_code_cb.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_code_cb.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_code_cb.c -$(LWF_JP2_OBJ)jp2c_coder.$(OBJ) : $(LWF_JP2_SRC)jp2c_coder.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_coder.$(OBJ) : $(LWF_JP2_SRC)jp2c_coder.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_coder.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_coder.c -$(LWF_JP2_OBJ)jp2c_codestream.$(OBJ) : $(LWF_JP2_SRC)jp2c_codestream.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_codestream.$(OBJ) : $(LWF_JP2_SRC)jp2c_codestream.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_codestream.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_codestream.c -$(LWF_JP2_OBJ)jp2c_file_format.$(OBJ) : $(LWF_JP2_SRC)jp2c_file_format.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_file_format.$(OBJ) : $(LWF_JP2_SRC)jp2c_file_format.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_file_format.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_file_format.c -$(LWF_JP2_OBJ)jp2c_format.$(OBJ) : $(LWF_JP2_SRC)jp2c_format.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_format.$(OBJ) : $(LWF_JP2_SRC)jp2c_format.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_format.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_format.c -$(LWF_JP2_OBJ)jp2c_memory.$(OBJ) : $(LWF_JP2_SRC)jp2c_memory.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_memory.$(OBJ) : $(LWF_JP2_SRC)jp2c_memory.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_memory.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_memory.c -$(LWF_JP2_OBJ)jp2_code_cb.$(OBJ) : $(LWF_JP2_SRC)jp2_code_cb.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_code_cb.$(OBJ) : $(LWF_JP2_SRC)jp2_code_cb.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_code_cb.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_code_cb.c -$(LWF_JP2_OBJ)jp2_common.$(OBJ) : $(LWF_JP2_SRC)jp2_common.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_common.$(OBJ) : $(LWF_JP2_SRC)jp2_common.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_common.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_common.c -$(LWF_JP2_OBJ)jp2c_progression.$(OBJ) : $(LWF_JP2_SRC)jp2c_progression.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_progression.$(OBJ) : $(LWF_JP2_SRC)jp2c_progression.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_progression.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_progression.c -$(LWF_JP2_OBJ)jp2c_quant.$(OBJ) : $(LWF_JP2_SRC)jp2c_quant.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_quant.$(OBJ) : $(LWF_JP2_SRC)jp2c_quant.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_quant.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_quant.c -$(LWF_JP2_OBJ)jp2c_wavelet.$(OBJ) : $(LWF_JP2_SRC)jp2c_wavelet.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_wavelet.$(OBJ) : $(LWF_JP2_SRC)jp2c_wavelet.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_wavelet.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_wavelet.c -$(LWF_JP2_OBJ)jp2c_wavelet_lifting.$(OBJ) : $(LWF_JP2_SRC)jp2c_wavelet_lifting.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_wavelet_lifting.$(OBJ) : $(LWF_JP2_SRC)jp2c_wavelet_lifting.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_wavelet_lifting.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_wavelet_lifting.c -$(LWF_JP2_OBJ)jp2c_wavelet_lifting_mmx.$(OBJ) : $(LWF_JP2_SRC)jp2c_wavelet_lifting_mmx.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_wavelet_lifting_mmx.$(OBJ) : $(LWF_JP2_SRC)jp2c_wavelet_lifting_mmx.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_wavelet_lifting_mmx.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_wavelet_lifting_mmx.c -$(LWF_JP2_OBJ)jp2c_weights.$(OBJ) : $(LWF_JP2_SRC)jp2c_weights.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_weights.$(OBJ) : $(LWF_JP2_SRC)jp2c_weights.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_weights.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_weights.c -$(LWF_JP2_OBJ)jp2c_write.$(OBJ) : $(LWF_JP2_SRC)jp2c_write.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2c_write.$(OBJ) : $(LWF_JP2_SRC)jp2c_write.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2c_write.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2c_write.c -$(LWF_JP2_OBJ)jp2d_codestream.$(OBJ) : $(LWF_JP2_SRC)jp2d_codestream.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_codestream.$(OBJ) : $(LWF_JP2_SRC)jp2d_codestream.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_codestream.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_codestream.c -$(LWF_JP2_OBJ)jp2d_decoder.$(OBJ) : $(LWF_JP2_SRC)jp2d_decoder.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_decoder.$(OBJ) : $(LWF_JP2_SRC)jp2d_decoder.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_decoder.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_decoder.c -$(LWF_JP2_OBJ)jp2_demo.$(OBJ) : $(LWF_JP2_SRC)jp2_demo.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_demo.$(OBJ) : $(LWF_JP2_SRC)jp2_demo.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_demo.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_demo.c -$(LWF_JP2_OBJ)jp2d_file_format.$(OBJ) : $(LWF_JP2_SRC)jp2d_file_format.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_file_format.$(OBJ) : $(LWF_JP2_SRC)jp2d_file_format.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_file_format.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_file_format.c -$(LWF_JP2_OBJ)jp2d_format.$(OBJ) : $(LWF_JP2_SRC)jp2d_format.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_format.$(OBJ) : $(LWF_JP2_SRC)jp2d_format.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_format.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_format.c -$(LWF_JP2_OBJ)jp2d_image.$(OBJ) : $(LWF_JP2_SRC)jp2d_image.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_image.$(OBJ) : $(LWF_JP2_SRC)jp2d_image.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_image.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_image.c -$(LWF_JP2_OBJ)jp2d_memory.$(OBJ) : $(LWF_JP2_SRC)jp2d_memory.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_memory.$(OBJ) : $(LWF_JP2_SRC)jp2d_memory.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_memory.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_memory.c -$(LWF_JP2_OBJ)jp2d_partial_decoding.$(OBJ) : $(LWF_JP2_SRC)jp2d_partial_decoding.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_partial_decoding.$(OBJ) : $(LWF_JP2_SRC)jp2d_partial_decoding.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_partial_decoding.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_partial_decoding.c -$(LWF_JP2_OBJ)jp2d_progression.$(OBJ) : $(LWF_JP2_SRC)jp2d_progression.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_progression.$(OBJ) : $(LWF_JP2_SRC)jp2d_progression.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_progression.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_progression.c -$(LWF_JP2_OBJ)jp2d_quant.$(OBJ) : $(LWF_JP2_SRC)jp2d_quant.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_quant.$(OBJ) : $(LWF_JP2_SRC)jp2d_quant.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_quant.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_quant.c -$(LWF_JP2_OBJ)jp2d_scale.$(OBJ) : $(LWF_JP2_SRC)jp2d_scale.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_scale.$(OBJ) : $(LWF_JP2_SRC)jp2d_scale.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_scale.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_scale.c -$(LWF_JP2_OBJ)jp2d_wavelet.$(OBJ) : $(LWF_JP2_SRC)jp2d_wavelet.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_wavelet.$(OBJ) : $(LWF_JP2_SRC)jp2d_wavelet.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_wavelet.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_wavelet.c -$(LWF_JP2_OBJ)jp2d_wavelet_lifting.$(OBJ) : $(LWF_JP2_SRC)jp2d_wavelet_lifting.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_wavelet_lifting.$(OBJ) : $(LWF_JP2_SRC)jp2d_wavelet_lifting.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_wavelet_lifting.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_wavelet_lifting.c -$(LWF_JP2_OBJ)jp2d_wavelet_lifting_mmx.$(OBJ) : $(LWF_JP2_SRC)jp2d_wavelet_lifting_mmx.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_wavelet_lifting_mmx.$(OBJ) : $(LWF_JP2_SRC)jp2d_wavelet_lifting_mmx.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_wavelet_lifting_mmx.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_wavelet_lifting_mmx.c -$(LWF_JP2_OBJ)jp2d_write.$(OBJ) : $(LWF_JP2_SRC)jp2d_write.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2d_write.$(OBJ) : $(LWF_JP2_SRC)jp2d_write.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2d_write.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2d_write.c -$(LWF_JP2_OBJ)jp2_icc.$(OBJ) : $(LWF_JP2_SRC)jp2_icc.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_icc.$(OBJ) : $(LWF_JP2_SRC)jp2_icc.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_icc.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_icc.c -$(LWF_JP2_OBJ)jp2_license.$(OBJ) : $(LWF_JP2_SRC)jp2_license.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_license.$(OBJ) : $(LWF_JP2_SRC)jp2_license.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_license.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_license.c -$(LWF_JP2_OBJ)jp2_packet.$(OBJ) : $(LWF_JP2_SRC)jp2_packet.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_packet.$(OBJ) : $(LWF_JP2_SRC)jp2_packet.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_packet.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_packet.c -$(LWF_JP2_OBJ)jp2_tag_tree.$(OBJ) : $(LWF_JP2_SRC)jp2_tag_tree.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2_tag_tree.$(OBJ) : $(LWF_JP2_SRC)jp2_tag_tree.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2_tag_tree.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2_tag_tree.c -$(LWF_JP2_OBJ)jp2t_codestream.$(OBJ) : $(LWF_JP2_SRC)jp2t_codestream.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2t_codestream.$(OBJ) : $(LWF_JP2_SRC)jp2t_codestream.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2t_codestream.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2t_codestream.c -$(LWF_JP2_OBJ)jp2t_file_format.$(OBJ) : $(LWF_JP2_SRC)jp2t_file_format.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2t_file_format.$(OBJ) : $(LWF_JP2_SRC)jp2t_file_format.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2t_file_format.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2t_file_format.c -$(LWF_JP2_OBJ)jp2t_image.$(OBJ) : $(LWF_JP2_SRC)jp2t_image.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2t_image.$(OBJ) : $(LWF_JP2_SRC)jp2t_image.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2t_image.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2t_image.c -$(LWF_JP2_OBJ)jp2t_memory.$(OBJ) : $(LWF_JP2_SRC)jp2t_memory.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2t_memory.$(OBJ) : $(LWF_JP2_SRC)jp2t_memory.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2t_memory.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2t_memory.c -$(LWF_JP2_OBJ)jp2t_progression.$(OBJ) : $(LWF_JP2_SRC)jp2t_progression.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2t_progression.$(OBJ) : $(LWF_JP2_SRC)jp2t_progression.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2t_progression.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2t_progression.c -$(LWF_JP2_OBJ)jp2t_transcoder.$(OBJ) : $(LWF_JP2_SRC)jp2t_transcoder.c $(LWF_JP2_DEP) $(lwf_jp2_HDRS) +$(LWF_JP2_OBJ)jp2t_transcoder.$(OBJ) : $(LWF_JP2_SRC)jp2t_transcoder.c $(lwf_jp2_HDRS) $(LWF_JP2_DEP) $(LWF_JP2_CC) $(LWF_JP2_O)jp2t_transcoder.$(OBJ) $(C_) $(LWF_JP2_SRC)jp2t_transcoder.c diff -Nru ghostscript-9.15+dfsg/base/openjpeg.mak ghostscript-9.16~dfsg~0/base/openjpeg.mak --- ghostscript-9.15+dfsg/base/openjpeg.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/openjpeg.mak 2015-03-30 08:21:24.000000000 +0000 @@ -98,96 +98,99 @@ $(OPEN_JPEG_SRC)tgt.h \ # switch in the selected library .dev -$(OPEN_JPEG_GEN)openjpeg.dev : $(TOP_MAKEFILES) $(OPEN_JPEG_GEN)openjpeg_$(SHARE_JPX).dev +$(OPEN_JPEG_GEN)openjpeg.dev : $(TOP_MAKEFILES) $(OPEN_JPEG_GEN)openjpeg_$(SHARE_JPX).dev \ + $(MAKEDIRS) $(CP_) $(OPEN_JPEG_GEN)openjpeg_$(SHARE_JPX).dev $(OPEN_JPEG_GEN)openjpeg.dev # external link .dev -$(OPEN_JPEG_GEN)openjpeg_1.dev : $(TOP_MAKEFILES) $(OPEN_JPEG_MAK) $(ECHOGS_XE) +$(OPEN_JPEG_GEN)openjpeg_1.dev : $(TOP_MAKEFILES) $(OPEN_JPEG_MAK) $(ECHOGS_XE) \ + $(MAKEDIRS) $(SETMOD) $(OPEN_JPEG_GEN)openjpeg_1 -lib lib_openjpeg # compile our own .dev -$(OPEN_JPEG_GEN)openjpeg_0.dev : $(TOP_MAKEFILES) $(OPEN_JPEG_MAK) $(ECHOGS_XE) $(open_jpeg_OBJS) +$(OPEN_JPEG_GEN)openjpeg_0.dev : $(TOP_MAKEFILES) $(OPEN_JPEG_MAK) $(ECHOGS_XE) $(open_jpeg_OBJS) \ + $(MAKEDIRS) $(SETMOD) $(OPEN_JPEG_GEN)openjpeg_0 $(open_jpeg_OBJS) # define our specific compiler OPEN_JPEG_CC=$(CC) $(CFLAGS) $(D_)OPJ_STATIC$(_D) $(I_)$(OPEN_JPEG_GEN)$(_I) $(I_)$(JPX_OPENJPEG_I_)$(_I) $(I_)$(JPX_OPENJPEG_I_)$(D)..$(_I) $(JPXCF_) OPEN_JPEG_O=$(O_)$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX) -OPEN_JPEG_DEP=$(AK) $(OPEN_JPEG_MAK) +OPEN_JPEG_DEP=$(AK) $(OPEN_JPEG_MAK) $(MAKEDIRS) # explicit rules for building each source file # for simplicity we have every source file depend on all headers -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)bio.$(OBJ) : $(OPEN_JPEG_SRC)bio.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)bio.$(OBJ) : $(OPEN_JPEG_SRC)bio.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)bio.$(OBJ) $(C_) $(OPEN_JPEG_SRC)bio.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)cio.$(OBJ) : $(OPEN_JPEG_SRC)cio.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)cio.$(OBJ) : $(OPEN_JPEG_SRC)cio.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)cio.$(OBJ) $(C_) $(OPEN_JPEG_SRC)cio.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)dwt.$(OBJ) : $(OPEN_JPEG_SRC)dwt.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)dwt.$(OBJ) : $(OPEN_JPEG_SRC)dwt.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)dwt.$(OBJ) $(C_) $(OPEN_JPEG_SRC)dwt.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)event.$(OBJ) : $(OPEN_JPEG_SRC)event.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)event.$(OBJ) : $(OPEN_JPEG_SRC)event.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)event.$(OBJ) $(C_) $(OPEN_JPEG_SRC)event.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)function_list.$(OBJ) : $(OPEN_JPEG_SRC)function_list.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)function_list.$(OBJ) : $(OPEN_JPEG_SRC)function_list.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)function_list.$(OBJ) $(C_) $(OPEN_JPEG_SRC)function_list.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)image.$(OBJ) : $(OPEN_JPEG_SRC)image.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)image.$(OBJ) : $(OPEN_JPEG_SRC)image.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)image.$(OBJ) $(C_) $(OPEN_JPEG_SRC)image.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)invert.$(OBJ) : $(OPEN_JPEG_SRC)invert.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)invert.$(OBJ) : $(OPEN_JPEG_SRC)invert.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)invert.$(OBJ) $(C_) $(OPEN_JPEG_SRC)invert.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)j2k.$(OBJ) : $(OPEN_JPEG_SRC)j2k.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)j2k.$(OBJ) : $(OPEN_JPEG_SRC)j2k.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)j2k.$(OBJ) $(C_) $(OPEN_JPEG_SRC)j2k.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)jp2.$(OBJ) : $(OPEN_JPEG_SRC)jp2.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)jp2.$(OBJ) : $(OPEN_JPEG_SRC)jp2.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)jp2.$(OBJ) $(C_) $(OPEN_JPEG_SRC)jp2.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)mct.$(OBJ) : $(OPEN_JPEG_SRC)mct.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)mct.$(OBJ) : $(OPEN_JPEG_SRC)mct.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)mct.$(OBJ) $(C_) $(OPEN_JPEG_SRC)mct.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)mqc.$(OBJ) : $(OPEN_JPEG_SRC)mqc.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)mqc.$(OBJ) : $(OPEN_JPEG_SRC)mqc.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)mqc.$(OBJ) $(C_) $(OPEN_JPEG_SRC)mqc.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)openjpeg.$(OBJ) : $(OPEN_JPEG_SRC)openjpeg.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)openjpeg.$(OBJ) : $(OPEN_JPEG_SRC)openjpeg.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)openjpeg.$(OBJ) $(C_) $(OPEN_JPEG_SRC)openjpeg.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)opj_clock.$(OBJ) : $(OPEN_JPEG_SRC)opj_clock.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)opj_clock.$(OBJ) : $(OPEN_JPEG_SRC)opj_clock.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)opj_clock.$(OBJ) $(C_) $(OPEN_JPEG_SRC)opj_clock.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)pi.$(OBJ) : $(OPEN_JPEG_SRC)pi.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)pi.$(OBJ) : $(OPEN_JPEG_SRC)pi.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)pi.$(OBJ) $(C_) $(OPEN_JPEG_SRC)pi.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)raw.$(OBJ) : $(OPEN_JPEG_SRC)raw.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)raw.$(OBJ) : $(OPEN_JPEG_SRC)raw.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)raw.$(OBJ) $(C_) $(OPEN_JPEG_SRC)raw.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)t1.$(OBJ) : $(OPEN_JPEG_SRC)t1.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)t1.$(OBJ) : $(OPEN_JPEG_SRC)t1.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)t1.$(OBJ) $(C_) $(OPEN_JPEG_SRC)t1.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)t2.$(OBJ) : $(OPEN_JPEG_SRC)t2.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)t2.$(OBJ) : $(OPEN_JPEG_SRC)t2.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)t2.$(OBJ) $(C_) $(OPEN_JPEG_SRC)t2.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)tcd.$(OBJ) : $(OPEN_JPEG_SRC)tcd.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)tcd.$(OBJ) : $(OPEN_JPEG_SRC)tcd.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)tcd.$(OBJ) $(C_) $(OPEN_JPEG_SRC)tcd.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)tgt.$(OBJ) : $(OPEN_JPEG_SRC)tgt.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)tgt.$(OBJ) : $(OPEN_JPEG_SRC)tgt.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)tgt.$(OBJ) $(C_) $(OPEN_JPEG_SRC)tgt.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)cidx_manager.$(OBJ) : $(OPEN_JPEG_SRC)cidx_manager.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)cidx_manager.$(OBJ) : $(OPEN_JPEG_SRC)cidx_manager.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)cidx_manager.$(OBJ) $(C_) $(OPEN_JPEG_SRC)cidx_manager.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)tpix_manager.$(OBJ) : $(OPEN_JPEG_SRC)tpix_manager.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)tpix_manager.$(OBJ) : $(OPEN_JPEG_SRC)tpix_manager.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)tpix_manager.$(OBJ) $(C_) $(OPEN_JPEG_SRC)tpix_manager.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)thix_manager.$(OBJ) : $(OPEN_JPEG_SRC)thix_manager.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)thix_manager.$(OBJ) : $(OPEN_JPEG_SRC)thix_manager.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)thix_manager.$(OBJ) $(C_) $(OPEN_JPEG_SRC)thix_manager.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)ppix_manager.$(OBJ) : $(OPEN_JPEG_SRC)ppix_manager.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)ppix_manager.$(OBJ) : $(OPEN_JPEG_SRC)ppix_manager.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)ppix_manager.$(OBJ) $(C_) $(OPEN_JPEG_SRC)ppix_manager.c -$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)phix_manager.$(OBJ) : $(OPEN_JPEG_SRC)phix_manager.c $(OPEN_JPEG_DEP) $(open_jpeg_HDRS) +$(OPEN_JPEG_OBJ)$(OPEN_JPEG_PREFIX)phix_manager.$(OBJ) : $(OPEN_JPEG_SRC)phix_manager.c $(open_jpeg_HDRS) $(OPEN_JPEG_DEP) $(OPEN_JPEG_CC) $(OPEN_JPEG_O)phix_manager.$(OBJ) $(C_) $(OPEN_JPEG_SRC)phix_manager.c # end of file diff -Nru ghostscript-9.15+dfsg/base/png.mak ghostscript-9.16~dfsg~0/base/png.mak --- ghostscript-9.15+dfsg/base/png.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/png.mak 2015-03-30 08:21:24.000000000 +0000 @@ -81,7 +81,7 @@ $(pnglibconf_h) : $(PNGSRC)scripts$(D)pnglibconf.h.prebuilt $(CP_) $(PNGSRC)scripts$(D)pnglibconf.h.prebuilt $(pnglibconf_h) -PDEP=$(AK) $(pnglibconf_h) +PDEP=$(AK) $(pnglibconf_h) $(MAKEDIRS) png_1=$(PNGOBJ)png.$(OBJ) $(PNGOBJ)pngmem.$(OBJ) $(PNGOBJ)pngerror.$(OBJ) $(PNGOBJ)pngset.$(OBJ) png_2=$(PNGOBJ)pngtrans.$(OBJ) $(PNGOBJ)pngwrite.$(OBJ) $(PNGOBJ)pngwtran.$(OBJ) $(PNGOBJ)pngwutil.$(OBJ) $(PNGOBJ)pngwio.$(OBJ) @@ -138,13 +138,14 @@ # Define the shared version of libpng. # Note that it requires libz, which must be searched *after* libpng. -$(PNGGEN)libpng_1.dev : $(TOP_MAKEFILES) $(LIBPNG_MAK) $(ECHOGS_XE) $(PZGEN)zlibe.dev +$(PNGGEN)libpng_1.dev : $(TOP_MAKEFILES) $(LIBPNG_MAK) $(ECHOGS_XE) $(PZGEN)zlibe.dev \ + $(MAKEDIRS) $(SETMOD) $(PNGGEN)libpng_1 -lib $(LIBPNG_NAME) $(ADDMOD) $(PNGGEN)libpng_1 -include $(PZGEN)zlibe.dev # Define the non-shared version of libpng. $(PNGGEN)libpng_0.dev : $(LIBPNG_MAK) $(ECHOGS_XE) $(png_1) $(png_2) $(png_3)\ - $(PZGEN)zlibe.dev $(PNGOBJ)pngwio.$(OBJ) $(PZGEN)crc32.dev + $(PZGEN)zlibe.dev $(PNGOBJ)pngwio.$(OBJ) $(PZGEN)crc32.dev $(MAKEDIRS) $(SETMOD) $(PNGGEN)libpng_0 $(png_1) $(ADDMOD) $(PNGGEN)libpng_0 $(png_2) $(ADDMOD) $(PNGGEN)libpng_0 $(png_3) diff -Nru ghostscript-9.15+dfsg/base/sdctc.c ghostscript-9.16~dfsg~0/base/sdctc.c --- ghostscript-9.15+dfsg/base/sdctc.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/sdctc.c 2015-03-30 08:21:24.000000000 +0000 @@ -56,20 +56,27 @@ if (st->templat->process == s_DCTE_template.process) { gs_jpeg_destroy(ss); - if (ss->data.common) + if (ss->data.compress != NULL) { gs_free_object(ss->data.common->memory, ss->data.compress, "s_DCTE_release"); + ss->data.compress = NULL; + } /* Switch the template pointer back in case we still need it. */ st->templat = &s_DCTE_template; } else { gs_jpeg_destroy(ss); - if (ss->data.decompress->scanline_buffer != NULL) - gs_free_object(gs_memory_stable(ss->data.common->memory), - ss->data.decompress->scanline_buffer, - "s_DCTD_release(scanline_buffer)"); - gs_free_object(ss->data.common->memory, ss->data.decompress, + if (ss->data.decompress != NULL) { + if (ss->data.decompress->scanline_buffer != NULL) { + gs_free_object(gs_memory_stable(ss->data.common->memory), + ss->data.decompress->scanline_buffer, + "s_DCTD_release(scanline_buffer)"); + ss->data.decompress->scanline_buffer = NULL; + } + gs_free_object(ss->data.common->memory, ss->data.decompress, "s_DCTD_release"); + ss->data.decompress = NULL; + } /* Switch the template pointer back in case we still need it. */ st->templat = &s_DCTD_template; } diff -Nru ghostscript-9.15+dfsg/base/stdint_.h ghostscript-9.16~dfsg~0/base/stdint_.h --- ghostscript-9.15+dfsg/base/stdint_.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/stdint_.h 2015-03-30 08:21:24.000000000 +0000 @@ -138,37 +138,36 @@ # define PRIu32 "I32u" # define PRIu64 "I64u" # define PRIx64 "I64x" -# else +# endif +#endif -# ifndef PRId32 -# define PRId32 "d" -# endif - -# ifndef PRId64 -# define PRId64 "lld" -# endif - -# ifndef PRIi32 -# define PRIi32 "i" -# endif - -# ifndef PRIi64 -# define PRIi64 "lli" -# endif - -# ifndef PRIu32 -# define PRIu32 "u" -# endif - -# ifndef PRIu64 -# define PRIu64 "llu" -# endif - -# ifndef PRIx64 -# define PRIx64 "llx" -# endif +/* Even if we have inttypes.h, these may not be defined */ +# ifndef PRId32 +# define PRId32 "d" +# endif +# ifndef PRId64 +# define PRId64 "lld" +# endif + +# ifndef PRIi32 +# define PRIi32 "i" +# endif + +# ifndef PRIi64 +# define PRIi64 "lli" +# endif + +# ifndef PRIu32 +# define PRIu32 "u" +# endif + +# ifndef PRIu64 +# define PRIu64 "llu" +# endif + +# ifndef PRIx64 +# define PRIx64 "llx" # endif -#endif #endif /* stdint__INCLUDED */ diff -Nru ghostscript-9.15+dfsg/base/stream.c ghostscript-9.16~dfsg~0/base/stream.c --- ghostscript-9.15+dfsg/base/stream.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/stream.c 2015-03-30 08:21:24.000000000 +0000 @@ -432,8 +432,11 @@ stream_proc_release((*release)) = st->templat->release; if (release != 0) (*release) (st); - if (st != (stream_state *) s && st->memory != 0) - gs_free_object(st->memory, st, "s_std_close"); + if (st != (stream_state *) s && st->memory != 0) { + gs_memory_t *mem = st->memory; + st->memory = NULL; + gs_free_object(mem, st, "s_std_close"); + } s->state = (stream_state *) s; } s_disable(s); diff -Nru ghostscript-9.15+dfsg/base/tiff.mak ghostscript-9.16~dfsg~0/base/tiff.mak --- ghostscript-9.15+dfsg/base/tiff.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/tiff.mak 2015-03-30 08:21:24.000000000 +0000 @@ -35,7 +35,7 @@ TIFFCC=$(CC_) $(I_)$(TI_) $(II)$(JI_)$(_I) $(PF_) -TIFFDEP = $(AK) $(TIFFGEN)tif_config.h $(TIFFGEN)tiffconf.h +TIFFDEP = $(AK) $(TIFFGEN)tif_config.h $(TIFFGEN)tiffconf.h $(MAKEDIRS) gstiffio_h=$(GLSRC)gstiffio.h tiff_1=$(TIFFOBJ)tif_aux.$(OBJ) $(TIFFOBJ)tif_close.$(OBJ) $(TIFFOBJ)tif_codec.$(OBJ) $(TIFFOBJ)tif_color.$(OBJ) @@ -185,23 +185,23 @@ # instead of the platform specific files above, we include our own which stubs out # the platform specific code, and routes via the Ghostscript I/O functions. $(TIFFOBJ)gstiffio.$(OBJ) : $(GLSRC)gstiffio.c $(gstiffio_h) $(PDEVH) $(stdint__h) $(stdio__h) $(time__h)\ - $(gscdefs_h) $(gstypes_h) $(stream_h) $(strmio_h) $(malloc__h) + $(gscdefs_h) $(gstypes_h) $(stream_h) $(strmio_h) $(malloc__h) $(MAKEDIRS) $(TIFFCC) $(TIFFO_)gstiffio.$(OBJ) $(D_)SHARE_LIBTIFF=$(SHARE_LIBTIFF) $(C_) $(GLSRC)gstiffio.c -$(TIFFGEN)tif_config.h: $(TIFFCONFIG_H) +$(TIFFGEN)tif_config.h: $(TIFFCONFIG_H) $(MAKEDIRS) $(CP_) $(TIFFCONFIG_H) $(TIFFGEN)tif_config.h -$(TIFFGEN)tiffconf.h: $(TIFFCONF_H) +$(TIFFGEN)tiffconf.h: $(TIFFCONF_H) $(MAKEDIRS) $(CP_) $(TIFFCONF_H) $(TIFFGEN)tiffconf.h # Define the version of libtiff.dev that we are actually using. -$(TIFFGEN)libtiff.dev : $(TOP_MAKEFILES) $(TIFFGEN)libtiff_$(SHARE_LIBTIFF).dev +$(TIFFGEN)libtiff.dev : $(TOP_MAKEFILES) $(TIFFGEN)libtiff_$(SHARE_LIBTIFF).dev $(MAKEDIRS) $(CP_) $(TIFFGEN)libtiff_$(SHARE_LIBTIFF).dev $(TIFFGEN)libtiff.dev # Define the shared version. $(TIFFGEN)libtiff_1.dev : $(TOP_MAKEFILES) $(LIBTIFF_MAK) $(ECHOGS_XE) $(JPEGGEN)jpegd.dev $(JPEGGEN)jpege.dev \ - $(tiff_11) + $(tiff_11) $(MAKEDIRS) $(SETMOD) $(TIFFGEN)libtiff_1 $(tiff_11) $(ADDMOD) $(TIFFGEN)libtiff_1 -lib $(LIBTIFF_NAME) $(ADDMOD) $(TIFFGEN)libtiff_1 -include $(JPEGGEN)jpegd.dev @@ -211,7 +211,7 @@ $(TIFFGEN)libtiff_0.dev : $(LIBTIFF_MAK) $(ECHOGS_XE) \ $(tiff_1) $(tiff_2) $(tiff_3) $(tiff_4) $(tiff_5) \ $(tiff_6) $(tiff_7) $(tiff_8) $(tiff_9) $(tiff_10) $(tiff_11) \ - $(JPEGGEN)jpegd.dev $(JPEGGEN)jpege.dev + $(JPEGGEN)jpegd.dev $(JPEGGEN)jpege.dev $(MAKEDIRS) $(SETMOD) $(TIFFGEN)libtiff_0 $(tiff_1) $(ADDMOD) $(TIFFGEN)libtiff_0 $(tiff_2) $(ADDMOD) $(TIFFGEN)libtiff_0 $(tiff_3) diff -Nru ghostscript-9.15+dfsg/base/trio.mak ghostscript-9.16~dfsg~0/base/trio.mak --- ghostscript-9.15+dfsg/base/trio.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/trio.mak 2015-03-30 08:21:24.000000000 +0000 @@ -41,6 +41,8 @@ TRIOOBJS=$(TRIOOBJ)triostr.$(OBJ) $(TRIOOBJ)trio.$(OBJ) $(TRIOOBJ)trionan.$(OBJ) +TRIODEPS=$(TRIOHDRS) $(TRIO_MAK) $(MAKEDIRS) + triodef_h=$(TRIOSRC)triodef.h trio_h=$(TRIOSRC)trio.h triop_h=$(TRIOSRC)triop.h @@ -48,23 +50,26 @@ TRIOHDRS=$(triodef_h) $(trio_h) $(triop_h) $(triostr_h) -$(TRIOOBJ)triostr.$(OBJ) : $(TRIOSRC)triostr.c $(TRIOHDRS) $(TRIO_MAK) +$(TRIOOBJ)triostr.$(OBJ) : $(TRIOSRC)triostr.c $(TRIODEPS) $(TRIOCC) $(TRIOO_)triostr.$(OBJ) $(C_) $(TRIOSRC)triostr.c -$(TRIOOBJ)trio.$(OBJ) : $(TRIOSRC)trio.c $(TRIOHDRS) $(TRIO_MAK) +$(TRIOOBJ)trio.$(OBJ) : $(TRIOSRC)trio.c $(TRIODEPS) $(TRIOCC) $(TRIOO_)trio.$(OBJ) $(C_) $(TRIOSRC)trio.c -$(TRIOOBJ)trionan.$(OBJ) : $(TRIOSRC)trionan.c $(TRIOHDRS) $(TRIO_MAK) +$(TRIOOBJ)trionan.$(OBJ) : $(TRIOSRC)trionan.c $(TRIODEPS) $(TRIOCC) $(TRIOO_)trionan.$(OBJ) $(C_) $(TRIOSRC)trionan.c -# dev file for shared (separately built) lcms library -$(TRIOGEN)trio_1.dev : $(TOP_MAKEFILES) $(TRIO_MAK) $(ECHOGS_XE) +# dev file for shared (separately built) trio library +$(TRIOGEN)trio_1.dev : $(TOP_MAKEFILES) $(TRIO_MAK) $(ECHOGS_XE) \ + $(MAKEDIRS) $(SETMOD) $(TRIOGEN)trio_1 -lib trio # dev file for compiling our own from source -$(TRIOGEN)trio_0.dev : $(TOP_MAKEFILES) $(TRIO_MAK) $(ECHOGS_XE) $(TRIOOBJS) +$(TRIOGEN)trio_0.dev : $(TOP_MAKEFILES) $(TRIO_MAK) $(ECHOGS_XE) $(TRIOOBJS) \ + $(MAKEDIRS) $(SETMOD) $(TRIOGEN)trio_0 $(TRIOOBJS) # switch in the version of lcms2.dev we're actually using -$(TRIOGEN)trio.dev : $(TOP_MAKEFILES) $(TRIOGEN)trio_$(SHARE_TRIO).dev +$(TRIOGEN)trio.dev : $(TOP_MAKEFILES) $(TRIOGEN)trio_$(SHARE_TRIO).dev \ + $(MAKEDIRS) $(CP_) $(TRIOGEN)trio_$(SHARE_TRIO).dev $(TRIOGEN)trio.dev diff -Nru ghostscript-9.15+dfsg/base/unistd_.h ghostscript-9.16~dfsg~0/base/unistd_.h --- ghostscript-9.15+dfsg/base/unistd_.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/unistd_.h 2015-03-30 08:21:24.000000000 +0000 @@ -50,6 +50,10 @@ # define isatty(fd) _isatty(fd) # define setmode(fd, mode) _setmode(fd, mode) #else + /* _XOPEN_SOURCE 500 define is needed to get + * access to pread and pwrite */ +# define _XOPEN_SOURCE 500 +# define __USE_UNIX98 # include #endif diff -Nru ghostscript-9.15+dfsg/base/unix-aux.mak ghostscript-9.16~dfsg~0/base/unix-aux.mak --- ghostscript-9.15+dfsg/base/unix-aux.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/unix-aux.mak 2015-03-30 08:21:24.000000000 +0000 @@ -28,8 +28,11 @@ # Unix platforms other than System V, and also System V Release 4 # (SVR4) platforms. -unix__=$(GLOBJ)gp_getnv.$(OBJ) $(GLOBJ)gp_upapr.$(OBJ) $(GLOBJ)gp_unix.$(OBJ) $(GLOBJ)gp_unifs.$(OBJ) $(GLOBJ)gp_unifn.$(OBJ) $(GLOBJ)gp_stdia.$(OBJ) $(GLOBJ)gp_unix_cache.$(OBJ) -$(GLGEN)unix_.dev: $(unix__) $(GLD)nosync.dev $(GLD)smd5.dev +unix__=$(GLOBJ)gp_getnv.$(OBJ) $(GLOBJ)gp_upapr.$(OBJ) $(GLOBJ)gp_unix.$(OBJ)\ + $(GLOBJ)gp_unifs.$(OBJ) $(GLOBJ)gp_unifn.$(OBJ) $(GLOBJ)gp_stdia.$(OBJ)\ + $(GLOBJ)gp_unix_cache.$(OBJ) + +$(GLGEN)unix_.dev: $(unix__) $(GLD)nosync.dev $(GLD)smd5.dev $(MAKEDIRS) $(SETMOD) $(GLGEN)unix_ $(unix__) -include $(GLD)nosync $(ADDMOD) $(GLGEN)unix_ -include $(GLD)smd5 @@ -59,7 +62,7 @@ # System V platforms other than SVR4, which lack some system calls, # but have pipes. sysv__=$(GLOBJ)gp_getnv.$(OBJ) $(GLOBJ)gp_upapr.$(OBJ) $(GLOBJ)gp_unix.$(OBJ) $(GLOBJ)gp_unifs.$(OBJ) $(GLOBJ)gp_unifn.$(OBJ) $(GLOBJ)gp_sysv.$(OBJ) -$(GLGEN)sysv_.dev: $(sysv__) $(GLD)nosync.dev +$(GLGEN)sysv_.dev: $(sysv__) $(GLD)nosync.dev $(MAKEDIRS) $(SETMOD) $(GLGEN)sysv_ $(sysv__) -include $(GLD)nosync $(GLOBJ)gp_sysv.$(OBJ): $(GLSRC)gp_sysv.c $(stdio__h) $(time__h) $(AK)\ @@ -92,7 +95,7 @@ $(AUX)gscdefs.$(OBJ) $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \ $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) $(AUX)memento.$(OBJ) -$(MKROMFS_XE)_0: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_0) +$(MKROMFS_XE)_0: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_0) $(MAKEDIRS) $(CCAUX_) $(GENOPT) $(CFLAGS) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE)_0 $(MKROMFS_OBJS_0) $(AUXEXTRALIBS) # .... and one using the zlib library linked via the command line @@ -101,7 +104,7 @@ $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \ $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) -$(MKROMFS_XE)_1: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_1) +$(MKROMFS_XE)_1: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_1) $(MAKEDIRS) $(CCAUX_) $(GENOPT) $(CFLAGS) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE)_1 $(MKROMFS_OBJS_1) $(AUXEXTRALIBS) $(MKROMFS_XE): $(MKROMFS_XE)_$(SHARE_ZLIB) $(MAKEDIRS) @@ -113,7 +116,7 @@ # The "empty" $(ECHOGS_XE) lines just append a white space line to the # header file. INCLUDE=/usr/include -$(gconfig__h): $(UNIX_AUX_MAK) $(ECHOGS_XE) +$(gconfig__h): $(UNIX_AUX_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(ECHOGS_XE) -w $(gconfig__h) -x 2f2a -s This file was generated automatically by unix-aux.mak. -s -x 2a2f $(ECHOGS_XE) -a $(gconfig__h) diff -Nru ghostscript-9.15+dfsg/base/version.mak ghostscript-9.16~dfsg~0/base/version.mak --- ghostscript-9.15+dfsg/base/version.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/version.mak 2015-03-30 08:21:24.000000000 +0000 @@ -15,10 +15,10 @@ # Major and minor version numbers. # MINOR0 is different from MINOR only if MINOR is a single digit. GS_VERSION_MAJOR=9 -GS_VERSION_MINOR=15 -GS_VERSION_MINOR0=15 +GS_VERSION_MINOR=16 +GS_VERSION_MINOR0=16 # Revision date: year x 10000 + month x 100 + day. -GS_REVISIONDATE=20140922 +GS_REVISIONDATE=20150330 # Derived values GS_VERSION=$(GS_VERSION_MAJOR)$(GS_VERSION_MINOR0) GS_DOT_VERSION=$(GS_VERSION_MAJOR).$(GS_VERSION_MINOR0) diff -Nru ghostscript-9.15+dfsg/base/zlib.mak ghostscript-9.16~dfsg~0/base/zlib.mak --- ghostscript-9.15+dfsg/base/zlib.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/base/zlib.mak 2015-03-30 08:21:24.000000000 +0000 @@ -69,7 +69,7 @@ z.config-clean : $(RMN_) $(ZGEN)zlib*.dev $(ZGEN)crc32*.dev -ZDEP=$(AK) +ZDEP=$(AK) $(MAKEDIRS) # Code common to compression and decompression. @@ -82,15 +82,18 @@ # Encoding (compression) code. -$(ZGEN)zlibe.dev : $(TOP_MAKEFILES) $(ZGEN)zlibe_$(SHARE_ZLIB).dev +$(ZGEN)zlibe.dev : $(TOP_MAKEFILES) $(ZGEN)zlibe_$(SHARE_ZLIB).dev \ + $(MAKEDIRS) $(CP_) $(ZGEN)zlibe_$(SHARE_ZLIB).dev $(ZGEN)zlibe.dev -$(ZGEN)zlibe_1.dev : $(TOP_MAKEFILES) $(ZLIB_MAK) $(ECHOGS_XE) +$(ZGEN)zlibe_1.dev : $(TOP_MAKEFILES) $(ZLIB_MAK) $(ECHOGS_XE) \ + $(MAKEDIRS) $(SETMOD) $(ZGEN)zlibe_1 -lib $(ZLIB_NAME) zlibe_=$(ZOBJ)adler32.$(OBJ) $(ZOBJ)deflate.$(OBJ) \ $(ZOBJ)compress.$(OBJ) $(ZOBJ)trees.$(OBJ) $(ZOBJ)crc32.$(OBJ) -$(ZGEN)zlibe_0.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(ZGEN)zlibc.dev $(zlibe_) +$(ZGEN)zlibe_0.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(ZGEN)zlibc.dev $(zlibe_) \ + $(MAKEDIRS) $(SETMOD) $(ZGEN)zlibe_0 $(zlibe_) $(ADDMOD) $(ZGEN)zlibe_0 -include $(ZGEN)zlibc.dev @@ -110,13 +113,16 @@ # The zlib filters per se don't need crc32, but libpng versions starting # with 0.90 do. -$(ZGEN)crc32.dev : $(TOP_MAKEFILES) $(ZGEN)crc32_$(SHARE_ZLIB).dev +$(ZGEN)crc32.dev : $(TOP_MAKEFILES) $(ZGEN)crc32_$(SHARE_ZLIB).dev \ + $(MAKEDIRS) $(CP_) $(ZGEN)crc32_$(SHARE_ZLIB).dev $(ZGEN)crc32.dev -$(ZGEN)crc32_1.dev : $(TOP_MAKEFILES) $(ZLIB_MAK) $(ECHOGS_XE) +$(ZGEN)crc32_1.dev : $(TOP_MAKEFILES) $(ZLIB_MAK) $(ECHOGS_XE) \ + $(MAKEDIRS) $(SETMOD) $(ZGEN)crc32_1 -lib $(ZLIB_NAME) -$(ZGEN)crc32_0.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(ZOBJ)crc32.$(OBJ) +$(ZGEN)crc32_0.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(ZOBJ)crc32.$(OBJ) \ + $(MAKEDIRS) $(SETMOD) $(ZGEN)crc32_0 $(ZOBJ)crc32.$(OBJ) # We have to compile crc32 without warnings, because it defines 32-bit @@ -129,7 +135,8 @@ $(ZGEN)zlibd.dev : $(TOP_MAKEFILES) $(ZGEN)zlibd_$(SHARE_ZLIB).dev $(MAKEDIRS) $(CP_) $(ZGEN)zlibd_$(SHARE_ZLIB).dev $(ZGEN)zlibd.dev -$(ZGEN)zlibd_1.dev : $(TOP_MAKEFILES) $(ZLIB_MAK) $(ECHOGS_XE) +$(ZGEN)zlibd_1.dev : $(TOP_MAKEFILES) $(ZLIB_MAK) $(ECHOGS_XE) \ + $(MAKEDIRS) $(SETMOD) $(ZGEN)zlibd_1 -lib $(ZLIB_NAME) # zlibd[12]_ list the decompression source files for zlib 1.4.x @@ -140,7 +147,7 @@ zlibd_=$(ZOBJ)inffast.$(OBJ) $(ZOBJ)inflate.$(OBJ) $(ZOBJ)inftrees.$(OBJ) $(ZOBJ)uncompr.$(OBJ) -$(ZGEN)zlibd_0.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(ZGEN)zlibc.dev $(zlibd_) +$(ZGEN)zlibd_0.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(ZGEN)zlibc.dev $(zlibd_) $(MAKEDIRS) $(SETMOD) $(ZGEN)zlibd_0 $(zlibd_) $(ADDMOD) $(ZGEN)zlibd_0 -include $(ZGEN)zlibc.dev diff -Nru ghostscript-9.15+dfsg/configure ghostscript-9.16~dfsg~0/configure --- ghostscript-9.15+dfsg/configure 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/configure 2015-03-30 08:21:24.000000000 +0000 @@ -629,6 +629,7 @@ HAVE_BSWAP32 AC_TRIO_CFLAGS SQRTF_SUBST +LCMS2_PTR_ALIGNMENT LCMS2_ENDIAN LCMS_ENDIAN HAVE_STRERROR @@ -701,7 +702,6 @@ LIBTIFFDIR SHARE_LIBTIFF LCMS2DIR -LCMSDIR WHICHLCMS SHARELCMS LIBPNGDIR @@ -732,8 +732,10 @@ HAVE_LIBIDN TRIODIR SHARE_TRIO +RECURSIVE_MUTEXATTR PTHREAD_LIBS SYNC +HAVE_PREAD_PWRITE LIBOBJS OBJDIR_BSDMAKE_WORKAROUND EGREP @@ -802,6 +804,7 @@ enable_sse2 enable_threadsafe with_large_color_index +enable_threading with_libiconv with_libidn with_libpaper @@ -810,7 +813,6 @@ enable_freetype enable_fapi with_ufst -with_lcms with_system_libtiff enable_cups with_pdftoraster @@ -1462,6 +1464,7 @@ --disable-sse2 Do not use sse2 instrinsics --enable-threadsafe enable a thread safe build - NOTE: this will exclude non-threadsafe devices + --disable-threading disable support for multithreaded rendering --disable-fontconfig Do not use fontconfig to list system fonts --disable-dbus Do not use dbus to communicate with external services @@ -1486,8 +1489,6 @@ --without-libpaper disable libpaper support --with-ufst=UFST_ROOT_DIR Use UFST - --with-lcms try to use LittleCMS 1.x instead of the default of - LittleCMS 2.x --with-system-libtiff Force using the systems libtiff --without-pdftoraster Do not include CUPS' pdftoraster filter --with-local-cups Force using the GS supplied cups code - only useful @@ -2269,6 +2270,52 @@ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. @@ -3878,8 +3925,8 @@ if test $ac_cv_c_compiler_gnu = yes; then cflags_to_try="-Wall -Wstrict-prototypes -Wundef \ -Wmissing-declarations -Wmissing-prototypes -Wwrite-strings \ --Wno-strict-aliasing -Wdeclaration-after-statement \ --fno-builtin -fno-common" +-Wno-strict-aliasing -Werror=declaration-after-statement \ +-fno-builtin -fno-common -Werror=return-type" optflags_to_try="$CC_OPT_FLAGS_TO_TRY" dbgflags_to_try="$CC_DBG_FLAGS_TO_TRY" else @@ -5280,16 +5327,83 @@ fi +for ac_func in pread pwrite +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + HAVE_PREAD_PWRITE="-DHAVE_PREAD_PWRITE=1" +else + HAVE_PREAD_PWRITE= +fi +done + + +if test "x$HAVE_PREAD_PWRITE" != "x"; then + save_cflags=$CFLAGS + CFLAGS="$CFLAGS -D__USE_UNIX98=1 -D_XOPEN_SOURCE=500" + ac_fn_c_check_decl "$LINENO" "pwrite" "ac_cv_have_decl_pwrite" "$ac_includes_default" +if test "x$ac_cv_have_decl_pwrite" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PWRITE $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + HAVE_PREAD_PWRITE= +fi +ac_fn_c_check_decl "$LINENO" "pread" "ac_cv_have_decl_pread" "$ac_includes_default" +if test "x$ac_cv_have_decl_pread" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PREAD $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + HAVE_PREAD_PWRITE= +fi + + CFLAGS=$save_cflags + if test "x$HAVE_PREAD_PWRITE" != "x"; then + GCFLAGS="$GCFLAGS -D__USE_UNIX98=1" + fi +fi + + + SYNC="nosync" PTHREAD_LIBS="" +RECURSIVE_MUTEXATTR="" -case `uname` in - MINGW*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling support for pthreads......" >&5 +# Check whether --enable-threading was given. +if test "${enable_threading+set}" = set; then : + enableval=$enable_threading; +fi + + +# if you haven't got pread/pwrite, we can't use multithreading +if test "x$HAVE_PREAD_PWRITE" != "x"; then + if test "$enable_threading" != "no"; then + case `uname` in + MINGW*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: disabling support for pthreads......" >&5 $as_echo "$as_me: WARNING: disabling support for pthreads......" >&2;} - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 $as_echo_n "checking for pthread_create in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_create+:} false; then : $as_echo_n "(cached) " >&6 @@ -5327,13 +5441,71 @@ $as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : - SYNC=posync; - PTHREAD_LIBS="-lpthread" + SYNC=posync; + PTHREAD_LIBS="-lpthread" fi - ;; -esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking recursive mutexes......." >&5 +$as_echo_n "checking recursive mutexes.......... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + static int k = PTHREAD_MUTEX_RECURSIVE; + #ifndef pthread_mutexattr_settype + #ifdef __cplusplus + (void) pthread_mutexattr_settype; + #else + (void) pthread_mutexattr_settype; + #endif + #endif + ; + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + static int k = PTHREAD_MUTEX_RECURSIVE_NP; + #ifndef pthread_mutexattr_settype + #ifdef __cplusplus + (void) pthread_mutexattr_settype; + #else + (void) pthread_mutexattr_settype; + #endif + #endif + ; + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE_NP" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + esac + fi +fi + @@ -6511,28 +6683,20 @@ WHICHLCMS= - -# Check whether --with-lcms was given. -if test "${with_lcms+set}" = set; then : - withval=$with_lcms; -fi - - -if test x$with_lcms != xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local lcms2 library source" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for local lcms2 library source" >&5 $as_echo_n "checking for local lcms2 library source... " >&6; } - LCMS2DIR=$srcdir/lcms2 - if test -f $LCMS2DIR/include/lcms2.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +LCMS2DIR=$srcdir/lcms2 +if test -f $LCMS2DIR/include/lcms2.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - SHARELCMS=0 - WHICHLCMS=lcms2 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + SHARELCMS=0 + WHICHLCMS=lcms2 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for system lcms2 library" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for system lcms2 library" >&5 $as_echo_n "checking for system lcms2 library... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmsGetTransformOutputFormat in -llcms2" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmsGetTransformOutputFormat in -llcms2" >&5 $as_echo_n "checking for cmsGetTransformOutputFormat in -llcms2... " >&6; } if ${ac_cv_lib_lcms2_cmsGetTransformOutputFormat+:} false; then : $as_echo_n "(cached) " >&6 @@ -6570,7 +6734,7 @@ $as_echo "$ac_cv_lib_lcms2_cmsGetTransformOutputFormat" >&6; } if test "x$ac_cv_lib_lcms2_cmsGetTransformOutputFormat" = xyes; then : - for ac_header in lcms2.h + for ac_header in lcms2.h do : ac_fn_c_check_header_mongrel "$LINENO" "lcms2.h" "ac_cv_header_lcms2_h" "$ac_includes_default" if test "x$ac_cv_header_lcms2_h" = xyes; then : @@ -6585,33 +6749,11 @@ fi - if test x$WHICHLCMS = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: lcms2 not found, or too old" >&5 -$as_echo "$as_me: WARNING: lcms2 not found, or too old" >&2;} - fi + if test x$WHICHLCMS = x; then + as_fn_error $? "lcms2 not found, or too old" "$LINENO" 5 fi fi -if test x$WHICHLCMS = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local lcms library source" >&5 -$as_echo_n "checking for local lcms library source... " >&6; } - LCMSDIR=$srcdir/lcms - SHARELCMS=0 - if test -f $LCMSDIR/include/lcms.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SHARELCMS=0 - WHICHLCMS=lcms - else - - as_fn_error $? "LittleCMS source not found!" "$LINENO" 5 - #AC_CHECK_LIB(lcms, cmsCreateXYZProfile, [ - # AC_CHECK_HEADERS([lcms.h], [SHARELCMS=1;LCMSDIR=""]) - # ]) - fi -fi - - @@ -6951,7 +7093,18 @@ fi - ac_fn_c_check_header_mongrel "$LINENO" "cups/raster.h" "ac_cv_header_cups_raster_h" "$ac_includes_default" + # check for a libcups header + ac_fn_c_check_header_mongrel "$LINENO" "cups/cups.h" "ac_cv_header_cups_cups_h" "$ac_includes_default" +if test "x$ac_cv_header_cups_cups_h" = xyes; then : + +else + CUPSCONFIG="" +fi + + + # And check for a libcupsimage header + if test "x$CUPSCONFIG" != x; then + ac_fn_c_check_header_mongrel "$LINENO" "cups/raster.h" "ac_cv_header_cups_raster_h" "$ac_includes_default" if test "x$ac_cv_header_cups_raster_h" = xyes; then : else @@ -6959,6 +7112,8 @@ fi + fi + if test "x$CUPSCONFIG" != x; then CUPSCFLAGS="`$CUPSCONFIG --cflags` $CFLAGS" # CUPSLINK="`$CUPSCONFIG --ldflags` `$CUPSCONFIG --static --image --libs | sed -e '1,$s/-lssl//'` $LIBS" @@ -7360,6 +7515,7 @@ JPXDEVS='' JPX_DECODER= JPX_AUTOCONF_CFLAGS= +JPX_LRINTF_SUBST= if test x$with_luratech != xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local Luratech JPEG2K library source" >&5 @@ -7437,6 +7593,15 @@ fi fi +ac_fn_c_check_decl "$LINENO" "lrintf" "ac_cv_have_decl_lrintf" "#include +" +if test "x$ac_cv_have_decl_lrintf" = xyes; then : + +else + OPJ_LRINTF_SUBST="-D\"lrintf(a)\"=\"((long)(a+0.5))\"" +fi + + # Check whether --enable-openjpeg was given. if test "${enable_openjpeg+set}" = set; then : enableval=$enable_openjpeg; @@ -7471,7 +7636,7 @@ JPX_AUTOCONF_CFLAGS="-D\"memalign(a,b)=malloc(b)\"" fi - JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO" + JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS $OPJ_LRINTF_SUBST -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO" JPXDEVS='$(PSD)jpx.dev' else @@ -8507,7 +8672,7 @@ PCX_DEVS='pcxmono pcxgray pcx16 pcx256 pcx24b pcxcmyk pcx2up' PBM_DEVS='pbm pbmraw pgm pgmraw pgnm pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw pksm pksmraw pam pamcmyk4 pamcmyk32 plan plang planm planc plank' PS_DEVS='psdf psdcmyk psdrgb pdfwrite ps2write eps2write bbox txtwrite inkcov ink_cov psdcmykog fpng' -MISC_FDEVS='ccr cif inferno mag16 mag256 mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 plan9bm sgirgb sunhmono bit bitrgb bitrgbtags bitcmyk devicen spotcmyk xcf' +MISC_FDEVS='ccr cif inferno mag16 mag256 mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 plan9bm sgirgb sunhmono bit bitrgb bitrgbtags bitcmyk devicen spotcmyk xcf plib plibg plibm plibc plibk' XPSDEV='xpswrite' while test -n "$drivers"; do @@ -9561,6 +9726,13 @@ +case `uname -a` in + *sparc*) + GCFLAGS="$GCFLAGS -DGS_USE_MEMORY_HEADER_ID=0" + ;; +esac + + if test "x$BIGENDIAN" != "x0"; then LCMS_ENDIAN="-DUSE_BIG_ENDIAN=$BIGENDIAN" LCMS2_ENDIAN="-DCMS_USE_BIG_ENDIAN=$BIGENDIAN" @@ -9573,6 +9745,17 @@ +LCMS2_PTR_ALIGNMENT= + +case `uname -a` in + *sparc*) + LCMS2_PTR_ALIGNMENT="-DCMS_PTR_ALIGNMENT=8" + ;; +esac + + + + ac_fn_c_check_func "$LINENO" "sqrtf" "ac_cv_func_sqrtf" if test "x$ac_cv_func_sqrtf" = xyes; then : SQRTF_SUBST= @@ -9583,6 +9766,22 @@ +for ac_func in strnlen +do : + ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen" +if test "x$ac_cv_func_strnlen" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRNLEN 1 +_ACEOF + HAVE_STRNLEN= +else + HAVE_STRNLEN="-D\"strnlen(a,b)=strlen(a)\"" +fi +done + + +GCFLAGS="$GCFLAGS $HAVE_STRNLEN" + ac_fn_c_check_func "$LINENO" "floorl" "ac_cv_func_floorl" diff -Nru ghostscript-9.15+dfsg/configure.ac ghostscript-9.16~dfsg~0/configure.ac --- ghostscript-9.15+dfsg/configure.ac 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/configure.ac 2015-03-30 08:21:24.000000000 +0000 @@ -195,8 +195,8 @@ if test $ac_cv_prog_gcc = yes; then cflags_to_try="-Wall -Wstrict-prototypes -Wundef \ -Wmissing-declarations -Wmissing-prototypes -Wwrite-strings \ --Wno-strict-aliasing -Wdeclaration-after-statement \ --fno-builtin -fno-common" +-Wno-strict-aliasing -Werror=declaration-after-statement \ +-fno-builtin -fno-common -Werror=return-type" optflags_to_try="$CC_OPT_FLAGS_TO_TRY" dbgflags_to_try="$CC_DBG_FLAGS_TO_TRY" else @@ -492,23 +492,76 @@ AC_CHECK_LIB(m, cos) +AC_CHECK_FUNCS([pread pwrite], [HAVE_PREAD_PWRITE="-DHAVE_PREAD_PWRITE=1"], [HAVE_PREAD_PWRITE=]) + +if test "x$HAVE_PREAD_PWRITE" != "x"; then + save_cflags=$CFLAGS + CFLAGS="$CFLAGS -D__USE_UNIX98=1 -D_XOPEN_SOURCE=500" + AC_CHECK_DECLS([pwrite,pread], [], [HAVE_PREAD_PWRITE=]) + CFLAGS=$save_cflags + if test "x$HAVE_PREAD_PWRITE" != "x"; then + GCFLAGS="$GCFLAGS -D__USE_UNIX98=1" + fi +fi + +AC_SUBST(HAVE_PREAD_PWRITE) + SYNC="nosync" PTHREAD_LIBS="" +RECURSIVE_MUTEXATTR="" -case `uname` in - MINGW*) - AC_MSG_WARN([disabling support for pthreads......]) - ;; - *) - AC_CHECK_LIB(pthread, pthread_create, [ - SYNC=posync; - PTHREAD_LIBS="-lpthread" - ]) - ;; -esac +AC_ARG_ENABLE([threading], AC_HELP_STRING([--disable-threading], + [disable support for multithreaded rendering])) + +# if you haven't got pread/pwrite, we can't use multithreading +if test "x$HAVE_PREAD_PWRITE" != "x"; then + if test "$enable_threading" != "no"; then + case `uname` in + MINGW*) + AC_MSG_WARN([disabling support for pthreads......]) + ;; + *) + AC_CHECK_LIB(pthread, pthread_create, [ + SYNC=posync; + PTHREAD_LIBS="-lpthread" + ]) + AC_MSG_CHECKING([recursive mutexes.......]) + AC_TRY_COMPILE([#include ], + [ + static int k = PTHREAD_MUTEX_RECURSIVE; + #ifndef pthread_mutexattr_settype + #ifdef __cplusplus + (void) pthread_mutexattr_settype; + #else + (void) pthread_mutexattr_settype; + #endif + #endif + ; + return 0; + ], + [RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE"], + [AC_TRY_COMPILE([#include ], + [ + static int k = PTHREAD_MUTEX_RECURSIVE_NP; + #ifndef pthread_mutexattr_settype + #ifdef __cplusplus + (void) pthread_mutexattr_settype; + #else + (void) pthread_mutexattr_settype; + #endif + #endif + ; + return 0; + ], + [RECURSIVE_MUTEXATTR="-DGS_RECURSIVE_MUTEXATTR=PTHREAD_MUTEX_RECURSIVE_NP"])]) + ;; + esac + fi +fi AC_SUBST(SYNC) AC_SUBST(PTHREAD_LIBS) +AC_SUBST(RECURSIVE_MUTEXATTR) AC_MSG_CHECKING([for local trio library source]) if test -f $srcdir/trio/trio.h; then @@ -949,48 +1002,25 @@ WHICHLCMS= -AC_ARG_WITH([lcms], AC_HELP_STRING([--with-lcms], - [try to use LittleCMS 1.x instead of the default of LittleCMS 2.x])) - -if test x$with_lcms != xyes; then - AC_MSG_CHECKING([for local lcms2 library source]) - LCMS2DIR=$srcdir/lcms2 - if test -f $LCMS2DIR/include/lcms2.h; then - AC_MSG_RESULT([yes]) - SHARELCMS=0 - WHICHLCMS=lcms2 - else - AC_MSG_RESULT([no]) - AC_MSG_CHECKING([for system lcms2 library]) - AC_CHECK_LIB(lcms2, cmsGetTransformOutputFormat, [ - AC_CHECK_HEADERS([lcms2.h], [LCMS2DIR="";SHARELCMS=1;WHICHLCMS=lcms2]) - ]) - if test x$WHICHLCMS = x; then - AC_MSG_WARN([lcms2 not found, or too old]) - fi - fi -fi - -if test x$WHICHLCMS = x; then - AC_MSG_CHECKING([for local lcms library source]) - LCMSDIR=$srcdir/lcms - SHARELCMS=0 - if test -f $LCMSDIR/include/lcms.h; then - AC_MSG_RESULT([yes]) - SHARELCMS=0 - WHICHLCMS=lcms - else - - AC_MSG_ERROR([LittleCMS source not found!]) - #AC_CHECK_LIB(lcms, cmsCreateXYZProfile, [ - # AC_CHECK_HEADERS([lcms.h], [SHARELCMS=1;LCMSDIR=""]) - # ]) +AC_MSG_CHECKING([for local lcms2 library source]) +LCMS2DIR=$srcdir/lcms2 +if test -f $LCMS2DIR/include/lcms2.h; then + AC_MSG_RESULT([yes]) + SHARELCMS=0 + WHICHLCMS=lcms2 +else + AC_MSG_RESULT([no]) + AC_MSG_CHECKING([for system lcms2 library]) + AC_CHECK_LIB(lcms2, cmsGetTransformOutputFormat, [ + AC_CHECK_HEADERS([lcms2.h], [LCMS2DIR="";SHARELCMS=1;WHICHLCMS=lcms2]) + ]) + if test x$WHICHLCMS = x; then + AC_MSG_ERROR([lcms2 not found, or too old]) fi fi AC_SUBST(SHARELCMS) AC_SUBST(WHICHLCMS) -AC_SUBST(LCMSDIR) AC_SUBST(LCMS2DIR) dnl look for libtiff, it also requires lib @@ -1148,7 +1178,13 @@ if test x$enable_cups != xno; then if test x$with_local_cups != xyes; then AC_PATH_PROG(CUPSCONFIG,cups-config) - AC_CHECK_HEADER([cups/raster.h],[],[CUPSCONFIG=""]) + # check for a libcups header + AC_CHECK_HEADER([cups/cups.h],[],[CUPSCONFIG=""]) + # And check for a libcupsimage header + if test "x$CUPSCONFIG" != x; then + AC_CHECK_HEADER([cups/raster.h],[],[CUPSCONFIG=""]) + fi + if test "x$CUPSCONFIG" != x; then dnl Use values from CUPS config... CUPSCFLAGS="`$CUPSCONFIG --cflags` $CFLAGS" @@ -1406,6 +1442,7 @@ JPXDEVS='' JPX_DECODER= JPX_AUTOCONF_CFLAGS= +JPX_LRINTF_SUBST= if test x$with_luratech != xno; then AC_MSG_CHECKING([for local Luratech JPEG2K library source]) @@ -1468,6 +1505,8 @@ fi fi +AC_CHECK_DECL(lrintf, , [OPJ_LRINTF_SUBST="-D\"lrintf(a)\"=\"((long)(a+0.5))\"]",[[#include ]]) + AC_ARG_ENABLE([openjpeg], AC_HELP_STRING([--disable-openjpeg], [Do not use OpenJPEG for JPX decoding])) @@ -1487,7 +1526,7 @@ JPX_AUTOCONF_CFLAGS="-D\"memalign(a,b)=malloc(b)\"" fi - JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO" + JPX_AUTOCONF_CFLAGS="$JPX_AUTOCONF_CFLAGS $OPJ_LRINTF_SUBST -DUSE_JPIP -DUSE_OPENJPEG_JP2 $CFLAGS_OPJ_HAVE_STDINT_H $CFLAGS_OPJ_HAVE_INTTYPES_H $CFLAGS_OPJ_BIGENDIAN $CFLAGS_OPJ_HAVE_FSEEKO" JPXDEVS='$(PSD)jpx.dev' else @@ -1709,7 +1748,7 @@ PCX_DEVS='pcxmono pcxgray pcx16 pcx256 pcx24b pcxcmyk pcx2up' PBM_DEVS='pbm pbmraw pgm pgmraw pgnm pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw pksm pksmraw pam pamcmyk4 pamcmyk32 plan plang planm planc plank' PS_DEVS='psdf psdcmyk psdrgb pdfwrite ps2write eps2write bbox txtwrite inkcov ink_cov psdcmykog fpng' -MISC_FDEVS='ccr cif inferno mag16 mag256 mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 plan9bm sgirgb sunhmono bit bitrgb bitrgbtags bitcmyk devicen spotcmyk xcf' +MISC_FDEVS='ccr cif inferno mag16 mag256 mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 plan9bm sgirgb sunhmono bit bitrgb bitrgbtags bitcmyk devicen spotcmyk xcf plib plibg plibm plibc plibk' XPSDEV='xpswrite' while test -n "$drivers"; do @@ -2143,6 +2182,16 @@ AC_CHECK_FUNCS([bzero dup2 floor gettimeofday memchr memmove memset mkdir mkfifo modf pow putenv rint setenv sqrt strchr strrchr strspn strstr]) dnl -------------------------------------------------- +dnl disable the memory header ID code on SPARC +dnl -------------------------------------------------- + +case `uname -a` in + *sparc*) + GCFLAGS="$GCFLAGS -DGS_USE_MEMORY_HEADER_ID=0" + ;; +esac + +dnl -------------------------------------------------- dnl set big/little endian for LCMS dnl -------------------------------------------------- @@ -2158,6 +2207,20 @@ AC_SUBST(LCMS2_ENDIAN) dnl -------------------------------------------------- +dnl set LCMS2 memory manager's ptr alignment for sparc +dnl -------------------------------------------------- + +LCMS2_PTR_ALIGNMENT= + +case `uname -a` in + *sparc*) + LCMS2_PTR_ALIGNMENT="-DCMS_PTR_ALIGNMENT=8" + ;; +esac + +AC_SUBST(LCMS2_PTR_ALIGNMENT) + +dnl -------------------------------------------------- dnl decide if we have to "hack" sqrtf() for lcms2 dnl -------------------------------------------------- @@ -2165,6 +2228,13 @@ AC_SUBST(SQRTF_SUBST) +dnl -------------------------------------------------- +dnl check for and possibly replace strnlen +dnl -------------------------------------------------- +AC_CHECK_FUNCS([strnlen], [HAVE_STRNLEN=],[HAVE_STRNLEN="-D\"strnlen(a,b)=strlen(a)\""]) + +GCFLAGS="$GCFLAGS $HAVE_STRNLEN" + dnl -------------------------------------------------- dnl currently just for trio diff -Nru ghostscript-9.15+dfsg/contrib/opvp/gdevopvp.c ghostscript-9.16~dfsg~0/contrib/opvp/gdevopvp.c --- ghostscript-9.15+dfsg/contrib/opvp/gdevopvp.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/contrib/opvp/gdevopvp.c 2015-03-30 08:21:24.000000000 +0000 @@ -1175,6 +1175,7 @@ FastImageReverseAngle, FastImageAll } FastImageSupportMode; + static char *fastImage = NULL; static FastImageSupportMode FastImageMode = FastImageDisable; static bool begin_image = false; diff -Nru ghostscript-9.15+dfsg/cups/gdevcups.c ghostscript-9.16~dfsg~0/cups/gdevcups.c --- ghostscript-9.15+dfsg/cups/gdevcups.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/cups/gdevcups.c 2015-03-30 08:21:24.000000000 +0000 @@ -895,19 +895,19 @@ * Then write the CUPS parameters... */ - param_string_from_string(s, cups->header.MediaClass); + param_string_from_transient_string(s, cups->header.MediaClass); if ((code = param_write_string(plist, "MediaClass", &s)) < 0) return (code); - param_string_from_string(s, cups->header.MediaColor); + param_string_from_transient_string(s, cups->header.MediaColor); if ((code = param_write_string(plist, "MediaColor", &s)) < 0) return (code); - param_string_from_string(s, cups->header.MediaType); + param_string_from_transient_string(s, cups->header.MediaType); if ((code = param_write_string(plist, "MediaType", &s)) < 0) return (code); - param_string_from_string(s, cups->header.OutputType); + param_string_from_transient_string(s, cups->header.OutputType); if ((code = param_write_string(plist, "OutputType", &s)) < 0) return (code); @@ -1059,20 +1059,20 @@ for (i = 0; i < 16; i ++) { sprintf(name, "cupsString%d", i); - param_string_from_string(s, cups->header.cupsString[i]); + param_string_from_transient_string(s, cups->header.cupsString[i]); if ((code = param_write_string(plist, strdup(name), &s)) < 0) return (code); } - param_string_from_string(s, cups->header.cupsMarkerType); + param_string_from_transient_string(s, cups->header.cupsMarkerType); if ((code = param_write_string(plist, "cupsMarkerType", &s)) < 0) return (code); - param_string_from_string(s, cups->header.cupsRenderingIntent); + param_string_from_transient_string(s, cups->header.cupsRenderingIntent); if ((code = param_write_string(plist, "cupsRenderingIntent", &s)) < 0) return (code); - param_string_from_string(s, cups->header.cupsPageSizeName); + param_string_from_transient_string(s, cups->header.cupsPageSizeName); if ((code = param_write_string(plist, "cupsPageSizeName", &s)) < 0) return (code); #endif /* CUPS_RASTER_SYNCv1 */ diff -Nru ghostscript-9.15+dfsg/debian/changelog ghostscript-9.16~dfsg~0/debian/changelog --- ghostscript-9.15+dfsg/debian/changelog 2015-07-24 20:00:56.000000000 +0000 +++ ghostscript-9.16~dfsg~0/debian/changelog 2015-08-19 02:29:41.000000000 +0000 @@ -1,3 +1,41 @@ +ghostscript (9.16~dfsg~0-0ubuntu1) wily; urgency=medium + + * New upstream release + - Ghostscript 9.16 + - "LockColorants" command line option for tiffsep and psdcmyk + devices. Specifying -dLockColorants will restrict those devices to + only the colorants list on the command line (thus: -c "<< + /SeparationColorNames [ /Cyan /Magenta /Yellow /Black /Violet + /Orange] /SeparationOrder [ /Cyan /Magenta /Yellow /Black /Violet + /Orange]>> setpagedevice"), rather than allowing the devices to + add new colorants as encountered in the input. This is, obviously, + preferable for real printers, where only a certain of inks will be + available. + - Improved high level devices handling of Forms. Whilst High level + devices (eg pdfwrite) already checked Forms to see if they are + duplicates, and if so use the initial definition. However, this + does not improve performance, since the Form PaintProc still needs + to be executed for each instance of the Form, and the matching + algorithm could, in very odd circumstances, be defeated. The new + implementation benefits both causes, meaning the second and + subsequent invocation of the form need not re-run the PaintProc, + and removes the heurisic aspect of the reuse detection. + - New URW+ fonts in which the families NimbusMono, NimbusRoman and + NimbusSans have been augmented with production quality Greek and + Cyrillic glyphs. These correspond to our substitutes for the PDF + base 14 fonts. + - Plus the usual round of bug fixes, compatibility changes, and + incremental improvements. + * 020150413_3e71154_pdfwrite_optimise_pdf_foget_resource_with_charproc_resources.patch: + Removed, included upstream. + * 2003_support_multiarch.patch: Refreshed with quilt. + * debian/rules: Added "zlib_h=" to "make" command line to work around + bug in build system. + * debian/symbols.common: Updated for new upstream source. Applied patch + which dpkg-gensymbols generated for debian/libgs9.symbols to this file. + + -- Till Kamppeter Tue, 18 Aug 2015 22:38:09 -0300 + ghostscript (9.15+dfsg-0ubuntu4) wily; urgency=medium * debian/patches/020150724_0c0b085_sanity_check_for_memory_allocation.patch: diff -Nru ghostscript-9.15+dfsg/debian/patches/020150413_3e71154_pdfwrite_optimise_pdf_foget_resource_with_charproc_resources.patch ghostscript-9.16~dfsg~0/debian/patches/020150413_3e71154_pdfwrite_optimise_pdf_foget_resource_with_charproc_resources.patch --- ghostscript-9.15+dfsg/debian/patches/020150413_3e71154_pdfwrite_optimise_pdf_foget_resource_with_charproc_resources.patch 2015-04-13 21:34:23.000000000 +0000 +++ ghostscript-9.16~dfsg~0/debian/patches/020150413_3e71154_pdfwrite_optimise_pdf_foget_resource_with_charproc_resources.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -Index: ghostscript-9.15+dfsg/devices/vector/gdevpdfu.c -=================================================================== ---- ghostscript-9.15+dfsg.orig/devices/vector/gdevpdfu.c -+++ ghostscript-9.15+dfsg/devices/vector/gdevpdfu.c -@@ -1199,7 +1199,8 @@ pdf_forget_resource(gx_device_pdf * pdev - *pprev = pres->prev; - break; - } -- for (i = 0; i < NUM_RESOURCE_CHAINS; i++) { -+ -+ for (i = (gs_id_hash(pres->rid) % NUM_RESOURCE_CHAINS); i < NUM_RESOURCE_CHAINS; i++) { - pprev = pchain + i; - for (; (pres = *pprev) != 0; pprev = &pres->next) - if (pres == pres1) { -@@ -1210,7 +1211,7 @@ pdf_forget_resource(gx_device_pdf * pdev - pres->object = 0; - } - gs_free_object(pdev->pdf_memory, pres, "pdf_forget_resource"); -- break; -+ return; - } - } - } -Index: ghostscript-9.15+dfsg/devices/vector/gdevpdti.c -=================================================================== ---- ghostscript-9.15+dfsg.orig/devices/vector/gdevpdti.c -+++ ghostscript-9.15+dfsg/devices/vector/gdevpdti.c -@@ -581,9 +581,11 @@ pdf_start_charproc_accum(gx_device_pdf * - { - pdf_char_proc_t *pcp; - pdf_resource_t *pres; -- int code = pdf_enter_substream(pdev, resourceCharProc, gs_next_ids(pdev->memory, 1), -+ int id = gs_next_ids(pdev->memory, 1); -+ int code = pdf_enter_substream(pdev, resourceCharProc, id, - &pres, false, pdev->CompressFonts); - -+ pres->rid = id; - if (code < 0) - return code; - pcp = (pdf_char_proc_t *)pres; diff -Nru ghostscript-9.15+dfsg/debian/patches/2003_support_multiarch.patch ghostscript-9.16~dfsg~0/debian/patches/2003_support_multiarch.patch --- ghostscript-9.15+dfsg/debian/patches/2003_support_multiarch.patch 2013-08-09 18:26:06.000000000 +0000 +++ ghostscript-9.16~dfsg~0/debian/patches/2003_support_multiarch.patch 2015-08-19 01:45:48.000000000 +0000 @@ -4,7 +4,7 @@ --- a/base/unix-aux.mak +++ b/base/unix-aux.mak -@@ -118,39 +118,39 @@ +@@ -121,37 +121,37 @@ $(ECHOGS_XE) -a $(gconfig__h) $(ECHOGS_XE) -a $(gconfig__h) -x 23 ifndef HAVE_DIRENT_H @@ -48,6 +48,3 @@ else $(ECHOGS_XE) -a $(gconfig__h) -x 23 define HAVE_SYS_TIMES_H 0; fi $(ECHOGS_XE) -a $(gconfig__h) -x 23 endif $(ECHOGS_XE) -a $(gconfig__h) - -- if ( test -f $(JSRCDIR)/jmemsys.h); then true; else $(ECHOGS_XE) -a $(gconfig__h) -x 23 define DONT_HAVE_JMEMSYS_H; fi -+ if ( test -f $(JSRCDIR)/jmemsys.h || test -f $(INCLUDE)/$(DEB_HOST_MULTIARCH)/jmemsys.h ); then true; else $(ECHOGS_XE) -a $(gconfig__h) -x 23 define DONT_HAVE_JMEMSYS_H; fi diff -Nru ghostscript-9.15+dfsg/debian/patches/series ghostscript-9.16~dfsg~0/debian/patches/series --- ghostscript-9.15+dfsg/debian/patches/series 2015-07-24 19:48:08.000000000 +0000 +++ ghostscript-9.16~dfsg~0/debian/patches/series 2015-08-19 01:50:35.000000000 +0000 @@ -2,6 +2,5 @@ 2002_gs_man_fix_debian.patch 2003_support_multiarch.patch 1002_pxl-make-dicctransform-default.patch -020150413_3e71154_pdfwrite_optimise_pdf_foget_resource_with_charproc_resources.patch 020150523_d73a342_gdevcups_support_color_spaces_18_19_20.patch 020150724_0c0b085_sanity_check_for_memory_allocation.patch diff -Nru ghostscript-9.15+dfsg/debian/rules ghostscript-9.16~dfsg~0/debian/rules --- ghostscript-9.15+dfsg/debian/rules 2015-02-11 03:12:49.000000000 +0000 +++ ghostscript-9.16~dfsg~0/debian/rules 2015-08-19 01:53:45.000000000 +0000 @@ -87,11 +87,12 @@ # Use system libraries # (listed in order of appearance) +# We have to add zlib_h= here due to a bug in the build system of GS 9.16 gs_opts = \ SHARE_JPEG=1 \ SHARE_LIBPNG=1 \ SHARE_LIBTIFF=1 \ - SHARE_ZLIB=1 \ + SHARE_ZLIB=1 zlib_h= \ SHARE_JBIG2=1 \ SHARE_IJS=1 \ SHARE_EXPAT=1 diff -Nru ghostscript-9.15+dfsg/debian/symbols.common ghostscript-9.16~dfsg~0/debian/symbols.common --- ghostscript-9.15+dfsg/debian/symbols.common 2015-02-11 02:18:40.000000000 +0000 +++ ghostscript-9.16~dfsg~0/debian/symbols.common 2015-08-19 02:15:16.000000000 +0000 @@ -305,6 +305,8 @@ alloc_set_not_in_save@Base 8.61.dfsg.1 alloc_unlink_chunk@Base 8.61.dfsg.1 alpha_buffer_bits@Base 9.00~dfsg + applymap16@Base 9.16~dfsg~0-0ubuntu1 + applymap8@Base 9.16~dfsg~0-0ubuntu1 arg_copy@Base 8.61.dfsg.1 arg_finit@Base 8.61.dfsg.1 arg_free@Base 9.06~dfsg~20120802-0ubuntu1 @@ -564,6 +566,12 @@ #MISSING: 9.08~rc1~dfsg-0ubuntu1# cio_skip@Base 9.06~dfsg-0ubuntu1 #MISSING: 9.08~rc1~dfsg-0ubuntu1# cio_tell@Base 9.06~dfsg-0ubuntu1 #MISSING: 9.08~rc1~dfsg-0ubuntu1# cio_write@Base 9.06~dfsg-0ubuntu1 + cl_cache_alloc@Base 9.16~dfsg~0-0ubuntu1 + cl_cache_destroy@Base 9.16~dfsg~0-0ubuntu1 + cl_cache_get_empty_slot@Base 9.16~dfsg~0-0ubuntu1 + cl_cache_load_slot@Base 9.16~dfsg~0-0ubuntu1 + cl_cache_read@Base 9.16~dfsg~0-0ubuntu1 + cl_cache_read_init@Base 9.16~dfsg~0-0ubuntu1 clip_call_copy_alpha@Base 8.61.dfsg.1 clip_call_copy_alpha_hl_color@Base 9.06~dfsg~20120802-0ubuntu1 clip_call_copy_color@Base 8.61.dfsg.1 @@ -1463,14 +1471,17 @@ get_font_name@Base 8.61.dfsg.1 get_global_op_array@Base 9.00~dfsg get_local_op_array@Base 9.00~dfsg + get_map@Base 9.16~dfsg~0-0ubuntu1 get_minst_from_memory@Base 8.61.dfsg.1 get_num_max_tile_parts@Base 9.14~dfsg-0ubuntu1 get_op_array@Base 9.00~dfsg get_space_object@Base 8.64~dfsg get_u32_msb@Base 8.61.dfsg.1 + get_unpack_proc@Base 9.16~dfsg~0-0ubuntu1 glyph_ref@Base 8.61.dfsg.1 gp_cache_insert@Base 8.61.dfsg.1 gp_cache_query@Base 8.61.dfsg.1 + gp_can_share_fdesc@Base 9.16~dfsg~0-0ubuntu1 gp_close_printer@Base 8.61.dfsg.1 gp_create_thread@Base 8.61.dfsg.1 gp_current_directory_name@Base 8.61.dfsg.1 @@ -1483,6 +1494,7 @@ gp_enumerate_fonts_init@Base 8.61.dfsg.1 gp_enumerate_fonts_next@Base 8.61.dfsg.1 gp_exit@Base 8.61.dfsg.1 + gp_fdup@Base 9.16~dfsg~0-0ubuntu1 gp_file_name_combine@Base 8.61.dfsg.1 gp_file_name_combine_generic@Base 8.61.dfsg.1 gp_file_name_current@Base 8.61.dfsg.1 @@ -1508,6 +1520,8 @@ gp_fopen_64@Base 8.61.dfsg.1 gp_fopentemp@Base 8.61.dfsg.1 gp_fopentemp_64@Base 8.61.dfsg.1 + gp_fpread@Base 9.16~dfsg~0-0ubuntu1 + gp_fpwrite@Base 9.16~dfsg~0-0ubuntu1 gp_fseek_64@Base 8.61.dfsg.1 gp_fseekable@Base 9.08~rc1~dfsg-0ubuntu1 gp_ftell_64@Base 8.61.dfsg.1 @@ -1527,6 +1541,7 @@ gp_open_printer_64@Base 8.61.dfsg.1 gp_open_scratch_file@Base 8.61.dfsg.1 gp_open_scratch_file_64@Base 8.61.dfsg.1 + gp_open_scratch_file_rm@Base 9.16~dfsg~0-0ubuntu1 gp_read_macresource@Base 8.61.dfsg.1 gp_readline@Base 8.61.dfsg.1 gp_readline_finit@Base 8.61.dfsg.1 @@ -1578,6 +1593,11 @@ gs_atx38_device@Base 8.61.dfsg.1 gs_awidthshow_begin@Base 8.61.dfsg.1 #MISSING: 9.06~dfsg~20120802-0ubuntu1# gs_awidthshow_n_init@Base 8.61.dfsg.1 + gs_band_donor_band_full@Base 9.16~dfsg~0-0ubuntu1 + gs_band_donor_band_get@Base 9.16~dfsg~0-0ubuntu1 + gs_band_donor_band_release@Base 9.16~dfsg~0-0ubuntu1 + gs_band_donor_fin@Base 9.16~dfsg~0-0ubuntu1 + gs_band_donor_init@Base 9.16~dfsg~0-0ubuntu1 gs_base_make_font@Base 8.61.dfsg.1 gs_base_same_font@Base 8.61.dfsg.1 gs_bbox_device@Base 8.61.dfsg.1 @@ -1733,6 +1753,7 @@ gs_color_space_type_DeviceN@Base 8.61.dfsg.1 gs_color_space_type_ICC@Base 9.00~dfsg gs_color_space_type_Indexed@Base 8.61.dfsg.1 + gs_color_space_type_Indexed_Named@Base 9.16~dfsg~0-0ubuntu1 gs_color_space_type_Pattern@Base 8.61.dfsg.1 gs_color_space_type_Separation@Base 8.61.dfsg.1 gs_colorspace_set_icc_equivalent@Base 9.00~dfsg @@ -2511,6 +2532,11 @@ gs_plang_device@Base 9.05~ gs_plank_device@Base 9.05~ gs_planm_device@Base 9.05~ + gs_plib_device@Base 9.16~dfsg~0-0ubuntu1 + gs_plibc_device@Base 9.16~dfsg~0-0ubuntu1 + gs_plibg_device@Base 9.16~dfsg~0-0ubuntu1 + gs_plibk_device@Base 9.16~dfsg~0-0ubuntu1 + gs_plibm_device@Base 9.16~dfsg~0-0ubuntu1 gs_png16_device@Base 8.61.dfsg.1 gs_png16m_device@Base 8.61.dfsg.1 gs_png256_device@Base 8.61.dfsg.1 @@ -2955,6 +2981,7 @@ gsicc_get_device_class@Base 9.15~dfsg-0ubuntu1 gsicc_get_device_profile_comps@Base 9.05~ gsicc_get_gscs_profile@Base 9.00~dfsg + gsicc_get_hash@Base 9.16~dfsg~0-0ubuntu1 gsicc_get_icc_buff_hash@Base 9.00~dfsg gsicc_get_link@Base 9.00~dfsg gsicc_get_link_profile@Base 9.00~dfsg @@ -3633,6 +3660,7 @@ gx_remap_concrete_DCMYK@Base 8.61.dfsg.1 gx_remap_concrete_DGray@Base 8.61.dfsg.1 gx_remap_concrete_DRGB@Base 8.61.dfsg.1 + gx_remap_named_color@Base 9.16~dfsg~0-0ubuntu1 gx_render_device_DeviceN@Base 8.61.dfsg.1 gx_render_plane_init@Base 8.61.dfsg.1 gx_restrict01_paint_1@Base 8.61.dfsg.1 @@ -3945,6 +3973,7 @@ ms_find_name_from_code@Base 8.61.dfsg.1 ms_find_size_from_code@Base 8.61.dfsg.1 name_max_string@Base 8.61.dfsg.1 + named_color_equivalent_cmyk_colors@Base 9.16~dfsg~0-0ubuntu1 names_enter_string@Base 8.61.dfsg.1 names_from_string@Base 8.61.dfsg.1 names_index@Base 8.61.dfsg.1 @@ -4352,6 +4381,7 @@ #MISSING: 9.01~dfsg-1# pdf14_encode_smask_color@Base 8.64~dfsg-3~ pdf14_get_buffer_information@Base 8.70~ pdf14_gray_cs_to_cmyk_cm@Base 8.64~dfsg + pdf14_ok_to_optimize@Base 9.16~dfsg~0-0ubuntu1 pdf14_preserve_backdrop@Base 8.64~dfsg pdf14_preserve_backdrop_cm@Base 9.14~dfsg-0ubuntu1 pdf14_put_devn_params@Base 8.61.dfsg.1 diff -Nru ghostscript-9.15+dfsg/devices/contrib.mak ghostscript-9.16~dfsg~0/devices/contrib.mak --- ghostscript-9.15+dfsg/devices/contrib.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/contrib.mak 2015-03-30 08:21:24.000000000 +0000 @@ -132,11 +132,11 @@ ### ------------------- The Hercules Graphics display ------------------- ### herc_=$(DEVOBJ)gdevherc.$(OBJ) -$(DD)herc.dev : $(herc_) +$(DD)herc.dev : $(herc_) $(MAKEDIRS) $(SETDEV) $(DD)herc $(herc_) $(DEVOBJ)gdevherc.$(OBJ) : $(DEVSRC)gdevherc.c $(GDEV) $(dos__h)\ - $(gsmatrix_h) $(gxbitmap_h) + $(gsmatrix_h) $(gxbitmap_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevherc.$(OBJ) $(C_) $(DEVSRC)gdevherc.c ### ---------------------- The Private Eye display ---------------------- ### @@ -144,10 +144,10 @@ ### please contact narf@media-lab.media.mit.edu if you have questions. ### pe_=$(DEVOBJ)gdevpe.$(OBJ) -$(DD)pe.dev : $(pe_) +$(DD)pe.dev : $(pe_) $(MAKEDIRS) $(SETDEV) $(DD)pe $(pe_) -$(DEVOBJ)gdevpe.$(OBJ) : $(DEVSRC)gdevpe.c $(GDEV) $(memory__h) +$(DEVOBJ)gdevpe.$(OBJ) : $(DEVSRC)gdevpe.c $(GDEV) $(memory__h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpe.$(OBJ) $(C_) $(DEVSRC)gdevpe.c ###### ----------------------- Other displays ------------------------ ###### @@ -157,10 +157,10 @@ ### Andy Fyfe (andy@cs.caltech.edu) if you have questions. ### att3b1_=$(DEVOBJ)gdev3b1.$(OBJ) -$(DD)att3b1.dev : $(att3b1_) +$(DD)att3b1.dev : $(att3b1_) $(MAKEDIRS) $(SETDEV) $(DD)att3b1 $(att3b1_) -$(DEVOBJ)gdev3b1.$(OBJ) : $(DEVSRC)gdev3b1.c $(GDEV) +$(DEVOBJ)gdev3b1.$(OBJ) : $(DEVSRC)gdev3b1.c $(GDEV) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdev3b1.$(OBJ) $(C_) $(DEVSRC)gdev3b1.c ### ------------------- Sony NeWS frame buffer device ------------------ ### @@ -169,10 +169,10 @@ # This is implemented as a 'printer' device. sonyfb_=$(DEVOBJ)gdevsnfb.$(OBJ) -$(DD)sonyfb.dev : $(sonyfb_) $(DD)page.dev +$(DD)sonyfb.dev : $(sonyfb_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)sonyfb $(sonyfb_) -$(DEVOBJ)gdevsnfb.$(OBJ) : $(DEVSRC)gdevsnfb.c $(PDEVH) +$(DEVOBJ)gdevsnfb.$(OBJ) : $(DEVSRC)gdevsnfb.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevsnfb.$(OBJ) $(C_) $(DEVSRC)gdevsnfb.c ### ------------------------ The SunView device ------------------------ ### @@ -180,12 +180,12 @@ ### please contact Andreas Stolcke (stolcke@icsi.berkeley.edu). ### sunview_=$(DEVOBJ)gdevsun.$(OBJ) -$(DD)sunview.dev : $(sunview_) +$(DD)sunview.dev : $(sunview_) $(MAKEDIRS) $(SETDEV) $(DD)sunview $(sunview_) $(ADDMOD) $(DEVGENDIR)sunview -lib suntool sunwindow pixrect $(DEVOBJ)gdevsun.$(OBJ) : $(DEVSRC)gdevsun.c $(GDEV) $(malloc__h)\ - $(gscdefs_h) $(gserrors_h) $(gsmatrix_h) + $(gscdefs_h) $(gserrors_h) $(gsmatrix_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevsun.$(OBJ) $(C_) $(DEVSRC)gdevsun.c ###### --------------- Memory-buffered printer devices --------------- ###### @@ -201,32 +201,32 @@ appledmp_=$(DEVOBJ)gdevadmp.$(OBJ) -$(DEVOBJ)gdevadmp.$(OBJ) : $(DEVSRC)gdevadmp.c $(PDEVH) +$(DEVOBJ)gdevadmp.$(OBJ) : $(DEVSRC)gdevadmp.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevadmp.$(OBJ) $(C_) $(DEVSRC)gdevadmp.c -$(DD)appledmp.dev : $(appledmp_) $(DD)page.dev +$(DD)appledmp.dev : $(appledmp_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)appledmp $(appledmp_) -$(DD)iwhi.dev : $(appledmp_) $(DD)page.dev +$(DD)iwhi.dev : $(appledmp_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)iwhi $(appledmp_) -$(DD)iwlo.dev : $(appledmp_) $(DD)page.dev +$(DD)iwlo.dev : $(appledmp_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)iwlo $(appledmp_) -$(DD)iwlq.dev : $(appledmp_) $(DD)page.dev +$(DD)iwlq.dev : $(appledmp_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)iwlq $(appledmp_) ### ------------ The Canon BubbleJet BJ10e and BJ200 devices ------------ ### bj10e_=$(DEVOBJ)gdevbj10.$(OBJ) -$(DD)bj10e.dev : $(bj10e_) $(DD)page.dev +$(DD)bj10e.dev : $(bj10e_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)bj10e $(bj10e_) -$(DD)bj200.dev : $(bj10e_) $(DD)page.dev +$(DD)bj200.dev : $(bj10e_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)bj200 $(bj10e_) -$(DEVOBJ)gdevbj10.$(OBJ) : $(DEVSRC)gdevbj10.c $(PDEVH) +$(DEVOBJ)gdevbj10.$(OBJ) : $(DEVSRC)gdevbj10.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevbj10.$(OBJ) $(C_) $(DEVSRC)gdevbj10.c ### ------------- The CalComp Raster Format ----------------------------- ### @@ -235,10 +235,10 @@ ### questions. ### ccr_=$(DEVOBJ)gdevccr.$(OBJ) -$(DD)ccr.dev : $(ccr_) $(DD)page.dev +$(DD)ccr.dev : $(ccr_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)ccr $(ccr_) -$(DEVOBJ)gdevccr.$(OBJ) : $(DEVSRC)gdevccr.c $(PDEVH) +$(DEVOBJ)gdevccr.$(OBJ) : $(DEVSRC)gdevccr.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevccr.$(OBJ) $(C_) $(DEVSRC)gdevccr.c ### The H-P DeskJet, PaintJet, and DesignJet family color printer devices.### @@ -257,48 +257,48 @@ cdeskjet_=$(DEVOBJ)gdevcdj.$(OBJ) $(HPPCL) -$(DD)cdeskjet.dev : $(cdeskjet_) $(DD)page.dev +$(DD)cdeskjet.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)cdeskjet $(cdeskjet_) -$(DD)cdjcolor.dev : $(cdeskjet_) $(DD)page.dev +$(DD)cdjcolor.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)cdjcolor $(cdeskjet_) -$(DD)cdjmono.dev : $(cdeskjet_) $(DD)page.dev +$(DD)cdjmono.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)cdjmono $(cdeskjet_) -$(DD)cdj500.dev : $(cdeskjet_) $(DD)page.dev +$(DD)cdj500.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)cdj500 $(cdeskjet_) -$(DD)cdj550.dev : $(cdeskjet_) $(DD)page.dev +$(DD)cdj550.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)cdj550 $(cdeskjet_) -$(DD)declj250.dev : $(cdeskjet_) $(DD)page.dev +$(DD)declj250.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)declj250 $(cdeskjet_) -$(DD)dnj650c.dev : $(cdeskjet_) $(DD)page.dev +$(DD)dnj650c.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)dnj650c $(cdeskjet_) -$(DD)lj4dith.dev : $(cdeskjet_) $(DD)page.dev +$(DD)lj4dith.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)lj4dith $(cdeskjet_) -$(DD)pj.dev : $(cdeskjet_) $(DD)page.dev +$(DD)pj.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)pj $(cdeskjet_) -$(DD)pjxl.dev : $(cdeskjet_) $(DD)page.dev +$(DD)pjxl.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)pjxl $(cdeskjet_) # Note: the pjxl300 driver also works for the CopyJet. -$(DD)pjxl300.dev : $(cdeskjet_) $(DD)page.dev +$(DD)pjxl300.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)pjxl300 $(cdeskjet_) # Note: the BJC600 driver also works for the BJC4000. -$(DD)bjc600.dev : $(cdeskjet_) $(DD)page.dev +$(DD)bjc600.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)bjc600 $(cdeskjet_) -$(DD)bjc800.dev : $(cdeskjet_) $(DD)page.dev +$(DD)bjc800.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)bjc800 $(cdeskjet_) -$(DD)escp.dev : $(cdeskjet_) $(DD)page.dev +$(DD)escp.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)escp $(cdeskjet_) # NB: you can also customise the build if required, using @@ -309,14 +309,15 @@ $(DEVOBJ)gdevcdj.$(OBJ) : $(DEVSRC)gdevcdj.c $(std_h) $(PDEVH)\ $(gsparam_h) $(gsstate_h) $(gxlum_h)\ - $(gdevbjc_h) $(gdevpcl_h) + $(gdevbjc_h) $(gdevpcl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevcdj.$(OBJ) $(C_) $(DEVSRC)gdevcdj.c djet500c_=$(DEVOBJ)gdevdjtc.$(OBJ) $(HPPCL) -$(DD)djet500c.dev : $(djet500c_) $(DD)page.dev +$(DD)djet500c.dev : $(djet500c_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)djet500c $(djet500c_) -$(DEVOBJ)gdevdjtc.$(OBJ) : $(DEVSRC)gdevdjtc.c $(PDEVH) $(malloc__h) $(gdevpcl_h) +$(DEVOBJ)gdevdjtc.$(OBJ) : $(DEVSRC)gdevdjtc.c $(PDEVH) $(malloc__h) $(gdevpcl_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevdjtc.$(OBJ) $(C_) $(DEVSRC)gdevdjtc.c ### -------------------- The H-P Color LaserJet 5/5M -------------------- ### @@ -332,23 +333,24 @@ cljet5_=$(DEVOBJ)gdevclj.$(OBJ) $(HPPCL) -$(DD)cljet5.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev +$(DD)cljet5.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(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 +$(DD)cljet5pr.dev : $(DEVS_MAK) $(cljet5_) $(GLD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)cljet5pr $(cljet5_) $(DEVOBJ)gdevclj.$(OBJ) : $(DEVSRC)gdevclj.c $(math__h) $(PDEVH)\ - $(gx_h) $(gsparam_h) $(gdevpcl_h) + $(gx_h) $(gsparam_h) $(gdevpcl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevclj.$(OBJ) $(C_) $(DEVSRC)gdevclj.c cljet5c_=$(DEVOBJ)gdevcljc.$(OBJ) $(HPPCL) -$(DD)cljet5c.dev : $(DEVS_MAK) $(cljet5c_) $(GLD)page.dev +$(DD)cljet5c.dev : $(DEVS_MAK) $(cljet5c_) $(GLD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)cljet5c $(cljet5c_) -$(DEVOBJ)gdevcljc.$(OBJ) : $(DEVSRC)gdevcljc.c $(math__h) $(PDEVH) $(gdevpcl_h) +$(DEVOBJ)gdevcljc.$(OBJ) : $(DEVSRC)gdevcljc.c $(math__h) $(PDEVH) $(gdevpcl_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevcljc.$(OBJ) $(C_) $(DEVSRC)gdevcljc.c ### --------------- The H-P LaserJet 3100 software device --------------- ### @@ -360,15 +362,17 @@ ### Ulrich Schmid (uschmid@mail.hh.provi.de) if you have questions. ### lj3100sw_=$(DEVOBJ)gdevl31s.$(OBJ) $(DEVOBJ)gdevmeds.$(OBJ) -$(DD)lj3100sw.dev : $(lj3100sw_) $(DD)page.dev +$(DD)lj3100sw.dev : $(lj3100sw_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)lj3100sw $(lj3100sw_) gdevmeds_h=$(DEVSRC)gdevmeds.h $(gdevprn_h) -$(DEVOBJ)gdevl31s.$(OBJ) : $(DEVSRC)gdevl31s.c $(gdevmeds_h) $(PDEVH) +$(DEVOBJ)gdevl31s.$(OBJ) : $(DEVSRC)gdevl31s.c $(gdevmeds_h) $(PDEVH) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevl31s.$(OBJ) $(C_) $(DEVSRC)gdevl31s.c -$(DEVOBJ)gdevmeds.$(OBJ) : $(DEVSRC)gdevmeds.c $(AK) $(gdevmeds_h) +$(DEVOBJ)gdevmeds.$(OBJ) : $(DEVSRC)gdevmeds.c $(AK) $(gdevmeds_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevmeds.$(OBJ) $(C_) $(DEVSRC)gdevmeds.c ### ------ CoStar LabelWriter II II/Plus device ------ ### @@ -376,13 +380,13 @@ coslw_=$(DEVOBJ)gdevcslw.$(OBJ) -$(DD)coslw2p.dev : $(coslw_) $(DD)page.dev +$(DD)coslw2p.dev : $(coslw_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)coslw2p $(coslw_) -$(DD)coslwxl.dev : $(coslw_) $(DD)page.dev +$(DD)coslwxl.dev : $(coslw_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)coslwxl $(coslw_) -$(DEVOBJ)gdevcslw.$(OBJ) : $(DEVSRC)gdevcslw.c $(PDEVH) +$(DEVOBJ)gdevcslw.$(OBJ) : $(DEVSRC)gdevcslw.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevcslw.$(OBJ) $(C_) $(DEVSRC)gdevcslw.c ### -------------------- The Mitsubishi CP50 printer -------------------- ### @@ -390,10 +394,10 @@ ### Michael Hu (michael@ximage.com) if you have questions. ### cp50_=$(DEVOBJ)gdevcp50.$(OBJ) -$(DD)cp50.dev : $(cp50_) $(DD)page.dev +$(DD)cp50.dev : $(cp50_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)cp50 $(cp50_) -$(DEVOBJ)gdevcp50.$(OBJ) : $(DEVSRC)gdevcp50.c $(PDEVH) +$(DEVOBJ)gdevcp50.$(OBJ) : $(DEVSRC)gdevcp50.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevcp50.$(OBJ) $(C_) $(DEVSRC)gdevcp50.c ### ----------------- The generic Epson printer device ----------------- ### @@ -405,21 +409,21 @@ epson_=$(DEVOBJ)gdevepsn.$(OBJ) -$(DD)epson.dev : $(epson_) $(DD)page.dev +$(DD)epson.dev : $(epson_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)epson $(epson_) -$(DD)eps9mid.dev : $(epson_) $(DD)page.dev +$(DD)eps9mid.dev : $(epson_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)eps9mid $(epson_) -$(DD)eps9high.dev : $(epson_) $(DD)page.dev +$(DD)eps9high.dev : $(epson_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)eps9high $(epson_) -$(DEVOBJ)gdevepsn.$(OBJ) : $(DEVSRC)gdevepsn.c $(PDEVH) +$(DEVOBJ)gdevepsn.$(OBJ) : $(DEVSRC)gdevepsn.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevepsn.$(OBJ) $(C_) $(DEVSRC)gdevepsn.c ### ----------------- The IBM Proprinter printer device ---------------- ### -$(DD)ibmpro.dev : $(epson_) $(DD)page.dev +$(DD)ibmpro.dev : $(epson_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)ibmpro $(epson_) ### -------------- The Epson LQ-2550 color printer device -------------- ### @@ -427,10 +431,10 @@ ### Dave St. Clair (dave@exlog.com) if you have questions. ### epsonc_=$(DEVOBJ)gdevepsc.$(OBJ) -$(DD)epsonc.dev : $(epsonc_) $(DD)page.dev +$(DD)epsonc.dev : $(epsonc_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)epsonc $(epsonc_) -$(DEVOBJ)gdevepsc.$(OBJ) : $(DEVSRC)gdevepsc.c $(PDEVH) +$(DEVOBJ)gdevepsc.$(OBJ) : $(DEVSRC)gdevepsc.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevepsc.$(OBJ) $(C_) $(DEVSRC)gdevepsc.c ### ------------- The Epson ESC/P 2 language printer devices ------------- ### @@ -442,36 +446,36 @@ ESCP2=$(DEVOBJ)gdevescp.$(OBJ) -$(DEVOBJ)gdevescp.$(OBJ) : $(DEVSRC)gdevescp.c $(PDEVH) +$(DEVOBJ)gdevescp.$(OBJ) : $(DEVSRC)gdevescp.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevescp.$(OBJ) $(C_) $(DEVSRC)gdevescp.c -$(DD)ap3250.dev : $(ESCP2) $(DD)page.dev +$(DD)ap3250.dev : $(ESCP2) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)ap3250 $(ESCP2) -$(DD)st800.dev : $(ESCP2) $(DD)page.dev +$(DD)st800.dev : $(ESCP2) $(DD)page.dev $(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 +$(DD)stcolor.dev : $(stcolor1_) $(stcolor2_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)stcolor $(stcolor1_) $(ADDMOD) $(DD)stcolor -obj $(stcolor2_) gdevstc_h=$(DEVSRC)gdevstc.h $(gdevprn_h) $(gsparam_h) $(gsstate_h) -$(DEVOBJ)gdevstc.$(OBJ) : $(DEVSRC)gdevstc.c $(gdevstc_h) $(PDEVH) +$(DEVOBJ)gdevstc.$(OBJ) : $(DEVSRC)gdevstc.c $(gdevstc_h) $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevstc.$(OBJ) $(C_) $(DEVSRC)gdevstc.c -$(DEVOBJ)gdevstc1.$(OBJ) : $(DEVSRC)gdevstc1.c $(gdevstc_h) $(PDEVH) +$(DEVOBJ)gdevstc1.$(OBJ) : $(DEVSRC)gdevstc1.c $(gdevstc_h) $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevstc1.$(OBJ) $(C_) $(DEVSRC)gdevstc1.c -$(DEVOBJ)gdevstc2.$(OBJ) : $(DEVSRC)gdevstc2.c $(gdevstc_h) $(PDEVH) +$(DEVOBJ)gdevstc2.$(OBJ) : $(DEVSRC)gdevstc2.c $(gdevstc_h) $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevstc2.$(OBJ) $(C_) $(DEVSRC)gdevstc2.c -$(DEVOBJ)gdevstc3.$(OBJ) : $(DEVSRC)gdevstc3.c $(gdevstc_h) $(PDEVH) +$(DEVOBJ)gdevstc3.$(OBJ) : $(DEVSRC)gdevstc3.c $(gdevstc_h) $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevstc3.$(OBJ) $(C_) $(DEVSRC)gdevstc3.c -$(DEVOBJ)gdevstc4.$(OBJ) : $(DEVSRC)gdevstc4.c $(gdevstc_h) $(PDEVH) +$(DEVOBJ)gdevstc4.$(OBJ) : $(DEVSRC)gdevstc4.c $(gdevstc_h) $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevstc4.$(OBJ) $(C_) $(DEVSRC)gdevstc4.c ### --------------- Ugly/Update -> Unified Printer Driver ---------------- ### @@ -479,10 +483,10 @@ ### Gunther Hess (gunther@elmos.de) ### uniprint_=$(DEVOBJ)gdevupd.$(OBJ) -$(DD)uniprint.dev : $(uniprint_) $(DD)page.dev +$(DD)uniprint.dev : $(uniprint_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)uniprint $(uniprint_) -$(DEVOBJ)gdevupd.$(OBJ) : $(DEVSRC)gdevupd.c $(PDEVH) $(gsparam_h) +$(DEVOBJ)gdevupd.$(OBJ) : $(DEVSRC)gdevupd.c $(PDEVH) $(gsparam_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevupd.$(OBJ) $(C_) $(DEVSRC)gdevupd.c ### ------------ The H-P PaintJet color printer device ----------------- ### @@ -493,16 +497,16 @@ PJET=$(DEVOBJ)gdevpjet.$(OBJ) $(HPPCL) -$(DEVOBJ)gdevpjet.$(OBJ) : $(DEVSRC)gdevpjet.c $(PDEVH) $(gdevpcl_h) +$(DEVOBJ)gdevpjet.$(OBJ) : $(DEVSRC)gdevpjet.c $(PDEVH) $(gdevpcl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpjet.$(OBJ) $(C_) $(DEVSRC)gdevpjet.c -$(DD)lj250.dev : $(PJET) $(DD)page.dev +$(DD)lj250.dev : $(PJET) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)lj250 $(PJET) -$(DD)paintjet.dev : $(PJET) $(DD)page.dev +$(DD)paintjet.dev : $(PJET) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)paintjet $(PJET) -$(DD)pjetxl.dev : $(PJET) $(DD)page.dev +$(DD)pjetxl.dev : $(PJET) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)pjetxl $(PJET) ###--------------------- The Brother HL 7x0 printer --------------------- ### @@ -513,10 +517,10 @@ ### for questions about usage with the MFC6550MC Fax Machine. ### hl7x0_=$(DEVOBJ)gdevhl7x.$(OBJ) -$(DD)hl7x0.dev : $(hl7x0_) $(DD)page.dev +$(DD)hl7x0.dev : $(hl7x0_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)hl7x0 $(hl7x0_) -$(DEVOBJ)gdevhl7x.$(OBJ) : $(DEVSRC)gdevhl7x.c $(PDEVH) $(gdevpcl_h) +$(DEVOBJ)gdevhl7x.$(OBJ) : $(DEVSRC)gdevhl7x.c $(PDEVH) $(gdevpcl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevhl7x.$(OBJ) $(C_) $(DEVSRC)gdevhl7x.c ### -------------- Imagen ImPress Laser Printer device ----------------- ### @@ -527,13 +531,13 @@ ### You may also add -DA4 if needed for A4 paper. ### imagen_=$(DEVOBJ)gdevimgn.$(OBJ) -$(DD)imagen.dev : $(imagen_) $(DD)page.dev +$(DD)imagen.dev : $(imagen_) $(DD)page.dev $(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) +$(DEVOBJ)gdevimgn.$(OBJ) : $(DEVSRC)gdevimgn.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(IMGN_OPT) $(DEVO_)gdevimgn.$(OBJ) $(C_) $(DEVSRC)gdevimgn.c ### ------- The IBM 3852 JetPrinter color inkjet printer device -------- ### @@ -544,10 +548,10 @@ ### width of the jetprinter itself.) ### jetp3852_=$(DEVOBJ)gdev3852.$(OBJ) -$(DD)jetp3852.dev : $(jetp3852_) $(DD)page.dev +$(DD)jetp3852.dev : $(jetp3852_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)jetp3852 $(jetp3852_) -$(DEVOBJ)gdev3852.$(OBJ) : $(DEVSRC)gdev3852.c $(PDEVH) $(gdevpcl_h) +$(DEVOBJ)gdev3852.$(OBJ) : $(DEVSRC)gdev3852.c $(PDEVH) $(gdevpcl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdev3852.$(OBJ) $(C_) $(DEVSRC)gdev3852.c ### ---------- The Canon LBP-8II and LIPS III printer devices ---------- ### @@ -556,13 +560,13 @@ ### Lauri Paatero, lauri.paatero@paatero.pp.fi ### lbp8_=$(DEVOBJ)gdevlbp8.$(OBJ) -$(DD)lbp8.dev : $(lbp8_) $(DD)page.dev +$(DD)lbp8.dev : $(lbp8_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)lbp8 $(lbp8_) -$(DD)lips3.dev : $(lbp8_) $(DD)page.dev +$(DD)lips3.dev : $(lbp8_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)lips3 $(lbp8_) -$(DEVOBJ)gdevlbp8.$(OBJ) : $(DEVSRC)gdevlbp8.c $(PDEVH) +$(DEVOBJ)gdevlbp8.$(OBJ) : $(DEVSRC)gdevlbp8.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevlbp8.$(OBJ) $(C_) $(DEVSRC)gdevlbp8.c ### -------------- The Epson LP-8000 laser printer device -------------- ### @@ -570,10 +574,10 @@ ### Oleg Fat'yanov if you have questions.### lp8000_=$(DEVOBJ)gdevlp8k.$(OBJ) -$(DD)lp8000.dev : $(lp8000_) $(DD)page.dev +$(DD)lp8000.dev : $(lp8000_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)lp8000 $(lp8000_) -$(DEVOBJ)gdevlp8k.$(OBJ) : $(DEVSRC)gdevlp8k.c $(PDEVH) +$(DEVOBJ)gdevlp8k.$(OBJ) : $(DEVSRC)gdevlp8k.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevlp8k.$(OBJ) $(C_) $(DEVSRC)gdevlp8k.c ### -------------- The C.Itoh M8510 printer device --------------------- ### @@ -581,10 +585,10 @@ ### Smith if you have questions. ### m8510_=$(DEVOBJ)gdev8510.$(OBJ) -$(DD)m8510.dev : $(m8510_) $(DD)page.dev +$(DD)m8510.dev : $(m8510_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)m8510 $(m8510_) -$(DEVOBJ)gdev8510.$(OBJ) : $(DEVSRC)gdev8510.c $(PDEVH) +$(DEVOBJ)gdev8510.$(OBJ) : $(DEVSRC)gdev8510.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdev8510.$(OBJ) $(C_) $(DEVSRC)gdev8510.c ### -------------- 24pin Dot-matrix printer with 360DPI ---------------- ### @@ -595,13 +599,13 @@ ### questions about the Epson LQ850. ### dm24_=$(DEVOBJ)gdevdm24.$(OBJ) -$(DD)necp6.dev : $(dm24_) $(DD)page.dev +$(DD)necp6.dev : $(dm24_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)necp6 $(dm24_) -$(DD)lq850.dev : $(dm24_) $(DD)page.dev +$(DD)lq850.dev : $(dm24_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)lq850 $(dm24_) -$(DEVOBJ)gdevdm24.$(OBJ) : $(DEVSRC)gdevdm24.c $(PDEVH) +$(DEVOBJ)gdevdm24.$(OBJ) : $(DEVSRC)gdevdm24.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevdm24.$(OBJ) $(C_) $(DEVSRC)gdevdm24.c ### ----------------- Lexmark 5700 printer ----------------------------- ### @@ -609,10 +613,10 @@ ### Stephen Taylor (setaylor@ma.ultranet.com) if you have questions. ### lxm5700m_=$(DEVOBJ)gdevlxm.$(OBJ) -$(DD)lxm5700m.dev : $(lxm5700m_) $(DD)page.dev +$(DD)lxm5700m.dev : $(lxm5700m_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)lxm5700m $(lxm5700m_) -$(DEVOBJ)gdevlxm.$(OBJ) : $(DEVSRC)gdevlxm.c $(PDEVH) $(gsparams_h) +$(DEVOBJ)gdevlxm.$(OBJ) : $(DEVSRC)gdevlxm.c $(PDEVH) $(gsparams_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevlxm.$(OBJ) $(C_) $(DEVSRC)gdevlxm.c ### ----------------- The Okidata MicroLine 182 device ----------------- ### @@ -620,10 +624,10 @@ ### Maarten Koning (smeg@bnr.ca) if you have questions. ### oki182_=$(DEVOBJ)gdevo182.$(OBJ) -$(DD)oki182.dev : $(oki182_) $(DD)page.dev +$(DD)oki182.dev : $(oki182_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)oki182 $(oki182_) -$(DEVOBJ)gdevo182.$(OBJ) : $(DEVSRC)gdevo182.c $(PDEVH) +$(DEVOBJ)gdevo182.$(OBJ) : $(DEVSRC)gdevo182.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevo182.$(OBJ) $(C_) $(DEVSRC)gdevo182.c ### ------------- The Okidata IBM compatible printer device ------------ ### @@ -631,10 +635,10 @@ ### Charles Mack (chasm@netcom.com) if you have questions. ### okiibm_=$(DEVOBJ)gdevokii.$(OBJ) -$(DD)okiibm.dev : $(okiibm_) $(DD)page.dev +$(DD)okiibm.dev : $(okiibm_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)okiibm $(okiibm_) -$(DEVOBJ)gdevokii.$(OBJ) : $(DEVSRC)gdevokii.c $(PDEVH) +$(DEVOBJ)gdevokii.$(OBJ) : $(DEVSRC)gdevokii.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevokii.$(OBJ) $(C_) $(DEVSRC)gdevokii.c ### ------------------ The Epson Stylus Photo devices ------------------ ### @@ -642,10 +646,10 @@ ### Zoltan Kocsi (zoltan@bendor.com.au) if you have questions. ### photoex_=$(DEVOBJ)gdevphex.$(OBJ) -$(DD)photoex.dev : $(photoex_) $(DD)page.dev +$(DD)photoex.dev : $(photoex_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)photoex $(photoex_) -$(DEVOBJ)gdevphex.$(OBJ) : $(DEVSRC)gdevphex.c $(PDEVH) +$(DEVOBJ)gdevphex.$(OBJ) : $(DEVSRC)gdevphex.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevphex.$(OBJ) $(C_) $(DEVSRC)gdevphex.c ### ------------- The Ricoh 4081 laser printer device ------------------ ### @@ -653,11 +657,11 @@ ### please contact kdw@oasis.icl.co.uk if you have questions. ### r4081_=$(DEVOBJ)gdev4081.$(OBJ) -$(DD)r4081.dev : $(r4081_) $(DD)page.dev +$(DD)r4081.dev : $(r4081_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)r4081 $(r4081_) -$(DEVOBJ)gdev4081.$(OBJ) : $(DEVSRC)gdev4081.c $(PDEVH) +$(DEVOBJ)gdev4081.$(OBJ) : $(DEVSRC)gdev4081.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdev4081.$(OBJ) $(C_) $(DEVSRC)gdev4081.c ### -------------------- Sony NWP533 printer device -------------------- ### @@ -665,10 +669,10 @@ ### Kivinen (kivinen@joker.cs.hut.fi) if you have questions. ### nwp533_=$(DEVOBJ)gdevn533.$(OBJ) -$(DD)nwp533.dev : $(nwp533_) $(DD)page.dev +$(DD)nwp533.dev : $(nwp533_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)nwp533 $(nwp533_) -$(DEVOBJ)gdevn533.$(OBJ) : $(DEVSRC)gdevn533.c $(PDEVH) +$(DEVOBJ)gdevn533.$(OBJ) : $(DEVSRC)gdevn533.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevn533.$(OBJ) $(C_) $(DEVSRC)gdevn533.c ### ------------------------- The SPARCprinter ------------------------- ### @@ -678,10 +682,10 @@ ### Please consult the source code for additional documentation. ### sparc_=$(DEVOBJ)gdevsppr.$(OBJ) -$(DD)sparc.dev : $(sparc_) $(DD)page.dev +$(DD)sparc.dev : $(sparc_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)sparc $(sparc_) -$(DEVOBJ)gdevsppr.$(OBJ) : $(DEVSRC)gdevsppr.c $(PDEVH) +$(DEVOBJ)gdevsppr.$(OBJ) : $(DEVSRC)gdevsppr.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevsppr.$(OBJ) $(C_) $(DEVSRC)gdevsppr.c ### ----------------- The StarJet SJ48 device -------------------------- ### @@ -690,7 +694,7 @@ ### please contact Mats Akerblom (f86ma@dd.chalmers.se). ### sj48_=$(DEVOBJ)gdevsj48.$(OBJ) -$(DD)sj48.dev : $(sj48_) $(DD)page.dev +$(DD)sj48.dev : $(sj48_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)sj48 $(sj48_) $(DEVOBJ)gdevsj48.$(OBJ) : $(DEVSRC)gdevsj48.c $(PDEVH) @@ -702,16 +706,16 @@ ### if you have questions. ### t4693d_=$(DEVOBJ)gdev4693.$(OBJ) -$(DD)t4693d2.dev : $(t4693d_) $(DD)page.dev +$(DD)t4693d2.dev : $(t4693d_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)t4693d2 $(t4693d_) -$(DD)t4693d4.dev : $(t4693d_) $(DD)page.dev +$(DD)t4693d4.dev : $(t4693d_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)t4693d4 $(t4693d_) -$(DD)t4693d8.dev : $(t4693d_) $(DD)page.dev +$(DD)t4693d8.dev : $(t4693d_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)t4693d8 $(t4693d_) -$(DEVOBJ)gdev4693.$(OBJ) : $(DEVSRC)gdev4693.c $(PDEVH) +$(DEVOBJ)gdev4693.$(OBJ) : $(DEVSRC)gdev4693.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdev4693.$(OBJ) $(C_) $(DEVSRC)gdev4693.c ### -------------------- Tektronix ink-jet printers -------------------- ### @@ -719,10 +723,10 @@ ### Karsten Spang (spang@nbivax.nbi.dk) if you have questions. ### tek4696_=$(DEVOBJ)gdevtknk.$(OBJ) -$(DD)tek4696.dev : $(tek4696_) $(DD)page.dev +$(DD)tek4696.dev : $(tek4696_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)tek4696 $(tek4696_) -$(DEVOBJ)gdevtknk.$(OBJ) : $(DEVSRC)gdevtknk.c $(PDEVH) $(malloc__h) +$(DEVOBJ)gdevtknk.$(OBJ) : $(DEVSRC)gdevtknk.c $(PDEVH) $(malloc__h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevtknk.$(OBJ) $(C_) $(DEVSRC)gdevtknk.c ###### ------------------------- Fax devices ------------------------- ###### @@ -733,12 +737,12 @@ cfax_=$(DEVOBJ)gdevcfax.$(OBJ) -$(DD)cfax.dev : $(cfax_) $(DD)fax.dev +$(DD)cfax.dev : $(cfax_) $(DD)fax.dev $(MAKEDIRS) $(SETDEV) $(DD)cfax $(cfax_) $(ADDMOD) $(DD)cfax -include $(DD)fax $(DEVOBJ)gdevcfax.$(OBJ) : $(DEVSRC)gdevcfax.c $(PDEVH)\ - $(gdevfax_h) $(scfx_h) $(strimpl_h) + $(gdevfax_h) $(scfx_h) $(strimpl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevcfax.$(OBJ) $(C_) $(DEVSRC)gdevcfax.c ### ------------------------- The DigiFAX device ------------------------ ### @@ -750,16 +754,16 @@ dfax_=$(DEVOBJ)gdevdfax.$(OBJ) -$(DD)dfaxlow.dev : $(dfax_) $(DD)tfax.dev +$(DD)dfaxlow.dev : $(dfax_) $(DD)tfax.dev $(MAKEDIRS) $(SETDEV) $(DD)dfaxlow $(dfax_) $(ADDMOD) $(DEVGEN)dfaxlow -include $(DD)tfax -$(DD)dfaxhigh.dev : $(dfax_) $(DD)tfax.dev +$(DD)dfaxhigh.dev : $(dfax_) $(DD)tfax.dev $(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) + $(gdevfax_h) $(gdevtfax_h) $(scfx_h) $(strimpl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevdfax.$(OBJ) $(C_) $(DEVSRC)gdevdfax.c ###### --------------------- Raster file formats --------------------- ###### @@ -769,10 +773,10 @@ ### Frederic Petrot (petrot@masi.ibp.fr) if you have questions. ### cif_=$(DEVOBJ)gdevcif.$(OBJ) -$(DD)cif.dev : $(cif_) $(DD)page.dev +$(DD)cif.dev : $(cif_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)cif $(cif_) -$(DEVOBJ)gdevcif.$(OBJ) : $(DEVSRC)gdevcif.c $(PDEVH) +$(DEVOBJ)gdevcif.$(OBJ) : $(DEVSRC)gdevcif.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevcif.$(OBJ) $(C_) $(DEVSRC)gdevcif.c ### ------------------------- Inferno bitmaps -------------------------- ### @@ -780,11 +784,11 @@ ### Russ Cox if you have questions. ### inferno_=$(DEVOBJ)gdevifno.$(OBJ) -$(DD)inferno.dev : $(inferno_) $(DD)page.dev +$(DD)inferno.dev : $(inferno_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)inferno $(inferno_) $(DEVOBJ)gdevifno.$(OBJ) : $(DEVSRC)gdevifno.c $(PDEVH)\ - $(gsparam_h) + $(gsparam_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevifno.$(OBJ) $(C_) $(DEVSRC)gdevifno.c ### --------------------------- MGR devices ---------------------------- ### @@ -796,36 +800,36 @@ gdevmgr_h= $(DEVSRC)gdevmgr.h $(DEVOBJ)gdevmgr.$(OBJ) : $(DEVSRC)gdevmgr.c $(PDEVH)\ - $(gdevmgr_h) $(gdevpccm_h) + $(gdevmgr_h) $(gdevpccm_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevmgr.$(OBJ) $(C_) $(DEVSRC)gdevmgr.c -$(DD)mgrmono.dev : $(MGR) $(DD)page.dev +$(DD)mgrmono.dev : $(MGR) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)mgrmono $(MGR) -$(DD)mgrgray2.dev : $(MGR) $(DD)page.dev +$(DD)mgrgray2.dev : $(MGR) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)mgrgray2 $(MGR) -$(DD)mgrgray4.dev : $(MGR) $(DD)page.dev +$(DD)mgrgray4.dev : $(MGR) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)mgrgray4 $(MGR) -$(DD)mgrgray8.dev : $(MGR) $(DD)page.dev +$(DD)mgrgray8.dev : $(MGR) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)mgrgray8 $(MGR) -$(DD)mgr4.dev : $(MGR) $(DD)page.dev +$(DD)mgr4.dev : $(MGR) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)mgr4 $(MGR) -$(DD)mgr8.dev : $(MGR) $(DD)page.dev +$(DD)mgr8.dev : $(MGR) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)mgr8 $(MGR) ### -------------------------- SGI RGB pixmaps -------------------------- ### sgirgb_=$(DEVOBJ)gdevsgi.$(OBJ) -$(DD)sgirgb.dev : $(sgirgb_) $(DD)page.dev +$(DD)sgirgb.dev : $(sgirgb_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)sgirgb $(sgirgb_) gdevsgi_h=$(DEVSRC)gdevsgi.h -$(DEVOBJ)gdevsgi.$(OBJ) : $(DEVSRC)gdevsgi.c $(PDEVH) $(gdevsgi_h) +$(DEVOBJ)gdevsgi.$(OBJ) : $(DEVSRC)gdevsgi.c $(PDEVH) $(gdevsgi_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevsgi.$(OBJ) $(C_) $(DEVSRC)gdevsgi.c ### ---------------- Sun raster files ---------------- ### @@ -833,10 +837,10 @@ sunr_=$(DEVOBJ)gdevsunr.$(OBJ) # Harlequin variant, 1-bit -$(DD)sunhmono.dev : $(sunr_) $(DD)page.dev +$(DD)sunhmono.dev : $(sunr_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)sunhmono $(sunr_) -$(DEVOBJ)gdevsunr.$(OBJ) : $(DEVSRC)gdevsunr.c $(PDEVH) +$(DEVOBJ)gdevsunr.$(OBJ) : $(DEVSRC)gdevsunr.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevsunr.$(OBJ) $(C_) $(DEVSRC)gdevsunr.c @@ -847,16 +851,16 @@ ### 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 +$(DD)ljet4pjl.dev : $(HPMONO) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)ljet4pjl $(HPMONO) -$(DD)lj4dithp.dev : $(cdeskjet_) $(DD)page.dev +$(DD)lj4dithp.dev : $(cdeskjet_) $(DD)page.dev $(MAKEDIRS) $(SETPDEV) $(DD)lj4dithp $(cdeskjet_) -$(DD)dj505j.dev : $(cdeskjet_) +$(DD)dj505j.dev : $(cdeskjet_) $(MAKEDIRS) $(SETPDEV) $(DD)dj505j $(cdeskjet_) -$(DD)picty180.dev : $(cdeskjet_) +$(DD)picty180.dev : $(cdeskjet_) $(MAKEDIRS) $(SETPDEV) $(DD)picty180 $(cdeskjet_) ######################################################################### diff -Nru ghostscript-9.15+dfsg/devices/devs.mak ghostscript-9.16~dfsg~0/devices/devs.mak --- ghostscript-9.15+dfsg/devices/devs.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/devs.mak 2015-03-30 08:21:24.000000000 +0000 @@ -292,19 +292,19 @@ # Implement dynamic color management for 8-bit mapped color displays. $(DEVOBJ)gdev8bcm.$(OBJ) : $(DEVSRC)gdev8bcm.c $(AK)\ - $(gx_h) $(gxdevice_h) $(gdev8bcm_h) + $(gx_h) $(gxdevice_h) $(gdev8bcm_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdev8bcm.$(OBJ) $(C_) $(DEVSRC)gdev8bcm.c # Generate Canon BJC command sequences. $(DEVOBJ)gdevcbjc.$(OBJ) : $(DEVSRC)gdevcbjc.c $(AK)\ - $(std_h) $(stream_h) $(gdevcbjc_h) + $(std_h) $(stream_h) $(gdevcbjc_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevcbjc.$(OBJ) $(C_) $(DEVSRC)gdevcbjc.c # Support for writing PostScript (high- or low-level). $(DEVOBJ)gdevpsu.$(OBJ) : $(DEVVECSRC)gdevpsu.c $(GX) $(GDEV) $(math__h) $(time__h)\ $(stat__h) $(unistd__h)\ $(gdevpsu_h) $(gscdefs_h) $(gxdevice_h)\ - $(spprint_h) $(stream_h) + $(spprint_h) $(stream_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpsu.$(OBJ) $(C_) $(DEVVECSRC)gdevpsu.c ###### ------------------- MS-DOS display devices ------------------- ###### @@ -322,24 +322,26 @@ EGAVGA=$(EGAVGA_DOS) #**************** $(CCD) gdevevga.c -$(DEVOBJ)gdevevga.$(OBJ) : $(DEVSRC)gdevevga.c $(GDEV) $(memory__h) $(gdevpcfb_h) +$(DEVOBJ)gdevevga.$(OBJ) : $(DEVSRC)gdevevga.c $(GDEV) $(memory__h) $(gdevpcfb_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevevga.$(OBJ) $(C_) $(DEVSRC)gdevevga.c -$(DEVOBJ)gdevsco.$(OBJ) : $(DEVSRC)gdevsco.c $(GDEV) $(memory__h) $(gdevpcfb_h) +$(DEVOBJ)gdevsco.$(OBJ) : $(DEVSRC)gdevsco.c $(GDEV) $(memory__h) $(gdevpcfb_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevsco.$(OBJ) $(C_) $(DEVSRC)gdevsco.c # Common code for MS-DOS and SCO. #**************** $(CCD) gdevpcfb.c $(DEVOBJ)gdevpcfb.$(OBJ) : $(DEVSRC)gdevpcfb.c $(GDEV) $(memory__h)\ - $(gdevpccm_h) $(gdevpcfb_h) $(gsparam_h) + $(gdevpccm_h) $(gdevpcfb_h) $(gsparam_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpcfb.$(OBJ) $(C_) $(DEVSRC)gdevpcfb.c # The EGA/VGA family includes EGA and VGA. Many SuperVGAs in 800x600, # 16-color mode can share the same code; see the next section below. -$(DD)ega.dev : $(DEVS_MAK) $(EGAVGA) $(GDEV) +$(DD)ega.dev : $(DEVS_MAK) $(EGAVGA) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)ega $(EGAVGA) -$(DD)vga.dev : $(DEVS_MAK) $(EGAVGA) $(GDEV) +$(DD)vga.dev : $(DEVS_MAK) $(EGAVGA) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)vga $(EGAVGA) ### ------------------------- SuperVGA displays ------------------------ ### @@ -351,7 +353,7 @@ # where NNN is the display mode in decimal. See Use.htm for the modes # for some popular display chipsets. -$(DD)svga16.dev : $(DEVS_MAK) $(EGAVGA) $(GDEV) +$(DD)svga16.dev : $(DEVS_MAK) $(EGAVGA) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)svga16 $(EGAVGA) # More capable SuperVGAs have a wide variety of slightly differing @@ -361,39 +363,41 @@ #**************** $(CCD) gdevsvga.c $(DEVOBJ)gdevsvga.$(OBJ) : $(DEVSRC)gdevsvga.c $(GDEV) $(memory__h)\ - $(gsparam_h) $(gxarith_h) $(gdevpccm_h) $(gdevpcfb_h) $(gdevsvga_h) + $(gsparam_h) $(gxarith_h) $(gdevpccm_h) $(gdevpcfb_h) $(gdevsvga_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevsvga.$(OBJ) $(C_) $(DEVSRC)gdevsvga.c # The SuperVGA family includes: Avance Logic Inc., ATI Wonder, S3, # Trident, Tseng ET3000/4000, and VESA. -$(DD)ali.dev : $(DEVS_MAK) $(SVGA) $(GDEV) +$(DD)ali.dev : $(DEVS_MAK) $(SVGA) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)ali $(SVGA) -$(DD)atiw.dev : $(DEVS_MAK) $(SVGA) $(GDEV) +$(DD)atiw.dev : $(DEVS_MAK) $(SVGA) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)atiw $(SVGA) -$(DD)cirr.dev : $(DEVS_MAK) $(SVGA) $(GDEV) +$(DD)cirr.dev : $(DEVS_MAK) $(SVGA) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)cirr $(SVGA) -$(DD)tseng.dev : $(DEVS_MAK) $(SVGA) $(GDEV) +$(DD)tseng.dev : $(DEVS_MAK) $(SVGA) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)tseng $(SVGA) -$(DD)tvga.dev : $(DEVS_MAK) $(SVGA) $(GDEV) +$(DD)tvga.dev : $(DEVS_MAK) $(SVGA) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)tvga $(SVGA) -$(DD)vesa.dev : $(DEVS_MAK) $(SVGA) $(GDEV) +$(DD)vesa.dev : $(DEVS_MAK) $(SVGA) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)vesa $(SVGA) # The S3 driver doesn't share much code with the others. s3vga_=$(DEVOBJ)gdevs3ga.$(OBJ) $(DEVOBJ)gdevsvga.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ) -$(DD)s3vga.dev : $(DEVS_MAK) $(SVGA) $(s3vga_) $(GDEV) +$(DD)s3vga.dev : $(DEVS_MAK) $(SVGA) $(s3vga_) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)s3vga $(SVGA) $(ADDMOD) $(DD)s3vga -obj $(s3vga_) #**************** $(CCD) gdevs3ga.c -$(DEVOBJ)gdevs3ga.$(OBJ) : $(DEVSRC)gdevs3ga.c $(GDEV) $(gdevpcfb_h) $(gdevsvga_h) +$(DEVOBJ)gdevs3ga.$(OBJ) : $(DEVSRC)gdevs3ga.c $(GDEV) $(gdevpcfb_h) $(gdevsvga_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevs3ga.$(OBJ) $(C_) $(DEVSRC)gdevs3ga.c ###### ----------------------- Other displays ------------------------ ###### @@ -402,12 +406,13 @@ display_=$(DEVOBJ)gdevdsp.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ) $(GLOBJ)gdevdevn.$(OBJ) \ $(GLOBJ)gsequivc.$(OBJ) $(DEVOBJ)gdevdcrd.$(OBJ) -$(DD)display.dev : $(display_) $(GDEV) +$(DD)display.dev : $(display_) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)display $(display_) $(DEVOBJ)gdevdsp.$(OBJ) : $(DEVSRC)gdevdsp.c $(string__h)\ $(gp_h) $(gpcheck_h) $(gdevpccm_h) $(gsparam_h) $(gsdevice_h)\ - $(GDEVH) $(gxdevmem_h) $(gdevdevn_h) $(gsequivc_h) $(gdevdsp_h) $(gdevdsp2_h) + $(GDEVH) $(gxdevmem_h) $(gdevdevn_h) $(gsequivc_h) $(gdevdsp_h) $(gdevdsp2_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevdsp.$(OBJ) $(C_) $(DEVSRC)gdevdsp.c @@ -420,28 +425,29 @@ ### Note that the vgalib device supports only 16-color VGA modes. ### lvga256_=$(DEVOBJ)gdevl256.$(OBJ) -$(DD)lvga256.dev : $(DEVS_MAK) $(lvga256_) $(GDEV) +$(DD)lvga256.dev : $(DEVS_MAK) $(lvga256_) $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)lvga256 $(lvga256_) $(ADDMOD) $(DD)lvga256 -lib vga vgagl -$(DEVOBJ)gdevl256.$(OBJ) : $(DEVSRC)gdevl256.c $(GDEV) $(memory__h) +$(DEVOBJ)gdevl256.$(OBJ) : $(DEVSRC)gdevl256.c $(GDEV) $(memory__h) $(MAKEDIRS) $(DEVCCSHARED) $(DEVO_)gdevl256.$(OBJ) $(C_) $(DEVSRC)gdevl256.c vgalib_=$(DEVOBJ)gdevvglb.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ) -$(DD)vgalib.dev : $(DEVS_MAK) $(vgalib_) $(GDEV) +$(DD)vgalib.dev : $(DEVS_MAK) $(vgalib_) $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)vgalib $(vgalib_) $(ADDMOD) $(DD)vgalib -lib vga -$(DEVOBJ)gdevvglb.$(OBJ) : $(DEVSRC)gdevvglb.c $(GDEV) $(gdevpccm_h) $(gsparam_h) +$(DEVOBJ)gdevvglb.$(OBJ) : $(DEVSRC)gdevvglb.c $(GDEV) $(gdevpccm_h) $(gsparam_h) \ + $(MAKEDIRS) $(DEVCCSHARED) $(DEVO_)gdevvglb.$(OBJ) $(C_) $(DEVSRC)gdevvglb.c ### Shared library object supporting vgalib. ### NON PORTABLE, ONLY UNIX WITH GCC SUPPORT -$(DEVOBJ)lvga256.so : $(lvga256_) +$(DEVOBJ)lvga256.so : $(lvga256_) $(MAKEDIRS) $(CCLD) $(LDFLAGS) -shared -o $(DEVOBJ)lvga256.so $(lvga256_) -lvga -lvgagl -$(DEVOBJ)vgalib.so : $(vgalib_) +$(DEVOBJ)vgalib.so : $(vgalib_) $(MAKEDIRS) $(CCLD) $(LDFLAGS) -shared -o $(DEVOBJ)vgalib.so $(vgalib_) -lvga -lvgagl ### -------------------------- The X11 device -------------------------- ### @@ -456,33 +462,34 @@ # See the main makefile for the definition of XLIBDIRS and XLIBS. x11_=$(DEVOBJ)gdevx.$(OBJ) $(DEVOBJ)gdevxcmp.$(OBJ) $(DEVOBJ)gdevxini.$(OBJ)\ $(DEVOBJ)gdevxres.$(OBJ) $(DEVOBJ)gsparamx.$(OBJ) -$(DD)x11_.dev : $(DEVS_MAK) $(x11_) $(GLD)bboxutil.dev $(GDEV) +$(DD)x11_.dev : $(DEVS_MAK) $(x11_) $(GLD)bboxutil.dev $(GDEV) $(MAKEDIRS) $(SETMOD) $(DD)x11_ $(x11_) $(ADDMOD) $(DD)x11_ -link $(XLIBDIRS) $(ADDMOD) $(DD)x11_ -lib $(XLIBS) $(ADDMOD) $(DD)x11_ -include $(GLD)bboxutil -$(DD)x11.dev : $(DEVS_MAK) $(DD)x11_.dev $(GDEV) +$(DD)x11.dev : $(DEVS_MAK) $(DD)x11_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11 -include $(DD)x11_ # See the main makefile for the definition of XINCLUDE. GDEVX=$(GDEV) $(x__h) $(gdevx_h) $(TOP_MAKEFILES) $(DEVOBJ)gdevx.$(OBJ) : $(DEVSRC)gdevx.c $(GDEVX) $(math__h) $(memory__h)\ $(gscoord_h) $(gsdevice_h) $(gsiparm2_h) $(gsmatrix_h) $(gsparam_h)\ - $(gxdevmem_h) $(gxgetbit_h) $(gxiparam_h) $(gxpath_h) + $(gxdevmem_h) $(gxgetbit_h) $(gxiparam_h) $(gxpath_h) $(MAKEDIRS) $(DEVCCSHARED) $(XINCLUDE) $(DEVO_)gdevx.$(OBJ) $(C_) $(DEVSRC)gdevx.c -$(DEVOBJ)gdevxcmp.$(OBJ) : $(DEVSRC)gdevxcmp.c $(GDEVX) $(math__h) +$(DEVOBJ)gdevxcmp.$(OBJ) : $(DEVSRC)gdevxcmp.c $(GDEVX) $(math__h) \ + $(MAKEDIRS) $(DEVCCSHARED) $(XINCLUDE) $(DEVO_)gdevxcmp.$(OBJ) $(C_) $(DEVSRC)gdevxcmp.c $(DEVOBJ)gdevxini.$(OBJ) : $(DEVSRC)gdevxini.c $(GDEVX) $(memory__h)\ - $(gserrors_h) $(gsparamx_h) $(gxdevmem_h) $(gdevbbox_h) + $(gserrors_h) $(gsparamx_h) $(gxdevmem_h) $(gdevbbox_h) $(MAKEDIRS) $(DEVCCSHARED) $(XINCLUDE) $(DEVO_)gdevxini.$(OBJ) $(C_) $(DEVSRC)gdevxini.c # We have to compile gdevxres without warnings, because there is a # const/non-const cast required by the X headers that we can't work around. $(DEVOBJ)gdevxres.$(OBJ) : $(DEVSRC)gdevxres.c $(std_h) $(x__h)\ - $(gsmemory_h) $(gstypes_h) $(gxdevice_h) $(gdevx_h) + $(gsmemory_h) $(gstypes_h) $(gxdevice_h) $(gdevx_h) $(MAKEDIRS) $(CC_NO_WARN) $(GLCCFLAGS) $(XINCLUDE) $(DEVO_)gdevxres.$(OBJ) $(C_) $(DEVSRC)gdevxres.c # Alternate X11-based devices to help debug other drivers. @@ -497,48 +504,48 @@ # x11rg16x pretends to be a G5/B5/R6 color device. # x11rg16x pretends to be a G11/B10/R11 color device. x11alt_=$(DEVOBJ)gdevxalt.$(OBJ) -$(DD)x11alt_.dev : $(DEVS_MAK) $(x11alt_) $(DD)x11_.dev $(GDEV) +$(DD)x11alt_.dev : $(DEVS_MAK) $(x11alt_) $(DD)x11_.dev $(GDEV) $(MAKEDIRS) $(SETMOD) $(DD)x11alt_ $(x11alt_) $(ADDMOD) $(DD)x11alt_ -include $(DD)x11_ -$(DD)x11alpha.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11alpha.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11alpha -include $(DD)x11alt_ -$(DD)x11cmyk.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11cmyk.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11cmyk -include $(DD)x11alt_ -$(DD)x11cmyk2.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11cmyk2.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11cmyk2 -include $(DD)x11alt_ -$(DD)x11cmyk4.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11cmyk4.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11cmyk4 -include $(DD)x11alt_ -$(DD)x11cmyk8.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11cmyk8.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11cmyk8 -include $(DD)x11alt_ -$(DD)x11gray2.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11gray2.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11gray2 -include $(DD)x11alt_ -$(DD)x11gray4.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11gray4.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11gray4 -include $(DD)x11alt_ -$(DD)x11mono.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11mono.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11mono -include $(DD)x11alt_ -$(DD)x11rg16x.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11rg16x.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11rg16x -include $(DD)x11alt_ -$(DD)x11rg32x.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) +$(DD)x11rg32x.dev : $(DEVS_MAK) $(DD)x11alt_.dev $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)x11rg32x -include $(DD)x11alt_ $(DEVOBJ)gdevxalt.$(OBJ) : $(DEVSRC)gdevxalt.c $(GDEVX) $(math__h) $(memory__h)\ - $(gsdevice_h) $(gsparam_h) $(gsstruct_h) $(GDEV) + $(gsdevice_h) $(gsparam_h) $(gsstruct_h) $(GDEV) $(MAKEDIRS) $(DEVCCSHARED) $(XINCLUDE) $(DEVO_)gdevxalt.$(OBJ) $(C_) $(DEVSRC)gdevxalt.c ### Shared library object supporting X11. ### NON PORTABLE, ONLY UNIX WITH GCC SUPPORT -$(DEVOBJ)X11.so : $(x11alt_) $(x11_) +$(DEVOBJ)X11.so : $(x11alt_) $(x11_) $(MAKEDIRS) $(CCLD) $(LDFLAGS) -shared -o $(DEVOBJ)X11.so $(x11alt_) $(x11_) -L/usr/X11R6/lib -lXt -lSM -lICE -lXext -lX11 $(XLIBDIRS) ###### --------------- Memory-buffered printer devices --------------- ###### @@ -547,22 +554,23 @@ atx_=$(DEVOBJ)gdevatx.$(OBJ) -$(DD)atx23.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) +$(DD)atx23.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)atx23 $(atx_) -$(DD)atx24.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) +$(DD)atx24.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)atx24 $(atx_) -$(DD)atx38.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) +$(DD)atx38.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)atx38 $(atx_) -$(DD)itk24i.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) +$(DD)itk24i.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)itk24i $(atx_) -$(DD)itk38.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) +$(DD)itk38.dev : $(DEVS_MAK) $(atx_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)itk38 $(atx_) -$(DEVOBJ)gdevatx.$(OBJ) : $(DEVSRC)gdevatx.c $(PDEVH) $(math__h) $(GDEV) +$(DEVOBJ)gdevatx.$(OBJ) : $(DEVSRC)gdevatx.c $(PDEVH) $(math__h) $(GDEV) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevatx.$(OBJ) $(C_) $(DEVSRC)gdevatx.c ### ----------- The H-P DeskJet and LaserJet printer devices ----------- ### @@ -580,60 +588,62 @@ HPMONO=$(DEVOBJ)gdevdjet.$(OBJ) $(HPDLJM) $(DEVOBJ)gdevpcl.$(OBJ) : $(DEVSRC)gdevpcl.c $(PDEVH) $(math__h) $(gdevpcl_h)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpcl.$(OBJ) $(C_) $(DEVSRC)gdevpcl.c -$(DEVOBJ)gdevdljm.$(OBJ) : $(DEVSRC)gdevdljm.c $(PDEVH) $(gdevdljm_h) $(GDEV) +$(DEVOBJ)gdevdljm.$(OBJ) : $(DEVSRC)gdevdljm.c $(PDEVH) $(gdevdljm_h) $(GDEV) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevdljm.$(OBJ) $(C_) $(DEVSRC)gdevdljm.c -$(DEVOBJ)gdevdjet.$(OBJ) : $(DEVSRC)gdevdjet.c $(PDEVH) $(gdevdljm_h) $(GDEV) +$(DEVOBJ)gdevdjet.$(OBJ) : $(DEVSRC)gdevdjet.c $(PDEVH) $(gdevdljm_h) $(GDEV) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevdjet.$(OBJ) $(C_) $(DEVSRC)gdevdjet.c -$(DD)deskjet.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)deskjet.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)deskjet $(HPMONO) -$(DD)djet500.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)djet500.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)djet500 $(HPMONO) -$(DD)fs600.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)fs600.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)fs600 $(HPMONO) -$(DD)laserjet.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)laserjet.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)laserjet $(HPMONO) -$(DD)ljetplus.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)ljetplus.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)ljetplus $(HPMONO) ### Selecting ljet2p provides TIFF (mode 2) compression on LaserJet III, ### IIIp, IIId, IIIsi, IId, and IIp. -$(DD)ljet2p.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)ljet2p.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)ljet2p $(HPMONO) ### Selecting ljet3 provides Delta Row (mode 3) compression on LaserJet III, ### IIIp, IIId, IIIsi. -$(DD)ljet3.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)ljet3.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)ljet3 $(HPMONO) ### Selecting ljet3d also provides duplex printing capability. -$(DD)ljet3d.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)ljet3d.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)ljet3d $(HPMONO) ### Selecting ljet4 or ljet4d also provides Delta Row compression on ### LaserJet IV series. -$(DD)ljet4.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)ljet4.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)ljet4 $(HPMONO) -$(DD)ljet4d.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)ljet4d.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)ljet4d $(HPMONO) -$(DD)lp2563.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)lp2563.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)lp2563 $(HPMONO) -$(DD)oce9050.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) +$(DD)oce9050.dev : $(DEVS_MAK) $(HPMONO) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)oce9050 $(HPMONO) ### ------------------ The H-P LaserJet 5 and 6 devices ----------------- ### @@ -652,18 +662,22 @@ $(DEVOBJ)gdevpxut.$(OBJ) : $(DEVSRC)gdevpxut.c $(math__h) $(string__h)\ $(gx_h) $(gxdevcli_h) $(stream_h)\ - $(gdevpxat_h) $(gdevpxen_h) $(gdevpxop_h) $(gdevpxut_h) $(GDEV) + $(gdevpxat_h) $(gdevpxen_h) $(gdevpxop_h) $(gdevpxut_h) $(GDEV) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpxut.$(OBJ) $(C_) $(DEVSRC)gdevpxut.c ljet5_=$(DEVOBJ)gdevlj56.$(OBJ) $(DEVOBJ)gdevpxut.$(OBJ) $(HPPCL) -$(DD)lj5mono.dev : $(DEVS_MAK) $(ljet5_) $(GLD)page.dev $(GDEV) +$(DD)lj5mono.dev : $(DEVS_MAK) $(ljet5_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV) $(DD)lj5mono $(ljet5_) -$(DD)lj5gray.dev : $(DEVS_MAK) $(ljet5_) $(GLD)page.dev $(GDEV) +$(DD)lj5gray.dev : $(DEVS_MAK) $(ljet5_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV) $(DD)lj5gray $(ljet5_) $(DEVOBJ)gdevlj56.$(OBJ) : $(DEVSRC)gdevlj56.c $(PDEVH) $(gdevpcl_h)\ - $(gdevpxat_h) $(gdevpxen_h) $(gdevpxop_h) $(gdevpxut_h) $(stream_h) + $(gdevpxat_h) $(gdevpxen_h) $(gdevpxop_h) $(gdevpxut_h) $(stream_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevlj56.$(OBJ) $(C_) $(DEVSRC)gdevlj56.c ### -------------------- The ijs client ----------------- ### @@ -673,12 +687,12 @@ #$(IJSOBJ)ijs.$(OBJ) $(IJSOBJ)ijs_client.$(OBJ) \ # $(IJSOBJ)ijs_exec_$(IJSEXECTYPE).$(OBJ) -$(DD)ijs.dev : $(ijs_) $(GLD)page.dev $(DD)ijslib.dev $(GDEV) +$(DD)ijs.dev : $(ijs_) $(GLD)page.dev $(DD)ijslib.dev $(GDEV) $(MAKEDIRS) $(SETPDEV) $(DD)ijs $(ijs_) $(ADDMOD) $(DD)ijs -include $(GLD)ijslib $(DEVOBJ)gdevijs.$(OBJ) : $(DEVSRC)gdevijs.c $(PDEVH) $(unistd__h) $(gp_h)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(CC_) $(I_)$(DEVI_) $(II)$(IJSI_)$(_I) $(II)$(IJSI_)$(D)..$(_I) \ $(GLF_) $(DEVO_)gdevijs.$(OBJ) $(C_) $(DEVSRC)gdevijs.c @@ -701,35 +715,36 @@ $(RINKJ_OBJ)rinkj-config.$(OBJ) $(RINKJ_OBJ)rinkj-dither.$(OBJ) \ $(RINKJ_OBJ)rinkj-epson870.$(OBJ) $(RINKJ_OBJ)rinkj-screen-eb.$(OBJ) -$(RINKJ_OBJ)evenbetter-rll.$(OBJ) : $(RINKJ_SRC)evenbetter-rll.c +$(RINKJ_OBJ)evenbetter-rll.$(OBJ) : $(RINKJ_SRC)evenbetter-rll.c $(MAKEDIRS) $(RINKJ_CC) $(RINKJ_O_)evenbetter-rll.$(OBJ) $(C_) $(RINKJ_SRC)evenbetter-rll.c -$(RINKJ_OBJ)rinkj-byte-stream.$(OBJ) : $(RINKJ_SRC)rinkj-byte-stream.c +$(RINKJ_OBJ)rinkj-byte-stream.$(OBJ) : $(RINKJ_SRC)rinkj-byte-stream.c $(MAKEDIRS) $(RINKJ_CC) $(RINKJ_O_)rinkj-byte-stream.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-byte-stream.c -$(RINKJ_OBJ)rinkj-device.$(OBJ) : $(RINKJ_SRC)rinkj-device.c +$(RINKJ_OBJ)rinkj-device.$(OBJ) : $(RINKJ_SRC)rinkj-device.c $(MAKEDIRS) $(RINKJ_CC) $(RINKJ_O_)rinkj-device.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-device.c -$(RINKJ_OBJ)rinkj-config.$(OBJ) : $(RINKJ_SRC)rinkj-config.c +$(RINKJ_OBJ)rinkj-config.$(OBJ) : $(RINKJ_SRC)rinkj-config.c $(MAKEDIRS) $(RINKJ_CC) $(RINKJ_O_)rinkj-config.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-config.c -$(RINKJ_OBJ)rinkj-dither.$(OBJ) : $(RINKJ_SRC)rinkj-dither.c +$(RINKJ_OBJ)rinkj-dither.$(OBJ) : $(RINKJ_SRC)rinkj-dither.c $(MAKEDIRS) $(RINKJ_CC) $(RINKJ_O_)rinkj-dither.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-dither.c -$(RINKJ_OBJ)rinkj-epson870.$(OBJ) : $(RINKJ_SRC)rinkj-epson870.c +$(RINKJ_OBJ)rinkj-epson870.$(OBJ) : $(RINKJ_SRC)rinkj-epson870.c $(MAKEDIRS) $(RINKJ_CC) $(RINKJ_O_)rinkj-epson870.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-epson870.c -$(RINKJ_OBJ)rinkj-screen-eb.$(OBJ) : $(RINKJ_SRC)rinkj-screen-eb.c +$(RINKJ_OBJ)rinkj-screen-eb.$(OBJ) : $(RINKJ_SRC)rinkj-screen-eb.c $(MAKEDIRS) $(RINKJ_CC) $(RINKJ_O_)rinkj-screen-eb.$(OBJ) $(C_) $(RINKJ_SRC)rinkj-screen-eb.c rinkj_=$(DEVOBJ)gdevrinkj.$(OBJ) $(rinkj_core) -$(DD)rinkj.dev : $(DEVS_MAK) $(rinkj_) $(GLD)page.dev $(GDEV) +$(DD)rinkj.dev : $(DEVS_MAK) $(rinkj_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)rinkj $(rinkj_) $(DEVOBJ)gdevrinkj.$(OBJ) : $(DEVSRC)gdevrinkj.c $(PDEVH) $(math__h)\ $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h)\ - $(gxdcconv_h) $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) + $(gxdcconv_h) $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevrinkj.$(OBJ) $(C_) $(DEVSRC)gdevrinkj.c @@ -750,7 +765,8 @@ psdf_inc1=$(GLD)vector.dev $(GLD)pngp.dev $(GLD)seexec.dev psdf_inc2=$(GLD)sdcte.dev $(GLD)slzwe.dev $(GLD)szlibe.dev psdf_inc=$(psdf_inc1) $(psdf_inc2) -$(DD)psdf.dev : $(DEVS_MAK) $(ECHOGS_XE) $(psdf_) $(psdf_inc) $(GDEV) +$(DD)psdf.dev : $(DEVS_MAK) $(ECHOGS_XE) $(psdf_) $(psdf_inc) $(GDEV) \ + $(MAKEDIRS) $(SETMOD) $(DD)psdf $(psdf_1) $(ADDMOD) $(DD)psdf -obj $(psdf_2) $(ADDMOD) $(DD)psdf -obj $(psdf_3) @@ -765,25 +781,26 @@ $(scfx_h) $(slzwx_h) $(spngpx_h)\ $(strimpl_h) $(szlibx_h)\ $(gdevpsdf_h) $(gdevpsds_h) $(gxdevmem_h) $(gxcspace_h) $(gxparamx_h)\ - $(sjbig2_luratech_h) $(sjpx_luratech_h) $(gsicc_manage_h) + $(sjbig2_luratech_h) $(sjpx_luratech_h) $(gsicc_manage_h) $(MAKEDIRS) $(GDEVLWFJB2JPXCC) $(DEVO_)gdevpsdi.$(OBJ) $(C_) $(DEVVECSRC)gdevpsdi.c $(DEVOBJ)gdevpsdp.$(OBJ) : $(DEVVECSRC)gdevpsdp.c $(GDEVH)\ $(string__h) $(jpeglib__h)\ $(scfx_h) $(sdct_h) $(slzwx_h) $(srlx_h) $(strimpl_h) $(szlibx_h)\ $(gsparamx_h) $(gsutil_h) $(gdevpsdf_h)\ - $(sjbig2_luratech_h) $(sjpx_luratech_h) + $(sjbig2_luratech_h) $(sjpx_luratech_h) $(MAKEDIRS) $(GDEVLWFJB2JPXCC) $(DEVO_)gdevpsdp.$(OBJ) $(C_) $(DEVVECSRC)gdevpsdp.c $(DEVOBJ)gdevpsds.$(OBJ) : $(DEVVECSRC)gdevpsds.c $(GX) $(memory__h)\ $(gserrors_h) $(gxdcconv_h) $(gdevpsds_h) $(gxbitmap_h)\ - $(gxcspace_h) $(gsdcolor_h) $(gscspace_h) $(gxdevcli_h) + $(gxcspace_h) $(gsdcolor_h) $(gscspace_h) $(gxdevcli_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpsds.$(OBJ) $(C_) $(DEVVECSRC)gdevpsds.c $(DEVOBJ)gdevpsdu.$(OBJ) : $(DEVVECSRC)gdevpsdu.c $(GXERR)\ $(jpeglib__h) $(memory__h) $(stdio__h)\ $(sa85x_h) $(scfx_h) $(sdct_h) $(sjpeg_h) $(strimpl_h)\ - $(gdevpsdf_h) $(spprint_h) $(gsovrc_h) + $(gdevpsdf_h) $(spprint_h) $(gsovrc_h) $(MAKEDIRS) $(DEVJCC) $(DEVO_)gdevpsdu.$(OBJ) $(C_) $(DEVVECSRC)gdevpsdu.c # Plain text writer @@ -793,17 +810,17 @@ txtwrite_=$(DEVOBJ)gdevtxtw.$(OBJ) $(DEVOBJ)gdevagl.$(OBJ) $(DD)txtwrite.dev : $(DEVS_MAK) $(ECHOGS_XE) $(txtwrite_) $(GDEV)\ - $(gdevagl_h) + $(gdevagl_h) $(MAKEDIRS) $(SETDEV2) $(DD)txtwrite $(txtwrite_) $(DEVOBJ)gdevtxtw.$(OBJ) : $(DEVVECSRC)gdevtxtw.c $(GDEV)\ $(memory__h) $(string__h) $(gp_h) $(gsparam_h) $(gsutil_h) \ $(gsdevice_h) $(gxfont_h) $(gxfont0_h) $(gstext_h) $(gxfcid_h)\ - $(gxistate_h) $(gxpath_h) $(gdevagl_h) + $(gxistate_h) $(gxpath_h) $(gdevagl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevtxtw.$(OBJ) $(C_) $(DEVVECSRC)gdevtxtw.c $(DEVOBJ)gdevagl.$(OBJ) : $(DEVVECSRC)gdevagl.c $(GDEV)\ - $(gdevagl_h) + $(gdevagl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevagl.$(OBJ) $(C_) $(DEVVECSRC)gdevagl.c @@ -831,13 +848,15 @@ # Since ps2write actually is a clone of pdfwrite, # we just depend on it. -$(DD)ps2write.dev : $(DEVS_MAK) $(DD)pdfwrite.dev $(GDEV) +$(DD)ps2write.dev : $(DEVS_MAK) $(DD)pdfwrite.dev $(GDEV) \ + $(MAKEDIRS) $(SETDEV2) $(DD)ps2write $(ADDMOD) $(DD)ps2write -include $(DD)pdfwrite.dev # Since eps2write actually is a clone of pdfwrite, # we just depend on it. -$(DD)eps2write.dev : $(DEVS_MAK) $(DD)pdfwrite.dev $(GDEV) +$(DD)eps2write.dev : $(DEVS_MAK) $(DD)pdfwrite.dev $(GDEV) \ + $(MAKEDIRS) $(SETDEV2) $(DD)eps2write $(ADDMOD) $(DD)eps2write -include $(DD)pdfwrite.dev @@ -848,7 +867,8 @@ $(DD)pdfwrite.dev : $(DEVS_MAK) $(ECHOGS_XE) $(pdfwrite_)\ $(GLD)cmyklib.dev $(GLD)cfe.dev $(GLD)lzwe.dev\ $(GLD)rle.dev $(GLD)sdcte.dev $(GLD)sdeparam.dev $(GLD)smd5.dev\ - $(GLD)szlibe.dev $(GLD)psdf.dev $(GLD)sarc4.dev $(DD)pdtext.dev $(GDEV) + $(GLD)szlibe.dev $(GLD)psdf.dev $(GLD)sarc4.dev $(DD)pdtext.dev $(GDEV) \ + $(MAKEDIRS) $(SETDEV2) $(DD)pdfwrite $(pdfwrite1_) $(ADDMOD) $(DD)pdfwrite $(pdfwrite2_) $(ADDMOD) $(DD)pdfwrite $(pdfwrite3_) @@ -880,40 +900,41 @@ $(DEVOBJ)gdevpdf.$(OBJ) : $(DEVVECSRC)gdevpdf.c $(GDEVH)\ $(fcntl__h) $(memory__h) $(string__h) $(time__h) $(unistd__h) $(gp_h)\ $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h) $(smd5_h) $(sarc4_h)\ - $(gdevpdfb_h) $(gscms_h) + $(gdevpdfb_h) $(gscms_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdf.$(OBJ) $(C_) $(DEVVECSRC)gdevpdf.c $(DEVOBJ)gdevpdfb.$(OBJ) : $(DEVVECSRC)gdevpdfb.c\ $(string__h) $(gx_h)\ $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\ $(gserrors_h) $(gxcspace_h) $(gxdcolor_h) $(gxpcolor_h) $(gxhldevc_h)\ - $(gsptype1_h) + $(gsptype1_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfb.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfb.c $(DEVOBJ)gdevpdfc.$(OBJ) : $(DEVVECSRC)gdevpdfc.c $(GXERR) $(math__h) $(memory__h)\ $(gdevpdfc_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\ $(gscie_h) $(gscindex_h) $(gscspace_h) $(gscdevn_h) $(gscsepr_h) $(gsicc_h)\ $(sstring_h) $(stream_h) $(strimpl_h) $(gxcspace_h) $(gxcdevn_h) $(gscspace_h)\ - $(gsicc_manage_h) + $(gsicc_manage_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfc.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfc.c $(DEVOBJ)gdevpdfd.$(OBJ) : $(DEVVECSRC)gdevpdfd.c $(math__h) $(memory__h)\ $(gx_h) $(gxdevice_h) $(gxfixed_h) $(gxistate_h) $(gxpaint_h)\ $(gxcoord_h) $(gxdevmem_h) $(gxcolor2_h) $(gxhldevc_h)\ $(gsstate_h) $(gserrors_h) $(gsptype2_h) $(gsshade_h)\ - $(gzpath_h) $(gzcpath_h) $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gsutil_h) + $(gzpath_h) $(gzcpath_h) $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gsutil_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfd.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfd.c $(DEVOBJ)gdevpdfe.$(OBJ) : $(DEVVECSRC)gdevpdfe.c\ $(gx_h) $(gserrors_h) $(string__h) $(time__h) $(stream_h) $(gp_h) $(smd5_h) $(gscdefs_h)\ - $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdtf_h) $(ConvertUTF_h) + $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdtf_h) $(ConvertUTF_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfe.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfe.c $(DEVOBJ)gdevpdfg.$(OBJ) : $(DEVVECSRC)gdevpdfg.c $(GXERR) $(math__h) $(string__h)\ $(memory__h) $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\ $(gsfunc0_h) $(gsstate_h) $(gxdcolor_h) $(gxpcolor_h) $(gxcolor2_h) $(gsptype2_h)\ $(gxbitmap_h) $(gxdht_h) $(gxfarith_h) $(gxfmap_h) $(gxht_h) $(gxistate_h)\ - $(gzht_h) $(gsicc_manage_h) + $(gzht_h) $(gsicc_manage_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfg.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfg.c $(DEVOBJ)gdevpdfi.$(OBJ) : $(DEVVECSRC)gdevpdfi.c $(memory__h) $(math__h)\ @@ -921,46 +942,48 @@ $(gserrors_h) $(gsdevice_h) $(gsflip_h) $(gsiparm4_h) $(gsstate_h) $(gscolor2_h)\ $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h)\ $(gxcspace_h) $(gximage3_h) $(gximag3x_h) $(gxdcolor_h) $(gxpcolor_h)\ - $(gxhldevc_h) $(gsicc_manage_h) + $(gxhldevc_h) $(gsicc_manage_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfi.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfi.c $(DEVOBJ)gdevpdfj.$(OBJ) : $(DEVVECSRC)gdevpdfj.c\ $(memory__h) $(string__h) $(gx_h) $(gserrors_h)\ $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gxcspace_h)\ - $(gsiparm4_h) $(gdevpsds_h) $(spngpx_h) + $(gsiparm4_h) $(gdevpsds_h) $(spngpx_h) $(MAKEDIRS) $(DEVJCC) $(DEVO_)gdevpdfj.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfj.c $(DEVOBJ)gdevpdfk.$(OBJ) : $(DEVVECSRC)gdevpdfk.c $(GXERR) $(math__h) $(memory__h)\ $(gdevpdfc_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\ $(gsicc_h) $(gxcie_h) $(gxcspace_h)\ - $(stream_h) $(strimpl_h) + $(stream_h) $(strimpl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfk.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfk.c $(DEVOBJ)gdevpdfm.$(OBJ) : $(DEVVECSRC)gdevpdfm.c\ $(math__h) $(memory__h) $(string__h) $(gx_h)\ $(gdevpdfo_h) $(gdevpdfx_h) $(gserrors_h) $(gsutil_h)\ - $(szlibx_h) $(slzwx_h) + $(szlibx_h) $(slzwx_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfm.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfm.c $(DEVOBJ)gdevpdfo.$(OBJ) : $(DEVVECSRC)gdevpdfo.c $(memory__h) $(string__h)\ $(gx_h)\ $(gdevpdfo_h) $(gdevpdfx_h) $(gserrors_h) $(gsparam_h) $(gsutil_h)\ - $(sa85x_h) $(sarc4_h) $(strimpl_h) + $(sa85x_h) $(sarc4_h) $(strimpl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfo.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfo.c $(DEVOBJ)gdevpdfp.$(OBJ) : $(DEVVECSRC)gdevpdfp.c $(memory__h) $(string__h) $(gx_h)\ - $(gdevpdfo_h) $(gdevpdfg_h) $(gdevpdfx_h) $(gserrors_h) $(gsparamx_h) + $(gdevpdfo_h) $(gdevpdfg_h) $(gdevpdfx_h) $(gserrors_h) $(gsparamx_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfp.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfp.c $(DEVOBJ)gdevpdfr.$(OBJ) : $(DEVVECSRC)gdevpdfr.c $(memory__h) $(string__h)\ $(gx_h)\ $(gdevpdfo_h) $(gdevpdfx_h) $(gserrors_h) $(gsutil_h)\ - $(scanchar_h) $(sstring_h) $(strimpl_h) + $(scanchar_h) $(sstring_h) $(strimpl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfr.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfr.c $(DEVOBJ)gdevpdft.$(OBJ) : $(DEVVECSRC)gdevpdft.c $(string__h)\ $(gx_h) $(gserrors_h) $(gstrans_h) $(gscolor2_h) $(gzstate_h)\ - $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gsccolor_h) + $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdfo_h) $(gsccolor_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdft.$(OBJ) $(C_) $(DEVVECSRC)gdevpdft.c $(DEVOBJ)gdevpdfu.$(OBJ) : $(DEVVECSRC)gdevpdfu.c $(GXERR)\ @@ -970,13 +993,14 @@ $(sa85x_h) $(scfx_h) $(sdct_h) $(slzwx_h) $(spngpx_h)\ $(srlx_h) $(sarc4_h) $(smd5_h) $(sstring_h) $(strimpl_h) $(szlibx_h)\ $(strmio_h) $(sjbig2_luratech_h) $(sjpx_luratech_h)\ - $(opdfread_h) $(gdevagl_h) $(gs_mro_e_h) $(gs_mgl_e_h) + $(opdfread_h) $(gdevagl_h) $(gs_mro_e_h) $(gs_mgl_e_h) \ + $(MAKEDIRS) $(GDEVLWFJB2JPXCC) $(DEVO_)gdevpdfu.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfu.c $(DEVOBJ)gdevpdfv.$(OBJ) : $(DEVVECSRC)gdevpdfv.c $(GXERR) $(math__h) $(string__h)\ $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdfx_h)\ $(gscindex_h) $(gscoord_h) $(gsiparm3_h) $(gsmatrix_h) $(gsptype2_h)\ - $(gxcolor2_h) $(gxdcolor_h) $(gxpcolor_h) $(gxshade_h) + $(gxcolor2_h) $(gxdcolor_h) $(gxpcolor_h) $(gxshade_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdfv.$(OBJ) $(C_) $(DEVVECSRC)gdevpdfv.c # ---------------- Font writing ---------------- # @@ -991,7 +1015,7 @@ psf_2=$(DEVOBJ)gdevpsft.$(OBJ) $(DEVOBJ)gdevpsfu.$(OBJ) $(DEVOBJ)gdevpsfx.$(OBJ) psf_3=$(DEVOBJ)spsdf.$(OBJ) psf_=$(psf_1) $(psf_2) $(psf_3) -$(DD)psf.dev : $(DEV_MAK) $(ECHOGS_XE) $(psf_) +$(DD)psf.dev : $(DEV_MAK) $(ECHOGS_XE) $(psf_) $(MAKEDIRS) $(SETMOD) $(DD)psf $(psf_1) $(ADDMOD) $(DD)psf -obj $(psf_2) $(ADDMOD) $(DD)psf -obj $(psf_3) @@ -1038,7 +1062,7 @@ # only by pdfwrite. fcopy_=$(DEVOBJ)gxfcopy.$(OBJ) -$(GLD)fcopy.dev : $(DEVS_MAK) $(ECHOGS_XE) $(fcopy_) +$(GLD)fcopy.dev : $(DEVS_MAK) $(ECHOGS_XE) $(fcopy_) $(MAKEDIRS) $(SETMOD) $(GLD)fcopy $(fcopy_) $(DEVOBJ)gxfcopy.$(OBJ) : $(DEVSRC)gxfcopy.c $(memory__h) $(AK) $(gx_h)\ @@ -1054,7 +1078,7 @@ # we give them their own module name and (for the new code) file name prefix. # However, logically they are part of pdfwrite and cannot be used separately. -$(DD)pdtext.dev : $(DEVS_MAK) $(DD)pdxtext.dev $(GDEV) +$(DD)pdtext.dev : $(DEVS_MAK) $(DD)pdxtext.dev $(GDEV) $(MAKEDIRS) $(SETMOD) $(DD)pdtext -include $(DD)pdxtext # For a code roadmap, see gdevpdtx.h. @@ -1085,7 +1109,7 @@ $(pdxtext_lmn) $(pdxtext_opq) $(pdxtext_rst) $(pdxtext_uvw) $(pdxtext_xyz)\ $(DEVOBJ)gsfont0c.$(OBJ) $(DD)pdxtext.dev : $(DEVS_MAK) $(pdxtext_) $(GDEV)\ - $(GLD)fcopy.dev $(GLD)psf.dev + $(GLD)fcopy.dev $(GLD)psf.dev $(MAKEDIRS) $(SETMOD) $(DD)pdxtext $(pdxtext_ab) $(ADDMOD) $(DD)pdxtext $(pdxtext_cde) $(ADDMOD) $(DD)pdxtext $(pdxtext_fgh) @@ -1099,50 +1123,52 @@ $(ADDMOD) $(DD)pdxtext -include $(GLD)fcopy $(GLD)psf $(DEVOBJ)gdevpdt.$(OBJ) : $(DEVVECSRC)gdevpdt.c $(gx_h) $(gxpath_h) $(memory__h)\ - $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdtx_h) $(gdevpdt_h) + $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdtx_h) $(gdevpdt_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdt.$(OBJ) $(C_) $(DEVVECSRC)gdevpdt.c $(DEVOBJ)gdevpdtb.$(OBJ) : $(DEVVECSRC)gdevpdtb.c $(memory__h) $(ctype__h) $(string__h)\ $(memory__h) $(ctype__h) $(string__h) $(gx_h) $(gserrors_h) $(gsutil_h) $(gxfcid_h)\ $(gxfcopy_h) $(gxfont_h) $(gxfont42_h) $(gdevpsf_h) $(gdevpdfx_h) $(gdevpdfo_h)\ - $(gdevpdtb_h) $(gdevpdfg_h) $(gdevpdtf_h) $(smd5_h) + $(gdevpdtb_h) $(gdevpdfg_h) $(gdevpdtf_h) $(smd5_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdtb.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtb.c $(DEVOBJ)gdevpdtc.$(OBJ) : $(DEVVECSRC)gdevpdtc.c $(gx_h) $(memory__h) $(string__h)\ $(gserrors_h) $(gxfcmap_h) $(gxfont_h) $(gxfont0_h) $(gxfont0c_h)\ $(gzpath_h) $(gxchar_h) $(gdevpsf_h) $(gdevpdfx_h) $(gdevpdtx_h)\ - $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdts_h) $(gdevpdtt_h) + $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdts_h) $(gdevpdtt_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdtc.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtc.c $(DEVOBJ)gdevpdte.$(OBJ) : $(DEVVECSRC)gdevpdte.c $(gx_h) $(math__h) $(memory__h) $(string__h)\ $(gserrors_h) $(gsutil_h) $(gxfcmap_h) $(gxfcopy_h) $(gxfont_h) \ $(gxfont0_h) $(gxfont0c_h) $(gxpath_h) $(gdevpsf_h) $(gdevpdfx_h) \ $(gdevpdfg_h) $(gdevpdfo_h) $(gdevpdtx_h) $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdts_h) \ - $(gdevpdtt_h) + $(gdevpdtt_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdte.$(OBJ) $(C_) $(DEVVECSRC)gdevpdte.c $(DEVOBJ)gdevpdtd.$(OBJ) : $(DEVVECSRC)gdevpdtd.c $(math__h) $(memory__h) $(gx_h)\ $(gserrors_h) $(gsrect_h) $(gscencs_h)\ $(gdevpdfo_h) $(gdevpdfx_h)\ - $(gdevpdtb_h) $(gdevpdtd_h) $(gdevpdtf_h) + $(gdevpdtb_h) $(gdevpdtd_h) $(gdevpdtf_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdtd.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtd.c $(DEVOBJ)gdevpdtf.$(OBJ) : $(DEVVECSRC)gdevpdtf.c $(gx_h) $(memory__h)\ $(string__h) $(gserrors_h) $(gsutil_h)\ $(gxfcache_h) $(gxfcid_h) $(gxfcmap_h) $(gxfcopy_h) $(gxfont_h) $(gxfont1_h)\ $(gdevpsf_h) $(gdevpdfx_h) $(gdevpdtb_h) $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdtw_h)\ - $(gdevpdti_h) + $(gdevpdti_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdtf.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtf.c $(DEVOBJ)gdevpdti.$(OBJ) : $(DEVVECSRC)gdevpdti.c $(memory__h) $(string__h) $(gx_h)\ $(gserrors_h) $(gsutil_h)\ $(gdevpdfx_h) $(gdevpdfg_h)\ - $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdts_h) $(gdevpdtw_h) $(gdevpdtt_h) $(gdevpdfo_h) + $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdts_h) $(gdevpdtw_h) $(gdevpdtt_h) $(gdevpdfo_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdti.$(OBJ) $(C_) $(DEVVECSRC)gdevpdti.c $(DEVOBJ)gdevpdts.$(OBJ) : $(DEVVECSRC)gdevpdts.c $(gx_h) $(math__h) $(memory__h)\ $(gserrors_h) $(gdevpdfx_h) $(gdevpdfg_h) $(gdevpdtx_h) $(gdevpdtf_h)\ - $(gdevpdts_h) $(gdevpdtt_h) + $(gdevpdts_h) $(gdevpdtt_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdts.$(OBJ) $(C_) $(DEVVECSRC)gdevpdts.c $(DEVOBJ)gdevpdtt.$(OBJ) : $(DEVVECSRC)gdevpdtt.c $(gx_h) $(math__h) $(string__h)\ @@ -1150,19 +1176,22 @@ $(gxfcache_h) $(gxfont_h) $(gxfont0_h) $(gxfcid_h) $(gxfcopy_h)\ $(gxfcmap_h) $(gxpath_h) $(gxchar_h) $(gxstate_h) $(gdevpdfx_h) $(gdevpdfg_h)\ $(gdevpdfo_h) $(gdevpdtx_h) $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdts_h) $(gdevpdtt_h)\ - $(gdevpdti_h) $(gxhldevc_h) + $(gdevpdti_h) $(gxhldevc_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdtt.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtt.c -$(DEVOBJ)gdevpdtv.$(OBJ) : $(DEVVECSRC)gdevpdtv.c $(gx_h) $(gdevpdtv_h) +$(DEVOBJ)gdevpdtv.$(OBJ) : $(DEVVECSRC)gdevpdtv.c $(gx_h) $(gdevpdtv_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdtv.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtv.c $(DEVOBJ)gdevpdtw.$(OBJ) : $(DEVVECSRC)gdevpdtw.c $(gx_h) $(gserrors_h) $(memory__h)\ $(gxfcmap_h) $(gxfont_h) $(gxfcopy_h) $(gscencs_h)\ $(gdevpsf_h) $(gdevpdfx_h) $(gdevpdfo_h)\ - $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdtw_h) $(gdevpdtv_h) $(sarc4_h) + $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdtw_h) $(gdevpdtv_h) $(sarc4_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpdtw.$(OBJ) $(C_) $(DEVVECSRC)gdevpdtw.c -$(DEVOBJ)whitelst.$(OBJ) : $(DEVVECSRC)whitelst.c $(whitelst_h) +$(DEVOBJ)whitelst.$(OBJ) : $(DEVVECSRC)whitelst.c $(whitelst_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)whitelst.$(OBJ) $(C_) $(DEVVECSRC)whitelst.c ################ END PDF WRITER ################ @@ -1170,11 +1199,13 @@ # High-level PCL XL writer pxl_=$(DEVOBJ)gdevpx.$(OBJ) $(DEVOBJ)gdevpxut.$(OBJ) $(HPPCL) -$(DD)pxlmono.dev : $(DEVS_MAK) $(pxl_) $(GDEV) $(GLD)vector.dev +$(DD)pxlmono.dev : $(DEVS_MAK) $(pxl_) $(GDEV) $(GLD)vector.dev \ + $(MAKEDIRS) $(SETDEV2) $(DD)pxlmono $(pxl_) $(ADDMOD) $(DD)pxlmono -include $(GLD)vector -$(DD)pxlcolor.dev : $(DEVS_MAK) $(pxl_) $(GDEV) $(GLD)vector.dev +$(DD)pxlcolor.dev : $(DEVS_MAK) $(pxl_) $(GDEV) $(GLD)vector.dev \ + $(MAKEDIRS) $(SETDEV2) $(DD)pxlcolor $(pxl_) $(ADDMOD) $(DD)pxlcolor -include $(GLD)vector @@ -1183,15 +1214,26 @@ $(gx_h) $(gsccolor_h) $(gsdcolor_h) $(gxiparam_h) $(gserrors_h)\ $(gxcspace_h) $(gxdevice_h) $(gxpath_h)\ $(gdevpxat_h) $(gdevpxen_h) $(gdevpxop_h) $(gdevpxut_h) $(gdevvec_h)\ - $(srlx_h) $(strimpl_h) $(jpeglib__h) $(sdct_h) $(sjpeg_h) + $(srlx_h) $(strimpl_h) $(jpeglib__h) $(sdct_h) $(sjpeg_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpx.$(OBJ) $(C_) $(DEVVECSRC)gdevpx.c +# XPS writer. Uses libtiff for all images + +libtiff_dev=$(TIFFGENDIR)$(D)libtiff.dev +tiff_i_=-include $(TIFFGENDIR)$(D)libtiff + xpswrite_=$(DEVOBJ)gdevxps.$(OBJ) -$(DD)xpswrite.dev : $(DEVS_MAK) $(xpswrite_) $(GDEV) $(GLD)vector.dev +$(DD)xpswrite.dev : $(DEVS_MAK) $(xpswrite_) $(GDEV) $(GLD)vector.dev \ +$(libtiff_dev) $(MAKEDIRS) $(SETDEV2) $(DD)xpswrite $(xpswrite_) - $(ADDMOD) $(DD)xpswrite -include $(GLD)vector + $(ADDMOD) $(DD)xpswrite -include $(GLD)vector $(tiff_i_) -$(DEVOBJ)gdevxps.$(OBJ) : $(DEVVECSRC)gdevxps.c $(gx_h) $(gdevvec_h) +$(DEVOBJ)gdevxps.$(OBJ) : $(DEVVECSRC)gdevxps.c $(gdevvec_h) \ +$(string__h) $(stdio__h) $(libtiff_dev) $(gx_h) $(gserrors_h) \ +$(gxpath_h) $(gzcpath_h) $(stream_h) $(zlib_h) \ +$(stdint__h) $(gdevtifs_h) $(gsicc_create_h) $(gsicc_cache_h) \ +$(gximdecode_h) $(MAKEDIRS) $(XPSDEVCC) $(I_)$(TI_)$(_I) $(GLO_)gdevxps.$(OBJ) $(C_) $(DEVVECSRC)gdevxps.c ###### --------------------- Raster file formats --------------------- ###### @@ -1203,26 +1245,29 @@ bit_=$(DEVOBJ)gdevbit.$(OBJ) $(DEVOBJ)gdevdcrd.$(OBJ) -$(DD)bit.dev : $(DEVS_MAK) $(bit_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) +$(DD)bit.dev : $(DEVS_MAK) $(bit_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bit $(bit_) $(ADDMOD) $(DD)bit -include $(GLD)cielib -$(DD)bitrgb.dev : $(DEVS_MAK) $(bit_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) +$(DD)bitrgb.dev : $(DEVS_MAK) $(bit_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bitrgb $(bit_) $(ADDMOD) $(DD)bitrgb -include $(GLD)cielib -$(DD)bitcmyk.dev : $(DEVS_MAK) $(bit_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) +$(DD)bitcmyk.dev : $(DEVS_MAK) $(bit_) $(GLD)page.dev $(GLD)cielib.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bitcmyk $(bit_) $(ADDMOD) $(DD)bitcmyk -include $(GLD)cielib $(DD)bitrgbtags.dev : $(DEVS_MAK) $(bit_) $(GLD)page.dev $(GLD)cielib.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)bitrgbtags $(bit_) $(ADDMOD) $(DD)bitrgbtags -include $(GLD)cielib $(DEVOBJ)gdevbit.$(OBJ) : $(DEVSRC)gdevbit.c $(PDEVH)\ $(gsparam_h) $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gxlum_h) $(gxdcconv_h)\ - $(gsutil_h) + $(gsutil_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevbit.$(OBJ) $(C_) $(DEVSRC)gdevbit.c ### ------------------------- .BMP file formats ------------------------- ### @@ -1231,34 +1276,44 @@ bmp_=$(DEVOBJ)gdevbmp.$(OBJ) $(DEVOBJ)gdevbmpc.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ) -$(DEVOBJ)gdevbmp.$(OBJ) : $(DEVSRC)gdevbmp.c $(PDEVH) $(gdevbmp_h) $(gdevpccm_h) +$(DEVOBJ)gdevbmp.$(OBJ) : $(DEVSRC)gdevbmp.c $(PDEVH) $(gdevbmp_h) $(gdevpccm_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevbmp.$(OBJ) $(C_) $(DEVSRC)gdevbmp.c -$(DEVOBJ)gdevbmpc.$(OBJ) : $(DEVSRC)gdevbmpc.c $(PDEVH) $(gdevbmp_h) +$(DEVOBJ)gdevbmpc.$(OBJ) : $(DEVSRC)gdevbmpc.c $(PDEVH) $(gdevbmp_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevbmpc.$(OBJ) $(C_) $(DEVSRC)gdevbmpc.c -$(DD)bmpmono.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) +$(DD)bmpmono.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bmpmono $(bmp_) -$(DD)bmpgray.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) +$(DD)bmpgray.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bmpgray $(bmp_) -$(DD)bmpsep1.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) +$(DD)bmpsep1.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bmpsep1 $(bmp_) -$(DD)bmpsep8.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) +$(DD)bmpsep8.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bmpsep8 $(bmp_) -$(DD)bmp16.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) +$(DD)bmp16.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bmp16 $(bmp_) -$(DD)bmp256.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) +$(DD)bmp256.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bmp256 $(bmp_) -$(DD)bmp16m.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) +$(DD)bmp16m.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bmp16m $(bmp_) -$(DD)bmp32b.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) +$(DD)bmp32b.dev : $(DEVS_MAK) $(bmp_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)bmp32b $(bmp_) ### ------------- BMP driver that serves as demo of async rendering ---- ### @@ -1267,41 +1322,41 @@ $(DEVOBJ)gdevbmpa.$(OBJ) : $(DEVSRC)gdevbmpa.c $(AK) $(stdio__h)\ $(gdevbmp_h) $(gdevprna_h) $(gdevpccm_h) $(gdevppla_h)\ - $(gserrors_h) $(gpsync_h) + $(gserrors_h) $(gpsync_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevbmpa.$(OBJ) $(C_) $(DEVSRC)gdevbmpa.c $(DD)bmpamono.dev : $(DEVS_MAK) $(bmpa_) $(GLD)page.dev $(GLD)async.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)bmpamono $(bmpa_) $(ADDMOD) $(DD)bmpamono -include $(GLD)async $(DD)bmpasep1.dev : $(DEVS_MAK) $(bmpa_) $(GLD)page.dev $(GLD)async.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)bmpasep1 $(bmpa_) $(ADDMOD) $(DD)bmpasep1 -include $(GLD)async $(DD)bmpasep8.dev : $(DEVS_MAK) $(bmpa_) $(GLD)page.dev $(GLD)async.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)bmpasep8 $(bmpa_) $(ADDMOD) $(DD)bmpasep8 -include $(GLD)async $(DD)bmpa16.dev : $(DEVS_MAK) $(bmpa_) $(GLD)page.dev $(GLD)async.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)bmpa16 $(bmpa_) $(ADDMOD) $(DD)bmpa16 -include $(GLD)async $(DD)bmpa256.dev : $(DEVS_MAK) $(bmpa_) $(GLD)page.dev $(GLD)async.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)bmpa256 $(bmpa_) $(ADDMOD) $(DD)bmpa256 -include $(GLD)async $(DD)bmpa16m.dev : $(DEVS_MAK) $(bmpa_) $(GLD)page.dev $(GLD)async.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)bmpa16m $(bmpa_) $(ADDMOD) $(DD)bmpa16m -include $(GLD)async $(DD)bmpa32b.dev : $(DEVS_MAK) $(bmpa_) $(GLD)page.dev $(GLD)async.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)bmpa32b $(bmpa_) $(ADDMOD) $(DD)bmpa32b -include $(GLD)async @@ -1309,32 +1364,35 @@ xcf_=$(DEVOBJ)gdevxcf.$(OBJ) -$(DD)xcf.dev : $(DEVS_MAK) $(xcf_) $(GLD)page.dev $(GDEV) +$(DD)xcf.dev : $(DEVS_MAK) $(xcf_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETDEV) $(DD)xcf $(xcf_) -$(DD)xcfcmyk.dev : $(DEVS_MAK) $(xcf_) $(GLD)page.dev $(GDEV) +$(DD)xcfcmyk.dev : $(DEVS_MAK) $(xcf_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETDEV) $(DD)xcfcmyk $(xcf_) $(DEVOBJ)gdevxcf.$(OBJ) : $(DEVSRC)gdevxcf.c $(PDEVH) $(math__h)\ $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h)\ - $(gxdcconv_h) $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) + $(gxdcconv_h) $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevxcf.$(OBJ) $(C_) $(DEVSRC)gdevxcf.c ### --------------------------- The PSD device ------------------------- ### psd_=$(DEVOBJ)gdevpsd.$(OBJ) $(GLOBJ)gdevdevn.$(OBJ) $(GLOBJ)gsequivc.$(OBJ) -$(DD)psdrgb.dev : $(DEVS_MAK) $(psd_) $(GLD)page.dev $(GDEV) +$(DD)psdrgb.dev : $(DEVS_MAK) $(psd_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)psdrgb $(psd_) -$(DD)psdcmyk.dev : $(DEVS_MAK) $(psd_) $(GLD)page.dev $(GDEV) +$(DD)psdcmyk.dev : $(DEVS_MAK) $(psd_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETDEV) $(DD)psdcmyk $(psd_) $(DEVOBJ)gdevpsd.$(OBJ) : $(DEVSRC)gdevpsd.c $(PDEVH) $(math__h)\ $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h)\ $(gstypes_h) $(gxdcconv_h) $(gdevdevn_h) $(gsequivc_h)\ $(gscms_h) $(gsicc_cache_h) $(gsicc_manage_h) $(gxgetbit_h)\ - $(gdevppla_h) + $(gdevppla_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpsd.$(OBJ) $(C_) $(DEVSRC)gdevpsd.c ### ----------------------- The permutation device --------------------- ### @@ -1345,18 +1403,19 @@ $(SETDEV) $(DD)perm $(perm_) $(DEVOBJ)gdevperm.$(OBJ) : $(DEVSRC)gdevperm.c $(PDEVH) $(math__h)\ - $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h) + $(gdevdcrd_h) $(gscrd_h) $(gscrdp_h) $(gsparam_h) $(gxlum_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevperm.$(OBJ) $(C_) $(DEVSRC)gdevperm.c ### ------------------------ JBIG2 testing device ---------------------- ### gdevjbig2_=$(DEVOBJ)gdevjbig2.$(OBJ) -$(DD)gdevjbig2.dev : $(DEVS_MAK) $(gdevjbig2_) $(GLD)page.dev $(GDEV) +$(DD)gdevjbig2.dev : $(DEVS_MAK) $(gdevjbig2_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)gdevjbig2 $(gdevjbig2_) $(DEVOBJ)gdevjbig2.$(OBJ) : $(DEVSRC)gdevjbig2.c $(PDEVH)\ - $(stream_h) $(strimpl_h) $(sjbig2_luratech_h) + $(stream_h) $(strimpl_h) $(sjbig2_luratech_h) $(MAKEDIRS) $(GDEVLDFJB2CC) $(DEVO_)gdevjbig2.$(OBJ) $(C_) $(DEVSRC)gdevjbig2.c ### ------------------------ JPX testing device ---------------------- @@ -1364,17 +1423,20 @@ gdevjpx_=$(DEVOBJ)gdevjpx.$(OBJ) -$(DD)jpxrgb.dev : $(DEVS_MAK) $(gdevjpx_) $(GLD)page.dev $(GDEV) +$(DD)jpxrgb.dev : $(DEVS_MAK) $(gdevjpx_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)jpxrgb $(gdevjpx_) -$(DD)jpxgray.dev : $(DEVS_MAK) $(gdevjpx_) $(GLD)page.dev $(GDEV) +$(DD)jpxgray.dev : $(DEVS_MAK) $(gdevjpx_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)jpxgray $(gdevjpx_) -$(DD)jpxcmyk.dev : $(DEVS_MAK) $(gdevjpx_) $(GLD)page.dev $(GDEV) +$(DD)jpxcmyk.dev : $(DEVS_MAK) $(gdevjpx_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)jpxcmyk $(gdevjpx_) $(DEVOBJ)gdevjpx.$(OBJ) : $(DEVSRC)gdevjpx.c $(PDEVH)\ - $(stream_h) $(strimpl_h) $(sjpx_luratech_h) + $(stream_h) $(strimpl_h) $(sjpx_luratech_h) $(MAKEDIRS) $(GDEVLWFJPXCC) $(DEVO_)gdevjpx.$(OBJ) $(C_) $(DEVSRC)gdevjpx.c ### ------------------------- JPEG file format ------------------------- ### @@ -1382,25 +1444,26 @@ jpeg_=$(DEVOBJ)gdevjpeg.$(OBJ) # RGB output -$(DD)jpeg.dev : $(DEVS_MAK) $(jpeg_) $(GLD)sdcte.dev $(GLD)page.dev $(GDEV) +$(DD)jpeg.dev : $(DEVS_MAK) $(jpeg_) $(GLD)sdcte.dev $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)jpeg $(jpeg_) $(ADDMOD) $(DD)jpeg -include $(GLD)sdcte # Gray output $(DD)jpeggray.dev : $(DEVS_MAK) $(jpeg_) $(GLD)sdcte.dev $(GLD)page.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)jpeggray $(jpeg_) $(ADDMOD) $(DD)jpeggray -include $(GLD)sdcte # CMYK output $(DD)jpegcmyk.dev : $(DEVS_MAK) $(jpeg_) $(GLD)sdcte.dev $(GLD)page.dev\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)jpegcmyk $(jpeg_) $(ADDMOD) $(DD)jpegcmyk -include $(GLD)sdcte $(DEVOBJ)gdevjpeg.$(OBJ) : $(DEVSRC)gdevjpeg.c $(PDEVH)\ $(stdio__h) $(jpeglib__h)\ - $(sdct_h) $(sjpeg_h) $(stream_h) $(strimpl_h) + $(sdct_h) $(sjpeg_h) $(stream_h) $(strimpl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevjpeg.$(OBJ) $(C_) $(DEVSRC)gdevjpeg.c ### ------------------------- MIFF file format ------------------------- ### @@ -1409,46 +1472,53 @@ miff_=$(DEVOBJ)gdevmiff.$(OBJ) -$(DD)miff24.dev : $(DEVS_MAK) $(miff_) $(GLD)page.dev $(GDEV) +$(DD)miff24.dev : $(DEVS_MAK) $(miff_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV) $(DD)miff24 $(miff_) -$(DEVOBJ)gdevmiff.$(OBJ) : $(DEVSRC)gdevmiff.c $(PDEVH) +$(DEVOBJ)gdevmiff.$(OBJ) : $(DEVSRC)gdevmiff.c $(PDEVH) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevmiff.$(OBJ) $(C_) $(DEVSRC)gdevmiff.c ### ------------------------- PCX file formats ------------------------- ### pcx_=$(DEVOBJ)gdevpcx.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ) -$(DEVOBJ)gdevpcx.$(OBJ) : $(DEVSRC)gdevpcx.c $(PDEVH) $(gdevpccm_h) $(gxlum_h) +$(DEVOBJ)gdevpcx.$(OBJ) : $(DEVSRC)gdevpcx.c $(PDEVH) $(gdevpccm_h) $(gxlum_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpcx.$(OBJ) $(C_) $(DEVSRC)gdevpcx.c -$(DD)pcxmono.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) +$(DD)pcxmono.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pcxmono $(pcx_) -$(DD)pcxgray.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) +$(DD)pcxgray.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pcxgray $(pcx_) -$(DD)pcx16.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) +$(DD)pcx16.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pcx16 $(pcx_) -$(DD)pcx256.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) +$(DD)pcx256.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pcx256 $(pcx_) -$(DD)pcx24b.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) +$(DD)pcx24b.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pcx24b $(pcx_) -$(DD)pcxcmyk.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) +$(DD)pcxcmyk.dev : $(DEVS_MAK) $(pcx_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pcxcmyk $(pcx_) # The 2-up PCX device is here only as an example, and for testing. $(DD)pcx2up.dev : $(DEVS_MAK) $(LIB_MAK) $(DEVOBJ)gdevp2up.$(OBJ)\ - $(GLD)page.dev $(DD)pcx256.dev $(GDEV) + $(GLD)page.dev $(DD)pcx256.dev $(GDEV) $(MAKEDIRS) $(SETPDEV) $(DD)pcx2up $(DEVOBJ)gdevp2up.$(OBJ) $(ADDMOD) $(DD)pcx2up -include $(DD)pcx256 $(DEVOBJ)gdevp2up.$(OBJ) : $(DEVSRC)gdevp2up.c $(AK)\ - $(gdevpccm_h) $(gdevprn_h) $(gxclpage_h) + $(gdevpccm_h) $(gdevprn_h) $(gxclpage_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevp2up.$(OBJ) $(C_) $(DEVSRC)gdevp2up.c ### ------------------- Portable Bitmap file formats ------------------- ### @@ -1459,83 +1529,99 @@ $(DEVOBJ)gdevpbm.$(OBJ) : $(DEVSRC)gdevpbm.c $(PDEVH)\ $(gdevmpla_h) $(gdevplnx_h) $(gdevppla_h)\ - $(gscdefs_h) $(gscspace_h) $(gxgetbit_h) $(gxiparam_h) $(gxlum_h) + $(gscdefs_h) $(gscspace_h) $(gxgetbit_h) $(gxiparam_h) $(gxlum_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpbm.$(OBJ) $(C_) $(DEVSRC)gdevpbm.c ### Portable Bitmap (PBM, plain or raw format, magic numbers "P1" or "P4") -$(DD)pbm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pbm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)pbm $(pxm_) -$(DD)pbmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pbmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pbmraw $(pxm_) ### Portable Graymap (PGM, plain or raw format, magic numbers "P2" or "P5") -$(DD)pgm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pgm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)pgm $(pxm_) -$(DD)pgmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pgmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pgmraw $(pxm_) # PGM with automatic optimization to PBM if this is possible. -$(DD)pgnm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pgnm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)pgnm $(pxm_) -$(DD)pgnmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pgnmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pgnmraw $(pxm_) ### Portable Pixmap (PPM, plain or raw format, magic numbers "P3" or "P6") -$(DD)ppm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)ppm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)ppm $(pxm_) -$(DD)ppmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)ppmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)ppmraw $(pxm_) # PPM with automatic optimization to PGM or PBM if possible. -$(DD)pnm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pnm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pnm $(pxm_) -$(DD)pnmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pnmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pnmraw $(pxm_) -$(DD)pnmcmyk.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pnmcmyk.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pnmcmyk $(pxm_) ### Portable inKmap (CMYK internally, converted to PPM=RGB at output time) -$(DD)pkm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pkm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pkm $(pxm_) -$(DD)pkmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pkmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pkmraw $(pxm_) ### Portable Separated map (CMYK internally, produces 4 monobit pages) -$(DD)pksm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pksm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pksm $(pxm_) -$(DD)pksmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pksmraw.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pksmraw $(pxm_) ### Plan 9 bitmap format -$(DD)plan9bm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)plan9bm.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)plan9bm $(pxm_) ### Portable Arbitrary Map (PAM, magic number "P7", CMYK) -$(DD)pamcmyk4.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pamcmyk4.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pamcmyk4 $(pxm_) -$(DD)pamcmyk32.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pamcmyk32.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pamcmyk32 $(pxm_) # Keep the older (non-descriptive) name in case it is being used -$(DD)pam.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) +$(DD)pam.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)pam $(pxm_) ### --------------- Portable Network Graphics file format --------------- ### @@ -1547,38 +1633,46 @@ png_i_=-include $(PNGGENDIR)$(D)libpng $(DEVOBJ)gdevpng.$(OBJ) : $(DEVSRC)gdevpng.c\ - $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(png__h) + $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(png__h) $(MAKEDIRS) $(CC_) $(I_)$(DEVI_) $(II)$(PI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevpng.$(OBJ) $(C_) $(DEVSRC)gdevpng.c -$(DD)pngmono.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) +$(DD)pngmono.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pngmono $(png_) $(ADDMOD) $(DD)pngmono $(png_i_) -$(DD)pngmonod.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) +$(DD)pngmonod.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pngmonod $(png_) $(ADDMOD) $(DD)pngmonod $(png_i_) -$(DD)pnggray.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) +$(DD)pnggray.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pnggray $(png_) $(ADDMOD) $(DD)pnggray $(png_i_) -$(DD)png16.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) +$(DD)png16.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)png16 $(png_) $(ADDMOD) $(DD)png16 $(png_i_) -$(DD)png256.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) +$(DD)png256.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)png256 $(png_) $(ADDMOD) $(DD)png256 $(png_i_) -$(DD)png16m.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) +$(DD)png16m.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)png16m $(png_) $(ADDMOD) $(DD)png16m $(png_i_) -$(DD)png48.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) +$(DD)png48.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)png48 $(png_) $(ADDMOD) $(DD)png48 $(png_i_) -$(DD)pngalpha.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) +$(DD)pngalpha.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pngalpha $(png_) $(ADDMOD) $(DD)pngalpha $(png_i_) @@ -1589,17 +1683,17 @@ fpng_=$(DEVOBJ)gdevfpng.$(OBJ) $(DEVOBJ)gdevpccm.$(OBJ) $(DEVOBJ)gdevfpng_0.$(OBJ) : $(DEVSRC)gdevfpng.c\ - $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(zlib_h) + $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(zlib_h) $(MAKEDIRS) $(CC_) $(I_)$(DEVI_) $(II)$(PI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevfpng_0.$(OBJ) $(C_) $(DEVSRC)gdevfpng.c $(DEVOBJ)gdevfpng_1.$(OBJ) : $(DEVSRC)gdevfpng.c\ - $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) + $(gdevprn_h) $(gdevpccm_h) $(gscdefs_h) $(MAKEDIRS) $(CC_) $(I_)$(DEVI_) $(II)$(PI_)$(_I) $(PCF_) $(GLF_) $(DEVO_)gdevfpng_1.$(OBJ) $(C_) $(DEVSRC)gdevfpng.c -$(DEVOBJ)gdevfpng.$(OBJ) : $(DEVOBJ)gdevfpng_$(SHARE_ZLIB).$(OBJ) +$(DEVOBJ)gdevfpng.$(OBJ) : $(DEVOBJ)gdevfpng_$(SHARE_ZLIB).$(OBJ) $(MAKEDIRS) $(CP_) $(DEVOBJ)gdevfpng_$(SHARE_ZLIB).$(OBJ) $(DEVOBJ)gdevfpng.$(OBJ) -$(DD)fpng.dev : $(DEVS_MAK) $(fpng_) $(GLD)page.dev $(GDEV) +$(DD)fpng.dev : $(DEVS_MAK) $(fpng_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)fpng $(fpng_) $(ADDMOD) $(DD)fpng $(fpng_i_) @@ -1613,7 +1707,7 @@ $(DEVOBJ)gdevpsim.$(OBJ) : $(DEVSRC)gdevpsim.c $(PDEVH)\ $(gdevpsu_h)\ - $(sa85x_h) $(srlx_h) $(stream_h) $(strimpl_h) + $(sa85x_h) $(srlx_h) $(stream_h) $(strimpl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevpsim.$(OBJ) $(C_) $(DEVSRC)gdevpsim.c ### --- Minimum Feature Size support functions --- ### @@ -1625,7 +1719,7 @@ minftrsz_h=$(DEVSRC)minftrsz.h $(std_h) minftrsz_=$(minftrsz_h) $(DEVOBJ)minftrsz.$(OBJ) -$(DEVOBJ)minftrsz.$(OBJ) : $(DEVSRC)minftrsz.c $(minftrsz_h) +$(DEVOBJ)minftrsz.$(OBJ) : $(DEVSRC)minftrsz.c $(minftrsz_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)minftrsz.$(OBJ) $(C_) $(DEVSRC)minftrsz.c @@ -1637,28 +1731,29 @@ # AdjustWidth to 0 (e.g., -dAdjustWidth=0 on the command line). gdevfax_h=$(DEVSRC)gdevfax.h -libtiff_dev=$(TIFFGENDIR)$(D)libtiff.dev -tiff_i_=-include $(TIFFGENDIR)$(D)libtiff fax_=$(DEVOBJ)gdevfax.$(OBJ) $(DEVOBJ)minftrsz.$(OBJ) $(DD)fax.dev : $(DEVS_MAK) $(libtiff_dev) $(fax_) $(GLD)cfe.dev $(minftrsz_h)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETMOD) $(DD)fax $(fax_) $(ADDMOD) $(DD)fax -include $(GLD)cfe $(tiff_i_) $(DEVOBJ)gdevfax.$(OBJ) : $(DEVSRC)gdevfax.c $(PDEVH)\ - $(gdevfax_h) $(scfx_h) $(strimpl_h) + $(gdevfax_h) $(scfx_h) $(strimpl_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevfax.$(OBJ) $(C_) $(DEVSRC)gdevfax.c -$(DD)faxg3.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)fax.dev $(GDEV) +$(DD)faxg3.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)fax.dev $(GDEV) \ + $(MAKEDIRS) $(SETDEV2) $(DD)faxg3 -include $(DD)fax $(ADDMOD) $(DD)faxg3 $(tiff_i_) -$(DD)faxg32d.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)fax.dev $(GDEV) +$(DD)faxg32d.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)fax.dev $(GDEV) \ + $(MAKEDIRS) $(SETDEV2) $(DD)faxg32d -include $(DD)fax $(ADDMOD) $(DD)faxg32d $(tiff_i_) -$(DD)faxg4.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)fax.dev $(GDEV) +$(DD)faxg4.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)fax.dev $(GDEV) \ + $(MAKEDIRS) $(SETDEV2) $(DD)faxg4 -include $(DD)fax $(ADDMOD) $(DD)faxg4 $(tiff_i_) @@ -1672,14 +1767,14 @@ tfax_=$(DEVOBJ)gdevtfax.$(OBJ) $(DEVOBJ)minftrsz.$(OBJ) $(DD)tfax.dev : $(DEVS_MAK) $(libtiff_dev) $(tfax_) $(GLD)cfe.dev\ $(GLD)lzwe.dev $(GLD)rle.dev $(DD)fax.dev $(DD)tiffs.dev $(minftrsz_h)\ - $(gstiffio_h) $(GDEV) + $(gstiffio_h) $(GDEV) $(MAKEDIRS) $(SETMOD) $(DD)tfax $(tfax_) $(ADDMOD) $(DD)tfax -include $(GLD)cfe $(GLD)lzwe $(GLD)rle $(ADDMOD) $(DD)tfax -include $(DD)fax $(DD)tiffs $(tiff_i_) $(DEVOBJ)gdevtfax.$(OBJ) : $(DEVSRC)gdevtfax.c $(PDEVH)\ $(stdint__h) $(gdevfax_h) $(gdevtifs_h)\ - $(scfx_h) $(slzwx_h) $(srlx_h) $(strimpl_h) + $(scfx_h) $(slzwx_h) $(srlx_h) $(strimpl_h) $(MAKEDIRS) $(DEVCC) $(I_)$(TI_)$(_I) $(DEVO_)gdevtfax.$(OBJ) $(C_) $(DEVSRC)gdevtfax.c ### ---------------------------- TIFF formats --------------------------- ### @@ -1692,61 +1787,61 @@ $(GLOBJ)gdevppla.$(OBJ) $(DD)tiffs.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffs_) $(GLD)page.dev\ - $(minftrsz_) $(GDEV) + $(minftrsz_) $(GDEV) $(MAKEDIRS) $(SETMOD) $(DD)tiffs $(tiffs_) $(ADDMOD) $(DD)tiffs -include $(GLD)page $(tiff_i_) $(DEVOBJ)gdevtifs.$(OBJ) : $(DEVSRC)gdevtifs.c $(PDEVH) $(stdint__h) $(stdio__h) $(time__h)\ - $(gdevtifs_h) $(gscdefs_h) $(gstypes_h) $(stream_h) $(strmio_h) $(gstiffio_h) + $(gdevtifs_h) $(gscdefs_h) $(gstypes_h) $(stream_h) $(strmio_h) $(gstiffio_h) $(MAKEDIRS) $(DEVCC) $(I_)$(DEVI_) $(II)$(TI_)$(_I) $(DEVO_)gdevtifs.$(OBJ) $(C_) $(DEVSRC)gdevtifs.c # Black & white, G3/G4 fax # NOTE: see under faxg* above regarding page width adjustment. $(DD)tiffcrle.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)tiffcrle -include $(DD)tfax $(ADDMOD) $(DD)tiffcrle $(tiff_i_) $(DD)tiffg3.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)tiffg3 -include $(DD)tfax $(ADDMOD) $(DD)tiffg3 $(tiff_i_) $(DD)tiffg32d.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)tiffg32d -include $(DD)tfax $(ADDMOD) $(DD)tiffg32d $(tiff_i_) $(DD)tiffg4.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)tiffg4 -include $(DD)tfax $(ADDMOD) $(DD)tiffg4 $(tiff_i_) # Black & white, LZW compression $(DD)tifflzw.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)tifflzw -include $(DD)tfax $(ADDMOD) $(DD)tifflzw $(tiff_i_) # Black & white, PackBits compression $(DD)tiffpack.dev : $(DEVS_MAK) $(libtiff_dev) $(DD)tfax.dev $(minftrsz_)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETDEV2) $(DD)tiffpack -include $(DD)tfax $(ADDMOD) $(DD)tiffpack $(tiff_i_) # TIFF Gray, no compression $(DD)tiffgray.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffgray_) $(DD)tiffs.dev\ - $(minftrsz_h) $(GDEV) + $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiffgray $(tiffgray_) $(ADDMOD) $(DD)tiffgray -include $(DD)tiffs $(tiff_i_) $(DEVOBJ)gdevtsep.$(OBJ) : $(DEVSRC)gdevtsep.c $(PDEVH) $(stdint__h)\ $(gdevtifs_h) $(gdevdevn_h) $(gsequivc_h) $(stdio__h) $(ctype__h)\ - $(gxgetbit_h) $(gdevppla_h) $(gp_h) $(gstiffio_h) $(GDEV) + $(gxgetbit_h) $(gdevppla_h) $(gp_h) $(gstiffio_h) $(GDEV) $(MAKEDIRS) $(DEVCC) $(I_)$(TI_)$(_I) $(DEVO_)gdevtsep.$(OBJ) $(C_) $(DEVSRC)gdevtsep.c # TIFF Scaled (downscaled gray -> mono), configurable compression @@ -1754,7 +1849,7 @@ tiffscaled_=$(tiffsep_) $(DD)tiffscaled.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffscaled_) $(DD)tiffs.dev\ - $(minftrsz_h) $(GDEV) + $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiffscaled $(tiffscaled_) $(ADDMOD) $(DD)tiffscaled -include $(DD)tiffs $(tiff_i_) @@ -1763,7 +1858,7 @@ tiffscaled8_=$(tiffseop_) $(DD)tiffscaled8.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffscaled8_)\ - $(DD)tiffs.dev $(minftrsz_h) $(GDEV) + $(DD)tiffs.dev $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiffscaled8 $(tiffscaled8_) $(ADDMOD) $(DD)tiffscaled8 -include $(DD)tiffs $(tiff_i_) @@ -1772,7 +1867,7 @@ tiffscaled24_=$(tiffsep_) $(DD)tiffscaled24.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffscaled24_)\ - $(DD)tiffs.dev $(minftrsz_h) $(GDEV) + $(DD)tiffs.dev $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiffscaled24 $(tiffscaled8_) $(ADDMOD) $(DD)tiffscaled24 -include $(DD)tiffs $(tiff_i_) @@ -1781,7 +1876,7 @@ tiffscaled32_=$(tiffsep_) $(DD)tiffscaled32.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffscaled32_)\ - $(DD)tiffs.dev $(minftrsz_h) $(GDEV) + $(DD)tiffs.dev $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiffscaled32 $(tiffscaled8_) $(ADDMOD) $(DD)tiffscaled32 -include $(DD)tiffs $(tiff_i_) @@ -1790,7 +1885,7 @@ tiffscaled4_=$(tiffsep_) $(DD)tiffscaled4.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffscaled4_)\ - $(DD)tiffs.dev $(minftrsz_h) $(GDEV) + $(DD)tiffs.dev $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiffscaled4 $(tiffscaled8_) $(ADDMOD) $(DD)tiffscaled4 -include $(DD)tiffs $(tiff_i_) @@ -1799,33 +1894,33 @@ tiffrgb_=$(DEVOBJ)gdevtfnx.$(OBJ) $(DEVOBJ)minftrsz.$(OBJ) $(DD)tiff12nc.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffrgb_) $(DD)tiffs.dev\ - $(minftrsz_h) $(GDEV) + $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiff12nc $(tiffrgb_) $(ADDMOD) $(DD)tiff12nc -include $(DD)tiffs $(tiff_i_) $(DD)tiff24nc.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffrgb_) $(DD)tiffs.dev\ - $(minftrsz_h) $(GDEV) + $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiff24nc $(tiffrgb_) $(ADDMOD) $(DD)tiff24nc -include $(DD)tiffs $(tiff_i_) $(DD)tiff48nc.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffrgb_) $(DD)tiffs.dev\ - $(minftrsz_h) $(GDEV) + $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiff48nc $(tiffrgb_) $(ADDMOD) $(DD)tiff48nc -include $(DD)tiffs $(tiff_i_) $(DEVOBJ)gdevtfnx.$(OBJ) : $(DEVSRC)gdevtfnx.c $(PDEVH) $(stdint__h)\ - $(gdevtifs_h) $(gscms_h) $(gstiffio_h) $(GDEV) + $(gdevtifs_h) $(gscms_h) $(gstiffio_h) $(GDEV) $(MAKEDIRS) $(DEVCC) $(I_)$(TI_)$(_I) $(DEVO_)gdevtfnx.$(OBJ) $(C_) $(DEVSRC)gdevtfnx.c # TIFF CMYK, no compression $(DD)tiff32nc.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffgray_) $(DD)tiffs.dev\ - $(minftrsz_h) $(GDEV) + $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiff32nc $(tiffgray_) $(ADDMOD) $(DD)tiff32nc -include $(DD)tiffs $(tiff_i_) $(DD)tiff64nc.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffgray_) $(DD)tiffs.dev\ - $(minftrsz_h) $(GDEV) + $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiff64nc $(tiffgray_) $(ADDMOD) $(DD)tiff64nc -include $(DD)tiffs $(tiff_i_) @@ -1833,7 +1928,7 @@ # Create separation files (tiffgray) plus CMYK composite (tiff32nc) $(DD)tiffsep.dev : $(DEVS_MAK) $(libtiff_dev) $(tiffsep_) $(DD)tiffs.dev\ - $(minftrsz_h) $(GDEV) + $(minftrsz_h) $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiffsep $(tiffsep_) $(ADDMOD) $(DD)tiffsep -include $(DD)tiffs $(tiff_i_) @@ -1841,7 +1936,7 @@ # Create separation files (tiff 1-bit) $(DD)tiffsep1.dev : $(DEVS_MAK) $(tiffsep_) $(DD)tiffs.dev $(minftrsz_h)\ - $(GDEV) + $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)tiffsep1 $(tiffsep_) $(ADDMOD) $(DD)tiffsep1 -include $(DD)tiffs @@ -1852,22 +1947,28 @@ $(DEVOBJ)gdevplan.$(OBJ) : $(DEVSRC)gdevplan.c $(PDEVH)\ $(gdevmpla_h) $(gdevplnx_h) $(gdevppla_h)\ - $(gscdefs_h) $(gscspace_h) $(gxgetbit_h) $(gxiparam_h) $(gxlum_h) + $(gscdefs_h) $(gscspace_h) $(gxgetbit_h) $(gxiparam_h) $(gxlum_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevplan.$(OBJ) $(C_) $(DEVSRC)gdevplan.c -$(DD)plan.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) +$(DD)plan.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)plan $(plan_) -$(DD)plang.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) +$(DD)plang.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)plang $(plan_) -$(DD)planm.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) +$(DD)planm.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)planm $(plan_) -$(DD)planc.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) +$(DD)planc.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)planc $(plan_) -$(DD)plank.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) +$(DD)plank.dev : $(DEVS_MAK) $(plan_) $(GLD)page.dev $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)plank $(plan_) # @@ -1877,34 +1978,37 @@ $(DEVOBJ)gdevplib.$(OBJ) : $(DEVSRC)gdevplib.c $(PDEVH)\ $(gdevmpla_h) $(gdevplnx_h) $(gdevppla_h)\ - $(gscdefs_h) $(gscspace_h) $(gxgetbit_h) $(gxiparam_h) $(gxlum_h) + $(gscdefs_h) $(gscspace_h) $(gxgetbit_h) $(gxiparam_h) $(gxlum_h) \ + $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevplib.$(OBJ) $(C_) $(DEVSRC)gdevplib.c -$(DD)plib.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) +$(DD)plib.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)plib $(plib_) -$(DD)plibg.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) +$(DD)plibg.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)plibg $(plib_) -$(DD)plibm.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) +$(DD)plibm.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)plibm $(plib_) -$(DD)plibc.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) +$(DD)plibc.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)plibc $(plib_) -$(DD)plibk.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) +$(DD)plibk.dev : $(DEVS_MAK) $(plib_) $(GLD)page.dev $(GDEV) $(MAKEDIRS) $(SETPDEV2) $(DD)plibk $(plib_) # ink coverage device -- a device that records the ink coverage # on each page, and discards the page. -$(DD)inkcov.dev : $(ECHOGS_XE) $(LIB_MAK) $(DEVOBJ)gdevicov.$(OBJ) +$(DD)inkcov.dev : $(ECHOGS_XE) $(LIB_MAK) $(DEVOBJ)gdevicov.$(OBJ) \ + $(MAKEDIRS) $(SETDEV2) $(DD)inkcov $(DEVOBJ)gdevicov.$(OBJ) -$(DD)ink_cov.dev : $(ECHOGS_XE) $(LIB_MAK) $(DEVOBJ)gdevicov.$(OBJ) +$(DD)ink_cov.dev : $(ECHOGS_XE) $(LIB_MAK) $(DEVOBJ)gdevicov.$(OBJ) \ + $(MAKEDIRS) $(SETDEV2) $(DD)ink_cov $(DEVOBJ)gdevicov.$(OBJ) -$(DEVOBJ)gdevicov.$(OBJ) : $(DEVSRC)gdevicov.c $(AK) $(MAKEDIRS) \ - $(arch_h) $(gdevprn_h) $(stdio__h) $(stdint__h) +$(DEVOBJ)gdevicov.$(OBJ) : $(DEVSRC)gdevicov.c $(AK) \ + $(arch_h) $(gdevprn_h) $(stdio__h) $(stdint__h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevicov.$(OBJ) $(C_) $(DEVSRC)gdevicov.c @@ -1913,16 +2017,18 @@ lcupsi_dev=$(LCUPSIGENDIR)$(D)lcupsi.dev cups_=$(DEVOBJ)gdevcups.$(OBJ) -$(DD)cups.dev : $(DEVS_MAK) $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) +$(DD)cups.dev : $(DEVS_MAK) $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)cups $(cups_) $(ADDMOD) $(DD)cups -include $(lcups_dev) $(ADDMOD) $(DD)cups -include $(lcupsi_dev) -$(DD)pwgraster.dev : $(DEVS_MAK) $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) +$(DD)pwgraster.dev : $(DEVS_MAK) $(lcups_dev) $(lcupsi_dev) $(cups_) $(GDEV) \ + $(MAKEDIRS) $(SETPDEV2) $(DD)pwgraster $(cups_) $(ADDMOD) $(DD)pwgraster -include $(lcups_dev) $(ADDMOD) $(DD)pwgraster -include $(lcupsi_dev) -$(DEVOBJ)gdevcups.$(OBJ) : $(LCUPSSRCDIR)$(D)gdevcups.c $(std_h) +$(DEVOBJ)gdevcups.$(OBJ) : $(LCUPSSRCDIR)$(D)gdevcups.c $(std_h) $(MAKEDIRS) $(CUPS_CC) $(DEVO_)gdevcups.$(OBJ) $(C_) $(CFLAGS) $(CUPSCFLAGS) \ $(I_)$(GLSRC) \ $(I_)$(DEVSRC) \ @@ -1939,7 +2045,8 @@ $(gxpaint_h) $(gxtmap_h) $(gzcpath_h) $(gzpath_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevtrac.$(OBJ) $(C_) $(DEVSRC)gdevtrac.c -$(DD)tracedev.dev : $(DEVS_MAK) $(GDEV) $(DEVOBJ)gdevtrac.$(OBJ) +$(DD)tracedev.dev : $(DEVS_MAK) $(GDEV) $(DEVOBJ)gdevtrac.$(OBJ) \ + $(MAKEDIRS) $(SETMOD) $(DD)tracedev -dev2 tr_mono tr_rgb tr_cmyk $(ADDMOD) $(DD)tracedev -obj $(DEVOBJ)gdevtrac.$(OBJ) @@ -1948,9 +2055,9 @@ psdcmykog_=$(DEVOBJ)gdevcmykog.$(OBJ) $(DD)psdcmykog.dev : $(DEVS_MAK) $(GDEV) $(psdcmykog_) $(DD)page.dev \ - $(GLOBJ)gdevdevn.$(OBJ) + $(GLOBJ)gdevdevn.$(OBJ) $(MAKEDIRS) $(SETPDEV) $(DD)psdcmykog $(psdcmykog_) $(DEVOBJ)gdevcmykog.$(OBJ) : $(DEVSRC)gdevcmykog.c $(GDEV) \ - $(GDEVH) $(gdevdevn_h) $(gsequivc_h) $(gdevdevnprn_h) + $(GDEVH) $(gdevdevn_h) $(gsequivc_h) $(gdevdevnprn_h) $(MAKEDIRS) $(DEVCC) $(DEVO_)gdevcmykog.$(OBJ) $(C_) $(DEVSRC)gdevcmykog.c diff -Nru ghostscript-9.15+dfsg/devices/gdevbit.c ghostscript-9.16~dfsg~0/devices/gdevbit.c --- ghostscript-9.15+dfsg/devices/gdevbit.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/gdevbit.c 2015-03-30 08:21:24.000000000 +0000 @@ -42,6 +42,7 @@ #if 0 /* unused */ static dev_proc_map_rgb_color(bit_forcemono_map_rgb_color); #endif +static dev_proc_map_rgb_color(bitrgb_rgb_map_rgb_color); static dev_proc_map_color_rgb(bit_map_color_rgb); static dev_proc_map_cmyk_color(bit_map_cmyk_color); static dev_proc_get_params(bit_get_params); @@ -135,7 +136,7 @@ }; static const gx_device_procs bitrgb_procs = -bit_procs(gx_default_rgb_map_rgb_color); +bit_procs(bitrgb_rgb_map_rgb_color); const gx_device_bit gs_bitrgb_device = {prn_device_body(gx_device_bit, bitrgb_procs, "bitrgb", DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, @@ -437,6 +438,25 @@ } #endif +gx_color_index +bitrgb_rgb_map_rgb_color(gx_device * dev, const gx_color_value cv[]) +{ + if (dev->color_info.depth == 24) + return gx_color_value_to_byte(cv[2]) + + ((uint) gx_color_value_to_byte(cv[1]) << 8) + + ((ulong) gx_color_value_to_byte(cv[0]) << 16); + else { + COLROUND_VARS; + /* The following needs special handling to avoid bpc=5 when depth=16 */ + int bpc = dev->color_info.depth == 16 ? 4 : dev->color_info.depth / 3; + COLROUND_SETUP(bpc); + + return (((COLROUND_ROUND(cv[0]) << bpc) + + COLROUND_ROUND(cv[1])) << bpc) + + COLROUND_ROUND(cv[2]); + } +} + /* Map color to RGB. This has 3 separate cases, but since it is rarely */ /* used, we do a case test rather than providing 3 separate routines. */ static int diff -Nru ghostscript-9.15+dfsg/devices/gdevcmykog.c ghostscript-9.16~dfsg~0/devices/gdevcmykog.c --- ghostscript-9.15+dfsg/devices/gdevcmykog.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/gdevcmykog.c 2015-03-30 08:21:24.000000000 +0000 @@ -593,34 +593,47 @@ { gx_device_cmykog * pdevn = (gx_device_cmykog *) pdev; int ncomp = pdevn->color_info.num_components; - cmykog_process_arg_t arg = { { 0 } }; + cmykog_process_arg_t *arg; gx_process_page_options_t options; int code, i; - psd_write_ctx psd_ctx; + psd_write_ctx *psd_ctx; + + if ((arg = (cmykog_process_arg_t *)gs_alloc_bytes(pdev->memory, + sizeof(cmykog_process_arg_t), + "cmykog_print_page arg")) == NULL) + return_error(gs_error_VMerror); + + memset(arg, 0, sizeof(cmykog_process_arg_t)); + if ((psd_ctx = (psd_write_ctx *)gs_alloc_bytes(pdev->memory, + sizeof(psd_write_ctx), + "cmykog_print_page psd_ctx")) == NULL) { + gs_free_object(pdev->memory, arg, "cmykog_print_page arg"); + return_error(gs_error_VMerror); + } /* Calculate the raster that will be used for each bands data; * gx_device_raster_plane takes care of any alignment or padding * required. */ - arg.dev_raster = gx_device_raster_plane((gx_device *)pdev, NULL); + arg->dev_raster = gx_device_raster_plane((gx_device *)pdev, NULL); #ifndef NO_OUTPUT /* Output the psd headers */ - code = psd_setup(&psd_ctx, (gx_devn_prn_device *)pdevn, + code = psd_setup(psd_ctx, (gx_devn_prn_device *)pdevn, prn_stream, pdev->width>>1, pdev->height>>1); if (code < 0) return code; - code = psd_write_header(&psd_ctx, (gx_devn_prn_device *)pdevn); + code = psd_write_header(psd_ctx, (gx_devn_prn_device *)pdevn); if (code < 0) return code; /* We will output the 0th plane direct to the target file. We open * temporary files here, where the data for planes 1-5 will be put. * We will then copy this data into the target file at the end. */ - arg.spot_file[0] = prn_stream; + arg->spot_file[0] = prn_stream; for(i = 1; i < ncomp; i++) { - arg.spot_file[i] = gp_open_scratch_file(pdev->memory, gp_scratch_file_name_prefix, &arg.spot_name[i][0], "w+b"); - if (arg.spot_file[i] == NULL) { + arg->spot_file[i] = gp_open_scratch_file(pdev->memory, gp_scratch_file_name_prefix, &(arg->spot_name[i][0]), "w+b"); + if (arg->spot_file[i] == NULL) { code = gs_error_invalidfileaccess; goto prn_done; } @@ -632,7 +645,7 @@ options.free_buffer_fn = cmykog_free_buffer; options.process_fn = cmykog_process; options.output_fn = cmykog_output; - options.arg = &arg; + options.arg = arg; options.options = 0; code = dev_proc(pdev, process_page)((gx_device *)pdev, &options); @@ -641,9 +654,9 @@ for (i = 1; i < ncomp; i++) { char tmp[4096]; int n; - fseek(arg.spot_file[i], 0, SEEK_SET); - while (!feof(arg.spot_file[i])) { - n = fread(tmp, 1, 4096, arg.spot_file[i]); + fseek(arg->spot_file[i], 0, SEEK_SET); + while (!feof(arg->spot_file[i])) { + n = fread(tmp, 1, 4096, arg->spot_file[i]); fwrite(tmp, 1, n, prn_stream); } } @@ -659,12 +672,14 @@ #ifndef NO_OUTPUT /* Close the temporary files. */ for(i = 1; i < ncomp; i++) { - if (arg.spot_file[i] != NULL) - fclose(arg.spot_file[i]); - if(arg.spot_name[i][0]) - unlink(arg.spot_name[i]); + if (arg->spot_file[i] != NULL) + fclose(arg->spot_file[i]); + if(arg->spot_name[i][0]) + unlink(arg->spot_name[i]); } #endif + gs_free_object(pdev->memory, psd_ctx, "cmykog_print_page psd_ctx"); + gs_free_object(pdev->memory, arg, "cmykog_print_page arg"); return code; } diff -Nru ghostscript-9.15+dfsg/devices/gdevplib.c ghostscript-9.16~dfsg~0/devices/gdevplib.c --- ghostscript-9.15+dfsg/devices/gdevplib.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/gdevplib.c 2015-03-30 08:21:24.000000000 +0000 @@ -156,7 +156,7 @@ #ifdef TESTING_WITH_NO_BAND_DONOR -#include +#include static void *my_buffer; @@ -553,13 +553,13 @@ int bandHeight = ppdev->space_params.band.BandHeight; code = gdev_prn_put_params(pdev, plist); - if (ppdev->space_params.band.BandHeight < MINBANDHEIGHT) - { - emprintf1(pdev->memory, "Must have a BandHeight of at least %d\n", MINBANDHEIGHT); - + /* Note that 0 means "default". This will encounter a future check in "open" */ + if (ppdev->space_params.band.BandHeight != 0 && + ppdev->space_params.band.BandHeight < MINBANDHEIGHT) { + emprintf2(pdev->memory, "BandHeight of %d not valid, BandHeight minimum is %d\n", + ppdev->space_params.band.BandHeight, MINBANDHEIGHT); ecode = gs_error_rangecheck; - - /* Restore to our valid value */ + /* Restore to the previous (possibly default == 0) value */ ppdev->space_params.band.BandHeight = bandHeight; } if (ecode >= 0) @@ -591,7 +591,8 @@ plane1.depth = mdev->color_info.depth; num_planes = 1; } - + if (line_ptrs) + mdev->line_ptrs = line_ptrs; for (pi = 0; pi < num_planes; ++pi) { byte **pend = line_ptrs + setup_height; byte *scan_line = base; @@ -710,6 +711,7 @@ plib_open(gx_device * pdev) { gx_device_plib * const bdev = (gx_device_plib *)pdev; + gx_device_printer * const ppdev = (gx_device_printer *)pdev; int code; #ifdef DEBUG_PRINT @@ -718,6 +720,7 @@ bdev->printer_procs.buf_procs.create_buf_device = plib_create_buf_device; bdev->printer_procs.buf_procs.setup_buf_device = plib_setup_buf_device; bdev->printer_procs.buf_procs.size_buf_device = plib_size_buf_device; + pdev->is_planar = 1; /* You might expect us to call gdev_prn_open_planar rather than * gdev_prn_open, but if we do that, it overwrites the 2 function @@ -725,7 +728,13 @@ code = gdev_prn_open(pdev); if (code < 0) return code; - pdev->is_planar = 1; + if (ppdev->space_params.band.BandHeight < MINBANDHEIGHT) { + emprintf2(pdev->memory, "BandHeight of %d not valid, BandHeight minimum is %d\n", + ((gx_device_printer *)pdev)->space_params.band.BandHeight, + MINBANDHEIGHT); + + return_error(gs_error_rangecheck); + } pdev->color_info.separable_and_linear = GX_CINFO_SEP_LIN; set_linear_color_bits_mask_shift(pdev); diff -Nru ghostscript-9.15+dfsg/devices/gdevpsd.c ghostscript-9.16~dfsg~0/devices/gdevpsd.c --- ghostscript-9.15+dfsg/devices/gdevpsd.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/gdevpsd.c 2015-03-30 08:21:24.000000000 +0000 @@ -90,6 +90,7 @@ long downscale_factor; int max_spots; + bool lock_colorants; /* ICC color profile objects, for color conversion. These are all device link profiles. At least that @@ -265,7 +266,8 @@ /* PSD device specific parameters */ psd_DEVICE_RGB, /* Color model */ 1, /* downscale_factor */ - GS_SOFT_MAX_SPOTS /* max_spots */ + GS_SOFT_MAX_SPOTS, /* max_spots */ + false, /* colorants not locked */ }; /* @@ -295,7 +297,8 @@ /* PSD device specific parameters */ psd_DEVICE_CMYK, /* Color model */ 1, /* downscale_factor */ - GS_SOFT_MAX_SPOTS /* max_spots */ + GS_SOFT_MAX_SPOTS, /* max_spots */ + false, /* colorants not locked */ }; /* Open the psd devices */ @@ -338,13 +341,6 @@ limit_icc = false; #endif code = dev_proc(pdev, get_profile)((gx_device *)pdev, &profile_struct); - /* Check for case where someone did NOT specify sICCOutputColors but we - have an NCLR ICC profile for the output. In that case, we use a set of - "default" names */ - if (profile_struct->device_profile[0]->num_comps > 4 && - profile_struct->spotnames == NULL) { - - } if (profile_struct->spotnames == NULL) { force_pdf = false; force_ps = false; @@ -363,39 +359,46 @@ that the number of spot colors can change from page to page. Update things so that we only output separations for the inks on that page. */ - if ((pdev_psd->devn_params.page_spot_colors >= 0 || force_pdf) && !force_ps) { - if (force_pdf) { - /* Use the information that is in the ICC profle. We will be here - anytime that we have limited ourselves to a fixed number - of colorants specified by the DeviceN ICC profile */ - pdev->color_info.num_components = - (pdev_psd->devn_params.separations.num_separations - + pdev_psd->devn_params.num_std_colorant_names); - if (pdev->color_info.num_components > pdev->color_info.max_components) - pdev->color_info.num_components = pdev->color_info.max_components; - /* Limit us only to the ICC colorants */ - pdev->color_info.max_components = pdev->color_info.num_components; + + if (pdev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE) { + if ((pdev_psd->devn_params.page_spot_colors >= 0 || force_pdf) && !force_ps) { + if (force_pdf) { + /* Use the information that is in the ICC profle. We will be here + anytime that we have limited ourselves to a fixed number + of colorants specified by the DeviceN ICC profile */ + pdev->color_info.num_components = + (pdev_psd->devn_params.separations.num_separations + + pdev_psd->devn_params.num_std_colorant_names); + if (pdev->color_info.num_components > pdev->color_info.max_components) + pdev->color_info.num_components = pdev->color_info.max_components; + /* Limit us only to the ICC colorants */ + pdev->color_info.max_components = pdev->color_info.num_components; + } else { + /* Use the information that is in the page spot color. We should + be here if we are processing a PDF and we do not have a DeviceN + ICC profile specified for output */ + if (!(pdev_psd->lock_colorants)) { + pdev->color_info.num_components = + (pdev_psd->devn_params.page_spot_colors + + pdev_psd->devn_params.num_std_colorant_names); + if (pdev->color_info.num_components > pdev->color_info.max_components) + pdev->color_info.num_components = pdev->color_info.max_components; + } + } } else { - /* Use the information that is in the page spot color. We should - be here if we are processing a PDF and we do not have a DeviceN - ICC profile specified for output */ - pdev->color_info.num_components = - (pdev_psd->devn_params.page_spot_colors - + pdev_psd->devn_params.num_std_colorant_names); - if (pdev->color_info.num_components > pdev->color_info.max_components) - pdev->color_info.num_components = pdev->color_info.max_components; + /* We do not know how many spots may occur on the page. + For this reason we go ahead and allocate the maximum that we + have available. Note, lack of knowledge only occurs in the case + of PS files. With PDF we know a priori the number of spot + colorants. */ + if (!(pdev_psd->lock_colorants)) { + int num_comp = pdev_psd->max_spots + 4; /* Spots + CMYK */ + if (num_comp > GS_CLIENT_COLOR_MAX_COMPONENTS) + num_comp = GS_CLIENT_COLOR_MAX_COMPONENTS; + pdev->color_info.num_components = num_comp; + pdev->color_info.max_components = num_comp; + } } - } else { - /* We do not know how many spots may occur on the page. - For this reason we go ahead and allocate the maximum that we - have available. Note, lack of knowledge only occurs in the case - of PS files. With PDF we know a priori the number of spot - colorants. */ - int num_comp = pdev_psd->max_spots + 4; /* Spots + CMYK */ - if (num_comp > GS_CLIENT_COLOR_MAX_COMPONENTS) - num_comp = GS_CLIENT_COLOR_MAX_COMPONENTS; - pdev->color_info.num_components = num_comp; - pdev->color_info.max_components = num_comp; } /* Push this to the max amount as a default if someone has not set it */ if (pdev_psd->devn_params.num_separation_order_names == 0) @@ -768,7 +771,7 @@ code = param_write_int(plist, "MaxSpots", &xdev->max_spots); if (code < 0) return code; - + code = param_write_bool(plist, "LockColorants", &xdev->lock_colorants); return code; } @@ -857,6 +860,16 @@ return code; } + switch (code = param_read_bool(plist, "LockColorants", &(pdevn->lock_colorants))) { + case 0: + break; + case 1: + break; + default: + param_signal_error(plist, "LockColorants", code); + return code; + } + switch (code = param_read_int(plist, "MaxSpots", &pdevn->max_spots)) { @@ -1000,18 +1013,22 @@ } xc->base_bytes_pp = dev->devn_params.num_std_colorant_names; xc->num_channels = i; - if (dev->devn_params.num_separation_order_names == 0) { - xc->n_extra_channels = dev->devn_params.separations.num_separations; - } else { - /* Have to figure out how many in the order list were not std - colorants */ - spot_count = 0; - for (i = 0; i < dev->devn_params.num_separation_order_names; i++) { - if (dev->devn_params.separation_order_map[i] >= NUM_CMYK_COMPONENTS) { - spot_count++; + if (dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE) { + if (dev->devn_params.num_separation_order_names == 0) { + xc->n_extra_channels = dev->devn_params.separations.num_separations; + } else { + /* Have to figure out how many in the order list were not std + colorants */ + spot_count = 0; + for (i = 0; i < dev->devn_params.num_separation_order_names; i++) { + if (dev->devn_params.separation_order_map[i] >= NUM_CMYK_COMPONENTS) { + spot_count++; + } } + xc->n_extra_channels = spot_count; } - xc->n_extra_channels = spot_count; + } else { + xc->n_extra_channels = 0; } xc->width = w; xc->height = h; @@ -1028,16 +1045,18 @@ xc->chnl_to_orig_sep[i] = i; } /* If we had a specify order name, then we may need to adjust things */ - if (dev->devn_params.num_separation_order_names > 0) { - for (i = 0; i < dev->devn_params.num_separation_order_names; i++) { - int sep_order_num = dev->devn_params.separation_order_map[i]; - if (sep_order_num >= NUM_CMYK_COMPONENTS) { - xc->chnl_to_position[xc->num_channels] = sep_order_num; - xc->chnl_to_orig_sep[xc->num_channels++] = sep_order_num; + if (dev->color_info.polarity == GX_CINFO_POLARITY_SUBTRACTIVE) { + if (dev->devn_params.num_separation_order_names > 0) { + for (i = 0; i < dev->devn_params.num_separation_order_names; i++) { + int sep_order_num = dev->devn_params.separation_order_map[i]; + if (sep_order_num >= NUM_CMYK_COMPONENTS) { + xc->chnl_to_position[xc->num_channels] = sep_order_num; + xc->chnl_to_orig_sep[xc->num_channels++] = sep_order_num; + } } + } else { + xc->num_channels += dev->devn_params.separations.num_separations; } - } else { - xc->num_channels += dev->devn_params.separations.num_separations; } return 0; } diff -Nru ghostscript-9.15+dfsg/devices/gdevtsep.c ghostscript-9.16~dfsg~0/devices/gdevtsep.c --- ghostscript-9.15+dfsg/devices/gdevtsep.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/gdevtsep.c 2015-03-30 08:21:24.000000000 +0000 @@ -537,12 +537,13 @@ bool PrintSpotCMYK; /* true = print CMYK equivalents for spot inks; false = do nothing */\ uint16 Compression; /* for the separation files, same values as TIFFTAG_COMPRESSION */\ - bool close_files; \ + bool close_files;\ long MaxStripSize;\ long DownScaleFactor;\ long MinFeatureSize;\ long BitsPerComponent;\ int max_spots;\ + bool lock_colorants;\ gs_devn_params devn_params; /* DeviceN generated parameters */\ equivalent_cmyk_color_params equiv_cmyk_colors @@ -720,7 +721,8 @@ 1, /* DownScaleFactor */\ 0, /* MinFeatureSize */\ 8, /* BitsPerComponent */\ - GS_SOFT_MAX_SPOTS /* max_spots */ + GS_SOFT_MAX_SPOTS, /* max_spots */\ + false /* Colorants not locked */ #define GCIB (ARCH_SIZEOF_GX_COLOR_INDEX * 8) @@ -957,6 +959,8 @@ ecode = code; if ((code = param_write_int(plist, "MaxSpots", &pdevn->max_spots)) < 0) ecode = code; + if ((code = param_write_bool(plist, "LockColorants", &pdevn->lock_colorants)) < 0) + ecode = code; if ((code = param_write_bool(plist, "PrintSpotCMYK", &pdevn->PrintSpotCMYK)) < 0) ecode = code; @@ -1076,6 +1080,16 @@ param_signal_error(plist, param_name, code); return code; } + switch (code = param_read_bool(plist, (param_name = "LockColorants"), + &(pdevn->lock_colorants))) { + case 0: + break; + case 1: + break; + default: + param_signal_error(plist, param_name, code); + return code; + } switch (code = param_read_int(plist, (param_name = "MaxSpots"), &max_spots)) { case 0: if ((max_spots >= 0) || (max_spots <= GS_CLIENT_COLOR_MAX_COMPONENTS-4)) { @@ -1615,11 +1629,15 @@ /* Limit us only to the ICC colorants */ pdev->color_info.max_components = pdev->color_info.num_components; } else { - pdev->color_info.num_components = - (pdev_sep->devn_params.page_spot_colors - + pdev_sep->devn_params.num_std_colorant_names); - if (pdev->color_info.num_components > pdev->color_info.max_components) - pdev->color_info.num_components = pdev->color_info.max_components; + /* Do not allow the spot count to update if we have specified the + colorants already */ + if (!(pdev_sep->lock_colorants)) { + pdev->color_info.num_components = + (pdev_sep->devn_params.page_spot_colors + + pdev_sep->devn_params.num_std_colorant_names); + if (pdev->color_info.num_components > pdev->color_info.max_components) + pdev->color_info.num_components = pdev->color_info.max_components; + } } } else { /* We do not know how many spots may occur on the page. @@ -1627,11 +1645,13 @@ have available. Note, lack of knowledge only occurs in the case of PS files. With PDF we know a priori the number of spot colorants. */ - int num_comp = pdev_sep->max_spots + 4; /* Spots + CMYK */ - if (num_comp > GS_CLIENT_COLOR_MAX_COMPONENTS) - num_comp = GS_CLIENT_COLOR_MAX_COMPONENTS; - pdev->color_info.num_components = num_comp; - pdev->color_info.max_components = num_comp; + if (!(pdev_sep->lock_colorants)) { + int num_comp = pdev_sep->max_spots + 4; /* Spots + CMYK */ + if (num_comp > GS_CLIENT_COLOR_MAX_COMPONENTS) + num_comp = GS_CLIENT_COLOR_MAX_COMPONENTS; + pdev->color_info.num_components = num_comp; + pdev->color_info.max_components = num_comp; + } } /* Push this to the max amount as a default if someone has not set it */ if (pdev_sep->devn_params.num_separation_order_names == 0) diff -Nru ghostscript-9.15+dfsg/devices/gxfcopy.c ghostscript-9.16~dfsg~0/devices/gxfcopy.c --- ghostscript-9.15+dfsg/devices/gxfcopy.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/gxfcopy.c 2015-03-30 08:21:24.000000000 +0000 @@ -2159,13 +2159,54 @@ return code; } +/* We only need this because the ddescndant(s) share the parent + * CIDFont glyph space, so we can't free that if we are a descendant. + */ +static int gs_free_copied_descendant_font(gs_font *font) +{ + gs_copied_font_data_t *cfdata = font->client_data; + gs_memory_t *mem = font->memory; + + if (cfdata) { + uncopy_string(mem, &cfdata->info.FullName, + "gs_free_copied_font(FullName)"); + uncopy_string(mem, &cfdata->info.FamilyName, + "gs_free_copied_font(FamilyName)"); + uncopy_string(mem, &cfdata->info.Notice, + "gs_free_copied_font(Notice)"); + uncopy_string(mem, &cfdata->info.Copyright, + "gs_free_copied_font(Copyright)"); + if (cfdata->Encoding) + gs_free_object(mem, cfdata->Encoding, "gs_free_copied_font(Encoding)"); + gs_free_object(mem, cfdata->names, "gs_free_copied_font(names)"); + gs_free_object(mem, cfdata->data, "gs_free_copied_font(data)"); + gs_free_object(mem, cfdata, "gs_free_copied_font(wrapper data)"); + } + gs_free_object(mem, font, "gs_free_copied_font(copied font)"); + return 0; +} + int gs_free_copied_font(gs_font *font) { gs_copied_font_data_t *cfdata = font->client_data; gs_memory_t *mem = font->memory; - int i; + int i, code; gs_copied_glyph_t *pcg = 0; + /* For CID fonts, we must also free the descendants, which we copied + * at the time we copied the actual CIDFont itself + */ + if (font->FontType == ft_CID_encrypted) { + gs_font_cid0 *copied0 = (gs_font_cid0 *)font; + + for (i = 0; i < copied0->cidata.FDArray_size; ++i) { + code = gs_free_copied_descendant_font((gs_font *)copied0->cidata.FDArray[i]); + if (code < 0) + return code; + } + gs_free_object(mem, copied0->cidata.FDArray, "free copied CIDFont FDArray"); + copied0->cidata.FDArray = 0; + } /* free copied glyph data */ for (i=0;i < cfdata->glyphs_size;i++) { pcg = &cfdata->glyphs[i]; diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfb.h ghostscript-9.16~dfsg~0/devices/vector/gdevpdfb.h --- ghostscript-9.15+dfsg/devices/vector/gdevpdfb.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfb.h 2015-03-30 08:21:24.000000000 +0000 @@ -283,5 +283,6 @@ 0, /* pointer to resourceusage */ 0, /* Size of resourceusage */ false, /* called from output_page */ - false /* FlattenFonts, writes text as outlines instead of fonts */ + false, /* FlattenFonts, writes text as outlines instead of fonts */ + -1 /* Last Form ID, start with -1 which means 'none' */ }; diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdf.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdf.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdf.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdf.c 2015-03-30 08:21:24.000000000 +0000 @@ -36,6 +36,7 @@ #include "gsfcmap.h" /* For gs_cmap_ToUnicode_free */ #include "gxfcache.h" +#include "gdevpdts.h" /* for sync_text_state */ /* Define the default language level and PDF compatibility level. */ /* Acrobat 6 (PDF 1.5) is the default. (1.5 for ICC V4 profile support) */ @@ -169,7 +170,6 @@ RELOC_PTR(gx_device_pdf, Identity_ToUnicode_CMaps[1]); RELOC_PTR(gx_device_pdf, ResourceUsage); RELOC_PTR(gx_device_pdf, vgstack); - RELOC_PTR(gx_device_pdf, outline_levels); RELOC_PTR(gx_device_pdf, EmbeddedFiles); RELOC_PTR(gx_device_pdf, pdf_font_dir); #define r1(i,elt) RELOC_PARAM_STRING_PTR(gx_device_pdf,elt); @@ -191,6 +191,7 @@ } } } + RELOC_PTR(gx_device_pdf, outline_levels); } RELOC_PTRS_END /* Even though device_pdfwrite_finalize is the same as gx_device_finalize, */ @@ -693,6 +694,13 @@ void pdf_reset_text(gx_device_pdf * pdev) { + /* we need to flush the text buffer, in case we have (eg) Tr set, + * but have reset it to 0 for the current (buffered) text. If we restore to a + * graphics state which also has Tr 0 then we won't ever write out the change. + * I suspect this can theoretically happen with other graphics state values too + * See PCL file enter.test. + */ + sync_text_state(pdev); pdf_reset_text_state(pdev->text); } @@ -1322,10 +1330,29 @@ pdf_output_page(gx_device * dev, int num_copies, int flush) { gx_device_pdf *const pdev = (gx_device_pdf *) dev; - int code = pdf_close_page(pdev, num_copies); + int code; + + if (pdev->ForOPDFRead) { + code = pdf_close_page(pdev, num_copies); + if (code < 0) + return code; + + while (pdev->sbstack_depth) { + code = pdf_exit_substream(pdev); + if (code < 0) + return code; + } + } else { + while (pdev->sbstack_depth) { + code = pdf_exit_substream(pdev); + if (code < 0) + return code; + } + code = pdf_close_page(pdev, num_copies); + if (code < 0) + return code; + } - if (code < 0) - return code; if(pdev->UseCIEColor) { emprintf(pdev->memory, "\n\nUse of -dUseCIEColor detected!\nSince the release of version 9.11 of Ghostscript we recommend you do not set\n-dUseCIEColor with the pdfwrite/ps2write device family.\n\n"); } @@ -1340,6 +1367,7 @@ if ((code = pdf_close(dev)) < 0) return code; code = pdf_open(dev); + dev->is_open = true; } return code; } diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfc.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdfc.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdfc.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfc.c 2015-03-30 08:21:24.000000000 +0000 @@ -1512,10 +1512,10 @@ } int pdf_cs_Pattern_uncolored_hl(gx_device_pdf *pdev, - const gs_color_space *pcs, cos_value_t *pvalue) + const gs_color_space *pcs, cos_value_t *pvalue, const gs_imager_state * pis) { /* Only for high level colors. */ - return pdf_color_space_named(pdev, NULL, pvalue, NULL, pcs, &pdf_color_space_names, true, NULL, 0, false); + return pdf_color_space_named(pdev, pis, pvalue, NULL, pcs, &pdf_color_space_names, true, NULL, 0, false); } /* Set the ProcSets bits corresponding to an image color space. */ diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfg.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdfg.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdfg.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfg.c 2015-03-30 08:21:24.000000000 +0000 @@ -1231,11 +1231,11 @@ return gs_error_undefined; } code = pdf_put_colored_pattern(pdev, pdc, pcs, - ppscc, pis->have_pattern_streams, &pres); + ppscc, pis, &pres); } else if (pdc->type == &gx_dc_pure_masked) { code = pdf_put_uncolored_pattern(pdev, pdc, pcs, - ppscc, pis->have_pattern_streams, &pres); + ppscc, pis, &pres); if (code < 0 || pres == 0) { /* replaced a pattern with a flat fill, but we still * need to change the 'saved' colour or we will @@ -1796,10 +1796,10 @@ if (pdc->type == gx_dc_type_pattern) code = pdf_put_colored_pattern(pdev, pdc, pcs, - ppscc, pis->have_pattern_streams, &pres); + ppscc, pis, &pres); else if (pdc->type == &gx_dc_pure_masked) { code = pdf_put_uncolored_pattern(pdev, pdc, pcs, - ppscc, pis->have_pattern_streams, &pres); + ppscc, pis, &pres); if (code < 0 || pres == 0) { /* replaced a pattern with a flat fill, but we still * need to change the 'saved' colour or we will diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfg.h ghostscript-9.16~dfsg~0/devices/vector/gdevpdfg.h --- ghostscript-9.15+dfsg/devices/vector/gdevpdfg.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfg.h 2015-03-30 08:21:24.000000000 +0000 @@ -116,7 +116,7 @@ int pdf_cs_Pattern_colored(gx_device_pdf *pdev, cos_value_t *pvalue); int pdf_cs_Pattern_uncolored(gx_device_pdf *pdev, cos_value_t *pvalue); int pdf_cs_Pattern_uncolored_hl(gx_device_pdf *pdev, - const gs_color_space *pcs, cos_value_t *pvalue); + const gs_color_space *pcs, cos_value_t *pvalue, const gs_imager_state * pis); /* Set the ProcSets bits corresponding to an image color space. */ void pdf_color_space_procsets(gx_device_pdf *pdev, @@ -334,13 +334,13 @@ int pdf_put_colored_pattern(gx_device_pdf *pdev, const gx_drawing_color *pdc, const gs_color_space *pcs, const psdf_set_color_commands_t *ppscc, - bool have_pattern_streams, pdf_resource_t **ppres); + const gs_imager_state * pis, pdf_resource_t **ppres); /* Write an uncolored Pattern color. */ int pdf_put_uncolored_pattern(gx_device_pdf *pdev, const gx_drawing_color *pdc, const gs_color_space *pcs, const psdf_set_color_commands_t *ppscc, - bool have_pattern_streams, pdf_resource_t **ppres); + const gs_imager_state *pis, pdf_resource_t **ppres); /* Write a PatternType 2 (shading pattern) color. */ int pdf_put_pattern2(gx_device_pdf *pdev, const gs_imager_state * pis, const gx_drawing_color *pdc, diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfi.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdfi.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdfi.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfi.c 2015-03-30 08:21:24.000000000 +0000 @@ -2771,6 +2771,39 @@ pdf_reserve_object_id(pdev, pres, 0); pprintld1(pdev->strm, "/R%ld Do Q\n", pdf_resource_id(pres)); pdev->HighLevelForm--; + pdev->LastFormID = pdf_resource_id(pres); + } + return 0; + case gxdso_get_form_ID: + { + int *ID = data; + *ID = pdev->LastFormID; + } + return 0; + case gxdso_repeat_form: + { + gs_form_template_t *tmplate = (gs_form_template_t *)data; + + /* Make sure the document and page stream are open */ + code = pdfwrite_pdf_open_document(pdev); + if (code < 0) + return code; + code = pdf_open_contents(pdev, PDF_IN_STREAM); + if (code < 0) + return code; + /* Put any extant clip out before we start the form */ + code = pdf_put_clip_path(pdev, tmplate->pcpath); + if (code < 0) + return code; + /* Set the CTM to be the one passed in from the interpreter, + * this allows us to spot forms even when translation/rotation takes place + * as we remove the CTN from the form stream before capture + */ + pprintg6(pdev->strm, "q %g %g %g %g %g %g cm\n", tmplate->CTM.xx, tmplate->CTM.xy, + tmplate->CTM.yx, tmplate->CTM.yy, tmplate->CTM.tx, tmplate->CTM.ty); + pprintld1(pdev->strm, "/R%ld Do Q\n", tmplate->FormID); + pres = pdf_find_resource_by_resource_id(pdev, resourceXObject, tmplate->FormID); + pres->where_used |= pdev->used_mask; } return 0; case gxdso_pattern_start_accum: diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfo.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdfo.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdfo.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfo.c 2015-03-30 08:21:24.000000000 +0000 @@ -933,69 +933,6 @@ return 0; } -static int find_last_dict_entry(const cos_dict_t *d, const cos_dict_element_t **element) -{ - const cos_dict_element_t *pcde = d->elements, *Last; - int code, length, length1, length2, offset1 = 0, offset2 = 0, i; - - *element = 0L; - - Last = pcde; - for (i = 0;Last->key.data[i] == 0x00; i++) - ; - length1 = Last->key.size - i; - offset1 = i; - - if (Last->key.data[offset1] == '/') { - length1 -= 1; - offset1 += 1; - } else { - if (pcde->key.data[offset1] == '(') { - length1 -= 2; - offset1 = 1; - } else { - return_error(gs_error_typecheck); - } - } - - pcde = pcde->next; - while (pcde){ - for (i = 0;pcde->key.data[i] == 0x00; i++) - ; - length2 = pcde->key.size - i; - offset2 = i; - if (pcde->key.data[offset2] == '/') { - length2 -= 1; - offset2 += 1; - } else { - if (pcde->key.data[offset2] == '(') { - length2 -= 2; - offset2 = 1; - } else { - return_error(gs_error_typecheck); - } - } - - if (length2 < length1) - length = length2; - else - length = length1; - code = strncmp((const char *)&pcde->key.data[offset2], (const char *)&Last->key.data[offset1], length); - if (code == 0) { - if (length2 > length1) { - Last = pcde; - length1 = length2; - } - } else if (code > 0) { - Last = pcde; - length1 = length2; - } - pcde = pcde->next; - } - *element = Last; - return 0; -} - static int find_first_dict_entry(const cos_dict_t *d, const cos_dict_element_t **element) { const cos_dict_element_t *pcde = d->elements, *First; @@ -1163,6 +1100,24 @@ return 0; } +static int find_last_dict_entry(const cos_dict_t *d, const cos_dict_element_t **element) +{ + const cos_dict_element_t *pcde = d->elements, *Last, *Next; + + *element = 0L; + + Next = Last = pcde; + + do { + Last = Next; + find_next_dict_entry(d, &Next); + } while (Next); + + *element = Last; + + return 0; +} + static int write_key_as_string(stream *s, const cos_dict_element_t *element) { int i, length, offset; diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfp.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdfp.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdfp.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfp.c 2015-03-30 08:21:24.000000000 +0000 @@ -525,9 +525,6 @@ pdev->PreserveSMask = false; } - if (pdev->PDFA == 1) { - pdev->UseOldColor = true; - } /* * We have to set version to the new value, because the set of * legal parameter values for psdf_put_params varies according to @@ -779,6 +776,42 @@ /* ---------------- Process DSC comments ---------------- */ +/* Bug #695850 DSC comments are not actually encoded, nor are they PostScript strings + * they are simply a sequence of bytes. SO it would seem we should just preserve that + * byte sequence. Bizarrely, Distiller treats the comment as 'almost' a PostScript + * string. In particular it converts octal codes into an equivalent binary byte. It + * also converts (eg) '\n' and '\r' into 'n' and 'r' and invalid octal escapes + * (eg \11) simply have the '\' turned into a '?'. + * We think this is nuts and have no intention of trying to mimic it precisely. This + * routine will find octal escapes and convert them into binary. The way this works is + * a little obscure. The DSC parser does convert the comment into a PostScript string + * and so has to escape any unusual characters. This means our octal escaped values in + * the original DSC comment have had the escape character ('\') escaped to become '\\'. + * All we need to do is remove the escape of the escape and we will end up with a + * properly escaped PostScript string. + */ +static int unescape_octals(gx_device_pdf * pdev, char *src, int size) +{ + char *start, *dest; + + start = src; + dest = src; + + while(size) { + if (size > 4 && src[0] == '\\' && src[1] == '\\' && + src[2] > 0x29 && src[2] < 0x35 && + src[3] > 0x29 &&src[3] < 0x38 && + src[4] > 0x29 && src[4] < 0x38) { + src++; + size--; + } else { + *dest++ = *src++; + size--; + } + } + return (dest - start); +} + static int pdf_dsc_process(gx_device_pdf * pdev, const gs_param_string_array * pma) { @@ -799,8 +832,9 @@ for (i = 0; i + 1 < pma->size && code >= 0; i += 2) { const gs_param_string *pkey = &pma->data[i]; - const gs_param_string *pvalue = &pma->data[i + 1]; + gs_param_string *pvalue = (gs_param_string *)&pma->data[i + 1]; const char *key; + int newsize; /* * %%For, %%Creator, and %%Title are recognized only if either @@ -812,13 +846,25 @@ * but we do the same -- we ignore %%CreationDate here. */ - if (pdf_key_eq(pkey, "Creator")) + if (pdf_key_eq(pkey, "Creator")) { key = "/Creator"; - else if (pdf_key_eq(pkey, "Title")) + newsize = unescape_octals(pdev, (char *)pvalue->data, pvalue->size); + code = cos_dict_put_c_key_string(pdev->Info, key, + pvalue->data, newsize); + continue; + } else if (pdf_key_eq(pkey, "Title")) { key = "/Title"; - else if (pdf_key_eq(pkey, "For")) + newsize = unescape_octals(pdev, (char *)pvalue->data, pvalue->size); + code = cos_dict_put_c_key_string(pdev->Info, key, + pvalue->data, newsize); + continue; + } else if (pdf_key_eq(pkey, "For")) { key = "/Author"; - else { + newsize = unescape_octals(pdev, (char *)pvalue->data, pvalue->size); + code = cos_dict_put_c_key_string(pdev->Info, key, + pvalue->data, newsize); + continue; + } else { pdf_page_dsc_info_t *ppdi; char scan_buf[200]; /* arbitrary */ diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdft.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdft.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdft.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdft.c 2015-03-30 08:21:24.000000000 +0000 @@ -269,6 +269,34 @@ pdf_begin_transparency_mask(gs_imager_state * pis, gx_device_pdf * pdev, const gs_pdf14trans_params_t * pparams) { + if (pparams->subtype == TRANSPARENCY_MASK_None) { + int code, id = pis->soft_mask_id; + pdf_resource_t *pres = 0L; + + /* reset the soft mask ID. Apparently this is only used by pdfwrite, if we don't + * reset it, then the pdf_prepare_drawing code doesn't know that the SMask has + * changed, and so doesn't write out the GState + */ + pis->soft_mask_id = 0; + code = pdf_prepare_drawing(pdev, pis, &pres); + if (code == gs_error_interrupt) { + /* Not in an appropriate context, ignore it but restore + * the old soft_mask_id. Not sure this is correct, but it works for now. + */ + pis->soft_mask_id = id; + /* ignore return code, we don't care about this graphics state as we aren't + * emitting it anyway + */ + pdf_end_gstate(pdev, pres); + return 0; + } + if (code < 0) + return code; + code = pdf_end_gstate(pdev, pres); + if (code < 0) + return code; + return 0; + } if (pparams->mask_is_image) { /* HACK : The control comes here when diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfu.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdfu.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdfu.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfu.c 2015-03-30 08:21:24.000000000 +0000 @@ -1199,7 +1199,8 @@ *pprev = pres->prev; break; } - for (i = 0; i < NUM_RESOURCE_CHAINS; i++) { + + for (i = (gs_id_hash(pres1->rid) % NUM_RESOURCE_CHAINS); i < NUM_RESOURCE_CHAINS; i++) { pprev = pchain + i; for (; (pres = *pprev) != 0; pprev = &pres->next) if (pres == pres1) { @@ -1210,7 +1211,7 @@ pres->object = 0; } gs_free_object(pdev->pdf_memory, pres, "pdf_forget_resource"); - break; + return; } } } diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfv.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdfv.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdfv.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfv.c 2015-03-30 08:21:24.000000000 +0000 @@ -325,12 +325,12 @@ pdf_put_uncolored_pattern(gx_device_pdf *pdev, const gx_drawing_color *pdc, const gs_color_space *pcs, const psdf_set_color_commands_t *ppscc, - bool have_pattern_streams, pdf_resource_t **ppres) + const gs_imager_state * pis, pdf_resource_t **ppres) { const gx_color_tile *m_tile = pdc->mask.m_tile; gx_drawing_color dc_pure; - if (!have_pattern_streams && m_tile == 0) { + if (!pis->have_pattern_streams && m_tile == 0) { /* * If m_tile == 0, this uncolored Pattern is all 1's, * equivalent to a pure color. @@ -347,14 +347,14 @@ if (!tile_size_ok(pdev, NULL, m_tile)) return_error(gs_error_limitcheck); - if (!have_pattern_streams) { + if (!pis->have_pattern_streams) { if ((code = pdf_cs_Pattern_uncolored(pdev, &v)) < 0 || (code = pdf_put_pattern_mask(pdev, m_tile, &pcs_image)) < 0 || (code = pdf_pattern(pdev, pdc, NULL, m_tile, pcs_image, ppres)) < 0 ) return code; } else { - code = pdf_cs_Pattern_uncolored_hl(pdev, pcs, &v); + code = pdf_cs_Pattern_uncolored_hl(pdev, pcs, &v, pis); if (code < 0) return code; *ppres = pdf_find_resource_by_gs_id(pdev, resourcePattern, pdc->mask.id); @@ -373,7 +373,7 @@ } cos_value_write(&v, pdev); pprints1(s, " %s ", ppscc->setcolorspace); - if (have_pattern_streams) + if (pis->have_pattern_streams) return 0; set_nonclient_dev_color(&dc_pure, gx_dc_pure_color(pdc)); return psdf_set_color((gx_device_vector *)pdev, &dc_pure, &no_scc, pdev->UseOldColor); @@ -384,7 +384,7 @@ pdf_put_colored_pattern(gx_device_pdf *pdev, const gx_drawing_color *pdc, const gs_color_space *pcs, const psdf_set_color_commands_t *ppscc, - bool have_pattern_streams, pdf_resource_t **ppres) + const gs_imager_state * pis, pdf_resource_t **ppres) { const gx_color_tile *p_tile = pdc->colors.pattern.p_tile; gs_color_space *pcs_Device; @@ -396,7 +396,7 @@ pdf_image_writer writer; int w = p_tile->tbits.rep_width, h = p_tile->tbits.rep_height; - if (!have_pattern_streams) { + if (!pis->have_pattern_streams) { /* * NOTE: We assume here that the color space of the cached Pattern * is the same as the native color space of the device. This will @@ -444,7 +444,7 @@ dcolor = *pdc; dcolor.colors.pure = color; return pdf_put_uncolored_pattern(pdev, &dcolor, pcs, ppscc, - have_pattern_streams, ppres); + pis, ppres); } not_pure: DO_NOTHING; /* required by MSVC */ @@ -470,7 +470,7 @@ &pdf_color_space_names, true, NULL, 0, false); if (code < 0) return code; - if (!have_pattern_streams) { + if (!pis->have_pattern_streams) { cos_stream_t *pcs_mask = 0; cos_stream_t *pcs_image; diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdfx.h ghostscript-9.16~dfsg~0/devices/vector/gdevpdfx.h --- ghostscript-9.15+dfsg/devices/vector/gdevpdfx.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdfx.h 2015-03-30 08:21:24.000000000 +0000 @@ -883,6 +883,7 @@ * the last file *if* we are emitting one file per page. */ bool FlattenFonts; + int LastFormID; }; #define is_in_page(pdev)\ diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdtc.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdtc.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdtc.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdtc.c 2015-03-30 08:21:24.000000000 +0000 @@ -140,8 +140,12 @@ gs_matrix_multiply(&prev_font->FontMatrix, psmat, &fmat); out.index = 0; /* Note : we don't reset out.xy_index here. */ code = pdf_process_string_aux(&out, &str, NULL, &fmat, &text_state); - if (code < 0) + if (code < 0) { + if (code == gs_error_undefined && new_font && new_font->FontType == ft_encrypted2) + /* Caused by trying to make a CFF font resource for ps2write, which doesn't support CFF, abort now! */ + return gs_error_invalidfont; return code; + } curr.xy_index = out.xy_index; /* pdf_encode_process_string advanced it. */ if (out.index < str.size) { gs_glyph glyph; diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdte.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdte.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdte.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdte.c 2015-03-30 08:21:24.000000000 +0000 @@ -716,8 +716,16 @@ if (glyphs_bbox.q.y < text_bbox.q.y) text_bbox.q.y = glyphs_bbox.q.y; } + /* removed this section for bug #695671, where the rotated text + * doesn't contribute the 'height' of the text to the x dimension + * of the bounding box if this code is present. I can't see why + * this clamping was done, if it turns out to be required then + * we will need to revisit this and bug #695671. + */ +#if 0 text_bbox.p.x = fixed2float(penum->origin.x); text_bbox.q.x = text_bbox.p.x + width_pt.x; +#endif x0 = float2fixed(text_bbox.p.x); y0 = float2fixed(text_bbox.p.y); bx2 = float2fixed(text_bbox.q.x) - x0; @@ -881,8 +889,6 @@ pwidths->Width.xy.x *= pmat->xx; /* formula simplified based on wy in glyph space == 0 */ pwidths->Width.xy.y = 0.0; /* WMode == 0 for PDF Type 3 fonts */ gs_distance_transform(pwidths->real_width.xy.x, pwidths->real_width.xy.y, pmat, &pwidths->real_width.xy); -// gs_distance_transform(pwidths->BBox.p.x, pwidths->BBox.p.y, pmat, &pwidths->BBox.p); -// gs_distance_transform(pwidths->BBox.q.x, pwidths->BBox.q.y, pmat, &pwidths->BBox.q); } else { /* * For other font types: @@ -893,10 +899,6 @@ pwidths->Width.xy.y /= 1000.0; pwidths->real_width.xy.x /= 1000.0; pwidths->real_width.xy.y /= 1000.0; -/* pwidths->BBox.p.x /= 1000.0; - pwidths->BBox.p.y /= 1000.0; - pwidths->BBox.q.x /= 1000.0; - pwidths->BBox.q.y /= 1000.0;*/ } } diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdtf.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdtf.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdtf.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdtf.c 2015-03-30 08:21:24.000000000 +0000 @@ -419,79 +419,107 @@ int font_resource_free(gx_device_pdf *pdev, pdf_font_resource_t *pdfont) { - if(pdfont->BaseFont.size - && (pdfont->base_font == NULL || !pdfont->base_font->is_standard)) { + if(pdfont->BaseFont.size + && (pdfont->base_font == NULL || !pdfont->base_font->is_standard)) { - gs_free_string(pdev->pdf_memory, pdfont->BaseFont.data, pdfont->BaseFont.size, "Free BaseFont string"); - pdfont->BaseFont.data = (byte *)0L; - pdfont->BaseFont.size = 0; - } - if(pdfont->Widths) { - gs_free_object(pdev->pdf_memory, pdfont->Widths, "Free Widths array"); - pdfont->Widths = 0; - } - if(pdfont->used) { - gs_free_object(pdev->pdf_memory, pdfont->used, "Free used array"); - pdfont->used = 0; - } - if(pdfont->res_ToUnicode) { - /* ToUnicode resources are tracked amd released separately */ - pdfont->res_ToUnicode = 0; - } - if(pdfont->cmap_ToUnicode) { - gs_cmap_ToUnicode_free(pdev->pdf_memory, pdfont->cmap_ToUnicode); - pdfont->cmap_ToUnicode = 0; - } - switch(pdfont->FontType) { - case ft_composite: - break; - case ft_PCL_user_defined: - case ft_MicroType: - case ft_GL2_stick_user_defined: - case ft_user_defined: - case ft_GL2_531: - if(pdfont->u.simple.Encoding) { - gs_free_object(pdev->pdf_memory, pdfont->u.simple.Encoding, "Free simple Encoding"); - pdfont->u.simple.Encoding = 0; - } - if(pdfont->u.simple.v) { - gs_free_object(pdev->pdf_memory, pdfont->u.simple.v, "Free simple v"); - pdfont->u.simple.v = 0; - } - if (pdfont->u.simple.s.type3.char_procs) { - pdf_free_charproc_ownership(pdev, (pdf_resource_t *)pdfont->u.simple.s.type3.char_procs); - pdfont->u.simple.s.type3.char_procs = 0; - } - break; - case ft_CID_encrypted: - case ft_CID_TrueType: - if(pdfont->u.cidfont.used2) { - gs_free_object(pdev->pdf_memory, pdfont->u.cidfont.used2, "Free CIDFont used2"); - pdfont->u.cidfont.used2 = 0; - } - if(pdfont->u.cidfont.CIDToGIDMap) { - gs_free_object(pdev->pdf_memory, pdfont->u.cidfont.CIDToGIDMap, "Free CIDToGID map"); - pdfont->u.cidfont.CIDToGIDMap = 0; - } - break; - default: - if(pdfont->u.simple.Encoding) { - gs_free_object(pdev->pdf_memory, pdfont->u.simple.Encoding, "Free simple Encoding"); - pdfont->u.simple.Encoding = 0; - } - if(pdfont->u.simple.v) { - gs_free_object(pdev->pdf_memory, pdfont->u.simple.v, "Free simple v"); - pdfont->u.simple.v = 0; - } - break; - } - if (pdfont->object) { - gs_free_object(pdev->pdf_memory, pdfont->object, "Free font resource object"); - pdfont->object = 0; + gs_free_string(pdev->pdf_memory, pdfont->BaseFont.data, pdfont->BaseFont.size, "Free BaseFont string"); + pdfont->BaseFont.data = (byte *)0L; + pdfont->BaseFont.size = 0; + } + if(pdfont->Widths) { + gs_free_object(pdev->pdf_memory, pdfont->Widths, "Free Widths array"); + pdfont->Widths = 0; + } + if(pdfont->used) { + gs_free_object(pdev->pdf_memory, pdfont->used, "Free used array"); + pdfont->used = 0; + } + if(pdfont->res_ToUnicode) { + /* ToUnicode resources are tracked amd released separately */ + pdfont->res_ToUnicode = 0; + } + if(pdfont->cmap_ToUnicode) { + gs_cmap_ToUnicode_free(pdev->pdf_memory, pdfont->cmap_ToUnicode); + pdfont->cmap_ToUnicode = 0; + } + switch(pdfont->FontType) { + case ft_composite: + break; + case ft_PCL_user_defined: + case ft_MicroType: + case ft_GL2_stick_user_defined: + case ft_user_defined: + case ft_GL2_531: + if(pdfont->u.simple.Encoding) { + gs_free_object(pdev->pdf_memory, pdfont->u.simple.Encoding, "Free simple Encoding"); + pdfont->u.simple.Encoding = 0; + } + if(pdfont->u.simple.v) { + gs_free_object(pdev->pdf_memory, pdfont->u.simple.v, "Free simple v"); + pdfont->u.simple.v = 0; + } + if (pdfont->u.simple.s.type3.char_procs) { + pdf_free_charproc_ownership(pdev, (pdf_resource_t *)pdfont->u.simple.s.type3.char_procs); + pdfont->u.simple.s.type3.char_procs = 0; + } + break; + case ft_CID_encrypted: + case ft_CID_TrueType: + if(pdfont->u.cidfont.used2) { + gs_free_object(pdev->pdf_memory, pdfont->u.cidfont.used2, "Free CIDFont used2"); + pdfont->u.cidfont.used2 = 0; + } + if(pdfont->u.cidfont.CIDToGIDMap) { + gs_free_object(pdev->pdf_memory, pdfont->u.cidfont.CIDToGIDMap, "Free CIDToGID map"); + pdfont->u.cidfont.CIDToGIDMap = 0; + } + break; + default: + if(pdfont->u.simple.Encoding) { + gs_free_object(pdev->pdf_memory, pdfont->u.simple.Encoding, "Free simple Encoding"); + pdfont->u.simple.Encoding = 0; + } + if(pdfont->u.simple.v) { + gs_free_object(pdev->pdf_memory, pdfont->u.simple.v, "Free simple v"); + pdfont->u.simple.v = 0; + } + break; + } + if (pdfont->object) { + gs_free_object(pdev->pdf_memory, pdfont->object, "Free font resource object"); + pdfont->object = 0; + } + /* We free FontDescriptor resources separately */ + if(pdfont->FontDescriptor) + pdfont->FontDescriptor = NULL; + else { + if (pdfont->base_font) { + /* Normally we free the 'base font' when we free the Font Descriptor, + * but if we have no font descriptor (we are not embedding the font), + * we won't free the copies of the font, or any other associated memory, + * so do it now. + */ + pdf_base_font_t *pbfont = pdfont->base_font; + gs_font *copied = (gs_font *)pbfont->copied, *complete = (gs_font *)pbfont->complete; + + if (copied) + gs_free_copied_font(copied); + if (complete && copied != complete) { + gs_free_copied_font(complete); + pbfont->complete = 0; + } + pbfont->copied = 0; + if (pbfont && pbfont->font_name.size) { + gs_free_string(pdev->pdf_memory, pbfont->font_name.data, pbfont->font_name.size, "Free BaseFont FontName string"); + pbfont->font_name.data = (byte *)0L; + pbfont->font_name.size = 0; + } + if (pbfont) { + gs_free_object(pdev->pdf_memory, pbfont, "Free base font from FontDescriptor)"); + pdfont->base_font = 0; + } } - /* We free FontDescriptor resources separately */ - if(pdfont->FontDescriptor) - pdfont->FontDescriptor = NULL; + } return 0; } diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpdti.c ghostscript-9.16~dfsg~0/devices/vector/gdevpdti.c --- ghostscript-9.15+dfsg/devices/vector/gdevpdti.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpdti.c 2015-03-30 08:21:24.000000000 +0000 @@ -531,7 +531,7 @@ values.pdfont = pdfont; values.size = 1; values.matrix = *pimat; - values.render_mode = 0; + values.render_mode = pdev->pte->pis->text_rendering_mode; values.word_spacing = 0; pdf_set_text_state_values(pdev, &values); pdf_bitmap_char_update_bbox(pdev, pcp->x_offset, pcp->y_offset, pcp->real_width.x, pcp->real_width.y); @@ -581,9 +581,11 @@ { pdf_char_proc_t *pcp; pdf_resource_t *pres; - int code = pdf_enter_substream(pdev, resourceCharProc, gs_next_ids(pdev->memory, 1), + int id = gs_next_ids(pdev->memory, 1); + int code = pdf_enter_substream(pdev, resourceCharProc, id, &pres, false, pdev->CompressFonts); + pres->rid = id; if (code < 0) return code; pcp = (pdf_char_proc_t *)pres; @@ -817,6 +819,8 @@ code = code1; pdev->context = pdev->sbstack[sbstack_ptr].context; pdf_text_state_copy(pdev->text->text_state, pdev->sbstack[sbstack_ptr].text_state); + gs_free_object(pdev->pdf_memory, pdev->sbstack[sbstack_ptr].text_state, "free text state for stream"); + pdev->sbstack[sbstack_ptr].text_state = 0; pdev->clip_path = pdev->sbstack[sbstack_ptr].clip_path; pdev->sbstack[sbstack_ptr].clip_path = 0; pdev->clip_path_id = pdev->sbstack[sbstack_ptr].clip_path_id; diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpsdf.h ghostscript-9.16~dfsg~0/devices/vector/gdevpsdf.h --- ghostscript-9.15+dfsg/devices/vector/gdevpsdf.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpsdf.h 2015-03-30 08:21:24.000000000 +0000 @@ -60,7 +60,12 @@ bool Encode; const char *Filter; int Resolution; - const char *AutoFilterStrategy; + enum psdf_autofilter_type { + af_Jpeg, + af_Jpeg2000 + } AutoFilterStrategy; +#define psdf_afs_names\ + "JPEG", "JPEG2000" const stream_template *filter_template; } psdf_image_params; @@ -211,11 +216,11 @@ NULL, /* Dict (JPEG or CCITTFax) */ \ 0, /* Downsample (false) */ \ 1.5, /* Donwsample threshold */ \ - ds_Subsample, /* Downsample type */ \ + ds_Bicubic, /* Downsample type */ \ 1, /* Encode (true) */ \ - 0, /* compression filter */ \ + 0, /* compression biccufilter */ \ 150, /* Downsample resolution */ \ - "JPEG2000", /* AutoFilterStrategy */ \ + af_Jpeg, /* AutoFilterStrategy */ \ &s_zlibE_template /* Filter stream template */ \ }, 0, /* ConvertCMYKImagesToRGB (false) */ \ 1 /* ConvertImagesToIndexed (true) */ @@ -232,7 +237,7 @@ 1, /* Encode (true) */ \ 0, /* compression filter */ \ 150, /* Downsample resolution */ \ - "JPEG2000", /* AutoFilterStrategy */ \ + af_Jpeg, /* AutoFilterStrategy */ \ &s_zlibE_template /* Filter stream template */ \ } @@ -248,7 +253,7 @@ 1, /* Encode (true) */ \ "CCITTFaxEncode", /* compression filter */ \ 300, /* Downsample resolution */ \ - "JPEG2000", /* AutoFilterStrategy */ \ + af_Jpeg, /* AutoFilterStrategy */ \ &s_CFE_template /* Filter stream template */ \ } diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpsdi.c ghostscript-9.16~dfsg~0/devices/vector/gdevpsdi.c --- ghostscript-9.15+dfsg/devices/vector/gdevpsdi.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpsdi.c 2015-03-30 08:21:24.000000000 +0000 @@ -511,7 +511,7 @@ if (!in_line && params->Depth > 1 && pdev->ParamCompatibilityLevel >= 1.5 && pim->ColorSpace->type->index != gs_color_space_index_Indexed && params->AutoFilter && - !strcmp(params->AutoFilterStrategy, "/JPEG2000")) { + params->AutoFilterStrategy != af_Jpeg) { params->Filter = "/JPXEncode"; params->filter_template = &s_jpxe_template; params->Dict = plist; diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevpsdp.c ghostscript-9.16~dfsg~0/devices/vector/gdevpsdp.c --- ghostscript-9.15+dfsg/devices/vector/gdevpsdp.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevpsdp.c 2015-03-30 08:21:24.000000000 +0000 @@ -138,7 +138,6 @@ pi(dst, gs_param_type_float, DownsampleThreshold),\ pi(e, gs_param_type_bool, Encode),\ pi(r, gs_param_type_int, Resolution),\ - pi(afs, gs_param_type_int, AutoFilterStrategy),\ gs_param_item_end\ } @@ -179,7 +178,7 @@ "DownsampleColorImages", "ColorImageDownsampleType", "ColorImageDownsampleThreshold", 1.5, "EncodeColorImages", "ColorImageFilter", Poly_filters, - "ColorImageResolution", "ColorAutoFilterStrategy" + "ColorImageResolution", "ColorImageAutoFilterStrategy" ) }; static const psdf_image_param_names_t Gray_names15 = { @@ -189,7 +188,7 @@ "DownsampleGrayImages", "GrayImageDownsampleType", "GrayImageDownsampleThreshold", 2.0, "EncodeGrayImages", "GrayImageFilter", Poly_filters, - "GrayImageResolution", "GrayAutoFilterStrategy" + "GrayImageResolution", "GrayImageAutoFilterStrategy" ) }; #undef pi @@ -202,6 +201,9 @@ static const char *const DownsampleType_names[] = { psdf_ds_names, 0 }; +static const char *const AutoFilterStrategy_names[] = { + psdf_afs_names, 0 +}; static const char *const Binding_names[] = { psdf_binding_names, 0 }; @@ -350,12 +352,12 @@ return code; /* (Resolution) */ -#ifdef USE_LWF_JP2 if (pnames->AutoFilterStrategy != 0) code = psdf_write_name(plist, pnames->AutoFilterStrategy, - (params->AutoFilterStrategy == 0 ? - "JPEG2000" : params->AutoFilterStrategy)); -#endif + AutoFilterStrategy_names[params->AutoFilterStrategy]); + if (code < 0) + return code; + return code; } @@ -957,7 +959,6 @@ &ecode); /* (DownsampleThreshold) */ /* (Encode) */ -#ifdef USE_LWF_JP2 /* Process AutoFilterStrategy before Filter, because it sets defaults for the latter. */ if (pnames->AutoFilterStrategy != NULL) { @@ -967,15 +968,17 @@ const psdf_image_filter_name *pn = pnames->filter_names; const char *param_name = 0; - if (gs_param_string_eq(&fs, "/JPEG")) { - params->AutoFilterStrategy = "/JPEG"; + if (gs_param_string_eq(&fs, "JPEG")) { + params->AutoFilterStrategy = af_Jpeg; param_name = "DCTEncode"; - } if (gs_param_string_eq(&fs, "/JPEG2000")) { - params->AutoFilterStrategy = "/JPEG2000"; - param_name = "JPXEncode"; } else { - ecode = gs_error_rangecheck; - goto ipe1; + if (gs_param_string_eq(&fs, "JPEG2000")) { + params->AutoFilterStrategy = af_Jpeg2000; + param_name = "JPXEncode"; + } else { + ecode = gs_error_rangecheck; + goto ipe1; + } } while (pn->pname != 0 && !gs_param_string_eq(&fs, param_name)) pn++; @@ -992,7 +995,7 @@ break; } } -#endif + switch (code = param_read_string(plist, pnames->Filter, &fs)) { case 0: { diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevtxtw.c ghostscript-9.16~dfsg~0/devices/vector/gdevtxtw.c --- ghostscript-9.15+dfsg/devices/vector/gdevtxtw.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevtxtw.c 2015-03-30 08:21:24.000000000 +0000 @@ -676,7 +676,7 @@ xpos = x_entry->start.x; for (i=0;iUnicode_Text_Size;i++) { escaped_Unicode(x_entry->Unicode_Text[i], (char *)&Escaped); - gs_sprintf(TextBuffer, "\n", xpos, + gs_sprintf(TextBuffer, "\n", xpos, x_entry->start.y, xpos + x_entry->Widths[i], x_entry->end.y, Escaped); fwrite(TextBuffer, 1, strlen(TextBuffer), tdev->file); xpos += x_entry->Widths[i]; @@ -799,7 +799,7 @@ xpos = x_entry->start.x; for (i=0;iUnicode_Text_Size;i++) { escaped_Unicode(x_entry->Unicode_Text[i], (char *)&Escaped); - gs_sprintf(TextBuffer, "\n", xpos, + gs_sprintf(TextBuffer, "\n", xpos, x_entry->start.y, xpos + x_entry->Widths[i], x_entry->end.y, Escaped); fwrite(TextBuffer, 1, strlen(TextBuffer), tdev->file); xpos += x_entry->Widths[i]; diff -Nru ghostscript-9.15+dfsg/devices/vector/gdevxps.c ghostscript-9.16~dfsg~0/devices/vector/gdevxps.c --- ghostscript-9.15+dfsg/devices/vector/gdevxps.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/gdevxps.c 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2012 Artifex Software, Inc. +/* Copyright (C) 2001-2014 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -15,18 +15,29 @@ /* XPS output device */ #include "string_.h" +#include "stdio_.h" #include "gx.h" #include "gserrors.h" #include "gdevvec.h" #include "gxpath.h" +#include "gzcpath.h" #include "stream.h" #include "zlib.h" +#include "stdint_.h" +#include "gdevtifs.h" +#include "gsicc_create.h" +#include "gsicc_cache.h" +#include "gximdecode.h" /* Need so that we can unpack and decode */ #define MAXPRINTERNAME 64 #if defined(__WIN32__) && XPSPRINT==1 int XPSPrint(char *FileName, char *PrinterName, int *reason); #endif +#define MAXNAME 64 +#define PROFILEPATH "Documents/1/Resources/Profiles/" +#define IMAGEPATH "Documents/1/Resources/Images/" + /* default resolution. */ #ifndef X_DPI # define X_DPI 96 @@ -54,7 +65,7 @@ typedef struct gx_device_xps_vals { double f; - uint64_t i; + uint64_t i; } val_t; /* current and default values of state atrributes */ @@ -83,7 +94,10 @@ with the final filename to be used in the archive. filenames with associated contents in temporary files are maintained until the end of the job, at which time we enumerate the list and write the zip - archive. */ + archive. The exception to this is the image data and icc profiles. Image + data are stored in temp files and upon end image transferred to the zip + archive and the temp file closed (and removed). ICC profiles are written + directly to the archive without a temp file. */ typedef struct gx_device_xps_zdata_s { FILE *fp; @@ -98,16 +112,54 @@ long current_pos; ushort date; ushort time; + bool saved; /* flag to indicate file was already saved (e.g. image or profile) */ } gx_device_xps_zinfo_t; /* a list of archive file names and their corresponding info (gx_device_xps_zinfo_t) */ typedef struct gx_device_xps_f2i_s { - const char *filename; + char *filename; gx_device_xps_zinfo_t *info; struct gx_device_xps_f2i_s *next; } gx_device_xps_f2i_t; +/* Used for keeping track of icc profiles that we have written. This way we + avoid writing the same one multiple times. It would be nice to do this + based upon the gs_id for images, but that id is really created after we + have already drawn the path. Not clear to me how to get a source ID. */ +typedef struct xps_icc_data_s { + int64_t hash; + int index; + struct xps_icc_data_s *next; +} xps_icc_data_t; + +typedef enum { + xps_solidbrush, + xps_imagebrush, + xps_visualbrush +} xps_brush_t; + +typedef struct xps_image_enum_s { + gdev_vector_image_enum_common; + gs_matrix mat; + TIFF *tif; /* in non-GC memory */ + char file_name[MAXNAME]; + char icc_name[MAXNAME]; + image_decode_t decode_st; + int bytes_comp; + byte *buffer; /* Needed for unpacking/decoding of image data */ + byte *devc_buffer; /* Needed for case where we are mapping to device colors */ + gs_color_space *pcs; /* Needed for Sep, DeviceN, Indexed */ + gsicc_link_t *icc_link; /* Needed for CIELAB */ + const gs_imager_state *pis; /* Needed for color conversions of DeviceN etc */ + FILE *fid; +} xps_image_enum_t; + +gs_private_st_suffix_add3(st_xps_image_enum, xps_image_enum_t, + "xps_image_enum_t", xps_image_enum_enum_ptrs, + xps_image_enum_reloc_ptrs, st_vector_image_enum, + buffer, devc_buffer, pis); + typedef struct gx_device_xps_s { /* superclass state */ gx_device_vector_common; @@ -116,7 +168,12 @@ gx_device_xps_f2i_t *f2i_tail; /* local state */ int page_count; /* how many output_page calls we've seen */ + int image_count; /* number of images so far */ + int relationship_count; /* Pages relationships */ + xps_icc_data_t *icc_data; gx_color_index strokecolor, fillcolor; + xps_brush_t stroketype, filltype; + xps_image_enum_t *xps_pie; double linewidth; gs_line_cap linecap; gs_line_join linejoin; @@ -125,6 +182,10 @@ unsigned char PrinterName[MAXPRINTERNAME]; } gx_device_xps; +gs_public_st_suffix_add1_final(st_device_xps, gx_device_xps, + "gx_device_xps", device_xps_enum_ptrs, device_xps_reloc_ptrs, + gx_device_finalize, st_device_vector, xps_pie); + #define xps_device_body(dname, depth)\ std_device_dci_type_body(gx_device_xps, 0, dname, &st_device_xps, \ DEFAULT_WIDTH_10THS * X_DPI / 10, \ @@ -141,6 +202,8 @@ static dev_proc_put_params(xps_put_params); static dev_proc_fill_path(gdev_xps_fill_path); static dev_proc_stroke_path(gdev_xps_stroke_path); +static dev_proc_finish_copydevice(xps_finish_copydevice); +static dev_proc_begin_image(xps_begin_image); #define xps_device_procs \ { \ @@ -175,18 +238,22 @@ NULL, /* gdev_vector_fill_parallelogram */ \ NULL, /* gdev_vector_fill_triangle */ \ NULL, /* draw_thin_line */\ - NULL, /* begin_image */ \ + xps_begin_image, /* begin_image */ \ NULL, /* image_data */\ NULL, /* end_image */\ NULL, /* strip_tile_rectangle */\ - NULL /* strip_copy_rop */\ + NULL, /* strip_copy_rop */\ + NULL, /* get_clipping_box */\ + NULL, /* begin_typed_image */\ + NULL, /* get_bits_rectangle */\ + NULL, /* map_color_rgb_alpha */\ + NULL, /* create_compositor */\ + NULL, /* get_hardware_params */\ + NULL, /* text_begin */\ + xps_finish_copydevice,\ + NULL,\ } -gs_public_st_suffix_add0_final(st_device_xps, gx_device_xps, - "gx_device_xps", - device_xps_enum_ptrs, device_xps_reloc_ptrs, - gx_device_finalize, st_device_vector); - const gx_device_xps gs_xpswrite_device = { xps_device_body("xpswrite", 24), xps_device_procs @@ -274,6 +341,7 @@ "" "" "" + "" "" ""; @@ -285,10 +353,14 @@ static char *fixed_document_fdoc_header = (char *)"" ""; -static char *rels_magic = (char *)"" - "" - "" - ""; +static char *rels_header = (char *)"\n" + "\n"; + +static char *rels_fdseq = (char *)"\n" + "\n"; + +static char *rels_req_type = (char *) "\"http://schemas.microsoft.com/xps/2005/06/required-resource\""; /* Procedures to manage the containing zip archive */ @@ -310,7 +382,6 @@ if (info == NULL || f2i == NULL) return gs_throw_code(gs_error_Fatal); - f2i->info = info; f2i->next = NULL; @@ -329,6 +400,8 @@ info->data.fp = 0; info->data.count = 0; + info->saved = false; + if (gs_debug_c('_')) { gx_device_xps_f2i_t *f2i = xps_dev->f2i; int node = 1; @@ -377,22 +450,17 @@ archive file, open a temporary file to store the data. */ if (info->data.count == 0) { char *filename = - (char *)gs_alloc_bytes(mem, gp_file_name_sizeof, "zip_append_data(filename)"); + (char *)gs_alloc_bytes(mem->non_gc_memory, gp_file_name_sizeof, + "zip_append_data(filename)"); FILE *fp; if (!filename) { return(gs_throw_code(gs_error_VMerror)); } - fp = gp_open_scratch_file(mem, "xpsdata-", + fp = gp_open_scratch_file_rm(mem, "xpsdata-", filename, "wb+"); - - if (fp == NULL) { - gs_free_object(mem, filename, "zip_append_data(filename)"); - return gs_throw_code(gs_error_Fatal); - } - unlink(filename); - gs_free_object(mem, filename, "zip_append_data(filename)"); + gs_free_object(mem->non_gc_memory, filename, "zip_append_data(filename)"); info->data.fp = fp; } @@ -406,10 +474,8 @@ fclose(info->data.fp); return -1; } - /* probably unnecessary but makes debugging easier */ fflush(info->data.fp); - info->data.count += len; return 0; @@ -469,7 +535,6 @@ sputc(zs, (byte)(s >> 8)); } - /* TODO - the following 2 definitions need to done correctly */ static ushort make_dos_date(uint year, uint month, uint day) @@ -493,32 +558,188 @@ return write_to_zip_file(xps_dev, filename, (byte *)str, strlen(str)); } +/* Used to add ICC profiles to the zip file. */ +static int +add_data_to_zip_file(gx_device_xps *xps_dev, const char *filename, byte *buf, long size) +{ + gx_device_xps_zinfo_t *info = zip_look_up_file_info(xps_dev, filename); + int code; + long curr_pos; + unsigned long crc = 0; + stream *f; + ushort date, time; + + /* This file should not yet exist */ + if (info == NULL) { + code = zip_add_file(xps_dev, filename); + if (code < 0) + return gs_rethrow_code(code); + info = zip_look_up_file_info(xps_dev, filename); + } + else { + return gs_throw_code(gs_error_Fatal); + } + f = ((gx_device_vector*)xps_dev)->strm; + curr_pos = stell(f); + + /* Figure out the crc */ + crc = crc32(0L, Z_NULL, 0); + crc = crc32(crc, buf, size); + + date = make_dos_date(2012, 2, 16); + time = make_dos_time(9, 15, 0); + + put_u32(f, 0x04034b50); /* magic */ + put_u16(f, 20); /* version */ + put_u16(f, 0); /* flags */ + put_u16(f, 0); /* method */ + put_u16(f, time); + put_u16(f, date); + put_u32(f, crc); + put_u32(f, size); /* compressed */ + put_u32(f, size); /* uncompressed */ + put_u16(f, strlen(filename)); + put_u16(f, 0); /* extra field length */ + put_bytes(f, (byte *)filename, strlen(filename)); + put_bytes(f, buf, size); + put_bytes(f, 0, 0); /* extra field */ + + /* Now we need to add the info about this file */ + xps_dev->f2i_tail->info->CRC = crc; + xps_dev->f2i_tail->info->time = time; + xps_dev->f2i_tail->info->date = date; + xps_dev->f2i_tail->info->data.count = size; + xps_dev->f2i_tail->info->current_pos = curr_pos; + xps_dev->f2i_tail->info->file_size = size; + /* Mark the file as already stored */ + xps_dev->f2i_tail->info->saved = true; + return 0; +} + +/* Used to add images to the zip file. This file is added now +and not later like the other files */ +static int +add_file_to_zip_file(gx_device_xps *xps_dev, const char *filename, FILE *src) +{ + gx_device_xps_zinfo_t *info = zip_look_up_file_info(xps_dev, filename); + int code = 0; + long curr_pos; + unsigned long crc = 0; + byte buf[4]; + uint nread; + unsigned long count = 0; + stream *f; + ushort date, time; + + /* This file should not yet exist */ + if (info == NULL) { + code = zip_add_file(xps_dev, filename); + if (code < 0) + return gs_rethrow_code(code); + info = zip_look_up_file_info(xps_dev, filename); + } + else { + return gs_throw_code(gs_error_Fatal); + } + + f = ((gx_device_vector*)xps_dev)->strm; + curr_pos = stell(f); + + /* Get to the start */ + if (gp_fseek_64(src, 0, 0) < 0) + return gs_throw_code(gs_error_Fatal); + + /* Figure out the crc */ + crc = crc32(0L, Z_NULL, 0); + /* Chunks of 4 until we get to remainder */ + while (!feof(src)) { + nread = fread(buf, 1, sizeof(buf), src); + count = count + nread; + crc = crc32(crc, buf, nread); + } + + date = make_dos_date(2012, 2, 16); + time = make_dos_time(9, 15, 0); + + put_u32(f, 0x04034b50); /* magic */ + put_u16(f, 20); /* version */ + put_u16(f, 0); /* flags */ + put_u16(f, 0); /* method */ + put_u16(f, time); + put_u16(f, date); + put_u32(f, crc); + put_u32(f, count); /* compressed */ + put_u32(f, count); /* uncompressed */ + put_u16(f, strlen(filename)); + put_u16(f, 0); /* extra field length */ + put_bytes(f, (byte *)filename, strlen(filename)); + { + if (gp_fseek_64(src, (gs_offset_t)0, 0) < 0) + return gs_throw_code(gs_error_Fatal); + while (!feof(src)) { + ulong nread = fread(buf, 1, sizeof(buf), src); + put_bytes(f, buf, nread); + } + } + put_bytes(f, 0, 0); /* extra field */ + + /* Now we need to add the info about this file */ + xps_dev->f2i_tail->info->CRC = crc; + xps_dev->f2i_tail->info->time = time; + xps_dev->f2i_tail->info->date = date; + xps_dev->f2i_tail->info->data.count = count; + xps_dev->f2i_tail->info->current_pos = curr_pos; + xps_dev->f2i_tail->info->file_size = count; + /* Mark the file as already stored */ + xps_dev->f2i_tail->info->saved = true; + return 0; +} + /* zip up a single file moving its data from the temporary file to the zip container. */ static int zip_close_archive_file(gx_device_xps *xps_dev, const char *filename) { - gx_device_xps_zinfo_t *info = zip_look_up_file_info(xps_dev, filename); gx_device_xps_zdata_t data = info->data; byte buf[4]; unsigned long crc = 0; + int count = 0; + int len; /* we can't use the vector stream accessor because it calls beginpage */ stream *f = ((gx_device_vector*)xps_dev)->strm; if (info == NULL) return -1; + /* Already stored */ + if (info->saved) + return 0; + if (data.count >= 0) { FILE *fp = data.fp; uint nread; + + if (fp == NULL) + return gs_throw_code(gs_error_Fatal); + crc = crc32(0L, Z_NULL, 0); rewind(fp); while (!feof(fp)) { nread = fread(buf, 1, sizeof(buf), fp); crc = crc32(crc, buf, nread); + count = count + nread; + } + /* If this is a TIFF file, then update the data count information. + During the writing of the TIFF directory there is seeking and + relocations that occur, which make data.count incorrect. + We could just do this for all the files and avoid the test. */ + len = strlen(filename); + if (len > 3 && (strncmp("tif", &(filename[len - 3]), 3) == 0)) { + info->data.count = count; + data = info->data; + data.fp = fp; } - } info->current_pos = stell(f); @@ -551,6 +772,9 @@ fclose(fp); } put_bytes(f, 0, 0); /* extra field */ + + /* Mark as saved */ + info->saved = true; return 0; } @@ -636,8 +860,24 @@ return 0; } -/* Device procedures */ +/* Brush management */ +static void +xps_setstrokebrush(gx_device_xps *xps, xps_brush_t type) +{ + if_debug1m('_', xps->memory, "xps_setstrokebrush:%d\n", (int)type); + xps->stroketype = type; +} + +static void +xps_setfillbrush(gx_device_xps *xps, xps_brush_t type) +{ + if_debug1m('_', xps->memory, "xps_setfillbrush:%d\n", (int)type); + + xps->filltype = type; +} + +/* Device procedures */ static int xps_open_device(gx_device *dev) { @@ -655,8 +895,11 @@ /* xps-specific initialization goes here */ xps->page_count = 0; + xps->relationship_count = 0; xps->strokecolor = gx_no_color_index; xps->fillcolor = gx_no_color_index; + xps_setstrokebrush(xps, xps_solidbrush); + xps_setfillbrush(xps, xps_solidbrush); /* these should be the graphics library defaults instead? */ xps->linewidth = XPS_DEFAULT_LINEWIDTH; xps->linecap = XPS_DEFAULT_LINECAP; @@ -667,6 +910,13 @@ xps->f2i = NULL; xps->f2i_tail = NULL; + /* Image related stuff */ + xps->image_count = 0; + xps->xps_pie = NULL; + + /* ICC related stuff */ + xps->icc_data = NULL; + code = write_str_to_zip_file(xps, (char *)"FixedDocumentSequence.fdseq", fixed_document_sequence); if (code < 0) @@ -683,9 +933,12 @@ if (code < 0) return gs_rethrow_code(code); + /* Right out the magical stuff related to the fix document sequence relationship */ + code = write_str_to_zip_file(xps, (char *)"_rels/.rels", rels_header); + if (code < 0) + return gs_rethrow_code(code); - code = write_str_to_zip_file(xps, (char *)"_rels/.rels", - rels_magic); + code = write_str_to_zip_file(xps, (char *)"_rels/.rels", rels_fdseq); if (code < 0) return gs_rethrow_code(code); @@ -706,7 +959,46 @@ return write_str_to_zip_file(xps, buf, str); } - + +/* add relationship to Pages/_rels/%d.fpage.rels */ +static int +add_new_relationship(gx_device_xps *xps, const char *str) +{ + const char *rels_template = "Documents/1/Pages/_rels/%d.fpage.rels"; + char buf[128]; /* easily enough to accommodate the string and a page number */ + char line[300]; + const char *fmt; + + int code = gs_sprintf(buf, rels_template, xps->page_count + 1); + if (code < 0) + return gs_rethrow_code(code); + + /* Check if this is our first one */ + if (xps->relationship_count == 0) + write_str_to_zip_file(xps, buf, rels_header); + + /* Now add the reference */ + fmt = "\n"; + gs_sprintf(line, fmt, str, xps->relationship_count, rels_req_type); + + xps->relationship_count++; + + return write_str_to_zip_file(xps, buf, line); +} + +static int +close_page_relationship(gx_device_xps *xps) +{ + const char *rels_template = "Documents/1/Pages/_rels/%d.fpage.rels"; + char buf[128]; /* easily enough to accommodate the string and a page number */ + + int code = gs_sprintf(buf, rels_template, xps->page_count + 1); + if (code < 0) + return gs_rethrow_code(code); + + write_str_to_zip_file(xps, buf, ""); + return 0; +} /* Page management */ @@ -719,6 +1011,14 @@ int code; write_str_to_current_page(xps, ""); + if (xps->relationship_count > 0) + { + /* Close the relationship xml */ + code = close_page_relationship(xps); + if (code < 0) + return gs_rethrow_code(code); + xps->relationship_count = 0; /* Reset for next page */ + } xps->page_count++; if (ferror(xps->file)) @@ -741,11 +1041,27 @@ return code; } +static void +xps_release_icc_info(gx_device *dev) +{ + gx_device_xps *xps = (gx_device_xps*)dev; + xps_icc_data_t *curr; + xps_icc_data_t *icc_data = xps->icc_data; + + while (icc_data != NULL) { + curr = icc_data; + icc_data = icc_data->next; + gs_free(dev->memory->non_gc_memory, curr, sizeof(xps_icc_data_t), 1, + "xps_release_icc_info"); + } + return; +} + /* Close the device */ static int xps_close_device(gx_device *dev) { - gx_device_xps *const xps = (gx_device_xps*)dev; + const gx_device_xps *xps = (gx_device_xps*)dev; int code; /* closing for the FixedDocument */ @@ -760,6 +1076,9 @@ if (code < 0) return gs_rethrow_code(code); + /* Release the icc info */ + xps_release_icc_info(dev); + #if defined(__WIN32__) && XPSPRINT==1 code = gdev_vector_close_file((gx_device_vector*)dev); if (code < 0) @@ -830,8 +1149,6 @@ xps_get_params(gx_device *dev, gs_param_list *plist) { int code = 0; - gx_device_xps *const xps = (gx_device_xps*)dev; - gs_param_string ofns; if_debug0m('_', dev->memory, "xps_get_params\n"); @@ -840,13 +1157,19 @@ if (code < 0) return gs_rethrow_code(code); - /* xps specific parameters are added to plist here */ - ofns.data = (const byte *)&xps->PrinterName; - ofns.size = strlen(xps->fname); - ofns.persistent = false; - if ((code = param_write_string(plist, "PrinterName", &ofns)) < 0) - return code; +#if defined(__WIN32__) && XPSPRINT==1 + { + gs_param_string ofns; + gx_device_xps *const xps = (gx_device_xps*)dev; + /* xps specific parameters are added to plist here */ + ofns.data = (const byte *)&xps->PrinterName; + ofns.size = strlen(xps->fname); + ofns.persistent = false; + if ((code = param_write_string(plist, "PrinterName", &ofns)) < 0) + return code; + } +#endif return code; } @@ -855,15 +1178,17 @@ xps_put_params(gx_device *dev, gs_param_list *plist) { int code = 0; - gs_param_string pps; - gs_param_name param_name; - gx_device_xps *const xps = (gx_device_xps*)dev; if_debug0m('_', dev->memory, "xps_put_params\n"); /* xps specific parameters are parsed here */ - - switch (code = param_read_string(plist, (param_name = "PrinterName"), &pps)) { +#if defined(__WIN32__) && XPSPRINT==1 + { /* NB: The following is not strictly correct since changes are */ + /* made even if 'gdev_vector_put_params' returns an error. */ + gs_param_name param_name; + gs_param_string pps; + gx_device_xps *const xps = (gx_device_xps*)dev; + switch (code = param_read_string(plist, (param_name = "PrinterName"), &pps)) { case 0: if (pps.size > 64) { eprintf1("\nERROR: PrinterName too long (max %d)\n", MAXPRINTERNAME); @@ -875,17 +1200,25 @@ default: param_signal_error(plist, param_name, code); case 1: -/* memset(&xps->PrinterName, 0x00, MAXPRINTERNAME);*/ + /* memset(&xps->PrinterName, 0x00, MAXPRINTERNAME);*/ break; + } } +#endif /* call our superclass to get its parameters, like OutputFile */ - code = gdev_vector_put_params(dev, plist); - if (code < 0) - return gs_rethrow_code(code); + code = gdev_vector_put_params(dev, plist); /* errors are handled by caller or setpagedevice */ return code; } +static int xps_finish_copydevice(gx_device *dev, const gx_device *from_dev) +{ + const gx_device_xps *xps = (gx_device_xps*)dev; + + memset(xps->PrinterName, 0x00, MAXPRINTERNAME); + return 0; +} + static int set_state_color(gx_device_vector *vdev, const gx_drawing_color *pdc, gx_color_index *color) { @@ -1051,7 +1384,7 @@ static int xps_can_handle_hl_color(gx_device_vector *vdev, const gs_imager_state *pis, - const gx_drawing_color * pdc) + const gx_drawing_color *pdc) { if_debug0m('_', vdev->memory, "xps_can_handle_hl_color\n"); return 0; @@ -1059,9 +1392,48 @@ /* Paths */ static bool -drawing_path(gx_path_type_t type) +image_brush_fill(gx_path_type_t path_type, xps_brush_t brush_type) +{ + return brush_type == xps_imagebrush; +} + +static bool +drawing_path(gx_path_type_t path_type, xps_brush_t brush_type) +{ + return ((path_type & gx_path_type_stroke) || (path_type & gx_path_type_fill) || + image_brush_fill(path_type, brush_type)); +} + +static void +xps_finish_image_path(gx_device_vector *vdev) { - return ((type & gx_path_type_stroke) || (type & gx_path_type_fill)); + gx_device_xps *xps = (gx_device_xps *)vdev; + char line[300]; + const char *fmt; + gs_matrix matrix; + + /* Path is started. Do the image brush image brush and close the path */ + write_str_to_current_page(xps, "\t\n"); + write_str_to_current_page(xps, "\t\t\n"; + gs_sprintf(line, fmt, xps->xps_pie->file_name, xps->xps_pie->icc_name, + 0, 0, xps->xps_pie->width, xps->xps_pie->height, 0, 0, + xps->xps_pie->width, xps->xps_pie->height); + write_str_to_current_page(xps, line); + + /* Now the render transform. This is applied to the image brush. Path + is already transformed */ + write_str_to_current_page(xps, "\t\t\t\n"); + fmt = "\t\t\t\t\n"; + matrix = xps->xps_pie->mat; + gs_sprintf(line, fmt, + matrix.xx, matrix.xy, matrix.yx, matrix.yy, matrix.tx, matrix.ty); + write_str_to_current_page(xps, line); + write_str_to_current_page(xps, "\t\t\t\n"); + write_str_to_current_page(xps, "\t\t\n"); + write_str_to_current_page(xps, "\t\n"); + /* End this path */ + write_str_to_current_page(xps, "\n"); } static int @@ -1084,8 +1456,8 @@ /* skip non-drawing paths for now */ - if (!drawing_path(type)) { - gs_warn1("xps_rect: type not supported %x", type); + if (!drawing_path(type, xps->filltype)) { + if_debug1m('_', xps->memory, "xps_dorect: type not supported %x\n", type); return 0; } @@ -1093,37 +1465,50 @@ return_error(gs_error_rangecheck); } - write_str_to_current_page(xps, "filltype)) { + /* Do the path data */ + fmt = "\n"; + gs_sprintf(line, fmt, + fixed2float(x0), fixed2float(y0), + fixed2float(x0), fixed2float(y1), + fixed2float(x1), fixed2float(y1), + fixed2float(x1), fixed2float(y0)); + write_str_to_current_page(xps, line); + /* And now the rest of the details */ + xps_finish_image_path(vdev); + } else if (type & gx_path_type_fill) { + /* Solid fill */ + write_str_to_current_page(xps, "fillcolor & 0xffffffL; gs_sprintf(line, fmt, c, - fixed2float(x0), fixed2float(y0), - fixed2float(x0), fixed2float(y1), - fixed2float(x1), fixed2float(y1), - fixed2float(x1), fixed2float(y0)); + fixed2float(x0), fixed2float(y0), + fixed2float(y1), fixed2float(x1), + fixed2float(y0)); + write_str_to_current_page(xps, line); + write_str_to_current_page(xps, "/>\n"); } else { - fmt = "Stroke=\"#%06X\" Data=\"M %g, %g L %g, %g %g, %g %g, %g Z\" "; + /* Solid stroke */ + write_str_to_current_page(xps, "strokecolor & 0xffffffL; gs_sprintf(line, fmt, c, - fixed2float(x0), fixed2float(y0), - fixed2float(x0), fixed2float(y1), - fixed2float(x1), fixed2float(y1), - fixed2float(x1), fixed2float(y0)); - } - - write_str_to_current_page(xps, line); - - if (type & gx_path_type_stroke) { - /* NB format width. */ - fmt = "StrokeThickness=\"%g\" "; - gs_sprintf(line, fmt, xps->linewidth); + fixed2float(x0), fixed2float(y0), + fixed2float(y1), fixed2float(x1), + fixed2float(y0)); write_str_to_current_page(xps, line); + + if (type & gx_path_type_stroke) { + /* NB format width. */ + fmt = "StrokeThickness=\"%g\" "; + gs_sprintf(line, fmt, xps->linewidth); + write_str_to_current_page(xps, line); + } + write_str_to_current_page(xps, "/>\n"); } /* end and close NB \n not necessary. */ - return write_str_to_current_page(xps, "/>\n"); + return 0; } static int @@ -1159,8 +1544,8 @@ (void)gdev_vector_stream((gx_device_vector*)xps); /* skip non-drawing paths for now */ - if (!drawing_path(type)) { - gs_warn1("type not supported %x", type); + if (!drawing_path(type, xps->filltype)) { + if_debug1m('_', xps->memory, "xps_beginpath: type not supported %x\n", type); return 0; } @@ -1171,16 +1556,18 @@ c = type & gx_path_type_fill ? xps->fillcolor : xps->strokecolor; c &= 0xffffffL; - write_str_to_current_page(xps, "filltype)) { + write_str_to_current_page(xps, "memory, "xps_beginpath %s\n", line); @@ -1197,8 +1584,8 @@ if_debug2m('_', xps->memory, "xps_moveto %g %g\n", x, y); /* skip non-drawing paths for now */ - if (!drawing_path(type)) { - gs_warn1("xps_moveto: type not supported %x\n", type); + if (!drawing_path(type, xps->filltype)) { + if_debug1m('_', xps->memory, "xps_moveto: type not supported %x\n", type); return 0; } @@ -1218,8 +1605,8 @@ if_debug2m('_', xps->memory, "xps_lineto %g %g\n", x, y); /* skip non-drawing paths for now */ - if (!drawing_path(type)) { - gs_warn1("xps_lineto: type not supported %x\n", type); + if (!drawing_path(type, xps->filltype)) { + if_debug1m('_', xps->memory, "xps_lineto: type not supported %x\n", type); return 0; } gs_sprintf(line, " L %g,%g", x, y); @@ -1237,8 +1624,8 @@ char line[200]; /* skip non-drawing paths for now */ - if (!drawing_path(type)) { - gs_warn1("xps_lineto: type not supported %x", type); + if (!drawing_path(type, xps->filltype)) { + if_debug1m('_', xps->memory, "xps_curveto: type not supported %x\n", type); return 0; } @@ -1257,8 +1644,8 @@ gx_device_xps *xps = (gx_device_xps *)vdev; /* skip non-drawing paths for now */ - if (!drawing_path(type)) { - gs_warn1("xps_closepath: type not supported %x", type); + if (!drawing_path(type, xps->filltype)) { + if_debug1m('_', xps->memory, "xps_closepath: type not supported %x\n", type); return 0; } @@ -1276,12 +1663,16 @@ const char *fmt; /* skip non-drawing paths for now */ - if (!drawing_path(type)) { - gs_warn1("xps_lineto: type not supported %x", type); + if (!drawing_path(type, xps->filltype)) { + if_debug1m('_', xps->memory, "xps_endpath: type not supported %x\n", type); return 0; } - if (type & gx_path_type_stroke) { + if (image_brush_fill(type, xps->filltype)) { + write_str_to_current_page(xps, "\" >\n"); + /* And now the rest of the details */ + xps_finish_image_path(vdev); + } else if (type & gx_path_type_stroke) { /* NB format width. */ fmt = "\" StrokeThickness=\"%g\" />\n"; gs_sprintf(line, fmt, xps->linewidth); @@ -1293,3 +1684,784 @@ return 0; } + +/* Image handling */ +static image_enum_proc_plane_data(xps_image_data); +static image_enum_proc_end_image(xps_image_end_image); +static const gx_image_enum_procs_t xps_image_enum_procs = { + xps_image_data, xps_image_end_image +}; + +/* High level image support */ +/* Prototypes */ +static TIFF* tiff_from_name(gx_device_xps *dev, const char *name, int big_endian, + bool usebigtiff); +static int tiff_set_values(xps_image_enum_t *pie, TIFF *tif, + cmm_profile_t *profile, bool force8bit); +static void xps_tiff_set_handlers(void); + +/* Check if we have the ICC profile in the package */ +static xps_icc_data_t* +xps_find_icc(const gx_device_xps *xdev, cmm_profile_t *icc_profile) +{ + xps_icc_data_t *icc_data = xdev->icc_data; + + while (icc_data != NULL) { + if (icc_data->hash == gsicc_get_hash(icc_profile)) { + return icc_data; + } + icc_data = icc_data->next; + } + return NULL; +} + +static int +xps_create_icc_name(const gx_device_xps *xps_dev, cmm_profile_t *profile, char *name) +{ + xps_icc_data_t *icc_data; + + icc_data = xps_find_icc(xps_dev, profile); + if (icc_data == NULL) + return gs_throw_code(gs_error_rangecheck); /* Should be there */ + + snprintf(name, MAXNAME, "%sProfile_%d.icc", PROFILEPATH, icc_data->index); + return 0; +} + +static void +xps_create_image_name(gx_device *dev, char *name) +{ + gx_device_xps *const xdev = (gx_device_xps *)dev; + + snprintf(name, MAXNAME, "%s%d.tif", IMAGEPATH, xdev->image_count); + xdev->image_count++; +} + +static int +xps_add_icc_relationship(xps_image_enum_t *pie) +{ + gx_device_xps *xps = (gx_device_xps*) (pie->dev); + int code; + + code = add_new_relationship(xps, pie->icc_name); + if (code < 0) + return gs_rethrow_code(code); + + return 0; +} + +static int +xps_add_image_relationship(xps_image_enum_t *pie) +{ + gx_device_xps *xps = (gx_device_xps*) (pie->dev); + int code; + + code = add_new_relationship(xps, pie->file_name); + if (code < 0) + return gs_rethrow_code(code); + return 0; +} + +static int +xps_write_profile(const gs_imager_state *pis, char *name, cmm_profile_t *profile, gx_device_xps *xps_dev) +{ + byte *profile_buffer; + int size; + + /* Need V2 ICC Profile */ + profile_buffer = gsicc_create_getv2buffer(pis, profile, &size); + + /* Now go ahead and add to the zip archive */ + return add_data_to_zip_file(xps_dev, name, profile_buffer, size); +} + +static int +xps_begin_image(gx_device *dev, const gs_imager_state *pis, + const gs_image_t *pim, gs_image_format_t format, + const gs_int_rect *prect, const gx_drawing_color *pdcolor, + const gx_clip_path *pcpath, gs_memory_t *mem, + gx_image_enum_common_t **pinfo) +{ + gx_device_vector *vdev = (gx_device_vector *)dev; + gx_device_xps *xdev = (gx_device_xps *)dev; + gs_color_space *pcs = pim->ColorSpace; + xps_image_enum_t *pie = NULL; + xps_icc_data_t *icc_data; + gs_matrix mat; + int code; + gx_clip_path cpath; + gs_fixed_rect bbox; + int bits_per_pixel; + int num_components; + int bsize; + cmm_profile_t *icc_profile = NULL; + gs_color_space_index csindex; + float index_decode[2]; + gsicc_rendering_param_t rendering_params; + bool force8bit = false; + + /* No image mask yet. Also, need a color space */ + if (pcs == NULL || ((const gs_image1_t *)pim)->ImageMask) + goto use_default; + + /* No indexed images that are not 8 bit. */ + csindex = gs_color_space_get_index(pcs); + if (csindex == gs_color_space_index_Indexed && pim->BitsPerComponent != 8) + goto use_default; + + /* Also need imager state for these color spaces */ + if (pis == NULL && (csindex == gs_color_space_index_Indexed || + csindex == gs_color_space_index_Separation || + csindex == gs_color_space_index_DeviceN)) + goto use_default; + + gs_matrix_invert(&pim->ImageMatrix, &mat); + gs_matrix_multiply(&mat, &ctm_only(pis), &mat); + + pie = gs_alloc_struct(mem, xps_image_enum_t, &st_xps_image_enum, + "xps_begin_image"); + if (pie == 0) + return_error(gs_error_VMerror); + pie->buffer = NULL; + pie->devc_buffer = NULL; + pie->pis = NULL; + + /* Set the brush types to image */ + xps_setstrokebrush(xdev, xps_imagebrush); + xps_setfillbrush(xdev, xps_imagebrush); + pie->mat = mat; + xdev->xps_pie = pie; + /* We need this set a bit early for the ICC relationship writing */ + pie->dev = (gx_device*) xdev; + + /* If the color space is DeviceN, Sep or indexed these end up getting + mapped to the color space defined by the device profile. XPS only + support RGB indexed images so we just expand if for now. ICC link + creation etc is handled during the remap/concretization of the colors */ + if (csindex == gs_color_space_index_Indexed || + csindex == gs_color_space_index_Separation || + csindex == gs_color_space_index_DeviceN) { + cmm_dev_profile_t *dev_profile; + pie->pcs = pcs; + rc_increment(pcs); + code = dev_proc(dev, get_profile)(dev, &(dev_profile)); + /* Just use the "default" profile for now */ + icc_profile = dev_profile->device_profile[0]; + force8bit = true; /* Output image is 8 bit regardless of source */ + } else { + /* An ICC, RGB, CMYK, Gray color space */ + pie->pcs = NULL; + /* Get the ICC profile */ + if (gs_color_space_is_PSCIE(pcs)) { + if (pcs->icc_equivalent == NULL) { + bool is_lab; + gs_colorspace_set_icc_equivalent(pcs, &is_lab, pis->memory); + } + icc_profile = pcs->icc_equivalent->cmm_icc_profile_data; + } else { + icc_profile = pcs->cmm_icc_profile_data; + } + } + + /* Set up for handling case where we are in CIELAB. In this case, we are + going out to the default RGB color space */ + if (icc_profile->islab) { + /* Create the link */ + rendering_params.black_point_comp = gsBLACKPTCOMP_ON; + rendering_params.graphics_type_tag = GS_IMAGE_TAG; + rendering_params.override_icc = false; + rendering_params.preserve_black = gsBKPRESNOTSPECIFIED; + rendering_params.rendering_intent = gsPERCEPTUAL; + rendering_params.cmm = gsCMM_DEFAULT; + pie->icc_link = gsicc_get_link_profile(pis, dev, icc_profile, + pis->icc_manager->default_rgb, &rendering_params, pis->memory, false); + icc_profile = pis->icc_manager->default_rgb; + } else { + pie->icc_link = NULL; + } + + /* Now we actually write out the image and icc profile data to the zip + package. Test if profile is already here. If not, add it. */ + if (xps_find_icc(xdev, icc_profile) == NULL) { + icc_data = (xps_icc_data_t*)gs_alloc_bytes(dev->memory->non_gc_memory, + sizeof(xps_icc_data_t), "xps_begin_image"); + if (icc_data == NULL) + gs_throw(gs_error_VMerror, "Allocation of icc_data failed"); + + icc_data->hash = gsicc_get_hash(icc_profile); + if (xdev->icc_data == NULL) { + icc_data->index = 0; + xdev->icc_data = icc_data; + xdev->icc_data->next = NULL; + } else { + icc_data->next = xdev->icc_data; + icc_data->index = icc_data->next->index + 1; + xdev->icc_data = icc_data; + } + + /* Get name for mark up and for relationship. Have to wait and do + this after it is added to the package */ + code = xps_create_icc_name(xdev, icc_profile, &(pie->icc_name[0])); + if (code < 0) + return gs_rethrow_code(code); + + /* Add profile to the package. Here like images we are going to write + the data now. Rather than later. */ + code = xps_write_profile(pis, &(pie->icc_name[0]), icc_profile, xdev); + if (code < 0) + return gs_rethrow_code(code); + + /* Add ICC relationship */ + xps_add_icc_relationship(pie); + } else { + /* Get name for mark up. We already have it in the relationship and list */ + code = xps_create_icc_name(xdev, icc_profile, &(pie->icc_name[0])); + if (code < 0) + return gs_rethrow_code(code); + } + + /* Get image name for mark up */ + xps_create_image_name(dev, &(pie->file_name[0])); + /* Set width and height here */ + pie->width = pim->Width; + pie->height = pim->Height; + + if (pcpath == NULL) { + (*dev_proc(dev, get_clipping_box)) (dev, &bbox); + gx_cpath_init_local(&cpath, dev->memory); + code = gx_cpath_from_rectangle(&cpath, &bbox); + pcpath = &cpath; + } else { + /* Force vector device to do new path as the clip path is the image + path. I had a case where the clip path ids were the same but the + CTM was changing which resulted in subsequent images coming up + missing on the page. i.e. only the first one was shown. */ + ((gx_device_vector*) vdev)->clip_path_id = vdev->no_clip_path_id; + } + + code = gdev_vector_begin_image(vdev, pis, pim, format, prect, + pdcolor, pcpath, mem, &xps_image_enum_procs, + (gdev_vector_image_enum_t *)pie); + if (code < 0) + return code; + + if ((pie->tif = tiff_from_name(xdev, pie->file_name, false, false)) == NULL) + return_error(gs_error_VMerror); + + /* Null out pie. Only needed for the above vector command and tiff set up */ + xdev->xps_pie = NULL; + xps_tiff_set_handlers(); + code = tiff_set_values(pie, pie->tif, icc_profile, force8bit); + if (code < 0) + return gs_rethrow_code(code); + code = TIFFCheckpointDirectory(pie->tif); + + num_components = gs_color_space_num_components(pcs); + bits_per_pixel = pim->BitsPerComponent * num_components; + pie->decode_st.bps = bits_per_pixel / num_components; + pie->bytes_comp = (pie->decode_st.bps > 8 ? 2 : 1); + pie->decode_st.spp = num_components; + pie->decode_st.unpack = NULL; + get_unpack_proc((gx_image_enum_common_t*)pie, &(pie->decode_st), pim->format, + pim->Decode); + + /* The decode mapping for index colors needs an adjustment */ + if (csindex == gs_color_space_index_Indexed) { + if (pim->Decode[0] == 0 && + pim->Decode[1] == 255) { + index_decode[0] = 0; + index_decode[1] = 1.0; + } else { + index_decode[0] = pim->Decode[0]; + index_decode[1] = pim->Decode[1]; + } + get_map(&(pie->decode_st), pim->format, index_decode); + } else { + get_map(&(pie->decode_st), pim->format, pim->Decode); + } + + /* Allocate our decode buffer. */ + bsize = ((pie->decode_st.bps > 8 ? (pim->Width) * 2 : pim->Width) + 15) * num_components; + pie->buffer = gs_alloc_bytes(mem, bsize, "xps_begin_typed_image(buffer)"); + if (pie->buffer == 0) { + gs_free_object(mem, pie, "xps_begin_typed_image"); + *pinfo = NULL; + return_error(gs_error_VMerror); + } + + /* If needed, allocate our device color buffer. We will always do 8 bit here */ + if (csindex == gs_color_space_index_Indexed || + csindex == gs_color_space_index_Separation || + csindex == gs_color_space_index_DeviceN) { + bsize = (pim->Width + 15) * icc_profile->num_comps; + pie->devc_buffer = gs_alloc_bytes(mem, bsize, "xps_begin_typed_image(devc_buffer)"); + if (pie->devc_buffer == 0) { + gs_free_object(mem, pie, "xps_begin_typed_image"); + *pinfo = NULL; + return_error(gs_error_VMerror); + } + /* Also, the color remaps need the imager state */ + pie->pis = pis; + } + + *pinfo = (gx_image_enum_common_t *)pie; + return 0; +use_default: + if (pie != NULL && pie->buffer != NULL) + gs_free_object(mem, pie->buffer, "xps_begin_image"); + if (pie != NULL && pie->devc_buffer != NULL) + gs_free_object(mem, pie->devc_buffer, "xps_begin_image"); + if (pie != NULL) + gs_free_object(mem, pie, "xps_begin_image"); + + return gx_default_begin_image(dev, pis, pim, format, prect, + pdcolor, pcpath, mem, pinfo); +} + +/* Handles conversion from decoded DeviceN, Sep or Indexed space to Device color + space. The encoding specified by the image object is already handled at this + point. Slow due to the multitude of conversions that take place. I.e. conv to + float, frac and back to byte, but it will get the job done. Since we can have + indexed spaces that reference DeviceN spaces etc, we really have to do it + this way or code up a bunch of optimized special cases. Note here we always + output 8 bit regardless of input */ +static int +set_device_colors(xps_image_enum_t *pie) +{ + gx_device *pdev = pie->dev; + const gs_imager_state *pis = pie->pis; + gs_color_space *pcs = pie->pcs; + byte *src = pie->buffer; + byte *des = pie->devc_buffer; + int num_src = gs_color_space_num_components(pcs); + int num_des = pdev->color_info.num_components; + int width = pie->width; + cs_proc_remap_color((*remap_color)) = pcs->type->remap_color; + int i, j, code = 0; + gs_client_color cc; + gx_device_color devc; + gx_color_value cm_values[GX_DEVICE_COLOR_MAX_COMPONENTS]; + float scale = 1.0; + + if (pie->decode_st.bps > 8) { + unsigned short *src_ptr = (unsigned short*)src; + int pos_src = 0; + int pos_des = 0; + for (i = 0; i < width; i++) { + for (j = 0; j < num_src; j++, pos_src++) { + cc.paint.values[j] = (float)(src_ptr[pos_src]) / 65535.0; + } + code = remap_color(&cc, pcs, &devc, pis, pdev, gs_color_select_source); + dev_proc(pdev, decode_color)(pdev, devc.colors.pure, cm_values); + for (j = 0; j < num_des; j++, pos_des++) { + des[pos_des] = (cm_values[j] >> 8); + } + } + } else { + int pos_src = 0; + int pos_des = 0; + if (gs_color_space_get_index(pcs) != gs_color_space_index_Indexed) + scale = 255.0; + for (i = 0; i < width; i++) { + for (j = 0; j < num_src; j++, pos_src++) { + cc.paint.values[j] = (float)(src[pos_src]) / scale; + } + code = remap_color(&cc, pcs, &devc, pis, pdev, gs_color_select_source); + dev_proc(pdev, decode_color)(pdev, devc.colors.pure, cm_values); + for (j = 0; j < num_des; j++, pos_des++) { + des[pos_des] = (cm_values[j] >> 8); + } + } + } + return code; +} + +/* Chunky or planar in and chunky out */ +static int +xps_image_data(gx_image_enum_common_t *info, +const gx_image_plane_t *planes, int height, int *rows_used) +{ + xps_image_enum_t *pie = (xps_image_enum_t *)info; + int data_bit = planes[0].data_x * info->plane_depths[0]; + int width_bits = pie->width * info->plane_depths[0]; + int bytes_comp = pie->bytes_comp; + int i, plane; + int code = 0; + int width = pie->width; + int num_planes = pie->num_planes; + int dsize = (((width + (planes[0]).data_x) * pie->decode_st.spp * + pie->decode_st.bps / num_planes + 7) >> 3); + void *bufend = (void*)(pie->buffer + width * bytes_comp * pie->decode_st.spp); + byte *outbuffer; + + if (width_bits != pie->bits_per_row || (data_bit & 7) != 0) + return_error(gs_error_rangecheck); + if (height > pie->height - pie->y) + height = pie->height - pie->y; + + for (i = 0; i < height; pie->y++, i++) { + int pdata_x; + /* Plane zero done here to get the pointer to the data */ + const byte *data_ptr = planes[0].data + planes[0].raster * i + (data_bit >> 3); + byte *des_ptr = pie->buffer; + byte *buffer = (byte *)(*pie->decode_st.unpack)(des_ptr, &pdata_x, + data_ptr, 0, dsize, &(pie->decode_st.map[0]), + pie->decode_st.spread, pie->decode_st.spp); + + /* Step through the planes having decode do the repack to chunky as + well as any decoding needed */ + for (plane = 1; plane < num_planes; plane++) { + data_ptr = planes[plane].data + planes[plane].raster * i + (data_bit >> 3); + des_ptr = pie->buffer + plane * pie->bytes_comp; + /* This does the planar to chunky conversion */ + (*pie->decode_st.unpack)(des_ptr, &pdata_x, + data_ptr, 0, dsize, &(pie->decode_st.map[plane]), + pie->decode_st.spread, pie->decode_st.spp); + } + + /* CIELAB does not get mapped. Handled in color management */ + if (pie->icc_link == NULL) { + pie->decode_st.applymap(pie->decode_st.map, (void*)buffer, + pie->decode_st.spp, (void*)pie->buffer, bufend); + /* Index, Sep and DeviceN are mapped to color space defined by + device profile */ + if (pie->pcs != NULL) { + /* In device color space */ + code = set_device_colors(pie); + if (code < 0) + return gs_rethrow_code(code); + outbuffer = pie->devc_buffer; + } else { + /* In source color space */ + outbuffer = pie->buffer; + } + } else { + /* CIELAB to default RGB */ + gsicc_bufferdesc_t input_buff_desc; + gsicc_bufferdesc_t output_buff_desc; + gsicc_init_buffer(&input_buff_desc, 3, bytes_comp, + false, false, false, 0, width * bytes_comp * 3, + 1, width); + gsicc_init_buffer(&output_buff_desc, 3, bytes_comp, + false, false, false, 0, width * bytes_comp * 3, + 1, width); + (pie->icc_link->procs.map_buffer)(pie->dev, pie->icc_link, + &input_buff_desc, &output_buff_desc, (void*)buffer, + (void*)pie->buffer); + outbuffer = pie->buffer; + } + code = TIFFWriteScanline(pie->tif, outbuffer, pie->y, 0); + if (code < 0) + return code; + } + *rows_used = height; + return pie->y >= pie->height; +} + +static int +xps_add_tiff_image(xps_image_enum_t *pie) +{ + gx_device_xps *xdev = (gx_device_xps *)(pie->dev); + int code; + + code = add_file_to_zip_file(xdev, pie->file_name, pie->fid); + fclose(pie->fid); + return code; +} + +/* Clean up by releasing the buffers. */ +static int +xps_image_end_image(gx_image_enum_common_t * info, bool draw_last) +{ + xps_image_enum_t *pie = (xps_image_enum_t *)info; + int code = 0; + + /* N.B. Write the final strip, if any. */ + + code = TIFFWriteDirectory(pie->tif); + TIFFCleanup(pie->tif); + + /* Stuff the image into the zip archive and close the file */ + code = xps_add_tiff_image(pie); + if (code < 0) + goto exit; + + /* Reset the brush type to solid */ + xps_setstrokebrush((gx_device_xps *) (pie->dev), xps_solidbrush); + xps_setfillbrush((gx_device_xps *) (pie->dev), xps_solidbrush); + + /* Add the image relationship */ + code = xps_add_image_relationship(pie); + +exit: + if (pie->pcs != NULL) + rc_decrement(pie->pcs, "xps_image_end_image (pcs)"); + if (pie->buffer != NULL) + gs_free_object(pie->memory, pie->buffer, "xps_image_end_image"); + if (pie->devc_buffer != NULL) + gs_free_object(pie->memory, pie->devc_buffer, "xps_image_end_image"); + + /* ICC clean up */ + if (pie->icc_link != NULL) + gsicc_release_link(pie->icc_link); + + return code; +} + +/* Tiff related code so that we can output all the image data in Tiff format. + Tiff has the advantage of supporting Gray, RGB, CMYK as well as multiple + bit depts and having lossless compression. Much of this was borrowed from + gstiffio.c */ +#define TIFF_PRINT_BUF_LENGTH 1024 +static const char tifs_msg_truncated[] = "\n*** Previous line has been truncated.\n"; + +static int +tiff_set_values(xps_image_enum_t *pie, TIFF *tif, cmm_profile_t *profile, + bool force8bit) +{ + int bits = 8; + + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, pie->height); + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, pie->width); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, pie->height); + TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW); + TIFFSetField(tif, TIFFTAG_FILLORDER, FILLORDER_MSB2LSB); + TIFFSetField(tif, TIFFTAG_XRESOLUTION, 96.0); + TIFFSetField(tif, TIFFTAG_YRESOLUTION, 96.0); + + switch (profile->data_cs) { + case gsGRAY: + if (pie->bits_per_pixel > 8 && !force8bit) + bits = 16; + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bits); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); + break; + case gsRGB: + case gsCIELAB: + if ((pie->num_planes > 1 && pie->bits_per_pixel > 8 && !force8bit) || + (pie->num_planes == 1 && pie->bits_per_pixel / 3 > 8 && !force8bit)) + bits = 16; + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bits); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3); + break; + case gsCMYK: + if ((pie->num_planes > 1 && pie->bits_per_pixel > 8 && !force8bit) || + (pie->num_planes == 1 && pie->bits_per_pixel / 4 > 8 && !force8bit)) + bits = 16; + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bits); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_SEPARATED); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 4); + break; + default: + return gs_throw_code(gs_error_rangecheck); + } + return 0; +} + +/* place to hold the data for our libtiff i/o hooks */ +typedef struct tifs_io_xps_t +{ + gx_device_xps *pdev; + FILE *fid; +} tifs_io_xps; + +/* libtiff i/o hooks */ +static size_t +xps_tifsWriteProc(thandle_t fd, void* buf, size_t size) +{ + tifs_io_xps *tiffio = (tifs_io_xps *)fd; + size_t size_io = (size_t)size; + FILE *fid = tiffio->fid; + size_t count; + + if ((size_t)size_io != size) { + return (size_t)-1; + } + + if (fid == NULL) + return gs_throw_code(gs_error_Fatal); + + count = fwrite(buf, 1, size, fid); + if (count != size) { + fclose(fid); + return gs_rethrow_code(-1); + } + fflush(fid); + return size; +} + +static uint64_t +xps_tifsSeekProc(thandle_t fd, uint64_t off, int origin) +{ + tifs_io_xps *tiffio = (tifs_io_xps *)fd; + gs_offset_t off_io = (gs_offset_t)off; + FILE *fid = tiffio->fid; + + if ((uint64_t)off_io != off) { + return (uint64_t)-1; + } + + if (fid == NULL && off == 0) + return 0; + + if (fid == NULL) + return (uint64_t)-1; + + if (gp_fseek_64(fid, (gs_offset_t)off, origin) < 0) { + return (uint64_t)-1; + } + return (gp_ftell_64(fid)); +} + +static int +xps_tifsCloseProc(thandle_t fd) +{ + tifs_io_xps *tiffio = (tifs_io_xps *)fd; + gx_device_xps *pdev = tiffio->pdev; + + gs_free(pdev->memory->non_gc_memory, tiffio, sizeof(tifs_io_xps), 1, + "xps_tifsCloseProc"); + return 0; +} + +static int +xps_tifsDummyMapProc(thandle_t fd, void** pbase, toff_t* psize) +{ + (void)fd; + (void)pbase; + (void)psize; + return (0); +} + +static void +xps_tifsDummyUnmapProc(thandle_t fd, void* base, toff_t size) +{ + (void)fd; + (void)base; + (void)size; +} + +static size_t +xps_tifsReadProc(thandle_t fd, void* buf, size_t size) +{ + size_t size_io = (size_t)size; + + if ((size_t)size_io != size) { + return (size_t)-1; + } + return 0; +} + +/* Could not see where this was getting used so basically a dummy proc + for now. */ +static uint64_t +xps_tifsSizeProc(thandle_t fd) +{ + uint64_t length = 0; + + return length; +} + +static void +xps_tifsWarningHandlerEx(thandle_t client_data, const char *module, + const char *fmt, va_list ap) +{ + tifs_io_xps *tiffio = (tifs_io_xps *)client_data; + gx_device_xps *pdev = tiffio->pdev; + int count; + char buf[TIFF_PRINT_BUF_LENGTH]; + + count = vsnprintf(buf, sizeof(buf), fmt, ap); + if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */ + dmlprintf1(pdev->memory, "%s", buf); + dmlprintf1(pdev->memory, "%s\n", tifs_msg_truncated); + } + else { + dmlprintf1(pdev->memory, "%s\n", buf); + } +} + +static void +xps_tifsErrorHandlerEx(thandle_t client_data, const char *module, + const char *fmt, va_list ap) +{ + tifs_io_xps *tiffio = (tifs_io_xps *)client_data; + gx_device_xps *pdev = tiffio->pdev; + const char *max_size_error = "Maximum TIFF file size exceeded"; + int count; + char buf[TIFF_PRINT_BUF_LENGTH]; + + count = vsnprintf(buf, sizeof(buf), fmt, ap); + if (count >= sizeof(buf) || count < 0) { /* C99 || MSVC */ + dmlprintf1(pdev->memory, "%s\n", buf); + dmlprintf1(pdev->memory, "%s", tifs_msg_truncated); + } + else { + dmlprintf1(pdev->memory, "%s\n", buf); + } + +#if (TIFFLIB_VERSION >= 20111221) + if (!strncmp(fmt, max_size_error, strlen(max_size_error))) { + dmlprintf(pdev->memory, "Use -dUseBigTIFF(=true) for BigTIFF output\n"); + } +#endif +} + +static void +xps_tiff_set_handlers(void) +{ + (void)TIFFSetErrorHandler(NULL); + (void)TIFFSetWarningHandler(NULL); + (void)TIFFSetErrorHandlerExt(xps_tifsErrorHandlerEx); + (void)TIFFSetWarningHandlerExt(xps_tifsWarningHandlerEx); +} + +static TIFF * +tiff_from_name(gx_device_xps *dev, const char *name, int big_endian, bool usebigtiff) +{ + char mode[5] = "w"; + int modelen = 1; + TIFF *t; + tifs_io_xps *tiffio; + gs_memory_t *mem = dev->memory->non_gc_memory; + char *filename; + + if (big_endian) + mode[modelen++] = 'b'; + else + mode[modelen++] = 'l'; + + if (usebigtiff) + /* this should never happen for libtiff < 4.0 - see tiff_put_some_params() */ + mode[modelen++] = '8'; + + mode[modelen] = (char)0; + + tiffio = (tifs_io_xps *)gs_malloc(dev->memory->non_gc_memory, + sizeof(tifs_io_xps), 1, "tiff_from_name"); + if (!tiffio) { + return NULL; + } + tiffio->pdev = dev; + + filename = (char *)gs_alloc_bytes(mem, gp_file_name_sizeof, + "tiff_from_name(filename)"); + if (!filename) + return NULL; + + tiffio->fid = gp_open_scratch_file_rm(mem, "tif-", filename, "wb+"); + dev->xps_pie->fid = tiffio->fid; /* We will be closing it from here */ + + gs_free_object(mem, filename, "tiff_from_name(filename)"); + + t = TIFFClientOpen(name, mode, + (thandle_t)tiffio, (TIFFReadWriteProc)xps_tifsReadProc, + (TIFFReadWriteProc)xps_tifsWriteProc, (TIFFSeekProc)xps_tifsSeekProc, + xps_tifsCloseProc, (TIFFSizeProc)xps_tifsSizeProc, xps_tifsDummyMapProc, + xps_tifsDummyUnmapProc); + return t; +} diff -Nru ghostscript-9.15+dfsg/devices/vector/opdfread.h ghostscript-9.16~dfsg~0/devices/vector/opdfread.h --- ghostscript-9.15+dfsg/devices/vector/opdfread.h 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/devices/vector/opdfread.h 2015-03-30 08:21:24.000000000 +0000 @@ -413,6 +413,7 @@ "//PDFR_DEBUG{\n", "(endobj )=\n", "}if\n", +"count 1 eq {pop} {", "dup type/dicttype eq{\n", "dup/.endobj_daemon//knownget exec{\n", "//PDFR_DEBUG{(.endobj_daemon for )print 2 index =}if\n", @@ -428,6 +429,7 @@ "//RunTypeDaemon exec\n", "//DoNothing 3 1 roll//Register exec\n", "}ifelse\n", +"}ifelse", "}bind def\n", "/StoreBlock\n", "{\n", @@ -3157,6 +3159,7 @@ "}ifelse\n", "}if\n", "dup 0 get/Separation eq{\n", +"dup dup 1 get UnPDFEscape 1 exch put\n", "3//ResolveArrayElement exec\n", "dup 3 get//FunctionToProc exec\n", "2 copy 3 exch put\n", diff -Nru ghostscript-9.15+dfsg/doc/API.htm ghostscript-9.16~dfsg~0/doc/API.htm --- ghostscript-9.15+dfsg/doc/API.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/API.htm 2015-03-30 08:21:24.000000000 +0000 @@ -841,7 +841,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Commprod.htm ghostscript-9.16~dfsg~0/doc/Commprod.htm --- ghostscript-9.15+dfsg/doc/Commprod.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Commprod.htm 2015-03-30 08:21:24.000000000 +0000 @@ -251,7 +251,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/C-style.htm ghostscript-9.16~dfsg~0/doc/C-style.htm --- ghostscript-9.15+dfsg/doc/C-style.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/C-style.htm 2015-03-30 08:21:24.000000000 +0000 @@ -1570,7 +1570,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Deprecated.htm ghostscript-9.16~dfsg~0/doc/Deprecated.htm --- ghostscript-9.15+dfsg/doc/Deprecated.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Deprecated.htm 2015-03-30 08:21:24.000000000 +0000 @@ -5592,7 +5592,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Details8.htm ghostscript-9.16~dfsg~0/doc/Details8.htm --- ghostscript-9.15+dfsg/doc/Details8.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Details8.htm 2015-03-30 08:21:24.000000000 +0000 @@ -104188,7 +104188,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Details9.htm ghostscript-9.16~dfsg~0/doc/Details9.htm --- ghostscript-9.15+dfsg/doc/Details9.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Details9.htm 2015-03-30 08:21:24.000000000 +0000 @@ -13042,7 +13042,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Develop.htm ghostscript-9.16~dfsg~0/doc/Develop.htm --- ghostscript-9.15+dfsg/doc/Develop.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Develop.htm 2015-03-30 08:21:24.000000000 +0000 @@ -4823,7 +4823,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Devices.htm ghostscript-9.16~dfsg~0/doc/Devices.htm --- ghostscript-9.15+dfsg/doc/Devices.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Devices.htm 2015-03-30 08:21:24.000000000 +0000 @@ -1801,7 +1801,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/DLL.htm ghostscript-9.16~dfsg~0/doc/DLL.htm --- ghostscript-9.15+dfsg/doc/DLL.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/DLL.htm 2015-03-30 08:21:24.000000000 +0000 @@ -702,7 +702,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Drivers.htm ghostscript-9.16~dfsg~0/doc/Drivers.htm --- ghostscript-9.15+dfsg/doc/Drivers.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Drivers.htm 2015-03-30 08:21:24.000000000 +0000 @@ -3550,7 +3550,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Fonts.htm ghostscript-9.16~dfsg~0/doc/Fonts.htm --- ghostscript-9.15+dfsg/doc/Fonts.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Fonts.htm 2015-03-30 08:21:24.000000000 +0000 @@ -23,15 +23,6 @@

  • About Ghostscript fonts
  • Ghostscript's free fonts -
  • Other free fonts -
  • How Ghostscript gets fonts when it runs
  • Platform fonts
  • Adding your own fonts @@ -72,28 +63,21 @@
    • the fonts themselves in individual files, and -
    • a file "Fontmap" that defines for +
    • a file "Fontmap" that defines for Ghostscript which file represents which font.

    -Additionally, a file cidfmap can be used -to create CID fonts for CJK font files on the system See -the section on CID Font Substitution -for details. - -

    -Most of the font files supplied with Ghostscript have the extension -.pfb, and a few have .pfa or -.gsf. Each file defines one ordinary PostScript Type 1 -outline font which any PostScript language interpreter can use. Files with -.pfa or .pfb extensions are also compatible -with Adobe Type Manager (ATM) and with tools that don't include a full -PostScript language interpreter; files with .gsf extension -are incompatible with ATM and other tools. Ghostscript compiled with the -"ttfont" option can also use TrueType fonts with the extension -.ttf. +Additionally, the file cidfmap can be used +to create substitutes for CIDFonts referenced by name in Postscript and PDF jobs. +See the section on CID Font Substitution +for details. NOTE: care must be exercised since poor or incorrect output may result +from inappropriate CIDFont substitution. We therefore strongly recommend +embedding CIDFonts in your Postscript and PDF files if at all possible. +

    +The "base 35" fonts required for Postscript (and "base 14" required for PDF) +are Postscript Type 1 font files.

    When Ghostscript needs a font, it must have some way to know where to look for it: that's the purpose of the Fontmap file, which @@ -107,256 +91,14 @@


    Ghostscript's free fonts

    - -

    -Two sets of free fonts are supplied for Ghostscript: -

    • 35 commercial-quality Type 1 basic PostScript fonts -- Times, Helvetica, Courier, Symbol, etc. -- contributed by URW++ Design and Development Incorporated, of Hamburg, Germany (http://www.urwpp.de/). Fontmap names them all. - -
    • A miscellaneous set including Cyrillic, kana, and fonts derived from -the free Hershey fonts, with improvements (such as adding accented -characters) by Thomas Wolff. The Hershey-based fonts are quite different -from traditional printer or display fonts; you can read about them in more -detail in the documentation on Hershey fonts. -
    -
    -

    Font packages
    -
    System -    - File name -    - Contents -    - Types -

    -
    DOS and
    MS Windows -
      - gs###fn1.zip -   - Basic -   - .pfb -
      -   - gs###fn2.zip -   - Miscellaneous -   - Various, for
    different fonts -

    -
    Unix -   - ghostscript-fonts-std-#.##.tar.gz -   - Basic -   - .afm, - .pfb,
    .pfm
      -   - ghostscript-fonts-other-#.##.tar.gz -   - Miscellaneous -   - .afm, - .gsf,
    .pfa, .pfm - -
    -
    - -

    -"#.##" and "###" are the version number with and without punctuation. -Fonts can be found at - -

    -ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/fonts/ (for -several versions; generally the latest is preferred) -
    - -
    - -

    Other free fonts

    - -

    Computer Modern Fontmap

    - -

    -Don Knuth's Computer Modern fonts are popular, free, and widely available. -A Fontmap appropriate for these fonts is available from: - -

    - -ftp://tug.ctan.org/tex-archive/fonts/cm/ps-type1/contrib/Fontmap.cmr -
    - -

    -or from other CTAN sites. - -

    Free Chinese (Hanzi) fonts

    - -

    -A free Chinese font, originally provided by courtesy of Jackson Technology, -Ltd., Taiwan under the GPL and now distributed by the Taiwan NeXT User -Group, is available from: - -

    -ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/3rdparty/fonts/hanzi/ -
    - -

    -Prof. Wu of the Department of Economics of National Taiwan University has -created several free Type 1 Chinese fonts designed to be used with TeX. His -e-mail is ntut019@ccms.ntu.edu.tw. The -fonts are available from - -

    -ftp://cle.linux.org.tw/pub/fonts/cwfont/
    -
    - -

    -Arphic Technology Co., Ltd., has made several free TrueType Chinese fonts -available under the Arphic Public License, a license very similar to the -GPL. (Ghostscript can use TrueType fonts if Ghostscript is compiled with -the ttfont feature included: see here for more information.) The -fonts and license are available from - -

    -ftp://cle.linux.org.tw/pub/fonts/arphic/
    -
    - -

    Free Japanese (Kanji) fonts

    - -

    -Mr. Tetsurou Tanaka of the Department of Engineering, University of Tokyo, -has created a set of free Kanji fonts available from - -

    -ftp://ftp.ipl.t.u-tokyo.ac.jp/Font/
    -
    - -

    -along with documentation in Japanese and English describing their -conditions of use and how to use them. An older copy of these fonts, under -somewhat different names, is available at the Ghostscript site: - -

    - -ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/3rdparty/fonts/kanji/
    -
    - -

    -Mr. Norio Katayama has done some work to make Ghostscript work well with -Kanji fonts. An easy-to-install Kanji font for Ghostscript, with -installation instructions, is at - -

    -http://www.cit.ics.saitama-u.ac.jp/~far/howto/gs-ttf.html -
    - -

    -The same site has patches to make Ghostscript work with Japanese VF fonts, -with documentation in both English and Japanese: - -

    -http://www.cit.ics.saitama-u.ac.jp/~far/howto/gs-vflib.html -
    - -

    -Here are some other resources in Japanese relating to VFlib and using -Ghostscript with Japanese fonts: - -

    -
    http://kakugawa.aial.hiroshima-u.ac.jp/~kakugawa/Hacks/ -
    http://itohws03.ee.noda.sut.ac.jp/~matsuda/VFlib-FT/ -
    Author <matsuda@itohws01.ee.noda.sut.ac.jp> -
    http://www.rd.nacsis.ac.jp/~katayama/homepage/ghostscript/Japanese.html -
    Author <katayama@rd.nacsis.ac.jp> -
    - -

    Unicode CMaps

    - -

    -Some Unicode CMaps that can be used with Ghostscript are freely downloadable from - -

    -ftp://ftp.oreilly.com/pub/examples/nutshell/ujip/adobe/ -
    - -

    Free Cyrillic fonts

    - -

    -N. Glonty and A. Samarin created in 1989 a Cyrillic extension of TeX's -"Computer Modern" fonts, now freely available through the -Comprehensive TeX Archive Network (CTAN), -for instance at - -

    -ftp://ctan.tug.org/tex-archive/fonts/cyrillic/cmcyr/ -
    - -

    -CTAN's entire collection of Cyrillic fonts -is, for instance, at - -

    -ftp://ctan.tug.org/tex-archive/fonts/cyrillic/ -
    - -

    -Basil K. Malyshev created the "Paradissa Fonts Collection" in 1993. It -contained 165 fonts, including the Glonty and Samarin font above plus other -Computer Modern, Euler, and LaTeX fonts, all in PostScript Type 1 format -with .afm and .pfm files, compatible with ATM. -The collection could once be found through CTAN, for instance at - -

    -http://www.ctan.org/tex-archive/fonts/ - -
    - -

    -but the collection no longer seems to be available. However, the -ctan fonts directory -remains an excellent source of free fonts, many of which are offered in -postscript as well we as TeX Metafont format. - -


    - -

    (Partial) Unicode fonts

    - -

    -George W. Wilson is distributing some free partial Unicode fonts he created. -These fonts currently lack Arabic and CJK characters, but they include a -very large subset of the remaining Unicode set. They are available in both -Type 1 and TrueType formats. See - -

    -http://bibliofile.mc.duke.edu/gww/fonts/Unicode.html -
    -

    How Ghostscript gets fonts when it runs

    @@ -371,7 +113,7 @@

-The file prfont.ps contains code to print a sample page of +The file lib/prfont.ps contains code to print a sample page of a font. Load this program by including it in the gs command line or by invoking @@ -398,81 +140,21 @@


-

Platform fonts

- -

-Ghostscript displays text on screen using whatever font technology is -provided by the system on which it runs, by calling the system's API to -display text. On platforms with X Windows, this is X Windows; on MS -Windows it may be TrueType or ATM; Ghostscript neither knows nor cares. - -

-The PostScript language specifies that fonts are data structures with -particular contents (for instance, they include a bounding box for the -font, an Encoding vector to specify the character set, etc.), and it is -common for PostScript files to use this fact; also, characters can be used -as clipping regions, and can be arbitrarily algorithmically rotated, -skewed, expanded or condensed, etc. Most of this information is available -in some form from the underlying graphics system, but one crucial piece is -not: the actual scalable outlines of the characters, which Ghostscript -needs in order to implement both clipping with character shapes and -arbitrarily transformed characters. Consequently - -

-Ghostscript needs the scalable outlines of any font mentioned in a -document, and loads them from the disk (.pfa, -.pfb, or .gsf -file) in the usual way, even if it uses the platform's font machinery to -display the characters. In other words, Ghostscript must still be able to -find its font files. -
- -

-To make matters worse, platforms use different names for their standard -fonts. For example, the Times Roman font, for which PostScript files use -the name "Times-Roman", may be known as -"Times-Roman", "Times Roman", -"Tms Rmn", -"Times New Roman", or -"TimesNewRoman". The name may even be completely -different: the usual Helvetica-equivalent TrueType font is called -"Arial". It is possible to deal with this situation by -introducing aliases in Fontmap, but there are two reasons why Ghostscript -does not currently do this: - -

    -
  1. Methods of naming in different systems are so unstandardized that there -seems to be no small set of alternative names likely to cover most -situations. All five of the names above for Times Roman have been seen -under Windows and OS/2, depending on the version of the system, whether it -uses TrueType or ATM, and other unknown factors. - -
  2. Each alias takes up space at run time. If each of the standard fonts -has three additional aliases, this might amount to 50KB of wasted space, -which may be a lot on some smaller systems. -
- -

-If you don't seem to be getting nice characters on the screen under MS -Windows, you can try adding aliases to Fontmap, according to the -documentation you'll find in there. - -


-

Adding your own fonts

Ghostscript can use any Type 0, 1, 3, 4, or 42 font acceptable to other PostScript language interpreters or to ATM, including MultiMaster -fonts. Beginning with release 4.0, Ghostscript can also use TrueType fonts -if it was compiled with the "ttfont" option. +fonts. Ghostscript can also use TrueType font files.

To add fonts of your own, you must edit Fontmap to include at the end an entry for your new font; the format for entries is documented in Fontmap itself. Since later entries in Fontmap override earlier entries, a font you add at the end supersedes any corresponding fonts supplied -with Ghostscript and defined earlier in the file. +with Ghostscript and defined earlier in the file. To ensure correct output, +it is vital that entries for the "base 35" fonts remain intact +in the Fontmap file.

In the PC world, Type 1 fonts are customarily given names ending in @@ -484,7 +166,7 @@ no responsibility for any possible violations of such licenses. The same applies to TrueType fonts. -

Converting BDF fonts

+

Converting BDF fonts (- deprecated!)

Ghostscript provides a way to construct a (low-quality) Type 1 font from a @@ -610,150 +292,7 @@

Using Ghostscript fonts on X Windows displays

-

-The standard X11 distribution can display various kinds of fonts, including -the Adobe Type 1 format, so font files distributed with Ghostscript can be -used on X Windows displays. Beginning with Ghostscript version 6.0, the -font archive contains the directory files needed to map Ghostscript's font -files to XLFDs. Those files are named "fonts.dir" and -"fonts.scale". There are two main methods to configure -your display to use these files. - -

- -

Using xset

- -

-Users without root access can add the Ghostscript font directories to the -font search path using xset. Such a setting is transient -and must be repeated each time the display server is reset or restarted, -typically at login, so the call to xset should be added to -the user's ".xsession" or ".xinitrc" -startup script to make the fonts available at each login. - -

-To add a new font directory, invoke xset like this: - -

-xset fp+ {directory} -
- -

-where {directory} is the full pathname to the directory -containing the fonts on the host running the X display server. For common -Ghostscript installations the path is - -

-/usr/local/Ghostscript/share/fonts -
- -

Permanent installation

- -

A system administrator, or anyone with the necessary root privilege, -can make Ghostscript's fonts permanently available to the managed X display -servers. This setup depends on the servers and the methods used -to make the fonts available. - -

Configuring the xfs font server

- -

-An X display server can obtain its font resources from a dedicated X font -server. xfs is a prototype font server included in the X -Consortium X11 distribution. It is configured with a file located in a -directory whose exact location is installation-dependent and could be any -of - -

-/usr/lib/X11/fs/config -
/usr/X11/lib/X11/fs/config -
/usr/X11R6/lib/X11/fs/config -
- -

-or some similar name. You can also use xfs's -"-config" command-line option to specify the location of -the configuration file. - -

-The configuration file designates a list ("catalog") of directories, each -of which contains fonts and a font mapping database (the file -"fonts.dir"). This list is specified with the -"catalogue=" keyword followed by a list of absolute -directory paths separated by commas. To add the Ghostscript directory, -include its full name in the catalog list, for example: - -

-catalogue = /usr/local/share/Ghostscript/fonts/, -
/usr/X11R6/lib/X11/fonts/misc/, -
/usr/X11R6/lib/X11/fonts/Speedo/, -
/usr/X11R6/lib/X11/fonts/Type1/, -
/usr/X11R6/lib/X11/fonts/75dpi/, -
/usr/X11R6/lib/X11/fonts/100dpi/ -
- -

-The fonts are searched in the order the directories are specified, so an -XLFD mapped by the Ghostscript directory could shadow a previous similar -description specified in the following directories. Once the file is -modified, instruct the font server to reload the configuration file by -sending it the USR1 signal: - -

-kill -HUP {pid} -
- -

-where {pid} is the font server process's numeric -process -ID, as obtained with the "ps" command. Be sure to check -that the server is still alive after signaling it: it is very picky and -could decide to shut itself down if something is wrong in the new -configuration. If this happens, restart the server by hand and try to -figure out from its output what's happening. If the font server dies, -display servers using it will experience problems, so be sure to send the -signal from the console or from a display not using that font server! - -

Xfree86 display servers

- -

-With the family of Xfree86 display servers, adding a new font directory -permanently requires editing the "/etc/XF86Config" setup -file to add a new "FontPath" to the "Files" -section: - -

-Section "Files" -
     RgbPath    "/usr/X11R6/lib/X11/rgb" -
     FontPath   "/usr/local/share/Ghostscript/fonts" -
     FontPath   "/usr/X11R6/lib/X11/fonts/misc:unscaled" -
     FontPath   "/usr/X11R6/lib/X11/fonts/75dpi:unscaled" -
     FontPath   "/usr/X11R6/lib/X11/fonts/100dpi:unscaled" -
     FontPath   "/usr/X11R6/lib/X11/fonts/Type1" -
     FontPath   "/usr/X11R6/lib/X11/fonts/Speedo" -
EndSection
-
- -

-The fonts are searched in the order the directories are specified, so an -XLFD mapped by the Ghostscript directory could shadow a previous similar -description specified in the following directories. Once this global -configuration is edited, the new fonts become available to all Xfree86 -servers in use on that host. If a server is running, it must be restarted -to take effect: just quit the current session in the usual way. If the -server is under the control of xdm, you may have to kill -it, because it is usually reset only between successive sessions. - -

-This section by Bertrand Petit -<eegs@phoe.frmug.org> +

The "Xfonts" feature is no longer supported. @@ -774,7 +313,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/doc/GS9_Color_Management.pdf and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/doc/GS9_Color_Management.pdf differ diff -Nru ghostscript-9.15+dfsg/doc/GS9_Color_Management.tex ghostscript-9.16~dfsg~0/doc/GS9_Color_Management.tex --- ghostscript-9.15+dfsg/doc/GS9_Color_Management.tex 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/GS9_Color_Management.tex 2015-03-30 08:21:24.000000000 +0000 @@ -35,19 +35,19 @@ \begin{titlepage} -\begin{center}{\huge \bf Ghostscript 9.07 Color Management\\} \vspace{0.5in} {\Large Michael J. +\begin{center}{\huge \bf Ghostscript 9.15 Color Management\\} \vspace{0.5in} {\Large Michael J. Vrhel, Ph.D.\\} {\Large Artifex Software\\} {\Large 7 Mt. Lassen Drive, A-134\\} {\Large San Rafael, CA 94903, USA\\} {\Large www.artifex.com\\} \end{center} \vspace*{0.5in} \begin{abstract} -This document provides information about the color architecture in Ghostscript 9.06. The document is suitable for users who wish to +This document provides information about the color architecture in Ghostscript 9.15. The document is suitable for users who wish to obtain accurate color with their output device as well as for developers who wish to customize Ghostscript to achieve a higher level of control and/or interface with a different color management module. \end{abstract} \begin{center} \vspace*{0.25in} -Revision 1.4 +Revision 1.5 \vspace*{0.25in} \capstartfalse \begin{figure}[h] @@ -72,7 +72,7 @@ With release 9.0, the color architecture of Ghostscript was updated to primarily use the ICC\cite{ICC} format for its color management needs. Prior to this release, Ghostscript's color architecture was based heavily upon PostScript\cite{PS} Color Management (PCM). This is due to the fact that Ghostscript was designed prior to the ICC format and likely even before there was much thought about digital color management. At that point in time, color management was very much an art with someone adjusting controls to achieve the proper output color. -Today, almost all print color management is performed using ICC profiles as opposed to PCM. This fact along with the desire to create a faster, more flexible design was the motivation for the color architectural changes in release 9.0. Since 9.0, several new features and capabilities have been added. As of the 9.07 release, features of the color architecture include: +Today, almost all print color management is performed using ICC profiles as opposed to PCM. This fact along with the desire to create a faster, more flexible design was the motivation for the color architectural changes in release 9.0. Since 9.0, several new features and capabilities have been added. As of the 9.15 release, features of the color architecture include: \begin{itemize} \item Easy to interface different CMMs (Color Management Modules) with Ghostscript. \item ALL color spaces are defined in terms of ICC profiles. @@ -94,6 +94,7 @@ \item Control to force gray source colors to black ink only when rendering to output devices that support black ink. \item Ability to make use of device link ICC profiles for direct mapping of source colors to the device color space. \item Ability to make use of device link ICC profiles for retargeting from SWOP/Fogra standard color space to a specific device color space. +\item Ability to monitor for the presence of color on individual pages, which is useful for certain print systems. \end{itemize} The document is organized to first provide a high level overview of the architecture. This is followed by details of the various functions and structures, which include the information necessary to interface other color management modules to Ghostscript as well as how to interface specialized color handling operations. @@ -1126,7 +1127,7 @@ \bibitem{ICC} Specification ICC.1:2004-10 (Profile version 4.2.0.0) Image technology colour management - Architecture, profile format, and data structure. (http://www.color.org/ICC1v42\_2006-05.pdf), Oct. 2004. -\bibitem{PS} PostScript® Language Reference Third Edition, Adobe Systems Incorporated, Addison-Wesley Publishing, (http://partners.adobe.com/public/developer/ps/index\_specs.html) +\bibitem{PS} PostScript Language Reference Third Edition, Adobe Systems Incorporated, Addison-Wesley Publishing, (http://partners.adobe.com/public/developer/ps/index\_specs.html) Reading Massachusetts, 1999. \bibitem{PDF} PDF Reference Sixth Edition Ver. 1.7, Adobe Systems Incorporated, (http://www.adobe.com/devnet/pdf/pdf\_reference.html), November 2006. @@ -1138,7 +1139,7 @@ \end{thebibliography} \vspace*{1.25in} -Copyright (c) 2011, Artifex Software Inc. All rights reserved. +Copyright (c) 2014, Artifex Software Inc. All rights reserved. \end{document} diff -Nru ghostscript-9.15+dfsg/doc/gs-vms.hlp ghostscript-9.16~dfsg~0/doc/gs-vms.hlp --- ghostscript-9.15+dfsg/doc/gs-vms.hlp 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/gs-vms.hlp 2015-03-30 08:21:24.000000000 +0000 @@ -1,6 +1,6 @@ 1 gs gs - GPL Ghostscript interpreter/previewer -! Ghostscript version 9.15, 22 September 2014 +! Ghostscript version 9.16, 30 March 2015 Usage: $ gs [options] [file ...] diff -Nru ghostscript-9.15+dfsg/doc/Helpers.htm ghostscript-9.16~dfsg~0/doc/Helpers.htm --- ghostscript-9.15+dfsg/doc/Helpers.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Helpers.htm 2015-03-30 08:21:24.000000000 +0000 @@ -300,7 +300,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/History1.htm ghostscript-9.16~dfsg~0/doc/History1.htm --- ghostscript-9.15+dfsg/doc/History1.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/History1.htm 2015-03-30 08:21:24.000000000 +0000 @@ -430,7 +430,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/History2.htm ghostscript-9.16~dfsg~0/doc/History2.htm --- ghostscript-9.15+dfsg/doc/History2.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/History2.htm 2015-03-30 08:21:24.000000000 +0000 @@ -5224,7 +5224,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/History3.htm ghostscript-9.16~dfsg~0/doc/History3.htm --- ghostscript-9.15+dfsg/doc/History3.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/History3.htm 2015-03-30 08:21:24.000000000 +0000 @@ -8589,7 +8589,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/History4.htm ghostscript-9.16~dfsg~0/doc/History4.htm --- ghostscript-9.15+dfsg/doc/History4.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/History4.htm 2015-03-30 08:21:24.000000000 +0000 @@ -3973,7 +3973,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/History5.htm ghostscript-9.16~dfsg~0/doc/History5.htm --- ghostscript-9.15+dfsg/doc/History5.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/History5.htm 2015-03-30 08:21:24.000000000 +0000 @@ -13447,7 +13447,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/History6.htm ghostscript-9.16~dfsg~0/doc/History6.htm --- ghostscript-9.15+dfsg/doc/History6.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/History6.htm 2015-03-30 08:21:24.000000000 +0000 @@ -7324,7 +7324,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/History7.htm ghostscript-9.16~dfsg~0/doc/History7.htm --- ghostscript-9.15+dfsg/doc/History7.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/History7.htm 2015-03-30 08:21:24.000000000 +0000 @@ -15713,7 +15713,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/History8.htm ghostscript-9.16~dfsg~0/doc/History8.htm --- ghostscript-9.15+dfsg/doc/History8.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/History8.htm 2015-03-30 08:21:24.000000000 +0000 @@ -62047,7 +62047,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/History9.htm ghostscript-9.16~dfsg~0/doc/History9.htm --- ghostscript-9.15+dfsg/doc/History9.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/History9.htm 2015-03-30 20:52:58.000000000 +0000 @@ -29,6 +29,7 @@

Table of contents

    +
  • Version 9.16 (2015-03-30)
  • Version 9.15 (2014-09-22)
  • Version 9.14 (2014-03-26)
  • Version 9.10 (2013-08-27) @@ -71,7 +72,5067 @@ +

    Version 9.16 (2015-03-30)

    +

    This is the twelfth full release in the stable 9.x series, and is +primarily a maintenance release. + +

    Highlights in this release include: +

      +
    • +

      "LockColorants" command line option for tiffsep and psdcmyk devices. Specifying +-dLockColorants will restrict those devices to only the colorants list on the command +line (thus: -c "<< /SeparationColorNames [ /Cyan /Magenta /Yellow /Black /Violet /Orange] +/SeparationOrder [ /Cyan /Magenta /Yellow /Black /Violet /Orange]>> setpagedevice"), rather +than allowing the devices to add new colorants as encountered in the input. This is, obviously, +preferable for real printers, where only a certain of inks will be available. +

    • +
    • +

      Improved high level devices handling of Forms. Whilst High level devices (eg pdfwrite) +already checked Forms to see if they are duplicates, and if so use the initial definition. +However, this does not improve performance, since the Form PaintProc still needs to be executed +for each instance of the Form, and the matching algorithm could, in very odd circumstances, be +defeated. The new implementation benefits both causes, meaning the second and subsequent invocation +of the form need not re-run the PaintProc, and removes the heuristic aspect of the reuse detection. +

    • +
    • +

      New URW+ fonts in which the families NimbusMono, NimbusRoman and NimbusSans have been +augmented with production quality Greek and Cyrillic glyphs. These correspond to our +substitutes for the PDF base 14 fonts. +

    • +
    • +

      Plus the usual round of bug fixes, compatibility changes, and incremental improvements. +

    • +
    +

    For a list of open issues, or to report problems, +please visit bugs.ghostscript.com. + +

    Incompatible changes

    +

    +No recorded incompatible changes. + +

    Changelog

    +

    2015-03-20 00:11:26 +0000 + +

    2015-03-19 11:55:19 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +49ac7a284e46cf8df8eb553c91ee48a6b004652e +

    +

    + LCMS2 pointer alignment on SPARC/gcc
    +
    + Building on commit 5a2da7dd71:
    +
    + With gcc on (Ultra)SPARC hardware, pointers must be 8 byte aligned, even in
    + 32 bit userspace (where sizeof(void *) == 4).
    +
    + So it means taking special action to enforce 8 byte alignment in the LCMS2
    + memory management code.
    +
    + We'll set the alignment for SPARC builds in the configure script.
    +
    + No cluster differences.
    +
    +config.mak.in
    +configure.ac
    +gs/Makefile.in
    +gs/configure.ac
    +

    +

    +
    +

    2015-03-24 13:50:34 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +f2f22a246dcbe8468880535ea75f47e0fc4619ce +

    +

    + LCMS2 on SPARC ptr alignment.
    +
    + Allow the ptr alignment for LCMS2 memory management to set at build time on the
    + compiler command line.
    +
    + Submitted upstream:
    + https://github.com/mm2/Little-CMS/commit/dd0074b2
    +
    + No cluster differences
    +
    +gs/lcms2/src/lcms2_internal.h
    +

    +

    +
    +

    2015-03-23 17:03:41 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +b96200d7fc5f3b7464744589f6657e9b4c4cb3ec +

    +

    + Bug 695882: ensure function protypes are available
    +
    + There are some special defines on Linux to include prototypes for pread, pwrite
    + and pthread_mutexattr_settype: add these to our "unistd_.h" header.
    +
    + Also, tweak the the configure script to check for prototypes as well as just
    + successful linking before including the code that uses those functions
    +
    + No cluster differences
    +
    +configure.ac
    +gs/base/gp_psync.c
    +gs/base/unistd_.h
    +gs/configure.ac
    +

    +

    +
    +

    2015-03-24 11:07:43 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +9358edca362b60f8ace388768548e6e94f5ebec8 +

    +

    + PDF Interpreter - ignore XRefStm entries which poitn beyond end of file
    +
    + Bug #695883 "Error: /invalidaccess in --run--"
    +
    + The file is pretty well broken, it claims to be a hybrid (PDF 1.5 or better
    + readable by PDF 1.4 consumer, it uses xref streams) and as such its trailer
    + dictionary contains an XRefStm key whose value is supposed to point to the
    + PDF 1.5 xref stream. It doesn't, in fact it points past the end of the file
    + and so is clearly bogus.
    +
    + This commit tests to ensure the XRefStm value is inside the file before
    + attempting to read it.
    +
    + No differences expected.
    +
    +gs/Resource/Init/pdf_main.ps
    +

    +

    +
    +
    Chris Liddell <chris.liddell@artifex.com>
    +6c56ffb81354dca442b69389b0f7a0b75e4e864e +
    +

    + Tweak builds for SPARC architecture
    +
    + SPARC's interesting alignment requirements don't work with the memory header
    + ID code, so disable it.
    +
    + No cluster differences.
    +
    +configure.ac
    +gs/configure.ac
    +

    +

    +
    +
    Chris Liddell <chris.liddell@artifex.com>
    +03d399b295f9a39f743eb194ebce0995d52d0bfb +
    +

    + Update versions and dates for release candidate.
    +
    +gs/Makefile.in
    +gs/base/gscdef.c
    +gs/base/version.mak
    +gs/doc/API.htm
    +gs/doc/C-style.htm
    +gs/doc/Commprod.htm
    +gs/doc/DLL.htm
    +gs/doc/Deprecated.htm
    +gs/doc/Details8.htm
    +gs/doc/Details9.htm
    +gs/doc/Develop.htm
    +gs/doc/Devices.htm
    +gs/doc/Drivers.htm
    +gs/doc/Fonts.htm
    +gs/doc/Helpers.htm
    +gs/doc/History1.htm
    +gs/doc/History2.htm
    +gs/doc/History3.htm
    +gs/doc/History4.htm
    +gs/doc/History5.htm
    +gs/doc/History6.htm
    +gs/doc/History7.htm
    +gs/doc/History8.htm
    +gs/doc/History9.htm
    +gs/doc/Install.htm
    +gs/doc/Issues.htm
    +gs/doc/Language.htm
    +gs/doc/Lib.htm
    +gs/doc/Make.htm
    +gs/doc/News.htm
    +gs/doc/Projects.htm
    +gs/doc/Ps-style.htm
    +gs/doc/Ps2epsi.htm
    +gs/doc/Ps2pdf.htm
    +gs/doc/Ps2ps2.htm
    +gs/doc/Psfiles.htm
    +gs/doc/Readme.htm
    +gs/doc/Release.htm
    +gs/doc/SavedPages.htm
    +gs/doc/Source.htm
    +gs/doc/Unix-lpr.htm
    +gs/doc/Use.htm
    +gs/doc/WhatIsGS.htm
    +gs/doc/Xfonts.htm
    +gs/doc/gs-vms.hlp
    +gs/doc/thirdparty.htm
    +gs/man/dvipdf.1
    +gs/man/font2c.1
    +gs/man/gs.1
    +gs/man/gslp.1
    +gs/man/gsnd.1
    +gs/man/pdf2dsc.1
    +gs/man/pdf2ps.1
    +gs/man/pf2afm.1
    +gs/man/pfbtopfa.1
    +gs/man/printafm.1
    +gs/man/ps2ascii.1
    +gs/man/ps2epsi.1
    +gs/man/ps2pdf.1
    +gs/man/ps2pdfwr.1
    +gs/man/ps2ps.1
    +gs/man/wftopfa.1
    +gs/psi/int.mak
    +gs/psi/msvc.mak
    +gs/psi/winint.mak
    +

    +

    +
    +

    2015-03-19 13:50:07 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +a463733e35e1070a06029657dedb67148c33c87a +

    +

    + Handle an invalid cidfmap entry in the CIDFont subst code
    +
    + Certain types of invalid entry in the cidfmap can mean that resourcestatus
    + returns "true" but a subsequent "findresource" will fail. There is already
    + validation code to strip out invalid entries, but as an extra safety measure,
    + call the findresource in a stopped context, so we can recover, and continue
    + with the next substitution fallback stage.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/pdf_font.ps
    +

    +

    +
    +

    2015-03-19 10:51:32 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +68f1390c29df09d2cc7cdb5c815c71aaa77f667c +

    +

    + Add instructions about using ghostpdf.inf on Windows 8
    +
    + Add the instructions in the comments in ghostpdf.inf, and in a separate README
    + file.
    +
    + Lots of "AT YOUR OWN RISK!!" comments in both.
    +
    + No cluster differences.
    +
    +gs/lib/ghostpdf.README
    +gs/lib/ghostpdf.inf
    +

    +

    +
    +

    2015-03-19 10:49:34 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +2487b24d668f86350a1c5bdcf0e7a485470665e9 +

    +

    + Correct a copy'n'paste mistake in a conditional
    +
    + No cluster differences.
    +
    +gs/configure.ac
    +

    +

    +
    +

    2015-03-18 08:37:15 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +3c4edb1e23eec531b96194f85685b30656149732 +

    +

    + Bug 695860: only shutdown BGPrint if it's active
    +
    + Always forcing a setpagedevice interacts poorly with pdfwrite/ps2write (which
    + rely on the device shutting down to trigger emitting the final output).
    +
    + Since vector devices cannot benefit from BGPrint, only disable BGPrint (with
    + setpagedevice) if BGPrint was active in the first place.
    +
    + No cluster differences.
    +
    +gs/psi/imain.c
    +

    +

    +
    +

    2015-03-17 22:42:22 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +2ceee5a8a0e1a4d65f14de5f6cf53bb939b2f02c +

    +

    + Bug 695872: handle real/integer mixup in image Decode dict
    +
    + In PDF we now pass the Height value from the image dict into the parameters
    + for the filter to access (specifically, the DCTDecodeFilter), and this will
    + cause an error if the Height value is, erroneously, a real rather than integer
    + value (the Postscript image operator appears to already handle that error,
    + at least in certain cases, gracefully).
    +
    + So the filter code does not throw an error, round and convert the value to an
    + integer before storing it in the filter parameters dictionary.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/pdf_draw.ps
    +

    +

    +
    +

    2015-03-17 21:44:50 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +ace1b71cd0097ee830692e3e59738e084f5a4141 +

    +

    + Fix a couple of typos in Install.htm
    +
    + No cluster differences.
    +
    +gs/doc/Install.htm
    +

    +

    +
    +

    2015-03-17 18:05:51 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +41ff61ceceb55dd03da6b309c290c880c38fce04 +

    +

    + Bug 692861: update Install.htm for "new" installer.
    +
    + Bring Install.htm in-line with the nsis based Windows installer.
    +
    + Also, remove references to Adobe Type Manager, and document that OpenVMS and
    + OS/2 are no longer actively supported by us.
    +
    + No cluster differences
    +
    +gs/doc/Install.htm
    +

    +

    +
    +

    2015-03-17 16:38:50 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +b18cefb10c2391188d07ad0ca397e58121434b8b +

    +

    + Recursive mutex emulation: fix order of operations
    +
    + We have to invalidate the self_id value *before* we unlock the mutex, as the
    + mutex implicitly protects the self_id (and lcount) value.
    +
    + Also add asserts so we'll abort if the self_id and/or lcount get out of whack.
    +
    + Finally, add a missing default value for RECURSIVE_MUTEXATTR in the ghostpdl
    + configure.
    +
    + No cluster differences
    +
    +configure.ac
    +gs/base/gp_psync.c
    +gs/base/lib.mak
    +

    +

    +
    +

    2015-03-17 14:45:01 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +3dbcbb2ac75a8565534310cba189544ccdd1c1c4 +

    +

    + Bug 695862: addendum - fix typo
    +
    + No cluster differences.
    +
    +gs/base/gp_psync.c
    +

    +

    +
    +

    2015-03-16 22:18:41 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +edf3461901805376bdb1b9aa995df359531c7539 +

    +

    + Fix a write after free memory issue.
    +
    + No cluster differences
    +
    +gs/base/stream.c
    +

    +

    +
    +

    2015-03-16 12:52:49 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +444e0bf9c43bae0261660e6318ba0e514c18d41e +

    +

    + Bug 695862: use PTHREAD_MUTEX_RECURSIVE(_NP) if available
    +
    + or properly emulate recursive mutexes ourselves.
    +
    + No cluster differences
    +
    +config.mak.in
    +configure.ac
    +gs/Makefile.in
    +gs/base/gp_psync.c
    +gs/configure.ac
    +

    +

    +
    +

    2015-03-07 16:25:46 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +f1feefae4e6412d37db6abb46b492a74073964c7 +

    +

    + Bug 691396: add new lines to FAPIdebug messages.
    +
    + No cluster differences
    +
    + tmp commit
    +
    +gs/Resource/Init/gs_fapi.ps
    +

    +

    +
    +

    2015-03-07 17:05:53 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +febe7a1acf152ef7379a126bfa65358604272b5a +

    +

    + Flush around FAPI "internal" debug messages.
    +
    + Try to avoid the FAPI -Z1 messages stomping on other output messages by flushing
    + around the messages.
    +
    + No cluster differences.
    +
    +gs/base/fapi_ft.c
    +gs/base/fapiufst.c
    +

    +

    +
    +

    2015-03-07 15:10:49 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +0f1d26a75ccb1adc806287f7e97af14af85f4fdf +

    +

    + Bug 692815: Fonts resourcestatus and native fonts
    +
    + The core of the resourcestatus implementation for the Fonts category would
    + check the content of Fontmap, but would not trigger the native font scanning
    + to occur. So two invokations of resourcestatus for Font could result in
    + different results depending on whether, in the intervening period, another
    + operation had triggered the native font scan.
    +
    + This could result in unexpected behaviour from the PDF interpreter where a
    + "synthetic" substitute could be created on the first page, and a native font
    + selected on the second page, for the same font name.
    +
    + We'll now try to "find" the font for resourcestatus, if we fail, we'll try to
    + trigger the native font scan, and retry.
    +
    + Further, I had missed the fact that this code used the Fontmap dictionary in my
    + previous commit, so it now accounts for the new NativeFontmap dict.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_fonts.ps
    +gs/Resource/Init/gs_res.ps
    +

    +

    +
    +

    2015-03-05 14:56:51 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +3edd8e8e64c0b35364c2fdf2e13336191c023f4b +

    +

    + Bug 690653: fix order of font substitution mapping.
    +
    + Previously, the enumeration of the "native fonts" (i.e. when using
    + fontconfig) wrote the mappings into the same Fontmap dictionary that is built
    + from the Fontmap file.
    +
    + This could cause several problems. Firstly, it was possible for fonts found by
    + the native font search to effective replace the default font set - which should
    + *never* happen. Secondly, and even worse, the font found when trying to load
    + one of the default font set could change depending on whether a prior attempt
    + was made to load from from outside the default font, because the attempt to load
    + a font from outside the default set would trigger the Fontmap to change with the
    + native fonts being added.
    +
    + We'll now keep the Fontmap dict from the Fontmap file separate from a new
    + native fontmap dictionary. We'll now check the Fontmap dictionary, then try to
    + load directly by name, then check the .nativeFontmap dict.
    +
    + The .nativeFontmap also gets the results of scanning the directories in the
    + FONTDIR paremeter.
    +
    + No cluster differences.
    +
    + Bug 690653 (related): update pdf interp to use NativeFontmap
    +
    + The pdf interpreter accesses Fontmap, so tweak it to also use NativeFontmap.
    +
    + No cluster differences
    +
    +gs/Resource/Init/gs_fonts.ps
    +gs/Resource/Init/pdf_font.ps
    +

    +

    +
    +

    2015-03-16 18:29:09 +0000 + +
    Robin Watts <robin.watts@artifex.com>
    +0391d0e73c1892138b11c1416113e32b80d3317f +

    +

    + Update clusterpush.pl to cope with new mupdf source layout.
    +
    +gs/toolbin/localcluster/clusterpush.pl
    +

    +

    +
    +

    2015-03-16 08:39:36 -0700 + +
    Ray Johnston <ray.johnston@artifex.com>
    +949e2de694cb5464a26794b7679d8f74ad2fe02b +

    +

    + Temporary fix for bug 695711. Disable BGPrint when NumRenderingThreads > 0.
    +
    + This will be fixed, but since background printing is an optimization, it is
    + better to disable it instead of having a SEGV occur due to a race condition.
    +
    +gs/base/gdevprn.c
    +

    +

    +
    +

    2015-03-16 10:08:52 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +d4440c2190845bdd165f3d208d508f45e2142bee +

    +

    + pdfwrite - process octal escapes in DSC comments
    +
    + Bug #695850 - "DSC comments not being read correctly from PDFDocEncoding"
    +
    + DSC comments are not encoded using PDFDocEncoding, nor are they PostScript
    + strings, they are a simple sequence of bytes. So it seems that we should
    + simply preserve that sequence in the output PDF file. However Distiller
    + behaves 'oddly' with DSC comments containing escape characters:
    +
    + octal escapes (\ followed by 3 numbers) are converted into apparently a
    + PDFDocEncoding byte
    +
    + non-octal numeric escapes (\ followed by less than 3 numbers or numebrs
    + which aren't octal) have the \ changed to a ?
    +
    + non-octal non-numeric escapes (eg \n) simply get the escape dropped.
    +
    + IMO this leads to problems, for example bug687660.ps has a %%Title which is
    + a DOS filename '%%Title: (C:\PHYSICS\TeX\SPINTRONICS\SPIN_HALL\gh_ef_001.eps)'
    + Distiller mangles this by dropping all the '\' characters to become
    + (C:PHYSICSTeXSPINTRONICSSPIN_HALLgh_ef_001.eps)
    +
    + This commit alters the way that pdfwrite handles octal escapes *only*. These
    + are converted to binary and will then be encoded as if they were in
    + PDFDocEncoding which matches Distiller. We will not attempt to match the
    + observed behaviour of Distiller, not least because I think its completely
    + the wrong thing to do.
    +
    +
    + No differences expected
    +
    +gs/devices/vector/gdevpdfp.c
    +

    +

    +
    +

    2015-03-13 09:20:39 -0700 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +a16e39318467d8a802296bd34bbf0fab7f7809d5 +

    +

    + Fix for bug 695863 overprint while pattern color is active
    +
    + If a pattern color space is present when a graphics state swap occurs, and
    + the overprint changes from on to off in the graphics state the overprint
    + compositor is not disabled. In Bug 695863 a DeviceN image fill follows such
    + a case and the fill is improperly performed with overprint enabled. With this
    + commit we disable the overprint compositor if overprint is off. If overprint
    + is not off, it is not clear how we should proceed, as the color space is
    + a factor in that set up and here the color space is a pattern.
    +
    +gs/base/gspcolor.c
    +gs/base/lib.mak
    +

    +

    +
    +

    2015-03-10 22:05:52 -0700 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +64e33af885e49b40c0ebc070ede50e86a8ed3bdb +

    +

    + Change to check for len > 0 on while loop
    +
    + Requested by a customer and protects against caller passing invalid len
    +
    +gs/psi/dwmainc.c
    +

    +

    +
    +

    2015-03-07 08:38:57 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +8e8a9c4265c3346055ecfc8025880cab28e268de +

    +

    + Fix for bug 693070 psdrgb device
    +
    + The psdrgb device should not alter its number of components but it should stay
    + fixed. This commit plus b5b03bde360a7ba625a4c40a936c4e2fd5a32359
    + should fix the psdrgb device.
    +
    +gs/devices/gdevpsd.c
    +

    +

    +
    +

    2015-03-06 13:28:51 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +b5b03bde360a7ba625a4c40a936c4e2fd5a32359 +

    +

    + PageSpotColors was getting handled by devn_get_params but not devn_put_params
    +
    + For additive devices devn_put_params was not handling PageSpotColors but
    + devn_get_params was. This mismatch would lead to an error for the psdrgb
    + device, which is an additive device built upon the DeviceN device. Additive
    + devices do not handle apot colors at this time so the fix was to make
    + the handling of PageSpotColors in devn_get_params dependent upon the device
    + polarity like devn_put_params does.
    +
    +gs/base/gdevdevn.c
    +

    +

    +
    +

    2015-03-06 11:19:07 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +c75e5c690c6f9c1da2e9225d4986967d1d391c8b +

    +

    + Fix for bug 695791. Wrong ICC profile written when source was CIELAB colorspace.
    +
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2015-03-03 18:59:17 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +12ddbaa69c38fa0178ff60a012ff358987b6238d +

    +

    + Handle non-integer /Rotate values.
    +
    + Add a convert to integer (cvi) after retrieving the /Rotate entry from a PDF
    + /Page object (we already reject values that are not a multiple of 90).
    +
    + In this case, the value was 90.0.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/pdf_main.ps
    +

    +

    +
    +

    2015-02-27 12:25:15 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +863c929faa7811ce6d78cb8d1b4610ee00a7a572 +

    +

    + Fix mistake on temp state setup for named color replacement
    +
    + I had not properly set up the colorant mapping positions and
    + size for the temporary graphic state that is used during the
    + storage of the color values that are set by the named color
    + replacement code. Thanks to Stefan for finding this.
    +
    +gs/base/gxcmap.c
    +

    +

    +
    +

    2015-02-26 18:01:04 -0700 + +
    Henry Stiles <henry.stiles@artifex.com>
    +7093747c7336656cfba938cff705b36fea6106c2 +

    +

    + More improvement related to bug #695833 properly selecting LinePrinter
    + not Courier.
    +
    +pl/plftable.h
    +

    +

    +
    +

    2015-02-26 17:54:10 -0700 + +
    Henry Stiles <henry.stiles@artifex.com>
    +f4f0f0a92a543adef944c09ff065defe1c58fefe +

    +

    + Remove the test for a TrueType file type to make way for supporting
    + other font file types.
    +
    +pl/pllfont.c
    +

    +

    +
    +

    2015-02-25 07:44:51 -0800 + +
    Marcos H. Woehrmann <marcos.woehrmann@artifex.com>
    +70bd09212747f8b13e94948c04cadf5b0df65899 +

    +

    + Silence a compiler warning in fuzzy.c
    +
    +gs/toolbin/tests/fuzzy.c
    +

    +

    +
    +

    2015-02-12 10:13:10 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +a2d08f1eb88355c81672668595f0b80f32386e48 +

    +

    + Fix pattern-clist with transparency color mismatch with raster patterns
    +
    + Cust 532 noticed that colors would be (very slightly) different when patterns
    + were rendered from raster patterns vs. using the pattern-clist approach. This
    + happened when the pattern has transparency such as fts_25_2526.ps.
    +
    + The file tests_private/comparefiles/Bug692720.pdf is a progression (lower left
    + "21h" and "22h" are missing and the bold outline for some of the text on the
    + left panel is wrong without this change.
    +
    + Fix it to make sure and push and pop a transparency group around the pattern
    + filling when pattern-clist is used, the same as for raster patterns that have
    + transparecncy. The 'blending_mode' was moved to the tile (gx_color_tile_s)
    + from the ttrans (gx_pattern_trans_s) struct so that it will be available when
    + painting from the pattern-clist.
    +
    + Also remove some code in gxpcmap.c that was dead (#if 0) since 2007.
    +
    +gs/base/gdevp14.c
    +gs/base/gsptype1.c
    +gs/base/gxclread.c
    +gs/base/gximask.c
    +gs/base/gxp1fill.c
    +gs/base/gxpcmap.c
    +gs/base/gxpcolor.h
    +gs/psi/zpcolor.c
    +

    +

    +
    +

    2015-02-23 14:13:53 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +fb531eecd1942807a792ef66a1aa49ec00792d13 +

    +

    + Fix bugs 695840, 695841. Regression due to pdf14_clist optimization.
    +
    + If the color characteristics of the device do not match the pdf14
    + compositor, rendering the clist bands without the pdf14 compositor
    + will fail, either by reading colors with the wrong depth back from
    + the clist or colors having been pre-converted using a device ICC
    + profile that is different than the colors that are written using
    + the pdf14 compositor.
    +
    +gs/base/gdevp14.c
    +gs/base/gdevp14.h
    +gs/base/gxclrast.c
    +gs/base/gxclread.c
    +

    +

    +
    +

    2015-02-23 12:18:01 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +1dca5f29bf59d3071021a3ba4b7378e60d0e7a10 +

    +

    + Fixes for named color support
    +
    + A few minor fixes for named color support including the detection of the
    + None colorant in the DeviceN list of colorants. Making sure that the
    + equivalent CMYK color is correctly computed. Make sure that all the
    + colorants in the device are cleared out prior to setting the ones
    + associated with the device profile in the example code given in
    + gsicc_transform_named_color.
    +
    +gs/base/gsequivc.c
    +gs/base/gsequivc.h
    +gs/base/gsicc_cache.c
    +gs/base/gxcmap.c
    +

    +

    +
    +

    2015-02-23 10:15:02 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +46b59d18a8f4d204e83327e135c17657caefde3a +

    +

    + Fix issues with sICCOutputColors option
    +
    + If an NCLR ICC profile is specified for output then it is also
    + possible to specify the colorant names associated with the profile.
    + This information is described by the sICCOutputColors parameter.
    + There was an issue where the default colorant names AND the
    + colorant names specified by sICCOutputColors were getting
    + added to the device. With this fix only the colorants specified
    + by sICCOutputColors are added to the device.
    +
    +gs/base/gsdparam.c
    +gs/base/gsicc_manage.c
    +gs/devices/gdevpsd.c
    +

    +

    +
    +

    2015-02-23 12:30:30 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +375752983d9373b28bf1fada04fc9325673bc51c +

    +

    + Bug 695516: fix psl.dev/psbase.dev deps snafu....
    +
    + And also tidy dependency for PDF interpreter.
    +
    + No cluster differences
    +
    +gs/psi/int.mak
    +

    +

    +
    +

    2015-02-23 11:49:08 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +1125d53f8db9f7402f37fa8fe7823257e4c6554a +

    +

    + PDF Interpreter - fix some kinds of FreeText processing
    +
    + Bug 695848 "Ghostscript decode error when opening PDF"
    +
    + The processing of the Default Appearance was mishandling some colour
    + specifications. It was expecting arrays for all operators, when in fact only
    + the (undocumented ?) 'r' operator takes an array, all the others simply
    + take a sequence of values.
    +
    +gs/Resource/Init/pdf_draw.ps
    +

    +

    +
    +

    2015-02-20 15:05:51 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +6ab5713f556bde0be38fa411e2eb1d25eb73e2c5 +

    +

    + Use different remap proc for indexed color space when dealing with named colors
    +
    + Currently the Index color space uses gx_default_remap_color for its remap procedure.
    + This is a problem for when we are dealing with an index color whose base space
    + is DeviceN and we are doing named color replacement in our color management. To
    + fix this, we introduce a different version of the Indexed color space that is installed
    + with a different remap proc for the case when we have a index color space whose
    + base space is DeviceN or Separation AND we have specified a named color ICC profile.
    +
    +gs/base/gscolor2.c
    +gs/base/gscolor2.h
    +gs/psi/zcolor.c
    +

    +

    +
    +

    2015-02-20 14:23:56 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +033cf566b74c7e12bfb82d9b63a7bc680c51c5f8 +

    +

    + Add LockColorants option to tiffsep and psdcmyk devices
    +
    + If someone specifies a list of colorants using something like this
    +
    + -c "<< /SeparationColorNames [ /Cyan /Magenta /Yellow /Black /Violet /Orange]
    + /SeparationOrder [ /Cyan /Magenta /Yellow /Black /Violet /Orange]>> setpagedevice"
    +
    + on the command line, it would be nice if they also had the option to
    + keep the colorants to only this set for the tiffsep and psdcmyk devices.
    +
    + Currently, the list of colorants above would be included as well as any that
    + are encountered in the document (up to a max of 64). In some cases, this
    + may be the desired outcome. In other cases, the user may like to keep the colorants
    + to only those set by SeparationColorNames. Toward that end, this commits adds
    + a -dLockColorants=true/false option for the tiffsep and psdcmyk devices to
    + ensure that the devices do not add on additional colorants as they are
    + encountered in the document.
    +
    +gs/devices/gdevpsd.c
    +gs/devices/gdevtsep.c
    +

    +

    +
    +

    2015-02-20 09:51:50 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +5135b9cd1a26332af64ff3a770103d8d8ad001a0 +

    +

    + Bug 695842: cope with no pread/pwrite available
    +
    + Older Unix and Linux systems for example.
    +
    + Without pread/pwrite we also disable multithreading support.
    +
    + No cluster differences
    +
    +config.mak.in
    +configure.ac
    +gs/Makefile.in
    +gs/base/gp_unifs.c
    +gs/configure.ac
    +

    +

    +
    +

    2015-02-20 11:32:34 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +93ceb24e53ac62b5d6ac338dd8983e2e2a15eaad +

    +

    + Cope with systems with inttypes.h that doesn't define PRI..
    +
    + The PRI... macros for printf formatting aren't always available, so cope better with that.
    +
    + Solaris, for example.
    +
    + No cluster differences
    +
    +gs/base/stdint_.h
    +

    +

    +
    +

    2015-02-20 11:30:26 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +5c7b12b0bfd990329b6ecd009afbfc4f037e8b48 +

    +

    + Cope with systems without strnlen.
    +
    + We'll use strnlen in preference, but replace it with strlen if strnlen isn't available.
    +
    + An example would be Sun cc on Solaris.
    +
    + No cluster differences
    +
    +configure.ac
    +gs/configure.ac
    +

    +

    +
    +

    2015-02-18 15:57:29 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +1e7626e4a9db58f9e5a531c04233bc8b04c52b1f +

    +

    + Bug 695836: add flag for MINGW binary file opening
    +
    + MINGW, being a unix-like API on Windows, using the file handling gp_unifn.c,
    + but unlike "real" Unix systems, requires an extra flag for opening binary
    + files.
    +
    + Add that conditional on being built for MINGW
    +
    + No cluster differences.
    +
    +gs/base/gp_unifn.c
    +

    +

    +
    +

    2015-02-16 10:13:58 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +f27d8957a6afde54c0105fe6599b175b7ec46540 +

    +

    + Increase the linewidth used in idiom recognition of artificial bold text
    +
    + Bug #695835 "Artificially emboldened fonts not showing up as bold in output PDF"
    +
    + I believe this to be an Acrobat display bug, different versions of Acrobat
    + display the result differently, modifying the viewer preferences alters the
    + boldness significantly, and opening another file also alters the displayed
    + boldness.
    +
    + However, I've opted to increase the linewidth we are using slightly. This
    + results in a few single pixel differences in our output. At 600 dpi the
    + test file is slightly bolder, about 1 pixel worth.
    +
    + Comparison against the PostScript output is slightly complicated, because
    + the 'fill and stroke' results in slightly smoother output than the 'draw
    + the glyph 4 times' approach. However, there is little significant difference
    + as far as I can tell.
    +
    +gs/Resource/IdiomSet/Pscript5Idiom
    +

    +

    +
    +

    2015-02-12 17:09:40 -0700 + +
    Henry Stiles <henry.stiles@artifex.com>
    +7b3af6d5075a23cd6b5ef199e7680be8ab1045a6 +

    +

    + Fixes bug #695833 to correctly select the Line Printer font instead of
    + Courier.
    +
    + We need to have a LinePrinter font entry in the font table for each
    + symbol set supported by LinePrinter. We were missing an entry for the
    + PS text (10J) symbol set.
    +
    +pl/plftable.h
    +

    +

    +
    +

    2015-02-12 13:24:58 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +4264a0716724dbd7fd8e35a53572e262658d5979 +

    +

    + Fix error recovery after invalid type 1c (CFF) font
    +
    + Bug #695819 "Ghostscript cannot process font stream"
    +
    + The PDF file (which purports to have been produced by an earlier version
    + of Ghostscript) contains a CFF font which has en empty names index.
    +
    + Ghostscript, not unreasonably, treats this as being 'the first byte of the
    + name is 0x00' which indicates a font which has been deleted from the
    + FontSet. This means that the embedded FontSet contains no fonts.
    +
    + Since there are on fonts, we obviously can't use the font stream, and so
    + we enter an error recovery process. This exposes a problem specific to
    + this type of font, failing in this fashion, which left the operand stack
    + in a condition where we were unable to recover from the error.
    +
    + This commit detects the error condition at an earlier stage and prevents
    + the change to the operand stack, which allows the missing font to be
    + substituted, and the file runs to completion.
    +
    + No differences expected.
    +
    +gs/Resource/Init/pdf_font.ps
    +

    +

    +
    +

    2015-02-10 10:30:53 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +40e783f0274ede8a5a15caf878bd18cad1bfa690 +

    +

    + Fix for crash issue in -dUseFastColor
    +
    + The noncm link was storing the target device color mapping procs
    + and using those to map the colors. The problem is that some devices
    + (for example tiffsep) rely upon special device structures to
    + do the mapping. When we had a forwarding device like the overprint
    + device in front of the target, we were calling the target mapping
    + procs where we should be calling the overprint device mapping procs.
    + This commit fixes the issue.
    +
    +gs/base/gsicc_nocm.c
    +

    +

    +
    +

    2015-02-09 11:04:27 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +14ea68e33fa129addf3860e3bf760060aa100ce3 +

    +

    + Fixes for named color replacement.
    +
    + The sample code for named color replacement had several issues
    + that this commits fixes.
    +
    + 1) The memory allocations were not being done in non-gc memory.
    + 2) There needed to be a release method to free the allocations
    + when we are done with the named color profile structure.
    + Since this is a "custom" profile, the release procedure for
    + a profile was added as a member variable to the profile structure.
    + 3) The decision to use the named color profile was moved earlier
    + in the ghostscript color remapping logic. The ensures we
    + have better control and avoid unwanted multiple remaps.
    +
    + Once the color is assigned values by the call to
    + gsicc_transform_named_color in gx_remap_named_color, note
    + that in gx_remap_concrete_devicen the transfer functions are applied.
    + Also note that in gx_remap_concrete_devicen we will end up doing
    + a possible ICC mapping of just the CMYK values from source CMYK to
    + destination CMYK via the call to devicen_icc_cmyk. The reason for
    + this is explained by the large comment in that part of the code.
    + If this remap is not desired, for example if gx_remap_named_color
    + assigned the CMYK values in the destination space already, then
    + this mapping should be disabled. The decision to enable or disable
    + is a design/customization decision of which the developer should be aware.
    +
    +gs/base/gscdevn.c
    +gs/base/gscms.h
    +gs/base/gscsepr.c
    +gs/base/gsicc_cache.c
    +gs/base/gsicc_manage.c
    +gs/base/gxcmap.c
    +gs/base/gxcspace.h
    +

    +

    +
    +

    2015-02-05 17:21:51 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +17131c7a7fdf9d8537c4715e538c49b29c8945a8 +

    +

    + Improve high level devices handling of Forms
    +
    + Bug #695805 "PostScript can defeat the code to spot PostScript forms being run multiple times "
    +
    + High level devices (eg pdfwrite) already check Forms to see if they are
    + duplicates, and if so use the initial definition. However, this does not
    + improve performance, since the Form PaintProc still needs to be executed
    + for each instance of the Form.
    +
    + This commit adds two new spec_op enums, and uses them to improve performance
    + as well, but *only* for high level devices.
    +
    + After running a PaintProc, the PostScript .execform1 procedure now sends a
    + spec_op to the device requesting an integer ID to store in the Form. If the
    + device does not do its own form caching it will return -1, in which case
    + the PostScript will not store the value.
    +
    + Each time a Form is executed, the PostScript code will look to see if we
    + have a non-null value stored for the Implementation key in the Form dictioanry.
    + If so, then we assume its a dictionary (ideally we should check, but this is
    + all tightly coupled code), pull the /FormID from it, and then send another
    + (different) spec_op to the device. On receipt of this the device simply
    + reuses its stored Form.
    +
    + This absolves us from running the PaintProc again, which on some files can
    + have significant performance benefits. It also means that even Forms which
    + execute pdfmarks (as the original file does) will be recognised as the same
    + form, which the duplicate removal code cannot achieve.
    +
    + The customer's test file runs in ~16 seconds now,producing a 4.3 Mb output
    + file, previously this produced an 81 Mb file and took around 20 minutes.
    +
    +gs/Resource/Init/gs_lev2.ps
    +gs/base/gsform1.h
    +gs/base/gxdevsop.h
    +gs/devices/vector/gdevpdfb.h
    +gs/devices/vector/gdevpdfi.c
    +gs/devices/vector/gdevpdfx.h
    +gs/psi/zform.c
    +

    +

    +
    +

    2015-01-23 09:48:50 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +be26bcf588c1dff9f8a867f764bb46b0d6389081 +

    +

    + Update URW fonts to Jan 2015 release.
    +
    + The families NimbusMono, NimbusRoman and NimbusSans have been augmented with
    + production quality Greek and Cyrillic glyphs. These correspond to our
    + substitutes for the PDF base 14 fonts
    +
    + Lots of minor pixel level cluster differences, and
    + sumatra/664_-_accented_characters_missing.PDF
    +
    + is progression with previously missing accented glyphs now printing
    +
    +gs/Resource/Font/BookmanURW-DemBol
    +gs/Resource/Font/BookmanURW-DemBolIta
    +gs/Resource/Font/BookmanURW-Lig
    +gs/Resource/Font/BookmanURW-LigIta
    +gs/Resource/Font/CenturySchL-Bold
    +gs/Resource/Font/CenturySchL-BoldItal
    +gs/Resource/Font/CenturySchL-Ital
    +gs/Resource/Font/CenturySchL-Roma
    +gs/Resource/Font/CenturySchURW-Bol
    +gs/Resource/Font/CenturySchURW-BolIta
    +gs/Resource/Font/CenturySchURW-Ita
    +gs/Resource/Font/CenturySchURW-Rom
    +gs/Resource/Font/ChanceryURW-MedIta
    +gs/Resource/Font/NimbusMon-Bol
    +gs/Resource/Font/NimbusMon-BolObl
    +gs/Resource/Font/NimbusMon-Obl
    +gs/Resource/Font/NimbusMon-Reg
    +gs/Resource/Font/NimbusMonL-Bold
    +gs/Resource/Font/NimbusMonL-BoldObli
    +gs/Resource/Font/NimbusMonL-Regu
    +gs/Resource/Font/NimbusMonL-ReguObli
    +gs/Resource/Font/NimbusRom-Ita
    +gs/Resource/Font/NimbusRom-Med
    +gs/Resource/Font/NimbusRom-MedIta
    +gs/Resource/Font/NimbusRom-Reg
    +gs/Resource/Font/NimbusRomNo9L-Medi
    +gs/Resource/Font/NimbusRomNo9L-MediItal
    +gs/Resource/Font/NimbusRomNo9L-Regu
    +gs/Resource/Font/NimbusRomNo9L-ReguItal
    +gs/Resource/Font/NimbusSan-Bol
    +gs/Resource/Font/NimbusSan-BolIta
    +gs/Resource/Font/NimbusSan-Ita
    +gs/Resource/Font/NimbusSan-Reg
    +gs/Resource/Font/NimbusSanL-Bold
    +gs/Resource/Font/NimbusSanL-BoldCond
    +gs/Resource/Font/NimbusSanL-BoldCondItal
    +gs/Resource/Font/NimbusSanL-BoldItal
    +gs/Resource/Font/NimbusSanL-Regu
    +gs/Resource/Font/NimbusSanL-ReguCond
    +gs/Resource/Font/NimbusSanL-ReguCondItal
    +gs/Resource/Font/NimbusSanL-ReguItal
    +gs/Resource/Font/NimbusSanNar-Bol
    +gs/Resource/Font/NimbusSanNar-BolIta
    +gs/Resource/Font/NimbusSanNar-Ita
    +gs/Resource/Font/NimbusSanNar-Reg
    +gs/Resource/Font/PalladioURW-Bol
    +gs/Resource/Font/PalladioURW-BolIta
    +gs/Resource/Font/PalladioURW-Ita
    +gs/Resource/Font/PalladioURW-Rom
    +gs/Resource/Font/URWBookmanL-DemiBold
    +gs/Resource/Font/URWBookmanL-DemiBoldItal
    +gs/Resource/Font/URWBookmanL-Ligh
    +gs/Resource/Font/URWBookmanL-LighItal
    +gs/Resource/Font/URWChanceryL-MediItal
    +gs/Resource/Font/URWGothic-Boo
    +gs/Resource/Font/URWGothic-BooObl
    +gs/Resource/Font/URWGothic-Dem
    +gs/Resource/Font/URWGothic-DemObl
    +gs/Resource/Font/URWGothicL-Book
    +gs/Resource/Font/URWGothicL-BookObli
    +gs/Resource/Font/URWGothicL-Demi
    +gs/Resource/Font/URWGothicL-DemiObli
    +gs/Resource/Font/URWPalladioL-Bold
    +gs/Resource/Font/URWPalladioL-BoldItal
    +gs/Resource/Font/URWPalladioL-Ital
    +gs/Resource/Font/URWPalladioL-Roma
    +gs/Resource/Init/Fontmap.GS
    +gs/psi/psromfs.mak
    +

    +

    +
    +

    2015-02-03 16:05:55 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +af9d47bf4ed5ebe42c1b2592a607bd891cd1dd92 +

    +

    + Bug 695787: skip WOFF fonts in font scanning
    +
    + As Ghostscript doesn't support WOFF fonts, skip them during the building of the
    + "native" fonts table - this prevents the pseudo-parsing from consuming large
    + amounts of memory and processor time pointlessly.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_fonts.ps
    +gs/Resource/Init/gs_ttf.ps
    +

    +

    +
    +

    2015-02-02 13:31:32 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +8803294d1768a74a2ca3a1acc97f7def74752791 +

    +

    + commit 23aab341f57c20974e4dfcb68abb13ce08c5e5a8 actually committed the wrong
    + code by accident, ooops!
    +
    + This is the corrected test for a type 2 font being used. The comments in
    + the previous commit still apply, this isn't a 'fix' just a work-around to
    + avoid a crash.
    +
    +gs/devices/vector/gdevpdtc.c
    +

    +

    +
    +

    2015-02-02 11:52:49 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +23aab341f57c20974e4dfcb68abb13ce08c5e5a8 +

    +

    + Noticed by chrisl while working on moving our installed base fonts to
    + CFF, if a type 0 font has an FDepVector which uses both a type 3 font, and
    + a base font (which is CFF) then we fail to process the condition where
    + we use one glyph from the type 3 and follow it with a glyph from the
    + type 2.
    +
    + The problem seems to be that we get confused, we detect the error with the
    + CFF font, but instead of capturing it as a bitmap (fallback case) we end
    + up dealing with it as if we had started capturing a type 3 charproc. Of
    + course we didn't start capturing it that way, so that causes chaos.
    +
    + In the long run this will need to be fixed properly (ie figure out why we
    + are ending the glyph with the current font being type 3, when it should be
    + type 2), but for now this prevents the GPF. When/if we do move to CFF fonts
    + for our base fonts, this will need to be revisited.
    +
    +gs/devices/vector/gdevpdtc.c
    +

    +

    +
    +

    2015-01-29 17:33:48 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +3af4b00ad39d7c3672f3967512d81b1f8ecf6bac +

    +

    + Fix some (probably not all) dependencies when the build has minimal devices.
    +
    + The lib.mak was missing some dependencies, and pdf_main.ps depended on the
    + .pdfputparams which is only defined if the pdfwrite device is built in.
    + Tested with a build from: autogen.sh --with-drivers=ppmraw,pgmraw,pbmraw
    + which only has bbox and those devices.
    +
    +gs/Resource/Init/pdf_main.ps
    +gs/base/lib.mak
    +

    +

    +
    +

    2015-01-30 10:43:31 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +47178da0d32b82a40b75f9aa9684210ff4dc1d24 +

    +

    + Remove the reference to -dLanguageLevel=1 in the man page.
    +
    + Also remove the incorrect nonsense about language level 3 and so on, which
    + has never been correct, and some general tidying up. Also point out that,
    + despite the name of the scripts, PDF is an equally acceptable input.
    +
    + Update the versions and dates and so on to reflect the edit.
    +
    +gs/man/ps2ps.1
    +

    +

    +
    +

    2015-01-28 08:34:08 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +704fcded8bb82dcbfad512ee8eec80e1d5655ded +

    +

    + Fix miscalculation of pattern size when 'has_tags' is true.
    +
    + This fix was developed for customer 532 who uses tags. The 'has_tags'
    + passed in to gx_pattern_size_estimate is a boolean, so we should adjust
    + size for the extra tag byte, not the value (which doesn't have to be 1).
    +
    +gs/base/gxpcmap.c
    +

    +

    +
    +

    2015-01-23 17:32:36 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +8c015519af0f14ada59399a96d0f4ffc3c9e5ccd +

    +

    + Fix some debug statements that used NULL mem pointers.
    +
    +gs/base/gxipixel.c
    +

    +

    +
    +

    2015-01-22 08:35:39 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +c8cf49712712f288d5b956f36ecb285a39a2b134 +

    +

    + Fix emprintf problem with previous commit
    +
    +gs/devices/gdevplib.c
    +

    +

    +
    +

    2015-01-21 13:41:35 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +cad213c2d188e7461322ee6f810684bea5358235 +

    +

    + Fix BandHeight and segfault problems with plib device.
    +
    + The BandHeight will be 0 initially to convey "set it automatically
    + if it isn't set on the command line. Only check once it has been
    + set.
    +
    + Once past this a segfault was occurring because the mdev->line_ptrs
    + never was set. This seems to have been broken by commit c4357bef
    + caused by passing "mlines" into the device's setup_buf_device
    + rather than NULL in the call from clist_rasterize_lines (which
    + did fix another segfault).
    +
    + Since regression doesn't test this device, I don't expect any
    + differences.
    +
    +gs/devices/gdevplib.c
    +

    +

    +
    +

    2015-01-20 16:01:07 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +f38db629f962a599693e13b572eef9ee64412800 +

    +

    + Add the plib device family to build on Unix.
    +
    + No cluster differences.
    +
    +gs/configure.ac
    +gs/devices/gdevplib.c
    +

    +

    +
    +

    2015-01-19 11:19:08 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +4d9083d4f20d53eda3ae129cd35d1947144db743 +

    +

    + Commit the automake/autoconf/libtool derived files
    +
    + For ijs the build is not expected to change, and if it does, it will be very
    + infrequent. So keeping the derived files in source control simplifies things.
    +
    + No cluster differences
    +
    +gs/ijs/Makefile.in
    +gs/ijs/compile
    +gs/ijs/config.guess
    +gs/ijs/config.sub
    +gs/ijs/configure
    +gs/ijs/install-sh
    +gs/ijs/libtool
    +gs/ijs/ltmain.sh
    +gs/ijs/missing
    +

    +

    +
    +

    2015-01-19 11:15:02 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +c09cc83e53c9a1269e0c64fea94d9ceeafa9a494 +

    +

    + Remove automake version specific tests/use
    +
    + The script does unpleasant things which can cause us to attempt to use a
    + specific version of automake, which should not really be needed these days.
    +
    + So we now just check that the automake version is greater than or equal to the
    + version we require.
    +
    + The old method can still be accessed by invoking autogen.sh thus:
    + USE_OLD=yes ./autogen.sh
    +
    + Also, reset the the minimum automake version to 1.6.
    +
    + No cluster differences.
    +
    +gs/ijs/autogen.sh
    +gs/ijs/configure.ac
    +

    +

    +
    +

    2015-01-21 22:34:40 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +b2d6985a0fdc20c9775e3caa2f90af039cc5e2f5 +

    +

    + Remove spurious debug code.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_type1.ps
    +

    +

    +
    +

    2015-01-21 22:08:39 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +da65b995be88cfcbef7c99dbae1d15f5eb14122d +

    +

    + Bug 695794: fix invalidaccess with some Type 1 fonts
    +
    + Use superexec to execute the .growput to enter the flag into the font dictionary
    + that indicates we've already applied the glyph mapping augmentation. Handles
    + the case that the font dictionary already readonly.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_type1.ps
    +

    +

    +
    +

    2015-01-20 09:22:31 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +38501651d81ae41f6505e7f457f46a975648c63a +

    +

    + Fix C stack overflow with psdcmykog.
    +
    + The commit fe0b8fcf increased the gp_filename_sizeof to 4096, and
    + this increased the stack usage for cmykog_process_arg_t by enough
    + to cause stack overflow on Windows.
    +
    +gs/devices/gdevcmykog.c
    +

    +

    +
    +

    2015-01-20 09:00:31 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +a8a479e6104a509de49b0d10d8aae6cc4cd4809a +

    +

    + Clean up gx_pattern_size_estimate to clamp at max_int
    +
    + When the pattern had transparency, we had conditional assignment to
    + limit at (max_int * ~0xFFFF), but not otherwise. No known defect.
    +
    +gs/base/gxpcmap.c
    +

    +

    +
    +

    2015-01-19 09:15:47 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +2cc3a1779d832fc84b36f0ebb20336bbdad17352 +

    +

    + Bug 695774: Fallback for glyph with degenerate bbox
    +
    + If a glyph has only one very narrow feature, the bbox can end up with either
    + the width or height of the bbox being 0, in which case no raster memory is
    + allocated and no attempt is made to render the glyph. This is less than ideal
    + when the drop-out compensation in the rendering code would actually result in
    + the glyph being rendered.
    +
    + Normally the coordinates for the bbox are rounded (which is technically
    + correct). Now, if that results in the width or height being 0, we'll
    + then try explicitly rounding up/down, providing a sort of naive whole glyph
    + drop-out compensation.
    +
    + The same change has been included upstream and will be in the next scheduled
    + Freetype release:
    + http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=942aa5ff
    +
    + This causes a large number of low resolution differences on cluster, all
    + progressions where glyphs like dash ('-'), underscore ('_') and vertical
    + bar ('|') were dropping out entirely, and are now printing.
    +
    +gs/freetype/src/raster/ftrend1.c
    +

    +

    +
    +

    2015-01-17 10:58:33 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +2c14b47453cc4c4bc6d6a97af073ae0145f107dd +

    +

    + txtwrite - properly terminate 'char' tags
    +
    + Bug #695788 "txtwrite textoutput=0 XML file"
    +
    + The 'char' tag was being terminated with a '>' instead of a '/>'.
    +
    + Reported, and the offending code isolated, by Petko Lukov, who offered to
    + create a patch, but the change is so trivial I simply went ahead with it.
    +
    + No differences expected, cluster doesn't test txtwrite.
    +
    +gs/devices/vector/gdevtxtw.c
    +

    +

    +
    +

    2015-01-17 09:01:00 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +8a72aff8e6f1009cce8cf0ed535baf3d6c362fb4 +

    +

    + Slience a (benign) compiler warning about missing return
    +
    + No cluster differences.
    +
    +gs/psi/dxmain.c
    +

    +

    +
    +

    2015-01-16 10:27:51 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +7882030e49b1309c6d8ccc96b799c8eddb0cc10d +

    +

    + Improve error message when required OutputFile not specified.
    +
    + Bug 695767. Also improve the formatting when there was a filename
    + by adding ' around the filename,
    +
    +gs/base/gsdevice.c
    +

    +

    +
    +

    2015-01-16 15:26:56 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +66eafeeec0288a96dde38ecb406961c869ce06e4 +

    +

    + Move bbox.dev to be immediately after the x11 devs
    +
    + So that in pcl and xps on Unix, if we aren't including the x11 devices, we'll
    + default to bbox.
    +
    + No cluster differences
    +
    +main/pcl6_gcc.mak
    +

    +

    +
    +

    2015-01-16 15:18:23 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +d1ef180b6cad83dde54843e028accb22222e6f39 +

    +

    + Explicitly check for both libcups and libcupsimage
    +
    + No cluster differences.
    +
    +gs/configure.ac
    +

    +

    +
    +

    2015-01-16 09:40:27 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +6e1e22c7643ee2e0b28a702a3ed9fc5b8f3a96b0 +

    +

    + NTFS - fix some memory problems Bug 695752
    +
    + Bug #695752 "gp_enumerate_files_close leaks some memory"
    +
    + This appears to be a simple oversight in the original commit, a piece of
    + allocated memory was not freed, the 'free' call was commented out.
    +
    + Noticed in passing; if the allocation of the file pattern fails, we were not
    + freeing the file or directory enumerators, leading to a memory leak as
    + well.
    +
    + No differences expected (cluster does not test Windows file system)
    +
    +gs/base/gp_ntfs.c
    +

    +

    +
    +

    2015-01-15 16:16:59 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +d9168fef51ff878e58834b38d620f4afc9fa66c2 +

    +

    + pdfwrite - fix compiler warning
    +
    + The compiler complained that pres could be NULL. In fact it should never be,
    + it *should* be the same as pres1, but we ought to be dereferencing pres1 here
    + anyway, not pres, so we make that change, just in case.
    +
    +gs/devices/vector/gdevpdfu.c
    +

    +

    +
    +

    2015-01-14 10:51:21 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +65b46878adabda061b67670dfd81899acca2cea1 +

    +

    + Fix warnings from f02d0a5
    +
    + For some reason no warnings came up during the cluster push. Thanks
    + to those who fixed a couple. Hopefully this fixes the rest.
    +
    +gs/base/gximdecode.c
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2015-01-13 12:31:40 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +48eb76b5b774772e39b0a163a9a3c1d06eafbdd4 +

    +

    + Allow Orientation pagedevice parameter to control the FitPage rotation
    +
    + With this change, Orientation is no longer ignored except for devices
    + that support pdfmark where it must be 0 (e.g., pdfwrite). Now with
    + -dFitPage, -c "<< /Orientation 0 >> setpagedevice" will use either 0
    + or 90 degree rotation, while -c "<< /Orientation 2 >> setpagedevice"
    + will rotate either 180 degrees or 270 degrees.
    +
    + Note that Orientation 2 will invert a page (rotate by 180) if 270
    + degree rotation is not needed for the best fit.
    +
    + Orientation will also control which way is "up" without -dFitPage,
    + but may result in clipping.
    +
    +gs/Resource/Init/pdf_main.ps
    +

    +

    +
    +

    2015-01-14 15:01:24 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +6213ab0b0c3229f1744e404e0d673d36f62bd6cd +

    +

    + Treat a couple of compiler warnings as errors.
    +
    + Treat declaration-after-statement and return-type warnings as errors when
    + building with gcc.
    +
    + No cluster differences.
    +
    +configure.ac
    +gs/configure.ac
    +

    +

    +
    +

    2015-01-14 15:01:02 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +d18f698b8e7176653d096b2e554eeff713be4182 +

    +

    + Fix a missing return type for a function.
    +
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2015-01-14 13:21:54 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +d7bffde12e3b9856e271af3b50254fd93d98b3d3 +

    +

    + Fix 'warning: ISO C90 forbids mixed declarations and code'
    +
    + Commit f02d0a5 added code which declares variables in the body of a
    + function. This is not permitted in C90 (or C89), is contrary to the coding
    + style for Ghostscript and fails to compile Ghostscript under Visual Studio.
    +
    + In addition 'zip_close_all_archive_files()' did not have a return value on
    + success which led to random return values and a number of regression files
    + failing.
    +
    + Moved the variables to the start of the functions (removing const as required)
    + and added a specific return code on success.
    +
    + Now compiles under Windows, does not throw as many warnings on Linux and
    + does not cause spurious regression failures. There are still many warnings
    + produced by gcc, EG:
    +
    + ./devices/vector/gdevxps.c:1771:9: warning: unused variable 'count' [-Wunused-variable]
    + ./devices/vector/gdevxps.c:1770:9: warning: unused variable 'code' [-Wunused-variable]
    +
    + The author of the commit should address those separately.
    +
    +gs/base/gximdecode.c
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2014-12-15 12:15:14 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +f02d0a5067a0970aa5e9c6b4f9cd08956485447e +

    +

    + Add support for encoded source images with xpswrite device. Fix for bug 695698
    +
    + Also fixes 695754 and 695680.
    +
    + The xps format does not allow for the image data encodings that PDF source files can
    + create. Hence we have to decode the data prior to writing out to our TIFF file.
    + The clist image code had static methods for doing the decode during color monitoring. These
    + methods were re-factored to work on a new structure that are now member variables for
    + the xpswrite image enum structure and the clist image enum structure. The methods and
    + the structure definition were placed in their own file gximdecode.c/h
    +
    + Also this adds support for images in indexed, CIELAB, DeviceN and separation color spaces.
    +
    + Finally, images are stored in a temp file during creation and then copied into the zip
    + archived, releasing the image temp file. ICC profiles are written directly from memory
    + to the zip file. This avoids having lots of temp files around for each image that is
    + created. A similar process needs to be done for other parts of the xps document. With the
    + current architecture of having a temp file open for every "file" in the package we would
    + not be able to create something larger than 512 pages on windows due to the limit on
    + the number of open files.
    +
    +gs/base/gxclimag.c
    +gs/base/gximdecode.c
    +gs/base/gximdecode.h
    +gs/base/lib.mak
    +gs/devices/devs.mak
    +gs/devices/vector/gdevxps.c
    +gs/ghostscript.vcproj
    +

    +

    +
    +

    2015-01-13 11:19:53 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +3e7115492c378ffa324c0a083244a785a6a61f82 +

    +

    + pdfwrite - optimise pdf_foget_resource with CharProc resources
    +
    + Bug #695778 "Long delay converting .ps file to .pdf file"
    +
    + The specimen file uses glyphshow to draw a huge number of 'characters',
    + these turn out to be bitmaps which, taken together create the page. Each
    + page defines and at the end specifically undefines a type 3 font and the
    + glyphs are stored in this font.
    +
    + Since PDF has no equivalent to glypshow we store the glyphs in multiple
    + type 3 fonts, resulting in around 10 times as many fonts. The creation and
    + storage of the fonts and glyphs is quite slow.
    +
    + However, we start off unaware that this is a glyphshow operation, so we
    + start by attempting to capture the type 3 CharProc. Its not until we get
    + to the actual capture of the bitmap that we discover we cannot handle the
    + glyph like this. That means we have to discard the CharProc we had begun,
    + and remove it from the list of stored resources.
    +
    + Now resources are stored in 'chains' which is a simple way of limiting the
    + number of searches. We hash on the resource ID and pick the chain based on
    + that.
    +
    + The first problem was that pdf_forget_resource was not using the hash, it
    + was checking every entry in every chain, in effect checking all the entries
    + of a given resource type. Even if it found a match, it continued checking
    + the remaining chains! As the number of stored CharProcs (we still store
    + the glyphs as CharProcs, but in a different font) increases, the time taken
    + to exhaustively check all the glyphs increases.
    +
    + Here we fix that by starting from the correct chain based on the hash of
    + the id (if its 0 we start at the first chain, so if we haven't allocated an
    + ID we check all the entries). When we find a match we return immediately
    + instead of merely exiting the *inner* loop.
    +
    + The second problem is that we don't allocate an ID for CharProcs initially.
    + This is fixed by storing the ID which we used temporarily as an argument
    + to pdf_enter_substream.
    +
    + Taken together these speed up this file by a factor of ~8.
    +
    + No differences expected.
    +
    +gs/devices/vector/gdevpdfu.c
    +gs/devices/vector/gdevpdti.c
    +

    +

    +
    +

    2015-01-13 09:28:37 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +7d97b54d767627d1d88ea026c3d3accd11cb670f +

    +

    + Bug 695783: correct cups return of string parameters
    +
    + The cups device was using param_string_from_string() to return string parameters
    + allocated in the device structure in its get_params method. Of the many problems
    + this could cause, it came to light due to the same parameter being sent through
    + put_params thus causing strncpy() to attempt to copy a string to itself, causing
    + a segfault.
    +
    + Changing to the correct param_string_from_transient_string() way to return such
    + strings resolves the problem.
    +
    + No cluster differences.
    +
    +gs/cups/gdevcups.c
    +

    +

    +
    +

    2015-01-12 11:10:04 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +f29420b18ba7abedb649d0352fb1b16adae1d4a5 +

    +

    + Bug 695743: LCMS: Fix a macro clash on SNONE
    +
    + Partial patch pulled from Marti's github repo:
    + https://github.com/mm2/Little-CMS/commit/5bc4f52f
    +
    + (only the macro clash fix).
    +
    + No cluster differences.
    +
    +gs/lcms2/src/cmscgats.c
    +

    +

    +
    +

    2015-01-12 09:56:01 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +84d749a65e509c31805a8f99d1aad78c013f13e6 +

    +

    + Bug 695764: allow compiler to be overridden
    +
    + Allow the C compiler to set by the configure script.
    +
    + No cluster differences.
    +
    +common/gccdefs.mak
    +config.mak.in
    +configure.ac
    +

    +

    +
    +

    2015-01-12 08:44:46 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +e17fcc029c96949982b8f01c6e649b87dceab1be +

    +

    + Bug 695772: account for clist icc_table being shared
    +
    + When multi-thread rendering is used (but not background printing), the icc_table
    + is shared between all the render thread devices and the 'parent' device in the
    + interpreter thread - but it is not reference counted. We rely on the fact that
    + the device in the interpreter thread will exist before, and persist past the
    + death of the rendering threads.
    +
    + So, when dismantling a rendering thread device, null the icc_table entry so
    + it doesn't get erroneously freed.
    +
    + No cluster differences.
    +
    +gs/base/gxclthrd.c
    +

    +

    +
    +

    2015-01-09 11:25:01 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +30abb3d5d5fbf9cf67d4ff691e898c8b29e39a56 +

    +

    + Add automake option to make dist "self contained"
    +
    + The automake default is to symlink to a few scripts ('compile', 'missing' etc)
    + in the current system's automake install. That results in a configuration
    + reliant on automake being installed, and the same version, for a build.
    +
    + Add the '--copy' automake option so the script files are copied rather than
    + linked, so we get a self contained configure/make/install setup.
    +
    + No cluster differences.
    +
    +gs/ijs/autogen.sh
    +

    +

    +
    +

    2015-01-09 11:23:34 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +9961f351a3c71949da49eb75b65560028fb8272e +

    +

    + Bug 695148: remove spec PDF and PS from clean list
    +
    + As the IJS spec hasn't changed in ages, we'll just keep the PDF and PS files
    + of the spec in git, so no need to remove them with a "make clean".
    +
    + No cluster differences.
    +
    +gs/ijs/Makefile.am
    +

    +

    +
    +

    2015-01-07 07:57:36 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +d78594c1982682a06c9fb8fc7f2ea746938a93cc +

    +

    + Fix problem in xps_zip_alloc_items caused by previous commit: 188c7b0
    +
    + When the allocation succeeded, nothing was returned.
    +
    +xps/xpszip.c
    +

    +

    +
    +

    2015-01-03 16:00:16 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +188c7b05a5c232ba43e6b3172023498f7aa72c70 +

    +

    + Fix segfault with ppmraw -r300 from fts_06_0626.pdf.xpse when allocation fails
    +
    + The gxps had numerous places where allocation failures were ignored,
    + writing to RAM at offsets from 0 (NULL). This no longer fails, but the
    + fixes are not yet complete. Running a memento build with the parameters:
    + MEMENTO_SQUEEZEAT=1 gxps -o /dev/null -sDEVICE=ppmraw in.xps
    +
    +xps/xpsdoc.c
    +xps/xpsfont.c
    +xps/xpsgradient.c
    +xps/xpshash.c
    +xps/xpsimage.c
    +xps/xpsjpeg.c
    +xps/xpsjxr.c
    +xps/xpspath.c
    +xps/xpspng.c
    +xps/xpsresource.c
    +xps/xpstiff.c
    +xps/xpsxml.c
    +xps/xpszip.c
    +

    +

    +
    +

    2015-01-02 22:48:56 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +f553eec30efa8cbefdc3c3635e090abb915a1a9d +

    +

    + Fix bug 695373: xpswrite leaves temp files on Windows.
    +
    + There is a recent addidtion of a gp function to open a temp file that
    + will be deleted upon close: 'gp_open_scratch_file_rm'. The method of
    + 'unlink' after open does not work on Windows. This function is platform
    + specific and works on all supported platforms even if the process crashes.
    +
    + Also get rid of confusing error messages. PageSpotColors is now only
    + given to devices that support it (pdf_main.ps) and NumRenderingThreads
    + and BGPrint are ignored for vector devices (gdevvec.c).
    +
    +gs/Resource/Init/pdf_main.ps
    +gs/base/gdevvec.c
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2014-11-24 11:13:33 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +64f9cafcfc594ddaa1d1981a16f45fce25e4fb18 +

    +

    + Fix BGPrint=true SEGV and slowdown due to commit 9108db2
    +
    + Bug 695669:
    + The BGPrint problem was due to using the fname afer freeing it but the
    + 'fake_path_to_file' logic needed the fname in order to find the real
    + file to close.
    +
    + Tail of commit 6ecc8536:
    + Also the original cfname and bfname (ocfname and obfname) were copied
    + using strnlen so the trailing NULL wasn't copied resulting in UMR being
    + used for the close/delete.
    +
    + Tail of bug 693121:
    + The performance of unbuffered I/O is slow, seen on many files, but
    + a good example is: tests/df/Bug6901014_Fourth_crash_signature_testcase.pdf
    + with params: -sDEVICE=pbmraw -o /dev/null -r300 -dMaxBitmap=0
    +
    + The fix for this is to add a read cache. This caching method in intended
    + to also be used by the memory based clist logic (TBI).
    +
    + With the cache, the performance on the above goes from 40 seconds down to
    + 4.6 seconds, and with -dBGPrint=true reduces to 3.8 seconds (which crashes
    + prior to this fix).
    +
    +gs/base/gdevprn.c
    +gs/base/gxclfile.c
    +gs/base/gxclist.c
    +

    +

    +
    +

    2014-12-30 09:18:31 -0700 + +
    Henry Stiles <henry.stiles@artifex.com>
    +7631204934e5d8b0bcdb13d8691370365eb84b2b +

    +

    + Add directory entry configuration support to fix a broken ghostpdl
    + build after a Mac upgrade to Yosemite.
    +
    +configure.ac
    +

    +

    +
    +

    2014-12-23 16:01:05 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +35bb14eaf871b6a7e41e17688bcc41a1fb4da595 +

    +

    + pdfwrite - add 'Launch' Actions
    +
    + Bug #695715 "Launch action link annotations removed after GS processing"
    +
    + Add Launch actions to the PDF interpreter, for both annotations and
    + outlines.
    +
    + No differences expected.
    +
    +gs/Resource/Init/pdf_main.ps
    +

    +

    +
    +

    2014-12-23 13:53:27 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +fde4b9b183a140b8906874d0bf56d258b488d4b9 +

    +

    + pdfwrite - free copied base fonts on exit
    +
    + Bug #695753 "Segfault in gs_purge_font_from_char_caches_forced with -Z@"
    +
    + The problem here is that we free copied fonts when we free the associated
    + FontDescriptor (because until then we need the copied font). However, if
    + we have a 'base 14' font, or other font which is not embedded, we do not
    + create a FontDescriptor, and so never free the font copy we take when the
    + font is used.
    +
    + This later causes a problem because when the garbage collector frees this
    + font copy it is still pointing to a font cache which no longer exists.
    +
    + This commit tests to see if a FontDescriptor is associated with a font when
    + we free the (PDF) font. If it is not then we free the copied font there and
    + then, as well as the ancillary bytes used for the font name etc.
    +
    + No differences expected.
    +
    +gs/devices/vector/gdevpdtf.c
    +

    +

    +
    +

    2014-12-23 13:08:08 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +bd2e9c2c30b0696ca9f929637193aaef38951e6a +

    +

    + follow up to commit dc2c3634aeae6634b130e124b1f0997f17ee3141
    +
    + Separate GoTo and GoToR processing for links as well as Outlines
    +
    +gs/Resource/Init/pdf_main.ps
    +

    +

    +
    +

    2014-12-22 11:29:49 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +01b9c47eefd7f88195e71f877e5ea44f183a0067 +

    +

    + pdfwrite - when writing Names array use better method to find /Last
    +
    + Bug #695704 "GS 9.15 (still) breaks *something* in hyperref-generated pdf BOOKMARKS"
    +
    + The find_last_dict_entry code should have returned the same results as for
    + find_next_dict_entry, but it clearly didn't, resulting in effective
    + truncation of the Names array.
    +
    + Simplified the code here by using find_next_dict_entry in a loop to locate
    + the last entry. This should mean we cannot be out of sync, the code is simpler
    + and easier to follow.
    +
    + No differences expected.
    +
    +gs/devices/vector/gdevpdfo.c
    +

    +

    +
    +

    2014-12-22 10:47:22 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +dc2c3634aeae6634b130e124b1f0997f17ee3141 +

    +

    + pdfwrite - separate GoTo and GoToR processing
    +
    + Because we convert any named destination in a GoTo to a specific internal
    + destination, we cannot handle GoTo and GoToR in the same way. Here we
    + split the two again, and this time add a comment so we don't end up merging
    + them again by mistake.
    +
    + No differences expected.
    +
    +gs/Resource/Init/pdf_main.ps
    +

    +

    +
    +

    2014-12-20 10:57:39 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +2c525aa076d7094fa487621602b8e326c58eeabe +

    +

    + pdfwrite - improve Goto and GoToR handling
    +
    + Bug #695747 "git produces broken pdf from pdfTeX output"
    +
    + The original code for generating pdfmarks from the equivalent annotations
    + in a PDF file did not properly create an Action dictionary, which caused
    + /D and /Dest entries to be removed.
    +
    + Here we handle this more cleanly, and properly create the Action dictionary
    +
    + NB for ps2write this relies upon commit b5a4f24141ab47b5ba2b7b3dff938ba30a8a908a
    + being present, in order to deal with the empty objects produced by ps2write.
    +
    + No differences expected.
    +
    +gs/Resource/Init/pdf_main.ps
    +

    +

    +
    +

    2014-12-20 10:53:28 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +b5a4f24141ab47b5ba2b7b3dff938ba30a8a908a +

    +

    + ps2write - handle empty object definitions
    +
    + object definitions such as:
    +
    + 5 0 obj
    + endobj
    +
    + cause errors. Handle this by checking in /endobj to see if the stack count
    + is 1 (only the object number is present) and if so, do not attempt to
    + define the object.
    +
    +gs/devices/vector/opdfread.h
    +gs/lib/opdfread.ps
    +

    +

    +
    +

    2014-12-19 13:10:03 -0700 + +
    Henry Stiles <henry.stiles@artifex.com>
    +7df6f9570c00c34a3e1d6c74d66186a371208f0e +

    +

    + Integrate Ken Sharp's solution to preserve PCL transparent text in
    + pdfwrite to fix bug #695731.
    +
    + PCL characters are rendered transparently when the current color is
    + white and pattern transparency is on. Usually this is done by simply
    + not printing or rendering the effected text. For high level devices
    + like pdfwrite we try to preserve the original intent of the source
    + document and include the text and transparency setting in the output.
    +
    +pcl/pcl.mak
    +pcl/pctext.c
    +

    +

    +
    +

    2014-12-19 15:31:24 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +9b3669dbcd3d29cd212e9961fcfc7b98780aa408 +

    +

    + Add link to description of "Vienna" naming style
    +
    + After a discussion on IRC: a summary of the "Vienna naming style" is actually
    + later in the document, this just adds a link between the early reference and
    + the fuller summary.
    +
    + No cluster differences.
    +
    +gs/doc/Ps-style.htm
    +

    +

    +
    +

    2014-12-18 17:12:49 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +09def28ae012fc0e1b4f65ea55b19639c7737bc9 +

    +

    + Bug 695750: fix icc link cache leak when freeing clist devices
    +
    + No cluster differences.
    +
    +gs/base/gdevprn.c
    +

    +

    +
    +

    2014-11-24 22:47:15 -0700 + +
    Henry Stiles <henry.stiles@artifex.com>
    +5ddbec6f11792e2fa974c95924a984f876a9a705 +

    +

    + Simplify rectangle output to be vertical and horizontal lines instead
    + of general lines.
    +
    + The vertical and horizontal line commands take 1 argument resulting in
    + more compact XPS and we'd expect it to be faster when rendered.
    +
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2014-12-18 11:35:44 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +8e196062593b295421b869db9d5cd9ab22f7205e +

    +

    + pdfwrite - some changes to text handling for Tr 3
    +
    + Bug #695731 "PCL interpreter doesn't send text to the graphics library if its not visible."
    +
    + Altering the PCL interpreter to set the Text rendering mode to 3 for
    + 'invisible' text demonstrated a few problems in pdfwrite.
    +
    + 1) If the last character drawn was in Tr 3, and we buffer some new text in
    + Tr mode 0, but we are inside a gsave, and the outer state is Tr 0, then when
    + we restore back to the Tr 0 the mode is not emitted for the buffered text. Leaving
    + it as Tr mode 3. To fix this (and potentially other similar graphics state
    + problems) we now call sync_text_state when we reset text, this will
    + potentially flush the text buffer as well.
    +
    + 2) We were not using the text rendering mode from the graphics state when
    + falling back to a type 3 bitmap font, because the character code was out
    + of range (falling back for other reasons *did* preserve it).
    +
    + This commit fixes these two problems.
    +
    + Because of the change to text flushing some text is being drawn 1 pixel different
    + in location, presumably due to rounding differences, I've reviewed these
    + and they look fine to me.
    +
    +gs/devices/vector/gdevpdf.c
    +gs/devices/vector/gdevpdti.c
    +

    +

    +
    +

    2014-12-17 20:48:42 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +06a462093e4145073a61e6ca62aabbb343e39fa1 +

    +

    + Bug 695745: apply resourcestatus hook only once.
    +
    + pdfwrite requires that Type 32 fonts be disabled, and it does it by hooking
    + the resourcestatus operator. The problem is, because we always append
    + to the operator table, if we string a number PS files together from the
    + PScript5.dll, we can end up overflowing the operator table by repeatedly
    + doing the resourcestatus hook.
    +
    + This just puts a boolean into systemdict to note that we're already applied
    + the hook, and there don't do it again.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_pdfwr.ps
    +

    +

    +
    +

    2014-12-15 08:21:18 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +07150250834717499b74c87d00a8dc52599d33ec +

    +

    + pdfwrite - pass imager state through coloured patterns as well
    +
    + commit eef2764 passed the imager state through to the underlying routines
    + for uncolored patterns. This commit extends the same change to include
    + coloured patterns.
    +
    + No differences expected.
    +
    +gs/devices/vector/gdevpdfg.c
    +gs/devices/vector/gdevpdfg.h
    +gs/devices/vector/gdevpdfv.c
    +

    +

    +
    +

    2014-12-13 12:24:11 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +3570b4830e7f54f3a057176bc01db04ec311fe23 +

    +

    + pdfwrite - increase predefined minimum CompatiblityLevel
    +
    + To avoid having to create V2 profiles, increase the minimum value of
    + CompatibilityLevel in the predefined PDFSETTINGS to 1.5
    +
    + No differences expected
    +
    +gs/Resource/Init/gs_pdfwr.ps
    +

    +

    +
    +

    2014-12-13 11:16:08 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +eef2764f3f9ab6dac88ea6720a05693c1d19af43 +

    +

    + pdfwrite porpagate the imager state through the pdfwrite Pattern code.
    +
    + Bug #695733 "Error using pattern under odd conditions"
    +
    + If we set UseCIEColor, so that all colours are converted into CIEBased spaces,
    + *and* we set CompatibilityLevel < 1.5 so that we require to convert ICCBased
    + profiles to V2, and then use a Pattern colour space, pdfwrite throws an
    + error.
    +
    + This is because we were not propagating the image state through the pattern
    + code, and the new colour code requires the imager state in order to generate
    + a V2 ICC profile for inclusion in the PDF file.
    +
    + Here we simply pass the imager state through for use.
    +
    + No differences expected
    +
    +gs/devices/vector/gdevpdfc.c
    +gs/devices/vector/gdevpdfg.c
    +gs/devices/vector/gdevpdfg.h
    +gs/devices/vector/gdevpdfv.c
    +

    +

    +
    +

    2014-12-12 13:09:43 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +e153528e1f5044d2018284fbf2eea45b545232fe +

    +

    + xpswrite device: fix for missing images.
    +
    + Force vector device to do new path as the clip path is the image path.
    + I had a case where the clip path ids were the same but the CTM was changing
    + which resulted in subsequent images coming up missing on the page. i.e. only
    + the first one was shown.
    +
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2014-12-12 10:20:31 -0800 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +36c89af1edf269fe68f61c48326ff257862e274d +

    +

    + Fix for broken make file introduced in 878ef4d48a0aebc9354ccd09443a1a52ad93c9a0.
    +
    + When adding the libtiff capability into the xpswrite device, I failed to update the devs.mak
    + file. This broke the Windows release 64x build. Not sure why the other platforms were also
    + not broken. Likely something is not getting cleaned up during a clean and rebuild.
    +
    +gs/devices/devs.mak
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2014-12-11 12:07:15 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +27ce88cce7024691f292071cb602c119afc91f61 +

    +

    + Bug 694509: Fix file name "building" for resources
    +
    + After we'd created a candidate file name, there was a spurious "exch" in
    + place before we actually tried to validate the file name.
    +
    + So, instead of "<path-to-resources>/<Resource Category>/<Resource Instance>"
    + being passed to .libfile, we actually passed the Postscript "path":
    + "<Resource Category>/<Resource Instance>"
    +
    + Simply removing the exch seems to resolve this bug for me.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_res.ps
    +

    +

    +
    +

    2014-12-05 13:59:31 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +dbcb29d2508de6ea997cf07d0987c107cd754cfb +

    +

    + Bug 695711: Resolve issue with relative paths for FONTPATH
    +
    + Check whether a "lib" file exists, and whether we are allowed to open it,
    + before we try to open it.
    +
    + This reverts ""starting_arg_file" should only apply once." (commit
    + 407cc61e87b0fd9d44d72ca740af7d3c85dee78d).
    +
    + Which caused problems with, for example, the "-sFONTPATH=..." option when the
    + path is relative rather than absolute.
    +
    + No cluster differences.
    +
    +gs/psi/imainarg.c
    +gs/psi/zfile.c
    +

    +

    +
    +

    2014-12-04 08:24:32 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +ac4bfb62efdef25bf6d60c7f6a985dc6344891ca +

    +

    + Bug 695712: Revise glyph name map generation for TT fonts
    +
    + Reinstate the unicode cmap and formatted "uniXXXX" glyph name methods of
    + finding glyph name maps, but in a more efficient method than the original
    + implementation.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_ttf.ps
    +

    +

    +
    +

    2014-12-11 14:45:36 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +2207f06c5647e4308622733df854e49e2d48c97f +

    +

    + Handle a 'q' during the course of a 'W.....n' sequence
    +
    + Bug #695723 "Inverted images when converting PDF to Tiff (B&W)"
    +
    + The 'W' (and W*) operators are unlike their PostScript equivalents, and all
    + other PDF operators, they don't take effect immediately they simply add to
    + the clip path and produce a new clip path. Not until the 'n' is executed do
    + they actually apply the clip path. The Ghostscript PDF interpreter handles
    + this by accumulating the path operations (W/W*) until a 'n' is encountered.
    +
    + Normally nothing else would need to be done, but because we've seen broken
    + PDF files that change the graphics state while accumulating a clip, and we
    + know that Acrobat ignores these, we have to track this. We do this by using
    + a dictionary.
    +
    + So each graphics state operator checks the current dictionary to see if we
    + are inside a 'W' context and if so emits a warning and drops the change.
    + Again, so far so good.
    +
    + However, the 'q' starts a new dictionary (pushing the existing 'W' one back
    + one level), which means that the 'n' operator closes that new dictionary
    + instead of the one it should close, and that brings the 'W' dictionary back
    + to the front.
    +
    + Now when we execute the '1 1 1 rg' it looks at the dictionary and says "aha,
    + we are in a 'W' state, so ignore this".
    +
    + This commit has the 'q' operator check to see if we are in a 'W' context. If
    + we are we copy the context dictionary to the stack, and close it. Then we
    + start the q 'nodict' dictionary. Finally we reopen the 'W' dictionary from
    + the stack. Now the 'n' will correctly close the 'W' dictionary, leaving the
    + 'nodict' in its place.
    +
    + No differences expected.
    +
    +gs/Resource/Init/pdf_ops.ps
    +

    +

    +
    +

    2014-10-31 13:30:04 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +813dc08154a525e5acca20b5da446eb58199680f +

    +

    + Update jbig2dec version and CHANGES file
    +
    + No cluster differences
    +
    +gs/jbig2dec/CHANGES
    +gs/jbig2dec/config_win32.h
    +gs/jbig2dec/configure.ac
    +gs/jbig2dec/jbig2dec.1
    +

    +

    +
    +

    2014-11-19 15:02:22 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +66710da50af90cca72c2c8ea4942f3c4a23c9e5b +

    +

    + Bug 695688: improve cidfmap record validation.
    +
    + The previous record validation only checked for valid substitutions when the
    + substitution referenced a TTF file (and removed the mapping if the TTF file was
    + not available). It ignored name to name mappings.
    +
    + This revision adds validation to the name to name mappings, again removing
    + ones found to be invalid.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_cidfm.ps
    +

    +

    +
    +

    2014-09-24 12:30:27 -0700 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +878ef4d48a0aebc9354ccd09443a1a52ad93c9a0 +

    +

    + Add high level image handling to xpswrite device.
    +
    + This adds the ability to create high level image content with the XPS write device.
    + It includes the writing of the ICC profile for the image and will support gray, rgb,
    + and cmyk images. Currently it only supports 8 bit per color channel bit depth.
    +
    + Conflicts:
    + gs/devices/vector/gdevxps.c
    +
    +gs/base/gsicc_cache.c
    +gs/base/gsicc_cache.h
    +gs/base/gsicc_create.c
    +gs/devices/vector/gdevxps.c
    +gs/ghostscript.vcproj
    +

    +

    +
    +

    2014-11-18 09:16:05 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +a476643d942cfbcc6f68e7470e0d8425d31435ce +

    +

    + Documentation - remove some odd switches from examples in ps2pdf.htm
    +
    +gs/doc/Ps2pdf.htm
    +

    +

    +
    +

    2014-11-17 11:33:42 -0800 + +
    Marcos H. Woehrmann <marcos.woehrmann@artifex.com>
    +7d5a454da233c45775f640f251cec5c035e1ee55 +

    +

    + Minor fixes to clusterpush documentation (done primarily to force an update of md5sums).
    +
    +gs/toolbin/localcluster/clusterpush.pl
    +gs/toolbin/localcluster/clusterpush.txt
    +

    +

    +
    +

    2014-11-17 14:22:44 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +abcaeaace08efa5d1596ef6a50f3d809d0b07a4a +

    +

    + pdfwrite - remove the force to the old CMS for PDF/A-1
    +
    + Before we could guarantee a V2 ICC profile we forced the CMS to be the old
    + version for PDF/A-1. Now that we can guarantee a V2 profile this is no longer
    + required, and is removed here.
    +
    + No differences expected.
    +
    +gs/devices/vector/gdevpdfp.c
    +

    +

    +
    +

    2014-11-14 12:15:45 -0800 + +
    Ray Johnston <ray.johnston@artifex.com>
    +4a37526a0606a29f0f0a86cd4b815ec7d966a1a0 +

    +

    + Improve performance of PDF TJ operator to avoid repeated setfillstate
    +
    + Add TextFillStateNeeded and add settextfillstate that conditionally
    + performs setfillstate only once for the operations.
    +
    +gs/Resource/Init/pdf_ops.ps
    +

    +

    +
    +

    2014-11-13 14:30:37 -0700 + +
    Henry Stiles <henry.stiles@artifex.com>
    +b669cfb4d3805adbcc2d7d7a3fa9fad3e9645aa1 +

    +

    + Warning cleanup and remove an obsolete PCL XL colorspace type.
    +
    +gs/base/gdevpxen.h
    +pcl/pcfsel.c
    +pcl/pglabel.c
    +pl/plftable.h
    +pxl/pxgstate.c
    +pxl/pxink.c
    +pxl/pxptable.c
    +

    +

    +
    +

    2014-11-12 23:03:50 -0800 + +
    Marcos H. Woehrmann <marcos.woehrmann@artifex.com>
    +a814674105d9b57d5751e21d4a803df9fa4a4856 +

    +

    + Added xpswrite option to clusterpush.pl.
    +
    +gs/toolbin/localcluster/clusterpush.pl
    +

    +

    +
    +

    2014-11-12 16:50:50 -0700 + +
    Henry Stiles <henry.stiles@artifex.com>
    +40bc5a9477192f663d66ffcad75cd14d7dac43ab +

    +

    + Fix 695673: symbol set not used correctly.
    +
    + If we don't support a requested symbol set we map the font directly
    + with the character codes, i.e. the symbol mapping is identity. Due to
    + an historical artifact we used to map symbol and wingding fonts
    + without symbol sets by just adding 0xf000 to the input character code,
    + thus evolved the conditional to check if the font is internal and the
    + symbol set is 0 just add 0xf000 because it must be a wingdings or
    + symbol font. Of course that is wrong even if very rarely encountered,
    + and unnecessary because we've added the symbols sets needed to support
    + wingdings and symbol.
    +
    +pcl/pctext.c
    +pcl/pglabel.c
    +pl/plsymbol.c
    +pl/plsymbol.h
    +pxl/pxfont.c
    +

    +

    +
    +

    2014-11-10 14:31:44 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +c98c38c8b9912fc3510ef2e1e53c3ff1837b0519 +

    +

    + eps2write - don't clamp text BBox to the text enumerator origin
    +
    + Bug #695671 "eps2write gives incorrect bounding box with rotated text"
    +
    + The bug here is that, having gone to some effort to retrieve the bounding
    + box of the text, the code then clamps the origin of the text box to the
    + origin of the text enumerator.
    +
    + This is clearly incorrect for rotated text, and I'm doubtful it makes sense
    + even for upright text. I'm somewhat puzzled because it looks quite deliberate
    + but I don't see why, and my testing shows no differences if I don't do this.
    +
    + So I'm removing this for now, this may need some more attention in the future
    + but then that is still generally true of the eps2write device.
    +
    + No differences expected, the eps2write device is not cluster tested.
    +
    +gs/devices/vector/gdevpdte.c
    +

    +

    +
    +

    2014-11-06 09:53:05 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +b7fa37ecf0f25b125fafeed15873963853148276 +

    +

    + Documentation change - improve and correct MaxShadinBitmapSize documentation
    +
    +gs/doc/Ps2pdf.htm
    +

    +

    +
    +

    2014-11-05 15:57:10 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +7bdf34b3dfd52e3897cef02e7c540270c10e2349 +

    +

    + PDF Interpreter - run annotations in a stopped context for error-and-continue
    +
    + Bug #695453 "Conversion to png fails with undefinedresult in --run--"
    +
    + The PDF test file was supplied privately, it contains 3 annotations, each of
    + which is invalid having /Rect, /QuadPoints or /BBox arrays where each
    + element is 0.
    +
    + Here we simply run the annotation inside a stopped context so that if it
    + throws an error we can raise a message and carry on.
    +
    + No differences expected.
    +
    +gs/Resource/Init/pdf_main.ps
    +

    +

    +
    +

    2014-11-05 10:33:15 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +25b7ec08e8fed8a69c9b3ac75fbf3ccc43693e7c +

    +

    + PDF interpreter - attempt to recover from empty stream with broken endstream
    +
    + Bug #695664 "Problem reading PDF file: stream length incorrect"
    +
    + The file has an annotation with a broken stream, its empty (Length 0) and
    + the endstream keyword is incorrectly written as endsteam.
    +
    + When we encounter the endobj we attempt to unwind back to the object number
    + and generation on the stack, but we don't have those on the stack, so instead
    + we consume the error recovery information, which then leads to the stream
    + code being unable to recover from the error condition, resulting in an error.
    +
    + This change to endobj looks to see if either of the 2nd and third entries
    + on the operand stack are a 'mark', and if so assumes that this is a broken
    + empty stream, pops back to the mark and exits leaving cleanup to the
    + stream code.
    +
    + Clearly this code can be defeated, depending on what garbage is left behind
    + by the broken stream, but in general we might reasonably expect to find two
    + integers before a mark object. Even if we don't, the result will still be no
    + worse than at present.
    +
    + No differences expected
    +
    +gs/Resource/Init/pdf_base.ps
    +

    +

    +
    +

    2014-11-03 15:36:55 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +b2a6decb294ca8c48c71da2211f3284b2334d921 +

    +

    + PDF interpreter - make unrecognised operators obey PDFSTOPONERROR
    +
    + Bug #695661 "Ghostscript command hangs indefinitely"
    +
    + The PDF file is badly corrupted, Acrobat fails to display most of page 27,
    + MuPDF complains of zlib errors.
    +
    + Ghostscript also emits many warnings and then proceeds to spend an interminably
    + long time subdividing a curve. At resolutions up to ~25 dpi its reasonably
    + quick, after that its a long time indeed.
    +
    + We can't simply catch the zlib errors like MuPDF, as bug #688716 indicates
    + that, under at least some conditions, Acrobat ignores these errors.
    +
    + The problem seems to be caused by the fact that the corrupted data includes
    + some truly massive co-ordinates, but we can't simply ignore those either
    + as a real number can vary up to +/- 3.403 x 10^38. Possibly we could limit
    + numbers representing co-ordinates to 14,400, since that's the maximum
    + Acrobat can use, but that would mean a *lot* of reworking in the PDF
    + interpreter.
    +
    + The best I can come up with short of that is to make malformed numbers
    + throw an error, and honour PDFSTOPONERROR, which to be frank should have
    + been the case already.
    +
    + No differences expected.
    +
    +gs/Resource/Init/pdf_base.ps
    +

    +

    +
    +

    2014-10-16 12:26:24 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +a3bb342587cc7247420a05ff2428c4c94da194c0 +

    +

    + Bug 695593: Add the MAKEDIRS target wherever it was missing.
    +
    + MAKEDIRS target was missing from a large number of object files and other
    + files created during the build process. This could cause problems when
    + running parallel make instances.
    +
    + No cluster differences.
    +
    +gs/base/expat.mak
    +gs/base/fapi_bs.mak
    +gs/base/freetype.mak
    +gs/base/ijs.mak
    +gs/base/jbig2.mak
    +gs/base/jpeg.mak
    +gs/base/jpegxr.mak
    +gs/base/lcms2.mak
    +gs/base/lcups.mak
    +gs/base/lcupsi.mak
    +gs/base/ldf_jb2.mak
    +gs/base/lib.mak
    +gs/base/lwf_jp2.mak
    +gs/base/openjpeg.mak
    +gs/base/png.mak
    +gs/base/tiff.mak
    +gs/base/trio.mak
    +gs/base/unix-aux.mak
    +gs/base/zlib.mak
    +gs/devices/contrib.mak
    +gs/devices/devs.mak
    +gs/psi/int.mak
    +

    +

    +
    +

    2014-10-31 12:39:45 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +0f0b9350206c99e5f4b73fe639ed3e085066fe5e +

    +

    + Fix and improve bit-rotted jbig2dec/libpng build on Windows
    +
    + The Windows jbig2dec build incorporating libpng had bit-rotted, credit to
    + Ray for identifying the problems there.
    +
    + In addition, I've added provision for specifying the libpng and zlib source
    + paths on the nmake command line, and automatic inclusion of libpng if
    + the path appears valid.
    +
    + No cluster differences.
    +
    +gs/jbig2dec/jbig2_image_png.c
    +gs/jbig2dec/msvc.mak
    +

    +

    +
    +

    2014-10-30 10:59:01 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +69a6dc944e63a4a037eccc0d0cba5dee6bf9f272 +

    +

    + Fix annoying, hard to reproduce ICC related warning
    +
    + Occasionally, and in hard to reproduce circumstances, we could get a warning
    + from the ICC code:
    + ./base/gsicc_manage.c:1084: gsicc_open_search(): \
    + Could not find <garbage string>
    +
    + This, it turns out, is because the get_params code was returning a pointer to
    + a string allocated in non-gc memory, which just isn't compatible with the
    + way the Postscript interpreter interacts with the graphics library.
    +
    + This commit changes the way the parameter is returned so it copies the string
    + into gc memory, compatible with use in a Postscript string object. Note that the
    + put_params equivalent code was already correct in copying the string from gc
    + memory into non-gc memory managed by the device code.
    +
    + No cluster differences
    +
    +gs/base/gsdparam.c
    +

    +

    +
    +

    2014-10-27 21:19:44 +0100 + +
    Simon Bünzli <zeniko@gmail.com>
    +ee0bc20cc98c8e8381003a25dfa0b21e681c6545 +

    +

    + replace jbig2_arith_get_offset with jbig2_arith_has_reached_marker
    +
    + The DOS check introduced with 6e1f2259115efac14cd6c7ad9d119b43013a32a1
    + tries to determine whether arithmetic coding has run out of data and
    + has entered an infinite loop. It does so by checking how many bytes
    + have been read and compares with the number of bytes available. The fix
    + however fails to take into account bytes which have been cached in
    + _Jbig2ArithState::next_word which causes valid images to be rejected.
    +
    + This patch corrects that bug by replacing that check with a generic
    + check as to whether the end of the data stream has been reached (which
    + is the case if the only two remaining cached bytes are 0xFF and a value
    + larger than 0x8F).
    +
    + Signed-off-by: Henry Stiles <henry.stiles@artifex.com>
    +
    +gs/jbig2dec/jbig2_arith.c
    +gs/jbig2dec/jbig2_arith.h
    +gs/jbig2dec/jbig2_symbol_dict.c
    +

    +

    +
    +

    2014-09-27 13:51:32 +0200 + +
    Simon Bünzli <zeniko@gmail.com>
    +9157d6a5fccf109eb6554557eb8904b281571d28 +

    +

    + Bug 694892: fix typo in 5eaf740b2c02523ae2ae6454e546cb6700d4e3f3
    +
    + Signed-off-by: Henry Stiles <henry.stiles@artifex.com>
    +
    +gs/jbig2dec/jbig2_metadata.c
    +

    +

    +
    +

    2014-10-29 09:29:09 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +f6789d068a5f7af9cfead5120930893955123be1 +

    +

    + Correct a small out-of-dateness related to COMPILE_INITS
    +
    + No cluster differences
    +
    +gs/doc/Make.htm
    +

    +

    +
    +

    2014-10-28 17:09:17 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +cd2c4af1dd92bc4cc32170254c84498792913c0e +

    +

    + PDF interpreter - ignore /Contents array entries which don't resolve to dicts
    +
    + Bug #695645 "PDFWrite fails on file with Error: /typecheck in --run--"
    +
    + The specimen file has a /Contents array where one of the elements is an
    + indirect reference to another array. This isn't legal, entries in the
    + /Contents array must be references to streams. Acrobat simply ignores the
    + error and displays the page blank.
    +
    + Here we check each entry before we process it, and if its not a dictionary
    + we ignore it, exit the loop processing the entries (as Acrobat apparently does)
    + and emit a warning.
    +
    + No differences expected.
    +
    +gs/Resource/Init/pdf_main.ps
    +

    +

    +
    +

    2014-10-28 16:28:30 +0000 + +
    Ken Sharp <ken.sharp@artifex.com>
    +e21bb3e597825215da7ad4d757585fa96eb39909 +

    +

    + PDF interpreter - provide a default BBox for Forms
    +
    + Bug #695632 "Error: /undefined in --.PDFexecform--"
    +
    + Type 1 Form XObjects are required to have a /BBox, but this example file
    + incorrectly omits it. Here we add a default (incorrect) BBox just to work
    + around the error. We also emit a warning that the file is damaged.
    +
    + No diffreences expected.
    +
    +gs/Resource/Init/pdf_draw.ps
    +

    +

    +
    +

    2014-10-28 15:55:48 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +282c8f902d98543aee12931e69087180829bc8d1 +

    +

    + Remove paragraphs relating to GNU readline
    +
    + No cluster differences.
    +
    +gs/doc/Make.htm
    +

    +

    +
    +

    2014-10-28 10:49:37 +0000 + +
    Chris Liddell <chris.liddell@artifex.com>
    +05c2e0876019551d65f8f79655f34aa5adb5ca27 +

    +

    + Update the docs for fonts and COMPILE_INITS
    +
    + No cluster differences.
    +
    +gs/doc/Fonts.htm
    +gs/doc/Make.htm
    +gs/doc/Use.htm
    +

    +

    +
    +

    2014-10-27 19:12:15 -0700 + +
    Michael Vrhel <michael.vrhel@artifex.com>
    +d39b321e4927dfafa428af8c25bddb791b14e15b +

    +

    + Update color management documentation.
    +
    +gs/doc/GS9_Color_Management.pdf
    +gs/doc/GS9_Color_Management.tex
    +

    +

    +
    +

    2014-10-23 09:35:26 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +db7ac4892625633204fad65ffa0da6dbaf43fc6a +

    +

    + Bug 695598: cidfmap validation problems on Windows
    +
    + Originally, the cidfmap validation used "stat" to check whether the font file
    + was available (and remove the mapping if the font file is missing). But it
    + seems, for some (currently unidentified) reason, stat can fail even if the
    + font file is actually avaiable.
    +
    + This changes the validation code to use ".libfile" and "file" operators to
    + check whether the font file can be found - this, it seems, works, even in cases
    + where "state" fails.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_cidfm.ps
    +

    +

    +
    +

    2014-10-22 13:30:08 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +352645ff149aa690074030995ef33e1c2e4c35a0 +

    +

    + Xpswrite - properly initialise PrinterName
    +
    + Bug #695617 "Error: Printer name too long"
    +
    + The xpswrite device doesn't include a full definition of its devicestructure
    + or initialisers for its variables.
    +
    + This can lead to problems if any of these variables are exposed via
    + put/get params as the initial parameter will be uninitialised (put and get
    + params are called before the device open method)
    +
    + Here we add a 'finish_copydevice' method and initialise the PrinterName
    + in it. Devices are created by calling copydevice on the device prototype
    + and the finish_copydevice method is called as the last action from there
    + so its safe to initialise the variables, and this will be completed before
    + put/get params is called.
    +
    + No differences expected
    +
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2014-10-22 14:04:14 +0200 + +
    Tor Andersson <tor.andersson@artifex.com>
    +648aba52e1430277035471709e3d6596c7016a35 +

    +

    + Fix 695618: Keep a tail pointer to speed up parsing long XML documents.
    +
    +xps/xpsxml.c
    +

    +

    +
    +

    2014-10-20 09:55:22 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +c477d95f3e6cf50da2dc125c8d8335a440d9970d +

    +

    + Restrict xpswrite PrinterName device paramater to windows platform.
    +
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2014-10-19 17:54:28 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +54f69da6cdeae9dcffcb1d060ccbeef3e0d4f7b0 +

    +

    + Bug #695578 - Continue parsing a numeric parameter if a bad character
    + is found before a legal value.
    +
    + This refines an earlier fix, bug #694725 which implemented skipping
    + the rest of the numerical parameter when a bad character was parsed.
    +
    + Thanks to Norbert Janssen for finding and fixing this problem.
    +
    +pcl/pcparse.c
    +

    +

    +
    +

    2014-10-19 10:31:42 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +75a6c77aaa4278d462834f08b8da23dabc4566d7 +

    +

    + Change warnings to debug statements.
    +
    +gs/devices/vector/gdevxps.c
    +

    +

    +
    +

    2014-10-19 10:07:57 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +8eadbf5b901588e86886f7ab42462c2486e9f561 +

    +

    + Fix warnings introduced with "saved page" work.
    +
    +pl/plmain.c
    +

    +

    +
    +

    2014-10-19 09:52:33 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +d9a5f2f04b57d09f7f8c2082b29edd43fc96dcb0 +

    +

    + Remove repetive accessors for 2 user options (interpolate and nocache)
    + and replace with single routine in pl.
    +
    +pcl/pctop.c
    +pl/plmain.c
    +pl/plmain.h
    +pxl/pxl.mak
    +pxl/pxtop.c
    +

    +

    +
    +

    2014-10-11 09:46:19 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +d93848b56be856aaa41a7e16fa42c141219244f5 +

    +

    + Add -dNOCACHE to the usage help statement that runs when the program
    + is run incorrectly or incompletely.
    +
    +pl/plmain.c
    +

    +

    +
    +

    2014-10-11 09:42:52 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +88ed32c13b7bca6c259dc29502a40446bf34f75b +

    +

    + Implement NOCACHE parameter. We only support the simple case of
    + specifying the parameter or not. Right hand side values of /true and
    + /false are not supported.
    +
    +pcl/pcfont.c
    +pcl/pcstate.h
    +pcl/pctop.c
    +pl/plmain.c
    +pl/plmain.h
    +pl/pltop.h
    +pxl/pxstate.c
    +pxl/pxstate.h
    +pxl/pxtop.c
    +xps/xpstop.c
    +

    +

    +
    +

    2014-10-10 11:56:28 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +f072fac051e5f008488e5eea66cc76876516ec47 +

    +

    + Error handling was wrong, objects were dereferenced before checking if
    + the allocation failed.
    +
    +xps/xpstop.c
    +

    +

    +
    +

    2014-10-18 07:55:27 -0700 + +
    Marcos H. Woehrmann <marcos.woehrmann@artifex.com>
    +6715211e308d753a79b35663f951a239704b8092 +

    +

    + Fix compile issue with Luratech introduced in 74d5e9fb7d70d3d3d9cf964c76c550134c822020.
    +
    + The change from a char * to an enum for psdf_image_params_s->AutoFilterStrategy
    + required a change in gdevpsdi.c.
    +
    +gs/devices/vector/gdevpsdi.c
    +

    +

    +
    +

    2014-10-14 12:39:27 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +5bf2c272781f20dc2ed4ca8a461166543846f422 +

    +

    + ps2write - undo PDF name escaping for Separation colours
    +
    + Bug #695590 "Spaces in spot colour names are encoded to "#20""
    +
    + The opdfread header wasn't applying the conversion from PDF escaped names
    + when the name was an entry in a Separation colour space.
    +
    + No differences expected.
    +
    +gs/devices/vector/opdfread.h
    +gs/lib/opdfread.ps
    +

    +

    +
    +

    2014-10-10 11:26:45 +0100 + +
    Shailesh Mistry <shailesh.mistry@hotmail.co.uk>
    +63b484c3040aa644fff2ed2a0861ac8cb082aafb +

    +

    + Bug 695146: patch for missing lrintf
    +
    + OpenJPEG uses lrintf() which can be missing, or in this case, the prototype is
    + missing from the math.h header file - causing faulty output.
    +
    + This patch checks for the function prototype, if it's missing it replaces the
    + lrintf() call with a naive round/cast implementation.
    +
    + Two reasons for choosing this approach: it saves maintaining a patch against
    + OpenJPEG, and secondly, this is only relevant to older systems - more up to
    + date systems have lrintf() correctly prototyped, and often have implementations
    + optimised to the hardware, so we really want to use it if it's available.
    +
    + No cluster differences.
    +
    +gs/configure.ac
    +

    +

    +
    +

    2014-10-07 14:33:08 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +8095a1010b799d5e36ac5bf4a5b67356362df607 +

    +

    + Upon macro creation there is no need to search the dictionary for a
    + like named macros and delete it, the dictionary entry is recycled later
    + when we add the macro.
    +
    +pcl/pcmacros.c
    +

    +

    +
    +

    2014-10-07 09:28:38 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +ca7cea181d7905cb460ad6f82f234d3ee8d5efce +

    +

    + pdfwrite - fix a logical error in the AutoFilterStrategy params
    +
    + This code was originally present only when using the Luratech decoder
    + but would have been incorrect there too.
    +
    + Spotted while looking at a scan-build warning
    +
    +gs/devices/vector/gdevpsdp.c
    +

    +

    +
    +

    2014-10-05 20:55:39 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +1f3e40cf0fbbbb9a1c8085584f3e411cb112d9b4 +

    +

    + Bug 695555: fix check to simulate overprint.
    +
    + Mirror condition from pdf14_mark_fill_rectangle() in
    + pdf14_copy_alpha_color() to decide whether we should apply overprinting.
    +
    + No cluster differences.
    +
    +gs/base/gdevp14.c
    +

    +

    +
    +

    2014-10-06 18:00:46 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +4018f1158984093380971ba1f4096b599c2d639e +

    +

    + PDF interpreter - improve error recovery with PDF form execution
    +
    + Bug #695537 "Ghostscript locks up reading attached PDF file"
    +
    + The problem is that, after we execute a form, we attempt to 'grestore' back
    + to the gsave depth at the time we executed the form, this is to try and
    + cater for broken form streams that have unbalanced Q/q operators.
    +
    + This is done by counting the dict stack before the form execution, and after
    + the form is complete. If the depth is different we execute 'Q' in a loop
    + until we get back to the same dict stack depth.
    +
    + This assumes that the only reason for having more dictionaries on the stack
    + is due to them being pushed by our implementation of 'q'. However in this
    + case (and more generally, in any event) we have created some dictionaries
    + then encountered an error, and returned control back to the form execution
    + routine.
    +
    + As stated this calls 'Q' in a loop expecting that each 'Q' will decrement
    + the number of dictionaries by 1 each time. But 'Q' only does that if the
    + dictionary is the result of a 'q' if it isn't it leaves it in place.
    +
    + So the form execution simply carries on round the loop forever.
    +
    + This commit addresses this by checking the number of items on the dict
    + stack before and after executing 'Q' and if they are the same, it executes
    + the 'end' operator instead to remove the topmost dictionary from the stack.
    +
    + This allows us to carry on removing gstate or general dictionaries until
    + we get back to the correct depth.
    +
    + Note that, because there is a genuine error in the file, we do not render
    + it 'correctly', but neither does any other PDF consumer. Other consumers
    + render more of it than we do, but they all drop the 'Fannie Mae' logo.
    +
    + No differences expected
    +
    +gs/Resource/Init/pdf_draw.ps
    +

    +

    +
    +

    2014-10-06 17:06:27 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +33e70f43badc2581757549bba55747af3f966622 +

    +

    + colour handling - remove continuations from the exec stack on error
    +
    + If we get an error (not running another PostScript function), we were not
    + removing our continuation procedure and data from the execution stack
    + before exiting setcolorspace.
    +
    + This led to the interpreter exiting instead of simply flagging an error.
    +
    + No bug report for this, discovered while working on bug #695537
    +
    +gs/psi/zcolor.c
    +

    +

    +
    +

    2014-10-06 16:37:37 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +74d5e9fb7d70d3d3d9cf964c76c550134c822020 +

    +

    + pdfwrite - Correct Gray and ColorImageAutoFilterStrategy
    +
    + A number of problems here; firstly the commit that added these to the
    + distiller params has the correct names in the commit message, but the names
    + used in the code were incorrect (eg ColorAutoFilterStrategy).
    +
    + Secondly the parameter is supposed to be a name, but the data stored
    + was a C string, and get_params was returning an integer, so it actually
    + contained half the memory pointer value.
    +
    + The parameters weren't added to .distillerparamkeys so currentdistillerparams
    + didn't return the values.
    +
    + The default value for the non-Luratech case should have been /JPEG but in
    + fact /JPEG2000 was used in both cases.
    +
    + 99-01-fixed.ps should dhow up as a diff this time, and then should cease
    + being indeterminate with the pdfwrite device, as we now return the correct
    + name rather than half a random memory location.
    +
    +gs/Resource/Init/gs_pdfwr.ps
    +gs/devices/vector/gdevpsdf.h
    +gs/devices/vector/gdevpsdp.c
    +

    +

    +
    +

    2014-10-05 19:37:24 +0100 + +
    Paul Gardiner <paul.gardiner@artifex.com>
    +e72d03c68bfb6afaa0b90f6b717f91aef67b6c07 +

    +

    + Fix compiler warnings introduced by temp-file commit
    +
    +gs/base/gxclfile.c
    +gs/base/unistd_.h
    +

    +

    +
    +

    2014-10-05 17:14:09 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +5d4d9d9772765501cac81b9b181ecc83f900d08a +

    +

    + pdfwrite - move outline relocation after the outline action relocation
    +
    + Bug #695354 "Segmentation fault splitting PDF"
    +
    + Move the pointer relocation for outline levels so that it takes place after
    + we relocate the outline actions, otherwise we can end up corrupting
    + memory.
    +
    + No differences expected
    +
    +gs/devices/vector/gdevpdf.c
    +

    +

    +
    +

    2014-07-24 12:50:17 +0100 + +
    Paul Gardiner <paul.gardiner@artifex.com>
    +9108db24fef88855199038a257bf935a698af2f4 +

    +

    + Avoid failure to clean up temp files when the execution is killed
    +
    + This currently works only for Windows and Linux builds. For Windows, temp
    + files are created with the "delete on close" option. For Linux, temp
    + files are immediately unlinked on creation. In both cases, the initially
    + opened FILE pointer is kept open throughout execution, and reader access
    + is provided by duplicating the initial FILE rather than opening a new
    + FILE pointer based on the file name.
    +
    +gs/base/gp.h
    +gs/base/gp_macio.c
    +gs/base/gp_mswin.c
    +gs/base/gp_os2fs.c
    +gs/base/gp_unifs.c
    +gs/base/gp_vms.c
    +gs/base/gxclfile.c
    +

    +

    +
    +

    2014-10-03 13:40:21 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +0a8ac7c25438fbd4c406fc735c9c0fbd9f05c527 +

    +

    + Bug 695244: ensure a consistent allocator for DCT streams.
    +
    + The existing code could result in a mis-match between the memory allocators
    + used for the DCT specific parts of the stream and the main body of the stream.
    +
    + As both are in gc memory, this could result, when the stream goes out of scope,
    + in the DCT specific memory being garbage collected before the main stream
    + object. As the main stream object contains the "finalize" method, the call to
    + finalize would result in accessing already freed memory.
    +
    + This commit revises the code to use the same method to work out the allocator
    + to use for the main stream object as we do for the DCT specific parts.
    +
    + No cluster differences.
    +
    +gs/psi/zfdctd.c
    +

    +

    +
    +

    2014-10-02 21:54:56 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +8f16e6dc73550d3e8f339a609e2dc51998616330 +

    +

    + Bug 695561: remove .DS_Store files
    +
    + No cluster differences.
    +
    +gs/lcms2/Projects/mac/.DS_Store
    +gs/lcms2/Projects/mac/LittleCMS/.DS_Store
    +

    +

    +
    +

    2014-09-30 17:35:02 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +f85afab4a4584c79f309e8f5691f5955605c67b5 +

    +

    + Address two compiler warnings.
    +
    + No cluster differences.
    +
    +gs/base/gdevprn.c
    +

    +

    +
    +

    2014-09-30 08:58:55 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +b460743bdc6c8c4de5fca260224673ca839b11e6 +

    +

    + Remove LCMS.
    +
    + No cluster differences.
    +
    +gs/Makefile.in
    +gs/base/lcms.mak
    +gs/configure.ac
    +gs/lcms/AUTHORS
    +gs/lcms/COPYING
    +gs/lcms/ChangeLog
    +gs/lcms/Delphi/Samples/MAKETEST.BAT
    +gs/lcms/Delphi/Samples/TEST.PAS
    +gs/lcms/Delphi/Samples/create.pas
    +gs/lcms/Delphi/Samples/gamutchk.pas
    +gs/lcms/Delphi/Samples/getxyz.pas
    +gs/lcms/Delphi/Samples/sRGB Color Space Profile.icm
    +gs/lcms/Delphi/Samples/testfrm.pas
    +gs/lcms/Delphi/Samples/testwp.pas
    +gs/lcms/Delphi/delphidemo.cfg
    +gs/lcms/Delphi/delphidemo.dof
    +gs/lcms/Delphi/delphidemo.dpr
    +gs/lcms/Delphi/delphidemo.res
    +gs/lcms/Delphi/demo1.dcu
    +gs/lcms/Delphi/demo1.ddp
    +gs/lcms/Delphi/demo1.dfm
    +gs/lcms/Delphi/demo1.pas
    +gs/lcms/Delphi/lcmsdll.pas
    +gs/lcms/INSTALL
    +gs/lcms/Lib/BC/BC.txt
    +gs/lcms/Lib/MS/MS.TXT
    +gs/lcms/Makefile.am
    +gs/lcms/Makefile.in
    +gs/lcms/NEWS
    +gs/lcms/Projects/BorlandC_5.5/lcms.rc
    +gs/lcms/Projects/BorlandC_5.5/lcmsdll.lk
    +gs/lcms/Projects/BorlandC_5.5/lcmsdll.lst
    +gs/lcms/Projects/BorlandC_5.5/mklcmsdll.bat
    +gs/lcms/Projects/VC2005/Python.vcproj
    +gs/lcms/Projects/VC2005/Testbed.vcproj
    +gs/lcms/Projects/VC2005/icc2ps.vcproj
    +gs/lcms/Projects/VC2005/icclink.vcproj
    +gs/lcms/Projects/VC2005/icctrans.vcproj
    +gs/lcms/Projects/VC2005/jpegicc.vcproj
    +gs/lcms/Projects/VC2005/lcms.rc
    +gs/lcms/Projects/VC2005/lcms.sln
    +gs/lcms/Projects/VC2005/lcms.vcproj
    +gs/lcms/Projects/VC2005/lcmsdll.vcproj
    +gs/lcms/Projects/VC2005/resource.h
    +gs/lcms/Projects/VC2005/tiffdiff.vcproj
    +gs/lcms/Projects/VC2005/tifficc.vcproj
    +gs/lcms/Projects/VC2008/Python.vcproj
    +gs/lcms/Projects/VC2008/Testbed.vcproj
    +gs/lcms/Projects/VC2008/icc2ps.vcproj
    +gs/lcms/Projects/VC2008/icclink.vcproj
    +gs/lcms/Projects/VC2008/icctrans.vcproj
    +gs/lcms/Projects/VC2008/jpegicc.vcproj
    +gs/lcms/Projects/VC2008/lcms.rc
    +gs/lcms/Projects/VC2008/lcms.sln
    +gs/lcms/Projects/VC2008/lcms.vcproj
    +gs/lcms/Projects/VC2008/lcmsdll.vcproj
    +gs/lcms/Projects/VC2008/resource.h
    +gs/lcms/Projects/VC2008/tiffdiff.vcproj
    +gs/lcms/Projects/VC2008/tifficc.vcproj
    +gs/lcms/Projects/VC6/Python.dsp
    +gs/lcms/Projects/VC6/Python.plg
    +gs/lcms/Projects/VC6/Testbed.dsp
    +gs/lcms/Projects/VC6/Testbed.plg
    +gs/lcms/Projects/VC6/icc2ps.dsp
    +gs/lcms/Projects/VC6/icclink.dsp
    +gs/lcms/Projects/VC6/icctrans.dsp
    +gs/lcms/Projects/VC6/jpegicc.dsp
    +gs/lcms/Projects/VC6/lcms.dsp
    +gs/lcms/Projects/VC6/lcms.dsw
    +gs/lcms/Projects/VC6/lcms.opt
    +gs/lcms/Projects/VC6/lcms.rc
    +gs/lcms/Projects/VC6/lcmsdll.dsp
    +gs/lcms/Projects/VC6/resource.h
    +gs/lcms/Projects/VC6/tifficc.dsp
    +gs/lcms/Projects/VC7/Python.vcproj
    +gs/lcms/Projects/VC7/Testbed.vcproj
    +gs/lcms/Projects/VC7/icc2ps.vcproj
    +gs/lcms/Projects/VC7/icclink.vcproj
    +gs/lcms/Projects/VC7/icctrans.vcproj
    +gs/lcms/Projects/VC7/jpegicc.vcproj
    +gs/lcms/Projects/VC7/lcms.rc
    +gs/lcms/Projects/VC7/lcms.sln
    +gs/lcms/Projects/VC7/lcms.vcproj
    +gs/lcms/Projects/VC7/lcmsdll.vcproj
    +gs/lcms/Projects/VC7/resource.h
    +gs/lcms/Projects/VC7/tiffdiff.vcproj
    +gs/lcms/Projects/VC7/tifficc.vcproj
    +gs/lcms/README.1ST
    +gs/lcms/aclocal.m4
    +gs/lcms/bin/Bin.txt
    +gs/lcms/compile
    +gs/lcms/config.guess
    +gs/lcms/config.sub
    +gs/lcms/configure
    +gs/lcms/configure.ac
    +gs/lcms/depcomp
    +gs/lcms/doc/LCMSAPI.TXT
    +gs/lcms/doc/TUTORIAL.TXT
    +gs/lcms/filter.c
    +gs/lcms/include/Makefile.am
    +gs/lcms/include/Makefile.in
    +gs/lcms/include/icc34.h.in
    +gs/lcms/include/lcms.h
    +gs/lcms/install-sh
    +gs/lcms/install.gcc
    +gs/lcms/jpegicc/Makefile.am
    +gs/lcms/jpegicc/Makefile.in
    +gs/lcms/jpegicc/iccjpeg.c
    +gs/lcms/jpegicc/iccjpeg.h
    +gs/lcms/jpegicc/jpegicc.1
    +gs/lcms/jpegicc/jpegicc.c
    +gs/lcms/jpegicc/makefile.simple
    +gs/lcms/lcms.pc.in
    +gs/lcms/ltmain.sh
    +gs/lcms/makefile.simple
    +gs/lcms/matlab/icctrans.c
    +gs/lcms/matlab/icctrans.matlab.pdf
    +gs/lcms/missing
    +gs/lcms/mkinstalldirs
    +gs/lcms/python/Makefile.am
    +gs/lcms/python/Makefile.in
    +gs/lcms/python/lcms.i
    +gs/lcms/python/lcms.py
    +gs/lcms/python/lcms_wrap.cxx
    +gs/lcms/python/swig_lcms
    +gs/lcms/python/testbed/AdobeRGB1998.icc
    +gs/lcms/python/testbed/cam02.py
    +gs/lcms/python/testbed/cam97.py
    +gs/lcms/python/testbed/clamp.py
    +gs/lcms/python/testbed/constant.py
    +gs/lcms/python/testbed/createmsh.py
    +gs/lcms/python/testbed/gamma.py
    +gs/lcms/python/testbed/info.py
    +gs/lcms/python/testbed/lab2adobe.py
    +gs/lcms/python/testbed/sRGB Color Space Profile.icm
    +gs/lcms/python/testbed/sRGB2adobe.py
    +gs/lcms/python/testbed/srgb2lab.py
    +gs/lcms/python/testbed/srgb2xyz.py
    +gs/lcms/python/testbed/virtprf.py
    +gs/lcms/python/testbed/whtpnt.py
    +gs/lcms/samples/Makefile.am
    +gs/lcms/samples/Makefile.in
    +gs/lcms/samples/icc2ps.1
    +gs/lcms/samples/icc2ps.c
    +gs/lcms/samples/icclink.1
    +gs/lcms/samples/icclink.c
    +gs/lcms/samples/icctrans.1
    +gs/lcms/samples/icctrans.c
    +gs/lcms/samples/itufax.c
    +gs/lcms/samples/makefile.simple
    +gs/lcms/samples/mkcmy.c
    +gs/lcms/samples/mkgrayer.c
    +gs/lcms/samples/mktiff8.c
    +gs/lcms/samples/vprf.c
    +gs/lcms/samples/wtpt.1
    +gs/lcms/samples/wtpt.c
    +gs/lcms/samples/xgetopt.c
    +gs/lcms/src/Makefile.am
    +gs/lcms/src/Makefile.in
    +gs/lcms/src/cmscam02.c
    +gs/lcms/src/cmscam97.c
    +gs/lcms/src/cmscgats.c
    +gs/lcms/src/cmscnvrt.c
    +gs/lcms/src/cmserr.c
    +gs/lcms/src/cmsgamma.c
    +gs/lcms/src/cmsgmt.c
    +gs/lcms/src/cmsintrp.c
    +gs/lcms/src/cmsio0.c
    +gs/lcms/src/cmsio1.c
    +gs/lcms/src/cmslut.c
    +gs/lcms/src/cmsmatsh.c
    +gs/lcms/src/cmsmtrx.c
    +gs/lcms/src/cmsnamed.c
    +gs/lcms/src/cmspack.c
    +gs/lcms/src/cmspcs.c
    +gs/lcms/src/cmsps2.c
    +gs/lcms/src/cmssamp.c
    +gs/lcms/src/cmsvirt.c
    +gs/lcms/src/cmswtpnt.c
    +gs/lcms/src/cmsxform.c
    +gs/lcms/src/cmsxform.c.orig
    +gs/lcms/src/cmsxform.h
    +gs/lcms/src/lcms.def
    +gs/lcms/src/makefile.simple
    +gs/lcms/testbed/Makefile.am
    +gs/lcms/testbed/Makefile.in
    +gs/lcms/testbed/makefile.simple
    +gs/lcms/testbed/sRGB Color Space Profile.icm
    +gs/lcms/testbed/sRGBSpac.icm
    +gs/lcms/testbed/testcms.c
    +gs/lcms/tifficc/Makefile.am
    +gs/lcms/tifficc/Makefile.in
    +gs/lcms/tifficc/getopt.c
    +gs/lcms/tifficc/makefile.simple
    +gs/lcms/tifficc/tiffdiff.c
    +gs/lcms/tifficc/tifficc.1
    +gs/lcms/tifficc/tifficc.c
    +gs/psi/msvc.mak
    +

    +

    +
    +

    2014-09-25 11:21:14 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +6ecc8536f5119f21aa38b94eb00e61214d27bd62 +

    +

    + Bug 695502: segfault with -dBGPrint=true
    +
    + When we're doing background printing, and we're using a memory file based
    + clist, we create a "clone" of the file object with it's own "context" but
    + which shares the underlying "raw" data with the original file. The original
    + code tries to free the underlying raw data memory along with the clone
    + file object, but as the clone uses the memory allocator created for the
    + rendering thread and the raw data memory was allocated in the interpretation
    + "thread", we end up trying to free memory to the wrong allocator.
    +
    + This commit has the interpreter thread hold a reference to the original clist
    + files, so we can free the "clone" files with the thread allocator, and the
    + original file with the allocator from the interpreter thread. As both these
    + cleanup actions happen in the interpreter thread, we don't have to worry about
    + thread clashes.
    +
    + No cluster differences.
    +
    +gs/base/gdevprn.c
    +gs/base/gdevprn.h
    +gs/base/gxclthrd.c
    +

    +

    +
    +

    2014-09-17 21:17:14 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +7ac0f1668fca8e1ca343e02f55faa7dd9f23d549 +

    +

    + Bug 695483: BGPrint seg fault
    +
    + When reading params for the existing device, to pass to the cloned device,
    + use the thread_memory rather than the original device memory.
    +
    + And move the io_device_table into immovable memory, rather than regular gc
    + memory.
    +
    + No cluster differences.
    +
    +gs/base/gsiodev.c
    +gs/base/gxclthrd.c
    +

    +

    +
    +

    2014-09-29 08:57:14 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +68aa4cb52359c0c6e25bcf53735bb05030ee4a2b +

    +

    + Fix typo in LICENSE file
    +
    + CLUSTER_UNTESTED
    +
    +gs/LICENSE
    +

    +

    +
    +

    2014-09-27 15:21:01 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +d5ecb99d3641a95803c88e6df2f734d392a3be63 +

    +

    + Make DCT filter finalize routine robust against double calling.
    +
    + Bug #695542 "Crash on EPS on Mac and Linux"
    +
    + The problem is that we close a DCT filter inside a gsave context, while
    + the file ref is still pointing at it.
    +
    + When the PostScript 'close' operator closes the DCT filter, we free the
    + memory associated with the stream state in the finalize routine. But the
    + PostScript file ref is still pointing at it, and when we grestore, the
    + finalize routine gets called again. Because the routine doesn't check for
    + NULL pointers before freeing, and indeed doesn't NULL the pointers after it
    + does free them, this leads to us freeing memory which has already been
    + freed.
    +
    + Apparently we've already fixed a number of similar problems in finalize
    + routines, probably caused by people not realising a finalize routine could
    + (surprisingly) be called more than once.
    +
    + In this commit we set the pointers to null after feeing the memory, and
    + check for null pointers before attempting to free the memory, and before
    + attempting to dereference any pointers.
    +
    + No differences expected.
    +
    +gs/base/sdctc.c
    +gs/base/stream.c
    +

    +

    +
    +

    2014-09-27 09:05:54 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +9ef2c8188a86c5e19c93a38bb01b9297200bd896 +

    +

    + Bug 695543 - gs %stdin segfaults
    +
    + In zopen_file() when we're opening a Postscript device, ensure that we set the
    + "state" entry in the iodev structure before calling the device specific "open"
    + method - as we do elsewhere in the same circumstances. That is required to
    + properly access devices like "%stdin" and co.
    +
    + No cluster differences.
    +
    +gs/psi/zfile.c
    +

    +

    +
    +

    2014-09-26 09:56:40 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +97ee68c17fd8709b4509b394b721524b7777c3bb +

    +

    + Bug 695539: glyph mapping - handle "missing" codepoints
    +
    + When extending the glyph mapping in a font, the original code for adding the
    + codepoint to the font could assume the codepoint was valid as it was always
    + read from the Adobe Glyph List. But I added code to "parse" a codepoint from
    + the special "uniXXXX" type names, and that breaks that assumption.
    +
    + Handle the case where we reach that point with codepoint that doesn't exist in
    + the AGL.
    +
    + No cluster differences.
    +
    +gs/Resource/Init/gs_ttf.ps
    +gs/Resource/Init/gs_type1.ps
    +

    +

    +
    +

    2014-09-25 23:42:50 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +0c677ef110bb53460062da7586e37a37ea6eae52 +

    +

    + Fix Bug #695535 Page not cleared upon resolution setting.
    +
    + Somewhat puzzling this hasn't come up before but PCL was changing the
    + resolution of a PCL job upon receiving a PJL command without erasing
    + the page. If the resolution is set on the command line or the device
    + default is used the normal page erasing happens with the job's
    + resolution already set.
    +
    +pcl/pcjob.c
    +pcl/pcl.mak
    +

    +

    +
    +

    2014-09-25 09:47:14 -0700 + +
    Ray Johnston <ray.johnston@artifex.com>
    +53d8252202f860398be69a59d6a6da80aca551ce +

    +

    + Fix typo when closing bfile and cfile. Thanks to Norbert Janssen.
    +
    +gs/base/gxclthrd.c
    +

    +

    +
    +

    2014-09-23 07:47:00 -0700 + +
    Ray Johnston <ray.johnston@artifex.com>
    +75a183ff51daebf8c3835f3d6e5107d70061a8ce +

    +

    + Change the -Z: output to report parse done as well as page render done.
    +
    + This corresponds more closely the the information available with -Z: from
    + gs which provides Outputpage start and Outputpage end times. This is useful
    + for the 'overview' timing analysis, such as with bug 695374.
    +
    +pcl/pctop.c
    +pl/plmain.c
    +

    +

    +
    +

    2014-09-23 09:18:46 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +98b066aad13281ce75471163959db727a5a9da58 +

    +

    + pdfwrite - fix a warning and an assignment to conditional
    +
    + Removing the assignment of a return value to code in order to eliminate a
    + compiler warning.
    +
    + The test of code against gs_error_interrupt was accidentally written as an
    + assignment, fixing this causes progressions in:
    + Bug690534.pdf
    + 586_-_missing_images_gs_SMask_not_applied.pdf
    + multiply_luminosity_masks_ignored.pdf
    +
    + These are progressions over 9.15 as well.
    +
    +gs/devices/vector/gdevpdft.c
    +

    +

    +
    +

    2014-09-08 14:47:15 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +2454c0d599f3abdff7d7b002d54dd58549e948de +

    +

    + Update docs, versions and dates for release candidate.
    +
    + Update docs, dates etc for second release candidate.
    +
    + Update stuff for release
    +
    +gs/base/version.mak
    +gs/doc/API.htm
    +gs/doc/C-style.htm
    +gs/doc/Commprod.htm
    +gs/doc/DLL.htm
    +gs/doc/Deprecated.htm
    +gs/doc/Details8.htm
    +gs/doc/Details9.htm
    +gs/doc/Develop.htm
    +gs/doc/Devices.htm
    +gs/doc/Drivers.htm
    +gs/doc/Fonts.htm
    +gs/doc/Helpers.htm
    +gs/doc/History1.htm
    +gs/doc/History2.htm
    +gs/doc/History3.htm
    +gs/doc/History4.htm
    +gs/doc/History5.htm
    +gs/doc/History6.htm
    +gs/doc/History7.htm
    +gs/doc/History8.htm
    +gs/doc/History9.htm
    +gs/doc/Install.htm
    +gs/doc/Issues.htm
    +gs/doc/Language.htm
    +gs/doc/Lib.htm
    +gs/doc/Make.htm
    +gs/doc/News.htm
    +gs/doc/Projects.htm
    +gs/doc/Ps-style.htm
    +gs/doc/Ps2epsi.htm
    +gs/doc/Ps2pdf.htm
    +gs/doc/Ps2ps2.htm
    +gs/doc/Psfiles.htm
    +gs/doc/Readme.htm
    +gs/doc/Release.htm
    +gs/doc/SavedPages.htm
    +gs/doc/Source.htm
    +gs/doc/Unix-lpr.htm
    +gs/doc/Use.htm
    +gs/doc/WhatIsGS.htm
    +gs/doc/Xfonts.htm
    +gs/doc/gs-vms.hlp
    +gs/doc/thirdparty.htm
    +gs/man/dvipdf.1
    +gs/man/font2c.1
    +gs/man/gs.1
    +gs/man/gslp.1
    +gs/man/gsnd.1
    +gs/man/pdf2dsc.1
    +gs/man/pdf2ps.1
    +gs/man/pf2afm.1
    +gs/man/pfbtopfa.1
    +gs/man/printafm.1
    +gs/man/ps2ascii.1
    +gs/man/ps2epsi.1
    +gs/man/ps2pdf.1
    +gs/man/ps2pdfwr.1
    +gs/man/ps2ps.1
    +gs/man/wftopfa.1
    +

    +

    +
    +

    2014-09-22 16:08:37 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +fd5858999c4117ef16f8127497bcc329e4006833 +

    +

    + accidentally left a line out of ee3d09
    +
    + Due to finger trouble, missed this line off the last commit
    +
    +gs/devices/vector/gdevpdft.c
    +

    +

    +
    +

    2014-09-22 16:06:01 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +ee3d09d4efed339d15d6168f3ef72516d3391576 +

    +

    + pdfwrite - handle transparency mask of type TRANSPARENCY_MASK_None
    +
    + Bug #695482 "Regression: empty PDF files written starting with ea6290b302598f13e7fb4c29aff73657989e693d"
    +
    + commit ea6290b302598f13e7fb4c29aff73657989e693d introduced this type of
    + transparency mask, which is *not* concluded with an end transparency group.
    + Because pdfwrite didn't expect this, it led to 0 length output PDF files.
    +
    + This commit restores the functionality, it does not (apparently) produce
    + correct output from the test file using pdfwrite though.
    +
    + The differences here are all progressions.
    +
    +gs/devices/vector/gdevpdft.c
    +

    +

    +
    +

    2014-09-22 14:34:55 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +a1a6d76aae77b28bfd805f06df4a1a9537fbc139 +

    +

    + remove some C++ comments (and some other commented code)
    +
    +gs/devices/vector/gdevpdte.c
    +

    +

    +
    +

    2014-09-22 13:28:50 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +37837c01c7ca8461e9f458c061e27990dd94ad41 +

    +

    + remove an unused variable to silence a compiler warning
    +
    +gs/devices/gxfcopy.c
    +

    +

    +
    +

    2014-09-22 10:42:29 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +202b0d827c4840410d01a6acb83c56277829f507 +

    +

    + pdfwrite - close dangling substreams at end of page
    +
    + Inspired by bug #695482 but not intended as a fix, and also by bug #695354
    +
    + If we fail to close a substream (possibly because the PDF interpreter throws
    + an error) then this leaves a text_state associated with the substream
    + dangling, and potentially referencing other freed memory which can lead
    + to a crash in the garbage collector. In addition we can end up writing an
    + empty PDF file.
    +
    + This commit closes any substreams which are still open when a page is written
    + which ensures the memory is cleaned up, and that a valid (if broken) PDF
    + file gets written.
    +
    + Note that ps2write is (of course) different, and *expects* to have a substream
    + open at the end of the page, so in this case we have to close the page and then
    + clean up any dangling substreams afterwards.
    +
    + Although this appears to 'fix' bug #695482 its not a proper fix.
    +
    + No differences expected.
    +
    +gs/devices/vector/gdevpdf.c
    +

    +

    +
    +

    2014-09-22 08:51:23 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +9e5c21512649090ae563b584caec32fb6fdc2bb9 +

    +

    + pdfwrite - free associated text state when closing a substream
    +
    + When we open a substream, we create a text state, but we did not prevoously
    + free the text state when closing the substream, which could lead to memory
    + leaks or if using the '%d' syntax for per-page PDF output, could lead to
    + crashes in the garbage collector.
    +
    + No differences expected
    +
    +gs/devices/vector/gdevpdti.c
    +

    +

    +
    +

    2014-09-22 08:49:39 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +1cd582c342d1d754d85f5d89f39cbe672b9d9c67 +

    +

    + pdfwrite - free FDArray from copied CIDFOnts when copy is freed
    +
    + further to commit 26a22e which freed copied descendant fonts from a copy of
    + a CIDFont when it was freed, here we free the FDArray itself from teh copy.
    +
    + No differences expected
    +
    +gs/devices/gxfcopy.c
    +

    +

    +
    +

    2014-09-19 13:38:25 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +26a22e6fd3dd42fdcaae568276f82b40d746bce9 +

    +

    + Free copied descendant font(s) when freeing a copied CIDFont
    +
    + When we copy a CIDFont (other than a TrueType CIDFont) we also copy the
    + descendant fonts. But when we free them (gs_free_copied_font) we only free
    + the CIDFont, leaving the descendants dangling. This can cause problems
    + (seg fault) when we garbage collect the descendants.
    +
    + Here we free the descendants as well. This is complicated by the fact that
    + the parent CIDFont 'glyphs' space is shared by all the descendants, so
    + we *don't* want to free that when we free the descendant.
    +
    + No differences expected
    +
    +gs/devices/gxfcopy.c
    +

    +

    +
    +

    2014-09-17 14:02:17 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +bb35d2d7bc93b1fff5e182be370d64b24129a09e +

    +

    + Bug 695490: GL stick font seg fault
    +
    + Initialise width cache values for stick font and 531 font.
    +
    + No cluster differences.
    +
    +pcl/pglabel.c
    +

    +

    +
    +

    2014-09-17 13:46:17 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +d4c1bd25347e42d0668a73a57bd9aa8ca904be1a +

    +

    + Bug 695491: parallel make fail due to pconfig.h
    +
    + Create a target for pconfig.h and have it as a dependency where required,
    + rather than have each individual target that needs it copy pconf.h to
    + pconfig.h which could cause a "collision" during a parallel build.
    +
    + No cluster differences.
    +
    +pcl/pcl.mak
    +pl/pl.mak
    +psi/psi.mak
    +pxl/pxl.mak
    +xps/xps.mak
    +

    +

    +
    +

    2014-09-17 12:23:05 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +ec56638c8cc6176c2ee935a7ba43cd0af2a02fd1 +

    +

    + Bug 695492: fix seg fault regression with '-h'
    +
    + When called with the '-h' parameter, we don't fully initialise the PS
    + interpreter. In which case, we shouldn't try to use the PS interpreter
    + when we shut down.
    +
    + No cluster differences.
    +
    +gs/psi/imain.c
    +

    +

    +
    +

    2014-09-15 19:33:32 -0700 + +
    Ray Johnston <ray.johnston@artifex.com>
    +b66f287128616340b68243bf5384acac066db561 +

    +

    + Fix colors for -sDEVICE=bitrgb -dGrayValues=16
    +
    + This device was using the default, but that code was encoding the
    + color as 5x5x5 RGB since the bit device selects a color_info.depth
    + of 16. Import the logic and fix it for the 4-bit RGB case (12-bit
    + values in 16-bit pixels).
    +
    +gs/devices/gdevbit.c
    +

    +

    +
    +

    2014-09-15 17:51:56 -0700 + +
    Ray Johnston <ray.johnston@artifex.com>
    +10d517b4954e5adaaf7cc8d823db68e8e1b157f3 +

    +

    + Fix the -dRGB option to work with BITS = 1, 2, 4 or 8
    +
    + Note that the -sDEVICE=bitrgb -dGrayValues=16 was broken due to
    + improper encoding. This will be fixed in a separate commit.
    +
    +gs/lib/viewraw.ps
    +

    +

    +
    +

    2014-09-15 08:59:08 -0700 + +
    Ray Johnston <ray.johnston@artifex.com>
    +eb486a42382152c5d7448eabfa7e7a40f8226c81 +

    +

    + Improvements for viewraw.ps with RGB input for 1 and 2 bpc.
    +
    + Note BITS=4 is still not supported.
    +
    +gs/lib/viewraw.ps
    +

    +

    +
    +

    2014-09-16 14:01:36 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +2e619c7a51e45c05c3d02792c3353b3c731f3884 +

    +

    + pdfwrite - mark freshly opened device as 'open'
    +
    + When using the '%d' format for output files, the pdf_output_page() routine
    + closes and reopens the pdfwrite device (to flush the device, creating
    + a PDF file). However, it doesn't mark the 'is_open' member of the device,
    + and pdfwrite doesn't do that itself, relying on the caller (normally
    + gs_opendevice()) to set the flag.
    +
    + Later we get a setpagedevice, this executes .setdevice which calls
    + gs_setdevice_no_erase() which checks dev->is_open and if it is not open
    + then it opens it. This causes pdf_open to allocate all kinds of new
    + memory areas, without freeing the old ones, as well as temporary files and
    + possibly other structures/memory allocations.
    +
    + Surprisingly this doesn't actually seem to cause a problem, but its not
    + right, and surely will cause problems one day, its definitely causing
    + memory leaks in non-GC interpreters.
    +
    + So this tiny commit just sets the flag is_open when we open the device in
    + pdf_output_page.
    +
    + No differences expected
    +
    +gs/devices/vector/gdevpdf.c
    +

    +

    +
    +

    2014-09-15 11:02:09 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +d0816120fdae4e9592269d98e933cbdf99faad5e +

    +

    + Bug 695483: disable BGPrint before we shutdown interpreter
    +
    + Before we start the process of shutting down the PS interpreter, disable BGPrint
    + (and set NumRenderingThreads to 0, just for safety). If we don't do this, the
    + "parent" rendering thread will continue preparations for the next page whilst
    + we shutdown the interpreter, and will thus attempt to access some objects
    + subject to garbage collection (such as the I/O device table).
    +
    + Additionally, when a device switches from BGPrint enabled to disabled, make sure
    + we tear down the rendering thread(s) and get rid off the BGPrint related data.
    +
    + No cluster differences.
    +
    +gs/base/gdevprn.c
    +gs/psi/imain.c
    +

    +

    +
    +

    2014-09-15 10:21:18 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +0d22694c3798bf13120be35322b7984fd2296e0f +

    +

    + Bug 695486: initialise c_alone in current chunk (cc)
    +
    + When we (re-)initialise an allocator, we have to initialise the contents of the
    + current chunk (cc) entry - initialise to "false" since that's the common case.
    +
    + No cluster differences.
    +
    +gs/base/gsalloc.c
    +

    +

    +
    +

    2014-09-15 15:19:46 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +a7b8c4f39f0f8f1f0872c2ae8faff1ddd35cbdb2 +

    +

    + pdfwrite - free pdfwrite's 'complete' font copy if required
    +
    + Bug #695484 "Regression: seg fault with debug build in pdfwrite starting with ceb5e2f006bf554a56701ee2f2c228841b324a4b"
    +
    + The problem was caused because pdfwrite can maintain two copies of a font,
    + a subset and a complete copy, depending on settings. We were properly freeing
    + the subset, but not the complete copy.
    +
    + This has been a long-standing undetected memory leak, but only on systems
    + without garbage collection, because the copied font is subject to GC, and
    + indeed this was causing the actual fault. When we restored at the end of the
    + file, the copied font was garbage collected, which caused it to try nd free
    + any glyphs from its font cache. But the font cache is now (since the commit
    + in the bug title) pointing at the pdfwrite font cache, and that has already
    + been freed before we get to the end of job restore, resutling in a seg fault.
    +
    + Here we free the complete font copy if one has been allocated.
    +
    + No differences expected.
    +
    +gs/devices/vector/gdevpdtd.c
    +

    +

    +
    +

    2014-09-14 23:00:08 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +0614577faa0b89574b0d9c6c9cabe77398183a40 +

    +

    + Fix Bug 695481 - Barcode font scaled incorrectly.
    +
    + The downloaded font in this file (the barcode) used the typeface
    + family designation of 0 which is reserved for the lineprinter font.
    + Our interpreter scales lineprinter specially and identifies
    + lineprinter with its typeface number (0), thus the barcode font was
    + scaled as if it were the lineprinter font. Now we check the typeface
    + number is 0 and the font is internal which will uniquely identify the
    + lineprinter font and not confuse other fonts with it.
    +
    + Technically the font is broken and shouldn't be accepted, the typeface
    + family numbers documented by HP should not be reused by downloaded
    + fonts, but HP printers seem to print the job.
    +
    +pcl/pctext.c
    +

    +

    +
    +

    2014-09-12 14:49:08 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +94786ac00b285be997aaddbc689180478a47e270 +

    +

    + Get rid of last vestiges of pswrite....
    +
    + Remove epswrite (the final "subdevice" of pswrite) and references to it.
    +
    + Also remove the gdevps.c source file.
    +
    + Cluster differences only in files that enumerate the devices list, for
    + example:
    + 430-01.ps
    +
    +doc/who_owns_what.txt
    +gs/Makefile.in
    +gs/base/macos-mcp.mak
    +gs/base/macosx.mak
    +gs/base/openvms.mak
    +gs/base/openvms.mmk
    +gs/base/unix-gcc.mak
    +gs/base/unixansi.mak
    +gs/configure.ac
    +gs/devices/devs.mak
    +gs/devices/vector/gdevps.c
    +gs/lib/eps2eps
    +gs/lib/eps2eps.bat
    +gs/lib/eps2eps.cmd
    +gs/man/ps2ps.1
    +gs/psi/msvc.mak
    +gs/psi/os2.mak
    +gs/toolbin/pre.chk
    +

    +

    +
    +

    2014-09-10 11:57:10 -0700 + +
    Ray Johnston <ray.johnston@artifex.com>
    +ea6290b302598f13e7fb4c29aff73657989e693d +

    +

    + Fix Bug 695471, cust 532. /SMask /None did not remove prior SMask
    +
    + The 'gssmask' proc in pdf_draw.ps doesn't remove a previous SMask
    + when the ExtGState is set to /SMask /None. Change the logic to
    + issue a "dummy" .begintransparencymaskgroup (that does NOT have a
    + corresponding .endtransparencymask) and add handling for this type
    + of SMask in the code. This does not result in a colorspace change,
    + but only frees the tos maskbuf. Seen with MSN_Chrome.pdf
    +
    +gs/Resource/Init/pdf_draw.ps
    +gs/base/gdevp14.c
    +gs/base/gstparam.h
    +gs/base/gstrans.c
    +

    +

    +
    +

    2014-08-27 10:08:45 -0700 + +
    Ray Johnston <ray.johnston@artifex.com>
    +3b2d19e8a459610ba50560ee004eae8736644dc1 +

    +

    + Add lib/viewraw.ps utility to view "raw" files
    +
    + An extended version of lib/viewcmyk.ps so that "raw" output from
    + bit, bitrgb or bitcmyk can be displayed or converted. For example:
    + gswin32c -sDEVICE=bitrgb -dGrayValues=256 -o x.rgb examples/tiger.eps
    + can be viewed with:
    + gswin32c -dRGB -dBITS=8 -- lib/viewraw.ps x.rgb 612
    +
    +gs/lib/viewraw.ps
    +

    +

    +
    +

    2014-09-08 13:52:07 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +fcb0c5ee27b9d5a769545f547ee7afdcf8e9829f +

    +

    + Bump version.
    +
    + Usual cluster differences.....
    +
    +gs/Resource/Init/gs_init.ps
    +gs/base/version.mak
    +

    +

    +
    +

    2014-09-22 11:12:44 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +8b2e4263a230d0e7cb262532e0f347976f4b289a +

    +

    + Update stuff for release
    +
    +gs/base/gscdef.c
    +gs/base/version.mak
    +gs/doc/API.htm
    +gs/doc/C-style.htm
    +gs/doc/Commprod.htm
    +gs/doc/DLL.htm
    +gs/doc/Deprecated.htm
    +gs/doc/Details8.htm
    +gs/doc/Details9.htm
    +gs/doc/Develop.htm
    +gs/doc/Devices.htm
    +gs/doc/Drivers.htm
    +gs/doc/Fonts.htm
    +gs/doc/Helpers.htm
    +gs/doc/History1.htm
    +gs/doc/History2.htm
    +gs/doc/History3.htm
    +gs/doc/History4.htm
    +gs/doc/History5.htm
    +gs/doc/History6.htm
    +gs/doc/History7.htm
    +gs/doc/History8.htm
    +gs/doc/History9.htm
    +gs/doc/Install.htm
    +gs/doc/Issues.htm
    +gs/doc/Language.htm
    +gs/doc/Lib.htm
    +gs/doc/Make.htm
    +gs/doc/News.htm
    +gs/doc/Projects.htm
    +gs/doc/Ps-style.htm
    +gs/doc/Ps2epsi.htm
    +gs/doc/Ps2pdf.htm
    +gs/doc/Ps2ps2.htm
    +gs/doc/Psfiles.htm
    +gs/doc/Readme.htm
    +gs/doc/Release.htm
    +gs/doc/SavedPages.htm
    +gs/doc/Source.htm
    +gs/doc/Unix-lpr.htm
    +gs/doc/Use.htm
    +gs/doc/WhatIsGS.htm
    +gs/doc/Xfonts.htm
    +gs/doc/gs-vms.hlp
    +gs/doc/thirdparty.htm
    +gs/man/dvipdf.1
    +gs/man/font2c.1
    +gs/man/gs.1
    +gs/man/gslp.1
    +gs/man/gsnd.1
    +gs/man/pdf2dsc.1
    +gs/man/pdf2ps.1
    +gs/man/pf2afm.1
    +gs/man/pfbtopfa.1
    +gs/man/printafm.1
    +gs/man/ps2ascii.1
    +gs/man/ps2epsi.1
    +gs/man/ps2pdf.1
    +gs/man/ps2pdfwr.1
    +gs/man/ps2ps.1
    +gs/man/wftopfa.1
    +

    +

    +
    +

    2014-09-17 12:23:05 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +404e71e01ad665deb7435fe37aad6034380297e3 +

    +

    + Bug 695492: fix seg fault regression with '-h'
    +
    + When called with the '-h' parameter, we don't fully initialise the PS
    + interpreter. In which case, we shouldn't try to use the PS interpreter
    + when we shut down.
    +
    + No cluster differences.
    +
    +gs/psi/imain.c
    +

    +

    +
    +

    2014-09-16 11:48:12 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +96a55a20f5b0d852d2118a1ac318293c6a0f716e +

    +

    + Update docs, dates etc for second release candidate.
    +
    +gs/base/gscdef.c
    +gs/doc/API.htm
    +gs/doc/C-style.htm
    +gs/doc/Commprod.htm
    +gs/doc/DLL.htm
    +gs/doc/Deprecated.htm
    +gs/doc/Details8.htm
    +gs/doc/Details9.htm
    +gs/doc/Develop.htm
    +gs/doc/Devices.htm
    +gs/doc/Drivers.htm
    +gs/doc/Fonts.htm
    +gs/doc/Helpers.htm
    +gs/doc/History1.htm
    +gs/doc/History2.htm
    +gs/doc/History3.htm
    +gs/doc/History4.htm
    +gs/doc/History5.htm
    +gs/doc/History6.htm
    +gs/doc/History7.htm
    +gs/doc/History8.htm
    +gs/doc/History9.htm
    +gs/doc/Install.htm
    +gs/doc/Issues.htm
    +gs/doc/Language.htm
    +gs/doc/Lib.htm
    +gs/doc/Make.htm
    +gs/doc/News.htm
    +gs/doc/Projects.htm
    +gs/doc/Ps-style.htm
    +gs/doc/Ps2epsi.htm
    +gs/doc/Ps2pdf.htm
    +gs/doc/Ps2ps2.htm
    +gs/doc/Psfiles.htm
    +gs/doc/Readme.htm
    +gs/doc/Release.htm
    +gs/doc/SavedPages.htm
    +gs/doc/Source.htm
    +gs/doc/Unix-lpr.htm
    +gs/doc/Use.htm
    +gs/doc/WhatIsGS.htm
    +gs/doc/Xfonts.htm
    +gs/doc/gs-vms.hlp
    +gs/doc/thirdparty.htm
    +gs/man/dvipdf.1
    +gs/man/font2c.1
    +gs/man/gs.1
    +gs/man/gslp.1
    +gs/man/gsnd.1
    +gs/man/pdf2dsc.1
    +gs/man/pdf2ps.1
    +gs/man/pf2afm.1
    +gs/man/pfbtopfa.1
    +gs/man/printafm.1
    +gs/man/ps2ascii.1
    +gs/man/ps2epsi.1
    +gs/man/ps2pdf.1
    +gs/man/ps2pdfwr.1
    +gs/man/ps2ps.1
    +gs/man/wftopfa.1
    +

    +

    +
    +

    2014-09-15 11:02:09 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +551d7dd426fe8ab7f2c0c9d90339784e2b643bad +

    +

    + Bug 695483: disable BGPrint before we shutdown interpreter
    +
    + Before we start the process of shutting down the PS interpreter, disable BGPrint
    + (and set NumRenderingThreads to 0, just for safety). If we don't do this, the
    + "parent" rendering thread will continue preparations for the next page whilst
    + we shutdown the interpreter, and will thus attempt to access some objects
    + subject to garbage collection (such as the I/O device table).
    +
    + Additionally, when a device switches from BGPrint enabled to disabled, make sure
    + we tear down the rendering thread(s) and get rid off the BGPrint related data.
    +
    + No cluster differences.
    +
    +gs/base/gdevprn.c
    +gs/psi/imain.c
    +

    +

    +
    +

    2014-09-15 10:21:18 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +51b9c7dc2a471b9c3dfe6400c0a55d90db4fec16 +

    +

    + Bug 695486: initialise c_alone in current chunk (cc)
    +
    + When we (re-)initialise an allocator, we have to initialise the contents of the
    + current chunk (cc) entry - initialise to "false" since that's the common case.
    +
    + No cluster differences.
    +
    +gs/base/gsalloc.c
    +

    +

    +
    +

    2014-09-15 15:19:46 +0100 + +
    Ken Sharp <ken.sharp@artifex.com>
    +fec643c7e29810c0c5381bd86ba31ff3595bc9ba +

    +

    + pdfwrite - free pdfwrite's 'complete' font copy if required
    +
    + Bug #695484 "Regression: seg fault with debug build in pdfwrite starting with ceb5e2f006bf554a56701ee2f2c228841b324a4b"
    +
    + The problem was caused because pdfwrite can maintain two copies of a font,
    + a subset and a complete copy, depending on settings. We were properly freeing
    + the subset, but not the complete copy.
    +
    + This has been a long-standing undetected memory leak, but only on systems
    + without garbage collection, because the copied font is subject to GC, and
    + indeed this was causing the actual fault. When we restored at the end of the
    + file, the copied font was garbage collected, which caused it to try nd free
    + any glyphs from its font cache. But the font cache is now (since the commit
    + in the bug title) pointing at the pdfwrite font cache, and that has already
    + been freed before we get to the end of job restore, resutling in a seg fault.
    +
    + Here we free the complete font copy if one has been allocated.
    +
    + No differences expected.
    +
    +gs/devices/vector/gdevpdtd.c
    +

    +

    +
    +

    2014-09-14 23:00:08 -0600 + +
    Henry Stiles <henry.stiles@artifex.com>
    +d10d0b9f9a4c11ef11f08849cf0f0f0405ada6c6 +

    +

    + Fix Bug 695481 - Barcode font scaled incorrectly.
    +
    + The downloaded font in this file (the barcode) used the typeface
    + family designation of 0 which is reserved for the lineprinter font.
    + Our interpreter scales lineprinter specially and identifies
    + lineprinter with its typeface number (0), thus the barcode font was
    + scaled as if it were the lineprinter font. Now we check the typeface
    + number is 0 and the font is internal which will uniquely identify the
    + lineprinter font and not confuse other fonts with it.
    +
    + Technically the font is broken and shouldn't be accepted, the typeface
    + family numbers documented by HP should not be reused by downloaded
    + fonts, but HP printers seem to print the job.
    +
    +pcl/pctext.c
    +

    +

    +
    +

    2014-09-12 14:49:08 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +f4034b2aa85e685c66e98be8c31c511cd9a5169e +

    +

    + Get rid of last vestiges of pswrite....
    +
    + Remove epswrite (the final "subdevice" of pswrite) and references to it.
    +
    + Also remove the gdevps.c source file.
    +
    + Cluster differences only in files that enumerate the devices list, for
    + example:
    + 430-01.ps
    +
    +doc/who_owns_what.txt
    +gs/Makefile.in
    +gs/base/macos-mcp.mak
    +gs/base/macosx.mak
    +gs/base/openvms.mak
    +gs/base/openvms.mmk
    +gs/base/unix-gcc.mak
    +gs/base/unixansi.mak
    +gs/configure.ac
    +gs/devices/devs.mak
    +gs/devices/vector/gdevps.c
    +gs/lib/eps2eps
    +gs/lib/eps2eps.bat
    +gs/lib/eps2eps.cmd
    +gs/man/ps2ps.1
    +gs/psi/msvc.mak
    +gs/psi/os2.mak
    +gs/toolbin/pre.chk
    +

    +

    +
    +

    2014-08-27 10:08:45 -0700 + +
    Ray Johnston <ray.johnston@artifex.com>
    +bbe97e4cfc3d725f42ae34125c716902faf72977 +

    +

    + Add lib/viewraw.ps utility to view "raw" files
    +
    + An extended version of lib/viewcmyk.ps so that "raw" output from
    + bit, bitrgb or bitcmyk can be displayed or converted. For example:
    + gswin32c -sDEVICE=bitrgb -dGrayValues=256 -o x.rgb examples/tiger.eps
    + can be viewed with:
    + gswin32c -dRGB -dBITS=8 -- lib/viewraw.ps x.rgb 612
    +
    +gs/lib/viewraw.ps
    +

    +

    +
    +

    2014-09-08 14:47:15 +0100 + +
    Chris Liddell <chris.liddell@artifex.com>
    +540a228f026bf3abd288d5e88a7ef74345600380 +

    +

    + Update docs, versions and dates for release candidate.
    +
    +gs/base/gscdef.c
    +gs/doc/API.htm
    +gs/doc/C-style.htm
    +gs/doc/Commprod.htm
    +gs/doc/DLL.htm
    +gs/doc/Deprecated.htm
    +gs/doc/Details8.htm
    +gs/doc/Details9.htm
    +gs/doc/Develop.htm
    +gs/doc/Devices.htm
    +gs/doc/Drivers.htm
    +gs/doc/Fonts.htm
    +gs/doc/Helpers.htm
    +gs/doc/History1.htm
    +gs/doc/History2.htm
    +gs/doc/History3.htm
    +gs/doc/History4.htm
    +gs/doc/History5.htm
    +gs/doc/History6.htm
    +gs/doc/History7.htm
    +gs/doc/History8.htm
    +gs/doc/History9.htm
    +gs/doc/Install.htm
    +gs/doc/Issues.htm
    +gs/doc/Language.htm
    +gs/doc/Lib.htm
    +gs/doc/Make.htm
    +gs/doc/News.htm
    +gs/doc/Projects.htm
    +gs/doc/Ps-style.htm
    +gs/doc/Ps2epsi.htm
    +gs/doc/Ps2pdf.htm
    +gs/doc/Ps2ps2.htm
    +gs/doc/Psfiles.htm
    +gs/doc/Readme.htm
    +gs/doc/Release.htm
    +gs/doc/SavedPages.htm
    +gs/doc/Source.htm
    +gs/doc/Unix-lpr.htm
    +gs/doc/Use.htm
    +gs/doc/WhatIsGS.htm
    +gs/doc/Xfonts.htm
    +gs/doc/gs-vms.hlp
    +gs/doc/thirdparty.htm
    +gs/man/dvipdf.1
    +gs/man/font2c.1
    +gs/man/gs.1
    +gs/man/gslp.1
    +gs/man/gsnd.1
    +gs/man/pdf2dsc.1
    +gs/man/pdf2ps.1
    +gs/man/pf2afm.1
    +gs/man/pfbtopfa.1
    +gs/man/printafm.1
    +gs/man/ps2ascii.1
    +gs/man/ps2epsi.1
    +gs/man/ps2pdf.1
    +gs/man/ps2pdfwr.1
    +gs/man/ps2ps.1
    +gs/man/wftopfa.1
    +

    +

    +
    +

    Version 9.15 (2014-09-22)

    This is the eleventh full release in the stable 9.x series, and is @@ -107070,7 +112131,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

    -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Install.htm ghostscript-9.16~dfsg~0/doc/Install.htm --- ghostscript-9.15+dfsg/doc/Install.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Install.htm 2015-03-30 08:21:24.000000000 +0000 @@ -178,68 +178,48 @@

    Installing Ghostscript on MS Windows

    -We usually distribute Ghostscript releases for Windows as self-extracting -archive files, since this is the most convenient form for users. These -files can also be unpacked as if they were plain zip files. +We usually distribute Ghostscript releases for Windows as a binary installer, +for the convenience of most users.

    Windows 3.1 (16-bit)

    The last version to run on 16-bit Windows 3.1 was Ghostscript 4.03. -

    Windows 95, 98, Me, NT4, 2000, XP, 2003 or Vista (32-bit)

    +

    Windows 95, 98, Me

    -The self-extracting archive is normally named +The last version to be available as a binary for Windows 95/98/Me was 8.71. Although +building from source with Visual Studio 2003 should produce a working binary for those +versions. + +

    Windows NT4, 2000, XP, 2003 or Vista (32-bit)

    +

    +The installer is normally named gs###w32.exe, -where ### is the release number (e.g., 650 for Ghostscript 6.50, -700 for Ghostscript 7.00). +where ### is the release number (e.g., 871 for Ghostscript 8.71, +910 for Ghostscript 9.10).

    Windows XP x64 edition, 2003 or Vista (64-bit)

    -The x64 self-extracting archive is normally named +The x64 installer is normally named gs###w64.exe This is for 64-bit Windows operating systems based on the x64 instruction set. Do not use this on 64-bit processors running 32-bit Windows.

    Installing

    -To install a self-extracting Ghostscript archive on Windows, -you need just this self-extracting archive file. -Run this file to install Ghostscript. - -

    -Alternatively, if you have the zip file, unzip it to a temporary -directory then run the included setupgs.exe. -After the setup program has finished, remove the temporary files. - -

    The setupgs.exe executable in the zip file (and also -in the self-extracting archive) supports a primitive form of -unattended installation: if it is invoked with exactly one argument, -that one argument is treated as the target installation directory for -unattended silent batch installation. +To install Ghostscript on Windows, you should run the installer executable. -

    The NSIS-based installer (see also Release.htm +

    The installer is NSIS-based (see also Release.htm) and supports a few standard NSIS options: /NCRC disables the CRC check, /S runs the installer or uninstaller silently, /D sets the default installation directory (It must be the last parameter used in the command line and must not contain any quotes, even if the path -contains spaces. Only absolute paths are supported.) - -

    -After installing Ghostscript, it is strongly recommended that you -install the GSview previewer, -which provides an easier to use graphical interface for Ghostscript. -Information on GSview is available from: - -

    -http://www.cs.wisc.edu/~ghost/gsview/ -
    +contains spaces. Only absolute paths are supported).

    General Windows configuration

    -The archive includes files in these subdirectories: +The installer includes files in these subdirectories:

    gs#.##\bin @@ -287,34 +267,8 @@

    -See "Using fonts from Adobe Type Manager" below for -information about using Adobe Type Manager, Adobe Type Basics, or Adobe -Acrobat fonts. If your system uses TrueType fonts, you can get them -converted to a Ghostscript-compatible format at the time you select your -"printer" by doing the following: - -

      -
    1. Open control panel and double-click on the "Printers" icon. -
    2. Select your PostScript printer. -
    3. Choose Setup. -
    4. Choose Options. -
    5. Choose Advanced. -
    6. At the top of the dialog box you will see TrueType Fonts Send to -Printer As: Choose (drop-down menu) Adobe Type 1. -
    7. Uncheck Use Printer Fonts for All TrueType Fonts and Use -Substitution -Table. -
    8. OK. -
    9. OK etc. -
    - -

    -That's it! Your TrueType fonts will automatically be downloaded in your -PostScript file for Ghostscript to use. - -

    For printer devices, the default output is the default printer. -This can be modified as follows. +This can be modified as follows:

    @@ -358,51 +312,32 @@

-The Ghostscript setup program will create registry values +The Ghostscript installer will create registry values for the environment variables GS_LIB and GS_DLL. - -

-Using fonts from Adobe Type Manager

-

-If you have Adobe Type Manager -(ATM) fonts installed on your system, and you wish to use them with -Ghostscript, you may wish to replace the FONTMAP file with -FONTMAP.ATM, and to add to the environment variable -GS_LIB the name of the directory where the fonts are located -(see Use.htm for more information -about GS_LIB). Before you -do this, please read carefully the license that accompanies the ATM fonts; -we take no responsibility for any possible violations of such licenses. -Similarly, if you have Adobe Type Basics, you may wish to replace -FONTMAP with FONTMAP.ATB. Finally, if you -have neither ATM nor ATB but you have Adobe Acrobat installed, you can use -the Acrobat fonts in place of the ones provided with Ghostscript by adding -the Acrobat fonts directory to GS_FONTPATH and removing -these fonts from FONTMAP: - -

-Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique, Helvetica, -Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique, Symbol, Times-Bold, -Times-BoldItalic, Times-Italic, Times-Roman, ZapfDingbats -
- -

Uninstalling Ghostscript on Windows

To uninstall Ghostscript, use the Control Panel, Add/Remove Programs and remove "Ghostscript #.##" and "Ghostscript Fonts". (The entries may be called "GPL Ghostscript" or "AFPL Ghostscript", rather than just -"Ghostscript", depending on what version of Ghostscript was installed.) - - +"Ghostscript", depending on what version of Ghostscript was installed). +Alternatively, an uninstall shortcut is also available in the Start Menu +group.


Installing Ghostscript on OpenVMS

+Support for OpenVMS has stagnated (and almost certainly bit-rotted), and +as the core development team has no access to an OpenVMS environment, we +are unable to bring it up to date. We will consider patches from contributors +if any wish to take on the task of getting it working again. Given the +very limited appeal of OpenVMS these days, however, we are unlikely to consider +patches with invasive code changes. + +

You need the file GS.EXE to run Ghostscript on OpenVMS, and installing Ghostscript on an OpenVMS system requires building it first: please read how to build Ghostscript on VMS @@ -464,6 +399,14 @@

Installing Ghostscript on OS/2 2.x

+Support for OS/2 has stagnated (and almost certainly bit-rotted), and +as the core development team has no access to an OS/2 environment, we +are unable to bring it up to date. We will consider patches from contributors +if any wish to take on the task of getting it working again. Given the +very limited appeal of OS/2 these days, however, we are unlikely to consider +patches with invasive code changes. + +

The Ghostscript OS/2 implementation is designed for OS/2 2.1 or later. You need these files to run Ghostscript on OS/2: @@ -564,7 +507,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Issues.htm ghostscript-9.16~dfsg~0/doc/Issues.htm --- ghostscript-9.15+dfsg/doc/Issues.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Issues.htm 2015-03-30 08:21:24.000000000 +0000 @@ -439,7 +439,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Language.htm ghostscript-9.16~dfsg~0/doc/Language.htm --- ghostscript-9.15+dfsg/doc/Language.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Language.htm 2015-03-30 08:21:24.000000000 +0000 @@ -2431,7 +2431,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Lib.htm ghostscript-9.16~dfsg~0/doc/Lib.htm --- ghostscript-9.15+dfsg/doc/Lib.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Lib.htm 2015-03-30 08:21:24.000000000 +0000 @@ -861,7 +861,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

-Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Make.htm ghostscript-9.16~dfsg~0/doc/Make.htm --- ghostscript-9.15+dfsg/doc/Make.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Make.htm 2015-03-30 08:21:24.000000000 +0000 @@ -36,7 +36,6 @@

  • Selecting features and devices
  • Setting up "makefile"
  • MSys/Mingw @@ -689,7 +688,7 @@

    By default, most top level make files now default to compiling the initialization -files (lib/gs_init.ps, etc.) into the executable. To disable this, +files (Resource/Init/gs_init.ps, etc.) into the executable. To disable this, change the 1 to a 0 in the line

    @@ -697,19 +696,30 @@

    +Or, if you use the configure based Unix-style build, you can disable +COMPILE_INITS by adding the option --disable-compile-inits to the invocation +of configure +

    Files are now compiled into the executable as a %rom% file system that can be searched, opened, etc. as with the normal (%os%) file system. The data -is (mostly) compressed. The set of files built into the %rom% file system -is specified in the psi/psromfs.mak file. Refer to the file +is (mostly) compressed. Several of the initialisation files (those in Resource/Init) +are also converted to binary Postscript encoding, and "merged" into a single monolithic +file - this is done for both size and speed optimization. Files that are often customized for +individual installations (such as Fontmap and cidfmap) are not +merged into the single file and thus installation specific versions can be used. +

    +The set of files built into the %rom% file system +is specified in the psi/psromfs.mak file. By default the set +of files built into the rom file system comprises all the resource files +Ghostscript requires to run successfully (all the files under Resource +directory, and those under the iccprofiles directory). Refer to the file base/mkromfs.c for a description of the parameters that control source and destination pathnames, file enumeration exclusion, compression, etc.

    -While fonts normally are compiled into the executable using mkromfs -(above) from the Resource/Font/ directory, it is possible to compile Type 1 fonts -into the executable using an older method that converts Type 1 fonts into C code. -See Precompiling fonts. +Fonts normally are compiled into the executable using mkromfs +(above) from the Resource/Font/ directory..

    Similarly, Halftone resources can be compiled into the executable using @@ -721,62 +731,6 @@ do not require the PostScript interpreter and may be used with the graphics library alone. -

    GNU readline

    - -

    -AFPL Ghostscript does not include an interface to GNU readline. A user -contributed code for this purpose, which we spent significant time debugging -and then updating to track internal architectural changes in Ghostscript. -The contributor was willing to assign the copyright to Aladdin Enterprises -(the copyright holder of Ghostscript at the time), and to allow the code to -be distributed with the Aladdin Free Public License (AFPL) as well as the -GNU License (GPL). However, even though the GPL allows linking GPLed code -(such as the GNU readline library package) with non-GPLed code (such as all -the rest of AFPL Ghostscript) if one doesn't distribute the result, the Free -Software Foundation, creators of the GPL, have told us that in their -opinion, the GPL forbids distributing non-GPLed code that is merely -intended to be linked with GPLed code. We understand that FSF -takes this position in order to prevent the construction of software that is -partly GPLed and partly not GPLed, even though the text of the GPL does not -actually forbid this (it only forbids distribution of such -software). We think that FSF's position is legally questionable and not in -the best interest of users, but we do not have the resources to challenge -it, especially since FSF's attorney apparently supports it. Therefore, even -though we added the user-contributed interface to GNU readline in internal -Aladdin Ghostscript version 5.71 and had it working in version 5.93 (one of -the last beta versions before the 6.0 release), we removed it from the -Aladdin Ghostscript 6.0 distribution. - -

    -GPL Ghostscript distributions will include support for GNU readline. As -with other GPL Ghostscript components that are not included in AFPL -Ghostscript, the maintainers of Ghostscript will not attempt to run, link, -or even compile this code, or keep it current across changes in the rest of -Ghostscript. We will, however, welcome bug fixes or updates, and distribute -them with subsequent releases of GPL Ghostscript. - -

    -The first Ghostscript distribution to include GPL readline -support was GNU Ghostscript 6.0. Support has unfortunately -been spotty since then. - -

    -We put considerable work into making it possible for Ghostscript to use GNU -readline, including the creation and adjustment of internal software -interfaces specifically to serve this purpose. In principle, we should have -undone this work in AFPL Ghostscript, lest FSF object to it too as -intended to facilitate linking AFPL Ghostscript with GNU readline (as the -U.S. government has been said to do for code that merely provides APIs where -encryption may be added). However, we are willing to take this risk rather -than spend the time to undo the interface changes. - -

    -If you have comments or questions about this situation, please feel free to -contact the Free Software Foundation, authors of the GPL and copyright -holders of GNU readline, at gnu@gnu.org, -and/or Artifex Software, Inc., copyright holder of Ghostscript, at info@artifex.com. -

    Setting up "makefile"

    @@ -2971,7 +2925,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

    -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/News.htm ghostscript-9.16~dfsg~0/doc/News.htm --- ghostscript-9.15+dfsg/doc/News.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/News.htm 2015-03-30 08:21:24.000000000 +0000 @@ -56,42 +56,33 @@ -

    Version 9.15 (2014-09-22)

    +

    Version 9.16 (2015-03-30)

    -

    This is the eleventh full release in the stable 9.x series, and is +

    This is the twelfth full release in the stable 9.x series, and is primarily a maintenance release.

    Highlights in this release include:

    • -

      Ghostscript now supports the PDF security handler revision 6. -

    • -
    • -

      The pdfwrite and ps2write (and related) devices can now be forced to "flatten" -glyphs into "basic" marking operations (rather than writing fonts to the output), -by giving the -dNoOutputFonts command line option (defaults to "false") -

    • -
    • -

      PostScript programs can now use get_params or get_param to -determine if a page contains color markings by reading the pageneutralcolor -state from the device (so whether the page is "color" or "mono"). -

      Note that this is only accurate when in clist mode, so -dMaxBitmap=0 -and -dGrayDetection=true should both be used. -

    • -
    • -

      The pdfwrite device now supports Link annotations with GoTo and GoToR actions -

    • -
    • -

      The pdfwrite device now supports BMC/BDC/EMC pdfmarks -

    • -
    • -

      Regarding the new color management for the pdfwrite device introduced in the -previous release, the proscription on using the new color management when producing -PDF/A-1 compliant files is now lifted. -

      To reiterate, also, with the new color management implementation, using the -UseCIEColor option is strongly discouraged. -

      For further information on the new pdfwrite color management, -see: Color Conversion and Management +

      "LockColorants" command line option for tiffsep and psdcmyk devices. Specifying +-dLockColorants will restrict those devices to only the colorants list on the command +line (thus: -c "<< /SeparationColorNames [ /Cyan /Magenta /Yellow /Black /Violet /Orange] +/SeparationOrder [ /Cyan /Magenta /Yellow /Black /Violet /Orange]>> setpagedevice"), rather +than allowing the devices to add new colorants as encountered in the input. This is, obviously, +preferable for real printers, where only a certain of inks will be available. +

    • +
    • +

      Improved high level devices handling of Forms. Whilst High level devices (eg pdfwrite) +already checked Forms to see if they are duplicates, and if so use the initial definition. +However, this does not improve performance, since the Form PaintProc still needs to be executed +for each instance of the Form, and the matching algorithm could, in very odd circumstances, be +defeated. The new implementation benefits both causes, meaning the second and subsequent invocation +of the form need not re-run the PaintProc, and removes the heurisic aspect of the reuse detection. +

    • +
    • +

      New URW+ fonts in which the families NimbusMono, NimbusRoman and NimbusSans have been +augmented with production quality Greek and Cyrillic glyphs. These correspond to our +substitutes for the PDF base 14 fonts.

    • Plus the usual round of bug fixes, compatibility changes, and incremental improvements. @@ -100,11 +91,11 @@

      For a list of open issues, or to report problems, please visit bugs.ghostscript.com. -

      Incompatible changes

      +

      Incompatible changes

      No recorded incompatible changes. -

      Changelog

      +

      Changelog

      See the history file for complete log of changes. @@ -115,7 +106,7 @@


      -Copyright © 2005-2014 Artifex Software, Inc. +Copyright © 2005-2015 Artifex Software, Inc. All rights reserved.

      @@ -129,7 +120,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Projects.htm ghostscript-9.16~dfsg~0/doc/Projects.htm --- ghostscript-9.15+dfsg/doc/Projects.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Projects.htm 2015-03-30 08:21:24.000000000 +0000 @@ -634,7 +634,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Ps2epsi.htm ghostscript-9.16~dfsg~0/doc/Ps2epsi.htm --- ghostscript-9.15+dfsg/doc/Ps2epsi.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Ps2epsi.htm 2015-03-30 08:21:24.000000000 +0000 @@ -176,7 +176,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Ps2pdf.htm ghostscript-9.16~dfsg~0/doc/Ps2pdf.htm --- ghostscript-9.15+dfsg/doc/Ps2pdf.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Ps2pdf.htm 2015-03-30 08:21:24.000000000 +0000 @@ -370,19 +370,20 @@ Default value is 12000.

      -dMaxShadingBitmapSize=integer -
      With CompatibilityLevel < 1.3 it specifies -the maximum number of bytes allowed for representing a shading as a bitmap. +
      Specifies the maximum number of bytes allowed for representing a shading as a bitmap. If a shading exceeds this value, the resolution of the output bitmap -is reduced to fit into the specified frame. +is reduced to fit into the specified number of bytes. Note that the number of bytes depends on the number of color components -in ProcessColorModel, assumes 8 bits per sample, -and doesn't account an image compression or filtering. -Also note that reducing the resolution results unsmooth shading boundaries. - -With CompatibilityLevel ≥ 1.3 this option is ignored. Default value is 256000. -For the best quality one can set the maximal integer value, -but the output file size may dramatically increase. -Therefore the user should choose a compromise value. +in ProcessColorModel or ColorConverionStrategy, assumes 8 bits per sample, +and doesn't consider image compression or downsampling. The image is rendered at the current resolution +as specified by -r or the default of 720 dpi. + +Default value is 256000. +In general larger values will result in higher quality, +but the output file size may increase dramatically, particularly with shadings which cover large areas. + +Shadings hsould generally only be rendered to images if CompatibilityLevel is 1.2 or less +or if ColorCoversionStrategy specifies a color space differnt to that of the shading.
      -dHaveTrueTypes=boolean
      With CompatibilityLevel < 1.3 it specifies @@ -926,7 +927,7 @@ Here is a sample command line to invoke Ghostscript for generating a PDF/X-3 document :
      -gs -dPDFX -dBATCH -dNOPAUSE -dNOOUTERSAVE -sColorConverionStrategy=/CMYK -sOutputICCProfile="ISO Coated sb.icc" -sDEVICE=pdfwrite -sOutputFile=out-x3.pdf PDFX_def.ps input.ps +gs -dPDFX -dBATCH -dNOPAUSE -sColorConverionStrategy=/CMYK -sDEVICE=pdfwrite -sOutputFile=out-x3.pdf PDFX_def.ps input.ps

      @@ -977,7 +978,7 @@ Here is a sample command line to invoke Ghostscript for generating a PDF/A document :

      -gs -dPDFA=1 -dBATCH -dNOPAUSE -dNOOUTERSAVE -sColorConversionStrategy=/RGB -sOutputICCProfile=srgb.icc -sDEVICE=pdfwrite -sOutputFile=out-a.pdf PDFA_def.ps input.ps +gs -dPDFA=1 -dBATCH -dNOPAUSE -sColorConversionStrategy=/RGB -sDEVICE=pdfwrite -sOutputFile=out-a.pdf PDFA_def.ps input.ps

      @@ -1142,7 +1143,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Ps2ps2.htm ghostscript-9.16~dfsg~0/doc/Ps2ps2.htm --- ghostscript-9.15+dfsg/doc/Ps2ps2.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Ps2ps2.htm 2015-03-30 08:21:24.000000000 +0000 @@ -284,7 +284,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Psfiles.htm ghostscript-9.16~dfsg~0/doc/Psfiles.htm --- ghostscript-9.15+dfsg/doc/Psfiles.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Psfiles.htm 2015-03-30 08:21:24.000000000 +0000 @@ -1003,7 +1003,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Ps-style.htm ghostscript-9.16~dfsg~0/doc/Ps-style.htm --- ghostscript-9.15+dfsg/doc/Ps-style.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Ps-style.htm 2015-03-30 08:21:24.000000000 +0000 @@ -86,7 +86,7 @@

    • Always put spaces between adjacent tokens. -
    • Use only lower-case letters and digits for names, or Vienna style names, +
    • Use only lower-case letters and digits for names, or Vienna style names, except for an initial "." for names only used within a single file.
    • Don't allocate objects in heavily used code. @@ -505,7 +505,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Readme.htm ghostscript-9.16~dfsg~0/doc/Readme.htm --- ghostscript-9.15+dfsg/doc/Readme.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Readme.htm 2015-03-30 08:21:24.000000000 +0000 @@ -602,7 +602,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Release.htm ghostscript-9.16~dfsg~0/doc/Release.htm --- ghostscript-9.15+dfsg/doc/Release.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Release.htm 2015-03-30 08:21:24.000000000 +0000 @@ -844,7 +844,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/SavedPages.htm ghostscript-9.16~dfsg~0/doc/SavedPages.htm --- ghostscript-9.15+dfsg/doc/SavedPages.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/SavedPages.htm 2015-03-30 08:21:24.000000000 +0000 @@ -276,7 +276,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Source.htm ghostscript-9.16~dfsg~0/doc/Source.htm --- ghostscript-9.15+dfsg/doc/Source.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Source.htm 2015-03-30 08:21:24.000000000 +0000 @@ -376,7 +376,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/thirdparty.htm ghostscript-9.16~dfsg~0/doc/thirdparty.htm --- ghostscript-9.15+dfsg/doc/thirdparty.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/thirdparty.htm 2015-03-30 08:21:24.000000000 +0000 @@ -495,7 +495,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Unix-lpr.htm ghostscript-9.16~dfsg~0/doc/Unix-lpr.htm --- ghostscript-9.15+dfsg/doc/Unix-lpr.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Unix-lpr.htm 2015-03-30 08:21:24.000000000 +0000 @@ -260,7 +260,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Use.htm ghostscript-9.16~dfsg~0/doc/Use.htm --- ghostscript-9.15+dfsg/doc/Use.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Use.htm 2015-03-30 08:21:24.000000000 +0000 @@ -880,8 +880,8 @@ environment variable, if any;

    • If built with COMPILE_INITS=1 (currently the default build) the files in the -%rom%Resource/Init/ and %rom%lib/ file system built -into the executable ; +%rom%Resource/ and %rom%iccprofiles/ directories are +built into the executable.
    • The directories specified by the GS_LIB_DEFAULT macro (if any) in the makefile when this executable was built. @@ -4315,7 +4315,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/WhatIsGS.htm ghostscript-9.16~dfsg~0/doc/WhatIsGS.htm --- ghostscript-9.15+dfsg/doc/WhatIsGS.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/WhatIsGS.htm 2015-03-30 08:21:24.000000000 +0000 @@ -196,7 +196,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/doc/Xfonts.htm ghostscript-9.16~dfsg~0/doc/Xfonts.htm --- ghostscript-9.15+dfsg/doc/Xfonts.htm 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/doc/Xfonts.htm 2015-03-30 08:21:24.000000000 +0000 @@ -271,7 +271,7 @@ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.

      -Ghostscript version 9.15, 22 September 2014 +Ghostscript version 9.16, 30 March 2015 diff -Nru ghostscript-9.15+dfsg/ghostscript.vcproj ghostscript-9.16~dfsg~0/ghostscript.vcproj --- ghostscript-9.15+dfsg/ghostscript.vcproj 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/ghostscript.vcproj 2015-03-30 08:21:24.000000000 +0000 @@ -1718,6 +1718,10 @@ > + + @@ -4591,6 +4595,10 @@ > + + @@ -7900,6 +7908,10 @@ > + + diff -Nru ghostscript-9.15+dfsg/lib/ghostpdf.inf ghostscript-9.16~dfsg~0/lib/ghostpdf.inf --- ghostscript-9.15+dfsg/lib/ghostpdf.inf 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/lib/ghostpdf.inf 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,27 @@ ; GHOSTPDF.INF (for Windows 2k, XP and XP x64 edition) +; +; Windows 8: +; ghostpdl.inf is not supported on Windows 8. It can be installed, +; however, by doing the following: +; +; AT YOUR OWN RISK!! +; +; Open your charms (the right side popup menu) and select +; "Settings" and click on the last option on the list called +; "Change PC Settings". In the "General" category click the +; "Restart now" button under "Advanced startup". +; When the system restarts it will show you several options, you +; want to select "Troubleshoot" then "Advanced options" and finally +; "Startup Settings". The system will reboot one more time and you +; will have a new listing of options, you will want to select option +; #7 "Disable Driver Signature Enforcement". After the system has +; finished restarting for the final time you will be able to add the +; Ghostscript printer to Windows 8. +; The final item of note is that you must select "File: (print to file)" +; as the port for the printer as "LPT1" will not work. +; +; AT YOUR OWN RISK!! + [Version] Signature="$Windows NT$" diff -Nru ghostscript-9.15+dfsg/lib/ghostpdf.README ghostscript-9.16~dfsg~0/lib/ghostpdf.README --- ghostscript-9.15+dfsg/lib/ghostpdf.README 1970-01-01 00:00:00.000000000 +0000 +++ ghostscript-9.16~dfsg~0/lib/ghostpdf.README 2015-03-30 08:21:24.000000000 +0000 @@ -0,0 +1,26 @@ +GHOSTPDF.INF + +GHOSTPDF.INF only supports Windows versions 2k, XP and XP x64 edition, Vista +(x86 and x64) and 7 (x86 and x64). It does not support Windows 8 and beyond. + +It can be installed (unsupported and AT YOUR OWN RISK) on Windows 8, by +doing the following: + +Open your charms (the right side popup menu) and select "Settings" and click +on the last option on the list called "Change PC Settings". In the "General" +category click the "Restart now" button under "Advanced startup". + +When the system restarts it will show you several options, you want to select +"Troubleshoot" then "Advanced options" and finally "Startup Settings". The +system will reboot one more time and you will have a new listing of options, +you will want to select option #7 "Disable Driver Signature Enforcement". + +After the system has finished restarting for the final time you will be able +to add the Ghostscript printer to Windows 8. + +The final item of note is that you must select "File: (print to file)" +as the port for the printer as "LPT1" will not work. + + +To reiterate: following this procedure is AT YOUR OWN RISK! + diff -Nru ghostscript-9.15+dfsg/lib/opdfread.ps ghostscript-9.16~dfsg~0/lib/opdfread.ps --- ghostscript-9.15+dfsg/lib/opdfread.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/lib/opdfread.ps 2015-03-30 08:21:24.000000000 +0000 @@ -545,21 +545,25 @@ //PDFR_DEBUG { (endobj ) = } if - dup type /dicttype eq { - dup /.endobj_daemon //knownget exec { - //PDFR_DEBUG { (.endobj_daemon for ) print 2 index = } if - exec - } if - } if - dup type /dicttype eq { dup /ImmediateExec known } { false } ifelse { - pop pop - } { - //PDFR_DEBUG { - (Storing ) print 1 index = + count 1 eq { + pop + }{ + dup type /dicttype eq { + dup /.endobj_daemon //knownget exec { + //PDFR_DEBUG { (.endobj_daemon for ) print 2 index = } if + exec + } if } if - //RunTypeDaemon exec - //DoNothing 3 1 roll //Register exec - } ifelse + dup type /dicttype eq { dup /ImmediateExec known } { false } ifelse { + pop pop + } { + //PDFR_DEBUG { + (Storing ) print 1 index = + } if + //RunTypeDaemon exec + //DoNothing 3 1 roll //Register exec + } ifelse + }ifelse } bind def /StoreBlock % StoreBlock - @@ -3802,6 +3806,7 @@ } ifelse } if dup 0 get /Separation eq { + dup dup 1 get UnPDFEscape 1 exch put 3 //ResolveArrayElement exec dup 3 get //FunctionToProc exec 2 copy 3 exch put diff -Nru ghostscript-9.15+dfsg/lib/viewraw.ps ghostscript-9.16~dfsg~0/lib/viewraw.ps --- ghostscript-9.15+dfsg/lib/viewraw.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/lib/viewraw.ps 2015-03-30 08:21:24.000000000 +0000 @@ -18,25 +18,125 @@ % Requires the colorimage operator. % If SCALE is defined, maps input pixels to output pixels with that scale; % if SCALE is undefined, scales the image to fit the page. -% If BITS is defined, it is the number of bits per sample (1,2,4,8,12); +% If BITS is defined, it is the number of bits per sample (1,2,4,8); % if BITS is undefined, its default value is 1. % Colorspace defaults to cmyk, but -dGray or -dRGB can change it -/viewraw { % viewraw - +/viewraw { % viewraw - 20 dict begin % Default ncomp is 4 == CMYK /w exch def /fname exch def - /ncomp + /F fname (r) file def % the raw file + /f /F load def % the usual DataSource + /bpc /BITS where { pop BITS } { 1 } ifelse def + /ncomp /Gray where - { pop 1 } % DeviceGray is 1 component - { /RGB where { pop 3 } { 4 } ifelse % DeviceRGB is 3 component, DeviceCMYK is 4 component - } ifelse + { pop 1 /CS /DeviceGray def } % DeviceGray is 1 component + { /RGB where + { pop 3 BITS 8 ge % DeviceRGB is 3 component, use Indexed for 1, 2, 4 BITS + { /CS /DeviceRGB def } + { + BITS 4 eq { + /P 4096 3 mul string def % the palette + 0 1 15 { /r exch def + 0 1 15 { /g exch def + 0 1 15 { /b exch def + r 256 mul g 16 mul add b add 3 mul % base of the triplet + P 1 index r 17 mul put + P 1 index 1 add g 17 mul put + P exch 2 add b 17 mul put + } for + } for + } for + /CS + [ /Indexed /DeviceRGB 4095 P ] def + /BITS 12 def % change to 4 bit indexed + % redefine the DataSource to pack the 16-bit values into 12-bit + % The 'proc' returns 2 12-bit pixels in 3 bytes + % This proc is needed for the output from -sDEVICE=bitrgb -dGrayValues=16 + /S3 3 string def + /f { + F read + { + 256 mul F read + pop add 16 mul S3 0 2 index 256 div cvi put + 240 and F read + { add S3 exch 1 exch put S3 2 F read pop put } + { S3 exch 1 exch put S3 2 0 put } + ifelse + S3 + } + { () } + ifelse + } bind def + } if + BITS 2 eq { + /CS + [ /Indexed /DeviceRGB 255 < + 000000 000055 0000AA 0000FF + 005500 005555 0055AA 0055FF + 00AA00 00AA55 00AAAA 00AAFF + 00FF00 00FF55 00FFAA 00FFFF + 550000 550055 5500AA 5500FF + 555500 555555 5555AA 5555FF + 55AA00 55AA55 55AAAA 55AAFF + 55FF00 55FF55 55FFAA 55FFFF + AA0000 AA0055 AA00AA AA00FF + AA5500 AA5555 AA55AA AA55FF + AAAA00 AAAA55 AAAAAA AAAAFF + AAFF00 AAFF55 AAFFAA AAFFFF + FF0000 FF0055 FF00AA FF00FF + FF5500 FF5555 FF55AA FF55FF + FFAA00 FFAA55 FFAAAA FFAAFF + FFFF00 FFFF55 FFFFAA FFFFFF + + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 + > + ] def + /BITS 8 def % change to 4 bit indexed + } if + BITS 1 eq { + /CS + [ /Indexed /DeviceRGB 15 < + 000000 0000FF 00FF00 00FFFF FF0000 FF00FF FFFF00 FFFFFF + 000000 0000FF 00FF00 00FFFF FF0000 FF00FF FFFF00 FFFFFF + > + ] def + /BITS 4 def % change to 4 bit indexed + } if + } + ifelse + } + { 4 /CS /DeviceCMYK def } % DeviceCMYK is 4 component + ifelse + } + ifelse def - /bpc /BITS where { pop BITS } { 1 } ifelse def - /f fname (r) file def + + % Calculate Height from file length and width mark fname status pop pop pop /flen exch def cleartomark - /h flen w bpc ncomp mul mul 7 add 8 idiv idiv def + % NB: bitrgb writes 4 bits when BITS=1, 8 bits when BITS=2, 16 bits when BITS=4 + % presumably to keep values on nice boundaries this takes some fudging + /h flen w bpc ncomp dup 3 eq bpc 8 lt and { 1 add } if mul mul 7 add 8 idiv idiv def %% (Dimensions: ) print [w h] == flush % Set up scaling. /SCALE where { @@ -51,15 +151,25 @@ 3 1 roll exch sub w div .min dup } ifelse scale %% w h bpc [1 0 0 -1 0 h] f false ncomp colorimage - << /ImageType 1 /Width w /Height h /ImageMatrix [1 0 0 -1 0 h] - /MultipleDataSources false /DataSource f /BitsPerComponent BITS - /Decode BITS 1 gt % inverted sense for 1 bit per component - { [ [ 0 1 ] [0] [ 0 1 0 1 0 1 ] [ 0 1 0 1 0 1 0 1 ] ] ncomp 1 sub get } - { [ [ 1 0 ] [0] [ 1 0 1 0 1 0 ] [ 1 0 1 0 1 0 1 0 ] ] ncomp 1 sub get } - ifelse + CS setcolorspace + << /ImageType 1 /Width w /Height h /ImageMatrix [1 0 0 -1 0 h] + /MultipleDataSources false /DataSource /f load /BitsPerComponent BITS + /Decode + bpc 1 eq { % inverted sense for 1 bit per component + [ [0] [ 1 0 ] [0] [ 0 15 ] [ 0 1 0 1 0 1 0 1 ] ] ncomp get + } if + bpc 2 eq { + [ [0] [ 0 1 ] [0] [ 0 255 ] [ 0 1 0 1 0 1 0 1 ] ] ncomp get + } if + bpc 4 eq { + [ [0] [ 0 1 ] [0] [ 0 4095 ] [ 1 0 1 0 1 0 1 0 ] ] ncomp get + } if + bpc 8 ge { + [ [0] [ 0 1 ] [0] [ 0 1 0 1 0 1 ] [ 1 0 1 0 1 0 1 0 ] ] ncomp get + } if >> image showpage - f closefile + F closefile end } bind def diff -Nru ghostscript-9.15+dfsg/LICENSE ghostscript-9.16~dfsg~0/LICENSE --- ghostscript-9.15+dfsg/LICENSE 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/LICENSE 2015-03-30 08:21:24.000000000 +0000 @@ -25,8 +25,8 @@ compatible - see jpegxr/COPYRIGHT.txt for details. GPL Ghostscript is free software; you can redistribute it and/or -modify it under the terms the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 +modify it under the terms of the GNU Affero General Public License +as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GPL Ghostscript is distributed in the hope that it will be useful, diff -Nru ghostscript-9.15+dfsg/Makefile.in ghostscript-9.16~dfsg~0/Makefile.in --- ghostscript-9.15+dfsg/Makefile.in 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Makefile.in 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2014 Artifex Software, Inc. +# Copyright (C) 2001-2015 Artifex Software, Inc. # All Rights Reserved. # # This software is provided AS-IS with no warranty, either express or @@ -142,7 +142,7 @@ # -DHAVE_SSE2 # use sse2 intrinsics -CAPOPT= @HAVE_MKSTEMP@ @HAVE_FILE64@ @HAVE_FSEEKO@ @HAVE_MKSTEMP64@ @HAVE_FONTCONFIG@ @HAVE_LIBIDN@ @HAVE_SETLOCALE@ @HAVE_SSE2@ @HAVE_DBUS@ @HAVE_BSWAP32@ @HAVE_BYTESWAP_H@ @HAVE_STRERROR@ +CAPOPT= @HAVE_MKSTEMP@ @HAVE_FILE64@ @HAVE_FSEEKO@ @HAVE_MKSTEMP64@ @HAVE_FONTCONFIG@ @HAVE_LIBIDN@ @HAVE_SETLOCALE@ @HAVE_SSE2@ @HAVE_DBUS@ @HAVE_BSWAP32@ @HAVE_BYTESWAP_H@ @HAVE_STRERROR@ @HAVE_PREAD_PWRITE@ @RECURSIVE_MUTEXATTR@ # Define the name of the executable file. @@ -267,10 +267,8 @@ # options for lcms color management library SHARE_LCMS=@SHARELCMS@ -LCMSSRCDIR=@LCMSDIR@ LCMS2SRCDIR=@LCMS2DIR@ -LCMS_CFLAGS=-DSHARE_LCMS=$(SHARE_LCMS) @LCMS_ENDIAN@ -LCMS2_CFLAGS=-DSHARE_LCMS=$(SHARE_LCMS) @LCMS2_ENDIAN@ @SQRTF_SUBST@ +LCMS2_CFLAGS=-DSHARE_LCMS=$(SHARE_LCMS) @LCMS2_ENDIAN@ @SQRTF_SUBST@ @LCMS2_PTR_ALIGNMENT@ # Which CMS are we using? # Options are currently lcms or lcms2 diff -Nru ghostscript-9.15+dfsg/man/dvipdf.1 ghostscript-9.16~dfsg~0/man/dvipdf.1 --- ghostscript-9.15+dfsg/man/dvipdf.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/dvipdf.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH DVIPDF 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH DVIPDF 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME dvipdf \- Convert TeX DVI file to PDF using ghostscript and dvips .SH SYNOPSIS @@ -21,7 +21,7 @@ .SH SEE ALSO gs(1), dvips(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/font2c.1 ghostscript-9.16~dfsg~0/man/font2c.1 --- ghostscript-9.15+dfsg/man/font2c.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/font2c.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH FONT2C 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH FONT2C 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME font2c \- Write PostScript Type 0 or Type 1 font as C code .SH SYNOPSIS @@ -17,7 +17,7 @@ .SH SEE ALSO gs(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/gs.1 ghostscript-9.16~dfsg~0/man/gs.1 --- ghostscript-9.15+dfsg/man/gs.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/gs.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH GS 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH GS 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME gs \- Ghostscript (PostScript and PDF language interpreter and previewer) .SH SYNOPSIS @@ -448,7 +448,7 @@ See http://bugs.ghostscript.com/ and the Usenet news group comp.lang.postscript. .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/gslp.1 ghostscript-9.16~dfsg~0/man/gslp.1 --- ghostscript-9.15+dfsg/man/gslp.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/gslp.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH GSLP 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH GSLP 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME gslp \- Format and print text using ghostscript .br @@ -92,7 +92,7 @@ .SH SEE ALSO gs(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/gsnd.1 ghostscript-9.16~dfsg~0/man/gsnd.1 --- ghostscript-9.15+dfsg/man/gsnd.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/gsnd.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH GSND 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH GSND 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME gsnd \- Run ghostscript (PostScript and PDF engine) without display .SH SYNOPSIS @@ -12,7 +12,7 @@ .SH SEE ALSO gs(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/pdf2dsc.1 ghostscript-9.16~dfsg~0/man/pdf2dsc.1 --- ghostscript-9.15+dfsg/man/pdf2dsc.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/pdf2dsc.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PDF2DSC 1 "22 September 2014" 9.15 "Ghostscript Tools" \" -*- nroff -*- +.TH PDF2DSC 1 "30 March 2015" 9.16 "Ghostscript Tools" \" -*- nroff -*- .SH NAME pdf2dsc \- generate a PostScript page list of a PDF document .SH SYNOPSIS @@ -28,6 +28,6 @@ .SH SEE ALSO gs(1), ghostview(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Yves Arrouye and Russell Lang gsview at ghostgum.com.au diff -Nru ghostscript-9.15+dfsg/man/pdf2ps.1 ghostscript-9.16~dfsg~0/man/pdf2ps.1 --- ghostscript-9.15+dfsg/man/pdf2ps.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/pdf2ps.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PDF2PS 1 "22 September 2014" 9.15 "Ghostscript Tools" \" -*- nroff -*- +.TH PDF2PS 1 "30 March 2015" 9.16 "Ghostscript Tools" \" -*- nroff -*- .SH NAME pdf2ps \- Ghostscript PDF to PostScript translator .SH SYNOPSIS @@ -14,7 +14,7 @@ Run "\fBgs -h\fR" to find the location of Ghostscript documentation on your system, from which you can get more details. .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/pf2afm.1 ghostscript-9.16~dfsg~0/man/pf2afm.1 --- ghostscript-9.15+dfsg/man/pf2afm.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/pf2afm.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PF2AFM 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH PF2AFM 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME pf2afm \- Make an AFM file from Postscript (PFB/PFA/PFM) font files using ghostscript .SH SYNOPSIS @@ -15,7 +15,7 @@ .br pf2afm.ps in the Ghostscript lib directory. .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/pfbtopfa.1 ghostscript-9.16~dfsg~0/man/pfbtopfa.1 --- ghostscript-9.15+dfsg/man/pfbtopfa.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/pfbtopfa.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PFBTOPFA 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH PFBTOPFA 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME pfbtopfa \- Convert Postscript .pfb fonts to .pfa format using ghostscript .SH SYNOPSIS @@ -10,7 +10,7 @@ .SH SEE ALSO gs(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/printafm.1 ghostscript-9.16~dfsg~0/man/printafm.1 --- ghostscript-9.15+dfsg/man/printafm.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/printafm.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PRINTAFM 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH PRINTAFM 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME printafm \- Print the metrics from a Postscript font in AFM format using ghostscript .SH SYNOPSIS @@ -11,7 +11,7 @@ .SH SEE ALSO gs(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/ps2ascii.1 ghostscript-9.16~dfsg~0/man/ps2ascii.1 --- ghostscript-9.15+dfsg/man/ps2ascii.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/ps2ascii.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PS2ASCII 1 "22 September 2014" 9.15 "Ghostscript Tools" \" -*- nroff -*- +.TH PS2ASCII 1 "30 March 2015" 9.16 "Ghostscript Tools" \" -*- nroff -*- .SH NAME ps2ascii \- Ghostscript translator from PostScript or PDF to ASCII .SH SYNOPSIS @@ -22,7 +22,7 @@ .SH SEE ALSO pstotext(1), http://www.research.digital.com/SRC/virtualpaper/pstotext.html .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/ps2epsi.1 ghostscript-9.16~dfsg~0/man/ps2epsi.1 --- ghostscript-9.15+dfsg/man/ps2epsi.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/ps2epsi.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PS2EPSI 1 "22 September 2014" 9.15 "Ghostscript Tools" \" -*- nroff -*- +.TH PS2EPSI 1 "30 March 2015" 9.16 "Ghostscript Tools" \" -*- nroff -*- .SH NAME ps2epsi \- generate conforming Encapsulated PostScript .SH SYNOPSIS @@ -59,7 +59,7 @@ .SH SEE ALSO gs (1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. However, the content may be obsolete, or inconsistent with ps2epsi.txt. .SH AUTHOR George Cameron diff -Nru ghostscript-9.15+dfsg/man/ps2pdf.1 ghostscript-9.16~dfsg~0/man/ps2pdf.1 --- ghostscript-9.15+dfsg/man/ps2pdf.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/ps2pdf.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PS2PDF 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH PS2PDF 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME ps2pdf \- Convert PostScript to PDF using ghostscript .br @@ -89,7 +89,7 @@ See http://bugs.ghostscript.com/ and the Usenet news group comp.lang.postscript. .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/ps2pdfwr.1 ghostscript-9.16~dfsg~0/man/ps2pdfwr.1 --- ghostscript-9.15+dfsg/man/ps2pdfwr.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/ps2pdfwr.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH PS2PDFWR 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH PS2PDFWR 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME ps2pdfwr \- Convert PostScript to PDF without specifying CompatibilityLevel, using ghostscript .SH SYNOPSIS @@ -23,7 +23,7 @@ .SH SEE ALSO gs(1), ps2pdf(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/ps2ps.1 ghostscript-9.16~dfsg~0/man/ps2ps.1 --- ghostscript-9.15+dfsg/man/ps2ps.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/ps2ps.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,32 +1,28 @@ -.TH PS2PS 1 "22 September 2014" 9.15 "Ghostscript Tools" \" -*- nroff -*- +.TH PS2PS 1 "30 March 2015" 9.16 "Ghostscript Tools" \" -*- nroff -*- .SH NAME ps2ps, eps2eps \- Ghostscript PostScript "distiller" .SH SYNOPSIS -\fBps2ps\fR [ \fIoptions\fR ] \fIinput.ps output.ps\fR +\fBps2ps\fR [ \fIoptions\fR ] \fIinput output.ps\fR .br -\fBeps2eps\fR [ \fIoptions\fR ] \fIinput.eps output.eps\fR +\fBeps2eps\fR [ \fIoptions\fR ] \fIinput output.eps\fR .SH DESCRIPTION -\fBps2ps\fR uses \fIgs\fR(1) to convert \fBPostScript\fR(tm) file -"input.ps" to simpler, normalized and (usually) faster PostScript in -"output.ps". Normally the output is allowed to use PostScript Level 2 -or Level 3 constructs, but the \fB\-dLanguageLevel=1\fR option restricts -the output to Level 1. +\fBps2ps\fR uses \fIgs\fR(1) to convert \fBPostScript\fR(tm) or \fBPDF\fR(tm) file +"input" to simpler, normalized and (usually) faster PostScript in +"output.ps". The output is level 2 DSC 3.0 conforming PostScript. .PP -\fBeps2eps\fR performs the equivalent optimization for Encapsulated -PostScript (EPS) files. +\fBeps2eps\fR performs the equivalent optimization, creating Encapsulated +PostScript (EPS) files. NB, despite the name, the input need not be an +EPS file, PostScript or indeed PDF files are equally acceptable. .PP Both accept any general Ghostscript command line options, and -respectively options specific to the ps2write and eps2write devices. +options specific to the ps2write and eps2write devices. .SH FILES Run "\fBgs -h\fR" to find the location of Ghostscript documentation on your system, from which you can get more details. -.SH BUGS -The pswrite device used by both \fBps2ps\fR and \fBeps2eps\fR produces much -lower level output than is desirable. Use with caution. .SH SEE ALSO ps2pdf(1), ps2ascii(1), ps2epsi(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/man/wftopfa.1 ghostscript-9.16~dfsg~0/man/wftopfa.1 --- ghostscript-9.15+dfsg/man/wftopfa.1 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/man/wftopfa.1 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -.TH WFTOPFA 1 "22 September 2014" 9.15 Ghostscript \" -*- nroff -*- +.TH WFTOPFA 1 "30 March 2015" 9.16 Ghostscript \" -*- nroff -*- .SH NAME wftopfa \- Convert a Wadalab base font to Postscript .PFA (or .PFB) format using ghostscript @@ -12,7 +12,7 @@ .SH SEE ALSO gs(1) .SH VERSION -This document was last revised for Ghostscript version 9.15. +This document was last revised for Ghostscript version 9.16. .SH AUTHOR Artifex Software, Inc. are the primary maintainers of Ghostscript. diff -Nru ghostscript-9.15+dfsg/psi/dwmainc.c ghostscript-9.16~dfsg~0/psi/dwmainc.c --- ghostscript-9.15+dfsg/psi/dwmainc.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/dwmainc.c 2015-03-30 08:21:24.000000000 +0000 @@ -87,7 +87,8 @@ int nret = 0; /* number of bytes returned to caller */ int i; - while (len) { + /* protect against caller passing invalid len */ + while (len > 0) { while (len && nmore) { nmore--; *buf++ = 0x80 | ((thiswchar >> (6 * nmore)) & 0x3F), nret++; @@ -144,7 +145,8 @@ { UINT consolecp = 0; - while (len) { + /* protect against caller passing invalid len */ + while (len > 0) { const char *str0; /* write ASCII chars without translation */ diff -Nru ghostscript-9.15+dfsg/psi/dxmain.c ghostscript-9.16~dfsg~0/psi/dxmain.c --- ghostscript-9.15+dfsg/psi/dxmain.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/dxmain.c 2015-03-30 08:21:24.000000000 +0000 @@ -1149,7 +1149,8 @@ write_stderr(const char *str) { fwrite(str, 1, strlen(str), stderr); - fflush(stderr); + + return fflush(stderr); } diff -Nru ghostscript-9.15+dfsg/psi/imainarg.c ghostscript-9.16~dfsg~0/psi/imainarg.c --- ghostscript-9.15+dfsg/psi/imainarg.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/imainarg.c 2015-03-30 08:21:24.000000000 +0000 @@ -467,7 +467,7 @@ (arg[0] == '-' && !isdigit((unsigned char)arg[1])) ) break; - code = runarg(minst, "", arg, ".runstring", runBuffer); + code = runarg(minst, "", arg, ".runstring", 0); if (code < 0) return code; } @@ -965,16 +965,7 @@ strcpy(line, pre); esc_strcat(line, arg); strcat(line, post); - /* If we're running PS from a buffer (i.e. from the "-c" option - we don't want lib_file_open() to search the current directory - during this call to run_string() - */ - if ((options & runBuffer)) { - minst->i_ctx_p->starting_arg_file = false; - } - else { - minst->i_ctx_p->starting_arg_file = true; - } + minst->i_ctx_p->starting_arg_file = true; code = run_string(minst, line, options); minst->i_ctx_p->starting_arg_file = false; gs_free_object(minst->heap, line, "runarg"); diff -Nru ghostscript-9.15+dfsg/psi/imain.c ghostscript-9.16~dfsg~0/psi/imain.c --- ghostscript-9.15+dfsg/psi/imain.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/imain.c 2015-03-30 08:21:24.000000000 +0000 @@ -883,8 +883,9 @@ if (minst->init_done >= 1) { gs_main_run_string(minst, "/systemdict .systemexec /begin .systemexec \ - <> setpagedevice \ + /BGPrint /GetDeviceParam .special_op \ + {{ <> setpagedevice} if} if \ serverdict /.jobsavelevel get 0 eq {/quit} {/stop} ifelse end \ .systemvar exec", 0 , &exit_code, &error_object); diff -Nru ghostscript-9.15+dfsg/psi/int.mak ghostscript-9.16~dfsg~0/psi/int.mak --- ghostscript-9.15+dfsg/psi/int.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/int.mak 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2012 Artifex Software, Inc. +# Copyright (C) 2001-2015 Artifex Software, Inc. # All Rights Reserved. # # This software is provided AS-IS with no warranty, either express or @@ -92,14 +92,14 @@ isupport1_=$(PSOBJ)ialloc.$(OBJ) $(PSOBJ)igc.$(OBJ) $(PSOBJ)igcref.$(OBJ) $(PSOBJ)igcstr.$(OBJ) isupport2_=$(PSOBJ)ilocate.$(OBJ) $(PSOBJ)iname.$(OBJ) $(PSOBJ)isave.$(OBJ) isupport_=$(isupport1_) $(isupport2_) -$(PSD)isupport.dev : $(INT_MAK) $(ECHOGS_XE) $(isupport_) +$(PSD)isupport.dev : $(INT_MAK) $(ECHOGS_XE) $(isupport_) $(MAKEDIRS) $(SETMOD) $(PSD)isupport $(isupport1_) $(ADDMOD) $(PSD)isupport -obj $(isupport2_) $(PSOBJ)ialloc.$(OBJ) : $(PSSRC)ialloc.c $(AK) $(memory__h) $(gx_h)\ $(ierrors_h) $(gsstruct_h)\ $(iastate_h) $(igc_h) $(ipacked_h) $(iref_h) $(iutil_h) $(ivmspace_h)\ - $(store_h) + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)ialloc.$(OBJ) $(C_) $(PSSRC)ialloc.c # igc.c, igcref.c, and igcstr.c should really be in the dpsand2 list, @@ -108,34 +108,37 @@ $(PSOBJ)igc.$(OBJ) : $(PSSRC)igc.c $(GH) $(memory__h)\ $(ierrors_h) $(gsexit_h) $(gsmdebug_h) $(gsstruct_h)\ $(iastate_h) $(idict_h) $(igc_h) $(igcstr_h) $(inamedef_h)\ - $(ipacked_h) $(isave_h) $(isstate_h) $(istruct_h) $(opdef_h) + $(ipacked_h) $(isave_h) $(isstate_h) $(istruct_h) $(opdef_h) \ + $(MAKEDIRS) $(PSCC) $(PSO_)igc.$(OBJ) $(C_) $(PSSRC)igc.c $(PSOBJ)igcref.$(OBJ) : $(PSSRC)igcref.c $(GH) $(memory__h)\ $(gsexit_h) $(gsstruct_h)\ - $(iastate_h) $(idebug_h) $(igc_h) $(iname_h) $(ipacked_h) $(store_h) + $(iastate_h) $(idebug_h) $(igc_h) $(iname_h) $(ipacked_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)igcref.$(OBJ) $(C_) $(PSSRC)igcref.c $(PSOBJ)igcstr.$(OBJ) : $(PSSRC)igcstr.c $(GH) $(memory__h)\ - $(gsmdebug_h) $(gsstruct_h) $(iastate_h) $(igcstr_h) + $(gsmdebug_h) $(gsstruct_h) $(iastate_h) $(igcstr_h) $(MAKEDIRS) $(PSCC) $(PSO_)igcstr.$(OBJ) $(C_) $(PSSRC)igcstr.c $(PSOBJ)ilocate.$(OBJ) : $(PSSRC)ilocate.c $(GH) $(memory__h)\ $(ierrors_h) $(gsexit_h) $(gsstruct_h)\ $(iastate_h) $(idict_h) $(igc_h) $(igcstr_h) $(iname_h)\ $(ipacked_h) $(isstate_h) $(iutil_h) $(ivmspace_h)\ - $(store_h) + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)ilocate.$(OBJ) $(C_) $(PSSRC)ilocate.c $(PSOBJ)iname.$(OBJ) : $(PSSRC)iname.c $(GH) $(memory__h) $(string__h)\ $(gsstruct_h) $(gxobj_h)\ - $(ierrors_h) $(imemory_h) $(inamedef_h) $(isave_h) $(store_h) + $(ierrors_h) $(imemory_h) $(inamedef_h) $(isave_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)iname.$(OBJ) $(C_) $(PSSRC)iname.c $(PSOBJ)isave.$(OBJ) : $(PSSRC)isave.c $(GH) $(memory__h)\ $(ierrors_h) $(gsexit_h) $(gsstruct_h) $(gsutil_h)\ $(iastate_h) $(iname_h) $(inamedef_h) $(isave_h) $(isstate_h) $(ivmspace_h)\ - $(ipacked_h) $(store_h) $(stream_h) $(igc_h) + $(ipacked_h) $(store_h) $(stream_h) $(igc_h) $(MAKEDIRS) $(PSCC) $(PSO_)isave.$(OBJ) $(C_) $(PSSRC)isave.c ### Include files @@ -168,7 +171,7 @@ $(PSOBJ)idebug.$(OBJ) : $(PSSRC)idebug.c $(GH) $(string__h)\ $(gxalloc_h)\ $(idebug_h) $(idict_h) $(iname_h) $(istack_h) $(iutil_h) $(ivmspace_h)\ - $(opdef_h) $(ipacked_h) + $(opdef_h) $(ipacked_h) $(MAKEDIRS) $(PSCC) $(PSO_)idebug.$(OBJ) $(C_) $(PSSRC)idebug.c $(PSOBJ)idict.$(OBJ) : $(PSSRC)idict.c $(GH) $(math__h) $(string__h)\ @@ -176,42 +179,42 @@ $(gxalloc_h)\ $(iddstack_h) $(idebug_h) $(idict_h) $(idictdef_h) $(idicttpl_h)\ $(imemory_h) $(iname_h) $(inamedef_h) $(ipacked_h) $(isave_h)\ - $(iutil_h) $(ivmspace_h) $(store_h) + $(iutil_h) $(ivmspace_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)idict.$(OBJ) $(C_) $(PSSRC)idict.c $(PSOBJ)idparam.$(OBJ) : $(PSSRC)idparam.c $(GH) $(memory__h) $(string__h) $(ierrors_h)\ $(gsmatrix_h) $(gsuid_h) $(dstack_h)\ $(idict_h) $(iddict_h) $(idparam_h) $(ilevel_h) $(imemory_h) $(iname_h) $(iutil_h)\ - $(oper_h) $(store_h) + $(oper_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)idparam.$(OBJ) $(C_) $(PSSRC)idparam.c $(PSOBJ)idstack.$(OBJ) : $(PSSRC)idstack.c $(GH)\ $(idebug_h) $(idict_h) $(idictdef_h) $(idicttpl_h) $(idstack_h) $(iname_h) $(inamedef_h)\ - $(ipacked_h) $(iutil_h) $(ivmspace_h) + $(ipacked_h) $(iutil_h) $(ivmspace_h) $(MAKEDIRS) $(PSCC) $(PSO_)idstack.$(OBJ) $(C_) $(PSSRC)idstack.c $(PSOBJ)iparam.$(OBJ) : $(PSSRC)iparam.c $(GH)\ $(memory__h) $(string__h) $(ierrors_h)\ $(ialloc_h) $(idict_h) $(iname_h) $(imemory_h) $(iparam_h) $(istack_h) $(iutil_h) $(ivmspace_h)\ - $(opcheck_h) $(oper_h) $(store_h) + $(opcheck_h) $(oper_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)iparam.$(OBJ) $(C_) $(PSSRC)iparam.c $(PSOBJ)istack.$(OBJ) : $(PSSRC)istack.c $(GH) $(memory__h)\ $(ierrors_h) $(gsstruct_h) $(gsutil_h)\ $(ialloc_h) $(istack_h) $(istkparm_h) $(istruct_h) $(iutil_h) $(ivmspace_h)\ - $(store_h) + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)istack.$(OBJ) $(C_) $(PSSRC)istack.c $(PSOBJ)iutil.$(OBJ) : $(PSSRC)iutil.c $(GH) $(math__h) $(memory__h) $(string__h)\ $(gsccode_h) $(gsmatrix_h) $(gsutil_h) $(gxfont_h)\ $(sstring_h) $(strimpl_h)\ $(ierrors_h) $(idict_h) $(imemory_h) $(iutil_h) $(ivmspace_h)\ - $(iname_h) $(ipacked_h) $(oper_h) $(store_h) + $(iname_h) $(ipacked_h) $(oper_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)iutil.$(OBJ) $(C_) $(PSSRC)iutil.c $(PSOBJ)iplugin.$(OBJ) : $(PSSRC)iplugin.c $(GH) $(malloc__h) $(string__h)\ $(gxalloc_h)\ - $(ierrors_h) $(ialloc_h) $(icstate_h) $(iplugin_h) + $(ierrors_h) $(ialloc_h) $(icstate_h) $(iplugin_h) $(MAKEDIRS) $(PSCC) $(PSO_)iplugin.$(OBJ) $(C_) $(PSSRC)iplugin.c # ======================== PostScript Level 1 ======================== # @@ -272,7 +275,8 @@ $(PSOBJ)iconfig.$(OBJ) : $(gconfig_h) $(PSSRC)iconf.c $(stdio__h)\ $(gconf_h) $(gconfigd_h) $(gsmemory_h) $(gstypes_h)\ - $(iminst_h) $(iref_h) $(ivmspace_h) $(opdef_h) $(iplugin_h) + $(iminst_h) $(iref_h) $(ivmspace_h) $(opdef_h) $(iplugin_h)\ + $(MAKEDIRS) $(RM_) $(PSGEN)iconfig.c $(CP_) $(PSSRC)iconf.c $(PSGEN)iconfig.c $(PSCC) $(PSO_)iconfig.$(OBJ) $(C_) $(PSGEN)iconfig.c @@ -281,7 +285,8 @@ $(gscdefs_h) $(gsexit_h) $(gsstruct_h)\ $(dstack_h) $(ierrors_h) $(ialloc_h) $(iddict_h)\ $(iinit_h) $(ilevel_h) $(iname_h) $(interp_h) $(opdef_h)\ - $(ipacked_h) $(iparray_h) $(iutil_h) $(ivmspace_h) $(store_h) + $(ipacked_h) $(iparray_h) $(iutil_h) $(ivmspace_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)iinit.$(OBJ) $(C_) $(PSSRC)iinit.c $(PSOBJ)iscan.$(OBJ) : $(PSSRC)iscan.c $(GH) $(memory__h)\ @@ -290,17 +295,19 @@ $(iscan_h) $(iscanbin_h) $(iscannum_h)\ $(istruct_h) $(istream_h) $(iutil_h) $(ivmspace_h)\ $(ostack_h) $(store_h)\ - $(sa85d_h) $(stream_h) $(strimpl_h) $(sfilter_h) $(scanchar_h) + $(sa85d_h) $(stream_h) $(strimpl_h) $(sfilter_h) $(scanchar_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)iscan.$(OBJ) $(C_) $(PSSRC)iscan.c $(PSOBJ)iscannum.$(OBJ) : $(PSSRC)iscannum.c $(GH) $(math__h)\ - $(ierrors_h) $(iscan_h) $(iscannum_h) $(scanchar_h) $(scommon_h) $(store_h) + $(ierrors_h) $(iscan_h) $(iscannum_h) $(scanchar_h) $(scommon_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)iscannum.$(OBJ) $(C_) $(PSSRC)iscannum.c ### Streams $(PSOBJ)sfilter1.$(OBJ) : $(PSSRC)sfilter1.c $(AK) $(stdio__h) $(memory__h)\ - $(sfilter_h) $(strimpl_h) + $(sfilter_h) $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)sfilter1.$(OBJ) $(C_) $(PSSRC)sfilter1.c ###### Operators @@ -309,20 +316,22 @@ ### Non-graphics operators -$(PSOBJ)zarith.$(OBJ) : $(PSSRC)zarith.c $(OP) $(math__h) $(store_h) $(gsstate_h) +$(PSOBJ)zarith.$(OBJ) : $(PSSRC)zarith.c $(OP) $(math__h) $(store_h)\ + $(gsstate_h) $(MAKEDIRS) $(PSCC) $(PSO_)zarith.$(OBJ) $(C_) $(PSSRC)zarith.c $(PSOBJ)zarray.$(OBJ) : $(PSSRC)zarray.c $(OP) $(memory__h)\ - $(ialloc_h) $(ipacked_h) $(store_h) + $(ialloc_h) $(ipacked_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zarray.$(OBJ) $(C_) $(PSSRC)zarray.c $(PSOBJ)zcontrol.$(OBJ) : $(PSSRC)zcontrol.c $(OP) $(string__h)\ - $(estack_h) $(files_h) $(ipacked_h) $(iutil_h) $(store_h) $(stream_h) + $(estack_h) $(files_h) $(ipacked_h) $(iutil_h) $(store_h) $(stream_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcontrol.$(OBJ) $(C_) $(PSSRC)zcontrol.c $(PSOBJ)zdict.$(OBJ) : $(PSSRC)zdict.c $(OP)\ $(dstack_h) $(iddict_h) $(ilevel_h) $(iname_h) $(ipacked_h) $(ivmspace_h)\ - $(store_h) $(iscan_h) + $(store_h) $(iscan_h) $(MAKEDIRS) $(PSCC) $(PSO_)zdict.$(OBJ) $(C_) $(PSSRC)zdict.c $(PSOBJ)zfile.$(OBJ) : $(PSSRC)zfile.c $(OP)\ @@ -331,36 +340,39 @@ $(dstack_h) $(estack_h) $(files_h)\ $(ialloc_h) $(idict_h) $(ilevel_h) $(iname_h) $(iutil_h)\ $(isave_h) $(main_h) $(sfilter_h) $(stream_h) $(strimpl_h) $(store_h)\ - $(zfile_h) + $(zfile_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfile.$(OBJ) $(C_) $(PSSRC)zfile.c $(PSOBJ)zfile1.$(OBJ) : $(PSSRC)zfile1.c $(OP) $(memory__h) $(string__h)\ $(gp_h) $(ierrors_h) $(oper_h) $(opcheck_h) $(ialloc_h) $(opdef_h) $(store_h)\ - $(gpmisc_h) + $(gpmisc_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfile1.$(OBJ) $(C_) $(PSSRC)zfile1.c $(PSOBJ)zfileio.$(OBJ) : $(PSSRC)zfileio.c $(OP) $(memory__h) $(gp_h)\ $(estack_h) $(files_h) $(ifilter_h) $(interp_h) $(store_h)\ $(stream_h) $(strimpl_h)\ - $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h) $(gsstate_h) + $(gsmatrix_h) $(gxdevice_h) $(gxdevmem_h) $(gsstate_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfileio.$(OBJ) $(C_) $(PSSRC)zfileio.c $(PSOBJ)zfilter.$(OBJ) : $(PSSRC)zfilter.c $(OP) $(memory__h)\ $(gsstruct_h)\ $(files_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifilter_h) $(ilevel_h)\ - $(sfilter_h) $(srlx_h) $(sstring_h) $(stream_h) $(strimpl_h) + $(sfilter_h) $(srlx_h) $(sstring_h) $(stream_h) $(strimpl_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfilter.$(OBJ) $(C_) $(PSSRC)zfilter.c $(PSOBJ)zfproc.$(OBJ) : $(PSSRC)zfproc.c $(GH) $(memory__h) $(stat__h)\ $(oper_h)\ $(estack_h) $(files_h) $(gsstruct_h) $(ialloc_h) $(ifilter_h) $(istruct_h)\ - $(store_h) $(stream_h) $(strimpl_h) + $(store_h) $(stream_h) $(strimpl_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfproc.$(OBJ) $(C_) $(PSSRC)zfproc.c $(PSOBJ)zgeneric.$(OBJ) : $(PSSRC)zgeneric.c $(OP) $(memory__h)\ $(gsstruct_h)\ $(dstack_h) $(estack_h) $(iddict_h) $(iname_h) $(ipacked_h) $(ivmspace_h)\ - $(store_h) + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zgeneric.$(OBJ) $(C_) $(PSSRC)zgeneric.c $(PSOBJ)ziodev.$(OBJ) : $(PSSRC)ziodev.c $(OP)\ @@ -368,67 +380,72 @@ $(gp_h) $(gpcheck_h)\ $(gxiodev_h)\ $(files_h) $(ialloc_h) $(iscan_h) $(ivmspace_h)\ - $(scanchar_h) $(store_h) $(stream_h) $(istream_h) $(ierrors_h) + $(scanchar_h) $(store_h) $(stream_h) $(istream_h) $(ierrors_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)ziodev.$(OBJ) $(C_) $(PSSRC)ziodev.c $(PSOBJ)ziodevs$(STDIO_IMPLEMENTATION).$(OBJ) : $(PSSRC)ziodevs$(STDIO_IMPLEMENTATION).c $(OP) $(stdio__h)\ $(gpcheck_h)\ $(gxiodev_h)\ - $(files_h) $(ifilter_h) $(istream_h) $(store_h) $(stream_h) + $(files_h) $(ifilter_h) $(istream_h) $(store_h) $(stream_h) $(MAKEDIRS) $(PSCC) $(PSO_)ziodevs$(STDIO_IMPLEMENTATION).$(OBJ) $(C_) $(PSSRC)ziodevs$(STDIO_IMPLEMENTATION).c -$(PSOBJ)zmath.$(OBJ) : $(PSSRC)zmath.c $(OP) $(math__h) $(gxfarith_h) $(store_h) +$(PSOBJ)zmath.$(OBJ) : $(PSSRC)zmath.c $(OP) $(math__h) $(gxfarith_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zmath.$(OBJ) $(C_) $(PSSRC)zmath.c $(PSOBJ)zalg.$(OBJ) : $(PSSRC)zalg.c $(OP) $(ghost_h) $(gserrors_h)\ - $(oper_h) $(store_h) $(estack_h) + $(oper_h) $(store_h) $(estack_h) $(MAKEDIRS) $(PSCC) $(PSO_)zalg.$(OBJ) $(C_) $(PSSRC)zalg.c $(PSOBJ)zmisc.$(OBJ) : $(PSSRC)zmisc.c $(OP) $(gscdefs_h) $(gp_h)\ $(errno__h) $(memory__h) $(string__h) $(iscan_h)\ - $(ialloc_h) $(idict_h) $(dstack_h) $(iname_h) $(ivmspace_h) $(ipacked_h) $(store_h) + $(ialloc_h) $(idict_h) $(dstack_h) $(iname_h) $(ivmspace_h) $(ipacked_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zmisc.$(OBJ) $(C_) $(PSSRC)zmisc.c $(PSOBJ)zpacked.$(OBJ) : $(PSSRC)zpacked.c $(OP)\ $(ialloc_h) $(idict_h) $(ivmspace_h) $(iname_h) $(ipacked_h) $(iparray_h)\ - $(istack_h) $(store_h) + $(istack_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zpacked.$(OBJ) $(C_) $(PSSRC)zpacked.c $(PSOBJ)zrelbit.$(OBJ) : $(PSSRC)zrelbit.c $(OP)\ - $(gsutil_h) $(store_h) $(idict_h) $(gsstate_h) + $(gsutil_h) $(store_h) $(idict_h) $(gsstate_h) $(MAKEDIRS) $(PSCC) $(PSO_)zrelbit.$(OBJ) $(C_) $(PSSRC)zrelbit.c $(PSOBJ)zstack.$(OBJ) : $(PSSRC)zstack.c $(OP) $(memory__h)\ - $(ialloc_h) $(istack_h) $(store_h) + $(ialloc_h) $(istack_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zstack.$(OBJ) $(C_) $(PSSRC)zstack.c $(PSOBJ)zstring.$(OBJ) : $(PSSRC)zstring.c $(OP) $(memory__h)\ $(gsutil_h)\ - $(ialloc_h) $(iname_h) $(ivmspace_h) $(store_h) + $(ialloc_h) $(iname_h) $(ivmspace_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zstring.$(OBJ) $(C_) $(PSSRC)zstring.c $(PSOBJ)zsysvm.$(OBJ) : $(PSSRC)zsysvm.c $(GH)\ - $(ialloc_h) $(ivmspace_h) $(oper_h) $(store_h) + $(ialloc_h) $(ivmspace_h) $(oper_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zsysvm.$(OBJ) $(C_) $(PSSRC)zsysvm.c $(PSOBJ)ztoken.$(OBJ) : $(PSSRC)ztoken.c $(OP) $(string__h) $(stat__h)\ $(gsstruct_h) $(gsutil_h)\ $(dstack_h) $(estack_h) $(files_h)\ $(idict_h) $(iname_h) $(iscan_h) $(itoken_h)\ - $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h) + $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)ztoken.$(OBJ) $(C_) $(PSSRC)ztoken.c $(PSOBJ)ztype.$(OBJ) : $(PSSRC)ztype.c $(OP)\ $(math__h) $(memory__h) $(string__h)\ $(gsexit_h)\ $(dstack_h) $(idict_h) $(imemory_h) $(iname_h)\ - $(iscan_h) $(iutil_h) $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h) + $(iscan_h) $(iutil_h) $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)ztype.$(OBJ) $(C_) $(PSSRC)ztype.c $(PSOBJ)zvmem.$(OBJ) : $(PSSRC)zvmem.c $(OP) $(stat__h)\ $(dstack_h) $(estack_h) $(files_h)\ $(ialloc_h) $(idict_h) $(igstate_h) $(isave_h) $(store_h) $(stream_h)\ - $(gsmalloc_h) $(gsmatrix_h) $(gsstate_h) $(gsstruct_h) + $(gsmalloc_h) $(gsmatrix_h) $(gsstate_h) $(gsstruct_h) $(MAKEDIRS) $(PSCC) $(PSO_)zvmem.$(OBJ) $(C_) $(PSSRC)zvmem.c ### Graphics operators @@ -436,21 +453,24 @@ $(PSOBJ)zbfont.$(OBJ) : $(PSSRC)zbfont.c $(OP) $(memory__h) $(string__h)\ $(gscencs_h) $(gsmatrix_h) $(gxdevice_h) $(gxfixed_h) $(gxfont_h)\ $(bfont_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ilevel_h)\ - $(iname_h) $(inamedef_h) $(interp_h) $(istruct_h) $(ipacked_h) $(store_h) + $(iname_h) $(inamedef_h) $(interp_h) $(istruct_h) $(ipacked_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zbfont.$(OBJ) $(C_) $(PSSRC)zbfont.c $(PSOBJ)zchar.$(OBJ) : $(PSSRC)zchar.c $(OP)\ $(gsstruct_h) $(gstext_h) $(gxarith_h) $(gxfixed_h) $(gxmatrix_h)\ $(gxdevice_h) $(gxfont_h) $(gxfont42_h) $(gxfont0_h) $(gzstate_h)\ $(dstack_h) $(estack_h) $(ialloc_h) $(ichar_h) $(ichar1_h) $(idict_h) $(ifont_h)\ - $(ilevel_h) $(iname_h) $(igstate_h) $(ipacked_h) $(store_h) $(zchar42_h) + $(ilevel_h) $(iname_h) $(igstate_h) $(ipacked_h) $(store_h) $(zchar42_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zchar.$(OBJ) $(C_) $(PSSRC)zchar.c # zcharout is used for Type 1 and Type 42 fonts only. $(PSOBJ)zcharout.$(OBJ) : $(PSSRC)zcharout.c $(OP) $(memory__h)\ $(gscrypt1_h) $(gstext_h) $(gxdevice_h) $(gxfont_h) $(gxfont1_h)\ $(dstack_h) $(estack_h) $(ichar_h) $(icharout_h)\ - $(idict_h) $(ifont_h) $(igstate_h) $(iname_h) $(store_h) + $(idict_h) $(ifont_h) $(igstate_h) $(iname_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcharout.$(OBJ) $(C_) $(PSSRC)zcharout.c $(PSOBJ)zcolor.$(OBJ) : $(PSSRC)zcolor.c $(OP)\ @@ -461,57 +481,64 @@ $(gxcspace_h) $(gxcolor2_h) $(gxpcolor_h)\ $(idict_h) $(icolor_h) $(idparam_h) $(iname_h) $(iutil_h) $(icsmap_h)\ $(ifunc_h) $(zht2_h) $(zcolor_h) $(zcie_h) $(zicc_h) $(gscspace_h)\ - $(zfrsd_h) + $(zfrsd_h) $(MAKEDIRS) $(PSCC) $(PSO_)zcolor.$(OBJ) $(C_) $(PSSRC)zcolor.c $(PSOBJ)zdevice.$(OBJ) : $(PSSRC)zdevice.c $(OP) $(string__h)\ $(ialloc_h) $(idict_h) $(igstate_h) $(iname_h) $(interp_h) $(iparam_h) $(ivmspace_h)\ - $(gsmatrix_h) $(gsstate_h) $(gxdevice_h) $(gxgetbit_h) $(store_h) $(gsicc_manage_h) + $(gsmatrix_h) $(gsstate_h) $(gxdevice_h) $(gxgetbit_h) $(store_h) $(gsicc_manage_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zdevice.$(OBJ) $(C_) $(PSSRC)zdevice.c $(PSOBJ)zdfilter.$(OBJ) : $(PSSRC)zdfilter.c $(OP) $(string__h) $(ghost_h) $(oper_h)\ $(ialloc_h) $(idict_h) $(igstate_h) $(iname_h) $(interp_h) $(iparam_h) $(ivmspace_h)\ - $(gsdfilt_h) $(gsmatrix_h) $(gsstate_h) $(gxdevice_h) $(store_h) + $(gsdfilt_h) $(gsmatrix_h) $(gsstate_h) $(gxdevice_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zdfilter.$(OBJ) $(C_) $(PSSRC)zdfilter.c $(PSOBJ)zfont.$(OBJ) : $(PSSRC)zfont.c $(OP)\ $(gsstruct_h) $(gxdevice_h) $(gxfont_h) $(gxfcache_h)\ $(gzstate_h)\ $(ialloc_h) $(iddict_h) $(igstate_h) $(iname_h) $(isave_h) $(ivmspace_h)\ - $(bfont_h) $(store_h) $(gscencs_h) + $(bfont_h) $(store_h) $(gscencs_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfont.$(OBJ) $(C_) $(PSSRC)zfont.c $(PSOBJ)zfontenum.$(OBJ) : $(PSSRC)zfontenum.c $(OP)\ - $(memory__h) $(gsstruct_h) $(ialloc_h) $(idict_h) + $(memory__h) $(gsstruct_h) $(ialloc_h) $(idict_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfontenum.$(OBJ) $(C_) $(PSSRC)zfontenum.c $(PSOBJ)zgstate.$(OBJ) : $(PSSRC)zgstate.c $(OP) $(math__h)\ $(gsmatrix_h)\ - $(ialloc_h) $(icremap_h) $(idict_h) $(igstate_h) $(istruct_h) $(store_h) + $(ialloc_h) $(icremap_h) $(idict_h) $(igstate_h) $(istruct_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zgstate.$(OBJ) $(C_) $(PSSRC)zgstate.c $(PSOBJ)zht.$(OBJ) : $(PSSRC)zht.c $(OP) $(memory__h)\ $(gsmatrix_h) $(gsstate_h) $(gsstruct_h) $(gxdevice_h) $(gzht_h)\ - $(ialloc_h) $(estack_h) $(igstate_h) $(iht_h) $(store_h) + $(ialloc_h) $(estack_h) $(igstate_h) $(iht_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zht.$(OBJ) $(C_) $(PSSRC)zht.c $(PSOBJ)zimage.$(OBJ) : $(PSSRC)zimage.c $(OP) $(math__h) $(memory__h) $(stat__h)\ $(gscspace_h) $(gscssub_h) $(gsimage_h) $(gsmatrix_h) $(gsstruct_h)\ $(gxiparam_h)\ $(estack_h) $(ialloc_h) $(ifilter_h) $(igstate_h) $(iimage_h) $(ilevel_h)\ - $(store_h) $(stream_h) $(gxcspace_h) + $(store_h) $(stream_h) $(gxcspace_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zimage.$(OBJ) $(C_) $(PSSRC)zimage.c $(PSOBJ)zmatrix.$(OBJ) : $(PSSRC)zmatrix.c $(OP)\ - $(gsmatrix_h) $(igstate_h) $(gscoord_h) $(store_h) + $(gsmatrix_h) $(igstate_h) $(gscoord_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zmatrix.$(OBJ) $(C_) $(PSSRC)zmatrix.c $(PSOBJ)zpaint.$(OBJ) : $(PSSRC)zpaint.c $(OP)\ - $(gspaint_h) $(igstate_h) + $(gspaint_h) $(igstate_h) $(MAKEDIRS) $(PSCC) $(PSO_)zpaint.$(OBJ) $(C_) $(PSSRC)zpaint.c $(PSOBJ)zpath.$(OBJ) : $(PSSRC)zpath.c $(OP) $(math__h)\ - $(gsmatrix_h) $(gspath_h) $(igstate_h) $(store_h) + $(gsmatrix_h) $(gspath_h) $(igstate_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zpath.$(OBJ) $(C_) $(PSSRC)zpath.c # Define the base PostScript language interpreter. @@ -566,7 +593,7 @@ $(PSD)psbase.dev : $(INT_MAK) $(ECHOGS_XE) $(INT_OBJS)\ $(PSD)isupport.dev $(PSD)nobtoken.dev $(PSD)nousparm.dev\ $(GLD)rld.dev $(GLD)rle.dev $(GLD)sfile.dev $(PSD)dscparse.dev \ - $(PSD)fapi_ps.dev + $(PSD)fapi_ps.dev $(MAKEDIRS) $(SETMOD) $(PSD)psbase $(INT_MAIN) $(ADDMOD) $(PSD)psbase -obj $(INT_CONFIG) $(ADDMOD) $(PSD)psbase -obj $(INT1) @@ -599,6 +626,7 @@ $(ADDMOD) $(PSD)psbase -iodev stdin stdout stderr lineedit statementedit $(ADDMOD) $(PSD)psbase -include $(PSD)isupport $(PSD)nobtoken $(PSD)nousparm $(ADDMOD) $(PSD)psbase -include $(GLD)rld $(GLD)rle $(GLD)sfile $(PSD)dscparse + $(ADDMOD) $(PSD)psbase -include $(GLD)fapi_ps $(ADDMOD) $(PSD)psbase -replace $(GLD)gsiodevs # -------------------------- Feature definitions -------------------------- # @@ -606,22 +634,23 @@ # ---------------- Full Level 1 interpreter ---------------- # # We keep the old name for backward compatibility. -$(PSD)level1.dev : $(PSD)psl1.dev +$(PSD)level1.dev : $(PSD)psl1.dev $(MAKEDIRS) $(CP_) $(PSD)psl1.dev $(PSD)level1.dev $(PSD)psl1.dev : $(INT_MAK) $(ECHOGS_XE)\ - $(PSD)psbase.dev $(PSD)bcp.dev $(PSD)path1.dev $(PSD)type1.dev + $(PSD)psbase.dev $(PSD)bcp.dev $(PSD)path1.dev $(PSD)type1.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)psl1 -include $(PSD)psbase $(PSD)bcp $(PSD)path1 $(PSD)type1 $(ADDMOD) $(PSD)psl1 -emulator PostScript PostScriptLevel1 - $(ADDMOD) $(PSD)psbase -include $(GLD)fapi_ps # -------- Level 1 color extensions (CMYK color and colorimage) -------- # -$(PSD)color.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)cmyklib.dev $(GLD)colimlib.dev $(PSD)cmykread.dev +$(PSD)color.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)cmyklib.dev $(GLD)colimlib.dev\ + $(PSD)cmykread.dev $(MAKEDIRS) $(SETMOD) $(PSD)color -include $(GLD)cmyklib $(GLD)colimlib $(PSD)cmykread cmykread_=$(PSOBJ)zcolor1.$(OBJ) $(PSOBJ)zht1.$(OBJ) -$(PSD)cmykread.dev : $(INT_MAK) $(ECHOGS_XE) $(cmykread_) +$(PSD)cmykread.dev : $(INT_MAK) $(ECHOGS_XE) $(cmykread_) $(MAKEDIRS) $(SETMOD) $(PSD)cmykread $(cmykread_) $(ADDMOD) $(PSD)cmykread -oper zcolor1 zht1 @@ -629,12 +658,14 @@ $(gscolor1_h) $(gscssub_h)\ $(gxcmap_h) $(gxcspace_h) $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h)\ $(gzstate_h)\ - $(ialloc_h) $(icolor_h) $(iimage_h) $(estack_h) $(iutil_h) $(igstate_h) $(store_h) + $(ialloc_h) $(icolor_h) $(iimage_h) $(estack_h) $(iutil_h) $(igstate_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcolor1.$(OBJ) $(C_) $(PSSRC)zcolor1.c $(PSOBJ)zht1.$(OBJ) : $(PSSRC)zht1.c $(OP) $(memory__h)\ $(gsmatrix_h) $(gsstate_h) $(gsstruct_h) $(gxdevice_h) $(gzht_h)\ - $(ialloc_h) $(estack_h) $(igstate_h) $(iht_h) $(store_h) + $(ialloc_h) $(estack_h) $(igstate_h) $(iht_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zht1.$(OBJ) $(C_) $(PSSRC)zht1.c # ---------------- DSC Parser ---------------- # @@ -648,35 +679,39 @@ $(PSOBJ)zdscpars.$(OBJ) : $(PSSRC)zdscpars.c $(GH) $(memory__h) $(string__h)\ $(dscparse_h) $(estack_h) $(ialloc_h) $(idict_h) $(iddict_h) $(iname_h)\ $(iparam_h) $(istack_h) $(ivmspace_h) $(oper_h) $(store_h)\ - $(gsstruct_h) + $(gsstruct_h) $(MAKEDIRS) $(PSCC) $(PSO_)zdscpars.$(OBJ) $(C_) $(PSSRC)zdscpars.c -$(PSOBJ)dscparse.$(OBJ) : $(PSSRC)dscparse.c $(dscparse_h) $(stdio__h) +$(PSOBJ)dscparse.$(OBJ) : $(PSSRC)dscparse.c $(dscparse_h) $(stdio__h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)dscparse.$(OBJ) $(C_) $(PSSRC)dscparse.c dscparse_=$(PSOBJ)zdscpars.$(OBJ) $(PSOBJ)dscparse.$(OBJ) -$(PSD)dscparse.dev : $(INT_MAK) $(ECHOGS_XE) $(dscparse_) +$(PSD)dscparse.dev : $(INT_MAK) $(ECHOGS_XE) $(dscparse_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)dscparse -obj $(dscparse_) $(ADDMOD) $(PSD)dscparse -oper zdscpars # A feature to pass the Orientation information from the DSC comments # to setpagedevice. -$(PSD)usedsc.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)dscparse.dev +$(PSD)usedsc.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)dscparse.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)usedsc -include $(PSD)dscparse -ps gs_dscp # ---- Level 1 path miscellany (arcs, pathbbox, path enumeration) ---- # path1_=$(PSOBJ)zpath1.$(OBJ) -$(PSD)path1.dev : $(INT_MAK) $(ECHOGS_XE) $(path1_) $(GLD)path1lib.dev +$(PSD)path1.dev : $(INT_MAK) $(ECHOGS_XE) $(path1_) $(GLD)path1lib.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)path1 $(path1_) $(ADDMOD) $(PSD)path1 -include $(GLD)path1lib $(ADDMOD) $(PSD)path1 -oper zpath1 $(PSOBJ)zpath1.$(OBJ) : $(PSSRC)zpath1.c $(OP) $(memory__h)\ $(ialloc_h) $(estack_h) $(gspath_h) $(gsstruct_h) $(igstate_h)\ - $(oparc_h) $(store_h) + $(oparc_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zpath1.$(OBJ) $(C_) $(PSSRC)zpath1.c # ================ Level-independent PostScript options ================ # @@ -684,63 +719,69 @@ # ---------------- BCP filters ---------------- # bcp_=$(GLOBJ)sbcp.$(OBJ) $(PSOBJ)zfbcp.$(OBJ) -$(PSD)bcp.dev : $(INT_MAK) $(ECHOGS_XE) $(bcp_) +$(PSD)bcp.dev : $(INT_MAK) $(ECHOGS_XE) $(bcp_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)bcp $(bcp_) $(ADDMOD) $(PSD)bcp -oper zfbcp $(PSOBJ)zfbcp.$(OBJ) : $(PSSRC)zfbcp.c $(OP) $(memory__h)\ $(gsstruct_h) $(ialloc_h) $(ifilter_h)\ - $(sbcp_h) $(stream_h) $(strimpl_h) + $(sbcp_h) $(stream_h) $(strimpl_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfbcp.$(OBJ) $(C_) $(PSSRC)zfbcp.c # ---------------- Incremental font loading ---------------- # # (This only works for Type 1 fonts without eexec encryption.) -$(PSD)diskfont.dev : $(INT_MAK) $(ECHOGS_XE) +$(PSD)diskfont.dev : $(INT_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(PSD)diskfont -ps gs_diskf # ---------------- Double-precision floats ---------------- # double_=$(PSOBJ)zdouble.$(OBJ) -$(PSD)double.dev : $(INT_MAK) $(ECHOGS_XE) $(double_) +$(PSD)double.dev : $(INT_MAK) $(ECHOGS_XE) $(double_) $(MAKEDIRS) $(SETMOD) $(PSD)double $(double_) $(ADDMOD) $(PSD)double -oper zdouble1 zdouble2 $(PSOBJ)zdouble.$(OBJ) : $(PSSRC)zdouble.c $(OP)\ $(ctype__h) $(math__h) $(memory__h) $(string__h)\ - $(gxfarith_h) $(store_h) + $(gxfarith_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zdouble.$(OBJ) $(C_) $(PSSRC)zdouble.c # ---------------- EPSF files with binary headers ---------------- # -$(PSD)epsf.dev : $(INT_MAK) $(ECHOGS_XE) +$(PSD)epsf.dev : $(INT_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(PSD)epsf -ps gs_epsf # ---------------- RasterOp ---------------- # # This should be a separable feature in the core also.... -$(PSD)rasterop.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)roplib.dev $(PSD)ropread.dev +$(PSD)rasterop.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)roplib.dev $(PSD)ropread.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)rasterop -include $(GLD)roplib $(PSD)ropread ropread_=$(PSOBJ)zrop.$(OBJ) -$(PSD)ropread.dev : $(INT_MAK) $(ECHOGS_XE) $(ropread_) +$(PSD)ropread.dev : $(INT_MAK) $(ECHOGS_XE) $(ropread_) $(MAKEDIRS) $(SETMOD) $(PSD)ropread $(ropread_) $(ADDMOD) $(PSD)ropread -oper zrop $(PSOBJ)zrop.$(OBJ) : $(PSSRC)zrop.c $(OP) $(memory__h)\ $(gsrop_h) $(gsutil_h) $(gxdevice_h)\ - $(idict_h) $(idparam_h) $(igstate_h) $(store_h) + $(idict_h) $(idparam_h) $(igstate_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zrop.$(OBJ) $(C_) $(PSSRC)zrop.c # ---------------- PostScript Type 1 (and Type 4) fonts ---------------- # -$(PSD)type1.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)psf1lib.dev $(PSD)psf1read.dev +$(PSD)type1.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)psf1lib.dev $(PSD)psf1read.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)type1 -include $(GLD)psf1lib $(PSD)psf1read psf1read_1=$(PSOBJ)zchar1.$(OBJ) $(PSOBJ)zcharout.$(OBJ) psf1read_2=$(PSOBJ)zfont1.$(OBJ) $(PSOBJ)zmisc1.$(OBJ) psf1read_=$(psf1read_1) $(psf1read_2) -$(PSD)psf1read.dev : $(INT_MAK) $(ECHOGS_XE) $(psf1read_) $(GLD)seexec.dev +$(PSD)psf1read.dev : $(INT_MAK) $(ECHOGS_XE) $(psf1read_) $(GLD)seexec.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)psf1read $(psf1read_1) $(ADDMOD) $(PSD)psf1read -obj $(psf1read_2) $(ADDMOD) $(PSD)psf1read -include $(GLD)seexec @@ -752,41 +793,42 @@ $(gxdevice_h) $(gxfixed_h) $(gxmatrix_h)\ $(gxfont_h) $(gxfont1_h) $(gxtype1_h) $(gxfcid_h) $(gxchar_h) $(gzstate_h)\ $(estack_h) $(ialloc_h) $(ichar_h) $(ichar1_h) $(icharout_h)\ - $(idict_h) $(ifont_h) $(igstate_h) $(iname_h) $(iutil_h) $(store_h) + $(idict_h) $(ifont_h) $(igstate_h) $(iname_h) $(iutil_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zchar1.$(OBJ) $(C_) $(PSSRC)zchar1.c $(PSOBJ)zfont1.$(OBJ) : $(PSSRC)zfont1.c $(OP) $(memory__h)\ $(gsmatrix_h) $(gxdevice_h)\ $(gxfixed_h) $(gxfont_h) $(gxfont1_h)\ $(bfont_h) $(ialloc_h) $(ichar1_h) $(icharout_h) $(idict_h) $(idparam_h)\ - $(ifont1_h) $(iname_h) $(store_h) + $(ifont1_h) $(iname_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfont1.$(OBJ) $(C_) $(PSSRC)zfont1.c $(PSOBJ)zmisc1.$(OBJ) : $(PSSRC)zmisc1.c $(OP) $(memory__h)\ $(gscrypt1_h)\ $(idict_h) $(idparam_h) $(ifilter_h)\ - $(sfilter_h) $(stream_h) $(strimpl_h) + $(sfilter_h) $(stream_h) $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)zmisc1.$(OBJ) $(C_) $(PSSRC)zmisc1.c # -------------- Compact Font Format and Type 2 charstrings ------------- # -$(PSD)cff.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)psl2int.dev +$(PSD)cff.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)psl2int.dev $(MAKEDIRS) $(SETMOD) $(PSD)cff -include $(PSD)psl2int -ps gs_css_e gs_cff $(PSOBJ)zchar2.$(OBJ) : $(PSSRC)zchar2.c $(OP)\ $(gxfixed_h) $(gxmatrix_h) $(gxfont_h) $(gxfont1_h) $(gxtype1_h)\ - $(ichar1_h) + $(ichar1_h) $(MAKEDIRS) $(PSCC) $(PSO_)zchar2.$(OBJ) $(C_) $(PSSRC)zchar2.c $(PSOBJ)zfont2.$(OBJ) : $(PSSRC)zfont2.c $(OP) $(string__h)\ $(gsmatrix_h) $(gxfixed_h) $(gxfont_h) $(gxfont1_h)\ $(bfont_h) $(idict_h) $(idparam_h) $(ifont1_h) $(ifont2_h)\ - $(iname_h) $(iddict_h) $(store_h) + $(iname_h) $(iddict_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfont2.$(OBJ) $(C_) $(PSSRC)zfont2.c type2_=$(PSOBJ)zchar2.$(OBJ) $(PSOBJ)zfont2.$(OBJ) $(PSD)type2.dev : $(INT_MAK) $(ECHOGS_XE) $(type2_)\ - $(PSD)type1.dev $(GLD)psf2lib.dev + $(PSD)type1.dev $(GLD)psf2lib.dev $(MAKEDIRS) $(SETMOD) $(PSD)type2 $(type2_) $(ADDMOD) $(PSD)type2 -oper zchar2 zfont2 $(ADDMOD) $(PSD)type2 -include $(PSD)type1 $(GLD)psf2lib @@ -796,16 +838,16 @@ $(PSOBJ)zchar32.$(OBJ) : $(PSSRC)zchar32.c $(OP)\ $(gsccode_h) $(gsmatrix_h) $(gsutil_h)\ $(gxfcache_h) $(gxfixed_h) $(gxfont_h)\ - $(ifont_h) $(igstate_h) $(store_h) + $(ifont_h) $(igstate_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zchar32.$(OBJ) $(C_) $(PSSRC)zchar32.c $(PSOBJ)zfont32.$(OBJ) : $(PSSRC)zfont32.c $(OP)\ $(gsccode_h) $(gsmatrix_h) $(gsutil_h) $(gxfont_h) $(gxtext_h)\ - $(bfont_h) $(store_h) $(ichar_h) + $(bfont_h) $(store_h) $(ichar_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfont32.$(OBJ) $(C_) $(PSSRC)zfont32.c type32_=$(PSOBJ)zchar32.$(OBJ) $(PSOBJ)zfont32.$(OBJ) -$(PSD)type32.dev : $(INT_MAK) $(ECHOGS_XE) $(type32_) +$(PSD)type32.dev : $(INT_MAK) $(ECHOGS_XE) $(type32_) $(MAKEDIRS) $(SETMOD) $(PSD)type32 $(type32_) $(ADDMOD) $(PSD)type32 -oper zchar32 zfont32 $(ADDMOD) $(PSD)type32 -ps gs_res gs_typ32 @@ -813,21 +855,24 @@ # ---------------- TrueType and PostScript Type 42 fonts ---------------- # # Mac glyph support (has an internal dependency) -$(PSD)macroman.dev : $(INT_MAK) $(ECHOGS_XE) $(PSINIT)gs_mro_e.ps +$(PSD)macroman.dev : $(INT_MAK) $(ECHOGS_XE) $(PSINIT)gs_mro_e.ps\ + $(MAKEDIRS) $(SETMOD) $(PSD)macroman -ps gs_mro_e $(PSD)macglyph.dev : $(INT_MAK) $(ECHOGS_XE) $(PSINIT)gs_mgl_e.ps\ - $(PSD)macroman.dev + $(PSD)macroman.dev $(MAKEDIRS) $(SETMOD) $(PSD)macglyph -include $(PSD)macroman -ps gs_mgl_e # Native TrueType support -$(PSD)ttfont.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)macglyph.dev $(PSD)type42.dev +$(PSD)ttfont.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)macglyph.dev $(PSD)type42.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)ttfont -include $(PSD)macglyph $(PSD)type42 $(ADDMOD) $(PSD)ttfont -ps gs_wan_e gs_agl gs_ttf # Type 42 (embedded TrueType) support type42read_=$(PSOBJ)zchar42.$(OBJ) $(PSOBJ)zcharout.$(OBJ) $(PSOBJ)zfont42.$(OBJ) -$(PSD)type42.dev : $(INT_MAK) $(ECHOGS_XE) $(type42read_) $(GLD)ttflib.dev +$(PSD)type42.dev : $(INT_MAK) $(ECHOGS_XE) $(type42read_) $(GLD)ttflib.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)type42 $(type42read_) $(ADDMOD) $(PSD)type42 -include $(GLD)ttflib $(ADDMOD) $(PSD)type42 -oper zchar42 zfont42 @@ -838,38 +883,41 @@ $(gxfixed_h) $(gxfont_h) $(gxfont42_h)\ $(gxistate_h) $(gxpath_h) $(gxtext_h) $(gzstate_h)\ $(dstack_h) $(estack_h) $(ichar_h) $(icharout_h)\ - $(ifont_h) $(igstate_h) $(store_h) $(string_h) $(zchar42_h) $(idict_h) + $(ifont_h) $(igstate_h) $(store_h) $(string_h) $(zchar42_h)\ + $(idict_h) $(MAKEDIRS) $(PSCC) $(PSO_)zchar42.$(OBJ) $(C_) $(PSSRC)zchar42.c $(PSOBJ)zfont42.$(OBJ) : $(PSSRC)zfont42.c $(OP) $(memory__h)\ $(gsccode_h) $(gsmatrix_h) $(gxfont_h) $(gxfont42_h)\ $(bfont_h) $(icharout_h) $(idict_h) $(idparam_h) $(ifont42_h) $(iname_h)\ - $(ichar1_h) $(store_h) + $(ichar1_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfont42.$(OBJ) $(C_) $(PSSRC)zfont42.c # ======================== Precompilation options ======================== # # ---------------- Stochastic halftone ---------------- # -$(PSD)stocht.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)stocht$(COMPILE_INITS).dev +$(PSD)stocht.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)stocht$(COMPILE_INITS).dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)stocht -include $(PSD)stocht$(COMPILE_INITS) # If we aren't compiling, just include the PostScript code. # Note that the resource machinery must be loaded first. -$(PSD)stocht0.dev : $(INT_MAK) $(ECHOGS_XE) +$(PSD)stocht0.dev : $(INT_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(PSD)stocht0 -ps gs_res ht_ccsto # If we are compiling, a special compilation step is needed. stocht1_=$(PSOBJ)ht_ccsto.$(OBJ) -$(PSD)stocht1.dev : $(INT_MAK) $(ECHOGS_XE) $(stocht1_) $(PSD)stocht0.dev +$(PSD)stocht1.dev : $(INT_MAK) $(ECHOGS_XE) $(stocht1_) $(PSD)stocht0.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)stocht1 $(stocht1_) $(ADDMOD) $(PSD)stocht1 -halftone $(Q)StochasticDefault$(Q) $(ADDMOD) $(PSD)stocht1 -include $(PSD)stocht0 -$(PSOBJ)ht_ccsto.$(OBJ) : $(PSGEN)ht_ccsto.c $(gxdhtres_h) +$(PSOBJ)ht_ccsto.$(OBJ) : $(PSGEN)ht_ccsto.c $(gxdhtres_h) $(MAKEDIRS) $(PSCC) $(PSO_)ht_ccsto.$(OBJ) $(C_) $(PSGEN)ht_ccsto.c -$(PSGEN)ht_ccsto.c : $(PSLIB)ht_ccsto.ps $(GENHT_XE) +$(PSGEN)ht_ccsto.c : $(PSLIB)ht_ccsto.ps $(GENHT_XE) $(MAKEDIRS) $(EXP)$(GENHT_XE) $(PSLIB)ht_ccsto.ps $(PSGEN)ht_ccsto.c # ================ PS LL3 features used internally in L2 ================ # @@ -880,7 +928,8 @@ # Generic support, and FunctionType 0. funcread_=$(PSOBJ)zfunc.$(OBJ) $(PSOBJ)zfunc0.$(OBJ) -$(PSD)func.dev : $(INT_MAK) $(ECHOGS_XE) $(funcread_) $(GLD)funclib.dev +$(PSD)func.dev : $(INT_MAK) $(ECHOGS_XE) $(funcread_) $(GLD)funclib.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)func $(funcread_) $(ADDMOD) $(PSD)func -oper zfunc $(ADDMOD) $(PSD)func -functiontype 0 @@ -888,38 +937,41 @@ $(PSOBJ)zfunc.$(OBJ) : $(PSSRC)zfunc.c $(OP) $(memory__h)\ $(gscdefs_h) $(gsfunc_h) $(gsstruct_h)\ - $(ialloc_h) $(idict_h) $(idparam_h) $(ifunc_h) $(store_h) $(zfunc_h) + $(ialloc_h) $(idict_h) $(idparam_h) $(ifunc_h) $(store_h) $(zfunc_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfunc.$(OBJ) $(C_) $(PSSRC)zfunc.c $(PSOBJ)zfunc0.$(OBJ) : $(PSSRC)zfunc0.c $(OP) $(memory__h)\ $(gsdsrc_h) $(gsfunc_h) $(gsfunc0_h)\ $(stream_h)\ - $(files_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifunc_h) + $(files_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifunc_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfunc0.$(OBJ) $(C_) $(PSSRC)zfunc0.c # ---------------- zlib/Flate filters ---------------- # fzlib_=$(PSOBJ)zfzlib.$(OBJ) $(PSD)fzlib.dev : $(INT_MAK) $(ECHOGS_XE) $(fzlib_)\ - $(GLD)szlibe.dev $(GLD)szlibd.dev + $(GLD)szlibe.dev $(GLD)szlibd.dev $(MAKEDIRS) $(SETMOD) $(PSD)fzlib -include $(GLD)szlibe $(GLD)szlibd $(ADDMOD) $(PSD)fzlib -obj $(fzlib_) $(ADDMOD) $(PSD)fzlib -oper zfzlib $(PSOBJ)zfzlib.$(OBJ) : $(PSSRC)zfzlib.c $(OP)\ $(idict_h) $(idparam_h) $(ifilter_h) $(ifrpred_h) $(ifwpred_h)\ - $(spdiffx_h) $(spngpx_h) $(strimpl_h) $(szlibx_h) + $(spdiffx_h) $(spngpx_h) $(strimpl_h) $(szlibx_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfzlib.$(OBJ) $(C_) $(PSSRC)zfzlib.c # ---------------- ReusableStreamDecode filter ---------------- # # This is also used by the implementation of CIDFontType 0 fonts. -$(PSD)frsd.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)zfrsd.dev +$(PSD)frsd.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)zfrsd.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)frsd -include $(PSD)zfrsd $(ADDMOD) $(PSD)frsd -ps gs_lev2 gs_res gs_frsd zfrsd_=$(PSOBJ)zfrsd.$(OBJ) -$(PSD)zfrsd.dev : $(INT_MAK) $(ECHOGS_XE) $(zfrsd_) +$(PSD)zfrsd.dev : $(INT_MAK) $(ECHOGS_XE) $(zfrsd_) $(MAKEDIRS) $(SETMOD) $(PSD)zfrsd $(zfrsd_) $(ADDMOD) $(PSD)zfrsd -oper zfrsd @@ -927,7 +979,7 @@ $(gsfname_h) $(gxiodev_h)\ $(sfilter_h) $(stream_h) $(strimpl_h)\ $(files_h) $(idict_h) $(idparam_h) $(iname_h) $(istruct_h) $(store_h)\ - $(zfile_h) $(zfrsd_h) + $(zfile_h) $(zfrsd_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfrsd.$(OBJ) $(C_) $(PSSRC)zfrsd.c # ======================== PostScript Level 2 ======================== # @@ -944,7 +996,7 @@ $(PSD)filter.dev $(PSD)iodevice.dev $(PSD)pagedev.dev $(PSD)pattern.dev\ $(PSD)psl1.dev $(GLD)psl2lib.dev $(PSD)psl2read.dev\ $(PSD)sepr.dev $(PSD)type32.dev $(PSD)type42.dev\ - $(PSD)fimscale.dev $(PSD)form.dev + $(PSD)fimscale.dev $(PSD)form.dev $(MAKEDIRS) $(SETMOD) $(PSD)psl2 -include $(PSD)dpsand2 $(ADDMOD) $(PSD)psl2 -include $(PSD)cidfont $(PSD)cie $(PSD)cmapread $(PSD)compfont $(ADDMOD) $(PSD)psl2 -include $(PSD)dct $(PSD)filter $(PSD)iodevice @@ -958,7 +1010,7 @@ psl2int_=$(PSOBJ)iutil2.$(OBJ) $(PSOBJ)zmisc2.$(OBJ) $(PSD)psl2int.dev : $(INT_MAK) $(ECHOGS_XE) $(psl2int_)\ - $(PSD)dps2int.dev $(PSD)usparam.dev + $(PSD)dps2int.dev $(PSD)usparam.dev $(MAKEDIRS) $(SETMOD) $(PSD)psl2int $(psl2int_) $(ADDMOD) $(PSD)psl2int -include $(PSD)dps2int $(PSD)usparam $(ADDMOD) $(PSD)psl2int -oper zmisc2 @@ -968,27 +1020,30 @@ $(PSOBJ)iutil2.$(OBJ) : $(PSSRC)iutil2.c $(GH) $(memory__h) $(string__h)\ $(gsparam_h) $(gsutil_h)\ - $(ierrors_h) $(idict_h) $(imemory_h) $(iutil_h) $(iutil2_h) $(opcheck_h) + $(ierrors_h) $(idict_h) $(imemory_h) $(iutil_h) $(iutil2_h) $(opcheck_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)iutil2.$(OBJ) $(C_) $(PSSRC)iutil2.c $(PSOBJ)zmisc2.$(OBJ) : $(PSSRC)zmisc2.c $(OP) $(memory__h) $(string__h)\ $(iddict_h) $(idparam_h) $(iparam_h) $(dstack_h) $(estack_h)\ - $(ilevel_h) $(iname_h) $(iutil2_h) $(ivmspace_h) $(store_h) + $(ilevel_h) $(iname_h) $(iutil2_h) $(ivmspace_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zmisc2.$(OBJ) $(C_) $(PSSRC)zmisc2.c # Define support for user and system parameters. # We make this a separate module only because it must have a default. nousparm_=$(PSOBJ)inouparm.$(OBJ) -$(PSD)nousparm.dev : $(INT_MAK) $(ECHOGS_XE) $(nousparm_) +$(PSD)nousparm.dev : $(INT_MAK) $(ECHOGS_XE) $(nousparm_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)nousparm $(nousparm_) $(PSOBJ)inouparm.$(OBJ) : $(PSSRC)inouparm.c\ - $(ghost_h) $(icontext_h) + $(ghost_h) $(icontext_h) $(MAKEDIRS) $(PSCC) $(PSO_)inouparm.$(OBJ) $(C_) $(PSSRC)inouparm.c usparam_=$(PSOBJ)zusparam.$(OBJ) -$(PSD)usparam.dev : $(INT_MAK) $(ECHOGS_XE) $(usparam_) +$(PSD)usparam.dev : $(INT_MAK) $(ECHOGS_XE) $(usparam_) $(MAKEDIRS) $(SETMOD) $(PSD)usparam $(usparam_) $(ADDMOD) $(PSD)usparam -oper zusparam -replace $(PSD)nousparm @@ -998,7 +1053,8 @@ $(gscdefs_h) $(gsfont_h) $(gsstruct_h) $(gsutil_h) $(gxht_h)\ $(ialloc_h) $(icontext_h) $(idict_h) $(idparam_h) $(iparam_h)\ $(iname_h) $(itoken_h) $(iutil2_h) $(ivmem2_h)\ - $(dstack_h) $(estack_h) $(store_h) $(gsnamecl_h) $(gslibctx_h) + $(dstack_h) $(estack_h) $(store_h) $(gsnamecl_h) $(gslibctx_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zusparam.$(OBJ) $(C_) $(PSSRC)zusparam.c # Define full Level 2 support. @@ -1008,7 +1064,7 @@ psl2read_=$(PSOBJ)zcolor2.$(OBJ) $(PSOBJ)zcsindex.$(OBJ) $(PSOBJ)zht2.$(OBJ) $(PSOBJ)zimage2.$(OBJ) # Note that zmisc2 includes both Level 1 and Level 2 operators. $(PSD)psl2read.dev : $(INT_MAK) $(ECHOGS_XE) $(psl2read_)\ - $(PSD)psl2int.dev $(PSD)dps2read.dev + $(PSD)psl2int.dev $(PSD)dps2read.dev $(MAKEDIRS) $(SETMOD) $(PSD)psl2read $(psl2read_) $(ADDMOD) $(PSD)psl2read -include $(PSD)psl2int $(PSD)dps2read $(ADDMOD) $(PSD)psl2read -oper zht2_l2 @@ -1017,30 +1073,33 @@ $(gscolor_h) $(gscssub_h) $(gsmatrix_h) $(gsstruct_h)\ $(gxcolor2_h) $(gxcspace_h) $(gxdcolor_h) $(gxdevice_h) $(gxdevmem_h) $(gxfixed_h) $(gxpcolor_h)\ $(estack_h) $(ialloc_h) $(idict_h) $(iname_h) $(idparam_h) $(igstate_h) $(istruct_h)\ - $(store_h) + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zcolor2.$(OBJ) $(C_) $(PSSRC)zcolor2.c $(PSOBJ)zcsindex.$(OBJ) : $(PSSRC)zcsindex.c $(OP) $(memory__h)\ $(gscolor_h) $(gsstruct_h) $(gxfixed_h) $(gxcolor2_h) $(gxcspace_h) $(gsmatrix_h)\ - $(ialloc_h) $(icsmap_h) $(estack_h) $(igstate_h) $(ivmspace_h) $(store_h) + $(ialloc_h) $(icsmap_h) $(estack_h) $(igstate_h) $(ivmspace_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcsindex.$(OBJ) $(C_) $(PSSRC)zcsindex.c $(PSOBJ)zht2.$(OBJ) : $(PSSRC)zht2.c $(OP)\ $(gsstruct_h) $(gxdevice_h) $(gzht_h)\ $(estack_h) $(ialloc_h) $(icolor_h) $(iddict_h) $(idparam_h) $(igstate_h)\ - $(iht_h) $(store_h) $(iname) $(zht2_h) + $(iht_h) $(store_h) $(iname) $(zht2_h) $(MAKEDIRS) $(PSCC) $(PSO_)zht2.$(OBJ) $(C_) $(PSSRC)zht2.c $(PSOBJ)zimage2.$(OBJ) : $(PSSRC)zimage2.c $(OP) $(math__h) $(memory__h)\ $(gscolor_h) $(gscolor2_h) $(gscspace_h) $(gsimage_h) $(gsmatrix_h)\ $(gxfixed_h)\ - $(idict_h) $(idparam_h) $(iimage_h) $(iimage2_h) $(ilevel_h) $(igstate_h) + $(idict_h) $(idparam_h) $(iimage_h) $(iimage2_h) $(ilevel_h) $(igstate_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zimage2.$(OBJ) $(C_) $(PSSRC)zimage2.c # ---------------- setpagedevice ---------------- # pagedev_=$(PSOBJ)zdevice2.$(OBJ) $(PSOBJ)zmedia2.$(OBJ) -$(PSD)pagedev.dev : $(INT_MAK) $(ECHOGS_XE) $(pagedev_) +$(PSD)pagedev.dev : $(INT_MAK) $(ECHOGS_XE) $(pagedev_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)pagedev $(pagedev_) $(ADDMOD) $(PSD)pagedev -oper zdevice2_l2 zmedia2_l2 $(ADDMOD) $(PSD)pagedev -ps gs_setpd @@ -1048,28 +1107,30 @@ $(PSOBJ)zdevice2.$(OBJ) : $(PSSRC)zdevice2.c $(OP) $(math__h) $(memory__h)\ $(dstack_h) $(estack_h)\ $(idict_h) $(idparam_h) $(igstate_h) $(iname_h) $(iutil_h) $(store_h)\ - $(gxdevice_h) $(gsstate_h) + $(gxdevice_h) $(gsstate_h) $(MAKEDIRS) $(PSCC) $(PSO_)zdevice2.$(OBJ) $(C_) $(PSSRC)zdevice2.c $(PSOBJ)zmedia2.$(OBJ) : $(PSSRC)zmedia2.c $(OP) $(math__h) $(memory__h)\ - $(gsmatrix_h) $(idict_h) $(idparam_h) $(iname_h) $(store_h) + $(gsmatrix_h) $(idict_h) $(idparam_h) $(iname_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zmedia2.$(OBJ) $(C_) $(PSSRC)zmedia2.c # ---------------- IODevices ---------------- # iodevice_=$(PSOBJ)ziodev2.$(OBJ) $(PSOBJ)zdevcal.$(OBJ) -$(PSD)iodevice.dev : $(INT_MAK) $(ECHOGS_XE) $(iodevice_) +$(PSD)iodevice.dev : $(INT_MAK) $(ECHOGS_XE) $(iodevice_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)iodevice $(iodevice_) $(ADDMOD) $(PSD)iodevice -oper ziodev2_l2 $(ADDMOD) $(PSD)iodevice -iodev null calendar $(PSOBJ)ziodev2.$(OBJ) : $(PSSRC)ziodev2.c $(OP) $(string__h) $(gp_h)\ $(gxiodev_h) $(stream_h)\ - $(dstack_h) $(files_h) $(iparam_h) $(iutil2_h) $(store_h) + $(dstack_h) $(files_h) $(iparam_h) $(iutil2_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)ziodev2.$(OBJ) $(C_) $(PSSRC)ziodev2.c $(PSOBJ)zdevcal.$(OBJ) : $(PSSRC)zdevcal.c $(GH) $(time__h)\ - $(gxiodev_h) $(iparam_h) $(istack_h) + $(gxiodev_h) $(iparam_h) $(istack_h) $(MAKEDIRS) $(PSCC) $(PSO_)zdevcal.$(OBJ) $(C_) $(PSSRC)zdevcal.c # ---------------- Filters other than the ones in sfilter.c ---------------- # @@ -1077,7 +1138,8 @@ # Standard Level 2 decoding filters only. The PDF configuration uses this. fdecode_=$(GLOBJ)scantab.$(OBJ) $(GLOBJ)scfparam.$(OBJ) $(GLOBJ)sfilter2.$(OBJ) $(PSOBJ)zfdecode.$(OBJ) $(PSD)fdecode.dev : $(INT_MAK) $(ECHOGS_XE) $(fdecode_)\ - $(GLD)cfd.dev $(GLD)lzwd.dev $(GLD)pdiff.dev $(GLD)pngp.dev $(GLD)rld.dev + $(GLD)cfd.dev $(GLD)lzwd.dev $(GLD)pdiff.dev $(GLD)pngp.dev $(GLD)rld.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)fdecode $(fdecode_) $(ADDMOD) $(PSD)fdecode -include $(GLD)cfd $(GLD)lzwd $(GLD)pdiff $(GLD)pngp $(GLD)rld $(ADDMOD) $(PSD)fdecode -oper zfdecode @@ -1087,13 +1149,13 @@ $(ialloc_h) $(idict_h) $(idparam_h) $(ifilter_h) $(ifilter2_h) $(ifrpred_h)\ $(ilevel_h) $(iparam_h)\ $(sa85x_h) $(scf_h) $(scfx_h) $(sfilter_h) $(slzwx_h) $(spdiffx_h) $(spngpx_h)\ - $(store_h) $(stream_h) $(strimpl_h) + $(store_h) $(stream_h) $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfdecode.$(OBJ) $(C_) $(PSSRC)zfdecode.c # Complete Level 2 filter capability. filter_=$(PSOBJ)zfilter2.$(OBJ) $(PSD)filter.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)fdecode.dev $(filter_)\ - $(GLD)cfe.dev $(GLD)lzwe.dev $(GLD)rle.dev + $(GLD)cfe.dev $(GLD)lzwe.dev $(GLD)rle.dev $(MAKEDIRS) $(SETMOD) $(PSD)filter -include $(PSD)fdecode $(ADDMOD) $(PSD)filter -obj $(filter_) $(ADDMOD) $(PSD)filter -include $(GLD)cfe $(GLD)lzwe $(GLD)rle @@ -1103,96 +1165,105 @@ $(gsstruct_h)\ $(ialloc_h) $(idict_h) $(idparam_h) $(ifilter_h) $(ifilter2_h) $(ifwpred_h)\ $(store_h)\ - $(sfilter_h) $(scfx_h) $(slzwx_h) $(spdiffx_h) $(spngpx_h) $(strimpl_h) + $(sfilter_h) $(scfx_h) $(slzwx_h) $(spdiffx_h) $(spngpx_h) $(strimpl_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfilter2.$(OBJ) $(C_) $(PSSRC)zfilter2.c # Extensions beyond Level 2 standard. xfilter_=$(GLD)smtf.$(OBJ) $(PSOBJ)zfilterx.$(OBJ) -$(PSD)xfilter.dev : $(INT_MAK) $(ECHOGS_XE) $(xfilter_) $(GLD)pngp.dev +$(PSD)xfilter.dev : $(INT_MAK) $(ECHOGS_XE) $(xfilter_) $(GLD)pngp.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)xfilter $(xfilter_) $(ADDMOD) $(PSD)xfilter -include $(GLD)pngp $(ADDMOD) $(PSD)xfilter -oper zfilterx $(PSOBJ)smtf.$(OBJ) : $(PSSRC)smtf.c $(AK) $(stdio__h)\ - $(smtf_h) $(strimpl_h) + $(smtf_h) $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)smtf.$(OBJ) $(C_) $(PSSRC)smtf.c $(PSOBJ)zfilterx.$(OBJ) : $(PSSRC)zfilterx.c $(OP) $(memory__h)\ $(gsstruct_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifilter_h)\ - $(store_h) $(sfilter_h) $(sbtx_h) $(smtf_h) $(strimpl_h) + $(store_h) $(sfilter_h) $(sbtx_h) $(smtf_h) $(strimpl_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfilterx.$(OBJ) $(C_) $(PSSRC)zfilterx.c # MD5 digest filter fmd5_=$(PSOBJ)zfmd5.$(OBJ) -$(PSD)fmd5.dev : $(INT_MAK) $(ECHOGS_XE) $(fmd5_) $(GLD)smd5.dev +$(PSD)fmd5.dev : $(INT_MAK) $(ECHOGS_XE) $(fmd5_) $(GLD)smd5.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)fmd5 $(fmd5_) $(ADDMOD) $(PSD)fmd5 -include $(GLD)smd5 $(ADDMOD) $(PSD)fmd5 -oper zfmd5 $(PSOBJ)zfmd5.$(OBJ) : $(PSSRC)zfmd5.c $(OP) $(memory__h)\ $(gsstruct_h) $(ialloc_h) $(ifilter_h)\ - $(smd5_h) $(stream_h) $(strimpl_h) + $(smd5_h) $(stream_h) $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfmd5.$(OBJ) $(C_) $(PSSRC)zfmd5.c # SHA-256 digest filter fsha2_=$(PSOBJ)zfsha2.$(OBJ) -$(PSD)fsha2.dev : $(INT_MAK) $(ECHOGS_XE) $(fsha2_) $(GLD)ssha2.dev +$(PSD)fsha2.dev : $(INT_MAK) $(ECHOGS_XE) $(fsha2_) $(GLD)ssha2.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)fsha2 $(fsha2_) $(ADDMOD) $(PSD)fsha2 -include $(GLD)ssha2 $(ADDMOD) $(PSD)fsha2 -oper zfsha2 $(PSOBJ)zfsha2.$(OBJ) : $(PSSRC)zfsha2.c $(OP) $(memory__h)\ $(ghost_h) $(oper_h) $(gsstruct_h) $(stream_h) $(strimpl_h)\ - $(ialloc_h) $(ifilter_h) $(ssha2_h) + $(ialloc_h) $(ifilter_h) $(ssha2_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfsha2.$(OBJ) $(C_) $(PSSRC)zfsha2.c # Arcfour cipher filter farc4_=$(PSOBJ)zfarc4.$(OBJ) -$(PSD)farc4.dev : $(INT_MAK) $(ECHOGS_XE) $(farc4_) $(GLD)sarc4.dev +$(PSD)farc4.dev : $(INT_MAK) $(ECHOGS_XE) $(farc4_) $(GLD)sarc4.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)farc4 $(farc4_) $(ADDMOD) $(PSD)farc4 -include $(GLD)sarc4 $(ADDMOD) $(PSD)farc4 -oper zfarc4 $(PSOBJ)zfarc4.$(OBJ) : $(PSSRC)zfarc4.c $(OP) $(memory__h)\ $(gsstruct_h) $(ialloc_h) $(idict_h) $(ifilter_h)\ - $(sarc4_h) $(stream_h) $(strimpl_h) + $(sarc4_h) $(stream_h) $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfarc4.$(OBJ) $(C_) $(PSSRC)zfarc4.c # AES cipher filter faes_=$(PSOBJ)zfaes.$(OBJ) -$(PSD)faes.dev : $(INT_MAK) $(ECHOGS_XE) $(faes_) $(GLD)saes.dev +$(PSD)faes.dev : $(INT_MAK) $(ECHOGS_XE) $(faes_) $(GLD)saes.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)faes $(faes_) $(ADDMOD) $(PSD)faes -include $(GLD)saes $(ADDMOD) $(PSD)faes -oper zfaes $(PSOBJ)zfaes.$(OBJ) : $(PSSRC)zfaes.c $(OP) $(memory__h)\ $(gsstruct_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifilter_h)\ - $(saes_h) $(stream_h) $(strimpl_h) + $(saes_h) $(stream_h) $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfaes.$(OBJ) $(C_) $(PSSRC)zfaes.c # JBIG2 compression filter # this can be turned on and off with a FEATURE_DEV fjbig2_=$(PSOBJ)zfjbig2_$(JBIG2_LIB).$(OBJ) -$(PSD)jbig2.dev : $(INT_MAK) $(ECHOGS_XE) $(fjbig2_) $(GLD)sjbig2.dev +$(PSD)jbig2.dev : $(INT_MAK) $(ECHOGS_XE) $(fjbig2_) $(GLD)sjbig2.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)jbig2 $(fjbig2_) $(ADDMOD) $(PSD)jbig2 -include $(GLD)sjbig2 $(ADDMOD) $(PSD)jbig2 -oper zfjbig2 $(PSOBJ)zfjbig2_jbig2dec.$(OBJ) : $(PSSRC)zfjbig2.c $(OP) $(memory__h)\ $(gsstruct_h) $(gstypes_h) $(ialloc_h) $(idict_h) $(ifilter_h)\ - $(store_h) $(stream_h) $(strimpl_h) $(sjbig2_h) + $(store_h) $(stream_h) $(strimpl_h) $(sjbig2_h) $(MAKEDIRS) $(PSJBIG2CC) $(PSO_)zfjbig2_jbig2dec.$(OBJ) $(C_) $(PSSRC)zfjbig2.c $(PSOBJ)zfjbig2_luratech.$(OBJ) : $(PSSRC)zfjbig2.c $(OP) $(memory__h)\ $(gsstruct_h) $(gstypes_h) $(ialloc_h) $(idict_h) $(ifilter_h)\ - $(store_h) $(stream_h) $(strimpl_h) $(sjbig2_h) + $(store_h) $(stream_h) $(strimpl_h) $(sjbig2_h) $(MAKEDIRS) $(PSLDFJB2CC) $(PSO_)zfjbig2_luratech.$(OBJ) $(C_) $(PSSRC)zfjbig2.c # JPX (jpeg 2000) compression filter # this can be turned on and off with a FEATURE_DEV -$(PSD)jpx.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)jpx_$(JPX_LIB).dev +$(PSD)jpx.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)jpx_$(JPX_LIB).dev\ + $(MAKEDIRS) $(CP_) $(PSD)jpx_$(JPX_LIB).dev $(PSD)jpx.dev fjpx_luratech=$(PSOBJ)zfjpx_luratech.$(OBJ) @@ -1200,10 +1271,11 @@ $(PSOBJ)zfjpx.$(OBJ) : $(PSSRC)zfjpx.c $(OP) $(memory__h)\ $(gsstruct_h) $(gstypes_h) $(ialloc_h) $(idict_h) $(ifilter_h)\ $(store_h) $(stream_h) $(strimpl_h) $(ialloc_h) $(iname_h)\ - $(gdebug_h) $(sjpx_h) + $(gdebug_h) $(sjpx_h) $(MAKEDIRS) $(PSJASCC) $(PSO_)zfjpx.$(OBJ) $(C_) $(PSSRC)zfjpx.c -$(PSD)jpx_luratech.dev : $(INT_MAK) $(ECHOGS_XE) $(fjpx_luratech) $(GLD)sjpx.dev +$(PSD)jpx_luratech.dev : $(INT_MAK) $(ECHOGS_XE) $(fjpx_luratech)\ + $(GLD)sjpx.dev $(MAKEDIRS) $(SETMOD) $(PSD)jpx_luratech $(fjpx_luratech) $(ADDMOD) $(PSD)jpx_luratech -include $(GLD)sjpx $(ADDMOD) $(PSD)jpx_luratech -include $(GLD)lwf_jp2 @@ -1211,13 +1283,15 @@ $(PSOBJ)zfjpx_luratech.$(OBJ) : $(PSSRC)zfjpx.c $(OP) $(memory__h)\ $(gsstruct_h) $(gstypes_h) $(ialloc_h) $(idict_h) $(ifilter_h)\ - $(store_h) $(stream_h) $(strimpl_h) $(sjpx_luratech_h) + $(store_h) $(stream_h) $(strimpl_h) $(sjpx_luratech_h)\ + $(MAKEDIRS) $(PSLWFJPXCC) $(PSO_)zfjpx_luratech.$(OBJ) \ $(C_) $(PSSRC)zfjpx.c fjpx_openjpeg=$(PSOBJ)zfjpx_openjpeg.$(OBJ) -$(PSD)jpx_openjpeg.dev : $(INT_MAK) $(ECHOGS_XE) $(fjpx_openjpeg) $(GLD)sjpx.dev +$(PSD)jpx_openjpeg.dev : $(INT_MAK) $(ECHOGS_XE) $(fjpx_openjpeg)\ + $(GLD)sjpx.dev $(MAKEDIRS) $(SETMOD) $(PSD)jpx_openjpeg $(fjpx_openjpeg) $(ADDMOD) $(PSD)jpx_openjpeg -include $(GLD)sjpx $(ADDMOD) $(PSD)jpx_openjpeg -include $(GLD)openjpeg @@ -1225,35 +1299,39 @@ $(PSOBJ)zfjpx_openjpeg.$(OBJ) : $(PSSRC)zfjpx.c $(OP) $(memory__h)\ $(gsstruct_h) $(gstypes_h) $(ialloc_h) $(idict_h) $(ifilter_h)\ - $(store_h) $(stream_h) $(strimpl_h) $(sjpx_openjpeg_h) + $(store_h) $(stream_h) $(strimpl_h) $(sjpx_openjpeg_h)\ + $(MAKEDIRS) $(PSOPJJPXCC) $(PSO_)zfjpx_openjpeg.$(OBJ) \ $(C_) $(PSSRC)zfjpx.c # imagemask scaling filter fimscale_=$(PSOBJ)zfimscale.$(OBJ) -$(PSD)fimscale.dev : $(INT_MAK) $(ECHOGS_XE) $(fimscale_) $(GLD)simscale.dev +$(PSD)fimscale.dev : $(INT_MAK) $(ECHOGS_XE) $(fimscale_)\ + $(GLD)simscale.dev $(MAKEDIRS) $(SETMOD) $(PSD)fimscale $(fimscale_) $(ADDMOD) $(PSD)fimscale -include $(GLD)simscale $(ADDMOD) $(PSD)fimscale -oper zfimscale $(PSOBJ)zfimscale.$(OBJ) : $(PSSRC)zfimscale.c $(OP) $(memory__h)\ $(gsstruct_h) $(ialloc_h) $(idict_h) $(ifilter_h)\ - $(simscale_h) $(stream_h) $(strimpl_h) + $(simscale_h) $(stream_h) $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfimscale.$(OBJ) $(C_) $(PSSRC)zfimscale.c # ---------------- Binary tokens ---------------- # nobtoken_=$(PSOBJ)inobtokn.$(OBJ) -$(PSD)nobtoken.dev : $(INT_MAK) $(ECHOGS_XE) $(nobtoken_) +$(PSD)nobtoken.dev : $(INT_MAK) $(ECHOGS_XE) $(nobtoken_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)nobtoken $(nobtoken_) $(PSOBJ)inobtokn.$(OBJ) : $(PSSRC)inobtokn.c $(GH)\ - $(stream_h) $(ierrors_h) $(iscan_h) $(iscanbin_h) + $(stream_h) $(ierrors_h) $(iscan_h) $(iscanbin_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)inobtokn.$(OBJ) $(C_) $(PSSRC)inobtokn.c btoken_=$(PSOBJ)iscanbin.$(OBJ) $(PSOBJ)zbseq.$(OBJ) -$(PSD)btoken.dev : $(INT_MAK) $(ECHOGS_XE) $(btoken_) +$(PSD)btoken.dev : $(INT_MAK) $(ECHOGS_XE) $(btoken_) $(MAKEDIRS) $(SETMOD) $(PSD)btoken $(btoken_) $(ADDMOD) $(PSD)btoken -oper zbseq_l2 -replace $(PSD)nobtoken $(ADDMOD) $(PSD)btoken -ps gs_btokn @@ -1263,18 +1341,19 @@ $(gsutil_h) $(gxalloc_h) $(ialloc_h) $(ibnum_h) $(iddict_h) $(iname_h)\ $(iscan_h) $(iscanbin_h) $(iutil_h) $(ivmspace_h)\ $(btoken_h) $(dstack_h) $(ostack_h)\ - $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h) + $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)iscanbin.$(OBJ) $(C_) $(PSSRC)iscanbin.c $(PSOBJ)zbseq.$(OBJ) : $(PSSRC)zbseq.c $(OP) $(memory__h)\ $(gxalloc_h)\ - $(btoken_h) $(ialloc_h) $(istruct_h) $(store_h) + $(btoken_h) $(ialloc_h) $(istruct_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zbseq.$(OBJ) $(C_) $(PSSRC)zbseq.c # ---------------- User paths & insideness testing ---------------- # upath_=$(PSOBJ)zupath.$(OBJ) $(PSOBJ)ibnum.$(OBJ) $(GLOBJ)gdevhit.$(OBJ) -$(PSD)upath.dev : $(INT_MAK) $(ECHOGS_XE) $(upath_) +$(PSD)upath.dev : $(INT_MAK) $(ECHOGS_XE) $(upath_) $(MAKEDIRS) $(SETMOD) $(PSD)upath $(upath_) $(ADDMOD) $(PSD)upath -oper zupath_l2 @@ -1282,57 +1361,65 @@ $(dstack_h) $(oparc_h) $(store_h)\ $(ibnum_h) $(idict_h) $(igstate_h) $(iname_h) $(iutil_h) $(stream_h)\ $(gscoord_h) $(gsmatrix_h) $(gspaint_h) $(gspath_h) $(gsstate_h)\ - $(gxfixed_h) $(gxdevice_h) $(gzpath_h) $(gzstate_h) + $(gxfixed_h) $(gxdevice_h) $(gzpath_h) $(gzstate_h) $(MAKEDIRS) $(PSCC) $(PSO_)zupath.$(OBJ) $(C_) $(PSSRC)zupath.c # -------- Additions common to Display PostScript and Level 2 -------- # $(PSD)dpsand2.dev : $(INT_MAK) $(ECHOGS_XE)\ - $(PSD)btoken.dev $(PSD)color.dev $(PSD)upath.dev $(GLD)dps2lib.dev $(PSD)dps2read.dev + $(PSD)btoken.dev $(PSD)color.dev $(PSD)upath.dev $(GLD)dps2lib.dev $(PSD)dps2read.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)dpsand2 -include $(PSD)btoken $(PSD)color $(PSD)upath $(GLD)dps2lib $(PSD)dps2read dps2int_=$(PSOBJ)zvmem2.$(OBJ) $(PSOBJ)zdps1.$(OBJ) # Note that zvmem2 includes both Level 1 and Level 2 operators. -$(PSD)dps2int.dev : $(INT_MAK) $(ECHOGS_XE) $(dps2int_) +$(PSD)dps2int.dev : $(INT_MAK) $(ECHOGS_XE) $(dps2int_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)dps2int $(dps2int_) $(ADDMOD) $(PSD)dps2int -oper zvmem2 zdps1_l2 $(ADDMOD) $(PSD)dps2int -ps gs_dps1 dps2read_=$(PSOBJ)ibnum.$(OBJ) $(PSOBJ)zcharx.$(OBJ) -$(PSD)dps2read.dev : $(INT_MAK) $(ECHOGS_XE) $(dps2read_) $(PSD)dps2int.dev +$(PSD)dps2read.dev : $(INT_MAK) $(ECHOGS_XE) $(dps2read_) $(PSD)dps2int.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)dps2read $(dps2read_) $(ADDMOD) $(PSD)dps2read -include $(PSD)dps2int $(ADDMOD) $(PSD)dps2read -oper ireclaim_l2 zcharx $(ADDMOD) $(PSD)dps2read -ps gs_dps2 $(PSOBJ)ibnum.$(OBJ) : $(PSSRC)ibnum.c $(GH) $(math__h) $(memory__h)\ - $(ierrors_h) $(stream_h) $(ibnum_h) $(imemory_h) $(iutil_h) + $(ierrors_h) $(stream_h) $(ibnum_h) $(imemory_h) $(iutil_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)ibnum.$(OBJ) $(C_) $(PSSRC)ibnum.c $(PSOBJ)zcharx.$(OBJ) : $(PSSRC)zcharx.c $(OP)\ $(gsmatrix_h) $(gstext_h) $(gxfixed_h) $(gxfont_h) $(gxtext_h)\ - $(ialloc_h) $(ibnum_h) $(ichar_h) $(iname_h) $(igstate_h) $(memory__h) + $(ialloc_h) $(ibnum_h) $(ichar_h) $(iname_h) $(igstate_h) $(memory__h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcharx.$(OBJ) $(C_) $(PSSRC)zcharx.c $(PSOBJ)zdps1.$(OBJ) : $(PSSRC)zdps1.c $(OP)\ $(gsmatrix_h) $(gspath_h) $(gspath2_h) $(gsstate_h)\ - $(ialloc_h) $(ivmspace_h) $(igstate_h) $(store_h) $(stream_h) $(ibnum_h) + $(ialloc_h) $(ivmspace_h) $(igstate_h) $(store_h) $(stream_h) $(ibnum_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zdps1.$(OBJ) $(C_) $(PSSRC)zdps1.c $(PSOBJ)zvmem2.$(OBJ) : $(PSSRC)zvmem2.c $(OP)\ - $(estack_h) $(ialloc_h) $(ivmspace_h) $(store_h) $(ivmem2_h) + $(estack_h) $(ialloc_h) $(ivmspace_h) $(store_h) $(ivmem2_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zvmem2.$(OBJ) $(C_) $(PSSRC)zvmem2.c # -------- Composite (PostScript Type 0) font support -------- # $(PSD)compfont.dev : $(INT_MAK) $(ECHOGS_XE)\ - $(GLD)psf0lib.dev $(PSD)psf0read.dev + $(GLD)psf0lib.dev $(PSD)psf0read.dev $(MAKEDIRS) $(SETMOD) $(PSD)compfont -include $(GLD)psf0lib $(PSD)psf0read # We always include cmapread because zfont0.c refers to it, # and it's not worth the trouble to exclude. psf0read_=$(PSOBJ)zcfont.$(OBJ) $(PSOBJ)zfont0.$(OBJ) -$(PSD)psf0read.dev : $(INT_MAK) $(ECHOGS_XE) $(psf0read_) +$(PSD)psf0read.dev : $(INT_MAK) $(ECHOGS_XE) $(psf0read_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)psf0read $(psf0read_) $(ADDMOD) $(PSD)psf0read -oper zcfont zfont0 $(ADDMOD) $(PSD)psf0read -include $(PSD)cmapread @@ -1340,7 +1427,8 @@ $(PSOBJ)zcfont.$(OBJ) : $(PSSRC)zcfont.c $(OP)\ $(gsmatrix_h)\ $(gxfixed_h) $(gxfont_h) $(gxtext_h)\ - $(ichar_h) $(estack_h) $(ifont_h) $(igstate_h) $(store_h) + $(ichar_h) $(estack_h) $(ifont_h) $(igstate_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcfont.$(OBJ) $(C_) $(PSSRC)zcfont.c $(PSOBJ)zfont0.$(OBJ) : $(PSSRC)zfont0.c $(OP)\ @@ -1348,7 +1436,7 @@ $(gxdevice_h) $(gxfcmap_h) $(gxfixed_h) $(gxfont_h) $(gxfont0_h) $(gxmatrix_h)\ $(gzstate_h)\ $(bfont_h) $(ialloc_h) $(iddict_h) $(idparam_h) $(igstate_h) $(iname_h)\ - $(store_h) + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfont0.$(OBJ) $(C_) $(PSSRC)zfont0.c # ---------------- CMap and CIDFont support ---------------- # @@ -1360,7 +1448,7 @@ cmapread_=$(PSOBJ)zcid.$(OBJ) $(PSOBJ)zfcmap.$(OBJ) $(PSD)cmapread.dev : $(INT_MAK) $(ECHOGS_XE) $(cmapread_)\ - $(GLD)cmaplib.dev $(PSD)psl2int.dev + $(GLD)cmaplib.dev $(PSD)psl2int.dev $(MAKEDIRS) $(SETMOD) $(PSD)cmapread $(cmapread_) $(ADDMOD) $(PSD)cmapread -include $(GLD)cmaplib $(PSD)psl2int $(ADDMOD) $(PSD)cmapread -oper zfcmap @@ -1370,13 +1458,13 @@ $(gsmatrix_h) $(gsstruct_h) $(gsutil_h)\ $(gxfcmap1_h) $(gxfont_h)\ $(ialloc_h) $(icid_h) $(iddict_h) $(idparam_h) $(ifont_h) $(iname_h)\ - $(store_h) + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfcmap.$(OBJ) $(C_) $(PSSRC)zfcmap.c cidread_=$(PSOBJ)zcid.$(OBJ) $(PSOBJ)zfcid.$(OBJ) $(PSOBJ)zfcid0.$(OBJ) $(PSOBJ)zfcid1.$(OBJ) $(PSD)cidfont.dev : $(INT_MAK) $(ECHOGS_XE) $(cidread_)\ $(PSD)psf1read.dev $(PSD)psl2int.dev $(PSD)type2.dev $(PSD)type42.dev\ - $(PSD)zfrsd.dev + $(PSD)zfrsd.dev $(MAKEDIRS) $(SETMOD) $(PSD)cidfont $(cidread_) $(ADDMOD) $(PSD)cidfont -include $(PSD)psf1read $(PSD)psl2int $(ADDMOD) $(PSD)cidfont -include $(PSD)type2 $(PSD)type42 $(PSD)zfrsd @@ -1384,12 +1472,14 @@ $(ADDMOD) $(PSD)cidfont -ps gs_cidfn gs_cidcm gs_fntem gs_cidtt gs_cidfm $(PSOBJ)zcid.$(OBJ) : $(PSSRC)zcid.c $(OP)\ - $(gxcid_h) $(ierrors_h) $(icid_h) $(idict_h) $(idparam_h) $(store_h) + $(gxcid_h) $(ierrors_h) $(icid_h) $(idict_h) $(idparam_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcid.$(OBJ) $(C_) $(PSSRC)zcid.c $(PSOBJ)zfcid.$(OBJ) : $(PSSRC)zfcid.c $(OP)\ $(gsmatrix_h) $(gxfcid_h)\ - $(bfont_h) $(icid_h) $(idict_h) $(idparam_h) $(ifcid_h) $(store_h) + $(bfont_h) $(icid_h) $(idict_h) $(idparam_h) $(ifcid_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfcid.$(OBJ) $(C_) $(PSSRC)zfcid.c $(PSOBJ)zfcid0.$(OBJ) : $(PSSRC)zfcid0.c $(OP) $(memory__h)\ @@ -1397,21 +1487,24 @@ $(gxalloc_h) $(gxfcid_h) $(gxfont1_h)\ $(stream_h)\ $(bfont_h) $(files_h) $(ichar_h) $(ichar1_h) $(icid_h) $(idict_h) $(idparam_h)\ - $(ifcid_h) $(ifont1_h) $(ifont2_h) $(ifont42_h) $(store_h) + $(ifcid_h) $(ifont1_h) $(ifont2_h) $(ifont42_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfcid0.$(OBJ) $(C_) $(PSSRC)zfcid0.c $(PSOBJ)zfcid1.$(OBJ) : $(PSSRC)zfcid1.c $(OP) $(memory__h)\ $(gsccode_h) $(gsmatrix_h) $(gsstruct_h) $(gsgcache_h) $(gsutil_h)\ $(gxfcid_h) $(gxfcache_h)\ $(bfont_h) $(icid_h) $(ichar1_h) $(idict_h) $(idparam_h)\ - $(ifcid_h) $(ifont42_h) $(store_h) $(stream_h) $(files_h) + $(ifcid_h) $(ifont42_h) $(store_h) $(stream_h) $(files_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfcid1.$(OBJ) $(C_) $(PSSRC)zfcid1.c # Testing only (CIDFont and CMap) cidtest_=$(PSOBJ)zcidtest.$(OBJ) $(GLOBJ)gsfont0c.$(OBJ) $(PSD)cidtest.dev : $(INT_MAK) $(ECHOGS_XE) $(cidtest_)\ - $(PSD)cidfont.dev $(PSD)cmapread.dev $(GLD)psf.dev $(GLD)psf0lib.dev + $(PSD)cidfont.dev $(PSD)cmapread.dev $(GLD)psf.dev $(GLD)psf0lib.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)cidtest $(cidtest_) $(ADDMOD) $(PSD)cidtest -oper zcidtest $(ADDMOD) $(PSD)cidtest -include $(PSD)cidfont $(PSD)cmapread @@ -1420,13 +1513,15 @@ $(PSOBJ)zcidtest.$(OBJ) : $(PSSRC)zcidtest.c $(string__h) $(OP)\ $(gdevpsf_h) $(gxfont_h) $(gxfont0c_h)\ $(spprint_h) $(stream_h)\ - $(files_h) $(idict_h) $(ifont_h) $(igstate_h) $(iname_h) $(store_h) + $(files_h) $(idict_h) $(ifont_h) $(igstate_h) $(iname_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcidtest.$(OBJ) $(C_) $(PSSRC)zcidtest.c # ---------------- CIE color ---------------- # cieread_=$(PSOBJ)zcie.$(OBJ) $(PSOBJ)zcrd.$(OBJ) -$(PSD)cie.dev : $(INT_MAK) $(ECHOGS_XE) $(cieread_) $(GLD)cielib.dev +$(PSD)cie.dev : $(INT_MAK) $(ECHOGS_XE) $(cieread_) $(GLD)cielib.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)cie $(cieread_) $(ADDMOD) $(PSD)cie -oper zcrd_l2 $(ADDMOD) $(PSD)cie -include $(GLD)cielib @@ -1437,24 +1532,27 @@ $(gscolor2_h) $(gscie_h) $(gsstruct_h) $(gxcspace_h)\ $(ialloc_h) $(icie_h) $(idict_h) $(idparam_h) $(estack_h)\ $(isave_h) $(igstate_h) $(ivmspace_h) $(store_h)\ - $(zcie_h) $(gsicc_create_h) $(gsicc_manage_h) $(gsicc_profilecache_h) + $(zcie_h) $(gsicc_create_h) $(gsicc_manage_h) $(gsicc_profilecache_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcie.$(OBJ) $(C_) $(PSSRC)zcie.c $(PSOBJ)zcrd.$(OBJ) : $(PSSRC)zcrd.c $(OP) $(math__h)\ $(gscrd_h) $(gscrdp_h) $(gscspace_h) $(gscolor2_h) $(gsstruct_h)\ $(estack_h) $(ialloc_h) $(icie_h) $(idict_h) $(idparam_h) $(igstate_h)\ - $(iparam_h) $(ivmspace_h) $(store_h) + $(iparam_h) $(ivmspace_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zcrd.$(OBJ) $(C_) $(PSSRC)zcrd.c # ---------------- Pattern color ---------------- # ipcolor_h=$(PSSRC)ipcolor.h -$(PSD)pattern.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)patlib.dev $(PSD)patread.dev +$(PSD)pattern.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)patlib.dev\ + $(PSD)patread.dev $(MAKEDIRS) $(SETMOD) $(PSD)pattern -include $(GLD)patlib $(PSD)patread patread_=$(PSOBJ)zpcolor.$(OBJ) -$(PSD)patread.dev : $(INT_MAK) $(ECHOGS_XE) $(patread_) +$(PSD)patread.dev : $(INT_MAK) $(ECHOGS_XE) $(patread_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)patread $(patread_) $(ADDMOD) $(PSD)patread -oper zpcolor_l2 @@ -1465,14 +1563,14 @@ $(estack_h)\ $(ialloc_h) $(icremap_h) $(idict_h) $(idparam_h) $(igstate_h)\ $(ipcolor_h) $(istruct_h)\ - $(store_h) $(gzstate_h) $(memory__h) $(gdevp14_h) + $(store_h) $(gzstate_h) $(memory__h) $(gdevp14_h) $(MAKEDIRS) $(PSCC) $(PSO_)zpcolor.$(OBJ) $(C_) $(PSSRC)zpcolor.c # ---------------- Separation color ---------------- # seprread_=$(PSOBJ)zcssepr.$(OBJ) $(PSOBJ)zfsample.$(OBJ) $(PSD)sepr.dev : $(INT_MAK) $(ECHOGS_XE) $(seprread_)\ - $(PSD)func4.dev $(GLD)seprlib.dev + $(PSD)func4.dev $(GLD)seprlib.dev $(MAKEDIRS) $(SETMOD) $(PSD)sepr $(seprread_) $(ADDMOD) $(PSD)sepr -oper zcssepr_l2 $(ADDMOD) $(PSD)sepr -oper zfsample @@ -1481,25 +1579,29 @@ $(PSOBJ)zcssepr.$(OBJ) : $(PSSRC)zcssepr.c $(OP) $(memory__h)\ $(gscolor_h) $(gscsepr_h) $(gsmatrix_h) $(gsstruct_h)\ $(gxcolor2_h) $(gxcspace_h) $(gxfixed_h) $(zht2_h)\ - $(estack_h) $(ialloc_h) $(icsmap_h) $(ifunc_h) $(igstate_h) $(iname_h) $(ivmspace_h) $(store_h) + $(estack_h) $(ialloc_h) $(icsmap_h) $(ifunc_h) $(igstate_h)\ + $(iname_h) $(ivmspace_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zcssepr.$(OBJ) $(C_) $(PSSRC)zcssepr.c $(PSOBJ)zfsample.$(OBJ) : $(PSSRC)zfsample.c $(OP) $(memory__h)\ $(gxcspace_h)\ $(estack_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifunc_h) $(ostack_h)\ - $(store_h) $(gsfunc0_h) $(gscdevn_h) $(zfunc_h) $(zcolor_h) + $(store_h) $(gsfunc0_h) $(gscdevn_h) $(zfunc_h) $(zcolor_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zfsample.$(OBJ) $(C_) $(PSSRC)zfsample.c # ---------------- DCT filters ---------------- # # The definitions for jpeg*.dev are in jpeg.mak. -$(PSD)dct.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)dcte.dev $(PSD)dctd.dev +$(PSD)dct.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)dcte.dev $(PSD)dctd.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)dct -include $(PSD)dcte $(PSD)dctd # Encoding (compression) dcte_=$(PSOBJ)zfdcte.$(OBJ) -$(PSD)dcte.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)sdcte.dev $(GLD)sdeparam.dev $(dcte_) +$(PSD)dcte.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)sdcte.dev $(GLD)sdeparam.dev\ + $(dcte_) $(MAKEDIRS) $(SETMOD) $(PSD)dcte -include $(GLD)sdcte $(GLD)sdeparam $(ADDMOD) $(PSD)dcte -obj $(dcte_) $(ADDMOD) $(PSD)dcte -oper zfdcte @@ -1507,26 +1609,30 @@ $(PSOBJ)zfdcte.$(OBJ) : $(PSSRC)zfdcte.c $(OP)\ $(memory__h) $(stdio__h) $(jpeglib__h) $(gsmemory_h)\ $(sdct_h) $(sjpeg_h) $(stream_h) $(strimpl_h)\ - $(files_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifilter_h) $(iparam_h) + $(files_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifilter_h)\ + $(iparam_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfdcte.$(OBJ) $(C_) $(PSSRC)zfdcte.c # Decoding (decompression) dctd_=$(PSOBJ)zfdctd.$(OBJ) -$(PSD)dctd.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)sdctd.dev $(GLD)sddparam.dev $(dctd_) +$(PSD)dctd.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)sdctd.dev $(GLD)sddparam.dev\ + $(dctd_) $(MAKEDIRS) $(SETMOD) $(PSD)dctd -include $(GLD)sdctd $(GLD)sddparam $(ADDMOD) $(PSD)dctd -obj $(dctd_) $(ADDMOD) $(PSD)dctd -oper zfdctd $(PSOBJ)zfdctd.$(OBJ) : $(PSSRC)zfdctd.c $(OP)\ $(memory__h) $(stdio__h) $(jpeglib__h) $(gsmemory_h)\ - $(ialloc_h) $(ifilter_h) $(iparam_h) $(sdct_h) $(sjpeg_h) $(strimpl_h) + $(ialloc_h) $(ifilter_h) $(iparam_h) $(sdct_h) $(sjpeg_h)\ + $(strimpl_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfdctd.$(OBJ) $(C_) $(PSSRC)zfdctd.c # ================ Display PostScript ================ # dps_=$(PSOBJ)zdps.$(OBJ) $(PSOBJ)zcontext.$(OBJ) -$(PSD)dps.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)dpslib.dev $(PSD)psl2.dev $(dps_) +$(PSD)dps.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)dpslib.dev $(PSD)psl2.dev\ + $(dps_) $(MAKEDIRS) $(SETMOD) $(PSD)dps -include $(GLD)dpslib $(PSD)psl2 $(ADDMOD) $(PSD)dps -obj $(dps_) $(ADDMOD) $(PSD)dps -oper zcontext1 zcontext2 zdps @@ -1536,20 +1642,22 @@ $(gsdps_h) $(gsimage_h) $(gsiparm2_h) $(gsstate_h)\ $(gxalloc_h) $(gxfixed_h) $(gxpath_h)\ $(btoken_h)\ - $(idparam_h) $(iddict_h) $(igstate_h) $(iimage2_h) $(iname_h) $(store_h) + $(idparam_h) $(iddict_h) $(igstate_h) $(iimage2_h) $(iname_h)\ + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zdps.$(OBJ) $(C_) $(PSSRC)zdps.c $(PSOBJ)zcontext.$(OBJ) : $(PSSRC)zcontext.c $(OP) $(gp_h) $(memory__h)\ $(gsexit_h) $(gsgc_h) $(gsstruct_h) $(gsutil_h) $(gxalloc_h) $(gxstate_h)\ $(icontext_h) $(idict_h) $(igstate_h) $(interp_h) $(isave_h) $(istruct_h)\ - $(dstack_h) $(estack_h) $(files_h) $(ostack_h) $(store_h) $(stream_h) + $(dstack_h) $(estack_h) $(files_h) $(ostack_h) $(store_h) $(stream_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zcontext.$(OBJ) $(C_) $(PSSRC)zcontext.c # ---------------- NeXT Display PostScript ---------------- # dpsnext_=$(PSOBJ)zdpnext.$(OBJ) $(PSD)dpsnext.dev : $(INT_MAK) $(ECHOGS_XE) $(dpsnext_)\ - $(PSD)dps.dev $(GLD)dpnxtlib.dev + $(PSD)dps.dev $(GLD)dpnxtlib.dev $(MAKEDIRS) $(SETMOD) $(PSD)dpsnext -include $(PSD)dps $(GLD)dpnxtlib $(ADDMOD) $(PSD)dpsnext -obj $(dpsnext_) $(ADDMOD) $(PSD)dpsnext -oper zdpnext @@ -1559,7 +1667,8 @@ $(gscoord_h) $(gscspace_h) $(gsdpnext_h)\ $(gsiparam_h) $(gsiparm2_h) $(gsmatrix_h) $(gspath2_h)\ $(gxcvalue_h) $(gxdevice_h) $(gxsample_h)\ - $(ialloc_h) $(igstate_h) $(iimage_h) $(iimage2_h) $(store_h) + $(ialloc_h) $(igstate_h) $(iimage_h) $(iimage2_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zdpnext.$(OBJ) $(C_) $(PSSRC)zdpnext.c # ==================== PostScript LanguageLevel 3 ===================== # @@ -1567,20 +1676,21 @@ # ---------------- DevicePixel color space ---------------- # cspixint_=$(PSOBJ)zcspixel.$(OBJ) -$(PSD)cspixel.dev : $(INT_MAK) $(ECHOGS_XE) $(cspixint_) $(GLD)cspixlib.dev +$(PSD)cspixel.dev : $(INT_MAK) $(ECHOGS_XE) $(cspixint_) $(GLD)cspixlib.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)cspixel $(cspixint_) $(ADDMOD) $(PSD)cspixel -include $(GLD)cspixlib $(PSOBJ)zcspixel.$(OBJ) : $(PSSRC)zcspixel.c $(OP)\ $(gscolor2_h) $(gscpixel_h) $(gscspace_h) $(gsmatrix_h)\ - $(igstate_h) + $(igstate_h) $(MAKEDIRS) $(PSCC) $(PSO_)zcspixel.$(OBJ) $(C_) $(PSSRC)zcspixel.c # ---------------- Rest of LanguageLevel 3 ---------------- # $(PSD)psl3.dev : $(INT_MAK) $(ECHOGS_XE)\ $(PSD)psl2.dev $(PSD)cspixel.dev $(PSD)frsd.dev $(PSD)func.dev\ - $(GLD)psl3lib.dev $(PSD)psl3read.dev + $(GLD)psl3lib.dev $(PSD)psl3read.dev $(MAKEDIRS) $(SETMOD) $(PSD)psl3 -include $(PSD)psl2 $(PSD)cspixel $(PSD)frsd $(PSD)func $(ADDMOD) $(PSD)psl3 -include $(GLD)psl3lib $(PSD)psl3read $(ADDMOD) $(PSD)psl3 -emulator PostScript PostScriptLevel2 PostScriptLevel3 @@ -1588,7 +1698,7 @@ $(PSOBJ)zfunc3.$(OBJ) : $(PSSRC)zfunc3.c $(memory__h) $(OP)\ $(gsfunc3_h) $(gsstruct_h)\ $(files_h) $(ialloc_h) $(idict_h) $(idparam_h) $(ifunc_h)\ - $(store_h) $(stream_h) + $(store_h) $(stream_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfunc3.$(OBJ) $(C_) $(PSSRC)zfunc3.c # FunctionType 4 functions are not a PostScript feature, but they @@ -1596,7 +1706,7 @@ func4read_=$(PSOBJ)zfunc4.$(OBJ) $(PSD)func4.dev : $(INT_MAK) $(ECHOGS_XE) $(func4read_)\ - $(PSD)func.dev $(GLD)func4lib.dev + $(PSD)func.dev $(GLD)func4lib.dev $(MAKEDIRS) $(SETMOD) $(PSD)func4 $(func4read_) $(ADDMOD) $(PSD)func4 -functiontype 4 $(ADDMOD) $(PSD)func4 -include $(PSD)func $(GLD)func4lib @@ -1607,21 +1717,22 @@ $(gsfunc_h) $(gsfunc4_h) $(gsutil_h)\ $(idict_h) $(ifunc_h) $(iname_h) $(ialloc_h)\ $(dstack_h) $(gzstate_h) $(gxdevcli_h) $(string__h) $(zfunc_h)\ - $(zcolor_h) + $(zcolor_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfunc4.$(OBJ) $(C_) $(PSSRC)zfunc4.c $(PSOBJ)zimage3.$(OBJ) : $(PSSRC)zimage3.c $(OP) $(memory__h)\ $(gscolor2_h) $(gsiparm3_h) $(gsiparm4_h) $(gscspace_h) $(gxiparam_h)\ - $(idparam_h) $(idict_h) $(igstate_h) $(iimage_h) $(iimage2_h) + $(idparam_h) $(idict_h) $(igstate_h) $(iimage_h) $(iimage2_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zimage3.$(OBJ) $(C_) $(PSSRC)zimage3.c $(PSOBJ)zmisc3.$(OBJ) : $(PSSRC)zmisc3.c $(GH)\ $(gsclipsr_h) $(gscolor2_h) $(gscspace_h) $(gscssub_h) $(gsmatrix_h)\ - $(igstate_h) $(oper_h) $(store_h) + $(igstate_h) $(oper_h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zmisc3.$(OBJ) $(C_) $(PSSRC)zmisc3.c $(PSOBJ)zcolor3.$(OBJ) : $(PSSRC)zcolor3.c $(GH)\ - $(oper_h) $(igstate_h) + $(oper_h) $(igstate_h) $(MAKEDIRS) $(PSCC) $(PSO_)zcolor3.$(OBJ) $(C_) $(PSSRC)zcolor3.c $(PSOBJ)zshade.$(OBJ) : $(PSSRC)zshade.c $(memory__h) $(OP)\ @@ -1630,7 +1741,7 @@ $(stream_h)\ $(files_h)\ $(ialloc_h) $(idict_h) $(idparam_h) $(ifunc_h) $(igstate_h) $(ipcolor_h)\ - $(store_h) + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zshade.$(OBJ) $(C_) $(PSSRC)zshade.c psl3read_1=$(PSOBJ)zfunc3.$(OBJ) $(PSOBJ)zfsample.$(OBJ) @@ -1640,7 +1751,7 @@ # Note: we need the ReusableStreamDecode filter for shadings. $(PSD)psl3read.dev : $(INT_MAK) $(ECHOGS_XE) $(psl3read_)\ - $(PSD)frsd.dev $(PSD)fzlib.dev + $(PSD)frsd.dev $(PSD)fzlib.dev $(MAKEDIRS) $(SETMOD) $(PSD)psl3read $(psl3read_1) $(ADDMOD) $(PSD)psl3read $(psl3read_2) $(ADDMOD) $(PSD)psl3read -oper zfsample @@ -1652,24 +1763,26 @@ # ---------------- Trapping ---------------- # trapread_=$(PSOBJ)ztrap.$(OBJ) -$(PSD)trapread.dev : $(INT_MAK) $(ECHOGS_XE) $(trapread_) +$(PSD)trapread.dev : $(INT_MAK) $(ECHOGS_XE) $(trapread_)\ + $(MAKEDIRS) $(SETMOD) $(PSD)trapread $(trapread_) $(ADDMOD) $(PSD)trapread -oper ztrap $(ADDMOD) $(PSD)trapread -ps gs_trap $(PSOBJ)ztrap.$(OBJ) : $(PSSRC)ztrap.c $(OP)\ $(gstrap_h)\ - $(ialloc_h) $(iparam_h) + $(ialloc_h) $(iparam_h) $(MAKEDIRS) $(PSCC) $(PSO_)ztrap.$(OBJ) $(C_) $(PSSRC)ztrap.c -$(PSD)trapping.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)traplib.dev $(PSD)trapread.dev +$(PSD)trapping.dev : $(INT_MAK) $(ECHOGS_XE) $(GLD)traplib.dev $(PSD)trapread.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)trapping -include $(GLD)traplib $(PSD)trapread # ---------------- Transparency ---------------- # transread_=$(PSOBJ)ztrans.$(OBJ) $(PSD)transpar.dev : $(INT_MAK) $(ECHOGS_XE)\ - $(PSD)psl2read.dev $(GLD)translib.dev $(transread_) + $(PSD)psl2read.dev $(GLD)translib.dev $(transread_) $(MAKEDIRS) $(SETMOD) $(PSD)transpar $(transread_) $(ADDMOD) $(PSD)transpar -oper ztrans1 ztrans2 $(ADDMOD) $(PSD)transpar -include $(PSD)psl2read $(GLD)translib @@ -1678,14 +1791,15 @@ $(ghost_h) $(oper_h) $(gscspace_h) $(gscolor2_h) $(gsipar3x_h) $(gstrans_h)\ $(gxiparam_h) $(gxcspace_h)\ $(idict_h) $(idparam_h) $(ifunc_h) $(igstate_h) $(iimage_h) $(iname_h)\ - $(store_h) $(gsdflt_h) $(gdevdevn_h) $(gxblend_h) $(gdevp14_h) $(gsicc_cms_h) + $(store_h) $(gsdflt_h) $(gdevdevn_h) $(gxblend_h) $(gdevp14_h)\ + $(gsicc_cms_h) $(MAKEDIRS) $(PSCC) $(PSO_)ztrans.$(OBJ) $(C_) $(PSSRC)ztrans.c # ---------------- ICCBased color spaces ---------------- # iccread_=$(PSOBJ)zicc.$(OBJ) $(PSD)icc.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)cie.dev $(iccread_) \ - $(GLD)sicclib.dev + $(GLD)sicclib.dev $(MAKEDIRS) $(SETMOD) $(PSD)icc $(iccread_) $(ADDMOD) $(PSD)icc -oper zicc_ll3 $(ADDMOD) $(PSD)icc -ps gs_icc @@ -1695,7 +1809,8 @@ $(gsstruct_h) $(gxcspace_h) $(stream_h) $(files_h) $(gscolor2_h)\ $(gsicc_h) $(estack_h) $(idict_h) $(idparam_h) $(igstate_h)\ $(icie_h) $(ialloc_h) $(zicc_h) $(gsicc_manage_h) $(GX) $(gxistate_h)\ - $(gsicc_create_h) $(gsicc_profilecache_h) $(gxdevice_h) $(gsicc_cache_h) + $(gsicc_create_h) $(gsicc_profilecache_h) $(gxdevice_h)\ + $(gsicc_cache_h) $(MAKEDIRS) $(PSCC) $(PSO_)zicc.$(OBJ) $(C_) $(PSSRC)zicc.c # ---------------- Support for %disk IODevices ---------------- # @@ -1705,21 +1820,21 @@ # We could have more, but the DynaLab font installer has problems # with more than 7 disk devices. diskn_=$(GLOBJ)gsiodisk.$(OBJ) -$(GLD)diskn.dev : $(LIB_MAK) $(ECHOGS_XE) $(diskn_) +$(GLD)diskn.dev : $(LIB_MAK) $(ECHOGS_XE) $(diskn_) $(MAKEDIRS) $(SETMOD) $(GLD)diskn $(diskn_) $(ADDMOD) $(GLD)diskn -iodev disk0 disk1 disk2 disk3 disk4 disk5 disk6 $(ADDMOD) $(GLD)diskn -ps gs_diskn # ------------------ Support high level Forms ------------------ # form_=$(GLOBJ)zform.$(OBJ) -$(GLD)form.dev : $(LIB_MAK) $(ECHOGS_XE) $(form_) +$(GLD)form.dev : $(LIB_MAK) $(ECHOGS_XE) $(form_) $(MAKEDIRS) $(SETMOD) $(PSD)form $(form_) $(ADDMOD) $(PSD)form -oper zform $(PSOBJ)zform.$(OBJ) : $(PSSRC)zform.c $(OP) $(ghost_h) $(oper_h)\ $(gxdevice_h) $(ialloc_h) $(idict_h) $(idparam_h) $(igstate_h)\ $(gxdevsop_h) $(gscoord_h) $(gsform1_h) $(gspath_h) $(gxpath_h)\ - $(gzstate_h) + $(gzstate_h) $(MAKEDIRS) $(PSCC) $(PSO_)zform.$(OBJ) $(C_) $(PSSRC)zform.c # ================================ PDF ================================ # @@ -1736,11 +1851,11 @@ # On the other hand, the PDF .ps files must get loaded after # level2dict is defined. $(PSD)pdf.dev : $(INT_MAK) $(ECHOGS_XE)\ - $(PSD)psbase.dev $(GLD)dps2lib.dev $(PSD)dps2read.dev\ + $(GLD)dps2lib.dev $(PSD)dps2read.dev\ $(PSD)pdffonts.dev $(PSD)psl3.dev $(PSD)pdfread.dev $(PSD)cff.dev\ $(PSD)fmd5.dev $(PSD)fsha2.dev $(PSD)farc4.dev $(PSD)faes.dev\ $(PSD)ttfont.dev $(PSD)type2.dev $(PSD)icc.dev $(PSD)pdfops.dev\ - $(PSD)pdf_r6.dev + $(PSD)pdf_r6.dev $(MAKEDIRS) $(SETMOD) $(PSD)pdf -include $(PSD)psbase $(GLD)dps2lib $(ADDMOD) $(PSD)pdf -include $(PSD)dps2read $(PSD)pdffonts $(PSD)psl3 $(ADDMOD) $(PSD)pdf -include $(GLD)psl2lib $(PSD)pdfread $(PSD)cff @@ -1754,11 +1869,12 @@ # Reader only -$(PSD)pdffonts.dev : $(INT_MAK) $(ECHOGS_XE) +$(PSD)pdffonts.dev : $(INT_MAK) $(ECHOGS_XE) $(MAKEDIRS) $(SETMOD) $(PSD)pdffonts -ps gs_mex_e gs_mro_e gs_pdf_e gs_wan_e $(PSD)pdfread.dev : $(INT_MAK) $(ECHOGS_XE) \ - $(PSD)frsd.dev $(PSD)func4.dev $(PSD)fzlib.dev $(PSD)transpar.dev + $(PSD)frsd.dev $(PSD)func4.dev $(PSD)fzlib.dev $(PSD)transpar.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)pdfread -include $(PSD)frsd $(PSD)func4 $(PSD)fzlib $(ADDMOD) $(PSD)pdfread -include $(PSD)transpar $(ADDMOD) $(PSD)pdfread -ps pdf_ops gs_l2img @@ -1767,11 +1883,13 @@ # Optional Illustrator CS2/CS3 layer info extractor -$(PSD)cslayer.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)pdfread.dev +$(PSD)cslayer.dev : $(INT_MAK) $(ECHOGS_XE) $(PSD)pdfread.dev\ + $(MAKEDIRS) $(SETMOD) $(PSD)cslayer -ps pdf_cslayer # ---------------- PS Support for Font API ---------------- # -$(PSD)fapi_ps.dev : $(LIB_MAK) $(ECHOGS_XE) $(PSOBJ)zfapi.$(OBJ) +$(PSD)fapi_ps.dev : $(LIB_MAK) $(ECHOGS_XE) $(PSOBJ)zfapi.$(OBJ)\ + $(MAKEDIRS) $(SETMOD) $(PSD)fapi_ps $(PSOBJ)zfapi.$(OBJ) $(ADDMOD) $(PSD)fapi_ps -oper zfapi $(ADDMOD) $(PSD)fapi_ps -ps gs_fntem gs_fapi @@ -1784,43 +1902,44 @@ $(bfont_h) $(dstack_h) $(files_h) \ $(ichar_h) $(idict_h) $(iddict_h) $(idparam_h) $(iname_h) $(ifont_h)\ $(icid_h) $(igstate_h) $(icharout_h) $(ifapi_h) $(iplugin_h) \ - $(oper_h) $(store_h) $(stream_h) + $(oper_h) $(store_h) $(stream_h) $(MAKEDIRS) $(PSCC) $(PSO_)zfapi.$(OBJ) $(C_) $(PSSRC)zfapi.c # ---------------- Custom color dummy callback ---------------- # $(PSOBJ)zncdummy.$(OBJ) : $(PSSRC)zncdummy.c $(OP) $(GX) $(math_h)\ - $(memory__h) $(gscdefs_h) $(gsnamecl_h) $(malloc__h) $(gsncdummy_h) + $(memory__h) $(gscdefs_h) $(gsnamecl_h) $(malloc__h) $(gsncdummy_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)zncdummy.$(OBJ) $(C_) $(PSSRC)zncdummy.c # ---------------- Custom operators for PDF interpreter ---------------- # zpdfops_=$(PSOBJ)zpdfops.$(OBJ) -$(PSD)pdfops.dev : $(INT_MAK) $(ECHOGS_XE) $(zpdfops_) +$(PSD)pdfops.dev : $(INT_MAK) $(ECHOGS_XE) $(zpdfops_) $(MAKEDIRS) $(SETMOD) $(PSD)pdfops $(zpdfops_) $(ADDMOD) $(PSD)pdfops -oper zpdfops $(PSOBJ)zpdfops.$(OBJ) : $(PSSRC)zpdfops.c $(OP) $(MAKEFILE)\ $(igstate_h) $(istack_h) $(iutil_h) $(gspath_h) $(math__h) $(ialloc_h)\ - $(string__h) $(store_h) + $(string__h) $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zpdfops.$(OBJ) $(C_) $(PSSRC)zpdfops.c zutf8_=$(PSOBJ)zutf8.$(OBJ) -$(PSD)utf8.dev : $(INT_MAK) $(ECHOGS_XE) $(zutf8_) +$(PSD)utf8.dev : $(INT_MAK) $(ECHOGS_XE) $(zutf8_) $(MAKEDIRS) $(SETMOD) $(PSD)utf8 $(zutf8_) $(ADDMOD) $(PSD)utf8 -oper zutf8 $(PSOBJ)zutf8.$(OBJ) : $(PSSRC)zutf8.c $(OP)\ $(ghost_h) $(oper_h) $(iutil_h) $(ialloc_h) $(malloc__h) $(string__h)\ - $(store_h) + $(store_h) $(MAKEDIRS) $(PSCC) $(PSO_)zutf8.$(OBJ) $(C_) $(PSSRC)zutf8.c zpdf_r6_=$(PSOBJ)zpdf_r6.$(OBJ) -$(PSD)pdf_r6.dev : $(INT_MAK) $(ECHOGS_XE) $(zpdf_r6_) +$(PSD)pdf_r6.dev : $(INT_MAK) $(ECHOGS_XE) $(zpdf_r6_) $(MAKEDIRS) $(SETMOD) $(PSD)pdf_r6 $(zpdf_r6_) $(ADDMOD) $(PSD)pdf_r6 -oper zpdf_r6 -$(PSOBJ)zpdf_r6.$(OBJ) : $(PSSRC)zpdf_r6.c $(OP) $(MAKEFILE) +$(PSOBJ)zpdf_r6.$(OBJ) : $(PSSRC)zpdf_r6.c $(OP) $(MAKEFILE) $(MAKEDIRS) $(PSCC) $(PSO_)zpdf_r6.$(OBJ) $(C_) $(PSSRC)zpdf_r6.c # ================ Dependencies for auxiliary programs ================ # @@ -1829,24 +1948,25 @@ $(PSOBJ)gs.$(OBJ) : $(PSSRC)gs.c $(GH)\ $(ierrors_h) $(iapi_h) $(imain_h) $(imainarg_h) $(iminst_h) $(gsmalloc_h)\ - $(locale__h) + $(locale__h) $(MAKEDIRS) $(PSCC) $(PSO_)gs.$(OBJ) $(C_) $(PSSRC)gs.c $(PSOBJ)apitest.$(OBJ) : $(PSSRC)apitest.c $(GH)\ $(ierrors_h) $(iapi_h) $(imain_h) $(imainarg_h) $(iminst_h) $(gsmalloc_h)\ - $(locale__h) $(gp_h) + $(locale__h) $(gp_h) $(MAKEDIRS) $(PSCC) $(PSO_)apitest.$(OBJ) $(C_) $(PSSRC)apitest.c $(PSOBJ)iapi.$(OBJ) : $(PSSRC)iapi.c $(AK)\ $(string__h) $(ierrors_h) $(gscdefs_h) $(gstypes_h) $(iapi_h)\ - $(iref_h) $(imain_h) $(imainarg_h) $(iminst_h) $(gslibctx_h) + $(iref_h) $(imain_h) $(imainarg_h) $(iminst_h) $(gslibctx_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)iapi.$(OBJ) $(C_) $(PSSRC)iapi.c $(PSOBJ)icontext.$(OBJ) : $(PSSRC)icontext.c $(GH)\ $(gsstruct_h) $(gxalloc_h)\ $(dstack_h) $(ierrors_h) $(estack_h) $(files_h)\ $(icontext_h) $(idict_h) $(igstate_h) $(interp_h) $(isave_h) $(store_h)\ - $(stream_h) + $(stream_h) $(MAKEDIRS) $(PSCC) $(PSO_)icontext.$(OBJ) $(C_) $(PSSRC)icontext.c gdevdsp_h=$(DEVSRCDIR)$(D)gdevdsp.h @@ -1856,7 +1976,8 @@ $(stdpre_h) $(gscdefs_h) $(gsdevice_h) $(gsmemory_h) $(gstypes_h)\ $(iapi_h) $(iref_h)\ $(imain_h) $(iminst_h) $(idisp_h) $(ostack_h)\ - $(gx_h) $(gxdevice_h) $(gxdevmem_h) $(gdevdsp_h) $(gdevdsp2_h) + $(gx_h) $(gxdevice_h) $(gxdevmem_h) $(gdevdsp_h) $(gdevdsp2_h)\ + $(MAKEDIRS) $(PSCC) $(I_)$(DEVSRCDIR) $(PSO_)idisp.$(OBJ) $(C_) $(PSSRC)idisp.c $(PSOBJ)imainarg.$(OBJ) : $(PSSRC)imainarg.c $(GH)\ @@ -1868,7 +1989,7 @@ $(iapi_h) $(ialloc_h) $(iconf_h) $(imain_h) $(imainarg_h) $(iminst_h)\ $(iname_h) $(interp_h) $(iscan_h) $(iutil_h) $(ivmspace_h)\ $(ostack_h) $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h) \ - $(vdtrace_h) + $(vdtrace_h) $(MAKEDIRS) $(PSCC) $(PSO_)imainarg.$(OBJ) $(C_) $(PSSRC)imainarg.c $(PSOBJ)imain.$(OBJ) : $(PSSRC)imain.c $(GH) $(memory__h) $(string__h)\ @@ -1878,7 +1999,8 @@ $(ialloc_h) $(iconf_h) $(idebug_h) $(idict_h) $(idisp_h) $(iinit_h)\ $(iname_h) $(interp_h) $(iplugin_h) $(isave_h) $(iscan_h) $(ivmspace_h)\ $(iinit_h) $(main_h) $(oper_h) $(ostack_h)\ - $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h) + $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)imain.$(OBJ) $(C_) $(PSSRC)imain.c #****** $(CCINT) interp.c @@ -1889,11 +2011,12 @@ $(iname_h) $(inamedef_h) $(interp_h) $(ipacked_h)\ $(isave_h) $(iscan_h) $(istack_h) $(itoken_h) $(iutil_h) $(ivmspace_h)\ $(oper_h) $(ostack_h) $(sfilter_h) $(store_h) $(stream_h) $(strimpl_h)\ - $(gpcheck_h) + $(gpcheck_h) $(MAKEDIRS) $(PSCC) $(PSO_)interp.$(OBJ) $(C_) $(PSSRC)interp.c $(PSOBJ)ireclaim.$(OBJ) : $(PSSRC)ireclaim.c $(GH)\ $(gsstruct_h)\ $(iastate_h) $(icontext_h) $(interp_h) $(isave_h) $(isstate_h)\ - $(dstack_h) $(ierrors_h) $(estack_h) $(opdef_h) $(ostack_h) $(store_h) + $(dstack_h) $(ierrors_h) $(estack_h) $(opdef_h) $(ostack_h) $(store_h)\ + $(MAKEDIRS) $(PSCC) $(PSO_)ireclaim.$(OBJ) $(C_) $(PSSRC)ireclaim.c diff -Nru ghostscript-9.15+dfsg/psi/msvc.mak ghostscript-9.16~dfsg~0/psi/msvc.mak --- ghostscript-9.15+dfsg/psi/msvc.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/msvc.mak 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2014 Artifex Software, Inc. +# Copyright (C) 2001-2015 Artifex Software, Inc. # All Rights Reserved. # # This software is provided AS-IS with no warranty, either express or @@ -479,12 +479,6 @@ # Alternatively, you can build a separate DLL # and define SHARE_JPX=1 in src/winlib.mak -# Define the directory where the lcms source is stored. -# See lcms.mak for more information -!ifndef LCMSSRCDIR -LCMSSRCDIR=lcms -!endif - # Define the directory where the lcms2 source is stored. # See lcms2.mak for more information !ifndef LCMS2SRCDIR diff -Nru ghostscript-9.15+dfsg/psi/psromfs.mak ghostscript-9.16~dfsg~0/psi/psromfs.mak --- ghostscript-9.15+dfsg/psi/psromfs.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/psromfs.mak 2015-03-30 08:21:24.000000000 +0000 @@ -314,41 +314,41 @@ # A list of all of the files in Resource/Font PS_FONT_DEPS=\ - $(PSRESDIR)$(D)Font$(D)CenturySchL-Bold \ - $(PSRESDIR)$(D)Font$(D)CenturySchL-BoldItal \ - $(PSRESDIR)$(D)Font$(D)CenturySchL-Ital \ - $(PSRESDIR)$(D)Font$(D)CenturySchL-Roma \ + $(PSRESDIR)$(D)Font$(D)BookmanURW-DemBol \ + $(PSRESDIR)$(D)Font$(D)BookmanURW-DemBolIta \ + $(PSRESDIR)$(D)Font$(D)BookmanURW-Lig \ + $(PSRESDIR)$(D)Font$(D)BookmanURW-LigIta \ + $(PSRESDIR)$(D)Font$(D)CenturySchURW-Bol \ + $(PSRESDIR)$(D)Font$(D)CenturySchURW-BolIta \ + $(PSRESDIR)$(D)Font$(D)CenturySchURW-Ita \ + $(PSRESDIR)$(D)Font$(D)CenturySchURW-Rom \ + $(PSRESDIR)$(D)Font$(D)ChanceryURW-MedIta \ $(PSRESDIR)$(D)Font$(D)Dingbats \ - $(PSRESDIR)$(D)Font$(D)NimbusMonL-Bold \ - $(PSRESDIR)$(D)Font$(D)NimbusMonL-BoldObli \ - $(PSRESDIR)$(D)Font$(D)NimbusMonL-Regu \ - $(PSRESDIR)$(D)Font$(D)NimbusMonL-ReguObli \ - $(PSRESDIR)$(D)Font$(D)NimbusRomNo9L-Medi \ - $(PSRESDIR)$(D)Font$(D)NimbusRomNo9L-MediItal \ - $(PSRESDIR)$(D)Font$(D)NimbusRomNo9L-Regu \ - $(PSRESDIR)$(D)Font$(D)NimbusRomNo9L-ReguItal \ - $(PSRESDIR)$(D)Font$(D)NimbusSanL-Bold \ - $(PSRESDIR)$(D)Font$(D)NimbusSanL-BoldCond \ - $(PSRESDIR)$(D)Font$(D)NimbusSanL-BoldCondItal \ - $(PSRESDIR)$(D)Font$(D)NimbusSanL-BoldItal \ - $(PSRESDIR)$(D)Font$(D)NimbusSanL-Regu \ - $(PSRESDIR)$(D)Font$(D)NimbusSanL-ReguCond \ - $(PSRESDIR)$(D)Font$(D)NimbusSanL-ReguCondItal \ - $(PSRESDIR)$(D)Font$(D)NimbusSanL-ReguItal \ + $(PSRESDIR)$(D)Font$(D)NimbusMon-Bol \ + $(PSRESDIR)$(D)Font$(D)NimbusMon-BolObl \ + $(PSRESDIR)$(D)Font$(D)NimbusMon-Obl \ + $(PSRESDIR)$(D)Font$(D)NimbusMon-Reg \ + $(PSRESDIR)$(D)Font$(D)NimbusRom-Ita \ + $(PSRESDIR)$(D)Font$(D)NimbusRom-Med \ + $(PSRESDIR)$(D)Font$(D)NimbusRom-MedIta \ + $(PSRESDIR)$(D)Font$(D)NimbusRom-Reg \ + $(PSRESDIR)$(D)Font$(D)NimbusSan-Bol \ + $(PSRESDIR)$(D)Font$(D)NimbusSan-BolIta \ + $(PSRESDIR)$(D)Font$(D)NimbusSan-Ita \ + $(PSRESDIR)$(D)Font$(D)NimbusSanNar-Bol \ + $(PSRESDIR)$(D)Font$(D)NimbusSanNar-BolIta \ + $(PSRESDIR)$(D)Font$(D)NimbusSanNar-Ita \ + $(PSRESDIR)$(D)Font$(D)NimbusSanNar-Reg \ + $(PSRESDIR)$(D)Font$(D)NimbusSan-Reg \ + $(PSRESDIR)$(D)Font$(D)PalladioURW-Bol \ + $(PSRESDIR)$(D)Font$(D)PalladioURW-BolIta \ + $(PSRESDIR)$(D)Font$(D)PalladioURW-Ita \ + $(PSRESDIR)$(D)Font$(D)PalladioURW-Rom \ $(PSRESDIR)$(D)Font$(D)StandardSymL \ - $(PSRESDIR)$(D)Font$(D)URWBookmanL-DemiBold \ - $(PSRESDIR)$(D)Font$(D)URWBookmanL-DemiBoldItal \ - $(PSRESDIR)$(D)Font$(D)URWBookmanL-Ligh \ - $(PSRESDIR)$(D)Font$(D)URWBookmanL-LighItal \ - $(PSRESDIR)$(D)Font$(D)URWChanceryL-MediItal \ - $(PSRESDIR)$(D)Font$(D)URWGothicL-Book \ - $(PSRESDIR)$(D)Font$(D)URWGothicL-BookObli \ - $(PSRESDIR)$(D)Font$(D)URWGothicL-Demi \ - $(PSRESDIR)$(D)Font$(D)URWGothicL-DemiObli \ - $(PSRESDIR)$(D)Font$(D)URWPalladioL-Bold \ - $(PSRESDIR)$(D)Font$(D)URWPalladioL-BoldItal \ - $(PSRESDIR)$(D)Font$(D)URWPalladioL-Ital \ - $(PSRESDIR)$(D)Font$(D)URWPalladioL-Roma + $(PSRESDIR)$(D)Font$(D)URWGothic-Boo \ + $(PSRESDIR)$(D)Font$(D)URWGothic-BooObl \ + $(PSRESDIR)$(D)Font$(D)URWGothic-Dem \ + $(PSRESDIR)$(D)Font$(D)URWGothic-DemObl # A list of all of the files in Resource/IdimSet PS_IDIOMSET_DEPS= diff -Nru ghostscript-9.15+dfsg/psi/winint.mak ghostscript-9.16~dfsg~0/psi/winint.mak --- ghostscript-9.15+dfsg/psi/winint.mak 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/winint.mak 2015-03-30 08:21:24.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2014 Artifex Software, Inc. +# Copyright (C) 2001-2015 Artifex Software, Inc. # All Rights Reserved. # # This software is provided AS-IS with no warranty, either express or diff -Nru ghostscript-9.15+dfsg/psi/zcolor.c ghostscript-9.16~dfsg~0/psi/zcolor.c --- ghostscript-9.15+dfsg/psi/zcolor.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/zcolor.c 2015-03-30 08:21:24.000000000 +0000 @@ -4260,6 +4260,7 @@ ref hival, lookup; gs_color_space *pcs; gs_color_space *pcs_base; + gs_color_space_index base_type; if (i_ctx_p->language_level < 2) return_error(e_undefined); @@ -4273,6 +4274,7 @@ cspace_old = istate->colorspace[0]; pcs_base = gs_currentcolorspace(igs); + base_type = gs_color_space_get_index(pcs_base); code = array_get(imemory, r, 3, &lookup); if (code < 0) @@ -4293,7 +4295,15 @@ */ if (r_size(&lookup) < num_values) return_error(e_rangecheck); - pcs = gs_cspace_alloc(imemory, &gs_color_space_type_Indexed); + /* If we have a named color profile and the base space is DeviceN or + Separation use a different set of procedures to ensure the named + color remapping code is used */ + if (igs->icc_manager->device_named != NULL && + (base_type == gs_color_space_index_Separation || + base_type == gs_color_space_index_DeviceN)) + pcs = gs_cspace_alloc(imemory, &gs_color_space_type_Indexed_Named); + else + pcs = gs_cspace_alloc(imemory, &gs_color_space_type_Indexed); if (!pcs) { return_error(e_VMerror); } @@ -4324,7 +4334,12 @@ pcs_base, indexed_cont); if (code < 0) return code; - pcs = gs_cspace_alloc(imemory, &gs_color_space_type_Indexed); + if (igs->icc_manager->device_named != NULL && + (base_type == gs_color_space_index_Separation || + base_type == gs_color_space_index_DeviceN)) + pcs = gs_cspace_alloc(imemory, &gs_color_space_type_Indexed_Named); + else + pcs = gs_cspace_alloc(imemory, &gs_color_space_type_Indexed); pcs->base_space = pcs_base; rc_increment_cs(pcs_base); pcs->params.indexed.use_proc = 1; @@ -5931,8 +5946,11 @@ code = obj->setproc(i_ctx_p, parr, &stage, &cont, CIESubst); make_int(pstage, stage); - if (code != 0) + if (code != 0) { + if (code < 0) + esp -= 5; return code; + } if (!cont) { /* Completed that space, decrement the 'depth' */ make_int(pdepth, --depth); diff -Nru ghostscript-9.15+dfsg/psi/zfdctd.c ghostscript-9.16~dfsg~0/psi/zfdctd.c --- ghostscript-9.15+dfsg/psi/zfdctd.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/zfdctd.c 2015-03-30 08:21:24.000000000 +0000 @@ -35,16 +35,17 @@ /* Find the memory that will be used for allocating the stream. */ static gs_ref_memory_t * -find_stream_memory(i_ctx_t *i_ctx_p, int npop, uint space) +find_stream_memory(i_ctx_t *i_ctx_p, int npop, uint *space) { - uint use_space = max(space, avm_global); + uint use_space = max(*space, avm_global); os_ptr sop = osp - npop; if (r_has_type(sop, t_dictionary)) { --sop; } - use_space = max(use_space, r_space(sop)); - return idmemory->spaces_indexed[use_space >> r_space_shift]; + *space = max(use_space, r_space(sop)); + + return idmemory->spaces_indexed[*space >> r_space_shift]; } /* DCTDecode/filter */ @@ -65,7 +66,7 @@ dop = op, dspace = r_space(op); else dop = 0, dspace = 0; - mem = (gs_memory_t *)find_stream_memory(i_ctx_p, 0, dspace); + mem = (gs_memory_t *)find_stream_memory(i_ctx_p, 0, &dspace); state.memory = mem; /* First allocate space for IJG parameters. */ jddp = gs_alloc_struct_immovable(mem,jpeg_decompress_data, diff -Nru ghostscript-9.15+dfsg/psi/zfile.c ghostscript-9.16~dfsg~0/psi/zfile.c --- ghostscript-9.15+dfsg/psi/zfile.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/zfile.c 2015-03-30 08:21:24.000000000 +0000 @@ -858,8 +858,11 @@ { gx_io_device *const iodev = pfn->iodev; - if (pfn->fname == NULL) /* just a device */ + if (pfn->fname == NULL) { /* just a device */ + iodev->state = i_ctx_p; return iodev->procs.open_device(iodev, file_access, ps, mem); + iodev->state = NULL; + } else { /* file */ iodev_proc_open_file((*open_file)) = iodev->procs.open_file; @@ -927,18 +930,21 @@ { stream *s; uint blen1 = blen; + struct stat fstat; + if (gp_file_name_reduce(fname, flen, buffer, &blen1) != gp_combine_success) goto skip; - if (iodev_os_open_file(iodev, (const char *)buffer, blen1, + + if ((*iodev->procs.file_status)(iodev, buffer, &fstat) >= 0) { + if (starting_arg_file || check_file_permissions_aux(i_ctx_p, buffer, blen1) >= 0) { + if (iodev_os_open_file(iodev, (const char *)buffer, blen1, (const char *)fmode, &s, (gs_memory_t *)mem) == 0) { - if (starting_arg_file || - check_file_permissions_aux(i_ctx_p, buffer, blen1) >= 0) { - *pclen = blen1; - make_stream_file(pfile, s, "r"); - return 0; - } - sclose(s); - return_error(e_invalidfileaccess); + *pclen = blen1; + make_stream_file(pfile, s, "r"); + return 0; + } + } + return_error(e_invalidfileaccess); } skip:; return 1; @@ -1024,11 +1030,6 @@ gs_main_instance *minst = get_minst_from_memory(mem); int code; - /* Once we've opened the arg file, prevent searching current dir from now on */ - /* If this causes problems with "strange" scripts and utlities, we have to rethink */ - if (i_ctx_p) - i_ctx_p->starting_arg_file = false; - /* when starting arg files (@ files) iodev_default is not yet set */ if (iodev == 0) iodev = (gx_io_device *)gx_io_device_table[0]; diff -Nru ghostscript-9.15+dfsg/psi/zform.c ghostscript-9.16~dfsg~0/psi/zform.c --- ghostscript-9.15+dfsg/psi/zform.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/zform.c 2015-03-30 08:21:24.000000000 +0000 @@ -28,6 +28,7 @@ #include "gspath.h" #include "gxpath.h" #include "gzstate.h" +#include "store.h" /* support for high level formss */ @@ -55,6 +56,7 @@ return code; if (code == 0) return_error(e_undefined); + tmplate.FormID = -1; tmplate.BBox.p.x = BBox[0]; tmplate.BBox.p.y = BBox[1]; pt.x = tmplate.BBox.q.x = BBox[2]; @@ -121,9 +123,83 @@ return code; } +/* + * - .get_form_id + */ +static int zget_form_id(i_ctx_t *i_ctx_p) +{ + os_ptr op = osp; + gx_device *cdev = gs_currentdevice_inline(igs); + int code, ID; + + code = dev_proc(cdev, dev_spec_op)(cdev, gxdso_get_form_ID, + &ID, sizeof(int)); + + if (code < 0){ + ID = -1; + code = 0; + } + + push(1); + make_int(op, ID); + return code; +} + +/* + * .repeatform - + */ +static int zrepeatform(i_ctx_t *i_ctx_p) +{ + os_ptr op = osp; + gx_device *cdev = gs_currentdevice_inline(igs); + int code; + gs_form_template_t tmplate; + float BBox[4], Matrix[6]; + + check_type(*op, t_integer); + + code = read_matrix(imemory, op - 2, &tmplate.CTM); + if (code < 0) + return code; + + code = dict_floats_param(imemory, op - 1, "BBox", 4, BBox, NULL); + if (code < 0) + return code; + if (code == 0) + return_error(e_undefined); + + tmplate.BBox.p.x = BBox[0]; + tmplate.BBox.p.y = BBox[1]; + + code = dict_floats_param(imemory, op - 1, "Matrix", 6, Matrix, NULL); + if (code < 0) + return code; + if (code == 0) + return_error(e_undefined); + + tmplate.form_matrix.xx = Matrix[0]; + tmplate.form_matrix.xy = Matrix[1]; + tmplate.form_matrix.yx = Matrix[2]; + tmplate.form_matrix.yy = Matrix[3]; + tmplate.form_matrix.tx = Matrix[4]; + tmplate.form_matrix.ty = Matrix[5]; + + tmplate.pcpath = igs->clip_path; + + tmplate.FormID = op->value.intval; + + code = dev_proc(cdev, dev_spec_op)(cdev, gxdso_repeat_form, + &tmplate, sizeof(gs_form_template_t)); + + pop(3); + return code; +} + const op_def zform_op_defs[] = { {"0.beginform", zbeginform}, {"0.endform", zendform}, + {"0.get_form_id", zget_form_id}, + {"1.repeatform", zrepeatform}, op_def_end(0) }; diff -Nru ghostscript-9.15+dfsg/psi/zpcolor.c ghostscript-9.16~dfsg~0/psi/zpcolor.c --- ghostscript-9.15+dfsg/psi/zpcolor.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/psi/zpcolor.c 2015-03-30 08:21:24.000000000 +0000 @@ -305,10 +305,9 @@ if (pdev != NULL) { gx_color_tile *ctile; int code; - if (pinst->templat.uses_transparency) { - gs_state *pgs = igs; - int code; + gs_state *pgs = igs; + if (pinst->templat.uses_transparency) { if (pinst->is_clist) { /* Send the compositor command to close the PDF14 device */ code = (gs_pop_pdf14trans_device(pgs, true) < 0); Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/BookmanURW-DemBol and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/BookmanURW-DemBol differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/BookmanURW-DemBolIta and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/BookmanURW-DemBolIta differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/BookmanURW-Lig and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/BookmanURW-Lig differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/BookmanURW-LigIta and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/BookmanURW-LigIta differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/CenturySchL-Bold and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/CenturySchL-Bold differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/CenturySchL-BoldItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/CenturySchL-BoldItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/CenturySchL-Ital and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/CenturySchL-Ital differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/CenturySchL-Roma and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/CenturySchL-Roma differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/CenturySchURW-Bol and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/CenturySchURW-Bol differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/CenturySchURW-BolIta and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/CenturySchURW-BolIta differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/CenturySchURW-Ita and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/CenturySchURW-Ita differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/CenturySchURW-Rom and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/CenturySchURW-Rom differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/ChanceryURW-MedIta and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/ChanceryURW-MedIta differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusMon-Bol and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusMon-Bol differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusMon-BolObl and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusMon-BolObl differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusMonL-Bold and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusMonL-Bold differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusMonL-BoldObli and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusMonL-BoldObli differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusMonL-Regu and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusMonL-Regu differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusMonL-ReguObli and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusMonL-ReguObli differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusMon-Obl and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusMon-Obl differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusMon-Reg and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusMon-Reg differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusRom-Ita and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusRom-Ita differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusRom-Med and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusRom-Med differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusRom-MedIta and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusRom-MedIta differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusRomNo9L-Medi and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusRomNo9L-Medi differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusRomNo9L-MediItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusRomNo9L-MediItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusRomNo9L-Regu and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusRomNo9L-Regu differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusRomNo9L-ReguItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusRomNo9L-ReguItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusRom-Reg and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusRom-Reg differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSan-Bol and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSan-Bol differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSan-BolIta and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSan-BolIta differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSan-Ita and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSan-Ita differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanL-Bold and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanL-Bold differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanL-BoldCond and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanL-BoldCond differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanL-BoldCondItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanL-BoldCondItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanL-BoldItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanL-BoldItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanL-Regu and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanL-Regu differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanL-ReguCond and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanL-ReguCond differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanL-ReguCondItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanL-ReguCondItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanL-ReguItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanL-ReguItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanNar-Bol and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanNar-Bol differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanNar-BolIta and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanNar-BolIta differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanNar-Ita and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanNar-Ita differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSanNar-Reg and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSanNar-Reg differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/NimbusSan-Reg and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/NimbusSan-Reg differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/PalladioURW-Bol and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/PalladioURW-Bol differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/PalladioURW-BolIta and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/PalladioURW-BolIta differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/PalladioURW-Ita and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/PalladioURW-Ita differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/PalladioURW-Rom and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/PalladioURW-Rom differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWBookmanL-DemiBold and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWBookmanL-DemiBold differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWBookmanL-DemiBoldItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWBookmanL-DemiBoldItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWBookmanL-Ligh and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWBookmanL-Ligh differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWBookmanL-LighItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWBookmanL-LighItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWChanceryL-MediItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWChanceryL-MediItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWGothic-Boo and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWGothic-Boo differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWGothic-BooObl and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWGothic-BooObl differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWGothic-Dem and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWGothic-Dem differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWGothic-DemObl and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWGothic-DemObl differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWGothicL-Book and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWGothicL-Book differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWGothicL-BookObli and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWGothicL-BookObli differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWGothicL-Demi and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWGothicL-Demi differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWGothicL-DemiObli and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWGothicL-DemiObli differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWPalladioL-Bold and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWPalladioL-Bold differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWPalladioL-BoldItal and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWPalladioL-BoldItal differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWPalladioL-Ital and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWPalladioL-Ital differ Binary files /tmp/HMSvCRURjF/ghostscript-9.15+dfsg/Resource/Font/URWPalladioL-Roma and /tmp/dRUPOOStHA/ghostscript-9.16~dfsg~0/Resource/Font/URWPalladioL-Roma differ diff -Nru ghostscript-9.15+dfsg/Resource/IdiomSet/Pscript5Idiom ghostscript-9.16~dfsg~0/Resource/IdiomSet/Pscript5Idiom --- ghostscript-9.15+dfsg/Resource/IdiomSet/Pscript5Idiom 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/IdiomSet/Pscript5Idiom 2015-03-30 08:21:24.000000000 +0000 @@ -18,7 +18,7 @@ }{ //false }ifelse - { gsave sBdx 2 div dup 0.05 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode xshow currentpoint grestore moveto} + { gsave sBdx 2 div dup 0.2 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode xshow currentpoint grestore moveto} {2 copy 2 copy 2 copy gsave sBdx 0 rmoveto xshow grestore gsave 0 sBdx rmoveto xshow grestore gsave sBdx dup rmoveto xshow grestore xshow} bind ifelse } bind @@ -31,7 +31,7 @@ }{ //false }ifelse - { gsave sBdx 2 div dup 0.05 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode yshow currentpoint grestore moveto} + { gsave sBdx 2 div dup 0.2 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode yshow currentpoint grestore moveto} {2 copy 2 copy 2 copy gsave sBdx 0 rmoveto yshow grestore gsave 0 sBdx rmoveto yshow grestore gsave sBdx dup rmoveto yshow grestore yshow} bind ifelse } bind @@ -44,7 +44,7 @@ }{ //false }ifelse - { gsave sBdx 2 div dup 0.05 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode xyshow currentpoint grestore moveto} + { gsave sBdx 2 div dup 0.2 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode xyshow currentpoint grestore moveto} {2 copy 2 copy 2 copy gsave sBdx 0 rmoveto xyshow grestore gsave 0 sBdx rmoveto xyshow grestore gsave sBdx dup rmoveto xyshow grestore xyshow} bind ifelse } bind @@ -57,7 +57,7 @@ }{ //false }ifelse - { gsave sBdx 2 div dup 0.05 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode show currentpoint grestore moveto} + { gsave sBdx 2 div dup 0.2 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode show currentpoint grestore moveto} {1 copy 2 copy gsave sBdx 0 rmoveto show grestore gsave 0 sBdx rmoveto show grestore gsave sBdx dup rmoveto show grestore show} bind ifelse } bind @@ -70,7 +70,7 @@ }{ //false }ifelse - { gsave sBdx 2 div dup 0.05 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode ashow currentpoint grestore moveto} + { gsave sBdx 2 div dup 0.2 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode ashow currentpoint grestore moveto} {3 copy 3 copy 3 copy gsave sBdx 0 rmoveto ashow grestore gsave 0 sBdx rmoveto ashow grestore gsave sBdx dup rmoveto ashow grestore ashow} bind ifelse } bind @@ -83,7 +83,7 @@ }{ //false }ifelse - { gsave sBdx 2 div dup 0.05 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode widthshow currentpoint grestore moveto} + { gsave sBdx 2 div dup 0.2 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode widthshow currentpoint grestore moveto} {3 copy 3 copy 3 copy gsave sBdx 0 rmoveto widthshow grestore gsave 0 sBdx rmoveto widthshow grestore gsave sBdx dup rmoveto widthshow grestore widthshow} bind ifelse } bind @@ -97,7 +97,7 @@ }{ //false }ifelse - { gsave sBdx 2 div dup 0.05 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode awidthshow currentpoint grestore moveto} + { gsave sBdx 2 div dup 0.2 setlinewidth currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors rmoveto 2 .settextrenderingmode awidthshow currentpoint grestore moveto} {3 copy 3 copy 3 copy gsave sBdx 0 rmoveto awidthshow grestore gsave 0 sBdx rmoveto awidthshow grestore gsave sBdx dup rmoveto awidthshow grestore awidthshow} bind ifelse } bind diff -Nru ghostscript-9.15+dfsg/Resource/Init/Fontmap.GS ghostscript-9.16~dfsg~0/Resource/Init/Fontmap.GS --- ghostscript-9.15+dfsg/Resource/Init/Fontmap.GS 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/Fontmap.GS 2015-03-30 08:21:24.000000000 +0000 @@ -81,49 +81,49 @@ % Aliases -/Bookman-Demi /URWBookmanL-DemiBold ; -/Bookman-DemiItalic /URWBookmanL-DemiBoldItal ; -/Bookman-Light /URWBookmanL-Ligh ; -/Bookman-LightItalic /URWBookmanL-LighItal ; - -/Courier /NimbusMonL-Regu ; -/Courier-Oblique /NimbusMonL-ReguObli ; -/Courier-Bold /NimbusMonL-Bold ; -/Courier-BoldOblique /NimbusMonL-BoldObli ; - -/AvantGarde-Book /URWGothicL-Book ; -/AvantGarde-BookOblique /URWGothicL-BookObli ; -/AvantGarde-Demi /URWGothicL-Demi ; -/AvantGarde-DemiOblique /URWGothicL-DemiObli ; - -/Helvetica /NimbusSanL-Regu ; -/Helvetica-Oblique /NimbusSanL-ReguItal ; -/Helvetica-Bold /NimbusSanL-Bold ; -/Helvetica-BoldOblique /NimbusSanL-BoldItal ; - -/Helvetica-Narrow /NimbusSanL-ReguCond ; -/Helvetica-Narrow-Oblique /NimbusSanL-ReguCondItal ; -/Helvetica-Narrow-Bold /NimbusSanL-BoldCond ; -/Helvetica-Narrow-BoldOblique /NimbusSanL-BoldCondItal ; - -/Palatino-Roman /URWPalladioL-Roma ; -/Palatino-Italic /URWPalladioL-Ital ; -/Palatino-Bold /URWPalladioL-Bold ; -/Palatino-BoldItalic /URWPalladioL-BoldItal ; - -/NewCenturySchlbk-Roman /CenturySchL-Roma ; -/NewCenturySchlbk-Italic /CenturySchL-Ital ; -/NewCenturySchlbk-Bold /CenturySchL-Bold ; -/NewCenturySchlbk-BoldItalic /CenturySchL-BoldItal ; - -/Times-Roman /NimbusRomNo9L-Regu ; -/Times-Italic /NimbusRomNo9L-ReguItal ; -/Times-Bold /NimbusRomNo9L-Medi ; -/Times-BoldItalic /NimbusRomNo9L-MediItal ; +/Bookman-Demi /BookmanURW-DemBol ; +/Bookman-DemiItalic /BookmanURW-DemBolIta ; +/Bookman-Light /BookmanURW-Lig ; +/Bookman-LightItalic /BookmanURW-LigIta ; + +/Courier /NimbusMon-Reg ; +/Courier-Oblique /NimbusMon-Obl ; +/Courier-Bold /NimbusMon-Bol ; +/Courier-BoldOblique /NimbusMon-BolObl ; + +/AvantGarde-Book /URWGothic-Boo ; +/AvantGarde-BookOblique /URWGothic-BooObl ; +/AvantGarde-Demi /URWGothic-Dem ; +/AvantGarde-DemiOblique /URWGothic-DemObl ; + +/Helvetica /NimbusSan-Reg ; +/Helvetica-Oblique /NimbusSan-Ita ; +/Helvetica-Bold /NimbusSan-Bol ; +/Helvetica-BoldOblique /NimbusSan-BolIta ; + +/Helvetica-Narrow /NimbusSanNar-Reg ; +/Helvetica-Narrow-Oblique /NimbusSanNar-Ita ; +/Helvetica-Narrow-Bold /NimbusSanNar-Bol ; +/Helvetica-Narrow-BoldOblique /NimbusSanNar-BolIta ; + +/Palatino-Roman /PalladioURW-Rom ; +/Palatino-Italic /PalladioURW-Ita ; +/Palatino-Bold /PalladioURW-Bol ; +/Palatino-BoldItalic /PalladioURW-BolIta ; + +/NewCenturySchlbk-Roman /CenturySchURW-Rom ; +/NewCenturySchlbk-Italic /CenturySchURW-Ita ; +/NewCenturySchlbk-Bold /CenturySchURW-Bol ; +/NewCenturySchlbk-BoldItalic /CenturySchURW-BolIta ; + +/Times-Roman /NimbusRom-Reg ; +/Times-Italic /NimbusRom-Ita ; +/Times-Bold /NimbusRom-Med ; +/Times-BoldItalic /NimbusRom-MedIta ; /Symbol /StandardSymL ; -/ZapfChancery-MediumItalic /URWChanceryL-MediItal ; +/ZapfChancery-MediumItalic /ChanceryURW-MedIta ; /ZapfDingbats /Dingbats ; diff -Nru ghostscript-9.15+dfsg/Resource/Init/gs_cidfm.ps ghostscript-9.16~dfsg~0/Resource/Init/gs_cidfm.ps --- ghostscript-9.15+dfsg/Resource/Init/gs_cidfm.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/gs_cidfm.ps 2015-03-30 08:21:24.000000000 +0000 @@ -138,17 +138,44 @@ % Remove any mappings for which we cannot find the font file dup { - dup type /dicttype eq + % if we have a name1->name2 mapping, follow the "trail", + % so if the name2 mapping is known in the .map dict, retrieve + % that map value and loop round until we either reach a map + % which references a TTF (i.e. a dictionary record) or we have + % a name not known in the .map, in which case we have to resort + % to the normal Postscript "resourcestatus". { - /Path .knownget + dup type /nametype eq { - status {pop pop pop pop pop} - {2 index exch undef} ifelse + dup 3 index exch .knownget + { exch pop } + { + /CIDFont resourcestatus + { pop pop pop } + { 2 index exch .undef } + ifelse + exit + } ifelse } - {2 index exch undef} - ifelse - } - {pop pop} ifelse + { + dup type /dicttype eq + { + /Path .knownget + { + .libfile + {closefile pop} + { + {(r) file} .internalstopped + {pop pop 2 index exch .undef} + {closefile pop} ifelse + } ifelse + } + {2 index exch .undef} + ifelse + exit + } if + } ifelse + } loop } forall % This is where we insert the default fallback into the map @@ -203,7 +230,7 @@ pop 1 index exch undef % <> <> } loop } loop - pop pop % + pop pop } bind def /PreprocessRecord % PreprocessRecord diff -Nru ghostscript-9.15+dfsg/Resource/Init/gs_fapi.ps ghostscript-9.16~dfsg~0/Resource/Init/gs_fapi.ps --- ghostscript-9.15+dfsg/Resource/Init/gs_fapi.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/gs_fapi.ps 2015-03-30 08:21:24.000000000 +0000 @@ -369,17 +369,17 @@ /FAPIhook_aux % .FAPIhook { % name <> - { (FAPIhook ) print 1 index = } //FAPI_hook_debug exec + { (\nFAPIhook ) print 1 index = flush } //FAPI_hook_debug exec dup /FAPI known { - { //PrintFontRef exec ( is mapped to FAPI=) print dup /FAPI get = } //FAPI_hook_debug exec + { //PrintFontRef exec ( is mapped to FAPI=) print dup /FAPI get = flush } //FAPI_hook_debug exec //true //.FAPIrebuildfont //ChooseDecoding exec } { dup /PathLoad known dup { - { (PathLoad known for the font ) print //PrintFontRef exec (.) = } //FAPI_hook_debug exec + { (PathLoad known for the font ) print //PrintFontRef exec (.\n) print flush} //FAPI_hook_debug exec } { pop //FAPI_is_hook_disabled exec dup { pop - { (FAPIhook is in .loadfont context for the font ) print //PrintFontRef exec (.) = } //FAPI_hook_debug exec + { (FAPIhook is in .loadfont context for the font ) print //PrintFontRef exec (.\n) print flush } //FAPI_hook_debug exec //true } if } ifelse @@ -402,15 +402,15 @@ 1 index //GetFontType exec //FindInArray exec % name <> bHook } ifelse - { { (Trying to render the font ) print //PrintFontRef exec ( with FAPI...) = } //FAPI_hook_debug exec + { { (Trying to render the font ) print //PrintFontRef exec ( with FAPI...\n) print flush } //FAPI_hook_debug exec //.FAPIpassfont { - { //PrintFontRef exec ( is being rendered with FAPI=) print dup /FAPI get = } //FAPI_hook_debug exec + { //PrintFontRef exec ( is being rendered with FAPI=) print dup /FAPI get = flush } //FAPI_hook_debug exec //false //.FAPIrebuildfont //ChooseDecoding exec } { - { (Can't render ) print //PrintFontRef exec ( with FAPI, will do with native GS renderer.) = } //FAPI_hook_warn exec + { (Can't render ) print //PrintFontRef exec ( with FAPI, will do with native GS renderer.\n) print flush } //FAPI_hook_warn exec } ifelse } { - { (The font ) print //PrintFontRef exec ( doesn't need to render with FAPI.) = } //FAPI_hook_debug exec + { (The font ) print //PrintFontRef exec ( doesn't need to render with FAPI.\n) print flush } //FAPI_hook_debug exec } ifelse % Remove the plugin request from the font dictionary @@ -422,7 +422,7 @@ { //is_device_compatible_to_FAPI exec { //FAPIhook_aux exec } { - { (FAPIhook is disabled for the current device.) = } //FAPI_hook_debug exec + { (FAPIhook is disabled for the current device.\n) print flush } //FAPI_hook_debug exec } ifelse } bind def diff -Nru ghostscript-9.15+dfsg/Resource/Init/gs_fonts.ps ghostscript-9.16~dfsg~0/Resource/Init/gs_fonts.ps --- ghostscript-9.15+dfsg/Resource/Init/gs_fonts.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/gs_fonts.ps 2015-03-30 08:21:24.000000000 +0000 @@ -68,6 +68,7 @@ % Load a font name -> font file name map. userdict /Fontmap .FontDirectory maxlength dict put +userdict /.nativeFontmap .FontDirectory maxlength dict put /.loadFontmap { % .loadFontmap - % We would like to simply execute .definefontmap as we read, % but we have to maintain backward compatibility with an older @@ -115,7 +116,7 @@ } bind def % Add an entry in Fontmap. We redefine this if the Level 2 % resource machinery is loaded. -/.definefontmap % .definefontmap - +/.definefontmapaux % .definefontmapaux - { % Since Fontmap is global, make sure the values are storable. % If the fontname contains Unicode (first byte == \000) and % this is not an alias definition, define an alias using ASCII @@ -135,7 +136,7 @@ } for exch { DEBUG { (\nAdding alias for: ) print 1 index ==only ( as: ) print dup //== exec flush } if - cvn exch cvn .definefontmap % recurse with an alias + cvn exch cvn .definefontmapaux % recurse with an alias } { pop pop % discard the name } ifelse @@ -148,7 +149,9 @@ { dup .gcheck not { dup length string copy } if } if - Fontmap 3 -1 roll 2 copy .knownget + + 4 -1 roll {.nativeFontmap}{Fontmap} ifelse + 3 -1 roll 2 copy .knownget { % Add an element to the end of the existing value, % unless it's the same as the current last element. mark exch aload pop counttomark 4 add -1 roll @@ -160,6 +163,16 @@ ifelse .setglobal } bind def +/.definefontmap % .definefontmap - +{ + //false 3 1 roll //.definefontmapaux exec +} bind def + +/.definenativefontmap % .definenativefontmap - +{ + //true 3 1 roll //.definefontmapaux exec +} bind def + % Parse a font file just enough to find the FontName or FontType. /.findfontvalue { % .findfontvalue true % .findfontvalue false @@ -322,12 +335,12 @@ { % stack: % dup 0 setfileposition .findfontname - { dup Fontmap exch known + { dup .nativeFontmap exch known { pop pop } { exch copystring exch DEBUG { ( ) print dup =only flush } if - 1 index .definefontmap + 1 index .definenativefontmap .splitfilename pop //true .scanfontdict 3 1 roll .growput % Increment fontcount. 3 -1 roll 1 add 3 1 roll @@ -369,41 +382,47 @@ } .bind executeonly def systemdict /NONATIVEFONTMAP known .setnativefontmapbuilt /.buildnativefontmap { % - .buildnativefontmap - QUIET not { - (Querying operating system for font files...\n) - print flush - } if - .getnativefonts dup + systemdict /.nativefontmapbuilt .knownget not + { //false} if + + {//false} { - exch + QUIET not { + (Querying operating system for font files...\n) + print flush + } if + .getnativefonts dup { - % stack: [ (name) (path) ] - % verify the font name ourselves - dup 1 get (r) { file } stopped + exch { - % skip the entry if we can't open the returned path - pop pop pop - }{ - % we could open the font file - mark 2 1 roll - {.findfontname} stopped - { - cleartomark - pop pop - } + % stack: [ (name) (path) ] + % verify the font name ourselves + dup 1 get (r) { file } .internalstopped { - 3 -1 roll pop - not { dup 0 get } if % stack: (newname) [ (name) (path) ] - % DEBUG { ( found ) print dup print (\n) print flush } if - % add entry to the fontmap - 1 index exch 0 exch dup type /nametype ne {cvn} if put - aload pop .definefontmap + % skip the entry if we can't open the returned path + pop pop pop + }{ + % we could open the font file + mark 2 1 roll + {.findfontname} .internalstopped + { + cleartomark + pop + } + { + 3 -1 roll pop + not { dup 0 get } if % stack: (newname) [ (name) (path) ] + % DEBUG { ( found ) print dup print (\n) print flush } if + % add entry to the fontmap + 1 index exch 0 exch dup type /nametype ne {cvn} if put + aload pop .definenativefontmap + } ifelse } ifelse - } ifelse - } forall - } if - % record that we've been run - //true .setnativefontmapbuilt + } forall + } if + % record that we've been run + //true .setnativefontmapbuilt + } ifelse } bind def % Create the dictionary that registers the .buildfont procedure @@ -738,7 +757,11 @@ /.substitutefont { % .substitutefont dup 0 exch .fontnameproperties .substitutefontname % Only accept fonts known in the Fontmap. - Fontmap 1 index known not { pop defaultfontname } if + Fontmap 1 index known not + { + .nativeFontmap 1 index known not + {pop defaultfontname } if + } if } bind def % If requested, make (and recognize) fake entries in FontDirectory for fonts @@ -892,7 +915,7 @@ } { % No more directories to scan. Try building the native % font map entries if we haven't already done so. - systemdict /.nativefontmapbuilt get not { .buildnativefontmap } { //false } ifelse { + .buildnativefontmap { % Same stack as at the beginning of .dofindfont. .dofindfont % start over } { @@ -931,12 +954,23 @@ { % Already loaded exch pop //true } - { dup Fontmap exch .knownget not + { + dup Fontmap exch .knownget + { //true //true } { % Unknown font name. Look for a file with the % same name as the requested font. - .tryloadfont - } + dup .tryloadfont + { exch pop //true //false } + { + % if we can't load by name check the native font map + dup .nativeFontmap exch .knownget + { //true //true } + { //false //false } ifelse + } ifelse + } ifelse + { % Try each element of the Fontmap in turn. + pop //false exch % (in case we exhaust the list) % Stack: fontname false fontmaplist { exch pop @@ -970,7 +1004,7 @@ } ifelse } - ifelse + if } ifelse } bind def @@ -1130,8 +1164,9 @@ % Define a procedure to load all known fonts. % This isn't likely to be very useful. /loadallfonts - { Fontmap { pop findfont pop } forall - } bind def +{ + [Fontmap .nativeFontmap] { { pop findfont pop } forall } forall +} bind def % If requested, load all the fonts defined in the Fontmap into FontDirectory % as "fake" fonts i.e., font dicts with only FontName and FontType defined. @@ -1146,15 +1181,18 @@ } { (gs_fonts FAKEFONTS) VMDEBUG - Fontmap { - pop dup type /stringtype eq { cvn } if - .FontDirectory 1 index known not { - 2 dict dup /FontName 3 index put - dup /FontType 1 put - .FontDirectory 3 1 roll { put } //superexec % readonly - } { - pop - } ifelse + [Fontmap .nativeFontmap ] + { + { + pop dup type /stringtype eq { cvn } if + .FontDirectory 1 index known not { + 2 dict dup /FontName 3 index put + dup /FontType 1 put + .FontDirectory 3 1 roll { put } //superexec % readonly + } { + pop + } ifelse + } forall } forall } FAKEFONTS { exch } if pop def % don't bind, .current/setglobal get redefined diff -Nru ghostscript-9.15+dfsg/Resource/Init/gs_init.ps ghostscript-9.16~dfsg~0/Resource/Init/gs_init.ps --- ghostscript-9.15+dfsg/Resource/Init/gs_init.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/gs_init.ps 2015-03-30 08:21:24.000000000 +0000 @@ -29,7 +29,7 @@ % Interpreter library version number % NOTE: the interpreter code requires that the first non-comment token % in this file be an integer, and that it match the compiled-in version! -915 +916 % Check the interpreter revision. dup revision ne diff -Nru ghostscript-9.15+dfsg/Resource/Init/gs_lev2.ps ghostscript-9.16~dfsg~0/Resource/Init/gs_lev2.ps --- ghostscript-9.15+dfsg/Resource/Init/gs_lev2.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/gs_lev2.ps 2015-03-30 08:21:24.000000000 +0000 @@ -938,8 +938,35 @@ 1 index dup /Implementation //null .forceput readonly pop } if /UNROLLFORMS where {/UNROLLFORMS get}{false}ifelse not - %% [CTM] <

      > .beginform - - {3 -1 roll 2 index .beginform exec .endform}{exec} ifelse + %% [CTM] <> PaintProc .beginform - + { + %% First,, check to see if we have no /Implementation already defined (see above) + 1 index /Implementation get //null eq + { + %% We don't, so copy the form dictionary + 1 index 4 1 roll + %% tell devices we're starting a form, run the PaintProc, and then tell the devices we've finished + 3 -1 roll 2 index .beginform exec .endform + %% Ask devices if they have cached the form, and what ID to use if so + %% returning -1 means 'no ID' + .get_form_id dup -1 eq + {pop pop} + { + %% The form is cached with a specific ID. Make a dictionary (which we'll store in the + %% Form dictioanry using the /Implementation key). + 1 dict dup /FormID 4 -1 roll put + 1 index exch /Implementation exch .forceput readonly pop + } + ifelse + } + { + %% We have a (non-null) Implementation, get the dictionary and pull the + %% FormID key from it, then tell the device to use the stored form with the + %% specified key. + pop dup /Implementation get /FormID get .repeatform + }ifelse + } + {exec} ifelse } .bind odef % must bind .forceput /.formtypes 5 dict diff -Nru ghostscript-9.15+dfsg/Resource/Init/gs_pdfwr.ps ghostscript-9.16~dfsg~0/Resource/Init/gs_pdfwr.ps --- ghostscript-9.15+dfsg/Resource/Init/gs_pdfwr.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/gs_pdfwr.ps 2015-03-30 08:21:24.000000000 +0000 @@ -139,7 +139,7 @@ /ColorConversionStrategy /sRGB /ColorImageDownsampleType /Average /ColorImageResolution 72 - /CompatibilityLevel 1.3 + /CompatibilityLevel 1.5 /CreateJobTicket //false /DoThumbnails //false /EmbedAllFonts //true @@ -163,7 +163,7 @@ /ColorConversionStrategy /sRGB /ColorImageDownsampleType /Bicubic /ColorImageResolution 150 - /CompatibilityLevel 1.4 + /CompatibilityLevel 1.5 /CreateJobTicket //false /DoThumbnails //false /EmbedAllFonts //true @@ -191,7 +191,7 @@ /ColorConversionStrategy /UseDeviceIndependentColor /ColorImageDownsampleType /Bicubic /ColorImageResolution 300 - /CompatibilityLevel 1.4 + /CompatibilityLevel 1.5 /CreateJobTicket //true /DoThumbnails //false /EmbedAllFonts //true @@ -608,26 +608,40 @@ % If the Creator is PScript5.dll, disable the 32 /FontType resource for % handling GlyphNames2Unicode. Since /FontType category can't redefine, % we can do only with redefining the operator 'resourcestatus'. - /WantsToUnicode /GetDeviceParam .special_op { - exch pop - }{ + systemdict /.pdf_hooked_DSC_Creator .knownget + { + {//false}{//true} ifelse + } + { //true - }ifelse + } ifelse + { - /Creator .knownget { - (PScript5.dll) search { - pop pop - systemdict /resourcestatus dup - { dup /FontType eq 2 index 32 eq and { - pop pop //false - } { - resourcestatus - } ifelse - } bind .makeoperator .forceput + /WantsToUnicode /GetDeviceParam .special_op { + exch pop + }{ + //true + }ifelse + { + /Creator .knownget { + (PScript5.dll) search { + pop pop + systemdict /resourcestatus dup + { dup /FontType eq 2 index 32 eq and { + pop pop //false + } { + resourcestatus + } ifelse + } bind .makeoperator .forceput + systemdict /.pdf_hooked_DSC_Creator //true .forceput + } if + pop } if + } { pop - } if - } { + } ifelse + } + { pop } ifelse } @@ -735,6 +749,7 @@ /DownsampleColorImages { } /ColorImageDownsampleThreshold { } /ColorImageDownsampleType { } + /ColorImageAutoFilterStrategy { } /EncodeColorImages { } /ColorImageFilter { } /ColorImageResolution { } @@ -755,6 +770,7 @@ /DownsampleGrayImages { } /GrayImageDownsampleThreshold { } /GrayImageDownsampleType { } + /GrayImageAutoFilterStrategy { } /EncodeGrayImages { } /GrayImageFilter { } /GrayImageResolution { } diff -Nru ghostscript-9.15+dfsg/Resource/Init/gs_res.ps ghostscript-9.16~dfsg~0/Resource/Init/gs_res.ps --- ghostscript-9.15+dfsg/Resource/Init/gs_res.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/gs_res.ps 2015-03-30 08:21:24.000000000 +0000 @@ -567,7 +567,6 @@ dup status { pop pop pop pop exch pop % (scr) (p/c/n) } { - exch % (scr) (p/c/n) (c/n) .libfile { dup .filename pop % (scr) (p/c/n) file (p/c/n') exch closefile % (scr) (p/c/n) (p/c/n') @@ -924,10 +923,14 @@ % Define the Font category. -/.fontstatus { % .fontstatus +/.fontstatusaux { % .fontstatusaux { % Create a loop context just so we can exit it early. % Check Fontmap. - Fontmap 1 index .knownget { + Fontmap 1 index .knownget + { //true } + { .nativeFontmap 1 index .knownget } ifelse + + { { dup type /nametype eq { .fontstatus { pop //null exit } if @@ -941,6 +944,8 @@ } ifelse } forall dup //null eq { pop //true exit } if } if + + dup / eq { //false exit } if % / throws an error from findlibfile % Convert names to strings; give up on other types. dup type /nametype eq { .namestring } if @@ -958,6 +963,17 @@ } loop } bind def +/.fontstatus { % .fontstatus + //.fontstatusaux exec + { //true } + { + .buildnativefontmap + { //.fontstatusaux exec } + { //false } ifelse + } ifelse +} bind def +currentdict /.fontstatusaux .undef + /Font mark /InstanceType /dicttype diff -Nru ghostscript-9.15+dfsg/Resource/Init/gs_ttf.ps ghostscript-9.16~dfsg~0/Resource/Init/gs_ttf.ps --- ghostscript-9.15+dfsg/Resource/Init/gs_ttf.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/gs_ttf.ps 2015-03-30 08:21:24.000000000 +0000 @@ -41,16 +41,21 @@ % Closes the file in either case. /.findnonttfontvalue /.findfontvalue load def /.findfontvalue { - 1 index .is_ttf_or_otf { - % If this is a font at all, it's a TrueType font. - dup /FontType eq { - pop closefile 42 //true - } { - dup /FontName eq { pop .findttfontname } { pop closefile //false } ifelse - } ifelse - } { - % Not a TrueType font. - .findnonttfontvalue + 1 index .is_woff { + /.findfontvalue cvx /invalidfont signalerror + } + { + 1 index .is_ttf_or_otf { + % If this is a font at all, it's a TrueType font. + dup /FontType eq { + pop closefile 42 //true + } { + dup /FontName eq { pop .findttfontname } { pop closefile //false } ifelse + } ifelse + } { + % Not a TrueType font. + .findnonttfontvalue + } ifelse } ifelse } bind def @@ -81,6 +86,7 @@ /tt_tag_dict << <00010000> 0 (true) 0 (typ1) 0 (ttcf) 0 >> readonly def /ttf_otf_tag_dict << <00010000> 0 (true) 0 (typ1) 0 (ttcf) 0 (OTTO) 0>> readonly def +/woff_tag_dict << (wOFF) 0>> readonly def % .loadfontfile - /.loadnonttfontfile /.loadfontfile load def @@ -99,8 +105,13 @@ dup 0 setfileposition (1234) .peekstring { //ttf_otf_tag_dict exch known } { //false } ifelse } bind def +/.is_woff { + dup 0 setfileposition (1234) .peekstring { //woff_tag_dict exch known } { //false } ifelse +} bind def + currentdict /tt_tag_dict .undef currentdict /ttf_otf_tag_dict .undef +currentdict /woff_tag_dict .undef % ---------------- Automatic Type 42 generation ---------------- % @@ -1290,66 +1301,62 @@ } if % Provide all known aliases for each glyph - dup - 16 string //ReverseAdobeGlyphList //AdobeGlyphList 4 -1 roll % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) - dup - { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) gname cstring - exch dup % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname gname - - 4 index exch .knownget - { //true} - { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname - % if we couldn't derive the code point from the AGL, we might derive it - % from a formatted "uniXXXX" name - the only ones we're interested in are smaller than 16 chars. - dup length 16 gt - { - //false + cmapsub 0 4 getinterval <00030001> eq % is the cmap table a unicode one? + cmapa //ReverseAdobeGlyphList //AdobeGlyphList + { % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) gname(name) codep(integer) + exch + dup 6 index exch .knownget + { % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) codep(integer) gname(name) gindex(integer) + 3 index 3 index .knownget + { % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) codep(integer) gname(name) gindex(integer) gnames(array) + { % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) codep(integer) gname(name) gindex(integer) gname(name) + TTFDEBUG { (\n1 setting alias: ) print dup ==only + ( to be the same as ) print 2 index //== exec } if + + 7 index 2 index 3 -1 roll exch //.growput superexec + } forall + pop pop pop } { - dup 6 index 0 1 15 {1 index exch 0 put} for cvs dup (uni) anchorsearch - { - % as luck would have it, we can just replace the "uni" with "16#" - % to get something we can convert to a number - pop pop dup 0 (16#) putinterval {cvi} stopped - {pop //false} - { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname cpoint - dup 5 index exch known - { //true } - { pop //false } - ifelse - } ifelse + pop pop + } ifelse + } + { % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) gname(name) codep(integer) + exch + % Only do this for Unicode cmap table + 4 index + { + dup 4 index exch .knownget + { % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) gname(name) codep(integer) gindex(integer) + exch pop + TTFDEBUG { (\n2 setting alias: ) print 1 index ==only + ( to use glyph index: ) print dup //== exec } if + 5 index 3 1 roll //.growput superexec + //false } - { pop pop //false} - ifelse + { + //true + }ifelse + } + { + //true } ifelse - } ifelse - { - % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname cpoint - % loop through the array of names for this codepoint - % if the CharStrings dict doesn't contain an entry for the name - % create one. - % We know from above that the cpoint exists in the RAGL dict. - 5 index exch get - % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname aglnames(array) - { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname aglname - dup 4 index exch known not - { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname aglname - TTFDEBUG { (\nsetting alias: ) print dup ==only - ( to be the same as glyph: ) print 1 index //== exec } if - 3 index exch 3 index //.growput superexec - % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname + { % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) gname(name) codep(integer) + 16 4 string cvrs dup length neg 7 add (uni0000) dup + 4 -2 roll exch putinterval cvn 3 index 1 index .knownget + { % CharStrings(dict) isunicode(boolean) cmap(dict) RAGL(dict) gname(name) codep(integer) gindex(integer) + TTFDEBUG { (\3 nsetting alias: ) print 1 index ==only + ( to be index: ) print dup //== exec } if + exch pop 5 index 3 1 roll //.growput superexec } - {pop} ifelse - } forall - pop pop - } - { - % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname - pop pop + { + pop pop + } ifelse + } if } ifelse } forall - pop pop pop pop + pop pop pop readonly diff -Nru ghostscript-9.15+dfsg/Resource/Init/gs_type1.ps ghostscript-9.16~dfsg~0/Resource/Init/gs_type1.ps --- ghostscript-9.15+dfsg/Resource/Init/gs_type1.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/gs_type1.ps 2015-03-30 08:21:24.000000000 +0000 @@ -69,7 +69,6 @@ % Provide all known aliases for each glyph if % substitution is allowed (pf2afm.ps has code % to disables it by modifying t1_glyph_equivalence). - t1_glyph_equivalence length 0 ne { 16 string //ReverseAdobeGlyphList //AdobeGlyphList 4 -1 roll % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) @@ -79,23 +78,29 @@ 4 index exch .knownget { //true} { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname - % if we couldn't derive the code point from the AGL, we might derive it - % from a formatted "uniXXXX" name. - dup 6 index 0 1 15 {1 index exch 0 put} for cvs dup (uni) anchorsearch + dup length 16 gt { - % as luck would have it, we can just replace the "uni" with "16#" - % to get something we can convert to a number - pop pop dup 0 (16#) putinterval {cvi} stopped - {//false} - { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname cpoint - dup 5 index exch known - { //true } - { pop //false } - ifelse - } ifelse + //false } - { pop pop //false} - ifelse + { + % if we couldn't derive the code point from the AGL, we might derive it + % from a formatted "uniXXXX" name. + dup 6 index 0 1 15 {1 index exch 0 put} for cvs dup (uni) anchorsearch + { + % as luck would have it, we can just replace the "uni" with "16#" + % to get something we can convert to a number + pop pop dup 0 (16#) putinterval {cvi} stopped + {//false} + { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname cpoint + dup 5 index exch known + { //true } + { pop //false } + ifelse + } ifelse + } + { pop pop //false} + ifelse + } ifelse } ifelse { @@ -103,20 +108,23 @@ % loop through the array of names for this codepoint % if the CharStrings dict doesn't contain an entry for the name % create one. - % We know from above that the cpoint exists in the RAGL dict. - 5 index exch get - % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname aglnames(array) - { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname aglname - dup 4 index exch known not - { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname aglname - CFFDEBUG { (\nsetting alias: ) print dup ==only - ( to be the same as glyph: ) print 1 index //== exec } if - 3 index exch 3 index //.growput superexec - % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname - } - {pop} ifelse - } forall - pop pop + 5 index exch .knownget + { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname aglnames(array) + { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname aglname + dup 4 index exch known not + { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname aglname + CFFDEBUG { (\nsetting alias: ) print dup ==only + ( to be the same as glyph: ) print 1 index //== exec } if + 3 index exch 3 index //.growput superexec + % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname + } + {pop} ifelse + } forall + pop pop + } + { + pop pop pop + } ifelse } { % scratch(string) RAGL(dict) AGL(dict) CharStrings(dict) cstring gname @@ -126,7 +134,7 @@ 4 1 roll pop pop pop } if pop - dup /.AGLprocessed~GS //true .growput + dup /.AGLprocessed~GS //true //.growput superexec } if //.buildfont1 3 2 roll .setglobal diff -Nru ghostscript-9.15+dfsg/Resource/Init/pdf_base.ps ghostscript-9.16~dfsg~0/Resource/Init/pdf_base.ps --- ghostscript-9.15+dfsg/Resource/Init/pdf_base.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/pdf_base.ps 2015-03-30 08:21:24.000000000 +0000 @@ -103,8 +103,10 @@ //true 1 index .namestring { //num-chars-dict exch known and } forall { % perhaps, it's a malformed number. + PDFSTOPONERROR {//true}{ pop pop pop 0 //false ( looks like a malformed number, replacing with 0.) pdfformaterror + } ifelse } { //true % punt } ifelse @@ -192,7 +194,11 @@ pop { %% If it looks like a number, try to deal with it as such - dup {.pdftokenerror} stopped + PDFSTOPONERROR { + dup .pdftokenerror + }{ + dup {.pdftokenerror} stopped + } ifelse { pop %% But if it fails, fall back to converting into a anem. %% This will propagate through and cause different @@ -531,39 +537,54 @@ } bind def /endobj { % endobj - { - 2 index type /integertype ne 2 index type /integertype ne or { - count 3 gt { - ( **** Warning: obj definition followed by multiple tokens, attempting to recover.\n) pdfformaterror + + %% If we have a stream wioth a broken endstream we can get here without + %% an object definition on nthe stack. If we simply pop the 'extraneous' + %% data we will break the stream definition and throw an error. So we look + %% to see if this appears to be this specific case. + 2 index type /marktype eq 2 index type /marktype eq or { + { + dup type /marktype eq { + exit + }{ pop + }if + }loop + }{ + { + 2 index type /integertype ne 2 index type /integertype ne or { + count 3 gt { + ( **** Warning: obj definition followed by multiple tokens, attempting to recover.\n) pdfformaterror + pop + } { + //null + ( **** Warning: ignoring obj followed by multiple tokens.\n) pdfformaterror + exit + } ifelse } { - //null - ( **** Warning: ignoring obj followed by multiple tokens.\n) pdfformaterror exit } ifelse - } { - exit - } ifelse - } loop + } loop - 3 1 roll - % Read the xref entry if we haven't yet done so. - % This is only needed for generation # checking. - 1 index resolved? { - pop - } if - checkgeneration { - % The only global objects we bother to save are - % (resource) dictionaries. - 1 index dup gcheck exch type /dicttype eq and { - PDFDEBUG { (%Local=>global: ) print dup //== exec } if - GlobalObjects 1 index 3 index put - IsGlobal 1 index 1 put + 3 1 roll + % Read the xref entry if we haven't yet done so. + % This is only needed for generation # checking. + 1 index resolved? { + pop } if - Objects exch 2 index put - } { - pop pop //null - } ifelse + checkgeneration { + % The only global objects we bother to save are + % (resource) dictionaries. + 1 index dup gcheck exch type /dicttype eq and { + PDFDEBUG { (%Local=>global: ) print dup //== exec } if + GlobalObjects 1 index 3 index put + IsGlobal 1 index 1 put + } if + Objects exch 2 index put + } { + pop pop //null + } ifelse + }ifelse } bind def % When resolving an object reference in an object stream, we stop at diff -Nru ghostscript-9.15+dfsg/Resource/Init/pdf_draw.ps ghostscript-9.16~dfsg~0/Resource/Init/pdf_draw.ps --- ghostscript-9.15+dfsg/Resource/Init/pdf_draw.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/pdf_draw.ps 2015-03-30 08:21:24.000000000 +0000 @@ -456,7 +456,15 @@ /gssmask { { dup /None eq 1 index //null eq or PDFusingtransparency not or { - pop //null exit + pop //null + SoftMask //null ne { + % get rid of the current SMask (Bug 695471) + false % colorspace not set + << /Subtype /None >> % Special type for this purpose + 0 0 0 0 % fake BBox + .begintransparencymaskgroup + } if + exit } if % Preprocess the SMask value into a parameter dictionary for % .begintransparencymaskgroup, with added /BBox and /Draw keys. @@ -485,7 +493,7 @@ resolvefnproc /TransferFunction exch 3 2 roll } ifelse } if - dup /G oget + dup /G oget dup /BBox oget oforce_array 1 index /Matrix knownoget { oforce_array .bbox_transform 4 array astore @@ -794,24 +802,24 @@ currentdict end /CIEBasedABC exch 2 array astore } if } if - 3 1 roll % Stack: /Indexed csp comp table + 3 1 roll % Stack: /Indexed csp comp table oforce dup type /stringtype ne { % The color lookup table is a stream. % Get its contents. Don't lose our place in PDFfile. % Stack: /Indexed basespace hival lookup - PDFfile fileposition 5 1 roll + PDFfile fileposition 5 1 roll dup /Filter oknown not { % For Bug691941.pdf and similar lossage dup /Length knownoget not { 0 } if } { - 0 + 0 } ifelse % Stack: filepos /Indexed basespace hival lookup Length 2 index 1 add % Stack: filepos /Indexed basespace hival lookup Length len - 4 index csncomp mul .max string + 4 index csncomp mul .max string % Stack: filepos /Indexed basespace hival lookup (...) - exch //true resolvestream - 1 index readstring not { + exch //true resolvestream + 1 index readstring not { % The string is padded with 0s ( **** Warning: Short look-up table in the Indexed color space was padded with 0's.\n) pdfformaterror @@ -819,7 +827,7 @@ pop % Stack: filepos /Indexed basespace hival (...) PDFfile 6 -1 roll setfileposition - } if + } if 4 array astore % Stack: [filepos /Indexed basespace hival (...)] % Replace the PDFColorSpace with the Indexed space if needed. @@ -876,7 +884,7 @@ } { //csnames 1 index known { //true - } { + } { ( **** Warning: Undefined space resource: /) exch .namestring concatstrings (\n) concatstrings pdfformaterror //false @@ -908,8 +916,8 @@ } { dup type /nametype eq { csresolve not { /DeviceRGB } if % Arbitrary - } { - csset exch pop + } { + csset exch pop } ifelse } ifelse } if @@ -948,7 +956,7 @@ % Save old values on opstack, set pdfemptycount to new value. pdfemptycount countdictstack mark - + /pdfemptycount count 3 sub def 5 3 roll % % Stack: ... mark @@ -957,9 +965,9 @@ exch //false resolvestream pdfopdict .pdfruncontext cleartomark - + //false - { countdictstack + { countdictstack 2 index le { exit } if currentdict /n known not or Q @@ -1160,9 +1168,9 @@ } { .buildshading } ifelse - .shfill - } stopped { - pop + .shfill + } stopped { + pop ( **** Warning: Dropping incorrect smooth shading object.\n) pdfformaterror } if @@ -1418,7 +1426,7 @@ dup dup length 1 sub % obj [...] [...] len-1 4 -1 roll put % [... obj] } { - pop + pop } ifelse } if } ifelse @@ -1657,6 +1665,7 @@ pop exch % <> [] [] loopcount <> [] [] loopcount << /Height Height + round cvi >> put % <> [] }{ % @@ -1665,12 +1674,14 @@ % <> [] loopcount [] <<>> /Height % <> [] loopcount [] <<>> /Height 5 index /Height get % <> [] loopcount [] <<>> /Height Height + round cvi put pop pop % <> [] }{ %% bogus entry, throw it away and create a new one pop exch % <> [] loopcount [] <> [] [] loopcount << /Height Height + round cvi >> put % <> [] } ifelse @@ -1685,12 +1696,14 @@ % <> <> /Height 2 index % <> <> /Height <> /Height get % <> <> /Height ImageHeight + round cvi put % <> }{ %% bogus entry, throw it away and create a new one pop exch % <> <> << /Height 3 index /Height get % <> << /Height Height + round cvi >> put % <> [] } ifelse @@ -1698,7 +1711,9 @@ dup % <> <> /DecodeParms <> <> /DecodeParms << /Height 3 index % <> <> /DecodeParms << /Height <> - /Height get>> % <> <> /DecodeParms << /Height ImageHeight>> + /Height get + round cvi + >> % <> <> /DecodeParms << /Height ImageHeight>> put % <> }ifelse }ifelse @@ -1717,7 +1732,7 @@ /DoImage { checkaltimage dup length 6 add dict % <> <<>> - 1 index /SMask knownoget { % <> <<>> <> + 1 index /SMask knownoget { % <> <<>> <> dup 3 index ne { % <> <<>> <> <> 1 index exch /SMask exch put } { @@ -1754,8 +1769,8 @@ } forall exch pop { ( **** Warning: Some elements of Mask array are out of range.\n) pdfformaterror - - ColorSpace dup type /arraytype eq { 0 oget } if /Indexed eq + + ColorSpace dup type /arraytype eq { 0 oget } if /Indexed eq BitsPerComponent 1 eq and { % AR9 treats Indexed 1 bpc images specially. Bug 692852. dup 0 oget @@ -1958,6 +1973,11 @@ ifelse } for } ifelse + currentdict /BBox known not { + (\n **** Warning: Required entry /BBox not present in Form.\n) + pdfformaterror + /BBox [0 1 0 1] + } if currentdict end { oforce } forall >> dup [ 2 index /Resources knownoget { oforce } { 0 dict } ifelse @@ -1965,16 +1985,19 @@ /.paintform cvx ] cvx /PaintProc exch put % Adjust pdfemptycount since we have an extra dictionary on the stack - pdfemptycount countdictstack 3 -1 roll + pdfemptycount countdictstack 3 -1 roll /pdfemptycount count 4 sub store - /q cvx /PDFexecform cvx 5 -2 roll 4 .execn + /q cvx /PDFexecform cvx 5 -2 roll + 4 .execn % Restore pdfemptycount 0 - { countdictstack + { countdictstack 2 index le { exit } if currentdict /n known not { 1 add } if + countdictstack Q - } loop + countdictstack eq {end} if + } loop 1 gt { ( **** Warning: Form stream has unbalanced q/Q operators \(too many q's\)\n) pdfformaterror @@ -2447,7 +2470,7 @@ } if } if } if - pop + pop } bdef /drawwidget { % drawwidget - @@ -2488,7 +2511,7 @@ % tell whether this is a Form or a set of sub-appearances % is by testing for the stream Length or File key. % If the stream lacks Length key, try File key. - dup /Length knownoget { type /integertype eq } { //false } ifelse + dup /Length knownoget { type /integertype eq } { //false } ifelse 1 index /File knownoget { type /filetype eq or } if { % If this is a form then simply use it //true @@ -2937,13 +2960,13 @@ /DA_Action_Dict << /Tf {exch dup /Helv eq {pop /Helvetica findfont exch scalefont setfont}{findfont exch scalefont setfont}ifelse} - /r {aload pop setrgbcolor} - /rg {aload pop setrgbcolor} - /RG {aload pop setrgbcolor} - /G {aload pop setgray} - /g {aload pop setgray} - /k {aload pop setcmykcolor} - /K {aload pop setcmykcolor} + /r {aload pop setrgbcolor} % Can't find this actually defined anywhere, but Acrobat seems to honour it :-( + /rg {setrgbcolor} + /RG {setrgbcolor} + /G {setgray} + /g {setgray} + /k {setcmykcolor} + /K {setcmykcolor} >> def dup /DA knownoget { length string /tempstr exch def diff -Nru ghostscript-9.15+dfsg/Resource/Init/pdf_font.ps ghostscript-9.16~dfsg~0/Resource/Init/pdf_font.ps --- ghostscript-9.15+dfsg/Resource/Init/pdf_font.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/pdf_font.ps 2015-03-30 08:21:24.000000000 +0000 @@ -765,7 +765,11 @@ % fonts with no properties are handled correctly. //.pdfdfndict begin .substitutefontname end % Stack: font-res fontname fontdesc substname|null - Fontmap 1 index known not { + Fontmap 1 index known + {//false} + { .buildnativefontmap pop NativeFontmap 1 index known not} ifelse + + { % No available good substitution, use the standard one. pop 1 index .substitutefont } if @@ -1724,7 +1728,8 @@ } if exch pop dup /CIDFont resourcestatus { - pop pop /CIDFont findresource exit + pop pop /CIDFont { findresource } stopped + {pop}{exit} ifelse } if QUIET not { (The substitute CID font ") print dup =string cvs print @@ -1905,8 +1910,16 @@ 3 index /FontDescriptor oget /FontName oget 1 index /FontSetInit /ProcSet findresource begin //true //false ReadData - { exch pop exit } forall - 7 1 roll + %% We need to be careful not to corrupt the stack if something went wrong. + %% Previously, if the dict was length 0 (an error occured) we would end up + %% unable to recover the stack in the calling procedure. + %% Bug #695819. + dup length 0 ne { + { exch pop exit } forall + 7 1 roll + }{ + /invalidfont signalerror + } ifelse closefile closefile pop PDFfile 3 -1 roll setfileposition pop pop diff -Nru ghostscript-9.15+dfsg/Resource/Init/pdf_main.ps ghostscript-9.16~dfsg~0/Resource/Init/pdf_main.ps --- ghostscript-9.15+dfsg/Resource/Init/pdf_main.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/pdf_main.ps 2015-03-30 08:21:24.000000000 +0000 @@ -254,7 +254,7 @@ } for % Indicate that the number of spot colors is unknown in case the next page % imaged is a PS file. - << /PageSpotColors -1 >> setpagedevice + currentpagedevice /PageSpotColors known { << /PageSpotColors -1 >> setpagedevice } if << /PDFScanRules //null >> setuserparams % restore scanning rules for PS } bind def @@ -702,7 +702,14 @@ % if hybrid-reference PDF, also fetch the entries % found in the XRef stream pointed by /XRefStm dup /XRefStm knownoget { - readpdf15xref pop + %% Bug #695883 the test file has an XRefStm which points beyond the end of the file. + %% We check that here and simply fall back to thje classic xref if this error occurs. + dup PDFfilelen lt{ + readpdf15xref pop + } { + ( **** Warning: This hybrid file's XRefStm points beyond the end of file.\n Ignoring error, this may cause some objects not to display.\n) pdfformaterror + pop + }ifelse } if } { readpdf15xref } % otherwise assume PDF 1.5 xref stream @@ -1183,32 +1190,38 @@ 3 2 roll } { - dup /S knownoget { + dup /S knownoget { + %% Because we process GoTo Destinations into absolute references in the PDF file + %% we need to resolve the /D or /Dest. However, we must *not* do this for + %% GoToR Destinations because (obviously) those are in a different file and + %% we cannot resolve them into absolute references. We don't need to anyway + %% because that file must already have a named destination. dup /GoTo eq { pop dup /D knownoget { exch pop exch dup length dict copy dup /Dest 4 -1 roll put } if - } - { + }{ dup /GoToR eq { - /Action exch - 4 2 roll - dup /NewWindow knownoget { - 2 index dup length dict copy dup /NewWindow 4 -1 roll put 3 1 roll exch pop - } if - dup /F knownoget { - 2 index dup length dict copy dup /F 4 -1 roll put 3 1 roll exch pop - } if - dup /D knownoget { - exch pop exch dup length dict copy dup /Dest 4 -1 roll put - } if + pop /A mark % <<..action dict..>> /A [ + 3 2 roll % /A [ <<..action dict..>> + { oforce } forall + .dicttomark + 3 2 roll }{ - /Named eq { - /N knownoget { % Assume /S /Named - namedactions exch .knownget { exec } if + dup /Launch eq { + pop /A mark % <<..action dict..>> /A [ + 3 2 roll % /A [ <<..action dict..>> + { oforce } forall + .dicttomark + 3 2 roll + }{ + /Named eq { + /N knownoget { % Assume /S /Named + namedactions exch .knownget { exec } if + } if } if - } if + } ifelse } ifelse } ifelse } if @@ -1549,7 +1562,8 @@ /File exch 3 -1 roll } if dup /Dest knownoget - { resolvedest + { + resolvedest dup type /dicttype eq { /D knownoget not { //null } if } if dup //null eq { pop } @@ -1560,7 +1574,7 @@ /Page eq { pop % the "false" flag dup pdf_cached_PDF2PS_matrix exch - dup /Rotate pget not { 0 } if 90 idiv exch + dup /Rotate pget not { 0 } if cvi 90 idiv exch pdfpagenumber /CumulativePageCount where {pop CumulativePageCount}{0}ifelse add //true % now we have a page# and a transformation matrix } if @@ -1629,6 +1643,11 @@ 3 2 roll } { dup /S knownoget { + %% Because we process GoTo Destinations into absolute references in the PDF file + %% we need to resolve the /D or /Dest. However, we must *not* do this for + %% GoToR Destinations because (obviously) those are in a different file and + %% we cannot resolve them into absolute references. We don't need to anyway + %% because that file must already have a named destination. dup /GoTo eq { pop dup /D knownoget { @@ -1636,31 +1655,33 @@ } if }{ dup /GoToR eq { - /Action exch - 4 2 roll - dup /NewWindow knownoget { - 2 index dup length dict copy dup /NewWindow 4 -1 roll put 3 1 roll exch pop - } if - dup /F knownoget { - 2 index dup length dict copy dup /F 4 -1 roll put 3 1 roll exch pop - } if - dup /D knownoget { - exch pop exch dup length dict copy dup /Dest 4 -1 roll put - } if + pop /A mark % <<..action dict..>> /A [ + 3 2 roll % /A [ <<..action dict..>> + { oforce } forall + .dicttomark + 3 2 roll }{ - /Named eq { - /N knownoget { - namedactions exch .knownget { - exec { - pop - ( **** Warning: Ignoring a named action pointing out of the document page range.\n) - pdfformaterror - } { - /Page exch 3 -1 roll - } ifelse + dup /Launch eq { + pop /A mark % <<..action dict..>> /A [ + 3 2 roll % /A [ <<..action dict..>> + { oforce } forall + .dicttomark + 3 2 roll + }{ + /Named eq { + /N knownoget { + namedactions exch .knownget { + exec { + pop + ( **** Warning: Ignoring a named action pointing out of the document page range.\n) + pdfformaterror + } { + /Page exch 3 -1 roll + } ifelse + } if } if } if - } if + }ifelse } ifelse } ifelse } if @@ -1764,7 +1785,7 @@ % Adjust PageSize and .HWMargins for the page portrait/landscape orientation 2 copy gt % PageSize_is_landscape 7 index aload pop 3 -1 roll sub 3 1 roll exch sub exch - 10 index /Rotate pget not { 0 } if 90 idiv 1 and 0 ne { exch } if + 10 index /Rotate pget not { 0 } if cvi 90 idiv 1 and 0 ne { exch } if gt % Box_is_landscape ne { 1 index 0 translate 90 rotate % add in a rotation @@ -1786,7 +1807,7 @@ 2 index sub exch 3 index sub exch 4 2 roll pop pop % stack: savedCTM [Box] XImageable YImageable 2 index aload pop 2 index sub exch 3 index sub exch 4 2 roll pop pop - 5 index /Rotate pget not { 0 } if 90 idiv 1 and 0 ne { exch } if + 5 index /Rotate pget not { 0 } if 90 cvi idiv 1 and 0 ne { exch } if % stack: savedCTM [Box] XImageable YImageable XBox YBox 4 copy 3 -1 roll exch div 3 1 roll div .min @@ -1818,7 +1839,7 @@ { 180 rotate neg exch neg exch translate } { 90 rotate neg 0 exch translate pop } } - 5 index /Rotate pget not { 0 } if + 5 index /Rotate pget not { 0 } if cvi PDFDEBUG { dup 0 ne { (Rotating by ) print dup =print ( degrees.) = flush } if } if 90 idiv 3 and get exec % Now translate to the origin given in the Crop|Media Box @@ -1861,13 +1882,14 @@ /UseCIEColor //true def } if - /Orientation 0 def + % Only lock in Orientation if we need to for pdfmarks + .writepdfmarks { /Orientation 0 def } if currentpagedevice % Stack: pdfpagedict currentpagedevicedict 1 index get_any_box % Stack: pdfpagedict currentpagedevicedict /BoxName [box] oforce_elems normrect_elems fix_empty_rect_elems boxrect 4 2 roll pop pop - 3 index /Rotate pget not { 0 } if 90 idiv 1 and 0 ne { exch } if + 3 index /Rotate pget not { 0 } if cvi 90 idiv 1 and 0 ne { exch } if % stack: pdfpagedict currentpagedevicedict boxwidth boxheight //systemdict /PDFFitPage known { % Preserve page size, @@ -1889,7 +1911,7 @@ % Determine the number of spot colors used on the page. Note: This searches % the pages resources. It may be high if a spot color is in a resource but % is not actually used on the page. - /PageSpotColors 2 index countspotcolors def + currentpagedevice /PageSpotColors known { /PageSpotColors 2 index countspotcolors def } if % Let the device know if we will be using PDF 1.4 transparency. % The clist logic may need to adjust the size of bands. @@ -2070,7 +2092,13 @@ gsave % preserve gstate for Annotations later /Contents knownoget not { 0 array } if dup type /arraytype ne { 1 array astore } if { - oforce //false resolvestream pdfopdict .pdfrun + oforce dup type /dicttype eq { + //false resolvestream pdfopdict .pdfrun + } { + (**** Error: The Page /Contents array contains an element which is not a stream\n This page will not display correctly\n\n) + pdfformaterror + pop exit + }ifelse } forall % check for extra garbage on the ostack and clean it up count pdfemptycount sub dup 0 ne { @@ -2086,7 +2114,7 @@ /Annots knownoget { { oforce dup //null ne { - drawannot + mark exch {drawannot} stopped {(Error: Ignoring invalid annotation\n) pdfformaterror} if cleartomark } { pop } ifelse @@ -2569,7 +2597,11 @@ 4 index /Info knownoget not { () } if 5 index /DestOutputProfile knownoget not { () } if ] - [ /OutputIntent 3 2 roll .pdfputparams pop pop + [ /OutputIntent 3 2 roll /.pdfputparams where + { pop .pdfputparams } + { currentdevice //null //false counttomark 1 add 3 roll .putdeviceparamsonly } + ifelse + pop pop pop % done with this OutputIntent dictionary } forall } { @@ -2579,7 +2611,11 @@ } ifelse } if % OutputIntents known % tell device there are no more OutputIntents - [ /OutputIntent [ ] .pdfputparams pop pop + [ /OutputIntent [ ] /.pdfputparams where + { pop .pdfputparams } + { currentdevice //null //false counttomark 1 add 3 roll .putdeviceparamsonly } + ifelse + pop pop } if } bind def diff -Nru ghostscript-9.15+dfsg/Resource/Init/pdf_ops.ps ghostscript-9.16~dfsg~0/Resource/Init/pdf_ops.ps --- ghostscript-9.15+dfsg/Resource/Init/pdf_ops.ps 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/Resource/Init/pdf_ops.ps 2015-03-30 08:21:24.000000000 +0000 @@ -97,7 +97,20 @@ } bdef /q { - gsave //nodict begin + %% Special case, if we get a 'q' while accumulating clip/eoclip then + %% we need to make sure we close the current dictionary, and reopen it after + %% performing the gsave, so that the redefinition of 'n' in particular is correct + currentdict /n known { + currentdict %% copy the dicitonary for the accumulation + end %% and close it (NB *before* the gsave!) + gsave //nodict begin %% execute gsave and start 'nodict' just like normal + begin %% reopen the accumulation dictionary. + %% when we execute 'n' this will close and we'll go back + %% to the regular 'nodict' opened above. This could cause some + %% odd interactions with 'Q' for unbalanced files..... + } { + gsave //nodict begin + } ifelse PDFusingtransparency { .pushextendedgstate } if } bdef @@ -597,6 +610,7 @@ /TextFont //null def /FontMatrixNonHV //false def /Show { showfirst } def + /TextFillStateNeeded //true def } bdef % Contrary to the statement in the PDF manual, BT and ET *can* be nested, @@ -979,6 +993,11 @@ } if } bind def +% conditionally set fillstate to avoid multiple operations during text operators +/settextfillstate { + TextFillStateNeeded { setfillstate //false /TextFillStateNeeded gput } if +} bind def + /TextTransSetup { % true TextTransSetup - % if current path is valid % false TextTransSetup - % no path, use clip box % NB: if 'show' is used, then we use the clippath, but a smaller bbox is preferred @@ -1016,7 +1035,7 @@ currentfont /FontType get 3 eq TextRenderingMode 3 eq not and or { - { setfillstate //false TextTransSetup show TextTransTeardown } + { settextfillstate //false TextTransSetup show TextTransTeardown } } { TextRenderingMode 3 eq { % Some PDF files execute 'tm' with a singular matrix, @@ -1035,7 +1054,7 @@ setmatrix currentpoint % don't worry about transparency for invisible text - 4 index setfillstate show % Tr was set to graphic state. + 4 index settextfillstate show % Tr was set to graphic state. moveto setmatrix % now set the currentpoint using the original matrix @@ -1072,7 +1091,7 @@ % preserve current line width around possible stroke setup currentlinewidth exch setstrokeforTrpreservation - setfillstate //false TextTransSetup + settextfillstate //false TextTransSetup [ TextSpacing WordSpacing 3 index { % str [... weach wword c undef|ythis xthis|undef exch % will be removed, unless FontMatrix.xx/yy == 0 (FontMatrixNonHV already true) @@ -1092,7 +1111,7 @@ WordSpacing 0 eq { { { setstrokeforTrpreservation - setfillstate //false TextTransSetup TextSpacing 0 Vexch 3 -1 roll ashow TextTransTeardown + settextfillstate //false TextTransSetup TextSpacing 0 Vexch 3 -1 roll ashow TextTransTeardown } currentlinewidth { setlinewidth } @@ -1102,7 +1121,7 @@ TextSpacing 0 eq { { % preserve current line width around possible stroke setup { setstrokeforTrpreservation - setfillstate //false TextTransSetup WordSpacing 0 Vexch 32 4 -1 roll .pdfwidthshow + settextfillstate //false TextTransSetup WordSpacing 0 Vexch 32 4 -1 roll .pdfwidthshow TextTransTeardown } currentlinewidth @@ -1112,7 +1131,7 @@ } { { % preserve current line width around possible stroke setup { setstrokeforTrpreservation - setfillstate //false TextTransSetup WordSpacing 0 Vexch 32 + settextfillstate //false TextTransSetup WordSpacing 0 Vexch 32 TextSpacing 0 Vexch 6 -1 roll .pdfawidthshow TextTransTeardown } currentlinewidth @@ -1154,7 +1173,7 @@ % correctly. gsave TextRenderingMode 4 sub .settextrenderingmode setstrokeforTrpreservation - setstrokestate setfillstate //false TextTransSetup dup show grestore TextTransTeardown } if + setstrokestate settextfillstate //false TextTransSetup dup show grestore TextTransTeardown } if //false charpath 3 copy 32 eq { add } { exch pop } ifelse % Stack: str wthis xorig yorig wword wchar ccode wextra @@ -1190,7 +1209,10 @@ /showfirst { setshowstate Show } def /Tj { - { 0 0 moveto Show settextposition } + { + //true /TextFillStateNeeded gput + 0 0 moveto Show settextposition + } OFFlevels length 0 eq { exec } { @@ -1198,6 +1220,7 @@ exec get-gs-attrs grestore set-gs-attrs } ifelse + //true /TextFillStateNeeded gput } bdef /' { T* Tj } bdef /" { exch Tc exch Tw T* Tj } bdef @@ -1210,6 +1233,7 @@ 0 Vexch rmoveto } ifelse } forall settextposition + //true /TextFillStateNeeded gput } OFFlevels length 0 eq { exec @@ -1218,10 +1242,14 @@ exec get-gs-attrs grestore set-gs-attrs } ifelse + //true /TextFillStateNeeded gput } bdef % NB: We don't need clippath when filling or stroking -/tf { setfillstate //true TextTransSetup currentpoint fill TextTransTeardown moveto} bdef +/tf { + //true /TextFillStateNeeded gput + settextfillstate //true TextTransSetup currentpoint fill TextTransTeardown moveto +} bdef /tn { currentpoint newpath moveto } bdef % Obsolete, never used. % For stroking characters, temporarily restore the graphics CTM so that % the line width will be transformed properly. @@ -1230,13 +1258,14 @@ { currentfont /FontType get 3 eq { - setfillstate //true TextTransSetup currentpoint fill TextTransTeardown moveto + settextfillstate //true TextTransSetup currentpoint fill TextTransTeardown moveto } { setstrokestate //true TextTransSetup currentpoint //Tmatrix currentmatrix TextSaveMatrix setmatrix .swapcolors stroke TextTransTeardown .swapcolors setmatrix moveto } ifelse + //true /TextFillStateNeeded gput } bdef % Handle transparency the same as /B operator @@ -1256,6 +1285,7 @@ } { gsave tf grestore tS } ifelse + //true /TextFillStateNeeded gput } bdef % This does the wrong thing if there have been multiple text operations diff -Nru ghostscript-9.15+dfsg/toolbin/localcluster/clusterpush.pl ghostscript-9.16~dfsg~0/toolbin/localcluster/clusterpush.pl --- ghostscript-9.15+dfsg/toolbin/localcluster/clusterpush.pl 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/toolbin/localcluster/clusterpush.pl 2015-03-30 08:21:24.000000000 +0000 @@ -7,7 +7,7 @@ my $verbose=0; -# bmpcmp usage: [gs] [pcl] [xps] [gs] [mupdf] [mujstest] [bmpcmp] [lowres] [32] [pdfwrite] [$user] | abort +# bmpcmp usage: [gs] [pcl] [xps] [mupdf] [mujstest] [bmpcmp] [lowres] [highres] [32] [pdfwrite] [ps2write] [xpswrite] [relaxtimeout] [$user] | abort @@ -31,6 +31,8 @@ my $w32=""; my $nr=""; my $pdfwrite=""; +my $ps2write=""; +my $xpswrite=""; my $singlePagePDF=""; my $relaxTimeout=""; my $t1; @@ -46,7 +48,7 @@ $w32="32"; } elsif ($t1 eq "nr" || $t1 eq "nonredundnat") { $nr="nonredundant"; - } elsif ($t1 eq "pdfwrite" || $t1 eq "ps2write") { + } elsif ($t1 eq "pdfwrite" || $t1 eq "ps2write" || $t1 eq "xpswrite") { $pdfwrite="pdfwrite"; } elsif ($t1 eq "timeout" || $t1 eq "relaxtimeout") { $relaxTimeout="relaxTimeout"; @@ -105,7 +107,7 @@ chomp $directory; $directory =~ s|.+/||; -if ($directory ne 'gs' && $directory ne 'ghostpdl' && $directory ne 'mupdf') { +if ($directory ne 'gs' && $directory ne 'ghostpdl' && $directory ne 'mupdf' && $directory ne 'ghostpdl.git' && $directory ne 'mupdf.git') { $directory=""; if (-d "base" && -d "Resource") { $directory='gs'; @@ -113,7 +115,7 @@ if (-d "pxl" && -d "pcl") { $directory='ghostpdl'; } - if (-d "fitz" && -d "draw" && -d "pdf") { + if (-d "source/fitz" && -d "source/draw" && -d "source/pdf") { $directory='mupdf'; } } diff -Nru ghostscript-9.15+dfsg/toolbin/localcluster/clusterpush.txt ghostscript-9.16~dfsg~0/toolbin/localcluster/clusterpush.txt --- ghostscript-9.15+dfsg/toolbin/localcluster/clusterpush.txt 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/toolbin/localcluster/clusterpush.txt 2015-03-30 08:21:24.000000000 +0000 @@ -4,11 +4,12 @@ Usage: - clusterpush.pl [prduct] ['bmpcmp'] ['lowres'|'hires'] ['32'] ['relaxtimeout'] [user] + clusterpush.pl [product] ['bmpcmp'] ['lowres'|'hires'] ['32'] ['relaxtimeout'] [user] -Where product gs, pcl, xps, and/or ls ('ls' standing for language switch). -If you do not specify a produt all products will be tested. +Where product is one or more of gs, pcl, xps or mupdf or mujstest. +If you do not specify a product the product(s) tested will be cased on +what directory you are 'cd'ed to when the clusterpush.pl script is run. bmpcmp indicates that a bitmap comparison of your output to that of the last svn commit should be performed. diff -Nru ghostscript-9.15+dfsg/toolbin/tests/fuzzy.c ghostscript-9.16~dfsg~0/toolbin/tests/fuzzy.c --- ghostscript-9.15+dfsg/toolbin/tests/fuzzy.c 2014-09-22 10:17:33.000000000 +0000 +++ ghostscript-9.16~dfsg~0/toolbin/tests/fuzzy.c 2015-03-30 08:21:24.000000000 +0000 @@ -766,7 +766,7 @@ out_buf[x * 3 + 2] = abs(rowmid1[x * 3 + 2]- rowmid2[x * 3 + 2]); } if (fparams->report_coordinates && - (abs(x - x0) > 1 && y == y0 || y - y0 > 1)) + ((abs(x - x0) > 1 && y == y0) || y - y0 > 1)) { /* fixme : a contiguity test wanted. */ x0 = x; y0 = y;