XCOMM $XFree86: mit/server/Imakefile,v 2.15 1993/10/07 13:53:44 dawes Exp $
XCOMM $XConsortium: Imakefile,v 1.135 91/09/22 10:27:51 rws Exp $
/*
 * Server Master Makefile
 */

#include <Server.tmpl>

#define StdSubdirs dix os ddx/mi
#define MFBSubdirs StdSubdirs ddx/mfb
#define CFBSubdirs MFBSubdirs ddx/cfb
#define StdLibs $(DIX) $(OS) $(MI) $(EXTENSIONS)
#define NoMFBLibs $(DIX) $(OS) $(FONT) $(MI) $(EXTENSIONS)
#define NoMFBBareLibs $(DIX) $(OS) $(FONT) $(MI)
#define MFBBareLibs $(DIX) $(OS) $(FONT) $(MFB) $(MI)
#define MFBLibs MFBBareLibs $(EXTENSIONS)
#define CFBBareLibs $(DIX) $(OS) $(FONT) $(CFB) $(MFB) $(MI)
#define CFBLibs CFBBareLibs $(EXTENSIONS)

#if BuildPexExt
   PEXTENSIONSRC = $(EXTENSIONSRC)/server/PEX
         PEXLIBS = $(PEXTENSIONSRC)/dipex/dispatch/libdidipex.a \
                   $(PEXTENSIONSRC)/dipex/swap/libdiswapex.a \
                   $(PEXTENSIONSRC)/dipex/objects/libdiobpex.a \
                   $(PEXTENSIONSRC)/dipex/dispatch/libdidipex.a \
                   $(PEXTENSIONSRC)/ddpex/mi/level4/libddpex4.a \
                   $(PEXTENSIONSRC)/ddpex/mi/level3/libddpex3.a \
                   $(PEXTENSIONSRC)/ddpex/mi/shared/libddpexs.a \
                   $(PEXTENSIONSRC)/ddpex/mi/level2/libddpex2.a \
                   $(PEXTENSIONSRC)/ddpex/mi/level1/libddpex1.a \
		   $(PEXTENSIONSRC)/ospex/libospex.a 
#endif
#if BuildXInputExt
      OTHEREXTS = $(EXTENSIONSRC)/server/xinput/libxinput.a
#endif

        DEPDIRS = $(FONTSRC)/lib/font $(EXTENSIONSRC)/server
     NONPEXEXTS = $(OTHEREXTS) $(EXTENSIONSRC)/server/libext.a
     EXTENSIONS = $(NONPEXEXTS) $(PEXLIBS)
         XAULIB = $(XAUTHSRC)/libXau.a
#if Amoeba || Minix
       XDMCPLIB =
#else
       XDMCPLIB = $(XDMCPLIBSRC)/libXdmcp.a
#endif
             OS = os/libos.a $(XAULIB) $(XDMCPLIB)
        BSDEMUL = $(LIBSRC)/Berk/Berklib.o
            MFB = ddx/mfb/libmfb.a
            CFB = ddx/cfb/libcfb.a
             MI = ddx/mi/libmi.a
            DIX = dix/libdix.a
           FONT = $(FONTSRC)/lib/font/libfont.a $(RENDERERLIBS)
#if i386Mach
#ifdef i386Mach_BsdTree
   EXTRASYSLIBS = /usr/lib/libmach.a
#else
   EXTRASYSLIBS = /usr/misc/.mach/lib/libmach.a
#endif
#endif
#ifndef XFree86Version
#if HasSdbm
         DBMLIB = -lsdbm
#else
#if Amoeba || Minix
         DBMLIB = ../lib/sdbm/libsdbm.a
#else
#if !i386Bsd
         DBMLIB = -ldbm
#endif
#endif
#endif
#endif
        SYSLIBS = -lm $(DBMLIB) $(MALLOCLIBS) $(EXTRASYSLIBS)
           CBRT = ddx/mi/cbrt.o

XCOMM
XCOMM This turns off the default rule for compiling .c files because
XCOMM this makefile does not really know how to build it.  This is really
XCOMM just a hack because of the Sun version of make and nfs.
XCOMM
.c.o:

