XCOMM $XTermId: Imakefile,v 1.97 2006/04/08 22:08:34 tom Exp $
XCOMM
XCOMM                         Attention xterm porters
XCOMM
XCOMM
XCOMM Xterm assumes that bcopy can handle overlapping arguments.  If your
XCOMM bcopy (or memcpy) cannot, write a routine called bcopy and link it in
XCOMM or add -Dbcopy=mybcopy to the DEFINES list below.
XCOMM
XCOMM $XFree86: xc/programs/xterm/Imakefile,v 3.80 2008/11/01 03:20:29 dawes Exp $
XCOMM

/* Uncomment SCROLLBAR_RIGHT if you want the scroll bar to be on the right */
SCROLLBAR_RIGHT = -DSCROLLBAR_RIGHT

/* Define UTF8support to compile-in support for UTF-8 */
#define UTF8support

/*
 * setgid mode works for systems that do not require root to open a pty,
 * and that allow a group to (re-)write utmp entries.
 *
 * On Linux, the first requirement is met by including devpts support in the
 * kernel.  The second requirement is trickier, as not all distributions
 * define a utmp group...
 *
 * This feature could also be applied to FreeBSD, but requires the installer
 * to define a "utmp" group as well as chgrp the utmp file to match.
 *
 * Note:  InstallXtermSetUID is almost always defined;  InstallXtermSetGID is
 * defined for certain OSes in newer imake configurations.
 */
#if !defined(InstallXtermSetGID)
# if defined(OpenBSDArchitecture) || \
     (defined(NetBSDArchitecture) && (OSMajorVersion >= 1)) || \
     (defined(LinuxArchitecture) && \
      (LinuxCLibMajorVersion == 6))
#  define InstallXtermSetGID YES
# endif
#endif

/*
 * Override the set uid/gid flags to use the utempter library.
 */
#if defined(UseUtempter)
# undef InstallXtermSetUID /* imake sets this */
# undef InstallXtermSetGID /* we might set this */
        UTMPLIB = -lutempter
#endif

/*
 * Fixes to allow compile with X11R5, etc.
 */
#ifndef InstUtmpFlags
# ifdef InstGidFlags	/* Older, less descriptive, name */
#  define InstUtmpFlags InstGidFlags
# else
#  define InstUtmpFlags -m 2755 -g utmp
# endif
#endif

#ifndef InstUidFlags
# define InstUidFlags -m 4711
#endif

#ifndef XkbClientDefines
# define XkbClientDefines /**/
#endif

#ifndef InstallXtermSetUID
# define InstallXtermSetUID NO
#endif

#ifndef InstallXtermSetGID
# define InstallXtermSetGID NO
#endif

#ifndef XkbClientDepLibs
# define XkbClientDepLibs /**/
#endif

#ifndef XkbClientLibs
# define XkbClientLibs /**/
#endif

/* This must come before setting DEFINES */
#if InstallXtermSetGID
CSGIDFLAGS = -DUSE_UTMP_SETGID
INSTSETIDFLAGS = InstUtmpFlags 
#elif InstallXtermSetUID
INSTSETIDFLAGS = InstUidFlags 
#else
INSTSETIDFLAGS = NullParameter 
#endif

/*
 * Compensate for broken imake configuration.
 */
#ifdef LinuxGnuSourceDefines
# ifdef UseInstalled
   IMAKEDEFINES = -D_GNU_SOURCE
# endif
#endif

#ifndef SpecialCObjectRule
#define SpecialCObjectRule(module,ignore,defines) \
module.o: ; $(CC) -c defines $(CFLAGS) module.c
#endif

#ifndef ProgramTargetName
#define ProgramTargetName(program) program
#endif

/*
 * add -DWTMP and -DLASTLOG if you want them; make sure that bcopy can
 * handle overlapping copies before using it.
 */
#if SetTtyGroup			/* turn on in config/machine.cf */
    TTYGROUPDEF = -DUSE_TTY_GROUP
#endif
#ifdef UsePUCCPtyd		/* turn on in config/site.def */
    PUCCPTYDDEF = -DPUCC_PTYD	/* does not need to be setuid */
         PTYLIB = -lpucc
#endif

#if defined(NetBSDArchitecture) || \
    defined(OpenBSDArchitecture) || \
    defined(FreeBSDArchitecture) || \
    (defined(LinuxArchitecture) && \
     (LinuxCLibMajorVersion == 6) && (LinuxCLibMinorVersion < 1))
         PTYLIB = -lutil
#endif

#ifdef DarwinArchitecture
/* dyld can deadlock if a signal comes in when it is looking up a symbol */
  LOCAL_LDFLAGS = -Wl,-bind_at_load
#endif

