XCOMM platform: $XConsortium: Win32.rules,v 1.40 94/03/28 17:11:24 matt Exp $ /* **************************************************************** * The followind line MUST be deleted after all: -I\\Misf58\users\cernlib\config \ @@\ **************************************************************** */ #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 /**/ #define BourneShell cmd /* #define BourneShell c:/hamilton/bin/csh -c */ /* LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(EXTRA_LDOPTIONS) $(THREADS_LDFLAGS) $(LOCAL_LDFLAGS) $(LDPRELIB) */ /* LDOPTIONS = $(CDEBUGFLAGS) $(EXTRA_LDOPTIONS) $(THREADS_LDFLAGS) $(LOCAL_LDFLAGS) $(LDPRELIB) */ .c.obj: $(CC) -c Win32Path($<) $(CFLAGS) #if HasCplusplus .CCsuf.obj: $(CXX) -c Win32Path($<) $(CFLAGS) #endif .F.Osuf: #define ProgramTargetName(target)target.exe #define RunProgram(progvar,options) Win32Path(progvar) options #define RemoveFile(file) (if exist Win32Path(file) $(RM) Win32Path(file)) #define MoveFile(file1,file2) (RemoveFile(file2) & CpCmd Win32Path(file1) Win32Path(file2) & RemoveFile(file1)) #define RemoveFiles(files) \ for %F in ( Win32Path(files) ) do RemoveFile(%F) #define MakeDir(dir) -$(MKDIRHIER) Win32Path(dir) #define LibObjCompile(dir,options) @@\ RemoveFiles($@ dir\$@) @@\ $(CC) -c $(CCOPTIONS) $(ALLDEFINES) options Win32Path($*.c) @@\ $(MV) Win32Path($@) Win32Path(dir\$@) #define BuildIncludesTop(srclist,dstsubdir,dstupdir) @@\ includes:: @@\ MakeDir($(BUILDINCDIR)) @@\ @(pushd Win32Path($(BUILDINCDIR)) & for %i in ( Win32Path(srclist) ) do \ @@\ RemoveFile(%i) & \ @@\ $(LN) Win32Path($(BUILDINCTOP)$(CURRENT_DIR)%i) . & \ @@\ popd) #define BuildIncludes(srclist,dstsubdir,dstupdir) @@\ includes:: @@\ MakeDir($(BUILDINCDIR)\dstsubdir) @@\ @( pushd Win32Path($(BUILDINCDIR)dstsubdir) & for %i in ( Win32Path(srclist) ) do \ @@\ RemoveFile(%i) & \ @@\ $(LN) Win32Path($(BUILDINCTOP)dstupdir$(CURRENT_DIR)%i) . & \ @@\ popd @@\ ) #define LinkFileList(step,list,dir,sub) @@\ step:: list @@\ rem @case '${MFLAGS}' in *[i]*) set +e;; esac; & \ @@\ echo " pushd" dir & pushd Win32Path(dir) & \ @@\ for %i in ( Win32Path(list) ) do (rem set -x || (RemoveFile(%i)) && $(LN) Win32Path(sub%i) .) #define LinkRule(program,options,objects,libraries) \ $(CCLINK) Concat(-Fe,program) options objects libraries $(EXTRA_LOAD_FLAGS) #define NormalProgramTarget(program,objects,deplibs,locallibs,syslibs) @@\ @@\ ProgramTargetName(program): SetWin32ObjSuffix(objects) deplibs @@\ RemoveTargetProgram($@) @@\ LinkRule($@,$(LDOPTIONS),SetWin32ObjSuffix(objects),locallibs $(LDLIBS) syslibs) @@\ @@\ clean:: @@\ RemoveFile(ProgramTargetName(program)) #define ProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib) @@\ ProgramTargetName(program): SetWin32ObjSuffix(objs) $(deplib) @@\ RemoveTargetProgram($@) @@\ LinkRule($@,$(LDOPTIONS),SetWin32ObjSuffix(objs),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 Win32Path(file) $(MV) Win32Path(file) Win32Path(file.bak) #define RMoveToBakFile(file) -RemoveFile(file.bak) @@\ MoveToBakFile(file) #define InstallMultipleDestFlags(step,list,dest,flags) @@\ XVARdef0 = Win32Path($(DESTDIR)dest) @@\ @@\ step:: list @@\ MakeDir($(XVARuse0)) @@\ for %i in ( Win32Path(list) ) do \ @@\ (rem set -x & $(INSTALL) $(INSTALLFLAGS) flags %i $(XVARuse0)) \ @@\ #define CleanTarget() @@\ clean:: @@\ RemoveFiles(FilesToClean ExtraFilesToClean) #define LibraryTargetName(libname)libname.lib #define LibraryTargetNameSuffix(libname,suffix)Concat(libname,suffix.lib) #define MakeLibrary(libname,objlist) \ ( echo Creating libname & \ @@\ (if exist Win32Path(libname) $(AR) -nologo -out$(colon)Win32Path(libname) Win32Path(libname) Win32Path(objlist) > NUL) & \ @@\ (if not exist Win32Path(libname) $(AR) -nologo -out$(colon)Win32Path(libname) Win32Path(objlist) > NUL) ) #define LinkSourceFile(src,dir) @@\ XVARdef0 = Concat(dir,src) @@\ @@\ src: $(XVARuse0) @@\ RemoveFile($@) @@\ $(LN) Win32Path($? $@) @@\ @@\ includes:: src @@\ @@\ depends:: src @@\ @@\ clean:: @@\ RemoveFile(src) #define LinkFile(tofile,fromfile) @@\ tofile:: fromfile @@\ RemoveFile($@) @@\ $(LN) Win32PAth($? $@) @@\ @@\ includes:: tofile @@\ @@\ depend:: tofile @@\ @@\ clean:: @@\ RemoveFile(tofile) #define NormalLibraryTarget(libname,objlist) @@\ AllTarget(LibraryTargetName(libname)) @@\ @@\ XVARdef0 = objlist @@\ @@\ LibraryTargetName(libname): SetWin32ObjSuffix(objlist) @@\ RemoveFile($@) @@\ MakeLibrary($@,SetWin32ObjSuffix(objlist)) #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 = Win32Path(XVARuse1) @@\ @@\ LibraryTargetName(libname): $(XVARuse0) @@\ RemoveFile($@) @@\ MakeLibrary($@,SetWin32ObjSuffix($(XVARuse2))) #define ProfiledLibraryTarget(libname,objlist) @@\ AllTarget(LibraryTargetNameSuffix(libname,_p)) @@\ @@\ XVARdef0 = objlist @@\ @@\ LibraryTargetNameSuffix(libname,_p): SetWin32ObjSuffix($(XVARuse0)) @@\ RemoveFile($@) @@\ pushd profiled @@\ MakeLibrary(..\$@,SetWin32ObjSuffix($(XVARuse0))) @@\ popd #define DebuggedLibraryTarget(libname,objlist) @@\ AllTarget(LibraryTargetNameSuffix(libname,_d)) @@\ @@\ XVARdef0 = objlist @@\ @@\ LibraryTargetNameSuffix(libname,_d): SetWin32ObjSuffix($(XVARuse0)) @@\ RemoveFile($@) @@\ ( pushd debugger & \ @@\ MakeLibrary(..\$@,SetWin32ObjSuffix($(XVARuse0))) & \ @@\ popd ) #ifndef UseInstalled #define ImakeDependency(target) @@\ target:: ProgramTargetName($(IMAKE)) @@\ @@\ ProgramTargetName($(IMAKE)): @@\ pushd Win32Path($(IMAKESRC)) @@\ if exist Makefile $(MAKE) all @@\ if not exist Makefile $(MAKE) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)" @@\ popd @@\ #define ImakeDependency(target) #endif #ifndef UseInstalled #define DependDependency() @@\ depend:: ProgramTargetName($(DEPEND)) @@\ @@\ ProgramTargetName($(DEPEND)): @@\ pushd Win32Path($(DEPENDSRC)) @@\ $(MAKE) @@\ popd #endif #define DependTarget() @@\ DependDependency() @@\ @@\ depend:: @@\ Win32Path($(DEPEND)) $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS) #define DependTarget3(srcs1,srcs2,srcs3) @@\ DependDependency() @@\ @@\ depend:: @@\ Win32Path($(DEPEND)) $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs1 srcs2 srcs3 #define ForceSubdirs(dirs) @@\ Avoid.Error dirs: FRC @@\ @pushd Win32Path($@) @@\ @echo making all in Win32Path($(CURRENT_DIR)$@)... @@\ $(MAKE) $(MFLAGS) PassCDebugFlags all @@\ popd @@\ @@\ FRC: #define MakeMakeSubdirs(dirs,target) @@\ XVARdef0 = dirs @@\ XVARdef1 = $$ @@\ @@\ target:: @@\ @$(MAKE) $(MFLAGS) -f #ifndef UseInstalled #define ImakeSubCmdHelper ..\$(IMAKE) -I..\$(IRULESRC) $(IMAKE_DEFINES) #else #define ImakeSubCmdHelper $(IMAKE_CMD) #endif /* * MakeSubdirMakefile - rule to create subdirectory/Makefile, one at a time */ #ifdef _DF90_ #define MakeSubdirMakefile(dirs) @@\ %/Makefile: %/Imakefile @@\ if not exist Win32Path($(dir $@)NUL) md Win32Path($(dir $@)) @@\ ( pushd Win32Path($(dir $@)) & \ @@\ RemoveFile(Makefile) & \ @@\ ImakeSubCmdHelper -D_DF90_ -DTOPDIR=$(TOP) \ @@\ -DCURDIR=$(CURRENT_DIR)/$(patsubst %/,%,$(dir $@)) \ @@\ -DPackageTop=$(PACKAGETOP) \ @@\ -DPackageName=$(PACKAGE_NAME) \ @@\ -f $< & \ @@\ popd \ @@\ ) #elif _IRC_ #define MakeSubdirMakefile(dirs) @@\ %/Makefile: %/Imakefile @@\ if not exist Win32Path($(dir $@)NUL) md Win32Path($(dir $@)) @@\ ( pushd Win32Path($(dir $@)) & \ @@\ RemoveFile(Makefile) & \ @@\ ImakeSubCmdHelper -D_IRC_ -DTOPDIR=$(TOP) \ @@\ -DCURDIR=$(CURRENT_DIR)/$(patsubst %/,%,$(dir $@)) \ @@\ -DPackageTop=$(PACKAGETOP) \ @@\ -DPackageName=$(PACKAGE_NAME) \ @@\ -f $< & \ @@\ popd \ @@\ ) #else #define MakeSubdirMakefile(dirs) @@\ %/Makefile: %/Imakefile @@\ if not exist Win32Path($(dir $@)NUL) md Win32Path($(dir $@)) @@\ ( pushd Win32Path($(dir $@)) & \ @@\ RemoveFile(Makefile) & \ @@\ popd \ @@\ ) & \ @@\ ImakeSubCmdHelper -DTOPDIR=$(TOP) \ @@\ -DCURDIR=$(CURRENT_DIR)/$(patsubst %/,%,$(dir $@)) \ @@\ -DPackageTop=$(PACKAGETOP) \ @@\ -DPackageName=$(PACKAGE_NAME) \ @@\ -f $< -s $@ #endif #define NamedTargetSubdirs(name,dirs,verb,flags,subname) @@\ name:: $(foreach dir,dirs,$(dir)/Makefile) @@\ @@\ name:: @@\ for %i in ( Win32Path(dirs) ) \ @@\ do \ @@\ (pushd %i & echo verb in Win32Path($(CURRENT_DIR)%i)... & \ @@\ $(MAKE) $(MFLAGS) flags subname & \ @@\ popd ) #define UnsharedLibReferences(varname,libname,libsource) @@\ Concat3(DEP,varname,LIB) = _UseCat($(USRLIBDIR)/,libsource/,libname.lib) @@\ Concat(varname,LIB) = LoaderLibPrefix _Use(libname.lib,$(Concat3(DEP,varname,LIB))) @@\ LintLibReferences(varname,libname,libsource) #define SharedLibReferences(varname,libname,libsource,revname,rev) @@\ revname = rev @@\ UnsharedLibReferences(varname,libname,libsource) #define SubdirLibraryRule(objlist) @@\ XVARdef0 = objlist @@\ @@\ all:: DONE @@\ @@\ DONE: SetWin32ObjSuffix($(XVARuse0)) @@\ RemoveFile($@) @@\ echo - > $@ @@\ @@\ clean:: @@\ RemoveFile(DONE) #define CppScriptTarget(dst,src,defs,deplist) @@\ dst:: @@\ @echo sorry, unable to make $@ #define CppFileTarget(dst,src,defs,deplist) @@\ XVARdef0 = src @@\ @@\ dst:: src deplist @@\ RemoveFile($@) @@\ $(PREPROCESSCMD) -I. defs Win32Path(Concat(-Tc,$(XVARuse0))) >$@ @@\ @@\ clean:: @@\ RemoveFiles(dst) #define InstallNamedTarget(step,srcname,flags,dest,dstname) @@\ XVARdef0 = $(DESTDIR)dest/ @@\ @@\ step:: srcname @@\ MakeDir(Win32Path($(XVARuse0))) @@\ $(INSTALL) $(INSTALLFLAGS) flags Win32Path(srcname) Win32Path($(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 make 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) SharedLibraryLoadFlags -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): SetWin32ObjSuffix(XVARuse0) libname.def @@\ RemoveFile($@) @@\ MakeLibrary($@,-def$(colon)libname.def SetWin32ObjSuffix($(XVARuse0))) @@\ RemoveFile(libname.dll) @@\ MakeDLL(libname,SetWin32ObjSuffix($(XVARuse0)) $(REQUIREDLIBS) $(EXTRA_LIBRARIES)) @@\ @@\ libname.dll: LibraryTargetName(libname) @@\ RemoveFile(libname.dll) @@\ MakeDLL(libname,SetWin32ObjSuffix($(XVARuse0)) $(REQUIREDLIBS) $(EXTRA_LIBRARIES)) @@\ @@\ clean:: @@\ RemoveFile(LibraryTargetName(libname)) @@\ RemoveFile(libname.dll) #define SharedLibraryDataTarget(libname,rev,salist) #define ObjectCplusplusCompile(options) RemoveFile($@) @@\ $(CXX) -c Win32Path($*.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 */ /* #define MakeSubdirsMakefiles(dirs,target) @@\ target:: @@\ \users\cernlib\config\tree.cmd target "$(MFLAGS)" "$(TOP)" "$(CURRENT_DIR)" "$(PACKAGETOP)" "$(VPATH)" "$(MKDIRHIER)" ( dirs ) */ #define MakeDepRules @@\ /* @@\ * @@\ * VF. Add rules and target for gmake style of checking dependencies @@\ * 951113 @@\ * @@\ */ @@\ @@\ /* emptyrule is needed to avoid picking a default rule from included files. @@\ */ @@\ @@\ emptyrule:: @@\ @@\ .SUFFIXES: .d .F @@\ @@\ .c.d: @@\ @echo # dependences for $(@:/=\) >$(@:/=\) @@\ makedepend -M -f Win32Path($@) Win32Path($(ALLDEFINES)) Win32Path($<) >Win32Path($@) @@\ @@\ .F.d: @@\ @echo # dependences for Win32Path($@) >Win32Path($@) @@\ makedepend -M -f Win32Path($@) Win32Path($(ALLDEFINES)) Win32Path($<) @@\ /* #include "win32.fortran.rules" */