XCOMM $XFree86: xc/config/cf/xf86.rules,v 3.38 2006/05/16 16:01:50 tsi Exp $
/*
 * Copyright (c) 1994-2004 by The XFree86 Project, Inc.
 * All rights reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject
 * to the following conditions:
 *
 *   1.  Redistributions of source code must retain the above copyright
 *       notice, this list of conditions, and the following disclaimer.
 *
 *   2.  Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer
 *       in the documentation and/or other materials provided with the
 *       distribution, and in the same place and form as other copyright,
 *       license and disclaimer information.
 *
 *   3.  The end-user documentation included with the redistribution,
 *       if any, must include the following acknowledgment: "This product
 *       includes software developed by The XFree86 Project, Inc
 *       (http://www.xfree86.org/) and its contributors", in the same
 *       place and form as other third-party acknowledgments.  Alternately,
 *       this acknowledgment may appear in the software itself, in the
 *       same form and location as other such third-party acknowledgments.
 *
 *   4.  Except as contained in this notice, the name of The XFree86
 *       Project, Inc shall not be used in advertising or otherwise to
 *       promote the sale, use or other dealings in this Software without
 *       prior written authorization from The XFree86 Project, Inc.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE XFREE86 PROJECT, INC OR ITS CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * Rules needed to build the XFree86 X Servers
 */

#ifndef ObjectMapIncludeFromSpecialSource
#define ObjectMapIncludeFromSpecialSource(dst,src,flags)		@@\
dst.c:	src.c								@@\
	RemoveFile($@)							@@\
	echo "#include \"mfbmap.h\"" > $@				@@\
	echo "#include \"$?\"" >> $@					@@\
									@@\
SpecialCObjectRule(dst,NullParameter,flags)				@@\
									@@\
depend::	dst.c							@@\
									@@\
clean::									@@\
	RemoveFile(dst.c)
#endif


/*
 * Rules for building config files from scripts
 */

#ifndef Depend
# define Depend depend
#endif
 
#ifndef ConfigTargetLong
#define ConfigTargetLong(target,dep,script,args,extra)			@@\
all:: Configure								@@\
									@@\
Configure:: target.o							@@\
									@@\
target.c: script dep							@@\
	$(MAKE) $(PASSMFLAGS) Makefile					@@\
	$(MAKE) $(PASSMFLAGS) extra Concat(Build,target)		@@\
									@@\
Concat(Build,target):							@@\
	$(RM) target.c							@@\
	$(SHELL) script args						@@\
									@@\
clean::									@@\
	$(RM) target.c
#endif

#define ConfigTarget(target,dep,script,args) ConfigTargetLong(target,dep,script,args,Depend)

#define ConfigTargetNoDepend(target,dep,script,args) ConfigTargetLong(target,dep,script,args,)

#ifndef DriverObjectList
#define DriverObjectList(drivers,list)					@@\
list: $(ICONFIGFILES) drivers						@@\
	RemoveFile(list)						@@\
	@echo Creating list for drivers; \				@@\
	DRIVERS="drivers"; \						@@\
	if [ x"$$DRIVERS" != x ]; then \				@@\
	  for i in $$DRIVERS; do \					@@\
	    DRIVER="$$i/*_drv.o"; \					@@\
	    for j in $$DRIVER; do \					@@\
	      echo $$j >> list; \					@@\
	    done; \							@@\
	  done; \							@@\
	else \								@@\
	  echo "" > list; \						@@\
	fi								@@\
									@@\
clean::									@@\
	RemoveFile(list)
#endif

/*
 * Rules for installing Driver SDK parts (target is install.sdk)
 */

#ifndef InstallDriverSDKNonExecFile
#if !DoLoadableServer
#define InstallDriverSDKNonExecFile(file,dest)				/**/
#else
#define InstallDriverSDKNonExecFile(file,dest)				@@\
install.sdk::								@@\
	MakeDir($(DESTDIR)dest)						@@\
	$(INSTALL) -c $(INSTDATFLAGS) file $(DESTDIR)dest
#endif
#endif

#ifndef InstallDriverSDKLibrary
#if !DoLoadableServer
#define InstallDriverSDKLibrary(libname,dest)				/**/
#else
#define InstallDriverSDKLibrary(libname,dest)				@@\
install.sdk::								@@\
	MakeDir($(DESTDIR)dest)						@@\
	$(INSTALL) -c $(INSTLIBFLAGS) Concat(lib,libname.a) $(DESTDIR)dest @@\
	RanLibrary($(RANLIBINSTFLAGS) Concat($(DESTDIR)dest/lib,libname.a))
#endif
#endif