/*****************************************************************************
 *		  ALL definitions, add one for each server                   *
 *****************************************************************************/

#if XqdssServer
ALL1 = Xqdss
#endif

#if XqvssServer
#if XqdssServer
ALL2 = Xqvss
#else
ALL1 = Xqvss
#endif
#endif

#if XdecServer
ALL1 = Xdec
#endif

#if XmfbpmaxServer
ALL1 = Xmfbpmax
#endif

#if XcfbpmaxServer
#if XmfbpmaxServer
ALL2 = Xcfbpmax
#else
ALL1 = Xcfbpmax
#endif
#endif

#if XsunMonoServer
#if XsunServer
ALL2 = XsunMono
#else
ALL1 = XsunMono
#endif
#endif

#if XsunServer
ALL1 = Xsun
#endif

#if XibmServer
ALL1 = Xibm
#endif

#if XtekServer
ALL1 = Xtek
#endif

#if XmacIIServer
ALL1 = XmacII
#endif

#if XlunaServer
ALL1 = Xluna
#endif

#if XmipsServer
ALL1 = Xmips
#endif

#ifdef XFree86Version
ALL1 = xf86all
#endif

#if XnonServer
ALL2 = Xnon
#endif

/* end ALL definitions */

ALL = $(ALL1) $(ALL2)

all: $(ALL)


/*****************************************************************************
 *		  Build rule blocks, add one for each server                 *
 *****************************************************************************/


#if XqdssServer
XCOMM
XCOMM Digital qdss server
XCOMM
SUBDIRS0 = MFBSubdirs ddx/dec/lk201
SUBDIRS1 = ddx/dec/qdss ddx/dec/qdss/libtl
QDSSDIRS = $(SUBDIRS0) $(SUBDIRS1) $(DEPDIRS)
QDSSOBJS = ddx/dec/qdss/init.o ddx/dec/qdss/qdss_io.o ddx/dec/lk201/lk201.o
QDSSLIBS = ddx/dec/qdss/libqdss.a ddx/dec/qdss/libtl/libtl.a \
           ddx/dec/qdss/libqdss.a MFBLibs

ServerTarget(Xqdss,$(QDSSDIRS),$(QDSSOBJS),$(QDSSLIBS),$(SYSLIBS))
#endif /* XqdssServer */


#if XqvssServer
XCOMM
XCOMM Digital qvss server
XCOMM
SUBDIRS0 = MFBSubdirs ddx/dec/lk201
SUBDIRS2 = ddx/dec/qvss
QVSSDIRS = $(SUBDIRS0) $(SUBDIRS2) $(DEPDIRS)
QVSSOBJS = ddx/dec/qvss/init.o ddx/dec/qvss/qvss_io.o ddx/dec/lk201/lk201.o
QVSSLIBS = MFBLibs

ServerTarget(Xqvss,$(QVSSDIRS),$(QVSSOBJS),$(QVSSLIBS),$(SYSLIBS))
#endif /* XqvssServer */


#if XdecServer
XCOMM
XCOMM Digital MIPS based WS server (ultrix 4.2 and beyond)
XCOMM
SUBDIRS0 = CFBSubdirs ddx/dec/ws
DECDIRS = $(SUBDIRS0) $(DEPDIRS)
DECOBJS = ddx/dec/ws/init.o
DECLIBS = ddx/dec/ws/libdec.a CFBLibs

ServerTarget(Xdec,$(DECDIRS),$(DECOBJS),$(DECLIBS),$(SYSLIBS))
#endif /* XdecServer */


#if XmfbpmaxServer
XCOMM
XCOMM Digital mfbpmax server
XCOMM
SUBDIRS0 = MFBSubdirs
SUBDIRS2 = ddx/dec/lk201
SUBDIRS3 = ddx/dec/mfbpmax
PMAXMFBDIRS = $(SUBDIRS0) $(SUBDIRS2) $(SUBDIRS3) $(DEPDIRS)
PMAXMFBOBJS = ddx/dec/mfbpmax/init.o ddx/dec/mfbpmax/mfbpmax_io.o ddx/dec/lk201/lk201.o
PMAXMFBLIBS = MFBLibs

