1#    Copyright (C) 1991-2002 artofcode LLC. All rights reserved.
2#
3# This program is free software; you can redistribute it and/or modify it
4# under the terms of the GNU General Public License as published by the
5# Free Software Foundation; either version 2 of the License, or (at your
6# option) any later version.
7#
8# This program is distributed in the hope that it will be useful, but
9# WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
11# Public License for more details.
12#
13# You should have received a copy of the GNU General Public License along
14# with this program; if not, write to the Free Software Foundation, Inc.,
15# 59 Temple Place, Suite 330, Boston, MA, 02111-1307.
16
17
18# $Id: msvc32.mak,v 1.20.2.9.2.2 2003/03/11 11:59:10 ghostgum Exp $
19# makefile for 32-bit Microsoft Visual C++, Windows NT or Windows 95 platform.
20#
21# All configurable options are surrounded by !ifndef/!endif to allow
22# preconfiguration from within another makefile.
23#
24# Optimization /O2 seems OK with MSVC++ 4.1, but not with 5.0.
25# Created 1997-01-24 by Russell Lang from MSVC++ 2.0 makefile.
26# Enhanced 97-05-15 by JD
27# Common code factored out 1997-05-22 by L. Peter Deutsch.
28# Made pre-configurable by JD 6/4/98
29# Revised to use subdirectories 1998-11-13 by lpd.
30
31# Note: If you are planning to make self-extracting executables,
32# see winint.mak to find out about third-party software you will need.
33
34# ------------------------------- Options ------------------------------- #
35
36###### This section is the only part of the file you should need to edit.
37
38# ------ Generic options ------ #
39
40# Define the directory for the final executable, and the
41# source, generated intermediate file, and object directories
42# for the graphics library (GL) and the PostScript/PDF interpreter (PS).
43
44!ifndef BINDIR
45BINDIR=.\bin
46!endif
47!ifndef GLSRCDIR
48GLSRCDIR=.\src
49!endif
50!ifndef GLGENDIR
51GLGENDIR=.\obj
52!endif
53!ifndef GLOBJDIR
54GLOBJDIR=.\obj
55!endif
56!ifndef PSSRCDIR
57PSSRCDIR=.\src
58!endif
59!ifndef PSLIBDIR
60PSLIBDIR=.\lib
61!endif
62!ifndef PSGENDIR
63PSGENDIR=.\obj
64!endif
65!ifndef PSOBJDIR
66PSOBJDIR=.\obj
67!endif
68
69# Define the root directory for Ghostscript installation.
70
71!ifndef AROOTDIR
72AROOTDIR=c:/gs
73!endif
74!ifndef GSROOTDIR
75GSROOTDIR=$(AROOTDIR)/gs$(GS_DOT_VERSION)
76!endif
77
78# Define the directory that will hold documentation at runtime.
79
80!ifndef GS_DOCDIR
81GS_DOCDIR=$(GSROOTDIR)/doc
82!endif
83
84# Define the default directory/ies for the runtime initialization and
85# font files.  Separate multiple directories with ';'.
86# Use / to indicate directories, not \.
87# MSVC will not allow \'s here because it sees '\;' CPP-style as an
88# illegal escape.
89
90!ifndef GS_LIB_DEFAULT
91GS_LIB_DEFAULT=$(GSROOTDIR)/lib;$(AROOTDIR)/fonts
92!endif
93
94# Define whether or not searching for initialization files should always
95# look in the current directory first.  This leads to well-known security
96# and confusion problems, but users insist on it.
97# NOTE: this also affects searching for files named on the command line:
98# see the "File searching" section of Use.htm for full details.
99# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended.
100
101!ifndef SEARCH_HERE_FIRST
102SEARCH_HERE_FIRST=1
103!endif
104
105# Define the name of the interpreter initialization file.
106# (There is no reason to change this.)
107
108!ifndef GS_INIT
109GS_INIT=gs_init.ps
110!endif
111
112# Choose generic configuration options.
113
114# Setting DEBUG=1 includes debugging features (-Z switch) in the code.
115# Code runs substantially slower even if no debugging switches are set,
116# and is also substantially larger.
117
118!ifndef DEBUG
119DEBUG=0
120!endif
121
122# Setting TDEBUG=1 includes symbol table information for the debugger,
123# and also enables stack checking.  Code is substantially slower and larger.
124
125# NOTE: The MSVC++ 5.0 compiler produces incorrect output code with TDEBUG=0.
126# Leave TDEBUG set to 1.
127
128!ifndef TDEBUG
129TDEBUG=1
130!endif
131
132# Setting NOPRIVATE=1 makes private (static) procedures and variables public,
133# so they are visible to the debugger and profiler.
134# No execution time or space penalty, just larger .OBJ and .EXE files.
135
136!ifndef NOPRIVATE
137NOPRIVATE=0
138!endif
139
140# Define the name of the executable file.
141
142!ifndef GS
143GS=gswin32
144!endif
145!ifndef GSCONSOLE
146GSCONSOLE=gswin32c
147!endif
148!ifndef GSDLL
149GSDLL=gsdll32
150!endif
151
152!ifndef BUILD_TIME_GS
153# Define the name of a pre-built executable that can be invoked at build
154# time.  Currently, this is only needed for compiled fonts.  The usual
155# alternatives are:
156#   - the standard name of Ghostscript on your system (typically `gs'):
157BUILD_TIME_GS=gswin32c
158#   - the name of the executable you are building now.  If you choose this
159# option, then you must build the executable first without compiled fonts,
160# and then again with compiled fonts.
161#BUILD_TIME_GS=$(BINDIR)\$(GS) -I$(PSLIBDIR)
162!endif
163
164# To build two small executables and a large DLL use MAKEDLL=1
165# To build two large executables use MAKEDLL=0
166
167!ifndef MAKEDLL
168MAKEDLL=1
169!endif
170
171# Define the directory where the IJG JPEG library sources are stored,
172# and the major version of the library that is stored there.
173# You may need to change this if the IJG library version changes.
174# See jpeg.mak for more information.
175
176!ifndef JSRCDIR
177JSRCDIR=jpeg
178JVERSION=6
179!endif
180
181# Define the directory where the PNG library sources are stored,
182# and the version of the library that is stored there.
183# You may need to change this if the libpng version changes.
184# See libpng.mak for more information.
185
186!ifndef PSRCDIR
187PSRCDIR=libpng
188PVERSION=10205
189!endif
190
191# Define the directory where the zlib sources are stored.
192# See zlib.mak for more information.
193
194!ifndef ZSRCDIR
195ZSRCDIR=zlib
196!endif
197
198# Define the directory where the icclib source are stored.
199# See icclib.mak for more information
200
201!ifndef ICCSRCDIR
202ICCSRCDIR=icclib
203!endif
204
205# Define the directory where the ijs source is stored,
206# and the process forking method to use for the server.
207# See ijs.mak for more information.
208
209!ifndef IJSSRCDIR
210IJSSRCDIR=ijs
211IJSEXECTYPE=win
212!endif
213
214# Define any other compilation flags.
215
216!ifndef CFLAGS
217CFLAGS=
218!endif
219
220# Do not edit the next group of lines.
221
222#!include $(COMMONDIR)\msvcdefs.mak
223#!include $(COMMONDIR)\pcdefs.mak
224#!include $(COMMONDIR)\generic.mak
225!include $(GLSRCDIR)\version.mak
226# The following is a hack to get around the special treatment of \ at
227# the end of a line.
228NUL=
229DD=$(GLGENDIR)\$(NUL)
230GLD=$(GLGENDIR)\$(NUL)
231PSD=$(PSGENDIR)\$(NUL)
232
233# ------ Platform-specific options ------ #
234
235# Define which major version of MSVC is being used
236# (currently, 4, 5, and 6 are supported).
237
238!ifndef MSVC_VERSION
239MSVC_VERSION=6
240!endif
241
242# Define the drive, directory, and compiler name for the Microsoft C files.
243# COMPDIR contains the compiler and linker (normally \msdev\bin).
244# MSINCDIR contains the include files (normally \msdev\include).
245# LIBDIR contains the library files (normally \msdev\lib).
246# COMP is the full C compiler path name (normally \msdev\bin\cl).
247# COMPCPP is the full C++ compiler path name (normally \msdev\bin\cl).
248# COMPAUX is the compiler name for DOS utilities (normally \msdev\bin\cl).
249# RCOMP is the resource compiler name (normallly \msdev\bin\rc).
250# LINK is the full linker path name (normally \msdev\bin\link).
251# Note that when MSINCDIR and LIBDIR are used, they always get a '\' appended,
252#   so if you want to use the current directory, use an explicit '.'.
253
254!if $(MSVC_VERSION) == 4
255! ifndef DEVSTUDIO
256DEVSTUDIO=c:\msdev
257! endif
258COMPBASE=$(DEVSTUDIO)
259SHAREDBASE=$(DEVSTUDIO)
260!endif
261
262!if $(MSVC_VERSION) == 5
263! ifndef DEVSTUDIO
264DEVSTUDIO=C:\Program Files\Devstudio
265! endif
266!if "$(DEVSTUDIO)"==""
267COMPBASE=
268SHAREDBASE=
269!else
270COMPBASE=$(DEVSTUDIO)\VC
271SHAREDBASE=$(DEVSTUDIO)\SharedIDE
272!endif
273!endif
274
275!if $(MSVC_VERSION) == 6
276! ifndef DEVSTUDIO
277DEVSTUDIO=C:\Program Files\Microsoft Visual Studio
278! endif
279!if "$(DEVSTUDIO)"==""
280COMPBASE=
281SHAREDBASE=
282!else
283COMPBASE=$(DEVSTUDIO)\VC98
284SHAREDBASE=$(DEVSTUDIO)\Common\MSDev98
285!endif
286!endif
287
288!if $(MSVC_VERSION) == 7
289! ifndef DEVSTUDIO
290DEVSTUDIO=C:\Program Files\Microsoft Visual Studio .NET
291! endif
292!if "$(DEVSTUDIO)"==""
293COMPBASE=
294SHAREDBASE=
295!else
296COMPBASE=$(DEVSTUDIO)\Vc7
297SHAREDBASE=$(DEVSTUDIO)\Vc7\
298!endif
299!endif
300
301# Some environments don't want to specify the path names for the tools at all.
302# Typical definitions for such an environment would be:
303#   MSINCDIR= LIBDIR= COMP=cl COMPAUX=cl RCOMP=rc LINK=link
304# COMPDIR, LINKDIR, and RCDIR are irrelevant, since they are only used to
305# define COMP, LINK, and RCOMP respectively, but we allow them to be
306# overridden anyway for completeness.
307!ifndef COMPDIR
308!if "$(COMPBASE)"==""
309COMPDIR=
310!else
311COMPDIR=$(COMPBASE)\bin
312!endif
313!endif
314
315!ifndef LINKDIR
316!if "$(COMPBASE)"==""
317LINKDIR=
318!else
319LINKDIR=$(COMPBASE)\bin
320!endif
321!endif
322
323!ifndef RCDIR
324!if "$(SHAREDBASE)"==""
325RCDIR=
326!else
327RCDIR=$(SHAREDBASE)\bin
328!endif
329!endif
330
331!ifndef MSINCDIR
332!if "$(COMPBASE)"==""
333MSINCDIR=
334!else
335MSINCDIR=$(COMPBASE)\include
336!endif
337!endif
338
339!ifndef LIBDIR
340!if "$(COMPBASE)"==""
341LIBDIR=
342!else
343LIBDIR=$(COMPBASE)\lib
344!endif
345!endif
346
347!ifndef COMP
348!if "$(COMPDIR)"==""
349COMP=cl
350!else
351COMP="$(COMPDIR)\cl"
352!endif
353!endif
354!ifndef COMPCPP
355COMPCPP=$(COMP)
356!endif
357!ifndef COMPAUX
358COMPAUX=$(COMP)
359!endif
360
361!ifndef RCOMP
362!if "$(RCDIR)"==""
363RCOMP=rc
364!else
365RCOMP="$(RCDIR)\rc"
366!endif
367!endif
368
369!ifndef LINK
370!if "$(LINKDIR)"==""
371LINK=link
372!else
373LINK="$(LINKDIR)\link"
374!endif
375!endif
376
377# nmake does not have a form of .BEFORE or .FIRST which can be used
378# to specify actions before anything else is done.  If LIB and INCLUDE
379# are not defined then we want to define them before we link or
380# compile.  Here is a kludge which allows us to to do what we want.
381# nmake does evaluate preprocessor directives when they are encountered.
382# So the desired set statements are put into dummy preprocessor
383# directives.
384!ifndef INCLUDE
385!if "$(MSINCDIR)"!=""
386!if [set INCLUDE=$(MSINCDIR)]==0
387!endif
388!endif
389!endif
390!ifndef LIB
391!if "$(LIBDIR)"!=""
392!if [set LIB=$(LIBDIR)]==0
393!endif
394!endif
395!endif
396
397# Define the processor architecture. (i386, ppc, alpha)
398
399!ifndef CPU_FAMILY
400CPU_FAMILY=i386
401#CPU_FAMILY=ppc
402#CPU_FAMILY=alpha  # not supported yet - we need someone to tweak
403!endif
404
405# Define the processor (CPU) type. Allowable values depend on the family:
406#   i386: 386, 486, 586
407#   ppc: 601, 604, 620
408#   alpha: not currently used.
409
410!ifndef CPU_TYPE
411CPU_TYPE=486
412#CPU_TYPE=601
413!endif
414
415!if "$(CPU_FAMILY)"=="i386"
416
417# Intel(-compatible) processors are the only ones for which the CPU type
418# doesn't indicate whether a math coprocessor is present.
419# For Intel processors only, define the math coprocessor (FPU) type.
420# Options are -1 (optimize for no FPU), 0 (optimize for FPU present,
421# but do not require a FPU), 87, 287, or 387.
422# If you have a 486 or Pentium CPU, you should normally set FPU_TYPE to 387,
423# since most of these CPUs include the equivalent of an 80387 on-chip;
424# however, the 486SX and the Cyrix 486SLC do not have an on-chip FPU, so if
425# you have one of these CPUs and no external FPU, set FPU_TYPE to -1 or 0.
426# An xx87 option means that the executable will run only if a FPU
427# of that type (or higher) is available: this is NOT currently checked
428# at runtime.
429
430! ifndef FPU_TYPE
431FPU_TYPE=387
432! endif
433
434!endif
435
436# Define the .dev module that implements thread and synchronization
437# primitives for this platform.  Don't change this unless you really know
438# what you're doing.
439
440!ifndef SYNC
441SYNC=winsync
442!endif
443
444# ------ Devices and features ------ #
445
446# Choose the language feature(s) to include.  See gs.mak for details.
447
448!ifndef FEATURE_DEVS
449FEATURE_DEVS=$(PSD)psl3.dev $(PSD)pdf.dev $(PSD)dpsnext.dev $(PSD)ttfont.dev $(PSD)epsf.dev $(PSD)mshandle.dev $(PSD)msprinter.dev $(PSD)mspoll.dev $(GLD)pipe.dev
450!endif
451
452# Choose whether to compile the .ps initialization files into the executable.
453# See gs.mak for details.
454
455!ifndef COMPILE_INITS
456COMPILE_INITS=0
457!endif
458
459# Choose whether to store band lists on files or in memory.
460# The choices are 'file' or 'memory'.
461
462!ifndef BAND_LIST_STORAGE
463BAND_LIST_STORAGE=file
464!endif
465
466# Choose which compression method to use when storing band lists in memory.
467# The choices are 'lzw' or 'zlib'.  lzw is not recommended, because the
468# LZW-compatible code in Ghostscript doesn't actually compress its input.
469
470!ifndef BAND_LIST_COMPRESSOR
471BAND_LIST_COMPRESSOR=zlib
472!endif
473
474# Choose the implementation of file I/O: 'stdio', 'fd', or 'both'.
475# See gs.mak and sfxfd.c for more details.
476
477!ifndef FILE_IMPLEMENTATION
478FILE_IMPLEMENTATION=stdio
479!endif
480
481# Choose the implementation of stdio: '' for file I/O and 'c' for callouts
482# See gs.mak and ziodevs.c/ziodevsc.c for more details.
483
484!ifndef STDIO_IMPLEMENTATION
485STDIO_IMPLEMENTATION=c
486!endif
487
488# Choose the device(s) to include.  See devs.mak for details,
489# devs.mak and contrib.mak for the list of available devices.
490
491!ifndef DEVICE_DEVS
492DEVICE_DEVS=$(DD)display.dev $(DD)mswindll.dev $(DD)mswinprn.dev $(DD)mswinpr2.dev
493DEVICE_DEVS2=$(DD)epson.dev $(DD)eps9high.dev $(DD)eps9mid.dev $(DD)epsonc.dev $(DD)ibmpro.dev
494DEVICE_DEVS3=$(DD)deskjet.dev $(DD)djet500.dev $(DD)laserjet.dev $(DD)ljetplus.dev $(DD)ljet2p.dev
495DEVICE_DEVS4=$(DD)cdeskjet.dev $(DD)cdjcolor.dev $(DD)cdjmono.dev $(DD)cdj550.dev
496DEVICE_DEVS5=$(DD)uniprint.dev $(DD)ijs.dev $(DD)djet500c.dev $(DD)declj250.dev $(DD)lj250.dev
497DEVICE_DEVS6=$(DD)st800.dev $(DD)stcolor.dev $(DD)bj10e.dev $(DD)bj200.dev
498DEVICE_DEVS7=$(DD)t4693d2.dev $(DD)t4693d4.dev $(DD)t4693d8.dev $(DD)tek4696.dev
499DEVICE_DEVS8=$(DD)pcxmono.dev $(DD)pcxgray.dev $(DD)pcx16.dev $(DD)pcx256.dev $(DD)pcx24b.dev $(DD)pcxcmyk.dev
500DEVICE_DEVS9=$(DD)pbm.dev $(DD)pbmraw.dev $(DD)pgm.dev $(DD)pgmraw.dev $(DD)pgnm.dev $(DD)pgnmraw.dev
501DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev
502DEVICE_DEVS11=$(DD)bmpmono.dev $(DD)bmpgray.dev $(DD)bmp16.dev $(DD)bmp256.dev $(DD)bmp16m.dev $(DD)tiff12nc.dev $(DD)tiff24nc.dev
503DEVICE_DEVS12=$(DD)psmono.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev
504DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev
505DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev
506DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
507DEVICE_DEVS16=$(DD)bbox.dev
508# Overflow for DEVS3,4,5,6,9
509DEVICE_DEVS17=$(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev
510DEVICE_DEVS18=$(DD)pj.dev $(DD)pjxl.dev $(DD)pjxl300.dev $(DD)jetp3852.dev $(DD)r4081.dev
511DEVICE_DEVS19=$(DD)lbp8.dev $(DD)m8510.dev $(DD)necp6.dev $(DD)bjc600.dev $(DD)bjc800.dev
512DEVICE_DEVS20=$(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev
513!endif
514
515# ---------------------------- End of options ---------------------------- #
516
517# Derive values for FPU_TYPE for non-Intel processors.
518
519!if "$(CPU_FAMILY)"=="ppc"
520! if $(CPU_TYPE)>601
521FPU_TYPE=2
522! else
523FPU_TYPE=1
524! endif
525!endif
526
527!if "$(CPU_FAMILY)"=="alpha"
528# *** alpha *** This needs fixing
529FPU_TYPE=1
530!endif
531
532# Define the name of the makefile -- used in dependencies.
533
534MAKEFILE=$(GLSRCDIR)\msvc32.mak
535TOP_MAKEFILES=$(MAKEFILE) $(GLSRCDIR)\msvccmd.mak $(GLSRCDIR)\msvctail.mak $(GLSRCDIR)\winlib.mak $(GLSRCDIR)\winint.mak
536
537# Define the files to be removed by `make clean'.
538# nmake expands macros when encountered, not when used,
539# so this must precede the !include statements.
540
541BEGINFILES2=$(GLGENDIR)\lib32.rsp\
542 $(GLOBJDIR)\*.exp $(GLOBJDIR)\*.ilk $(GLOBJDIR)\*.pdb $(GLOBJDIR)\*.lib\
543 $(BINDIR)\*.exp $(BINDIR)\*.ilk $(BINDIR)\*.pdb $(BINDIR)\*.lib obj.pdb
544
545!include $(GLSRCDIR)\msvccmd.mak
546!include $(GLSRCDIR)\winlib.mak
547!include $(GLSRCDIR)\msvctail.mak
548!include $(GLSRCDIR)\winint.mak
549
550# ----------------------------- Main program ------------------------------ #
551
552GSCONSOLE_XE=$(BINDIR)\$(GSCONSOLE).exe
553GSDLL_DLL=$(BINDIR)\$(GSDLL).dll
554GSDLL_OBJS=$(GLOBJ)gsdll.$(OBJ) $(GLOBJ)gp_msdll.$(OBJ)
555
556$(GLGEN)lib32.rsp: $(TOP_MAKEFILES)
557	echo /NODEFAULTLIB:LIBC.lib > $(GLGEN)lib32.rsp
558	echo libcmt.lib >> $(GLGEN)lib32.rsp
559
560!if $(MAKEDLL)
561# The graphical small EXE loader
562$(GS_XE): $(GSDLL_DLL)  $(DWOBJ) $(GSCONSOLE_XE) $(SETUP_XE) $(UNINSTALL_XE)
563	echo /SUBSYSTEM:WINDOWS > $(GLGEN)gswin32.rsp
564	echo /DEF:$(GLSRCDIR)\dwmain32.def /OUT:$(GS_XE) >> $(GLGEN)gswin32.rsp
565	$(LINK) $(LCT) @$(GLGEN)gswin32.rsp $(DWOBJ) @$(LIBCTR) $(GS_OBJ).res
566	del $(GLGEN)gswin32.rsp
567
568# The console mode small EXE loader
569$(GSCONSOLE_XE): $(OBJC) $(GS_OBJ).res $(GLSRCDIR)\dw32c.def
570	echo /SUBSYSTEM:CONSOLE > $(GLGEN)gswin32.rsp
571	echo  /DEF:$(GLSRCDIR)\dw32c.def /OUT:$(GSCONSOLE_XE) >> $(GLGEN)gswin32.rsp
572	$(LINK) $(LCT) @$(GLGEN)gswin32.rsp $(OBJC) @$(LIBCTR) $(GS_OBJ).res
573	del $(GLGEN)gswin32.rsp
574
575# The big DLL
576$(GSDLL_DLL): $(GS_ALL) $(DEVS_ALL) $(GSDLL_OBJS) $(GSDLL_OBJ).res $(GLGEN)lib32.rsp
577	echo /DLL /DEF:$(GLSRCDIR)\gsdll32.def /OUT:$(GSDLL_DLL) > $(GLGEN)gswin32.rsp
578	$(LINK) $(LCT) @$(GLGEN)gswin32.rsp $(GSDLL_OBJS) @$(ld_tr) $(INTASM) @$(GLGEN)lib.tr @$(GLGEN)lib32.rsp @$(LIBCTR) $(GSDLL_OBJ).res
579	del $(GLGEN)gswin32.rsp
580
581!else
582# The big graphical EXE
583$(GS_XE): $(GSCONSOLE_XE) $(GS_ALL) $(DEVS_ALL) $(GSDLL_OBJS) $(DWOBJNO) $(GSDLL_OBJ).res $(GLSRCDIR)\dwmain32.def $(GLGEN)lib32.rsp
584	copy $(ld_tr) $(GLGEN)gswin32.tr
585	echo $(GLOBJ)dwnodll.obj >> $(GLGEN)gswin32.tr
586	echo $(GLOBJ)dwimg.obj >> $(GLGEN)gswin32.tr
587	echo $(GLOBJ)dwmain.obj >> $(GLGEN)gswin32.tr
588	echo $(GLOBJ)dwtext.obj >> $(GLGEN)gswin32.tr
589	echo $(GLOBJ)dwreg.obj >> $(GLGEN)gswin32.tr
590	echo /DEF:$(GLSRCDIR)\dwmain32.def /OUT:$(GS_XE) > $(GLGEN)gswin32.rsp
591	$(LINK) $(LCT) @$(GLGEN)gswin32.rsp $(GLOBJ)gsdll @$(GLGEN)gswin32.tr @$(LIBCTR) $(INTASM) @$(GLGEN)lib.tr @$(GLGEN)lib32.rsp $(GSDLL_OBJ).res
592	del $(GLGEN)gswin32.tr
593	del $(GLGEN)gswin32.rsp
594
595# The big console mode EXE
596$(GSCONSOLE_XE): $(GS_ALL) $(DEVS_ALL) $(GSDLL_OBJS) $(OBJCNO) $(GS_OBJ).res $(GLSRCDIR)\dw32c.def $(GLGEN)lib32.rsp
597	copy $(ld_tr) $(GLGEN)gswin32c.tr
598	echo $(GLOBJ)dwnodllc.obj >> $(GLGEN)gswin32c.tr
599	echo $(GLOBJ)dwimg.obj >> $(GLGEN)gswin32c.tr
600	echo $(GLOBJ)dwmainc.obj >> $(GLGEN)gswin32c.tr
601	echo $(GLOBJ)dwreg.obj >> $(GLGEN)gswin32c.tr
602	echo /SUBSYSTEM:CONSOLE > $(GLGEN)gswin32.rsp
603	echo /DEF:$(GLSRCDIR)\dw32c.def /OUT:$(GSCONSOLE_XE) >> $(GLGEN)gswin32.rsp
604	$(LINK) $(LCT) @$(GLGEN)gswin32.rsp $(GLOBJ)gsdll @$(GLGEN)gswin32c.tr @$(LIBCTR) $(INTASM) @$(GLGEN)lib.tr @$(GLGEN)lib32.rsp $(GS_OBJ).res
605	del $(GLGEN)gswin32.rsp
606	del $(GLGEN)gswin32c.tr
607!endif
608
609# ---------------------- Setup and uninstall programs ---------------------- #
610
611!if $(MAKEDLL)
612
613$(SETUP_XE): $(GLOBJ)dwsetup.obj $(GLOBJ)dwinst.obj $(GLOBJ)dwsetup.res $(GLSRC)dwsetup.def
614	echo /DEF:$(GLSRC)dwsetup.def /OUT:$(SETUP_XE) > $(GLGEN)dwsetup.rsp
615	echo $(GLOBJ)dwsetup.obj $(GLOBJ)dwinst.obj >> $(GLGEN)dwsetup.rsp
616	copy $(LIBCTR) $(GLGEN)dwsetup.tr
617	echo ole32.lib >> $(GLGEN)dwsetup.tr
618	echo uuid.lib >> $(GLGEN)dwsetup.tr
619	$(LINK) $(LCT) @$(GLGEN)dwsetup.rsp @$(GLGEN)dwsetup.tr $(GLOBJ)dwsetup.res
620	del $(GLGEN)dwsetup.rsp
621	del $(GLGEN)dwsetup.tr
622
623$(UNINSTALL_XE): $(GLOBJ)dwuninst.obj $(GLOBJ)dwuninst.res $(GLSRC)dwuninst.def
624	echo /DEF:$(GLSRC)dwuninst.def /OUT:$(UNINSTALL_XE) > $(GLGEN)dwuninst.rsp
625	echo $(GLOBJ)dwuninst.obj >> $(GLGEN)dwuninst.rsp
626	copy $(LIBCTR) $(GLGEN)dwuninst.tr
627	echo ole32.lib >> $(GLGEN)dwuninst.tr
628	echo uuid.lib >> $(GLGEN)dwuninst.tr
629	$(LINK) $(LCT) @$(GLGEN)dwuninst.rsp @$(GLGEN)dwuninst.tr $(GLOBJ)dwuninst.res
630	del $(GLGEN)dwuninst.rsp
631	del $(GLGEN)dwuninst.tr
632
633!endif
634
635DEBUGDEFS=BINDIR=.\debugbin GLGENDIR=.\debugobj GLOBJDIR=.\debugobj PSLIBDIR=.\lib PSGENDIR=.\debugobj PSOBJDIR=.\debugobj DEBUG=1 TDEBUG=1
636debug:
637	nmake $(DEBUGDEFS)
638
639debugclean:
640	nmake $(DEBUGDEFS) clean
641
642# end of makefile
643