1#         $NetBSD: Makefile,v 1.25 2021/02/26 02:54:21 rin Exp $
2
3.include <bsd.own.mk>
4
5USE_WIDECHAR?=yes
6
7.if ${USE_WIDECHAR} == "yes"
8USE_BUILTIN_REGEX?=yes        # Although our regex supports widechar nvi requires
9                              # a non-standard API
10.else
11USE_BUILTIN_REGEX?=no
12.endif
13
14WARNS=    5
15
16COPTS.exf.c+=                 -Wno-format-nonliteral
17COPTS.msg.c+=                 -Wno-format-nonliteral
18.if ${USE_WIDECHAR} != "yes"
19COPTS.v_increment.c+=         -Wno-format-nonliteral
20CWARNFLAGS.gcc+=    -Wno-unused
21CWARNFLAGS.clang+=  -Wno-unsequenced
22.endif
23CWARNFLAGS.clang+=  -Wno-error=string-compare
24
25CPPFLAGS+=-I${DIST}/include -I${.CURDIR} -I.
26CPPFLAGS+=-DGTAGS -DIMCTRL
27CPPFLAGS+=-DHAVE_OPENPTY -DHAVE_UTIL_H
28CPPFLAGS+=-DHAVE_SIGTIMEDWAIT
29CPPFLAGS+=-DHAVE_MVWCHGAT
30
31#DBG=-g
32#CPPFLAGS+=-DLOGDEBUG -DTRACE
33#CPPFLAGS+=-DDBDEBUG -DTRACE
34#CPPFLAGS+=-DQUEUEDEBUG
35
36LDADD+=   -lcurses -lterminfo -lutil
37DPADD+=   ${LIBCURSES} ${LIBTERMINFO} ${LIBUTIL}
38PROG=     vi
39SRCS=     api.c cl_bsd.c cl_funcs.c cl_main.c cl_read.c cl_screen.c cl_term.c \
40          conv.c cut.c delete.c ex.c ex_abbrev.c ex_append.c \
41          ex_args.c ex_argv.c ex_at.c ex_bang.c ex_cd.c ex_cmd.c ex_cscope.c \
42          ex_delete.c ex_display.c ex_edit.c ex_equal.c ex_file.c ex_filter.c \
43          ex_global.c ex_init.c ex_join.c ex_map.c ex_mark.c ex_mkexrc.c \
44          ex_move.c ex_open.c ex_perl.c ex_preserve.c ex_print.c ex_put.c \
45          ex_quit.c ex_read.c ex_screen.c ex_script.c ex_set.c ex_shell.c \
46          ex_shift.c ex_source.c ex_stop.c ex_subst.c ex_tag.c ex_tcl.c \
47          ex_txt.c ex_undo.c ex_usage.c ex_util.c ex_version.c ex_visual.c \
48          ex_write.c ex_yank.c ex_z.c exf.c getc.c gs.c \
49          key.c trace.c \
50          main.c mark.c msg.c nothread.c options.c options_f.c put.c recover.c \
51          screen.c search.c seq.c util.c v_at.c v_ch.c v_cmd.c v_delete.c \
52          v_event.c v_ex.c v_increment.c v_init.c v_itxt.c v_left.c v_mark.c \
53          v_match.c v_paragraph.c v_put.c v_redraw.c v_replace.c v_right.c \
54          v_screen.c v_scroll.c v_search.c v_section.c v_sentence.c v_status.c \
55          v_txt.c v_ulcase.c v_undo.c v_util.c v_word.c v_xchar.c v_yank.c \
56          v_z.c v_zexit.c vi.c vs_line.c vs_msg.c vs_refresh.c \
57          vs_relative.c vs_smap.c vs_split.c
58
59NOTUSED=ip_funcs.c ip_read.c ip_screen.c ip_term.c \
60          ip_run.c ip_send.c ip_trans.c ipc_cmd.c ipc_method.c
61
62# For wide char support
63.if ${USE_WIDECHAR} == "yes"
64CPPFLAGS+=-DUSE_WIDECHAR
65.endif
66.if ${USE_BUILTIN_REGEX} == "yes"
67SRCS+=    regcomp.c regerror.c regexec.c regfree.c
68CPPFLAGS+=-I${DIST}/regex -D__REGEX_PRIVATE
69COPTS.regexec.c+= ${${ACTIVE_CC} == "gcc":? -Wno-old-style-definition :}
70.endif
71
72# For db3 db1 emulation
73#SRCS+=db1.c log.c vi_db.c
74#CPPFLAGS+=-DUSE_DB1
75
76# For built-in db1 emulation
77SRCS+=vi_db1.c log1.c
78CPPFLAGS+=-DUSE_BUNDLED_DB
79
80LINKS=    ${BINDIR}/vi ${BINDIR}/ex ${BINDIR}/vi ${BINDIR}/view
81MLINKS=   vi.1 ex.1 vi.1 view.1
82
83DPSRCS+=options_def.h ipc_def.h ex_def.h # ipc_gen.c
84CLEANFILES+=options_def.h ipc_def.h ex_def.h # ipc_gen.c
85
86options_def.h: options.awk options.c
87          ${_MKTARGET_CREATE}
88          ${TOOL_AWK} -f ${.ALLSRC} >${.TARGET}
89
90ex_def.h: ex.awk ex_cmd.c
91          ${_MKTARGET_CREATE}
92          ${TOOL_AWK} -f ${.ALLSRC} >${.TARGET}
93
94ipc_def.h: ipc.awk vipc.awk ipc_cmd.c ip_read.c
95          ${_MKTARGET_CREATE}
96          (${TOOL_AWK} -f ${.ALLSRC:M*/ipc.awk} ${.ALLSRC:M*/ipc_cmd.c} && \
97              ${TOOL_AWK} -f ${.ALLSRC:M*/vipc.awk} ${.ALLSRC:M*/ip_read.c}) > \
98              ${.TARGET}
99
100.for i in cl common ex ip ipc vi
101DPSRCS+=${i}_extern.h
102CLEANFILES+=${i}_extern.h
103# does not work, DIST isn't set yet here
104#_${i}_SRCS != echo ${DIST}/${i}/*.c ${DIST}/${i}/*.xs
105${i}_extern.h: ${SRCS} ${NOTUSED}
106          ${_MKTARGET_CREATE}
107          @${TOOL_SED} -n "s/^ \* PUBLIC: \(.*\)/\1/p" ${.ALLSRC:M${DIST}/$i/*} > ${.TARGET}.tmp
108          @if cmp -s ${.TARGET}.tmp ${.TARGET}; then \
109                    rm -f ${.TARGET}.tmp; \
110          else \
111                    mv -f ${.TARGET}.tmp ${.TARGET}; \
112          fi
113.endfor
114
115DPSRCS+=version.h
116CLEANFILES+=version.h
117version.h:          ../../Makefile.inc
118          ${_MKTARGET_CREATE}
119          echo '#define VI_VERSION "(${VERSION})"' > ${.TARGET}
120
121#ipc_gen.c: vipc.pl ip_read.c
122#         ${_MKTARGET_CREATE}
123#         ${TOOL_PERL} -n ${.ALLSRC} > ${.TARGET}
124
125
126.include "${.CURDIR}/../../Makefile.inc"
127
128.PATH: ${DIST}/vi ${DIST}/ex ${DIST}/cl
129.PATH: ${DIST}/common
130.PATH: ${DIST}/ipc
131.PATH: ${DIST}/ip
132.PATH: ${DIST}/regex
133.PATH: ${DIST}/docs/vi.man
134
135.include <bsd.prog.mk>
136