XCOMM platform:  $TOG: FreeBSD.cf /main/18 1997/06/12 07:40:35 kaleb $
XCOMM platform:  $XFree86: xc/config/cf/FreeBSD.cf,v 3.58.2.11 1998/03/01 01:08:59 dawes Exp $

#ifndef OSName
#define OSName			DefaultOSName
#endif
#ifndef OSVendor
#define OSVendor		/**/
#endif
#ifndef OSMajorVersion
#define OSMajorVersion		DefaultOSMajorVersion
#endif
#ifndef OSMinorVersion
#define OSMinorVersion		DefaultOSMinorVersion
#endif
#ifndef OSTeenyVersion
#define OSTeenyVersion		DefaultOSTeenyVersion
#endif
XCOMM operating system:  OSName (OSMajorVersion./**/OSMinorVersion./**/OSTeenyVersion)

#define HasGcc			YES
#define HasGcc2			YES
#define HasCplusplus		YES
#define HasGcc2ForCplusplus	YES
#define GccUsesGas		YES
#define UseGas			YES
#define GnuCpp			YES
#define HasNdbm         	YES
#define HasPutenv       	YES
#define HasSnprintf		YES
#define HasBSD44Sockets 	YES
#ifndef HasLibCrypt
# define HasLibCrypt		YES
#endif
#ifndef HasShm
# define HasShm          	YES
#endif
#define HasWChar32		YES

#define AvoidNullMakeCommand	YES
#define StripInstalledPrograms	YES
#define CompressAllFonts	YES
#define Malloc0ReturnsNull	YES
#define NeedConstPrototypes	YES
#define NeedFunctionPrototypes	YES
#define NeedNestedPrototypes	YES
#define NeedVarargsPrototypes	YES
#define NeedWidePrototypes	NO

#define MkdirHierCmd		mkdir -p

#define CcCmd			cc
#define CppCmd			/usr/libexec/cpp
#define PreProcessCmd		CppCmd
#define StandardCppDefines	-traditional
#if defined(UseInstalled) && (!defined(XF86LinkKit) || !XF86LinkKit)
#define DefaultCCOptions	/**/
#else
#define DefaultCCOptions	-ansi -pedantic -Dasm=__asm
#endif
#ifndef ExtraLibraries
#define ExtraLibraries		/**/
#endif
#ifndef UseGnuMalloc
/* 2.2 doesn't really have GnuMalloc */
#if OSMajorVersion < 2 || (OSMajorVersion == 2 && OSMinorVersion < 2)
#define UseGnuMalloc		YES
#else
#define UseGnuMalloc		NO
#endif
#endif

/* 2.2.2 and later has setusercontext() */
#if OSMajorVersion > 2 || (OSMajorVersion == 2 && OSMinorVersion > 2) || \
     (OSMajorVersion == 2 && OSMinorVersion == 2 && OSTeenyVersion >= 2)
#define HasSetUserContext	YES
#endif

/* 
 * This doesn't work the way it does on every other system. On FreeBSD it's
 * only a "hint, not a demand", whatever that means. Note that this is not 
 * what it says in the ld and ld.so man pages, which are rather vague on the
 * matter.
 *
 * But we do know that if a) you do what the X Project team does and set your 
 * ProjectRoot to something like "/X11", and b) you have other X libraries, 
 * e.g. in /usr/X11R6/lib, and you have added /usr/X11R6/lib to your 
 * ld.so.cache with ldconfig, then any programs linked with this "hint" will
 * find that ld.so ignores the "hint" at runtime and loads the libraries in 
 * the ld.so.cache, i.e.the wrong ones, instead! Empirically we find that
 * the run-path is only used as a last resort to find the libraries, after
 * the LD_LIBRARY_PATH and ld.so.cache.
 *
 * N. B. to FreeBSD users who are not familiar with the semantics of the run-
 * path on other systems. The run-path is akin to a per-program ld.so.cache. 
 * If a program is linked with a run-path, that run-path should take 
 * precedence over _everything_ else! In my opinion ldconfig and the 
 * ld.so.cache should be deprecated immediately now that FreeBSD has run-
 * paths. Any program that needs libraries that are outside the "well known" 
 * locations should be linked with a run-path.
 *
 * All of which begs the question: If this option doesn't work in any useful
 * way, why did they (FreeBSD) bother to add it? It would be nice if FreeBSD
 * would fix ld.so so that run-paths are truly useful.
 *
 * Using run-paths is added with the intent that vendors who ship X for 
 * FreeBSD should use it too. Once everyone uses it then there will be no 
 * reason for FreeBSD to assume that it knows where X libraries are installed 
 * and they can remove it from the list of directories they add to ld.so.cache 
 * in their /etc/rc file.
 */