ServerTarget(Xmfbpmax,$(PMAXMFBDIRS),$(PMAXMFBOBJS),$(PMAXMFBLIBS),$(SYSLIBS))
#endif /* XmfbpmaxServer */


#if XcfbpmaxServer
XCOMM
XCOMM Digital cfbpmax server
XCOMM
SUBDIRS0 = MFBSubdirs
SUBDIRS1 = ddx/cfb ddx/dec/cfbpmax
SUBDIRS2 = ddx/dec/lk201
PMAXCFBDIRS = $(SUBDIRS0) $(SUBDIRS1) $(SUBDIRS2) $(DEPDIRS)
PMAXCFBOBJS = ddx/dec/cfbpmax/init.o ddx/dec/cfbpmax/cfbpmax_io.o \
	ddx/dec/cfbpmax/cfbpmaxcolor.o ddx/dec/lk201/lk201.o
PMAXCFBLIBS = CFBLibs

ServerTarget(Xcfbpmax,$(PMAXCFBDIRS),$(PMAXCFBOBJS),$(PMAXCFBLIBS),$(SYSLIBS))
#endif /* XcfbpmaxServer */


#if XsunServer
XCOMM
XCOMM Sun server
XCOMM
#if UseSunWindowsInServer
SUNWINDOWSLIBS = -lsunwindow -lpixrect
#endif
SUBDIRS0 = MFBSubdirs
SUBDIRS1 = ddx/cfb
SUBDIRS2 = ddx/sun
SUNDIRS = $(SUBDIRS0) $(SUBDIRS1) $(SUBDIRS2) $(DEPDIRS)
SUNOBJS = ddx/sun/sunInit.o
SUNLIBS = ddx/sun/libsun.a CFBLibs
SUNSYSLIBS = $(SYSLIBS) $(SUNWINDOWSLIBS)

ServerTarget(Xsun,$(SUNDIRS),$(SUNOBJS),$(SUNLIBS),$(SUNSYSLIBS))
#endif /* XsunServer */


#if XsunMonoServer
XCOMM
XCOMM Sun monochrome server
XCOMM
#if UseSunWindowsInServer
SUNWINDOWSLIBS = -lsunwindow -lpixrect
#endif
SUBDIRS0 = MFBSubdirs
SUBDIRS2 = ddx/sun
SUNMDIRS = $(SUBDIRS0) $(SUBDIRS2) $(DEPDIRS)
SUNMOBJS = ddx/sun/sunInitMono.o ddx/sun/sunInitExtMono.o
SUNMLIBS = ddx/sun/libsun.a MFBBareLibs $(NONPEXEXTS)
#if Amoeba
SUNSYSLIBS = $(CBRT) $(SYSLIBS)
#else
SUNSYSLIBS = $(SYSLIBS) $(SUNWINDOWSLIBS)
#endif

ServerTarget(XsunMono,$(SUNMDIRS),$(SUNMOBJS),$(SUNMLIBS),$(SUNSYSLIBS))
#endif /* XsunMonoServer */


#if XibmServer
XCOMM
XCOMM IBM server
XCOMM
#if SpecialMalloc
IBMALLOCLIB = ddx/ibm/common/libibmalloc.a
#else
IBMALLOCLIB = 
#endif
SUBDIRS0 = CFBSubdirs ddx/ibm
IBMDIRS = $(SUBDIRS0) $(DEPDIRS)
IBMOBJS = ddx/ibm/common/ibmcomm.o ddx/ibm/common/ibmDate.o ddx/ibm/pgc/pgc.o
IBMLIBS = ddx/ibm/AIX/hft.o ddx/ibm/libibm.a $(IBMALLOCLIB) CFBLibs

ServerTarget(Xibm,$(IBMDIRS),$(IBMOBJS),$(IBMLIBS),$(SYSLIBS))
#endif /* XibmServer */


#if XtekServer
XCOMM
XCOMM Tektronix server
XCOMM
SUBDIRS0 = CFBSubdirs ddx/tek
TEKDIRS = $(SUBDIRS0) $(DEPDIRS)
TEKOBJS = ddx/tek/pegInit.o
TEKLIBS = ddx/tek/libtek.a CFBLibs
TEKSYSLIBS = $(CBRT) $(SYSLIBS)

