Ignore:
Timestamp:
Dec 21, 2021, 1:19:11 PM (4 years ago)
Author:
bird
Message:

grep: Rewrote the console output speed hack, making it even faster and more correct. Changed the default locale codepage to UTF-8, adding an --codepage=NUM option for overriding this if one needs to grep non-UTF8 files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/grep/Makefile.kmk

    r3536 r3537  
    5656PROGRAMS += kmk_grep
    5757kmk_grep_TEMPLATE = BINC99
    58 kmk_grep_DEPS = \
    59         $(kmk_grep_0_OUTDIR)/config.h \
    60         $(kmk_grep_0_OUTDIR)/configmake.h
    61 kmk_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
    67 kmk_grep_CLEAN = $(kmk_grep_DEPS)
     58kmk_grep_DEFS = \
     59        KMK_GREP \
     60        HAVE_CONFIG_H
    6861kmk_grep_CFLAGS.solaris = -std=gnu99
    6962kmk_grep_CFLAGS.win += -wd4018 # grep.c(797): warning C4018: '<': signed/unsigned mismatch [lots of size_t / ptrdiff_t mixups]
     
    7265kmk_grep_CFLAGS.win += -wd4146 # fnmatch_loop.c(1067): warning C4146: unary minus operator applied to unsigned type, result still unsigned
    7366kmk_grep_CFLAGS.win += -wd4308 # fnmatch_loop.c(1067): warning C4308: negative integral constant converted to unsigned type
     67ifdef KBUILD_SOLARIS_10
     68 kmk_grep_CFLAGS += -std=gnu99
     69endif
    7470kmk_grep_INCS = \
    7571        $(kmk_grep_0_OUTDIR) \
    7672        . \
    7773        lib
    78 kmk_grep_DEFS = \
    79         KMK_GREP \
    80         HAVE_CONFIG_H
    81 ifdef KBUILD_SOLARIS_10
    82  kmk_grep_CFLAGS += -std=gnu99
    83 endif
    8474kmk_grep_SOURCES = \
    8575        src/grep.c \
     
    153143        ../lib/nt/fts-nt.c
    154144
    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 
    193 MAKEFILE_GREP := $(MAKEFILE_CURRENT)
    194 
    195 include $(FILE_KBUILD_SUB_FOOTER)
    196 
    197 #
     145#TODO use:      ../lib/startuphacks-win.c
     146
     147#
     148# We generate a few files.
     149#
     150kmk_grep_DEPS = \
     151        $(kmk_grep_0_OUTDIR)/config.h \
     152        $(kmk_grep_0_OUTDIR)/configmake.h
     153kmk_grep_DEPS.win = \
     154        $(kmk_grep_0_OUTDIR)/getopt-cdefs.h \
     155        $(kmk_grep_0_OUTDIR)/getopt.h \
     156        $(kmk_grep_0_OUTDIR)/unistd.h \
     157        $(kmk_grep_0_OUTDIR)/sigsegv.h \
     158        $(kmk_grep_0_OUTDIR)/fnmatch.h
     159
     160kmk_grep_CLEAN = $(kmk_grep_DEPS)
     161kmk_grep_CLEAN.win = $(kmk_grep_DEPS.win) $(kmk_grep_LNK_DEPS.win)
     162
    198163# Use checked in config.h instead of running ./configure for it.
    199 #
    200 kmk_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))
     164$$(kmk_grep_0_OUTDIR)/config.h: $(PATH_SUB_CURRENT)/config.$(KBUILD_TARGET).h | $$(call DIRDEP,$$(kmk_grep_0_OUTDIR))
    203165        $(CP) -f -- "$^" "$@"
    204166
    205 $(kmk_grep_0_OUTDIR)/configmake.h: $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
     167# This shouldn't be used with NLS disabled, so the paths doesn't matter I hope.
     168$$(kmk_grep_0_OUTDIR)/configmake.h: $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(kmk_grep_0_OUTDIR))
    206169        $(APPEND) -tn "$@" \
    207170                '#define PREFIX         "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"'; \
     
    234197                '#define PKGLIBEXECDIR  "kBuild/bin/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/"';
    235198
    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))
     199# Windows needs a few more things:
     200$$(kmk_grep_0_OUTDIR)/getopt-cdefs.h: $(PATH_SUB_CURRENT)/lib/getopt-cdefs.in.h \
     201                $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(kmk_grep_0_OUTDIR))
    241202        $(SED) \
    242203        -e 's,@HAVE_SYS_CDEFS_H@,0,' \
     
    244205               $(qdeps sh,$@,1)
    245206
    246 $(kmk_grep_0_OUTDIR)/getopt.h: $(kmk_grep_DEFPATH)/lib/getopt.in.h \
    247                 $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
     207$$(kmk_grep_0_OUTDIR)/getopt.h: $(PATH_SUB_CURRENT)/lib/getopt.in.h \
     208                $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(kmk_grep_0_OUTDIR))
    248209        $(SED) \
    249210        -e 's,@GUARD_PREFIX@,GNULIB,' \
     
    257218               $(qdeps sh,$@,1)
    258219
    259 $(kmk_grep_0_OUTDIR)/fnmatch.h: $(kmk_grep_DEFPATH)/lib/fnmatch.in.h \
    260                 $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
     220$$(kmk_grep_0_OUTDIR)/fnmatch.h: $(PATH_SUB_CURRENT)/lib/fnmatch.in.h \
     221                $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(kmk_grep_0_OUTDIR))
    261222        $(SED) \
    262223        -e 's,@GUARD_PREFIX@,GNULIB,' \
     
    271232               $(qdeps sh,$@,1)
    272233
    273 $(kmk_grep_0_OUTDIR)/unistd.h: $(MAKEFILE_GREP) | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
     234$$(kmk_grep_0_OUTDIR)/unistd.h: $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(kmk_grep_0_OUTDIR))
    274235        $(APPEND) -tn "$@" \
    275236                'extern int getpagesize(void);' \
    276237                'extern int fchdir(int);'
    277238
    278 $(kmk_grep_0_OUTDIR)/sigsegv.h: $(kmk_grep_DEFPATH)/lib/sigsegv.in.h | $(call DIRDEP,$(kmk_grep_0_OUTDIR))
     239$$(kmk_grep_0_OUTDIR)/sigsegv.h: $(PATH_SUB_CURRENT)/lib/sigsegv.in.h | $$(call DIRDEP,$$(kmk_grep_0_OUTDIR))
    279240        $(CP) -f -- "$^" "$@"
    280241
    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))
     242if 1 # Add a manifest making UTF-8 as the active code page.
     243kmk_grep_LNK_DEPS.win = \
     244        $(kmk_grep_0_OUTDIR)/kmk_grep.manifest
     245
     246$$(kmk_grep_0_OUTDIR)/kmk_grep.manifest: $(MAKEFILE_CURRENT) | $$(call DIRDEP,$$(kmk_grep_0_OUTDIR))
    310247        $(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 
     248                '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' \
     249                '<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">' \
     250                '  <assemblyIdentity type="win32" name="kmk_grep.exe" version="3.7.0.0"/>' \
     251                '  <application>' \
     252                '    <windowsSettings>' \
     253                '      <activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>' \
     254                '    </windowsSettings>' \
     255                '  </application>' \
     256                '</assembly>'
     257
     258# HACK ALERT! Using kmk_builting_redirect here to bypass some shell quoting
     259#             issue.  Also, no idea why we need to escape the hash (\#1).
     260kmk_grep_POST_CMDS.win = \
     261        $(REDIRECT) -- $(PATH_SDK_WINSDK10-UM_BIN)/mt.exe \
     262                -manifest "$(subst /,\\,$(kmk_grep_0_OUTDIR)/kmk_grep.manifest)" \
     263                '-outputresource:$(subst /,\\,$(out));\#1'
     264endif
     265
     266
     267include $(FILE_KBUILD_SUB_FOOTER)
     268
Note: See TracChangeset for help on using the changeset viewer.