source: trunk/src/kmk/Makefile.kmk@ 3669

Last change on this file since 3669 was 3669, checked in by bird, 5 months ago

kmk: More stdout close error debugging

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 17.0 KB
Line 
1# $Id: Makefile.kmk 3669 2025-02-22 01:31:14Z bird $
2## @file
3# Sub-makefile for kmk / GNU Make.
4#
5
6#
7# Copyright (c) 2004-2011 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# Enable new children handling for windows.
30CONFIG_NEW_WIN_CHILDREN = 1
31
32#
33# Template for kmk and the kmk_* binaries in this makefile.
34#
35TEMPLATE_BIN-KMK = Template for src/gmake binaries
36TEMPLATE_BIN-KMK_EXTENDS = BIN-THREADED
37TEMPLATE_BIN-KMK_DEFS = \
38 HAVE_CONFIG_H \
39 $(TEMPLATE_BIN_DEFS) \
40 KBUILD_SVN_REV=$(KBUILD_SVN_REV) \
41 KBUILD_TYPE=$(TMP_QUOTE_SLASH)"$(KBUILD_TYPE)$(TMP_QUOTE_SLASH)"
42TEMPLATE_BIN-KMK_DEPS = \
43 $(kmk_0_OUTDIR)/config.h \
44 $(kmk_0_OUTDIR)/fts.h
45TEMPLATE_BIN-KMK_CLEAN = $(TEMPLATE_BIN-KMK_DEPS)
46TEMPLATE_BIN-KMK_DEPS.solaris = \
47 $(kmk_0_OUTDIR)/paths.h
48TEMPLATE_BIN-KMK_CLEAN.solaris = $(TEMPLATE_BIN-KMK_DEPS.solaris)
49TEMPLATE_BIN-KMK_DEPS.win = \
50 $(kmk_0_OUTDIR)/sysexits.h \
51 $(kmk_0_OUTDIR)/unistd.h \
52 $(kmk_0_OUTDIR)/paths.h \
53 $(kmk_0_OUTDIR)/grp.h \
54 $(kmk_0_OUTDIR)/pwd.h \
55 $(kmk_0_OUTDIR)/inttypes.h
56TEMPLATE_BIN-KMK_CFLAGS.win.amd64 = $(TEMPLATE_BIN-THREADED_CFLAGS.win.amd64) -wd4244 -wd4267
57TEMPLATE_BIN-KMK_CLEAN.win = $(TEMPLATE_BIN-KMK_DEPS.win)
58TEMPLATE_BIN-KMK_DEFS.debug = $(TEMPLATE_BIN_DEFS.debug) MAKE_MAINTAINER_MODE
59TEMPLATE_BIN-KMK_INCS = $(kmk_0_OUTDIR) . $(TEMPLATE_BIN-THREADED_INCS)
60ifneq ($(KBUILD_TARGET),os2)
61 TEMPLATE_BIN-KMK_INCS += glob
62endif
63TEMPLATE_BIN-KMK_LIBS = $(LIB_KUTIL) $(TEMPLATE_BIN-THREADED_LIBS) $(kmkmissing_1_TARGET) $(LIB_KUTIL)
64TEMPLATE_BIN-KMK_LIBS.x86 = $(LIB_KUTIL) $(TEMPLATE_BIN-THREADED_LIBS.x86)
65TEMPLATE_BIN-KMK_LIBS.amd64 = $(LIB_KUTIL) $(TEMPLATE_BIN-THREADED_LIBS.amd64)
66ifdef ELECTRIC_HEAP # for electric heap (see electric.c).
67ifeq ($(KBUILD_TARGET),win)
68 TEMPLATE_BIN-KMK_CFLAGS = $(TEMPLATE_BIN-THREADED_CFLAGS) /FI$(kmk_DEFPATH)/electric.h -DELECTRIC_HEAP=1
69else
70 TEMPLATE_BIN-KMK_CFLAGS = $(TEMPLATE_BIN-THREADED_CFLAGS) -include $(kmk_DEFPATH)/electric.h -DELECTRIC_HEAP=1
71endif
72endif
73ifdef CONFIG_WITH_ALLOCCACHE_DEBUG
74 TEMPLATE_BIN-KMK_DEFS += CONFIG_WITH_ALLOCCACHE_DEBUG
75endif
76ifdef CONFIG_NEW_WIN_CHILDREN
77 TEMPLATE_BIN-KMK_DEFS.win = $(TEMPLATE_BIN_DEFS.win) CONFIG_NEW_WIN_CHILDREN
78endif
79# GCC sanitizers.
80ifdef GCC_SANITIZERS
81 TEMPLATE_BIN-KMK_CFLAGS ?= $(TEMPLATE_BIN-THREADED_CFLAGS)
82# TEMPLATE_BIN-KMK_CFLAGS += -fsanitize=address -fsanitize=undefined -static-libubsan -D GCC_ADDRESS_SANITIZER
83 TEMPLATE_BIN-KMK_CFLAGS += -fsanitize=address -fsanitize=undefined -D GCC_ADDRESS_SANITIZER
84 TEMPLATE_BIN-KMK_LDFLAGS ?= $(TEMPLATE_BIN-THREADED_LDFLAGS)
85 TEMPLATE_BIN-KMK_LDFLAGS += -fsanitize=address -fsanitize=undefined
86endif
87
88#
89# Library version of the above.
90#
91TEMPLATE_LIB-KMK = Template for src/gmake libraries
92TEMPLATE_LIB-KMK_EXTENDS = BIN-KMK
93TEMPLATE_LIB-KMK_POST_CMDS.win = $(NO_SUCH_VARIABLE)
94
95#
96# Template for building standalone built-in utilities.
97#
98TEMPLATE_BIN-KMK-BUILTIN = Template for standalone built-in utilies.
99TEMPLATE_BIN-KMK-BUILTIN_EXTENDS = BIN-KMK
100TEMPLATE_BIN-KMK-BUILTIN_EXTENDS_BY = appending
101TEMPLATE_BIN-KMK-BUILTIN_DEFS += KMK_BUILTIN_STANDALONE
102TEMPLATE_BIN-KMK-BUILTIN_SOURCES += kmkbuiltin/err.c
103
104#
105# A library containing the missing features needed by kmk and the
106# kmk_* binaries. Saves a bit of work later on.
107#
108LIBRARIES += kmkmissing
109kmkmissing_TEMPLATE = LIB-KMK
110kmkmissing_DEFS = KMK
111kmkmissing_NOINST = 1
112kmkmissing_SOURCES = \
113 kmkbuiltin/fts.c \
114 kmkbuiltin/setmode.c \
115 kmkbuiltin/strmode.c \
116 kmkbuiltin/kbuild_protection.c \
117 kmkbuiltin/common-env-and-cwd-opt.c \
118 kmkbuiltin/getopt_r.c \
119 kmkbuiltin/getopt1_r.c \
120 getopt.c \
121 getopt1.c \
122 electric.c
123ifneq ($(KBUILD_TARGET),os2)
124kmkmissing_SOURCES += \
125 glob/glob.c
126endif
127
128kmkmissing_SOURCES.darwin = \
129 kmkbuiltin/darwin.c \
130 glob/fnmatch.c
131
132kmkmissing_SOURCES.dragonfly = \
133 glob/fnmatch.c
134
135kmkmissing_SOURCES.freebsd = \
136 glob/fnmatch.c
137
138kmkmissing_SOURCES.gnuhurd += \
139 kmkbuiltin/strlcpy.c
140
141kmkmissing_SOURCES.gnukfbsd += \
142 kmkbuiltin/strlcpy.c
143
144kmkmissing_SOURCES.gnuknbsd += \
145 kmkbuiltin/strlcpy.c
146
147kmkmissing_SOURCES.haiku = \
148 kmkbuiltin/haikufakes.c \
149 glob/fnmatch.c
150
151kmkmissing_SOURCES.linux += \
152 kmkbuiltin/strlcpy.c
153
154kmkmissing_SOURCES.netbsd = \
155 glob/fnmatch.c
156
157kmkmissing_SOURCES.openbsd = \
158 kmkbuiltin/openbsd.c
159
160kmkmissing_SOURCES.solaris = \
161 kmkbuiltin/strlcpy.c \
162 kmkbuiltin/solfakes.c \
163 glob/fnmatch.c
164
165kmkmissing_SOURCES.win += \
166 kmkbuiltin/strlcpy.c \
167 kmkbuiltin/mscfakes.c \
168 glob/fnmatch.c \
169 getloadavg.c \
170 w32/subproc/misc.c \
171 w32/subproc/w32err.c \
172 w32/pathstuff.c \
173 w32/imagecache.c \
174 w32/compat/posixfcn.c
175
176#
177# kmk
178#
179PROGRAMS += kmk
180
181kmk_TEMPLATE = BIN-KMK
182
183kmk_DEFS = \
184 NO_ARCHIVES \
185 EXPERIMENTAL \
186 CONFIG_WITH_TOUPPER_TOLOWER \
187 CONFIG_WITH_DEFINED \
188 CONFIG_WITH_EXPLICIT_MULTITARGET \
189 CONFIG_WITH_DOT_MUST_MAKE \
190 CONFIG_WITH_PREPEND_ASSIGNMENT \
191 CONFIG_WITH_LOCAL_VARIABLES \
192 CONFIG_WITH_2ND_TARGET_EXPANSION \
193 CONFIG_WITH_ALLOC_CACHES \
194 CONFIG_WITH_STRCACHE2 \
195 \
196 KMK \
197 KMK_HELPERS \
198 CONFIG_NO_DEFAULT_SUFFIXES \
199 CONFIG_NO_DEFAULT_PATTERN_RULES \
200 CONFIG_NO_DEFAULT_TERMINAL_RULES \
201 CONFIG_NO_DEFAULT_SUFFIX_RULES \
202 CONFIG_NO_DEFAULT_VARIABLES \
203 \
204 CONFIG_WITH_ABSPATHEX \
205 CONFIG_WITH_COMMANDS_FUNC \
206 CONFIG_WITH_DATE \
207 CONFIG_WITH_DEFINED_FUNCTIONS \
208 CONFIG_WITH_EVALPLUS \
209 CONFIG_WITH_FILE_SIZE \
210 CONFIG_WITH_LOOP_FUNCTIONS \
211 CONFIG_WITH_MATH \
212 CONFIG_WITH_NANOTS \
213 CONFIG_WITH_ROOT_FUNC \
214 CONFIG_WITH_RSORT \
215 CONFIG_WITH_STACK \
216 CONFIG_WITH_STRING_FUNCTIONS \
217 CONFIG_WITH_WHERE_FUNCTION \
218 CONFIG_WITH_WHICH \
219 CONFIG_WITH_XARGS \
220 \
221 CONFIG_WITH_EXTENDED_NOTPARALLEL \
222 CONFIG_WITH_INCLUDEDEP \
223 CONFIG_WITH_VALUE_LENGTH \
224 CONFIG_WITH_COMPARE \
225 CONFIG_WITH_SET_CONDITIONALS \
226 CONFIG_WITH_IF_CONDITIONALS \
227 CONFIG_WITH_PRINTF \
228 CONFIG_WITH_MINIMAL_STATS \
229 \
230 CONFIG_PRETTY_COMMAND_PRINTING \
231 CONFIG_WITH_PRINT_STATS_SWITCH \
232 CONFIG_WITH_PRINT_TIME_SWITCH \
233 CONFIG_WITH_RDONLY_VARIABLE_VALUE \
234 CONFIG_WITH_LAZY_DEPS_VARS \
235 CONFIG_WITH_MEMORY_OPTIMIZATIONS \
236 \
237 KBUILD_HOST=$(TMP_QUOTE_SLASH)"$(KBUILD_TARGET)$(TMP_QUOTE_SLASH)" \
238 KBUILD_HOST_ARCH=$(TMP_QUOTE_SLASH)"$(KBUILD_TARGET_ARCH)$(TMP_QUOTE_SLASH)" \
239 KBUILD_HOST_CPU=$(TMP_QUOTE_SLASH)"$(KBUILD_TARGET_CPU)$(TMP_QUOTE_SLASH)"
240# kmk_DEFS += CONFIG_WITH_COMPILER # experimental, doesn't work 101% right it seems.
241kmk_DEFS.x86 := CONFIG_WITH_OPTIMIZATION_HACKS
242kmk_DEFS.amd64 := CONFIG_WITH_OPTIMIZATION_HACKS
243kmk_DEFS.win := CONFIG_WITH_OUTPUT_IN_MEMORY
244kmk_DEFS.win.x86 := CONFIG_NEW_WIN32_CTRL_EVENT
245kmk_DEFS.win.amd64 := CONFIG_NEW_WIN32_CTRL_EVENT
246kmk_DEFS.debug := CONFIG_WITH_MAKE_STATS
247ifdef CONFIG_WITH_MAKE_STATS
248 kmk_DEFS += CONFIG_WITH_MAKE_STATS
249endif
250#ifdef CONFIG_WITH_KMK_BUILTIN_STATS
251 kmk_DEFS += CONFIG_WITH_KMK_BUILTIN_STATS
252#endif
253ifdef CONFIG_WITH_EVAL_COMPILER
254 kmk_DEFS += CONFIG_WITH_EVAL_COMPILER
255endif
256ifdef CONFIG_WITH_COMPILE_EVERYTHING
257 kmk_DEFS += CONFIG_WITH_COMPILE_EVERYTHING
258endif
259
260#ifeq ($(KBUILD_TYPE).$(USERNAME),debug.bird)
261# kmk_DEFS += CONFIG_WITH_COMPILER CONFIG_WITH_EVAL_COMPILER CONFIG_WITH_COMPILE_EVERYTHING
262#endif
263
264kmk_SOURCES = \
265 main.c \
266 read.c \
267 hash.c \
268 strcache.c \
269 variable.c \
270 ar.c \
271 arscan.c \
272 commands.c \
273 default.c \
274 expand.c \
275 file.c \
276 function.c \
277 implicit.c \
278 job.c \
279 misc.c \
280 output.c \
281 remake.c \
282 rule.c \
283 signame.c \
284 version.c \
285 vpath.c \
286 remote-stub.c \
287 guile.c \
288 load.c \
289 \
290 alloccache.c \
291 expreval.c \
292 incdep.c \
293 strcache2.c \
294 kmk_cc_exec.c \
295 kbuild.c \
296 kbuild-object.c
297ifeq ($(KBUILD_TARGET),win)
298 kmk_SOURCES += \
299 dir-nt-bird.c \
300 w32/w32os.c
301else
302 kmk_SOURCES += \
303 dir.c \
304 posixos.c
305endif
306
307ifndef CONFIG_NEW_WIN_CHILDREN
308kmk_SOURCES.win = \
309 w32/subproc/sub_proc.c
310else
311kmk_SOURCES.win = \
312 w32/winchildren.c
313endif
314
315kmk_DEFS.win += DEBUG_STDOUT_CLOSE_ISSUE
316kmk_SOURCES.win += ../lib/msc_buffered_printf.c
317
318kmk_DEFS.freebsd.x86 = CONFIG_WITHOUT_THREADS
319
320#kmk_LIBS.solaris = malloc
321#kmk_DEFS.solaris += HAVE_MALLINFO
322
323#
324# kmkbuiltin commands
325#
326kmk_DEFS += CONFIG_WITH_KMK_BUILTIN
327kmk_LIBS += $(LIB_KUTIL) #$(LIB_KDEP)
328kmk_SOURCES += \
329 kmkbuiltin.c \
330 kmkbuiltin/append.c \
331 kmkbuiltin/cat.c \
332 kmkbuiltin/chmod.c \
333 kmkbuiltin/cmp.c \
334 kmkbuiltin/cmp_util.c \
335 kmkbuiltin/cp.c \
336 kmkbuiltin/cp_utils.c \
337 kmkbuiltin/echo.c \
338 kmkbuiltin/expr.c \
339 kmkbuiltin/install.c \
340 kmkbuiltin/kDepIDB.c \
341 kmkbuiltin/kDepObj.c \
342 ../lib/kDep.c \
343 kmkbuiltin/md5sum.c \
344 kmkbuiltin/mkdir.c \
345 kmkbuiltin/mv.c \
346 kmkbuiltin/ln.c \
347 kmkbuiltin/printf.c \
348 kmkbuiltin/redirect.c \
349 kmkbuiltin/rm.c \
350 kmkbuiltin/rmdir.c \
351 $(if-expr $(KBUILD_TARGET) == win,kmkbuiltin/kSubmit.c) \
352 kmkbuiltin/sleep.c \
353 kmkbuiltin/test.c \
354 kmkbuiltin/touch.c \
355 \
356 kmkbuiltin/err.c
357kmk_SOURCES.win += \
358 kmkbuiltin/kill.c
359
360
361## @todo kmkbuiltin/redirect.c
362
363## Some profiling
364#kmk_SOURCES += kbuildprf.c
365#kmk_DEFS += open=prf_open read=prf_read lseek=prf_lseek close=prf_close
366##kmk_DEFS += KMK_PRF=1
367##kmkmissing_DEFS += KMK_PRF=1
368
369#
370# Standalone kmkbuiltin commands.
371#
372PROGRAMS += \
373 kmk_append \
374 kmk_cat \
375 kmk_chmod \
376 kmk_cp \
377 kmk_cmp \
378 kmk_echo \
379 kmk_expr \
380 kmk_md5sum \
381 kmk_mkdir \
382 kmk_mv \
383 kmk_install \
384 kmk_ln \
385 kmk_printf \
386 kmk_redirect \
387 kmk_rm \
388 kmk_rmdir \
389 kmk_sleep \
390 kmk_test \
391 kmk_touch \
392 kDepIDB \
393 kDepObj
394PROGRAMS.win += \
395 kmk_kill
396
397kmk_append_TEMPLATE = BIN-KMK-BUILTIN
398kmk_append_INCS = .
399kmk_append_SOURCES = \
400 kmkbuiltin/append.c
401
402kmk_cat_TEMPLATE = BIN-KMK-BUILTIN
403kmk_cat_SOURCES = \
404 kmkbuiltin/cat.c
405
406kmk_chmod_TEMPLATE = BIN-KMK-BUILTIN
407kmk_chmod_SOURCES = \
408 kmkbuiltin/chmod.c
409
410kmk_cmp_TEMPLATE = BIN-KMK-BUILTIN
411kmk_cmp_SOURCES = \
412 kmkbuiltin/cmp.c \
413 kmkbuiltin/cmp_util.c
414
415kmk_cp_TEMPLATE = BIN-KMK-BUILTIN
416kmk_cp_SOURCES = \
417 kmkbuiltin/cp.c \
418 kmkbuiltin/cp_utils.c \
419 kmkbuiltin/cmp_util.c
420
421kmk_echo_TEMPLATE = BIN-KMK-BUILTIN
422kmk_echo_SOURCES = \
423 kmkbuiltin/echo.c
424
425kmk_expr_TEMPLATE = BIN-KMK-BUILTIN
426kmk_expr_SOURCES = \
427 kmkbuiltin/expr.c
428
429kmk_install_TEMPLATE = BIN-KMK-BUILTIN
430kmk_install_SOURCES = \
431 kmkbuiltin/install.c
432
433kmk_kill_TEMPLATE = BIN-KMK-BUILTIN
434kmk_kill_SOURCES = \
435 kmkbuiltin/kill.c
436
437kmk_ln_TEMPLATE = BIN-KMK-BUILTIN
438kmk_ln_SOURCES = \
439 kmkbuiltin/ln.c
440
441kmk_mkdir_TEMPLATE = BIN-KMK-BUILTIN
442kmk_mkdir_SOURCES = \
443 kmkbuiltin/mkdir.c
444
445kmk_md5sum_TEMPLATE = BIN-KMK-BUILTIN
446kmk_md5sum_SOURCES = \
447 kmkbuiltin/md5sum.c
448kmk_md5sum_LIBS = $(LIB_KUTIL)
449
450kmk_mv_TEMPLATE = BIN-KMK-BUILTIN
451kmk_mv_SOURCES = \
452 kmkbuiltin/mv.c
453
454kmk_printf_TEMPLATE = BIN-KMK-BUILTIN
455kmk_printf_SOURCES = \
456 kmkbuiltin/printf.c
457
458kmk_rm_TEMPLATE = BIN-KMK-BUILTIN
459kmk_rm_SOURCES = \
460 kmkbuiltin/rm.c
461
462kmk_redirect_TEMPLATE = BIN-KMK-BUILTIN
463kmk_redirect_SOURCES = \
464 kmkbuiltin/redirect.c
465kmk_redirect_SOURCES.win = \
466 ../lib/startuphacks-win.c
467
468kmk_rmdir_TEMPLATE = BIN-KMK-BUILTIN
469kmk_rmdir_SOURCES = \
470 kmkbuiltin/rmdir.c
471
472kmk_sleep_TEMPLATE = BIN-KMK-BUILTIN
473kmk_sleep_SOURCES = \
474 kmkbuiltin/sleep.c
475
476kmk_test_TEMPLATE = BIN-KMK-BUILTIN
477kmk_test_SOURCES = \
478 kmkbuiltin/test.c
479
480kmk_touch_TEMPLATE = BIN-KMK-BUILTIN
481kmk_touch_SOURCES = \
482 kmkbuiltin/touch.c
483
484kDepIDB_TEMPLATE = BIN-KMK-BUILTIN
485kDepIDB_INCS = .
486kDepIDB_LIBS = $(LIB_KDEP) $(LIB_KUTIL)
487kDepIDB_SOURCES = \
488 kmkbuiltin/kDepIDB.c
489
490kDepObj_TEMPLATE = BIN-KMK-BUILTIN
491kDepObj_INCS = .
492kDepObj_LIBS = $(LIB_KDEP) $(LIB_KUTIL)
493kDepObj_SOURCES = \
494 kmkbuiltin/kDepObj.c
495
496
497#
498# kmk_gmake - almost plain GNU Make.
499#
500PROGRAMS += kmk_gmake
501
502kmk_gmake_TEMPLATE = BIN-KMK
503kmk_gmake_DEFS = \
504 HAVE_CONFIG_H \
505 CONFIG_WITH_TOUPPER_TOLOWER \
506 EXPERIMENTAL
507# NO_ARCHIVES
508
509kmk_gmake_SOURCES = \
510 main.c \
511 read.c \
512 hash.c \
513 strcache.c \
514 variable.c \
515 ar.c \
516 arscan.c \
517 commands.c \
518 default.c \
519 dir.c \
520 expand.c \
521 file.c \
522 function.c \
523 implicit.c \
524 job.c \
525 misc.c \
526 output.c \
527 remake.c \
528 rule.c \
529 signame.c \
530 version.c \
531 vpath.c \
532 remote-stub.c \
533 guile.c \
534 load.c
535ifeq ($(KBUILD_TARGET),win)
536 kmk_gmake_SOURCES += \
537 w32/w32os.c
538else
539 kmk_gmake_SOURCES += \
540 posixos.c
541endif
542
543ifndef CONFIG_NEW_WIN_CHILDREN
544kmk_gmake_SOURCES.win = \
545 w32/subproc/sub_proc.c
546else
547kmk_gmake_SOURCES.win = \
548 w32/winchildren.c
549endif
550
551
552#
553# kmk_fmake - Faster GNU Make.
554#
555ifeq ($(USER),bird) # for experimental purposes only.
556PROGRAMS += kmk_fgmake
557endif
558
559kmk_fgmake_TEMPLATE = BIN-KMK
560kmk_fgmake_DEFS = \
561 HAVE_CONFIG_H \
562 NO_ARCHIVES \
563 CONFIG_WITH_TOUPPER_TOLOWER \
564 EXPERIMENTAL \
565 \
566 CONFIG_WITH_ALLOC_CACHES \
567 CONFIG_WITH_LAZY_DEPS_VARS \
568 CONFIG_WITH_STRCACHE2 \
569 CONFIG_WITH_VALUE_LENGTH \
570 CONFIG_WITH_RDONLY_VARIABLE_VALUE
571# TODO ?
572# CONFIG_WITH_PRINT_STATS_SWITCH \
573# CONFIG_WITH_EXTENDED_NOTPARALLEL \
574
575kmk_fgmake_SOURCES = \
576 main.c \
577 read.c \
578 hash.c \
579 strcache.c \
580 strcache2.c \
581 variable.c \
582 ar.c \
583 arscan.c \
584 commands.c \
585 default.c \
586 dir.c \
587 expand.c \
588 file.c \
589 function.c \
590 implicit.c \
591 job.c \
592 misc.c \
593 output.c \
594 alloccache.c \
595 remake.c \
596 rule.c \
597 signame.c \
598 version.c \
599 vpath.c \
600 remote-stub.c \
601 guile.c \
602 load.c
603ifeq ($(KBUILD_TARGET),win)
604 kmk_fgmake_SOURCES += \
605 w32/w32os.c
606# @todo: dir-nt-bird.c for fgmake
607else
608 kmk_fgmake_SOURCES += \
609 posixos.c
610endif
611
612kmk_fgmake_SOURCES.win = \
613 w32/subproc/sub_proc.c
614
615
616#
617# tstFileInfo
618#
619PROGRAMS.win += tstFileInfo
620tstFileInfo_TEMPLATE = BIN
621tstFileInfo_SOURCES = w32/tstFileInfo.c
622
623#
624# tstFileInfo
625#
626PROGRAMS.win += tstFtsFake
627tstFtsFake_TEMPLATE = BIN-KMK
628tstFtsFake_NOINST = 1
629tstFtsFake_DEFS = USE_OLD_FTS
630tstFtsFake_SOURCES = ../lib/nt/tstNtFts.c
631
632
633
634include $(FILE_KBUILD_SUB_FOOTER)
635
636
637#
638# Use checked in config.h instead of running ./Configure for it.
639#
640kmk_config.h.$(KBUILD_TARGET) := $(kmk_DEFPATH)/config.h.$(KBUILD_TARGET)
641$(kmk_0_OUTDIR)/config.h: $(kmk_config.h.$(KBUILD_TARGET))
642 $(MKDIR) -p $(dir $@)
643 $(CP) $^ $@
644
645#
646# Some missing headers.
647#
648if1of ($(KBUILD_TARGET), win nt)
649$(kmk_0_OUTDIR)/fts.h: $(MAKEFILE) | $(call DIRDEP,$(kmk_0_OUTDIR))
650 $(APPEND) -t "$@" "#include <nt/fts-nt.h>"
651else
652$(kmk_0_OUTDIR)/fts.h: $(kmk_DEFPATH)/kmkbuiltin/ftsfake.h | $(call DIRDEP,$(kmk_0_OUTDIR))
653 $(CP) $^ $@
654endif
655
656$(kmk_0_OUTDIR)/unistd.h: | $(call DIRDEP,$(kmk_0_OUTDIR))
657 $(ECHO_EXT) > $@
658
659$(kmk_0_OUTDIR)/sysexits.h: | $(call DIRDEP,$(kmk_0_OUTDIR))
660 $(ECHO_EXT) > $@
661
662$(kmk_0_OUTDIR)/inttypes.h: | $(call DIRDEP,$(kmk_0_OUTDIR))
663 $(ECHO_EXT) > $@
664
665$(kmk_0_OUTDIR)/paths.h: | $(call DIRDEP,$(kmk_0_OUTDIR))
666 $(ECHO_EXT) > $@
667
668$(kmk_0_OUTDIR)/pwd.h: | $(call DIRDEP,$(kmk_0_OUTDIR))
669 $(ECHO_EXT) > $@
670
671$(kmk_0_OUTDIR)/grp.h: | $(call DIRDEP,$(kmk_0_OUTDIR))
672 $(ECHO_EXT) > $@
673
674
675#
676# Some tests.
677#
678parallel: parallel_1 parallel_2 parallel_3 parallel_4 parallel_5
679parallel_1 parallel_2 parallel_3 parallel_4 parallel_5:
680 echo $@_start ; sleep 1; echo $@_done
681
682my_test:
683 echo "1"
684 echo "2"
685 echo "3"
686 echo "4"
687
688
689#
690# Shell execution tests.
691#
692test_shell: test_shell_quoting test_shell_double_quoting test_shell_newline
693
694# shell double and single quoting check (was busted on windows in 3.81).
695test_shell_quoting:
696 $(ECHO_EXT) "double quoted sTrInG"
697 $(ECHO_EXT) "double quoted sTrInG" | $(SED_EXT) -e "s/sTrInG/string/g"
698 $(ECHO_EXT) 'single quoted sTrInG' | $(SED_EXT) -e 's/sTrInG/string/g'
699 $(ECHO) "This string should not be printed with double quotes."
700 $(ECHO) 'This string should not be printed with single quotes.'
701 ( echo " #define PWD \"`pwd`\""; )
702
703test_shell_double_quoting:
704 $(ECHO_EXT) "foo foo foo" | $(SED_EXT) -e \
705 "s/foo/$@/" -e \
706 "s/foo/works/" \
707 -e "s/foo/\!/"
708
709test_shell_double_quoting2:
710 $(ECHO_EXT) "foo foo foo" | $(SED_EXT) -e \
711 "s/foo/$@/" -e \
712 "s/foo/works/" \
713 -e\
714 "s/foo/\!/"
715
716# when using batch mode shell, the newline got escaped twice and spoiling everything.
717test_shell_newline:
718 $(ECHO_EXT) "foo foo foo" | $(SED_EXT) -e \
719 's/foo/$@/' -e \
720 's/foo/works/' \
721 -e 's/foo/\!/'
722
723
724test_stack:
725 $(MAKE) -f $(kmk_DEFPATH)/testcase-stack.kmk
726
727test_math:
728 $(MAKE) -f $(kmk_DEFPATH)/testcase-math.kmk
729
730test_if1of:
731 $(MAKE) -f $(kmk_DEFPATH)/testcase-if1of.kmk
732
733test_local:
734 $(MAKE) -f $(kmk_DEFPATH)/testcase-local.kmk
735
736test_includedep:
737 $(MAKE) -f $(kmk_DEFPATH)/testcase-includedep.kmk
738
739test_root:
740 $(MAKE) -f $(kmk_DEFPATH)/testcase-root.kmk
741
742test_2ndtargetexp:
743 $(MAKE) -f $(kmk_DEFPATH)/testcase-2ndtargetexp.kmk
744
745test_30_continued_on_failure_worker:
746 this_executable_does_not_exist.exe
747 echo "We shouldn't see this..."
748
749test_30_continued_on_failure:
750 $(MAKE) -f $(MAKEFILE) test_30_continued_on_failure_worker; \
751 RC=$$?; \
752 if test $${RC} -ne 2; then \
753 echo "$@: FAILED - exit code $${RC} instead of 2."; \
754 exit 1; \
755 else \
756 echo "$@: SUCCESS"; \
757 fi
758
759test_lazy_deps_vars:
760 $(MAKE) -C $(kmk_DEFPATH) -f testcase-lazy-deps-vars.kmk
761
762
763test_all: \
764 test_math \
765 test_stack \
766 test_shell \
767 test_if1of \
768 test_local \
769 test_root \
770 test_includedep \
771 test_2ndtargetexp \
772 test_30_continued_on_failure \
773 test_lazy_deps_vars
774
775
Note: See TracBrowser for help on using the repository browser.