#if OSMajorVersion > 2 || (OsMajorVersion == 2 && OSMinorVersion >= 2)
#ifndef ExtraLoadFlags
#define ExtraLoadFlags		-Wl,-R,$(USRLIBDIRPATH)
#endif
#endif

#ifndef GnuMallocLibrary
#define GnuMallocLibrary	-lgnumalloc
#endif

#if (OSMajorVersion > 2) || (OSMajorVersion == 2 && OSMinorVersion >= 2) \
	|| (OSMajorVersion == 2 && OSMinorVersion == 1 && OSTeenyVersion >= 6)
/* 2.1.6 and 2.2 have libz */
#ifndef HasZlib
#define HasZlib		YES
#endif
#endif

#if OSMajorVersion > 2 || (OSMajorVersion == 2 && OSMinorVersion >= 2) || \
    (OSMajorVersion == 2 && OSMinorVersion == 2 && OSTeenyVersion > 2)
/*
 * FreeBSD 2.2.5 or later.
 *
 * Don't make any assumptions about the version of Tcl in the base OS.
 * These settings assume that the tcl-7.6 and tk-4.2 packages have been
 * installed.
 *
 * Note the static libs in some versions of the FreeBSD packages are
 * broken.  The symptom of this is unresolved symbols when linking
 * XF86Setup.  If you run into this problem, either build your own
 * static libs from the standard Tcl and Tk source, or change the
 * definitions of XF86SetupUsesStatic{Tcl,Tk}.  The latter is not
 * recommended for binaries that are going to be redistributed.
 */
#ifndef TkLibName
#define TkLibName		tk42
#endif
#ifndef TkIncDir
#define TkIncDir		/usr/local/include/tk4.2
#endif
#ifndef TclLibName
#define TclLibName		tcl76
#endif
#ifndef TclIncDir
#define TclIncDir		/usr/local/include/tcl7.6
#endif
#else
#if OSMajorVersion == 2 && OSMinorVersion == 2
/*
 * FreeBSD 2.2 prior to 2.2.5
 *
 * Note: the tk-4.1 package for FreeBSD doesn't have the static lib, so
 * you'll have to build it yourself, or change the definition of
 * XF86SetupUsesStaticTk.
 */
#ifndef TkLibName
#define TkLibName		tk41
#endif
#ifndef TclLibName
#define TclLibName		tcl
#endif
#ifndef TclLibDir
#define TclLibDir		/usr/lib
#endif
#ifndef TclIncDir
#define TclIncDir		/usr/include
#endif
/* FreeBSD 2.2 has libtcl in the base system */
#ifndef XF86SetupUsesStaticTcl
#define XF86SetupUsesStaticTcl	NO
#endif

#else /* ! 2.2 or later */

#if OSMajorVersion == 2 && OSMinorVersion == 1 && OSTeenyVersion >= 6

/*
 * 2.1.x with x >=6 has tk 4.1 and tcl 7.5 in the packages collection.
 * Neither packages include the static libs, so you either need to build
 * them yourself or set XF86SetupUsesStaticTcl and XF86SetupUsesStaticTk
 * to NO.  This isn't the default because we don't want the XFree86
 * binaries to have these packages as a dependency.
 */

#ifndef TkLibName
#define TkLibName		tk41
#endif
#ifndef TclLibName
#define TclLibName		tcl75
#endif

#else /* ! 2.1.6 or later */

#ifndef TkLibName
#define TkLibName		tk40
#endif
#ifndef TclLibName
#define TclLibName		tcl74
#endif

#endif
#endif
#endif

#undef  InstallCmd
#define InstallCmd		/usr/bin/install

#if GccUsesGas
# define GccGasOption 		-DGCCUSESGAS
# define AsmDefines		-DUSE_GAS
#else
# define GccGasOption /**/
#endif

#define ServerExtraDefines GccGasOption XFree86ServerDefines

#define StandardDefines	-DCSRG_BASED

#if OSMajorVersion > 1
#define ServerOSDefines		XFree86ServerOSDefines -DDDXTIME
#define XawI18nDefines		-DUSE_XWCHAR_STRING
#define HasMakefileSafeInclude	YES
#define IncludeMakefile(file) @@# dependencies are in .depend
#define DependFileName		.depend
#ifndef BuildDynamicLoading
#define BuildDynamicLoading	YES
#endif
#ifndef ForceNormalLib
#define ForceNormalLib		YES
#endif
#define HasMkstemp		YES
#else
#define ServerOSDefines		XFree86ServerOSDefines -DDDXTIME -DXNO_SYSCONF
#define XawI18nDefines		-DUSE_XWCHAR_STRING -DUSE_XMBTOWC
#endif

