source: trunk/src/grep/Makefile.kmk@ 3536

Last change on this file since 3536 was 3536, checked in by bird, 4 years ago

grep: Windows console output optimizations.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 10.8 KB
Line 
1# $Id: Makefile.kmk 3536 2021-12-20 23:32:59Z bird $
2## @file
3# Sub-Makefile for kmk_grep.
4#
5
6#
7# Copyright (c) 2006-2010 knut st. osmundsen <bird-kBuild-spamx@anduin.net>
8#
9# This file is part of kBuild.
10#
11# kBuild is free software; you can redistribute it and/or modify
12# it under the terms of the GNU General Public License as published by
13# the Free Software Foundation; either version 3 of the License, or
14# (at your option) any later version.
15#
16# kBuild is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU General Public License for more details.
20#
21# You should have received a copy of the GNU General Public License
22# along with kBuild. If not, see <http://www.gnu.org/licenses/>
23#
24#
25
26SUB_DEPTH = ../..
27include $(KBUILD_PATH)/subheader.kmk
28
29#
30# Grep uses C99 syntax, which isn't supported by older microsoft compilers,
31# so select a newer one if needed and do static linking.
32#
33TEMPLATE_BINC99 = Accept C99 syntax
34TEMPLATE_BINC99_EXTENDS = BIN
35if1of ($(KBUILD_TARGET), win nt)
36 ifeq ($(TEMPLATE_BIN_TOOL),VCC100)
37 TEMPLATE_BINC99_TOOL = VCC142
38 TEMPLATE_BINC99_TOOL.x86 = VCC142X86
39 TEMPLATE_BINC99_TOOL.amd64 = VCC142AMD64
40 TEMPLATE_BINC99_SDKS = WINSDK10-UM WINSDK10-UCRT-STATIC
41 TEMPLATE_BINC99_CFLAGS = $(filter-out -MD,$(TEMPLATE_BIN_CFLAGS)) -MT -Gy -Gw -Zc:inline
42 TEMPLATE_BINC99_LDFLAGS = $(TEMPLATE_BIN_LDFLAGS) /OPT:REF
43 TEMPLATE_BINC99_LIBS = \
44 $(PATH_TOOL_$(TEMPLATE_BINC99_TOOL)_LIB.$(KBUILD_TARGET_ARCH))/vcruntime.lib \
45 $(PATH_TOOL_$(TEMPLATE_BINC99_TOOL)_LIB.$(KBUILD_TARGET_ARCH))/oldnames.lib \
46 $(PATH_TOOL_$(TEMPLATE_BINC99_TOOL)_LIB.$(KBUILD_TARGET_ARCH))/libcmt.lib \
47 $(PATH_TOOL_$(TEMPLATE_BINC99_TOOL)_LIB.$(KBUILD_TARGET_ARCH))/libcpmt.lib
48 TEMPLATE_BINC99_LIBS.x86 = $(NO_SUCH_VARIABLE)
49 TEMPLATE_BINC99_LIBS.amd64 = $(NO_SUCH_VARIABLE)
50 endif
51endif
52
53#
54# kmk_grep
55#
56PROGRAMS += kmk_grep
57kmk_grep_TEMPLATE = BINC99
58kmk_grep_DEPS = \
59 $(kmk_grep_0_OUTDIR)/config.h \
60 $(kmk_grep_0_OUTDIR)/configmake.h
61kmk_grep_DEPS.win = \
62 $(kmk_grep_0_OUTDIR)/getopt-cdefs.h \
63 $(kmk_grep_0_OUTDIR)/getopt.h \
64 $(kmk_grep_0_OUTDIR)/unistd.h \
65 $(kmk_grep_0_OUTDIR)/sigsegv.h \
66 $(kmk_grep_0_OUTDIR)/fnmatch.h
67kmk_grep_CLEAN = $(kmk_grep_DEPS)
68kmk_grep_CFLAGS.solaris = -std=gnu99
69kmk_grep_CFLAGS.win += -wd4018 # grep.c(797): warning C4018: '<': signed/unsigned mismatch [lots of size_t / ptrdiff_t mixups]
70kmk_grep_CFLAGS.win += -wd4244 # grep.c(1423): warning C4244: '=': conversion from '__int64' to 'off_t', possible loss of data
71kmk_grep_CFLAGS.win += -wd4267 # grep.c(2303): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
72kmk_grep_CFLAGS.win += -wd4146 # fnmatch_loop.c(1067): warning C4146: unary minus operator applied to unsigned type, result still unsigned
73kmk_grep_CFLAGS.win += -wd4308 # fnmatch_loop.c(1067): warning C4308: negative integral constant converted to unsigned type
74kmk_grep_INCS = \
75 $(kmk_grep_0_OUTDIR) \
76 . \
77 lib
78kmk_grep_DEFS = \
79 KMK_GREP \
80 HAVE_CONFIG_H
81ifdef KBUILD_SOLARIS_10
82 kmk_grep_CFLAGS += -std=gnu99
83endif
84kmk_grep_SOURCES = \
85 src/grep.c \
86 src/dfasearch.c \
87 src/kwsearch.c \
88 src/kwset.c \
89 src/searchutils.c \
90 \
91 lib/regex.c \
92 lib/dfa.c \
93 \
94 lib/getopt1.c \
95 lib/getopt.c \
96 \
97 lib/xalloc-die.c \
98 lib/xmalloc.c \
99 lib/reallocarray.c \
100 lib/obstack.c \
101 lib/c-stack.c \
102 lib/malloc/dynarray_resize.c \
103 \
104 lib/stripslash.c \
105 lib/argmatch.c \
106 lib/quotearg.c \
107 lib/exclude.c \
108 lib/fnmatch.c \
109 lib/hash.c \
110 lib/error.c \
111 \
112 lib/openat-safer.c \
113 lib/fd-safer.c \
114 lib/fd-safer-flag.c \
115 lib/dup-safer.c \
116 lib/dup-safer-flag.c \
117 lib/closeout.c \
118 lib/close-stream.c \
119 lib/fpending.c \
120 lib/safe-read.c \
121 \
122 lib/c-strcasecmp.c \
123 lib/localeinfo.c \
124 lib/localcharset.c \
125 lib/mbchar.c \
126 lib/mbscasecmp.c \
127 lib/memrchr.c \
128 lib/memchr2.c \
129 lib/wmempcpy.c \
130 lib/strnlen1.c \
131 lib/xstrtoimax.c \
132 \
133 lib/exitfail.c \
134 lib/version-etc.c \
135 lib/version-etc-fsf.c \
136
137kmk_grep_SOURCES.win = \
138 lib/w32-initialize-main.c \
139 lib/colorize-w32.c \
140 lib/basename-lgpl.c \
141 lib/getpagesize.c \
142 lib/getprogname-w32.c \
143 lib/xbinary-io.c \
144 lib/strerror.c \
145 \
146 ../lib/maybe_con_fwrite.c \
147 ../lib/is_console.c \
148 ../lib/nt/ntstat.c \
149 ../lib/nt/ntdir.c \
150 ../lib/nt/nthlpcore.c \
151 ../lib/nt/nthlpfs.c \
152 ../lib/nt/ntopenat.c \
153 ../lib/nt/fts-nt.c
154
155#src/pcresearch.c
156
157#kmk_grep_SOURCES.darwin = \
158# lib/strverscmp.c \
159# lib/obstack.c \
160# lib/getline.c
161#kmk_grep_SOURCES.dragonfly = \
162# lib/strverscmp.c \
163# lib/obstack.c \
164# lib/getline.c
165#kmk_grep_SOURCES.freebsd = \
166# lib/strverscmp.c \
167# lib/obstack.c \
168# lib/getline.c
169#kmk_grep_SOURCES.haiku = \
170# lib/strverscmp.c \
171# lib/obstack.c
172#kmk_grep_SOURCES.netbsd = \
173# lib/strverscmp.c \
174# lib/obstack.c \
175# lib/getline.c
176#kmk_grep_SOURCES.openbsd = \
177# lib/strverscmp.c \
178# lib/obstack.c \
179# lib/getline.c
180#kmk_grep_SOURCES.solaris = \
181# lib/strverscmp.c \
182# lib/obstack.c \
183# lib/getline.c
184#kmk_grep_SOURCES.win = \
185# lib/strverscmp.c \
186# lib/obstack.c \
187# lib/mkstemp.c \
188# lib/getline.c \
189# ../lib/startuphacks-win.c
190
191#kmk_grep_LIBS.win = $(LIB_KUTIL) # for stdout optimizations.
192
193MAKEFILE_GREP := $(MAKEFILE_CURRENT)
194
195include $(FILE_KBUILD_SUB_FOOTER)
196
197#
198# Use checked in config.h instead of running ./configure for it.
199#
200kmk_grep_config.h.$(KBUILD_TARGET) := $(kmk_grep_DEFPATH)/config.h.$(KBUILD_TARGET)
201
202$(kmk_grep_0_OUTDIR)/config.h: $(kmk_grep_DEFPATH)/config.$(KBUILD_TARGET).h | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
203 $(CP) -f -- "$^" "$@"
204
205$(kmk_grep_0_OUTDIR)/configmake.h: $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
206 $(APPEND) -tn "$@" \
207 '#define PREFIX "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
208 '#define EXEC_PREFIX "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
209 '#define BINDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
210 '#define SBINDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
211 '#define LIBEXECDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
212 '#define DATAROOTDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
213 '#define DATADIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
214 '#define SYSCONFDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
215 '#define SHAREDSTATEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
216 '#define LOCALSTATEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
217 '#define RUNSTATEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
218 '#define INCLUDEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
219 '#define OLDINCLUDEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
220 '#define DOCDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
221 '#define INFODIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
222 '#define HTMLDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
223 '#define DVIDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
224 '#define PDFDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
225 '#define PSDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
226 '#define LIBDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
227 '#define LISPDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
228 '#define LOCALEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
229 '#define MANDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
230 '#define MANEXT "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
231 '#define PKGDATADIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
232 '#define PKGINCLUDEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
233 '#define PKGLIBDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
234 '#define PKGLIBEXECDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"';
235
236#
237# Stuff Windows needs.
238#
239$(kmk_grep_0_OUTDIR)/getopt-cdefs.h: $(kmk_grep_DEFPATH)/lib/getopt-cdefs.in.h \
240 $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
241 $(SED) \
242 -e 's,@HAVE_SYS_CDEFS_H@,0,' \
243 --output "$@" \
244 $(qdeps sh,$@,1)
245
246$(kmk_grep_0_OUTDIR)/getopt.h: $(kmk_grep_DEFPATH)/lib/getopt.in.h \
247 $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
248 $(SED) \
249 -e 's,@GUARD_PREFIX@,GNULIB,' \
250 -e '/@PRAGMA_SYSTEM_HEADER@/d' \
251 -e '/@PRAGMA_COLUMNS@/d' \
252 -e 's,@HAVE_SYS_CDEFS_H@,0,' \
253 -e '/@INCLUDE_NEXT@/d' \
254 -e '/@NEXT_GETOPT_H@/d' \
255 -e 's,@HAVE_GETOPT_H@,0,' \
256 --output "$@" \
257 $(qdeps sh,$@,1)
258
259$(kmk_grep_0_OUTDIR)/fnmatch.h: $(kmk_grep_DEFPATH)/lib/fnmatch.in.h \
260 $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
261 $(SED) \
262 -e 's,@GUARD_PREFIX@,GNULIB,' \
263 -e '/@PRAGMA_SYSTEM_HEADER@/d' \
264 -e '/@PRAGMA_COLUMNS@/d' \
265 -e 's,@HAVE_FNMATCH_H@,0,' \
266 -e 's,@REPLACE_FNMATCH@,0,' \
267 -e 's,@GNULIB_FNMATCH@,1,' \
268 -e 's,@HAVE_FNMATCH@,0,' \
269 -e '/@INCLUDE_NEXT@/d' \
270 --output "$@" \
271 $(qdeps sh,$@,1)
272
273$(kmk_grep_0_OUTDIR)/unistd.h: $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
274 $(APPEND) -tn "$@" \
275 'extern int getpagesize(void);' \
276 'extern int fchdir(int);'
277
278$(kmk_grep_0_OUTDIR)/sigsegv.h: $(kmk_grep_DEFPATH)/lib/sigsegv.in.h | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
279 $(CP) -f -- "$^" "$@"
280
281# Not needed for VCC142:
282$(kmk_grep_0_OUTDIR)/inttypes.h: $(kmk_grep_DEFPATH)/lib/inttypes.in.h $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
283 $(SED) \
284 -e '/@PRAGMA_SYSTEM_HEADER@/d' \
285 -e '/@PRAGMA_COLUMNS@/d' \
286 -e 's,@HAVE_INTTYPES_H@,0,' \
287 -e '/@INCLUDE_NEXT@/d' \
288 -e 's,@APPLE_UNIVERSAL_BUILD@,0,' \
289 -e 's,@INT64_MAX_EQ_LONG_MAX@,0/*not-on-win*/,' \
290 -e 's,@INT64_MAX_EQ_ULONG_MAX@,0/*not-on-win*/,' \
291 -e 's,@INT32_MAX_LT_INTMAX_MAX@,0,' \
292 -e 's,@UINT32_MAX_LT_UINTMAX_MAX@,0,' \
293 -e 's,@UINT64_MAX_EQ_ULONG_MAX@,1,' \
294 -e 's,@PRIPTR_PREFIX@,"ll" /*fixme*/,' \
295 -e 's,@GNULIB_IMAXABS@,0,' \
296 -e 's,@HAVE_DECL_IMAXABS@,0,' \
297 -e 's,@GNULIB_IMAXDIV@,0,' \
298 -e 's,@HAVE_IMAXDIV_T@,0,' \
299 -e 's,@HAVE_DECL_IMAXDIV@,0,' \
300 -e 's,@GNULIB_STRTOIMAX@,0,' \
301 -e 's,@REPLACE_STRTOIMAX@,0,' \
302 -e 's,@HAVE_DECL_STRTOIMAX@,0,' \
303 -e 's,@GNULIB_STRTOUMAX@,0,' \
304 -e 's,@REPLACE_STRTOUMAX@,0,' \
305 -e 's,@HAVE_DECL_STRTOUMAX@,0,' \
306 --output "$@" \
307 $(qdeps sh,$@,1)
308
309$(kmk_grep_0_OUTDIR)/stdbool.h: $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
310 $(APPEND) -tn "$@" \
311 '#ifndef ___STDBOOL_H___' \
312 '#define ___STDBOOL_H___' \
313 'typedef unsigned char bool;' \
314 '#define true (1)' \
315 '#define false (0)' \
316 '#endif'
317
Note: See TracBrowser for help on using the repository browser.