#ifdef OS2Architecture
/*
 * Only used in os2main.c, see ptyx.h for OPT_I18N_SUPPORT
 * <werner@suse.de>
 */
#if XtermWithI18N
        I18NDEF = -DI18N
      FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING $(I18NDEF)
#else
      FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING
#endif
#endif

 OSMAJORVERSION = OSMajorVersion
 OSMINORVERSION = OSMinorVersion

#if !defined(OS2Architecture) && !defined(__GNU__)
#if defined(UseUtempter)
        UTMPDEF = -DUSE_UTEMPTER
#else
        UTMPDEF = -DUTMP
#endif
#endif

#ifdef UTF8support
    UTF8_OPTION = -DOPT_WIDE_CHARS -DOPT_LUIT_PROG
        UTF8SRC = charclass.c precompose.c wcwidth.c xutf8.c
        UTF8OBJ = charclass.o precompose.o wcwidth.o xutf8.o
#endif

#if BuildXftLibrary
#define XRenderSupport
#endif

#ifdef XRenderSupport
         XRFDEF = -DXRENDERFONT
        XRFLIBS = XftClientLibs
     XRFDEPLIBS = XftClientDepLibs
    XRFINCLUDES = $(XFTINCLUDES)
#endif

#if !HasPutenv
      PUTENVDEF = -DNOPUTENV
#endif

#ifdef TraceXTerm
       TRACEDEF = -DOPT_TRACE=1
#endif

/* Macros with arguments must be #define'd */
#ifndef XF86_VERSION_NUMERIC
# define XF86_VERSION_NUMERIC(a,b,c,d,e) 0
#endif

#if defined(XorgVersion) || !defined(XFree86Version) || \
    (XFree86Version < XF86_VERSION_NUMERIC(4,5,99,14,0))
OBSOLETE_INCLUDES = -I.
#endif

#ifdef XtermFeatureOptions
XTERM_FEATURE_OPTIONS = XtermFeatureOptions
#endif

   MAIN_DEFINES = $(UTMPDEF) $(TTYGROUPDEF) $(PUCCPTYDDEF) $(CSGIDFLAGS) \
		  -DOSMAJORVERSION=$(OSMAJORVERSION) \
		  -DOSMINORVERSION=$(OSMINORVERSION)
   MISC_DEFINES = /* -DALLOWLOGGING -DALLOWLOGFILEEXEC */
    XKB_DEFINES = XkbClientDefines
   PATH_DEFINES = -DPROJECTROOT=$(PROJECTROOT)
        DEFINES = $(XKB_DEFINES) $(TERMCAPDEFINES) $(FEATURE_DEFINES) \
                  $(SCROLLBAR_RIGHT) $(UTF8_OPTION) $(XRFDEF) $(PATH_DEFINES) \
                  $(XTERM_FEATURE_OPTIONS) $(PUTENVDEF) \
                  $(IMAKEDEFINES) $(TRACEDEF)
       INCLUDES = $(OBSOLETE_INCLUDES) $(XRFINCLUDES)

#ifdef OS2Architecture
        MAINSRC = os2main.c
        MAINOBJ = os2main.o
#else
        MAINSRC = main.c
        MAINOBJ = main.o
#endif
#ifdef TraceXTerm
       TRACESRC = trace.c
       TRACEOBJ = trace.o
#endif
          SRCS1 = button.c charproc.c charsets.c cursor.c \
		  data.c doublechr.c fontutils.c input.c \
		  menu.c misc.c print.c ptydata.c \
		  screen.c scrollbar.c tabs.c util.c xstrings.c \
		  TekPrsTbl.c Tekproc.c VTPrsTbl.c \
		  $(MAINSRC) $(EXTRASRC) $(UTF8SRC) $(TRACESRC)
          OBJS1 = button.o charproc.o charsets.o cursor.o \
		  data.o doublechr.o fontutils.o input.o \
		  menu.o misc.o print.o ptydata.o \
		  screen.o scrollbar.o tabs.o util.o xstrings.o \
		  TekPrsTbl.o Tekproc.o VTPrsTbl.o \
		  $(MAINOBJ) $(EXTRAOBJ) $(UTF8OBJ) $(TRACEOBJ)
          SRCS2 = resize.c xstrings.c
          OBJS2 = resize.o xstrings.o
           SRCS = $(SRCS1) $(SRCS2)
           OBJS = $(OBJS1) $(OBJS2)
       PROGRAMS = ProgramTargetName(resize) ProgramTargetName(xterm)
       DEPLIBS1 = XkbClientDepLibs XawClientDepLibs $(XRFDEPLIBS)
       DEPLIBS2 =

#ifndef TermcapLibrary
#if SystemV && !defined(MacIIArchitecture)
#if	defined(CrayArchitecture) || \
	(defined(HPArchitecture) && (OSMajorVersion < 10)) || \
	defined(RsArchitecture) || \
	defined(SCOArchitecture) || \
	defined(USLArchitecture)
