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