3 # Sub-Makefile for kmk_grep.
7 # Copyright (c) 2006-2010 knut st. osmundsen <bird-kBuild-spamx@anduin.net>
9 # This file is part of kBuild.
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.
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.
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/>
27 include $(KBUILD_PATH
)/subheader.kmk
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.
33 TEMPLATE_BINC99
= Accept C99 syntax
34 TEMPLATE_BINC99_EXTENDS
= BIN
35 if1of
($(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
)
57 kmk_grep_TEMPLATE
= BINC99
61 kmk_grep_CFLAGS.solaris
= -std
=gnu99
62 kmk_grep_CFLAGS.win
+= -wd4018
# grep.c(797): warning C4018: '<': signed/unsigned mismatch [lots of size_t / ptrdiff_t mixups]
63 kmk_grep_CFLAGS.win
+= -wd4244
# grep.c(1423): warning C4244: '=': conversion from '__int64' to 'off_t', possible loss of data
64 kmk_grep_CFLAGS.win
+= -wd4267
# grep.c(2303): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
65 kmk_grep_CFLAGS.win
+= -wd4146
# fnmatch_loop.c(1067): warning C4146: unary minus operator applied to unsigned type, result still unsigned
66 kmk_grep_CFLAGS.win
+= -wd4308
# fnmatch_loop.c(1067): warning C4308: negative integral constant converted to unsigned type
67 ifdef KBUILD_SOLARIS_10
68 kmk_grep_CFLAGS
+= -std
=gnu99
71 $(kmk_grep_0_OUTDIR
) \
92 lib
/malloc
/dynarray_resize.c \
104 lib
/fd-safer-flag.c \
106 lib
/dup-safer-flag.c \
125 lib
/version-etc-fsf.c \
127 kmk_grep_SOURCES.win
= \
128 lib
/w32-initialize-main.c \
130 lib
/basename-lgpl.c \
132 lib
/getprogname-w32.c \
136 ..
/lib
/get_codepage.c \
139 ..
/lib
/nt
/nthlpcore.c \
140 ..
/lib
/nt
/nthlpfs.c \
141 ..
/lib
/nt
/ntopenat.c \
144 #TODO use: ../lib/startuphacks-win.c
147 # We generate a few files.
150 $(kmk_grep_0_OUTDIR
)/config.h \
151 $(kmk_grep_0_OUTDIR
)/configmake.h
152 kmk_grep_DEPS.win
= \
153 $(kmk_grep_0_OUTDIR
)/getopt-cdefs.h \
154 $(kmk_grep_0_OUTDIR
)/getopt.h \
155 $(kmk_grep_0_OUTDIR
)/unistd.h \
156 $(kmk_grep_0_OUTDIR
)/sigsegv.h \
157 $(kmk_grep_0_OUTDIR
)/fnmatch.h
159 kmk_grep_CLEAN
= $(kmk_grep_DEPS
)
160 kmk_grep_CLEAN.win
= $(kmk_grep_DEPS.win
) $(kmk_grep_LNK_DEPS.win
)
162 # Use checked in config.h instead of running ./configure for it.
163 $$(kmk_grep_0_OUTDIR
)/config.h
: $(PATH_SUB_CURRENT
)/config.
$(KBUILD_TARGET
).h |
$$(call DIRDEP
,$$(kmk_grep_0_OUTDIR
))
164 $(CP
) -f
-- "$^" "$@"
166 # This shouldn't be used with NLS disabled, so the paths doesn't matter I hope.
167 $$(kmk_grep_0_OUTDIR
)/configmake.h
: $(MAKEFILE_CURRENT
) |
$$(call DIRDEP
,$$(kmk_grep_0_OUTDIR
))
169 '#define PREFIX "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
170 '#define EXEC_PREFIX "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
171 '#define BINDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
172 '#define SBINDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
173 '#define LIBEXECDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
174 '#define DATAROOTDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
175 '#define DATADIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
176 '#define SYSCONFDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
177 '#define SHAREDSTATEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
178 '#define LOCALSTATEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
179 '#define RUNSTATEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
180 '#define INCLUDEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
181 '#define OLDINCLUDEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
182 '#define DOCDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
183 '#define INFODIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
184 '#define HTMLDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
185 '#define DVIDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
186 '#define PDFDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
187 '#define PSDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
188 '#define LIBDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
189 '#define LISPDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
190 '#define LOCALEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
191 '#define MANDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
192 '#define MANEXT "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
193 '#define PKGDATADIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
194 '#define PKGINCLUDEDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
195 '#define PKGLIBDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
196 '#define PKGLIBEXECDIR "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"';
198 # Windows needs a few more things:
199 $$(kmk_grep_0_OUTDIR
)/getopt-cdefs.h
: $(PATH_SUB_CURRENT
)/lib
/getopt-cdefs.in.h \
200 $(MAKEFILE_CURRENT
) |
$$(call DIRDEP
,$$(kmk_grep_0_OUTDIR
))
202 -e
's,@HAVE_SYS_CDEFS_H@,0,' \
206 $$(kmk_grep_0_OUTDIR
)/getopt.h
: $(PATH_SUB_CURRENT
)/lib
/getopt.in.h \
207 $(MAKEFILE_CURRENT
) |
$$(call DIRDEP
,$$(kmk_grep_0_OUTDIR
))
209 -e
's,@GUARD_PREFIX@,GNULIB,' \
210 -e
'/@PRAGMA_SYSTEM_HEADER@/d' \
211 -e
'/@PRAGMA_COLUMNS@/d' \
212 -e
's,@HAVE_SYS_CDEFS_H@,0,' \
213 -e
'/@INCLUDE_NEXT@/d' \
214 -e
'/@NEXT_GETOPT_H@/d' \
215 -e
's,@HAVE_GETOPT_H@,0,' \
219 $$(kmk_grep_0_OUTDIR
)/fnmatch.h
: $(PATH_SUB_CURRENT
)/lib
/fnmatch.in.h \
220 $(MAKEFILE_CURRENT
) |
$$(call DIRDEP
,$$(kmk_grep_0_OUTDIR
))
222 -e
's,@GUARD_PREFIX@,GNULIB,' \
223 -e
'/@PRAGMA_SYSTEM_HEADER@/d' \
224 -e
'/@PRAGMA_COLUMNS@/d' \
225 -e
's,@HAVE_FNMATCH_H@,0,' \
226 -e
's,@REPLACE_FNMATCH@,0,' \
227 -e
's,@GNULIB_FNMATCH@,1,' \
228 -e
's,@HAVE_FNMATCH@,0,' \
229 -e
'/@INCLUDE_NEXT@/d' \
233 $$(kmk_grep_0_OUTDIR
)/unistd.h
: $(MAKEFILE_CURRENT
) |
$$(call DIRDEP
,$$(kmk_grep_0_OUTDIR
))
235 'extern int getpagesize(void);' \
236 'extern int fchdir(int);'
238 $$(kmk_grep_0_OUTDIR
)/sigsegv.h
: $(PATH_SUB_CURRENT
)/lib
/sigsegv.in.h |
$$(call DIRDEP
,$$(kmk_grep_0_OUTDIR
))
239 $(CP
) -f
-- "$^" "$@"
241 ifndef KBUILD_NEW_VCC
# Add a manifest making UTF-8 as the active code page.
242 kmk_grep_LNK_DEPS.win
= \
243 $(kmk_grep_0_OUTDIR
)/kmk_grep.manifest
245 $$(kmk_grep_0_OUTDIR
)/kmk_grep.manifest
: $(MAKEFILE_CURRENT
) |
$$(call DIRDEP
,$$(kmk_grep_0_OUTDIR
))
247 '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' \
248 '<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">' \
249 ' <assemblyIdentity type="win32" name="kmk_grep.exe" version="3.7.0.0"/>' \
251 ' <windowsSettings>' \
252 ' <activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>' \
253 ' </windowsSettings>' \
257 # HACK ALERT! Using kmk_builting_redirect here to bypass some shell quoting
258 # issue. Also, no idea why we need to escape the hash (\#1).
259 kmk_grep_POST_CMDS.win
= \
260 $(REDIRECT
) -- $(PATH_SDK_WINSDK10-UM_BIN
)/mt.exe \
261 -manifest
"$(subst /,\\,$(kmk_grep_0_OUTDIR)/kmk_grep.manifest)" \
262 '-outputresource:$(subst /,\\,$(out));\#1'
266 include $(FILE_KBUILD_SUB_FOOTER
)