XCOMM platform: $Xorg: Win32.rules,v 1.3 2000/08/17 19:41:46 cpqbld Exp $ XCOMM $XFree86: xc/config/cf/Win32.rules,v 1.5 2002/11/05 17:46:06 tsi Exp $ #define HasSharedLibraries YES #define NeedLibInsideFlag YES #define SharedLibXaw NO #define SharedLibXmu NO #define SharedLibXt NO #define SharedDataSeparation NO #define SharedCodeDef /**/ #define SharedLibraryDef /**/ #define ShLibIncludeFile #define SharedLibraryLoadFlags -dll #define PositionIndependentCFlags /**/ .c.obj: $(CC) -c $*.c @<< $(CFLAGS) << #if HasCplusplus .CCsuf.obj: $(CXX) -c $*.CCsuf @<< $(CFLAGS) << #endif #define ProgramTargetName(target) target.exe #define RunProgram(progvar,options) $(progvar:/=\) options #define RemoveFile(file) if exist file $(RM) file #define RemoveFiles(files) @$(MAKE) $(MFLAGS) -f << @@\ .SUFFIXES: @@\ @@\ all: files @@\ !for %%i in ( Avoid.Error $$** ) do if exist %%i $(RM) %%i @@\ @@\ Avoid.Error files: @@\ << #define MakeDir(dir) -$(MKDIRHIER) dir #define ObjectCompile(options) RemoveFile($@) @@\ $(CC) -c $*.c @<< @@\ $(CFLAGS) options @@\ << #define LibObjCompile(dir,options) RemoveFiles($@ dir\$@) @@\ $(CC) -c $*.c @<< @@\ $(CCOPTIONS) $(ALLDEFINES) options @@\ << @@\ $(MV) $@ dir\$@ #define BuildIncludesTop(srclist,dstsubdir,dstupdir) @@\ includes:: srclist @@\ MakeDir($(BUILDINCDIR:/=\)) @@\ @$(MAKE) $(MFLAGS) -f << @@\ .SUFFIXES: @@\ @@\ all: srclist @@\ cd $(BUILDINCDIR:/=\) @@\ !RemoveFile($$**) @@\ !$(LN) $(BUILDINCTOP:/=\)\$(CURRENT_DIR:/=\)\$$** . @@\ @@\ Avoid.Error srclist: @@\ << #define BuildIncludes(srclist,dstsubdir,dstupdir) @@\ XVARdef0 = $(BUILDINCDIR)/dstsubdir @@\ XVARdef1 = $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR) @@\ @@\ includes:: srclist @@\ MakeDir($(XVARuse0:/=\)) @@\ @$(MAKE) -A $(MFLAGS) -f << @@\ .SUFFIXES: @@\ @@\ all: srclist @@\ cd $(XVARuse0:/=\) @@\ !RemoveFile($$**) @@\ !$(LN) $(XVARuse1:/=\)\$$** . @@\ @@\ Avoid.Error srclist: @@\ << #define LinkFileList(step,list,dir,sub) @@\ XVARdef0 = dir @@\ XVARdef1 = sub @@\ XVARdef2 = list @@\ @@\ step:: $(XVARuse2:/=\) @@\ cd $(XVARuse0:/=\) @@\ !RemoveFile($**) @@\ !$(LN) $(XVARuse1:/=\)\\$** . #define LinkRule(program,options,objects,libraries) \ $(CCLINK) Concat(-Fe,program) options objects libraries $(EXTRA_LOAD_FLAGS) #define NormalProgramTarget(program,objects,deplibs,locallibs,syslibs) @@\ XVARdef0 = objects @@\ @@\ ProgramTargetName(program): $(XVARuse0:.o=.obj) deplibs @@\ RemoveTargetProgram($@) @@\ LinkRule($@,$(LDOPTIONS),$(XVARuse0:.o=.obj),locallibs $(LDLIBS) syslibs) @@\ @@\ clean:: @@\ RemoveFile(ProgramTargetName(program)) #define ProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib) @@\ ProgramTargetName(program): $(objs:.o=.obj) $(deplib) @@\ RemoveTargetProgram($@) @@\ LinkRule($@,$(LDOPTIONS),$(objs:.o=.obj),locallib $(LDLIBS) syslib) @@\ @@\ InstallProgram(program,$(BINDIR)) @@\ InstallManPage(program,$(MANDIR)) #define ComplexProgramTarget(program) @@\ PROGRAM = ProgramTargetName(program) @@\ @@\ AllTarget(ProgramTargetName(program)) @@\ @@\ ProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\ @@\ DependTarget() @@\ LintTarget() @@\ @@\ clean:: @@\ RemoveFile($(PROGRAM)) #define ComplexProgramTarget_1(program,locallib,syslib) @@\ OBJS = $(OBJS1) $(OBJS2) $(OBJS3) @@\ SRCS = $(SRCS1) $(SRCS2) $(SRCS3) @@\ PROGRAM1 = ProgramTargetName(program) @@\ @@\ AllTarget($(PROGRAM1) $(PROGRAM2) $(PROGRAM3)) @@\ @@\ ProgramTargetHelper(program,SRCS1,OBJS1,DEPLIBS1,locallib,syslib) @@\ @@\ DependTarget() @@\ LintTarget() @@\ @@\ clean:: @@\ for %%i in ($(PROGRAMS)) do $(RM) ProgramTargetName(%%i) #define ComplexProgramTarget_2(program,locallib,syslib) @@\ PROGRAM2 = ProgramTargetName(program) @@\ @@\ ProgramTargetHelper(program,SRCS2,OBJS2,DEPLIBS2,locallib,syslib) #define ComplexProgramTarget_3(program,locallib,syslib) @@\ PROGRAM3 = ProgramTargetName(program) @@\ @@\ ProgramTargetHelper(program,SRCS3,OBJS3,DEPLIBS3,locallib,syslib) #define MoveToBakFile(file) -@if exist file $(MV) file file.bak #define RMoveToBakFile(file) -RemoveFile(file.bak) @@\ -@if exist file $(MV) file file.bak #define InstallMultipleDestFlags(step,list,dest,flags) @@\ XVARdef0 = $(DESTDIR)dest @@\ @@\ step:: list @@\ MakeDir($(XVARuse0:/=\)) @@\ !$(INSTALL) $(INSTALLFLAGS) flags $** $(XVARuse0:/=\) #define CleanTarget() @@\ clean:: @@\ RemoveFiles(FilesToClean ExtraFilesToClean) #define LibraryTargetName(libname)libname.lib #define LibraryTargetNameSuffix(libname,suffix)Concat(libname,suffix.lib) #define MakeLibrary(libname,objlist) $(AR) @<< @@\ -out:libname objlist @@\ << #define LinkSourceFile(src,dir) @@\ XVARdef0 = dir/src @@\ @@\ src: $(XVARuse0:/=\) @@\ RemoveFile($@) @@\ $(LN) $? $@ @@\ @@\ includes:: src @@\ @@\ depends:: src @@\ @@\ clean:: @@\ RemoveFile(src) #define LinkFile(tofile,fromfile) @@\ XVARdef0 = fromfile @@\ tofile:: $(XVARuse0:/=\) @@\ RemoveFile($@) @@\ $(LN) $? $@ @@\ @@\ includes:: tofile @@\ @@\ depend:: tofile @@\ @@\ clean:: @@\ RemoveFile(tofile) #define NormalLibraryTarget(libname,objlist) @@\ AllTarget(LibraryTargetName(libname)) @@\ @@\ XVARdef0 = objlist @@\ @@\ LibraryTargetName(libname): $(XVARuse0:.o=.obj) $(EXTRALIBRARYDEPS) @@\ RemoveFile($@) @@\ MakeLibrary($@,$(XVARuse0:.o=.obj)) @@\ LinkBuildLibrary($@) #define NormalLibraryTarget2(libname,objlist1,objlist2) @@\ NormalLibraryTarget(libname,objlist1 objlist2) #define NormalLibraryTarget3(libname,objlist1,objlist2,objlist3) @@\ NormalLibraryTarget(libname,objlist1 objlist2 objlist3) #define NormalDepLibraryTarget(libname,deplist,objlist) @@\ AllTarget(LibraryTargetName(libname)) @@\ @@\ XVARdef0 = deplist @@\ XVARdef1 = objlist @@\ XVARdef2 = $(XVARuse1:/=\) @@\ @@\ LibraryTargetName(libname): $(XVARuse0:/=\) $(EXTRALIBRARYDEPS) @@\ RemoveFile($@) @@\ MakeLibrary($@,$(XVARuse2:.o=.obj)) @@\ LinkBuildLibrary($@) #define ProfiledLibraryTarget(libname,objlist) @@\ AllTarget(LibraryTargetNameSuffix(libname,_p)) @@\ @@\ XVARdef0 = objlist @@\ @@\ LibraryTargetNameSuffix(libname,_p): $(XVARuse0:.o=.obj) $(EXTRALIBRARYDEPS) @@\ RemoveFile($@) @@\ cd profiled @@\ MakeLibrary(..\$@,$(XVARuse0:.o=.obj)) @@\ cd .. #define DebuggedLibraryTarget(libname,objlist) @@\ AllTarget(LibraryTargetNameSuffix(libname,_d)) @@\ @@\ XVARdef0 = objlist @@\ @@\ LibraryTargetNameSuffix(libname,_d): $(XVARuse0:.o=.obj) $(EXTRALIBRARYDEPS) @@\ RemoveFile($@) @@\ cd debugger @@\ MakeLibrary(..\$@,$(XVARuse0:.o=.obj)) @@\ cd .. #ifndef UseInstalled #define ImakeDependency(target) @@\ target:: ProgramTargetName($(IMAKE)) @@\ @@\ ProgramTargetName($(IMAKE)): @@\ < $@ @@\ @@\ clean:: @@\ RemoveFile(DONE) #define CppScriptTarget(dst,src,defs,deplist) @@\ dst:: @@\ @echo sorry, unable to make $@ #define CppFileTarget(dst,src,defs,deplist) @@\ XFAKEVAR = X @@\ dst:: src deplist @@\ RemoveFile($@) @@\ $(PREPROCESSCMD) -I. <$@ @@\ XCOMM define $(XFAKEVAR)COMM XCOMM @@\ XCOMM include @@\ << @@\ defs @@\ << @@\ @@\ clean:: @@\ RemoveFiles(dst) #define InstallNamedTarget(step,srcname,flags,dest,dstname) @@\ XVARdef0 = $(DESTDIR)dest @@\ @@\ step:: srcname @@\ MakeDir($(XVARuse0:/=\)) @@\ $(INSTALL) $(INSTALLFLAGS) flags srcname $(XVARuse0:/=\)\\dstname #define InstallNamedTargetNoClobber(step,srcname,flags,dest,dstname) @@\ XVARdef0 = $(DESTDIR)dest @@\ @@\ step:: srcname @@\ MakeDir($(XVARuse0:/=\)) @@\ @if exist $(XVARuse0:/=\)\\dstname echo Not overwriting existing $(XVARuse0:/=\)\\dstname @@\ if not exist $(XVARuse0:/=\)\\dstname $(INSTALL) $(INSTALLFLAGS) flags srcname $(XVARuse0:/=\)\\dstname #define InstallLibrary(libname,dest) @@\ InstallTarget(install,LibraryTargetName(libname),$(INSTLIBFLAGS),dest) #define InstallScript(program,dest) /**/ #define InstallNamedProg(srcname,dstname,dest) @@\ install:: srcname @@\ @echo sorry, unable to install srcname #define InstallSharedLibrary(libname,rev,dest) @@\ InstallTarget(install,LibraryTargetName(libname),$(INSTLIBFLAGS),$(USRLIBDIR)) @@\ InstallTarget(install,libname.dll,$(INSTLIBFLAGS),dest) #define InstallSharedLibraryData(libname,rev,dest) #define MakeDLL(libname,solist) $(LD) @<< @@\ $(SHLIBLDFLAGS) -out:libname.dll libname.exp solist @@\ << #define SharedLibraryTarget(libname,rev,solist,down,up) @@\ AllTarget(libname.dll) @@\ @@\ CppFileTarget(libname.def,libname-def.cpp,-DLIBRARY_VERSION=rev,$(ICONFIGFILES)) @@\ @@\ XVARdef0 = solist @@\ @@\ LibraryTargetName(libname): $(XVARuse0:.o=.obj) libname.def $(EXTRALIBRARYDEPS) @@\ RemoveFile($@) @@\ MakeLibrary($@,-def:libname.def $(XVARuse0:.o=.obj)) @@\ LinkBuildLibrary($@) @@\ @@\ libname.dll: LibraryTargetName(libname) $(EXTRALIBRARYDEPS) @@\ RemoveFile(libname.dll) @@\ MakeDLL(libname,$(XVARuse0:.o=.obj) $(REQUIREDLIBS) $(EXTRA_LIBRARIES)) @@\ LinkBuildDLL(libname.dll) @@\ @@\ clean:: @@\ RemoveFile(LibraryTargetName(libname)) @@\ RemoveFile(libname.dll) #define SharedLibraryDataTarget(libname,rev,salist) #define ObjectCplusplusCompile(options) RemoveFile($@) @@\ $(CXX) -c $*.CCsuf @<< @@\ $(CFLAGS) options @@\ << #define CplusplusLinkRule LinkRule #define CplusplusProgramTargetHelper ProgramTargetHelper #ifndef ComplexCplusplusProgramTarget #define ComplexCplusplusProgramTarget(program) @@\ PROGRAM = ProgramTargetName(program) @@\ @@\ AllTarget(ProgramTargetName(program)) @@\ @@\ CplusplusProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\ @@\ DependTarget() @@\ LintTarget() @@\ @@\ clean:: @@\ RemoveFile(ProgramTargetName(program)) #endif /* ComplexCplusplusProgramTarget */ #ifndef UseInstalled # define LinkBuildDLL(binary) MakeDir($(BUILDBINDIR:/=\)) @@\ RemoveFile(Concat($(BUILDBINDIR:/=\)\,binary)) @@\ cd $(BUILDBINDIR:/=\) && $(LN) Concat($(BUILDBINTOP:/=\)\$(CURRENT_DIR:/=\)\,binary) . # ifdef LinkBuildBinary # undef LinkBuildBinary # endif # define LinkBuildBinary(binary) @@\ all:: $(BUILDBINDIR)\ProgramTargetName(binary) ProgramTargetName(binary) @@\ @@\ $(BUILDBINDIR)\ProgramTargetName(binary): ProgramTargetName(binary) @@\ MakeDir($(BUILDBINDIR:/=\)) @@\ RemoveFile($(BUILDBINDIR:/=\)\ProgramTargetName(binary))) @@\ cd $(BUILDBINDIR:/=\) && $(LN) $(BUILDBINTOP:/=\)\$(CURRENT_DIR:/=\)\ProgramTargetName(binary) . # ifdef LinkBuildLibrary # undef LinkBuildLibrary # endif # define LinkBuildLibrary(lib) MakeDir($(BUILDLIBDIR:/=\)) @@\ RemoveFile(Concat($(BUILDLIBDIR:/=\)\,lib)) @@\ cd $(BUILDLIBDIR:/=\) && $(LN) Concat($(BUILDLIBTOP:/=\)\$(CURRENT_DIR:/=\)\,lib) . #endif #ifndef ProjectUnsharedLibReferences #define ProjectUnsharedLibReferences(varname,libname,libsource,buildlibdir) @@\ Concat3(DEP,varname,LIB) = _UseCat($(USRLIBDIR)/lib,buildlibdir/,libname.lib) @@\ Concat(varname,LIB) = $(Concat3(DEP,varname,LIB)) @@\ LintLibReferences(varname,libname,libsource) #endif /* * ServerTargetWithFlags - generate rules to compile, link, and relink a server */ #ifndef ServerTargetWithFlags #define ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,flags) @@\ XVARdef0 = objects @@\ @@\ AllTarget(ProgramTargetName(server)) @@\ ProgramTargetName(server): subdirs $(XVARuse0:.o=.obj) libs @@\ MoveToBakFile($@) @@\ LinkRule($@,$(LDOPTIONS),$(XVARuse0:.o=.obj),libs $(LDLIBS) syslibs) @@\ @@\ Concat(load,server): @@\ MoveToBakFile(ProgramTargetName(server)) @@\ LinkRule(ProgramTargetName(server),$(LDOPTIONS),$(XVARuse0:.o=.obj),libs $(LDLIBS) syslibs) @@\ @@\ loadX:: Concat(load,server) @@\ @@\ ProofProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\ ProofLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\ @@\ InstallProgramWithFlags(server,$(BINDIR),flags) @@\ @@\ clean:: @@\ RemoveFile(ProgramTargetName(server)) #endif /* ServerTargetWithFlags */