1XCOMM platform:  $XConsortium: Win32.rules /main/49 1996/12/02 14:12:47 kaleb $
2
3#define HasSharedLibraries YES
4#define NeedLibInsideFlag YES
5#define SharedLibXaw NO
6#define SharedLibXmu NO
7#define SharedLibXt NO
8#define SharedDataSeparation NO
9#define SharedCodeDef /**/
10#define SharedLibraryDef /**/
11#define ShLibIncludeFile <WinLib.tmpl>
12#define SharedLibraryLoadFlags -dll
13#define PositionIndependentCFlags /**/
14
15.c.obj:
16	$(CC) -c $*.c @<<
17	$(CFLAGS)
18<<
19
20#if HasCplusplus
21.CCsuf.obj:
22	$(CXX) -c $*.CCsuf @<<
23	$(CFLAGS)
24<<
25#endif
26
27#define ProgramTargetName(target) target.exe
28
29#define RunProgram(progvar,options) $(progvar:/=\) options
30
31#define RemoveFile(file) if exist file $(RM) file
32
33#define RemoveFiles(files) @$(MAKE) $(MFLAGS) -f <<			@@\
34.SUFFIXES:								@@\
35									@@\
36all: files								@@\
37	!for %%i in ( Avoid.Error $$** ) do if exist %%i $(RM) %%i	@@\
38									@@\
39Avoid.Error files:							@@\
40<<
41
42#define MakeDir(dir) -$(MKDIRHIER) dir
43
44#define ObjectCompile(options) RemoveFile($@)				@@\
45	$(CC) -c $*.c @<<						@@\
46	$(CFLAGS) options						@@\
47<<
48
49#define LibObjCompile(dir,options) RemoveFiles($@ dir\$@)		@@\
50	$(CC) -c  $*.c @<<						@@\
51	$(CCOPTIONS) $(ALLDEFINES) options				@@\
52<<									@@\
53	$(MV) $@ dir\$@
54
55#define BuildIncludesTop(srclist,dstsubdir,dstupdir)			@@\
56includes:: srclist							@@\
57	MakeDir($(BUILDINCDIR:/=\))					@@\
58	@$(MAKE) $(MFLAGS) -f <<					@@\
59.SUFFIXES:								@@\
60									@@\
61all: srclist								@@\
62	cd $(BUILDINCDIR:/=\)						@@\
63	!RemoveFile($$**)						@@\
64	!$(LN) $(BUILDINCTOP:/=\)\$(CURRENT_DIR:/=\)\$$** .		@@\
65									@@\
66Avoid.Error srclist:							@@\
67<<
68
69#define BuildIncludes(srclist,dstsubdir,dstupdir)			@@\
70XVARdef0 = $(BUILDINCDIR)/dstsubdir					@@\
71XVARdef1 = $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)			@@\
72									@@\
73includes:: srclist							@@\
74	MakeDir($(XVARuse0:/=\))					@@\
75	@$(MAKE) -A $(MFLAGS) -f <<					@@\
76.SUFFIXES:								@@\
77									@@\
78all: srclist								@@\
79	cd $(XVARuse0:/=\)						@@\
80	!RemoveFile($$**)						@@\
81	!$(LN) $(XVARuse1:/=\)\$$** .					@@\
82									@@\
83Avoid.Error srclist:							@@\
84<<
85
86#define LinkFileList(step,list,dir,sub)					@@\
87XVARdef0 = dir								@@\
88XVARdef1 = sub								@@\
89XVARdef2 = list								@@\
90									@@\
91step:: $(XVARuse2:/=\)							@@\
92	cd $(XVARuse0:/=\)						@@\
93	!RemoveFile($**)						@@\
94	!$(LN) $(XVARuse1:/=\)\\$** .
95
96#define LinkRule(program,options,objects,libraries) \
97$(CCLINK) Concat(-Fe,program) options objects libraries $(EXTRA_LOAD_FLAGS)
98
99#define NormalProgramTarget(program,objects,deplibs,locallibs,syslibs)	@@\
100XVARdef0 = objects							@@\
101									@@\
102ProgramTargetName(program): $(XVARuse0:.o=.obj) deplibs			@@\
103	RemoveTargetProgram($@)						@@\
104	LinkRule($@,$(LDOPTIONS),$(XVARuse0:.o=.obj),locallibs $(LDLIBS) syslibs) @@\
105									@@\
106clean::									@@\
107	RemoveFile(ProgramTargetName(program))
108
109#define ProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib)	@@\
110ProgramTargetName(program): $(objs:.o=.obj) $(deplib)			@@\
111	RemoveTargetProgram($@)						@@\
112	LinkRule($@,$(LDOPTIONS),$(objs:.o=.obj),locallib $(LDLIBS) syslib) @@\
113									@@\
114InstallProgram(program,$(BINDIR))					@@\
115InstallManPage(program,$(MANDIR))
116
117#define ComplexProgramTarget(program)					@@\
118PROGRAM = ProgramTargetName(program)					@@\
119									@@\
120AllTarget(ProgramTargetName(program))					@@\
121									@@\
122ProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
123									@@\
124DependTarget()								@@\
125LintTarget()								@@\
126									@@\
127clean::									@@\
128	RemoveFile($(PROGRAM))
129
130#define ComplexProgramTarget_1(program,locallib,syslib)			@@\
131OBJS = $(OBJS1) $(OBJS2) $(OBJS3)					@@\
132SRCS = $(SRCS1) $(SRCS2) $(SRCS3)					@@\
133PROGRAM1 = ProgramTargetName(program)					@@\
134									@@\
135AllTarget($(PROGRAM1) $(PROGRAM2) $(PROGRAM3))				@@\
136									@@\
137ProgramTargetHelper(program,SRCS1,OBJS1,DEPLIBS1,locallib,syslib)	@@\
138									@@\
139DependTarget()								@@\
140LintTarget()								@@\
141									@@\
142clean::									@@\
143	for %%i in ($(PROGRAMS)) do $(RM) ProgramTargetName(%%i)
144
145#define ComplexProgramTarget_2(program,locallib,syslib)			@@\
146PROGRAM2 = ProgramTargetName(program)					@@\
147									@@\
148ProgramTargetHelper(program,SRCS2,OBJS2,DEPLIBS2,locallib,syslib)
149
150#define ComplexProgramTarget_3(program,locallib,syslib)			@@\
151PROGRAM3 = ProgramTargetName(program)					@@\
152									@@\
153ProgramTargetHelper(program,SRCS3,OBJS3,DEPLIBS3,locallib,syslib)
154
155#define MoveToBakFile(file) -@if exist file $(MV) file file.bak
156
157#define RMoveToBakFile(file) -RemoveFile(file.bak)			@@\
158	-@if exist file $(MV) file file.bak
159
160#define InstallMultipleDestFlags(step,list,dest,flags)			@@\
161XVARdef0 = $(DESTDIR)dest						@@\
162									@@\
163step:: list								@@\
164	MakeDir($(XVARuse0:/=\))					@@\
165	!$(INSTALL) $(INSTALLFLAGS) flags $** $(XVARuse0:/=\)
166
167#define	CleanTarget()							@@\
168clean::									@@\
169	RemoveFiles(FilesToClean ExtraFilesToClean)
170
171#define LibraryTargetName(libname)libname.lib
172
173#define LibraryTargetNameSuffix(libname,suffix)Concat(libname,suffix.lib)
174
175#define MakeLibrary(libname,objlist) $(AR) @<<				@@\
176-out:libname objlist							@@\
177<<
178
179#define LinkSourceFile(src,dir)						@@\
180XVARdef0 = dir/src							@@\
181									@@\
182src:  $(XVARuse0:/=\)							@@\
183	RemoveFile($@)							@@\
184	$(LN) $? $@							@@\
185									@@\
186includes:: src								@@\
187									@@\
188depends:: src								@@\
189									@@\
190clean::									@@\
191	RemoveFile(src)
192
193#define LinkFile(tofile,fromfile)					@@\
194XVARdef0 = fromfile							@@\
195tofile:: $(XVARuse0:/=\)						@@\
196	RemoveFile($@)							@@\
197	$(LN) $? $@							@@\
198									@@\
199includes:: tofile							@@\
200									@@\
201depend:: tofile								@@\
202									@@\
203clean::									@@\
204	RemoveFile(tofile)
205
206
207#define	NormalLibraryTarget(libname,objlist)				@@\
208AllTarget(LibraryTargetName(libname))					@@\
209									@@\
210XVARdef0 = objlist							@@\
211									@@\
212LibraryTargetName(libname): $(XVARuse0:.o=.obj) $(EXTRALIBRARYDEPS)	@@\
213	RemoveFile($@)							@@\
214	MakeLibrary($@,$(XVARuse0:.o=.obj))				@@\
215	LinkBuildLibrary($@)
216
217#define	NormalLibraryTarget2(libname,objlist1,objlist2)			@@\
218NormalLibraryTarget(libname,objlist1 objlist2)
219
220#define	NormalLibraryTarget3(libname,objlist1,objlist2,objlist3)	@@\
221NormalLibraryTarget(libname,objlist1 objlist2 objlist3)
222
223#define	NormalDepLibraryTarget(libname,deplist,objlist)			@@\
224AllTarget(LibraryTargetName(libname))					@@\
225									@@\
226XVARdef0 = deplist							@@\
227XVARdef1 = objlist							@@\
228XVARdef2 = $(XVARuse1:/=\)						@@\
229									@@\
230LibraryTargetName(libname): $(XVARuse0:/=\) $(EXTRALIBRARYDEPS)		@@\
231	RemoveFile($@)							@@\
232	MakeLibrary($@,$(XVARuse2:.o=.obj))				@@\
233	LinkBuildLibrary($@)
234
235#define	ProfiledLibraryTarget(libname,objlist)				@@\
236AllTarget(LibraryTargetNameSuffix(libname,_p))				@@\
237									@@\
238XVARdef0 = objlist							@@\
239									@@\
240LibraryTargetNameSuffix(libname,_p): $(XVARuse0:.o=.obj) $(EXTRALIBRARYDEPS)	@@\
241	RemoveFile($@)							@@\
242	cd profiled							@@\
243	MakeLibrary(..\$@,$(XVARuse0:.o=.obj))				@@\
244	cd ..
245
246#define	DebuggedLibraryTarget(libname,objlist)				@@\
247AllTarget(LibraryTargetNameSuffix(libname,_d))				@@\
248									@@\
249XVARdef0 = objlist							@@\
250									@@\
251LibraryTargetNameSuffix(libname,_d): $(XVARuse0:.o=.obj) $(EXTRALIBRARYDEPS)	@@\
252	RemoveFile($@)							@@\
253	cd debugger							@@\
254	MakeLibrary(..\$@,$(XVARuse0:.o=.obj))				@@\
255	cd ..
256
257#ifndef UseInstalled
258#define ImakeDependency(target)						@@\
259target:: ProgramTargetName($(IMAKE))					@@\
260									@@\
261ProgramTargetName($(IMAKE)):						@@\
262	<<tmp.bat							@@\
263	cd $(IMAKESRC:/=\)						@@\
264	if exist Makefile $(MAKE) all					@@\
265	if not exist Makefile $(MAKE) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)" @@\
266<<
267#endif
268
269#ifndef UseInstalled
270#define DependDependency() 						@@\
271depend:: ProgramTargetName($(DEPEND))					@@\
272									@@\
273ProgramTargetName($(DEPEND)):						@@\
274	<<tmp.bat							@@\
275	cd $(DEPENDSRC:/=\)						@@\
276	$(MAKE)								@@\
277<<
278#endif
279
280#define	DependTarget()							@@\
281DependDependency()							@@\
282									@@\
283depend::								@@\
284	$(DEPEND:/=\) @<<						@@\
285$(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS)		@@\
286<<
287
288#define	DependTarget3(srcs1,srcs2,srcs3)				@@\
289DependDependency()							@@\
290									@@\
291depend::								@@\
292	$(DEPEND:/=\) @<<						@@\
293$(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs1 srcs2 srcs3	@@\
294<<
295
296#define ForceSubdirs(dirs)						@@\
297Avoid.Error dirs: FRC							@@\
298	@cd $@								@@\
299	@echo making all in $(CURRENT_DIR)/$@...			@@\
300	$(MAKE) $(MFLAGS) PassCDebugFlags all				@@\
301	cd ..								@@\
302									@@\
303FRC:
304
305#define MakeMakeSubdirs(dirs,target)					@@\
306XVARdef0 = dirs								@@\
307XVARdef1 = $$								@@\
308									@@\
309target::								@@\
310	@$(MAKE) -A $(MFLAGS) -f <<					@@\
311.SUFFIXES:								@@\
312									@@\
313all: $(XVARuse0:/=\)							@@\
314									@@\
315Avoid.Error $(XVARuse0:/=\):						@@\
316	cd $(XVARuse1)@							@@\
317	RMoveToBakFile(Makefile)					@@\
318	ImakeSubCmdHelper -DTOPDIR=../$(TOP) -DCURDIR=$(CURRENT_DIR)/$(XVARuse1)@ @@\
319	$(MAKE) $(MFLAGS) Makefiles					@@\
320	cd ..								@@\
321<<
322
323#ifdef UseInstalled
324# define ImakeSubCmdHelper $(IMAKE_CMD)
325#else
326# define ImakeSubCmdHelper ..\$(IMAKE) -I../$(IRULESRC) $(IMAKE_DEFINES)
327#endif
328
329#define NamedTargetSubdirs(name,dirs,verb,flags,subname)		@@\
330XVARdef0 = dirs								@@\
331XVARdef1 = $$								@@\
332									@@\
333name::									@@\
334	@$(MAKE) -A $(MFLAGS) -f <<					@@\
335.SUFFIXES:								@@\
336									@@\
337all: $(XVARuse0:/=\)							@@\
338									@@\
339Avoid.Error $(XVARuse0:/=\):						@@\
340	cd $(XVARuse1)@							@@\
341	@echo verb in $(CURRENT_DIR)/$(XVARuse1)@...			@@\
342	$(MAKE) $(MFLAGS) flags subname					@@\
343	cd ..								@@\
344<<
345
346#define UnsharedLibReferences(varname,libname,libsource)		@@\
347Concat3(DEP,varname,LIB) = _UseCat($(USRLIBDIR)/,libsource/,libname.lib) @@\
348Concat(varname,LIB) = LoaderLibPrefix _Use(libname.lib,$(Concat3(DEP,varname,LIB))) @@\
349LintLibReferences(varname,libname,libsource)
350
351#define SharedLibReferences(varname,libname,libsource,revname,rev)	@@\
352revname = rev								@@\
353UnsharedLibReferences(varname,libname,libsource)
354
355#define	SubdirLibraryRule(objlist)					@@\
356XVARdef0 = objlist							@@\
357									@@\
358all:: DONE								@@\
359									@@\
360DONE: $(XVARuse0:.o=.obj)						@@\
361	RemoveFile($@)							@@\
362	echo - > $@							@@\
363									@@\
364clean::									@@\
365	RemoveFile(DONE)
366
367#define CppScriptTarget(dst,src,defs,deplist)				@@\
368dst::									@@\
369	@echo sorry, unable to make $@
370
371#define CppFileTarget(dst,src,defs,deplist)				@@\
372XFAKEVAR = X								@@\
373dst::  src deplist							@@\
374	RemoveFile($@)							@@\
375	$(PREPROCESSCMD) -I. <<CppTmpFile.c @<< >$@			@@\
376	XCOMM define $(XFAKEVAR)COMM XCOMM				@@\
377	XCOMM include <src>						@@\
378<<									@@\
379	defs								@@\
380<<									@@\
381									@@\
382clean::									@@\
383	RemoveFiles(dst)
384
385#define InstallNamedTarget(step,srcname,flags,dest,dstname)		@@\
386XVARdef0 = $(DESTDIR)dest						@@\
387									@@\
388step:: srcname								@@\
389	MakeDir($(XVARuse0:/=\))					@@\
390	$(INSTALL) $(INSTALLFLAGS) flags srcname $(XVARuse0:/=\)\\dstname
391
392#define InstallNamedTargetNoClobber(step,srcname,flags,dest,dstname)	@@\
393XVARdef0 = $(DESTDIR)dest						@@\
394									@@\
395step:: srcname								@@\
396	MakeDir($(XVARuse0:/=\))					@@\
397	@if exist $(XVARuse0:/=\)\\dstname echo Not overwriting existing $(XVARuse0:/=\)\\dstname @@\
398	if not exist $(XVARuse0:/=\)\\dstname $(INSTALL) $(INSTALLFLAGS) flags srcname $(XVARuse0:/=\)\\dstname
399
400
401#define	InstallLibrary(libname,dest)					@@\
402InstallTarget(install,LibraryTargetName(libname),$(INSTLIBFLAGS),dest)
403
404#define	InstallScript(program,dest) /**/
405
406#define	InstallNamedProg(srcname,dstname,dest)				@@\
407install:: srcname							@@\
408	@echo sorry, unable to install srcname
409
410#define	InstallSharedLibrary(libname,rev,dest)				@@\
411InstallTarget(install,LibraryTargetName(libname),$(INSTLIBFLAGS),$(USRLIBDIR)) @@\
412InstallTarget(install,libname.dll,$(INSTLIBFLAGS),dest)
413
414#define	InstallSharedLibraryData(libname,rev,dest)
415
416#define MakeDLL(libname,solist) $(LD) @<<				@@\
417SharedLibraryLoadFlags -out:libname.dll libname.exp solist		@@\
418<<
419
420#define SharedLibraryTarget(libname,rev,solist,down,up)			@@\
421AllTarget(libname.dll)							@@\
422									@@\
423CppFileTarget(libname.def,libname-def.cpp,-DLIBRARY_VERSION=rev,$(ICONFIGFILES)) @@\
424									@@\
425XVARdef0 = solist							@@\
426									@@\
427LibraryTargetName(libname): $(XVARuse0:.o=.obj) libname.def $(EXTRALIBRARYDEPS)	@@\
428	RemoveFile($@)							@@\
429	MakeLibrary($@,-def:libname.def $(XVARuse0:.o=.obj))		@@\
430	LinkBuildLibrary($@)						@@\
431	RemoveFile(libname.dll)						@@\
432	MakeDLL(libname,$(XVARuse0:.o=.obj) $(REQUIREDLIBS) $(EXTRA_LIBRARIES)) @@\
433	LinkBuildDLL(libname.dll)					@@\
434									@@\
435libname.dll: LibraryTargetName(libname) $(EXTRALIBRARYDEPS)		@@\
436	RemoveFile(libname.dll)						@@\
437	MakeDLL(libname,$(XVARuse0:.o=.obj) $(REQUIREDLIBS) $(EXTRA_LIBRARIES)) @@\
438	LinkBuildDLL(libname.dll)					@@\
439									@@\
440clean::									@@\
441	RemoveFile(LibraryTargetName(libname))				@@\
442	RemoveFile(libname.dll)
443
444#define SharedLibraryDataTarget(libname,rev,salist)
445
446#define ObjectCplusplusCompile(options) RemoveFile($@)			@@\
447	$(CXX) -c $*.CCsuf @<<						@@\
448	$(CFLAGS) options						@@\
449<<
450
451#define CplusplusLinkRule LinkRule
452
453#define CplusplusProgramTargetHelper ProgramTargetHelper
454
455#ifndef ComplexCplusplusProgramTarget
456#define	ComplexCplusplusProgramTarget(program)				@@\
457        PROGRAM = ProgramTargetName(program)				@@\
458									@@\
459AllTarget(ProgramTargetName(program))					@@\
460									@@\
461CplusplusProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
462									@@\
463DependTarget()								@@\
464LintTarget()								@@\
465									@@\
466clean::									@@\
467	RemoveFile(ProgramTargetName(program))
468#endif /* ComplexCplusplusProgramTarget */
469
470#ifndef UseInstalled
471# define LinkBuildDLL(binary) MakeDir($(BUILDBINDIR:/=\))		@@\
472	RemoveFile(Concat($(BUILDBINDIR:/=\)\,binary))			@@\
473	cd $(BUILDBINDIR:/=\) && $(LN) Concat($(BUILDBINTOP:/=\)\$(CURRENT_DIR:/=\)\,binary) .
474
475# ifdef LinkBuildBinary
476#  undef LinkBuildBinary
477# endif
478# define LinkBuildBinary(binary)					@@\
479all:: $(BUILDBINDIR)\ProgramTargetName(binary) ProgramTargetName(binary) @@\
480									@@\
481$(BUILDBINDIR)\ProgramTargetName(binary): ProgramTargetName(binary)	@@\
482	MakeDir($(BUILDBINDIR:/=\))					@@\
483	RemoveFile($(BUILDBINDIR:/=\)\ProgramTargetName(binary)))	@@\
484	cd $(BUILDBINDIR:/=\) && $(LN) $(BUILDBINTOP:/=\)\$(CURRENT_DIR:/=\)\ProgramTargetName(binary) .
485
486# ifdef LinkBuildLibrary
487#  undef LinkBuildLibrary
488# endif
489# define LinkBuildLibrary(lib) MakeDir($(BUILDLIBDIR:/=\))		@@\
490	RemoveFile(Concat($(BUILDLIBDIR:/=\)\,lib))			@@\
491	cd $(BUILDLIBDIR:/=\) && $(LN) Concat($(BUILDLIBTOP:/=\)\$(CURRENT_DIR:/=\)\,lib) .
492
493#endif
494
495#ifndef ProjectUnsharedLibReferences
496#define ProjectUnsharedLibReferences(varname,libname,libsource,buildlibdir) @@\
497Concat3(DEP,varname,LIB) = _UseCat($(USRLIBDIR)/lib,buildlibdir/,libname.lib)	@@\
498Concat(varname,LIB) = $(Concat3(DEP,varname,LIB))			@@\
499LintLibReferences(varname,libname,libsource)
500#endif
501
502
503/*
504 * ServerTargetWithFlags - generate rules to compile, link, and relink a server
505 */
506#ifndef ServerTargetWithFlags
507#define	ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,flags) @@\
508XVARdef0 = objects							@@\
509									@@\
510AllTarget(ProgramTargetName(server))					@@\
511ProgramTargetName(server): subdirs $(XVARuse0:.o=.obj) libs		@@\
512	MoveToBakFile($@)						@@\
513	LinkRule($@,$(LDOPTIONS),$(XVARuse0:.o=.obj),libs $(LDLIBS) syslibs) @@\
514									@@\
515Concat(load,server):							@@\
516	MoveToBakFile(ProgramTargetName(server))			@@\
517	LinkRule(ProgramTargetName(server),$(LDOPTIONS),$(XVARuse0:.o=.obj),libs $(LDLIBS) syslibs) @@\
518									@@\
519loadX:: Concat(load,server)						@@\
520									@@\
521ProofProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
522ProofLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
523									@@\
524InstallProgramWithFlags(server,$(BINDIR),flags)				@@\
525									@@\
526clean::									@@\
527	RemoveFile(ProgramTargetName(server))
528#endif /* ServerTargetWithFlags */
529