ServerTarget(Xtek,$(TEKDIRS),$(TEKOBJS),$(TEKLIBS),$(TEKSYSLIBS))
#endif /* XtekServer */


#if XmacIIServer
XCOMM
XCOMM Apple MacII server
XCOMM
SUBDIRS0 = CFBSubdirs ddx/macII
MACIIDIRS = $(SUBDIRS0) $(DEPDIRS)
MACIIOBJS = ddx/macII/macIIInitS.o ddx/macII/macIIColor.o
MACIILIBS = ddx/macII/libmacII.a CFBLibs
MACIISYSLIBS = $(CBRT) $(SYSLIBS)
 
ServerTarget(XmacII,$(MACIIDIRS),$(MACIIOBJS),$(MACIILIBS),$(MACIISYSLIBS))
#endif /* XmacIIServer */


#if XlunaServer
XCOMM
XCOMM OMRON Luna server
XCOMM
SUBDIRS0 = MFBSubdirs ddx/omron
LUNADIRS = $(SUBDIRS0) $(DEPDIRS)
LUNAOBJS = ddx/omron/omronInit.o
#ifdef uniosu
LUNALIBS = ddx/omron/libomron.a MFBLibs $(BSDEMUL)
#else
LUNALIBS = ddx/omron/libomron.a MFBLibs
#endif

ServerTarget(Xluna,$(LUNADIRS),$(LUNAOBJS),$(LUNALIBS),$(SYSLIBS))
#endif /* XlunaServer */


#if XmipsServer
XCOMM
XCOMM MIPS server
XCOMM
SUBDIRS0 = CFBSubdirs ddx/mips
MIPSDIRS = $(SUBDIRS0) $(DEPDIRS)
MIPSOBJS = ddx/mips/mipsInit.o
MIPSLIBS = ddx/mips/libmips.a CFBLibs
MIPSSYSLIBS = $(SYSLIBS) -lc /usr/lib/libc.a
 
ServerTarget(Xmips,$(MIPSDIRS),$(MIPSOBJS),$(MIPSLIBS),$(MIPSSYSLIBS))
#endif /* XmipsServer */


#ifdef XFree86Version
XCOMM
XCOMM XFree86
XCOMM
XCOMM This stuff is common to all XFree86 servers
XCOMM

#include <xf86.rules>

#ifdef XFree86DefaultServer
XF86DEFSERVER = XFree86DefaultServer
#endif

#ifdef i386SVR3Architecture
XF86SYSLIBS = $(CBRT) $(BSDEMUL)
#endif
#if defined(LinuxArchitecture) || defined(Amoeba) || defined(Minix)
XF86SYSLIBS = $(CBRT)
#endif

#if SpecialMalloc
MALLOCLIBS = -ldbmalloc
#endif

INSTPGMFLAGS = $(INSTUIDFLAGS)     /* server must be suid root  */

     SUBDIRS0 = include StdSubdirs ddx/x386
XF86COMMONLIB = ddx/x386/common/libx386.a
    XF86OSLIB = ddx/x386/os-support/libxf86_os.a
    XF86HWLIB = ddx/x386/common_hw/libxf86_hw.a
XF86COMMONOBJ = $(RENDERERCONFOBJ) ddx/x386/common/xf86_Option.o

/* Common rules */

$(CONFIGSRC)/X386Conf.tmpl: $(ICONFIGFILES)
	@echo Checking in $(CONFIGSRC)...
	@cd $(CONFIGSRC); set -x; $(MAKE) $(MFLAGS) Makefiles

$(RENDERERCONFOBJ): $(ICONFIGFILES)
	@for i in $(RENDERERCONFSUBDIR); do \
	(echo Checking in $$i...; cd $$i; set -x; \
	$(MAKE) $(MFLAGS) Configure); done