#define TermcapLibrary -lcurses		/* special cases of System V */
#else
#define TermcapLibrary -ltermlib	/* usually in here */
#endif
#else
#define TermcapLibrary -ltermcap	/* bsd puts it here */
#endif
#endif

     TERMCAPLIB = TermcapLibrary

AllTarget($(PROGRAMS))

SpecialCObjectRule(main,$(_NOOP_),$(MAIN_DEFINES))
SpecialCObjectRule(menu,$(_NOOP_),$(MISC_DEFINES))
SpecialCObjectRule(misc,$(_NOOP_),$(MISC_DEFINES))
SpecialCObjectRule(charproc,$(_NOOP_),$(MISC_DEFINES))
SpecialCObjectRule(data,$(_NOOP_),$(MISC_DEFINES))

NormalProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(UTMPLIB) $(PTYLIB))

#if InstallXtermSetUID || InstallXtermSetGID
# if defined(SunArchitecture) && HasSharedLibraries && (OSMajorVersion < 5)
#  if AlternateUsrLibDir
#   if ((OSMajorVersion == 4) && (OSMinorVersion >= 1))
LDOVERRIDE = -L$(DESTDIR)$(USRLIBDIR)
#   else
#    if HasGcc
LDOVERRIDE = -static -L$(DESTDIR)$(USRLIBDIR)
#    else
LDOVERRIDE = -Bstatic -L$(DESTDIR)$(USRLIBDIR)
LDRESUME = -Bdynamic
#    endif
#   endif
#  endif

install::
	MakeDir($(DESTDIR)$(BINDIR))
	RemoveFile(ProgramTargetName(xterm.inst))
	LinkRule(ProgramTargetName(xterm.inst),$(CDEBUGFLAGS) $(CCOPTIONS)
	$(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS),$(OBJS1),$(LDOVERRIDE)
	$(XRFLIBS) XawClientLibs $(LDRESUME) $(LDLIBS) $(TERMCAPLIB)
	$(PTYLIB))
	$(INSTALL) -c $(INSTPGMFLAGS) $(INSTSETIDFLAGS) ProgramTargetName(xterm.inst) $(DESTDIR)$(BINDIR)/ProgramTargetName(xterm)
	RemoveFile(ProgramTargetName(xterm.inst))

# else
#  if !InstallXtermSetGID || \
      (!defined(LinuxArchitecture) && !defined(FreeBSDArchitecture))

InstallProgramWithFlags(xterm,$(BINDIR),$(INSTSETIDFLAGS))

#  else

/*
 * Install xterm either setgid utmp or setuid root.  Base this decision on the
 * existence of a utmp group.  It would be better to check utmp file
 * permissions, but we might not really know where utmp entries are stored.
 */

/* Override these */
 INSTUIDFLAGS = $(INSTPGMFLAGS) InstUidFlags
INSTUTMPFLAGS = $(INSTPGMFLAGS) InstUtmpFlags

/* Install xterm setgid if there is a utmp group;  setuid otherwise */
install::
	MakeDir($(DESTDIR)$(BINDIR))
	@if [ "`grep '^utmp:' /etc/group`" ]; then \
	    InstallNamedInline(xterm,$(INSTUTMPFLAGS),$(BINDIR),xterm); \
	else \
	    InstallNamedInline(xterm,$(INSTUIDFLAGS),$(BINDIR),xterm); \
	fi

#  endif
# endif
#else

InstallProgram(xterm,$(BINDIR))

#endif

InstallNamedProg(uxterm,uxterm,$(BINDIR))

/*
 * Link with the termcap library if USE_TERMCAP is defined in resize.c
 */
#if	defined(NTOArchitecture)	|| \
	defined(LinuxArchitecture)	|| \
	defined(OpenBSDArchitecture)	|| \
	defined(SGIArchitecture)	|| \
	defined(SunArchitecture)
NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,NullParameter)
#else
NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,$(TERMCAPLIB))
#endif

InstallProgramWithFlags(resize,$(BINDIR),NullParameter)

/*
 * termcap is a special name that does not install correctly with
 * InstallNamedNonExec()
 */
install::
	MakeDir($(DESTDIR)$(LIBDIR)/etc)
	$(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) termcap \
		$(DESTDIR)$(LIBDIR)/etc/xterm.termcap
InstallNamedNonExec(terminfo,xterm.terminfo,$(LIBDIR)/etc)

InstallAppDefaults(XTerm)
InstallAppDefaults(UXTerm)
InstallAppDefaultsLong(XTerm-col,XTerm-color)
InstallManPage(xterm,$(MANDIR))
InstallManPage(resize,$(MANDIR))
DependTarget()
