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