#if ExtraRenderers
$(RENDERERLIBS):: $(ICONFIGFILES)
	@echo Checking in $(RENDERERSRC)...; cd $(RENDERERSRC); set -x; \
	$(MAKE) $(MFLAGS) SUBDIRS="$(RENDERERSUBDIRS)" Makefiles; \
	$(MAKE) $(MFLAGS) SUBDIRS="$(RENDERERSUBDIRS)" Depend; \
	$(MAKE) $(MFLAGS) SUBDIRS="$(RENDERERSUBDIRS)" subdirs
	touch $(RENDERERLIBS)
	@for i in $(RENDERERLIBS); do (set -x; \
	RanLibrary($$i)); done
#endif

/*
 * Adding a new XFree86 server:
 *
 * In most cases just use one of the current servers as an example.
 * If the server uses ddx/mfb, set SUBDIRS1 = ddx/mfb
 * If the server uses ddx/cfb, set SUBDIRS2 = ddx/cfb 
 * If the server has configurable drivers like XF86_SVGA and XF86_Mono,
 *   use XFree86Server() to define the build rules.
 * If the server doesn't have drivers (like XF86_S3), use XFree86ServerNoDrv()
 *   to define the build rules.
 * The usage of these macros is documented in config/xf86.rules.
 *
 */

#if XF86SVGAServer
XCOMM
XCOMM XFree86 SVGA server
XCOMM

SVGASPECIALOBJS = ddx/x386/common/x386Init.o dix/dixfonts.o ddx/mi/mibitblt.o
   XF86SVGALIBS = ddx/x386/vga256/libvga256.a MFBLibs

       SUBDIRS1 = ddx/mfb

XFree86Server(XF86_SVGA,ddx/mfb,$(XF86SVGALIBS),$(SVGASPECIALOBJS),$(VGAOBJS),$(VGADRIVERSRC),$(X386CONFOBJS),$(X386CONFSUBDIRS))

#endif /* XF86SVGAServer */

#if XF86VGA16Server
XCOMM
XCOMM XFree86 16 Colour (largely generic) VGA server
XCOMM

VGA16SPECIALOBJS = ddx/x386/common/x386Init_m.o dix/dixfonts_m.o \
		 ddx/x386/vga16/mi/mipushpx16.o ddx/x386/vga16/mi/mibitblt16.o
        VGA16LIB = ddx/x386/vga16/libvga16.a
        VGA16SRC = $(VGA16DRIVERSRC)

   XF86VGA16LIBS = $(VGA16LIB) NoMFBBareLibs $(NONPEXEXTS)
   XF86VGA16OBJS = $(VGA16OBJS)
XF86VGA16DRIVSRC = $(VGA16SRC)

XFree86Server(XF86_VGA16,/**/,$(XF86VGA16LIBS),$(VGA16SPECIALOBJS),$(XF86VGA16OBJS),$(XF86VGA16DRIVSRC),$(VGA16CONFOBJS),$(VGA16CONFSUBDIRS))

#endif /* XF86VGA16Server */

#if XF86MonoServer
XCOMM
XCOMM XFree86 Mono server
XCOMM

MONOSPECIALOBJS = ddx/x386/common/x386Init_m.o dix/dixfonts_m.o \
		  ddx/mi/mibitblt_m.o

#if BuildVga2
        VGA2LIB = ddx/x386/vga2/libvga2.a
        VGA2SRC = $(VGA2DRIVERSRC)
#endif
#if BuildHga2
        HGA2LIB = ddx/x386/hga2/libhga2.a
        HGA2SRC = $(HGA2DRIVERSRC)
#endif
#if BuildBdm2
        BDM2LIB = ddx/x386/bdm2/libbdm2.a
        BDM2SRC = $(BDM2DRIVERSRC)
#endif

   XF86MONOLIBS = $(VGA2LIB) $(HGA2LIB) $(BDM2LIB) NoMFBBareLibs $(NONPEXEXTS)
   XF86MONOOBJS = $(VGA2OBJS) $(HGA2OBJS) $(BDM2OBJS)
XF86MONODRIVSRC = $(VGA2SRC) $(HGA2SRC)
   
XFree86Server(XF86_Mono,/**/,$(XF86MONOLIBS),$(MONOSPECIALOBJS),$(XF86MONOOBJS),$(XF86MONODRIVSRC),$(X386MCONFOBJS),$(X386MCONFSUBDIRS))