#ifndef InstallDriverSDKNamedLibrary
#if !DoLoadableServer
#define InstallDriverSDKNamedLibrary(libname,dlibname,dest)		/**/
#else
#define InstallDriverSDKNamedLibrary(libname,dlibname,dest)		@@\
install.sdk::								@@\
	MakeDir($(DESTDIR)dest)						@@\
	$(INSTALL) -c $(INSTLIBFLAGS) Concat(lib,libname.a) \		@@\
	  Concat($(DESTDIR)dest/lib,dlibname.a)				@@\
	RanLibrary($(RANLIBINSTFLAGS) Concat($(DESTDIR)dest/lib,dlibname.a))
#endif
#endif

#ifndef InstallDriverSDKNamedNonExec
#if !DoLoadableServer
#define InstallDriverSDKNamedNonExec(srcname,dstname,dest)		/**/
#else
#define InstallDriverSDKNamedNonExec(srcname,dstname,dest)		@@\
install.sdk::								@@\
	MakeDir($(DESTDIR)dest)						@@\
	$(INSTALL) -c $(INSTDATFLAGS) srcname $(DESTDIR)dest/dstname
#endif
#endif

#ifndef InstallDriverSDKNamedProg
#if !DoLoadableServer
#define InstallDriverSDKNamedProg(srcname,dstname,dest)			/**/
#else
#define InstallDriverSDKNamedProg(srcname,dstname,dest)			@@\
install.sdk::								@@\
	MakeDir($(DESTDIR)dest)						@@\
	$(INSTALL) -c $(INSTBINFLAGS) srcname $(DESTDIR)dest/dstname
#endif
#endif

#ifndef InstallDriverSDKSubdirs
#if !DoLoadableServer
#define InstallDriverSDKSubdirs(dirs)					/**/
#else
#define InstallDriverSDKSubdirs(dirs) \
NamedTargetSubdirs(install.sdk,dirs,"installing driver SDK",DESTDIR='$(DESTDIR)',install.sdk)
#endif
#endif

#ifndef InstallDriverSDKMultipleDestFlags
#if !DoLoadableServer
#define InstallDriverSDKMultipleDestFlags(list,dest,flags)		/**/
#else
#define InstallDriverSDKMultipleDestFlags(list,dest,flags) \
InstallMultipleDestFlags(install.sdk,list,dest,flags)
#endif
#endif

#ifndef InstallDriverSDKDynamicModule
#if !DoLoadableServer
#define InstallDriverSDKDynamicModule(module,dest,subdir)		/**/
#else
#define InstallDriverSDKDynamicModule(module,dest,subdir)		@@\
install.sdk::								@@\
	MakeDir($(DESTDIR)dest/subdir)					@@\
	$(INSTALL) -c module $(DESTDIR)dest/subdir
#endif
#endif

#ifndef InstallDriverSDKObjectModule
#if !DoLoadableServer
#define InstallDriverSDKObjectModule(module,dest,subdir)		/**/
#else
#if MakeDllModules
#define InstallDriverSDKObjectModule(module,dest,subdir)		@@\
InstallDriverSDKDynamicModule(Concat(module,_drv.so),dest,subdir)
#else
#define InstallDriverSDKObjectModule(module,dest,subdir)		@@\
InstallDriverSDKDynamicModule(Concat(module,_drv.o),dest,subdir)
#endif
#endif
#endif


#ifndef InstallDriverSDKObjectSubModule
#if !DoLoadableServer
#define InstallDriverSDKObjectSubModule(module,dest,subdir)		/**/
#else
#if MakeDllModules
#define InstallDriverSDKObjectSubModule(module,dest,subdir)		@@\
InstallDriverSDKDynamicModule(Concat(module,.o),dest,subdir)
#else
#define InstallDriverSDKObjectSubModule(module,dest,subdir)		@@\
InstallDriverSDKDynamicModule(Concat(module,.o),dest,subdir)
#endif
#endif
#endif

#ifndef InstallDriverSDKLibraryModule
#if !DoLoadableServer
#define InstallDriverSDKLibraryModule(module,dest,subdir)		/**/
#else
#if MakeDllModules
#define InstallDriverSDKLibraryModule(module,dest,subdir)		@@\
InstallDriverSDKDynamicModule(Concat3(lib,module,.so),dest,subdir)
#else
#define InstallDriverSDKLibraryModule(module,dest,subdir)		@@\
InstallDriverSDKDynamicModule(ModuleLibraryTargetName(module),dest,subdir)
#endif
#endif
#endif

#ifndef ServerDriverSDKTarget
#if !DoLoadableServer
#define ServerDriverSDKTarget(program)					/**/
#else
#define ServerDriverSDKTarget(program)					@@\
InstallDriverSDKProgramWithFlags(program,$(DRIVERSDKDIR),$(_NOOP_))
#endif
#endif

#ifndef InstallDriverSDKProgramWithFlags
#if !DoLoadableServer
#define InstallDriverSDKProgramWithFlags(program,dest,flags)		/**/
#else
#define InstallDriverSDKProgramWithFlags(program,dest,flags)		@@\
InstallTarget(install.sdk,ProgramTargetName(program),$(INSTPGMFLAGS) flags,dest)
#endif
#endif