/* The GCC strength-reduce bug is fixed for FreeBSD 2.1.5 and later */
#ifndef DefaultGcc2i386Opt
#if OSMajorVersion > 2 || (OSMajorVersion == 2 && OSMinorVersion > 1) || (OSMajorVersion == 2 && OSMinorVersion == 1 && OSTeenyVersion >= 5)
#define DefaultGcc2i386Opt -O2
#endif
#endif

#ifdef i386Architecture
# define OptimizedCDebugFlags DefaultGcc2i386Opt
#else
# define OptimizedCDebugFlags -O2
#endif

#ifndef PreIncDir
# define PreIncDir	/usr/include
#endif

#define TroffCmd        groff -Tps
#define SetTtyGroup     YES

#ifndef ExtraFilesToClean
# define ExtraFilesToClean *.core
#endif

#define DefaultUserPath		/bin:/usr/bin:/sbin:/usr/sbin:$(BINDIR):/usr/gnu/bin:/usr/local/bin
#define DefaultSystemPath	/bin:/usr/bin:/sbin:/usr/sbin:$(BINDIR)
#ifndef SystemManDirectory
#define SystemManDirectory	/usr/share/man
#endif

#define InstKmemFlags	-g kmem -m 2755

/*
 * Compress manual pages
 */
#ifndef CompressManPages
# define CompressManPages        YES
#endif

#if CompressManPages

#ifndef CompressManCmd
# define CompressManCmd		gzip -n
#endif
   COMPRESSMANCMD = CompressManCmd

#ifndef InstallManPageLong
#define InstallManPageLong(file,destdir,dest)                           @@\
install.man:: file.man                                                  @@\
	MakeDir($(DESTDIR)destdir)                                      @@\
	$(RM) $(DESTDIR)destdir/dest.$(MANSUFFIX)*                      @@\
	$(INSTALL) -c $(INSTMANFLAGS) file.man \                        @@\
          $(DESTDIR)destdir/dest.$(MANSUFFIX)                           @@\
	-$(COMPRESSMANCMD) $(DESTDIR)destdir/dest.$(MANSUFFIX)
#endif

#ifndef InstallGenManPageLong
#define InstallGenManPageLong(file,destdir,dest,suffix)                 @@\
install.man:: file.man                                                  @@\
	MakeDir($(DESTDIR)destdir)                                      @@\
	$(RM) $(DESTDIR)destdir/dest.suffix*                            @@\
	$(INSTALL) -c $(INSTMANFLAGS) file.man \                        @@\
          $(DESTDIR)destdir/dest.suffix                                 @@\
	-$(COMPRESSMANCMD) $(DESTDIR)destdir/dest.suffix
#endif

#ifndef InstallMultipleMan
#define InstallMultipleMan(list,dest)                                   @@\
install.man:: list                                                      @@\
	MakeDir($(DESTDIR)dest)						@@\
	@case '${MFLAGS}' in *[i]*) set +e;; esac; \                    @@\
	for i in list; do \                                             @@\
	        (set -x; \                                              @@\
	        MNAME=`echo $$i | cut -f1 -d.`; \			@@\
	        $(RM) $(DESTDIR)dest/$${MNAME}*; \                      @@\
	        $(INSTALL) -c $(INSTMANFLAGS) $$i \                     @@\
		  $(DESTDIR)dest/$${MNAME}.$(MANSUFFIX); \              @@\
	        $(COMPRESSMANCMD) $(DESTDIR)dest/$${MNAME}.$(MANSUFFIX)); \  @@\
	done
#endif

/*
 * InstallManPageAliases - install soft links for aliases.
 */
#ifndef InstallManPageAliases
#define InstallManPageAliases(file,destdir,aliases)                     @@\
install.man::                                                           @@\
	@(SUFFIX=`echo $(DESTDIR)destdir/file.* | sed -e 's,.*/[^\.]*.,,'`; \ @@\
	for i in aliases; do (set -x; \                                 @@\
	$(RM) $(DESTDIR)destdir/$$i.*; \                                @@\
	(cd $(DESTDIR)destdir; $(LN) file.$${SUFFIX} \                  @@\
	$$i.$${SUFFIX})); \                                             @@\
	done)
#endif

/*
 * InstallGenManPageAliases - install soft links for aliases.
 */
#ifndef InstallGenManPageAliases
#define InstallGenManPageAliases(file,destdir,suffix,aliases)              @@\
	InstallManPageAliases(file,destdir,aliases)
#endif
#endif

#if OSMajorVersion > 2 || (OSMajorVersion == 2 && OSMinorVersion >= 1)
#define HasBsdMake	YES
#endif

#ifndef StaticLibrary
#define StaticLibrary(libpath,libname) -Wl,-Bstatic Concat(-L,libpath) Concat(-l,libname) -Wl,-Bdynamic
#endif

#include <bsdLib.rules>

#ifdef i386Architecture
#include <xfree86.cf>
#endif