#endif /* XF86MonoServer */

#if XF86S3Server
XCOMM
XCOMM XFree86 S3 server
XCOMM

  S3SPECIALOBJS = ddx/x386/common/x386Init.o dix/dixfonts.o ddx/mi/mibitblt.o
     XF86S3LIBS = ddx/x386/accel/s3/s3mmio/libs3mmio.a \
		  ddx/x386/accel/s3/libs3.a CFBLibs

       SUBDIRS1 = ddx/mfb
       SUBDIRS2 = ddx/cfb

XFree86Server(XF86_S3,ddx/mfb ddx/cfb,$(XF86S3LIBS),$(S3SPECIALOBJS),$(S3OBJS),$(S3DRIVERSRC),$(S3CONFOBJ),$(S3CONFSUBDIR))

#endif /* XF86S3Server */

#if XF86I8514Server
XCOMM
XCOMM XFree86 8514/A server
XCOMM

X8514SPECIALOBJS = ddx/x386/common/x386Init.o dix/dixfonts.o ddx/mi/mibitblt.o
   XF86I8514LIBS = ddx/x386/accel/ibm8514/lib8514.a CFBLibs

       SUBDIRS1 = ddx/mfb
       SUBDIRS2 = ddx/cfb

XFree86ServerNoDrv(XF86_8514,ddx/mfb ddx/cfb,$(XF86I8514LIBS),$(X8514SPECIALOBJS))

#endif /* XF86I8514Server */

#if XF86Mach8Server
XCOMM
XCOMM XFree86 Mach8 server
XCOMM

MACH8SPECIALOBJS = ddx/x386/common/x386Init.o dix/dixfonts.o ddx/mi/mibitblt.o
   XF86MACH8LIBS = ddx/x386/accel/mach8/libmach8.a CFBLibs

       SUBDIRS1 = ddx/mfb
       SUBDIRS2 = ddx/cfb

XFree86ServerNoDrv(XF86_Mach8,ddx/mfb ddx/cfb,$(XF86MACH8LIBS),$(MACH8SPECIALOBJS))

#endif /* XF86Mach8Server */

#if XF86Mach32Server
XCOMM
XCOMM XFree86 Mach32 server
XCOMM

MACH32SPECIALOBJS = ddx/x386/common/x386Init.o dix/dixfonts.o ddx/mi/mibitblt.o
   XF86MACH32LIBS = ddx/x386/accel/mach32/libmach32.a CFBLibs

       SUBDIRS1 = ddx/mfb
       SUBDIRS2 = ddx/cfb

XFree86ServerNoDrv(XF86_Mach32,ddx/mfb ddx/cfb,$(XF86MACH32LIBS),$(MACH32SPECIALOBJS))

#endif /* XF86Mach32Server */

#endif /* XFree86Version */



#if XnonServer
XCOMM
XCOMM non server, just compile sources for build test
XCOMM
SUBDIRS0 = CFBSubdirs

Xnon: $(SUBDIRS0) $(DEPDIRS)

#endif /* XnonServer */

#ifdef XFree86Version
#ifdef XFree86DefaultServer
#if !Amoeba
install::
	-(cd $(DESTDIR)$(BINDIR); $(RM) X; $(LN) $(XF86DEFSERVER) X)
#endif
#endif /* XFree86DefaultServer */
#else
InstallMultipleFlags($(ALL),$(BINDIR),$(INSTPGMFLAGS))

#if !Amoeba
install::
	-(cd $(DESTDIR)$(BINDIR); $(RM) X; $(LN) $(ALL1) X)
#endif
#endif /* XFree86Version */

SUBDIRS = $(SUBDIRS0) $(SUBDIRS1) $(SUBDIRS2) $(SUBDIRS3)

#define IHaveSubdirs

DependSubdirs($(SUBDIRS))
MakeLintLibSubdirs($(SUBDIRS))
LintSubdirs($(SUBDIRS))

ForceSubdirs($(DEPDIRS) $(SUBDIRS))

#ifndef XFree86Version
clean::
	$(RM) $(ALL)
#endif

InstallManPage(Xserver,$(MANDIR))
