1 XCOMM $XConsortium: os2.rules /main/1 1996/10/31 14:47:27 kaleb $
5 XCOMM platform: $XFree86: xc/config/cf/os2.rules,v 3.15 1997/01/05 11:49:39 dawes Exp $
7 .SUFFIXES: .Osuf .c .CCsuf
10 $(CC) $(CFLAGS) -c $*.c
14 $(CXX) $(CFLAGS) -c $*.CCsuf
18 #define ImakeHelper \imakesvc
20 #define ImakeIndir \indir
21 #define ImakeSubCmdHelper \imake -I$(IRULESRC) $(IMAKE_DEFINES)
22 #define Fontc \bdftopcf
23 #define MkFontDir \mkfontdir
24 #define XkbComp \xkbcomp
26 #define ImakeHelper imakesvc
28 #define ImakeIndir indir
29 #define ImakeSubCmdHelper $(IMAKE_CMD)
30 #define Fontc bdftopcf
31 #define MkFontDir mkfontdir
32 #define XkbComp xkbcomp
35 #define echo ImakeHelper 8
36 #define RunProgram(progvar,options) $(subst /,\,$(progvar)) options
37 #define RemoveFile(file) $(RM) file
38 #define RemoveFiles(files) $(RM) files
39 #define NeedLdLibraryPathForXkbComp NO
41 #define LibObjCompile(dir,options) RemoveFiles($@ dir\$@) @@\
42 $(CC) $(CCOPTIONS) $(ALLDEFINES) options -c $*.c @@\
45 #define MakeDir(dir) $(MKDIRHIER) dir
47 #define BuildIncludesTop(srclist) @@\
48 includes:: srclist @@\
49 MakeDir($(BUILDINCDIR)) @@\
50 @for %i in (srclist) do ImakeHelper 2 $(BUILDINCDIR) $(BUILDINCTOP) $(CURRENT_DIR) %i
52 #define ProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib) @@\
53 ProgramTargetName(program): $(objs) @@\
54 RemoveTargetProgram($@) @@\
55 LinkRule($@,$(LDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
57 InstallProgram(program,$(BINDIR)) @@\
58 InstallManPage(program,$(MANDIR))
61 #define ProgramTargetHelperNoMan(program,srcs,objs,deplib,locallib,syslib) @@\
62 ProgramTargetName(program): $(objs) @@\
63 RemoveTargetProgram($@) @@\
64 LinkRule($@,$(LDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
66 InstallProgram(program,$(BINDIR))
70 #define BuildIncludes(srclist,dstsubdir,dstupdir) @@\
71 includes:: srclist @@\
72 MakeDir($(BUILDINCDIR)/dstsubdir) @@\
73 @for %i in (srclist) do ImakeHelper 3 $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR) $(BUILDINCDIR)/dstsubdir %i
75 #define LinkFileList(step,list,dir,sub) @@\
77 @for %i in (list) do ImakeHelper 3 sub dir %i
79 #define ComplexProgramTarget(program) @@\
80 PROGRAM = ProgramTargetName(program) @@\
82 AllTarget(ProgramTargetName(program)) @@\
84 ProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
90 RemoveFile($(PROGRAM))
92 #define ComplexProgramTarget_1(program,locallib,syslib) @@\
93 OBJS = $(OBJS1) $(OBJS2) $(OBJS3) @@\
94 SRCS = $(SRCS1) $(SRCS2) $(SRCS3) @@\
95 PROGRAM1 = ProgramTargetName(program) @@\
97 AllTarget($(PROGRAM1) $(PROGRAM2) $(PROGRAM3)) @@\
99 ProgramTargetHelper(program,SRCS1,OBJS1,DEPLIBS1,locallib,syslib) @@\
105 RemoveFiles($(PROGRAMS))
107 #define ComplexProgramTarget_2(program,locallib,syslib) @@\
108 PROGRAM2 = ProgramTargetName(program) @@\
110 ProgramTargetHelper(program,SRCS2,OBJS2,DEPLIBS2,locallib,syslib)
112 #define ComplexProgramTarget_3(program,locallib,syslib) @@\
113 PROGRAM3 = ProgramTargetName(program) @@\
115 ProgramTargetHelper(program,SRCS3,OBJS3,DEPLIBS3,locallib,syslib)
117 #define NormalProgramTarget(program,objects,deplibs,locallibs,syslibs) @@\
118 ProgramTargetName(program): objects @@\
119 RemoveTargetProgram($@) @@\
120 LinkRule($@,$(LDOPTIONS),objects,locallibs $(LDLIBS) syslibs) @@\
123 RemoveFile(ProgramTargetName(program))
126 #define ComplexProgramTargetNoMan(program) @@\
127 PROGRAM = ProgramTargetName(program) @@\
129 AllTarget(ProgramTargetName(program)) @@\
131 ProgramTargetHelperNoMan(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
137 RemoveFile($(PROGRAM))
140 #define MoveToBakFile(file) ImakeHelper 5 file
142 #define RMoveToBakFile(file) ImakeHelper 6 file
144 #define InstallMultipleDestFlags(step,list,dest,flags) @@\
146 MakeDir($(DESTDIR)dest) @@\
147 $(INSTALL) $(INSTALLFLAGS) flags list $(subst /,\,$(DESTDIR)dest)
149 #define CleanTarget() @@\
151 RemoveFiles(FilesToClean ExtraFilesToClean)
153 #define LinkSourceFile(src,dir) @@\
155 ImakeHelper 3 dir . src @@\
164 #define LinkFile(tofile,fromfile) @@\
165 tofile:: fromfile @@\
166 ImakeHelper 7 fromfile tofile @@\
168 includes:: tofile @@\
176 #define ImakeDependency(target) @@\
177 target:: ProgramTargetName($(IMAKE)) @@\
179 ProgramTargetName($(IMAKE)): @@\
180 @ImakeIndir $(IMAKESRC) if exist Makefile $(MAKE) SHELL= MAKE=x11make all @@\
181 @ImakeIndir $(IMAKESRC) if not exist Makefile $(MAKE) SHELL= MAKE=x11make -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"
185 #define DependDependency() @@\
186 depend:: ProgramTargetName($(DEPEND)) @@\
188 ProgramTargetName($(DEPEND)): @@\
189 @ImakeIndir $(DEPENDSRC) $(MAKE) SHELL= MAKE=x11make
192 #define DependTarget() @@\
193 DependDependency() @@\
196 $(subst /,\,$(DEPEND)) $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS)
198 #define DependTarget3(srcs1,srcs2,srcs3) @@\
199 DependDependency() @@\
201 /* Currently this stuff doesn't work correctly for libX11
203 $(subst /,\,$(DEPEND)) $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs1 @@\
204 $(subst /,\,$(DEPEND)) $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs2 @@\
205 $(subst /,\,$(DEPEND)) $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs3
208 #define ForceSubdirs(dirs) @@\
212 @for %i in (dirs) do ImakeIndir %i $(MAKE) SHELL= MAKE=x11make $(MFLAGS) PassCDebugFlags all @@\
218 #define MakeMakeSubdirs(dirs,target) @@\
221 MMSRULES = $(IRULESRC) @@\
222 MMSCUR = $(CURRENT_DIR) @@\
224 @for %i in ($(subst /,\,$(MMSDIRS))) do ImakeHelper 1 IMmode %i $(MMSRULES) $(MMSTOP) $(MMSCUR)
226 #define NamedTargetSubdirs(name,dirs,verb,flags,subname) @@\
227 Concat(SUBST,name) = dirs @@\
229 @for %i in ($(subst /,\,$(Concat(SUBST,name)))) do ImakeIndir %i $(MAKE) SHELL= MAKE=x11make $(MFLAGS) flags subname
231 #define InstallNamedTarget(step,srcname,flags,dest,dstname) @@\
233 MakeDir($(DESTDIR)dest) @@\
234 $(INSTALL) $(INSTALLFLAGS) flags srcname $(subst \,/,$(DESTDIR)dest)/dstname
236 #define BuildMakefileTarget(notused,imakeflags) @@\
237 ImakeDependency(Makefile) @@\
240 RMoveToBakFile(Makefile) @@\
241 ImakeSubCmdHelper -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR) imakeflags
243 #define AssembleObject(flags) $(RM) $@ @@\
244 $(CPP) AsmDefines $(DEFINES) $(INCLUDES) flags $*.s | \ @@\
245 grep -v '^\#' > _tmp_.s @@\
246 $(CC) $(CFLAGS) -o $*.Osuf -c _tmp_.s @@\
249 #define NormalAsmObjectRule() @@\
251 AssembleObject($(_NOOP_))
253 #define ObjectMapIncludeFromSpecialSource(dst,src,flags) @@\
255 ImakeHelper 9 $@ mfbmap.h $? @@\
257 SpecialCObjectRule(dst,NullParameter,flags) @@\
264 #define FontBaseObj(basename)basename.pcf
266 * UncompressedFontTarget
268 #define UncompressedFontTarget(basename) @@\
269 FontBaseObj(basename): FontSrc(basename) @@\
270 Fontc $(FONTCFLAGS) $? -o $@
273 * CompressedFontTarget
275 #ifndef CompressedFontTarget
276 #if GzipFontCompression
277 #define CompressedFontTarget(basename) @@\
278 FontBaseObj(basename).gz: FontSrc(basename) @@\
279 Fontc $(FONTCFLAGS) $? | $(GZIPCMD) > $@
281 #define CompressedFontTarget(basename) @@\
282 FontBaseObj(basename).Z: FontSrc(basename) @@\
283 Fontc $(FONTCFLAGS) $? | $(COMPRESS) > $@
288 * MakeFontsDir - generate rules to build fonts.dir database.
290 #define MakeFontsDir(deplist) @@\
293 fonts.dir: deplist @@\
297 RemoveFile(fonts.dir)
299 /* OS/2 scripts are based on REXX
300 * it is just the SHELL variable that is messed up that forces me to
303 #define ConfigTargetLong(target,dep,script,args,extra) @@\
306 Configure:: target.o @@\
308 target.c: script dep @@\
309 $(MAKE) SHELL= MAKE=x11make $(MFLAGS) extra Concat(Build,target) @@\
311 Concat(Build,target): @@\
318 #ifndef ServerTargetWithFlags
319 #define ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,flags) @@\
320 AllTarget(ProgramTargetName(server)) @@\
321 ProgramTargetName(server): subdirs objects libs @@\
322 MoveToBakFile($@) @@\
323 LinkRule($@,$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
324 emxbind -a ProgramTargetName(server) -h255 @@\
326 Concat(load,server): @@\
327 MoveToBakFile(ProgramTargetName(server)) @@\
328 LinkRule(ProgramTargetName(server),$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
330 loadX:: Concat(load,server) @@\
332 SentinelProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
333 SentinelLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
334 PurifyProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
335 PurifyLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
336 ProofProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
337 ProofLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
339 InstallProgramWithFlags(server,$(BINDIR),flags) @@\
342 RemoveFile(ProgramTargetName(server))
343 #endif /* ServerTargetWithFlags */
346 * ServerTarget - rules to compile, link, and relink a normal server
347 * Need a .def file for OS/2
350 #define ServerTarget(server,subdirs,objects,libs,syslibs) @@\
351 ServerTargetWithFlags(server,subdirs,objects,libs,syslibs server.def,$(_NOOP_)) @@\
353 ProgramTargetName(server): server.def
354 #endif /* ServerTarget */
357 * ToolkitMakeStrings generates a string-table, i.e., a C source
358 * file and the matching header(s), e.g., Xt's StringDefs.c, StringDefs.h,
359 * and Shell.h files; or Motif's XmStrDefs.c and XmStrDefs.h files.
361 * The 'files' argument is the list of files that will be produced by
362 * this rule, e.g., for Xt they would be "Shell.h StringDefs.c StringDefs.h"
363 * and for Motif they would be "XmStrDefs.c XmStrDefs.h".
365 * The 'source' argument is the string-list file to be parsed, e.g., in
366 * Xt that would be "util/string.list". For Motif 2.0 it would be
367 * "../../tools/makestr/xmstring.list", and for Motif-CDE1 it would be
368 * "util/xmstring.list".
370 * The 'options' argument is passed by the library's Imakefile, see the
371 * Xt Imakefile for an example. Typically this would be nothing, -intelabi,
372 * or -sparcabi; there are other choices, but these are typical.
374 * The 'depends' argument names additional files the target files
375 * depend on. It should name the #ctmpl and #htmpl files from the
378 * The 'dest' argument is the C source output file. For Xt this should
379 * be "StringDefs.c", and for all versions of Motif it would be "XmStrDefs.c"
381 * Headers are generated and named according to data in the 'source'
385 #ifndef ToolkitMakeStrings
386 #define ToolkitMakeStrings(files,source,options,depends,dest) @@\
387 MAKESTRS = $(CONFIGSRC)/util/makestrs @@\
388 MAKESTRS1 = /makestrs.exe @@\
390 ProgramTargetName($(MAKESTRS)): $(MAKESTRS).c @@\
391 ImakeIndir $(CONFIGSRC)/util make SHELL= ProgramTargetName(makestrs) @@\
392 ImakeHelper 7 $(CONFIGSRC)/util/makestrs.exe / @@\
394 files: ProgramTargetName($(MAKESTRS)) source depends @@\
395 RemoveFiles(files) @@\
396 RunProgram(MAKESTRS1,options < source > dest) @@\
407 #endif /* ToolkitMakeStrings */
409 /*#define CppSedMagic SedMagic*/
410 #define CppSedMagic sed -e '/^# *[0-9][0-9]* *.*$$/d' -e 's/^XCOMM/#/g' -e 's/^XCOMM[^a-zA-Z0-9_]/#/g'
412 #ifndef InstallNamedTargetNoClobber
413 #define InstallNamedTargetNoClobber(step,srcname,flags,dest,dstname) @@\
415 MakeDir($(DESTDIR)dest) @@\
416 if not exist $(subst /,\,$(DESTDIR)dest)\dstname $(INSTALL) $(INSTALLFLAGS) flags srcname $(DESTDIR)dest/dstname
418 #endif /* InstallNamedTargetNoClobber */
422 #ifndef InstallManPageLong
423 #define InstallManPageLong(file,destdir,dest) @@\
424 install.man:: file.man @@\
425 MakeDir($(DESTDIR)destdir) @@\
426 ImakeHelper 12 file $(DESTDIR)destdir dest
429 #ifndef InstallManPageAliases
430 #define InstallManPageAliases(file,destdir,aliases) @@\
432 MakeDir($(DESTDIR)destdir) @@\
433 for %i in (aliases) do $(INSTALL) $(DESTDIR)destdir/file.gz $(DESTDIR)destdir/%i.gz
436 #ifndef InstallGenManPageLong
437 #define InstallGenManPageLong(file,destdir,dest,suffix) @@\
438 install.man:: file.man @@\
439 MakeDir($(DESTDIR)destdir) @@\
440 ImakeHelper 12 file $(DESTDIR)destdir dest
443 #ifndef InstallMultipleMan
444 #define InstallMultipleMan(list,dest) @@\
445 install.man:: list @@\
446 MakeDir($(DESTDIR)dest) @@\
447 for %i in (list) do ImakeHelper 12 %i $(DESTDIR)dest %i
450 #else /* CompressManPages */
452 #ifndef InstallManPageLong
453 #define InstallManPageLong(file,destdir,dest) @@\
454 install.man:: file.man @@\
455 MakeDir($(DESTDIR)destdir) @@\
456 ImakeHelper 10 file $(DESTDIR)destdir dest $(MANSUFFIX)
459 #ifndef InstallManPageAliases
460 #define InstallManPageAliases(file,destdir,aliases) @@\
462 MakeDir($(DESTDIR)destdir) @@\
463 for %i in (aliases) do $(INSTALL) $(DESTDIR)destdir/file.$(MANSUFFIX) $(DESTDIR)destdir/%i.$(MANSUFFIX)
466 #ifndef InstallGenManPageLong
467 #define InstallGenManPageLong(file,destdir,dest,suffix) @@\
468 install.man:: file.man @@\
469 MakeDir($(DESTDIR)destdir) @@\
470 ImakeHelper 10 file $(DESTDIR)destdir dest suffix
473 #ifndef InstallMultipleMan
474 #define InstallMultipleMan(list,dest) @@\
475 install.man:: list @@\
476 MakeDir($(DESTDIR)dest) @@\
477 for %i in (list) do ImakeHelper 10 %i $(DESTDIR)dest %i $(MANSUFFIX)
482 #ifndef NormalLintTarget
483 #define NormalLintTarget(srclist)
484 #endif /* NormalLintTarget */
486 #ifndef MakeDirectories
487 #define MakeDirectories(step,dirs) @@\
489 -for %i in (dirs) do $(MKDIRHIER) $(DESTDIR)%i
490 #endif /* MakeDirectories */
493 #define YaccFile(file,flags) @@\
496 file.h file.c: file.y @@\
497 $(YACC) flags file.y @@\
498 $(MV) y.tab.c file.c @@\
499 @if exist y.tab.h $(MV) y.tab.h file.h @@\
502 RemoveFiles(y.tab.c y.tab.h file.h file.c)
503 #endif /* YaccFile */
505 #ifndef StaticLibrary
506 #define StaticLibrary(libpath,libname) Concat4(libpath,/,libname,_s.a)
510 #define MakeXkbDir(basedir,subdir) @@\
511 all:: Concat(subdir,.dir) @@\
513 Concat(subdir,.dir): @@\
514 $(XKBCOMPCMD) -lfhlpR -o Concat(subdir,.dir) * @@\
516 InstallTarget(install,Concat(subdir,.dir),$(INSTDATFLAGS),basedir)
519 /* This is to replace an ugly hack in /xc/nls/XLC_LOCALE */
520 /* the corresponding Imake.rules rule would be:
521 define LinkFileSpecial(gotodir,tofile,fromfile) @@\
522 @MakeFlagsToShellFlags(i,set +e); \ @@\
523 cd dir && (set -x; RemoveFile(tofile); $(LN) fromfile tofile)
525 #ifndef LinkFileSpecial
526 #define LinkFileSpecial(gotodir,tofile,fromfile) @@\
527 ImakeHelper 13 gotodir fromfile tofile
530 #ifndef LinkBuildBinary
531 #define LinkBuildBinary(binary) @@\
532 all:: $(BUILDBINDIR)/binary binary @@\
534 $(BUILDBINDIR)/binary: binary @@\
535 ImakeHelper 13 $(BUILDBINDIR) $(BUILDBINTOP)/$(CURRENT_DIR)/binary binary @@\
537 #endif /* LinkBuildBinary */