104b94745SmrgXCOMM $XTermId: Imakefile,v 1.123 2019/11/02 21:50:51 tom Exp $
2d522f475SmrgXCOMM
3d522f475SmrgXCOMM                         Attention xterm porters
4d522f475SmrgXCOMM
5d522f475SmrgXCOMM
6d522f475SmrgXCOMM Xterm assumes that bcopy can handle overlapping arguments.  If your
7d522f475SmrgXCOMM bcopy (or memcpy) cannot, write a routine called bcopy and link it in
8d522f475SmrgXCOMM or add -Dbcopy=mybcopy to the DEFINES list below.
9d522f475SmrgXCOMM
10d522f475Smrg
11d522f475Smrg/* Uncomment SCROLLBAR_RIGHT if you want the scroll bar to be on the right */
12d522f475SmrgSCROLLBAR_RIGHT = -DSCROLLBAR_RIGHT
13d522f475Smrg
14d522f475Smrg/* Define UTF8support to compile-in support for UTF-8 */
15d522f475Smrg#define UTF8support
16d522f475Smrg
17d522f475Smrg/*
18d522f475Smrg * setgid mode works for systems that do not require setuid to open pty.
19d522f475Smrg *
20d522f475Smrg * This feature could also be applied to FreeBSD, but requires the installer
21d522f475Smrg * to define a "utmp" group as well as chgrp the utmp file to match.
22d522f475Smrg *
23d522f475Smrg * Note: InstallXtermSetUID is always defined; InstallXtermSetGID is defined
24d522f475Smrg * in newer imake configurations.
25d522f475Smrg */
26d522f475Smrg#if !defined(InstallXtermSetGID) && !InstallXtermSetUID
27d522f475Smrg#if defined(OpenBSDArchitecture) || \
28d522f475Smrg    (defined(LinuxArchitecture) && \
29d522f475Smrg     (LinuxCLibMajorVersion == 6))
30d522f475Smrg#define InstallXtermSetGID YES
31d522f475Smrg#endif
32d522f475Smrg#endif
33d522f475Smrg
34d522f475Smrg/*
35d522f475Smrg * Override the set uid/gid flags to use the utempter library.
36d522f475Smrg */
37d522f475Smrg#if defined(UseUtempter)
38d522f475Smrg#undef InstallXtermSetUID /* imake sets this */
39d522f475Smrg#undef InstallXtermSetGID /* we set this */
40d522f475Smrg#define InstallXtermSetUID NO
41d522f475Smrg#define InstallXtermSetGID NO
42d522f475Smrg        UTMPLIB = -lutempter
43d522f475Smrg#endif
44d522f475Smrg
45d522f475Smrg/*
46d522f475Smrg * Fixes to allow compile with X11R5, etc.
47d522f475Smrg */
48d522f475Smrg#ifndef InstGidFlags
49d522f475Smrg#define InstGidFlags -m 2755 -g utmp
50d522f475Smrg#endif
51d522f475Smrg
52d522f475Smrg#ifndef InstUidFlags
53d522f475Smrg#define InstUidFlags -m 4711
54d522f475Smrg#endif
55d522f475Smrg
56d522f475Smrg#ifndef XkbClientDefines
57d522f475Smrg#define XkbClientDefines /**/
58d522f475Smrg#endif
59d522f475Smrg
60d522f475Smrg#ifndef InstallXtermSetUID
61d522f475Smrg#define InstallXtermSetUID NO
62d522f475Smrg#endif
63d522f475Smrg
64d522f475Smrg#ifndef InstallXtermSetGID
65d522f475Smrg#define InstallXtermSetGID NO
66d522f475Smrg#endif
67d522f475Smrg
68d522f475Smrg#ifndef XkbClientDepLibs
69d522f475Smrg#define XkbClientDepLibs /**/
70d522f475Smrg#endif
71d522f475Smrg
72d522f475Smrg#ifndef XkbClientLibs
73d522f475Smrg#define XkbClientLibs /**/
74d522f475Smrg#endif
75d522f475Smrg
76d522f475Smrg/* This must come before setting DEFINES */
77d522f475Smrg#if InstallXtermSetGID
78d522f475SmrgCSGIDFLAGS = -DUSE_UTMP_SETGID
79d522f475SmrgINSTSETIDFLAGS = InstGidFlags
80d522f475Smrg#elif InstallXtermSetUID
81d522f475SmrgINSTSETIDFLAGS = InstUidFlags
82d522f475Smrg#else
83d522f475SmrgINSTSETIDFLAGS = NullParameter
84d522f475Smrg#endif
85d522f475Smrg
86d522f475Smrg/*
87d522f475Smrg * Compensate for broken imake configuration.
88d522f475Smrg */
89d522f475Smrg#ifdef LinuxGnuSourceDefines
90d522f475Smrg# ifdef UseInstalled
91f2e35a3aSmrg   IMAKEDEFINES = -D_DEFAULT_SOURCE -U_XOPEN_SOURCE -D_XOPEN_SOURCE=600
92d522f475Smrg# endif
93d522f475Smrg#endif
94d522f475Smrg
95d522f475Smrg#ifndef SpecialCObjectRule
96d522f475Smrg#define SpecialCObjectRule(module,ignore,defines) \
97d522f475Smrgmodule.o: ; $(CC) -c defines $(CFLAGS) module.c
98d522f475Smrg#endif
99d522f475Smrg
100d522f475Smrg#ifndef ProgramTargetName
101d522f475Smrg#define ProgramTargetName(program) program
102d522f475Smrg#endif
103d522f475Smrg
104d522f475Smrg/*
105d522f475Smrg * add -DWTMP and -DLASTLOG if you want them; make sure that bcopy can
106d522f475Smrg * handle overlapping copies before using it.
107d522f475Smrg */
108d522f475Smrg#if SetTtyGroup			/* turn on in config/machine.cf */
109d522f475Smrg    TTYGROUPDEF = -DUSE_TTY_GROUP
110d522f475Smrg#endif
111d522f475Smrg#ifdef UsePUCCPtyd		/* turn on in config/site.def */
112d522f475Smrg    PUCCPTYDDEF = -DPUCC_PTYD	/* does not need to be setuid */
113d522f475Smrg         PTYLIB = -lpucc
114d522f475Smrg#endif
115d522f475Smrg
116d522f475Smrg#if defined(NetBSDArchitecture) || \
117d522f475Smrg    defined(OpenBSDArchitecture) || \
118d522f475Smrg    defined(FreeBSDArchitecture) || \
119d522f475Smrg    (defined(LinuxArchitecture) && \
120d522f475Smrg     (LinuxCLibMajorVersion == 6) && (LinuxCLibMinorVersion < 1))
121d522f475Smrg         PTYLIB = -lutil
122d522f475Smrg#endif
123d522f475Smrg
124d522f475Smrg#ifdef DarwinArchitecture
125d522f475Smrg/* dyld can deadlock if a signal comes in when it is looking up a symbol */
126d522f475Smrg  LOCAL_LDFLAGS = -Wl,-bind_at_load
127d522f475Smrg#endif
128d522f475Smrg
129d522f475Smrg OSMAJORVERSION = OSMajorVersion
130d522f475Smrg OSMINORVERSION = OSMinorVersion
131d522f475Smrg
132f2e35a3aSmrg/* none of these can be expected to use termcap unless emulated by terminfo */
133a1f3da82Smrg#if	defined(NTOArchitecture)	|| \
134a1f3da82Smrg	defined(OpenBSDArchitecture)	|| \
135a1f3da82Smrg	defined(SGIArchitecture)	|| \
136f2e35a3aSmrg	defined(SunArchitecture)	|| \
137f2e35a3aSmrg	defined(NetBSDArchitecture)	|| \
138f2e35a3aSmrg	defined(OpenBSDArchitecture)	|| \
139f2e35a3aSmrg	defined(FreeBSDArchitecture)	|| \
140f2e35a3aSmrg	defined(LinuxArchitecture)
141f2e35a3aSmrgTERMCAPDEFINES=-DUSE_TERMINFO -DHAVE_TIGETSTR -DHAVE_TERM_H
142a1f3da82Smrg#endif
143a1f3da82Smrg
14401037d57Smrg#if !defined(OS2Architecture) && !defined(__GNU__) && !defined(Minix3Architecture)
145d522f475Smrg#if defined(UseUtempter)
146d522f475Smrg        UTMPDEF = -DUSE_UTEMPTER
147d522f475Smrg#else
148d522f475Smrg        UTMPDEF = -DUTMP
149d522f475Smrg#endif
150d522f475Smrg#endif
151d522f475Smrg
152d522f475Smrg#ifdef UTF8support
153d522f475Smrg    UTF8_OPTION = -DOPT_WIDE_CHARS -DOPT_LUIT_PROG
154d522f475Smrg        UTF8SRC = charclass.c precompose.c wcwidth.c xutf8.c
155d522f475Smrg        UTF8OBJ = charclass.o precompose.o wcwidth.o xutf8.o
156d522f475Smrg#endif
157d522f475Smrg#if BuildXftLibrary
158d522f475Smrg#define XRenderSupport
159d522f475Smrg#endif
160d522f475Smrg#ifdef XRenderSupport
161d522f475Smrg         XRFDEF = -DXRENDERFONT -DXFREE86_FT2
162d522f475Smrg        XRFLIBS = XftClientLibs
163d522f475Smrg     XRFDEPLIBS = XftClientDepLibs
164d522f475Smrg    XRFINCLUDES = $(XFTINCLUDES)
165d522f475Smrg#endif
166d522f475Smrg#if !HasPutenv
167d522f475Smrg      PUTENVDEF = -DNOPUTENV
168d522f475Smrg#endif
169894e0ac8Smrg#ifdef RegisXTerm
170894e0ac8Smrg       SIXELDEF = -DOPT_REGIS_GRAPHICS=1
171894e0ac8Smrg#endif
172e0a2b6dfSmrg#ifdef SixelXTerm
173e0a2b6dfSmrg       SIXELDEF = -DOPT_SIXEL_GRAPHICS=1
174e0a2b6dfSmrg#endif
175d522f475Smrg#ifdef TraceXTerm
176d522f475Smrg       TRACEDEF = -DOPT_TRACE=1
177d522f475Smrg#endif
178d522f475Smrg   MAIN_DEFINES = $(UTMPDEF) $(TTYGROUPDEF) $(PUCCPTYDDEF) $(CSGIDFLAGS) \
179d522f475Smrg		  -DOSMAJORVERSION=$(OSMAJORVERSION) \
180d522f475Smrg		  -DOSMINORVERSION=$(OSMINORVERSION)
181d522f475Smrg   MISC_DEFINES = /* -DALLOWLOGGING -DALLOWLOGFILEEXEC */
182d522f475Smrg    XKB_DEFINES = XkbClientDefines
183d522f475Smrg   PATH_DEFINES = -DPROJECTROOT=$(PROJECTROOT)
184f2e35a3aSmrg        DEFINES = $(XKB_DEFINES) $(TERMCAPDEFINES) $(FEATURE_DEFINES) $(SCROLLBAR_RIGHT) $(UTF8_OPTION) $(XRFDEF) $(PATH_DEFINES) $(PUTENVDEF) $(IMAKEDEFINES) $(SIXELDEF) $(TRACEDEF)
185d522f475Smrg       INCLUDES = -I. $(XRFINCLUDES)
186d522f475Smrg
187d522f475Smrg        MAINSRC = main.c
188d522f475Smrg        MAINOBJ = main.o
1892e4f8982Smrg       DUMPSSRC = html.c svg.c
1902e4f8982Smrg       DUMPSOBJ = html.o svg.o
191894e0ac8Smrg#ifdef RegisXTerm
192894e0ac8Smrg       SIXELSRC = graphics_regis.c
193894e0ac8Smrg       SIXELOBJ = graphics_regis.o
194894e0ac8Smrg#endif
195e0a2b6dfSmrg#ifdef SixelXTerm
196894e0ac8Smrg       SIXELSRC = graphics_sixel.c
197894e0ac8Smrg       SIXELOBJ = graphics_sixel.o
198e0a2b6dfSmrg#endif
199d522f475Smrg#ifdef TraceXTerm
200d522f475Smrg       TRACESRC = trace.c
201d522f475Smrg       TRACEOBJ = trace.o
202d522f475Smrg#endif
203d522f475Smrg          SRCS1 = button.c cachedGCs.c charproc.c charsets.c cursor.c \
204d522f475Smrg		  data.c doublechr.c fontutils.c input.c \
205956cc18dSsnj		  linedata.c menu.c misc.c print.c ptydata.c scrollback.c \
2060bd37d32Smrg		  screen.c scrollbar.c tabs.c util.c version.c xstrings.c \
2070bd37d32Smrg		  xtermcap.c TekPrsTbl.c Tekproc.c VTPrsTbl.c \
2082e4f8982Smrg		  $(MAINSRC) $(EXTRASRC) $(UTF8SRC) $(SIXELSRC) $(TRACESRC) $(DUMPSSRC)
209d522f475Smrg          OBJS1 = button.o cachedGCs.o charproc.o charsets.o cursor.o \
210d522f475Smrg		  data.o doublechr.o fontutils.o input.o \
211956cc18dSsnj		  linedata.o menu.o misc.o print.o ptydata.o scrollback.o \
2120bd37d32Smrg		  screen.o scrollbar.o tabs.o util.o version.o xstrings.o \
2130bd37d32Smrg		  xtermcap.o TekPrsTbl.o Tekproc.o VTPrsTbl.o \
2142e4f8982Smrg		  $(MAINOBJ) $(EXTRAOBJ) $(UTF8OBJ) $(SIXELOBJ) $(TRACEOBJ) $(DUMPSOBJ)
2150bd37d32Smrg          SRCS2 = resize.c version.c xstrings.c
2160bd37d32Smrg          OBJS2 = resize.o version.o xstrings.o
217d522f475Smrg           SRCS = $(SRCS1) $(SRCS2)
218d522f475Smrg           OBJS = $(OBJS1) $(OBJS2)
219d522f475Smrg       PROGRAMS = ProgramTargetName(resize) ProgramTargetName(xterm)
220d522f475Smrg       DEPLIBS1 = XkbClientDepLibs XawClientDepLibs $(XRFDEPLIBS)
221d522f475Smrg       DEPLIBS2 =
222d522f475Smrg
223d522f475Smrg#ifndef TermcapLibrary
224d522f475Smrg#if SystemV && !defined(MacIIArchitecture)
225d522f475Smrg#if	defined(CrayArchitecture) || \
226d522f475Smrg	(defined(HPArchitecture) && (OSMajorVersion < 10)) || \
227d522f475Smrg	defined(RsArchitecture) || \
228d522f475Smrg	defined(SCOArchitecture) || \
229d522f475Smrg	defined(USLArchitecture)
230d522f475Smrg#define TermcapLibrary -lcurses		/* special cases of System V */
231d522f475Smrg#else
232d522f475Smrg#define TermcapLibrary -ltermlib	/* usually in here */
233d522f475Smrg#endif
234d522f475Smrg#else
235d522f475Smrg#define TermcapLibrary -ltermcap	/* bsd puts it here */
236d522f475Smrg#endif
237d522f475Smrg#endif
238d522f475Smrg
239d522f475Smrg     TERMCAPLIB = TermcapLibrary
240d522f475Smrg
241d522f475SmrgAllTarget($(PROGRAMS))
242d522f475Smrg
2432e4f8982SmrgVTPARSE_H = VTparse.h VTparse.hin
2442e4f8982SmrgTEKPARSE_H = Tekparse.h Tekparse.hin
2452e4f8982Smrg
246f2e35a3aSmrgVTPARSE_C = VTparse.h VTparse.cin
247f2e35a3aSmrgTEKPARSE_C = Tekparse.h Tekparse.cin
248f2e35a3aSmrg
249f2e35a3aSmrg.SUFFIXES : .def .cin .hin
250f2e35a3aSmrg.def.cin :
251f2e35a3aSmrg	awk '/^CASE_/{printf "{ %d, \"%s\" },\n", n++, $$1; }' < $< >$@
2522e4f8982Smrg.def.hin :
2532e4f8982Smrg	awk '/^CASE_/{printf "#define %s %d\n", $$1, n++}' < $< >$@
2542e4f8982Smrg
255d522f475SmrgSpecialCObjectRule(main,$(_NOOP_),$(MAIN_DEFINES))
256d522f475SmrgSpecialCObjectRule(menu,$(_NOOP_),$(MISC_DEFINES))
2572e4f8982SmrgSpecialCObjectRule(misc,$(VTPARSE_H),$(MISC_DEFINES))
2582e4f8982SmrgSpecialCObjectRule(VTPrsTbl,$(VTPARSE_H),$(MISC_DEFINES))
2592e4f8982SmrgSpecialCObjectRule(charproc,$(VTPARSE_H),$(MISC_DEFINES))
260d522f475SmrgSpecialCObjectRule(data,$(_NOOP_),$(MISC_DEFINES))
2612e4f8982SmrgSpecialCObjectRule(TekPrsTbl,$(TEKPARSE_H),$(MISC_DEFINES))
2622e4f8982SmrgSpecialCObjectRule(TekProc,$(TEKPARSE_H),$(MISC_DEFINES))
263f2e35a3aSmrgSpecialCObjectRule(trace,$(VTPARSE_C) $(TEKPARSE_C),$(MISC_DEFINES))
264d522f475Smrg
265d522f475Smrg#if InstallXtermSetUID
266d522f475SmrgSetUIDProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(PTYLIB))
267d522f475Smrg#else
268d522f475SmrgNormalProgramTarget(xterm,$(OBJS1),$(DEPLIBS1),$(XRFLIBS) XkbClientLibs XawClientLibs,$(TERMCAPLIB) $(UTMPLIB) $(PTYLIB))
269d522f475Smrg#endif
270d522f475Smrg
2710bd37d32Smrg#if defined(OpenBSDArchitecture) || defined(MirBSDArchitecture)
2720bd37d32Smrg/* On OpenBSD xterm is now setgid utmp */
2730bd37d32SmrgINSTUIDFLAGS= -m 2555 -g utmp
2740bd37d32Smrg#endif
2750bd37d32Smrg
276d522f475Smrg#if InstallXtermSetUID && defined(SunArchitecture) && HasSharedLibraries && (OSMajorVersion < 5)
277d522f475Smrg#if AlternateUsrLibDir
278d522f475Smrg#if ((OSMajorVersion == 4) && (OSMinorVersion >= 1))
279d522f475SmrgLDOVERRIDE = -L$(DESTDIR)$(USRLIBDIR)
280d522f475Smrg#else
281d522f475Smrg#if HasGcc
282d522f475SmrgLDOVERRIDE = -static -L$(DESTDIR)$(USRLIBDIR)
283d522f475Smrg#else
284d522f475SmrgLDOVERRIDE = -Bstatic -L$(DESTDIR)$(USRLIBDIR)
285d522f475SmrgLDRESUME = -Bdynamic
286d522f475Smrg#endif
287d522f475Smrg#endif
288d522f475Smrg#endif
289d522f475Smrginstall::
290d522f475Smrg	MakeDir($(DESTDIR)$(BINDIR))
291d522f475Smrg	RemoveFile(ProgramTargetName(xterm.inst))
292d522f475Smrg	LinkRule(ProgramTargetName(xterm.inst),$(CDEBUGFLAGS) $(CCOPTIONS)
293d522f475Smrg	$(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS),$(OBJS1),$(LDOVERRIDE)
294d522f475Smrg	$(XRFLIBS) XawClientLibs $(LDRESUME) $(LDLIBS) $(TERMCAPLIB)
295d522f475Smrg	$(PTYLIB))
296d522f475Smrg	$(INSTALL) -c $(INSTPGMFLAGS) $(INSTSETIDFLAGS) ProgramTargetName(xterm.inst) $(DESTDIR)$(BINDIR)/ProgramTargetName(xterm)
297d522f475Smrg	RemoveFile(ProgramTargetName(xterm.inst))
298d522f475Smrg#else
299d522f475SmrgInstallProgramWithFlags(xterm,$(BINDIR),$(INSTSETIDFLAGS))
300d522f475Smrg#endif
301d522f475Smrg
302d522f475SmrgInstallNamedProg(uxterm,uxterm,$(BINDIR))
303d522f475Smrg
304d522f475Smrg/*
305d522f475Smrg * Link with the termcap library if USE_TERMCAP is defined in resize.c
306d522f475Smrg */
307d522f475Smrg#if	defined(NTOArchitecture)	|| \
308d522f475Smrg	defined(LinuxArchitecture)	|| \
309d522f475Smrg	defined(OpenBSDArchitecture)	|| \
310d522f475Smrg	defined(SGIArchitecture)	|| \
311d522f475Smrg	defined(SunArchitecture)
312d522f475SmrgNormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,NullParameter)
313d522f475Smrg#else
314d522f475SmrgNormalProgramTarget(resize,$(OBJS2),$(DEPLIBS2),NullParameter,$(TERMCAPLIB))
315d522f475Smrg#endif
316d522f475Smrg
317d522f475SmrgInstallProgramWithFlags(resize,$(BINDIR),NullParameter)
318d522f475Smrg
319d522f475Smrg/*
320d522f475Smrg * termcap is a special name that does not install correctly with
321d522f475Smrg * InstallNamedNonExec()
322d522f475Smrg */
323d522f475Smrginstall::
324d522f475Smrg	MakeDir($(DESTDIR)$(LIBDIR)/etc)
325d522f475Smrg	$(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) termcap \
326d522f475Smrg		$(DESTDIR)$(LIBDIR)/etc/xterm.termcap
327d522f475SmrgInstallNamedNonExec(terminfo,xterm.terminfo,$(LIBDIR)/etc)
328d522f475Smrg
329d522f475SmrgInstallAppDefaults(XTerm)
330d522f475SmrgInstallAppDefaults(UXTerm)
331d522f475SmrgInstallAppDefaultsLong(XTerm-col,XTerm-color)
332d522f475SmrgInstallManPage(xterm,$(MANDIR))
333d522f475SmrgInstallManPage(resize,$(MANDIR))
3342e4f8982Smrg
3352e4f8982Smrgcleandir::
336f2e35a3aSmrg	$(RM) *parse.hin *parse.cin
3372e4f8982Smrg
338d522f475SmrgDependTarget()
339