Imakefile revision d522f475
1XCOMM $XTermId: Imakefile,v 1.101 2007/03/18 21:06:18 tom Exp $
2XCOMM
3XCOMM                         Attention xterm porters
4XCOMM
5XCOMM
6XCOMM Xterm assumes that bcopy can handle overlapping arguments.  If your
7XCOMM bcopy (or memcpy) cannot, write a routine called bcopy and link it in
8XCOMM or add -Dbcopy=mybcopy to the DEFINES list below.
9XCOMM
10XCOMM $XFree86: xc/programs/xterm/Imakefile,v 3.73 2006/04/10 00:34:36 dickey Exp $
11XCOMM
12
13/* Uncomment SCROLLBAR_RIGHT if you want the scroll bar to be on the right */
14SCROLLBAR_RIGHT = -DSCROLLBAR_RIGHT
15
16/* Define UTF8support to compile-in support for UTF-8 */
17#define UTF8support
18
19/*
20 * setgid mode works for systems that do not require setuid to open pty.
21 *
22 * This feature could also be applied to FreeBSD, but requires the installer
23 * to define a "utmp" group as well as chgrp the utmp file to match.
24 *
25 * Note: InstallXtermSetUID is always defined; InstallXtermSetGID is defined
26 * in newer imake configurations.
27 */
28#if !defined(InstallXtermSetGID) && !InstallXtermSetUID
29#if defined(OpenBSDArchitecture) || \
30    (defined(LinuxArchitecture) && \
31     (LinuxCLibMajorVersion == 6))
32#define InstallXtermSetGID YES
33#endif
34#endif
35
36/*
37 * Override the set uid/gid flags to use the utempter library.
38 */
39#if defined(UseUtempter)
40#undef InstallXtermSetUID /* imake sets this */
41#undef InstallXtermSetGID /* we set this */
42#define InstallXtermSetUID NO
43#define InstallXtermSetGID NO
44        UTMPLIB = -lutempter
45#endif
46
47/*
48 * Fixes to allow compile with X11R5, etc.
49 */
50#ifndef InstGidFlags
51#define InstGidFlags -m 2755 -g utmp
52#endif
53
54#ifndef InstUidFlags
55#define InstUidFlags -m 4711
56#endif
57
58#ifndef XkbClientDefines
59#define XkbClientDefines /**/
60#endif
61
62#ifndef InstallXtermSetUID
63#define InstallXtermSetUID NO
64#endif
65
66#ifndef InstallXtermSetGID
67#define InstallXtermSetGID NO
68#endif
69
70#ifndef XkbClientDepLibs
71#define XkbClientDepLibs /**/
72#endif
73
74#ifndef XkbClientLibs
75#define XkbClientLibs /**/
76#endif
77
78/* This must come before setting DEFINES */
79#if InstallXtermSetGID
80CSGIDFLAGS = -DUSE_UTMP_SETGID
81INSTSETIDFLAGS = InstGidFlags
82#elif InstallXtermSetUID
83INSTSETIDFLAGS = InstUidFlags
84#else
85INSTSETIDFLAGS = NullParameter
86#endif
87
88/*
89 * Compensate for broken imake configuration.
90 */
91#ifdef LinuxGnuSourceDefines
92# ifdef UseInstalled
93   IMAKEDEFINES = -D_GNU_SOURCE
94# endif
95#endif
96
97#ifndef SpecialCObjectRule
98#define SpecialCObjectRule(module,ignore,defines) \
99module.o: ; $(CC) -c defines $(CFLAGS) module.c
100#endif
101
102#ifndef ProgramTargetName
103#define ProgramTargetName(program) program
104#endif
105
106/*
107 * add -DWTMP and -DLASTLOG if you want them; make sure that bcopy can
108 * handle overlapping copies before using it.
109 */
110#if SetTtyGroup			/* turn on in config/machine.cf */
111    TTYGROUPDEF = -DUSE_TTY_GROUP
112#endif
113#ifdef UsePUCCPtyd		/* turn on in config/site.def */
114    PUCCPTYDDEF = -DPUCC_PTYD	/* does not need to be setuid */
115         PTYLIB = -lpucc
116#endif
117
118#if defined(NetBSDArchitecture) || \
119    defined(OpenBSDArchitecture) || \
120    defined(FreeBSDArchitecture) || \
121    (defined(LinuxArchitecture) && \
122     (LinuxCLibMajorVersion == 6) && (LinuxCLibMinorVersion < 1))
123         PTYLIB = -lutil
124#endif
125
126#ifdef DarwinArchitecture
127/* dyld can deadlock if a signal comes in when it is looking up a symbol */
128  LOCAL_LDFLAGS = -Wl,-bind_at_load
129#endif
130
131#ifdef OS2Architecture
132/*
133 * Only used in os2main.c, see ptyx.h for OPT_I18N_SUPPORT
134 * <werner@suse.de>
135 */
136#if XtermWithI18N
137        I18NDEF = -DI18N
138      FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING $(I18NDEF)
139#else
140      FEATURE_DEFINES = -DDEBUG -DALLOWLOGGING
141#endif
142#endif
143
144 OSMAJORVERSION = OSMajorVersion
145 OSMINORVERSION = OSMinorVersion
146
147#if !defined(OS2Architecture) && !defined(__GNU__)
148#if defined(UseUtempter)
149        UTMPDEF = -DUSE_UTEMPTER
150#else
151        UTMPDEF = -DUTMP
152#endif
153#endif
154
155#ifdef UTF8support
156    UTF8_OPTION = -DOPT_WIDE_CHARS -DOPT_LUIT_PROG
157        UTF8SRC = charclass.c precompose.c wcwidth.c xutf8.c
158        UTF8OBJ = charclass.o precompose.o wcwidth.o xutf8.o
159#endif
160#if BuildXftLibrary
161#define XRenderSupport
162#endif
163#ifdef XRenderSupport
164         XRFDEF = -DXRENDERFONT -DXFREE86_FT2
165        XRFLIBS = XftClientLibs
166     XRFDEPLIBS = XftClientDepLibs
167    XRFINCLUDES = $(XFTINCLUDES)
168#endif
169#if !HasPutenv
170      PUTENVDEF = -DNOPUTENV
171#endif
172#ifdef TraceXTerm
173       TRACEDEF = -DOPT_TRACE=1
174#endif
175   MAIN_DEFINES = $(UTMPDEF) $(TTYGROUPDEF) $(PUCCPTYDDEF) $(CSGIDFLAGS) \
176		  -DOSMAJORVERSION=$(OSMAJORVERSION) \
177		  -DOSMINORVERSION=$(OSMINORVERSION)
178   MISC_DEFINES = /* -DALLOWLOGGING -DALLOWLOGFILEEXEC */
179    XKB_DEFINES = XkbClientDefines
180   PATH_DEFINES = -DPROJECTROOT=$(PROJECTROOT)
181        DEFINES = $(XKB_DEFINES) $(TERMCAPDEFINES) $(FEATURE_DEFINES) $(SCROLLBAR_RIGHT) $(UTF8_OPTION) $(XRFDEF) $(PATH_DEFINES) $(PUTENVDEF) $(IMAKEDEFINES) $(TRACEDEF)
182       INCLUDES = -I. $(XRFINCLUDES)
183
184#ifdef OS2Architecture
185        MAINSRC = os2main.c
186        MAINOBJ = os2main.o
187#else
188        MAINSRC = main.c
189        MAINOBJ = main.o
190#endif
191#ifdef TraceXTerm
192       TRACESRC = trace.c
193       TRACEOBJ = trace.o
194#endif
195          SRCS1 = button.c cachedGCs.c charproc.c charsets.c cursor.c \
196		  data.c doublechr.c fontutils.c input.c \
197		  menu.c misc.c print.c ptydata.c \
198		  screen.c scrollbar.c tabs.c util.c xstrings.c xtermcap.c \
199		  TekPrsTbl.c Tekproc.c VTPrsTbl.c \
200		  $(MAINSRC) $(EXTRASRC) $(UTF8SRC) $(TRACESRC)
201          OBJS1 = button.o cachedGCs.o charproc.o charsets.o cursor.o \
202		  data.o doublechr.o fontutils.o input.o \
203		  menu.o misc.o print.o ptydata.o \
204		  screen.o scrollbar.o tabs.o util.o xstrings.o xtermcap.o \
205		  TekPrsTbl.o Tekproc.o VTPrsTbl.o \
206		  $(MAINOBJ) $(EXTRAOBJ) $(UTF8OBJ) $(TRACEOBJ)
207          SRCS2 = resize.c xstrings.c
208          OBJS2 = resize.o xstrings.o
209           SRCS = $(SRCS1) $(SRCS2)
210           OBJS = $(OBJS1) $(OBJS2)
211       PROGRAMS = ProgramTargetName(resize) ProgramTargetName(xterm)
212       DEPLIBS1 = XkbClientDepLibs XawClientDepLibs $(XRFDEPLIBS)
213       DEPLIBS2 =
214
215#ifndef TermcapLibrary
216#if SystemV && !defined(MacIIArchitecture)
217#if	defined(CrayArchitecture) || \
218	(defined(HPArchitecture) && (OSMajorVersion < 10)) || \
219	defined(RsArchitecture) || \
220	defined(SCOArchitecture) || \
221	defined(USLArchitecture)
222#define TermcapLibrary -lcurses		/* special cases of System V */
223#else
224#define TermcapLibrary -ltermlib	/* usually in here */
225#endif
226#else
227#define TermcapLibrary -ltermcap	/* bsd puts it here */
228#endif
229#endif
230
231     TERMCAPLIB = TermcapLibrary
232
233AllTarget($(PROGRAMS))
234
235SpecialCObjectRule(main,$(_NOOP_),$(MAIN_DEFINES))
236SpecialCObjectRule(menu,$(_NOOP_),$(MISC_DEFINES))
237SpecialCObjectRule(misc,$(_NOOP_),$(MISC_DEFINES))
238SpecialCObjectRule(charproc,$(_NOOP_),$(MISC_DEFINES))
239SpecialCObjectRule(data,$(_NOOP_),$(MISC_DEFINES))
240
241#if InstallXtermSetUID
242SetUIDProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(PTYLIB))
243#else
244NormalProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(UTMPLIB) $(PTYLIB))
245#endif
246
247#if InstallXtermSetUID && defined(SunArchitecture) && HasSharedLibraries && (OSMajorVersion < 5)
248#if AlternateUsrLibDir
249#if ((OSMajorVersion == 4) && (OSMinorVersion >= 1))
250LDOVERRIDE = -L$(DESTDIR)$(USRLIBDIR)
251#else
252#if HasGcc
253LDOVERRIDE = -static -L$(DESTDIR)$(USRLIBDIR)
254#else
255LDOVERRIDE = -Bstatic -L$(DESTDIR)$(USRLIBDIR)
256LDRESUME = -Bdynamic
257#endif
258#endif
259#endif
260install::
261	MakeDir($(DESTDIR)$(BINDIR))
262	RemoveFile(ProgramTargetName(xterm.inst))
263	LinkRule(ProgramTargetName(xterm.inst),$(CDEBUGFLAGS) $(CCOPTIONS)
264	$(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS),$(OBJS1),$(LDOVERRIDE)
265	$(XRFLIBS) XawClientLibs $(LDRESUME) $(LDLIBS) $(TERMCAPLIB)
266	$(PTYLIB))
267	$(INSTALL) -c $(INSTPGMFLAGS) $(INSTSETIDFLAGS) ProgramTargetName(xterm.inst) $(DESTDIR)$(BINDIR)/ProgramTargetName(xterm)
268	RemoveFile(ProgramTargetName(xterm.inst))
269#else
270InstallProgramWithFlags(xterm,$(BINDIR),$(INSTSETIDFLAGS))
271#endif
272
273InstallNamedProg(uxterm,uxterm,$(BINDIR))
274
275/*
276 * Link with the termcap library if USE_TERMCAP is defined in resize.c
277 */
278#if	defined(NTOArchitecture)	|| \
279	defined(LinuxArchitecture)	|| \
280	defined(OpenBSDArchitecture)	|| \
281	defined(SGIArchitecture)	|| \
282	defined(SunArchitecture)
283NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,NullParameter)
284#else
285NormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,$(TERMCAPLIB))
286#endif
287
288InstallProgramWithFlags(resize,$(BINDIR),NullParameter)
289
290/*
291 * termcap is a special name that does not install correctly with
292 * InstallNamedNonExec()
293 */
294install::
295	MakeDir($(DESTDIR)$(LIBDIR)/etc)
296	$(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) termcap \
297		$(DESTDIR)$(LIBDIR)/etc/xterm.termcap
298InstallNamedNonExec(terminfo,xterm.terminfo,$(LIBDIR)/etc)
299
300InstallAppDefaults(XTerm)
301InstallAppDefaults(UXTerm)
302InstallAppDefaultsLong(XTerm-col,XTerm-color)
303InstallManPage(xterm,$(MANDIR))
304InstallManPage(resize,$(MANDIR))
305DependTarget()
306