diff options
Diffstat (limited to 'src/kmk/Makefile.kmk')
-rw-r--r-- | src/kmk/Makefile.kmk | 770 |
1 files changed, 770 insertions, 0 deletions
diff --git a/src/kmk/Makefile.kmk b/src/kmk/Makefile.kmk new file mode 100644 index 0000000..ff93ae5 --- /dev/null +++ b/src/kmk/Makefile.kmk @@ -0,0 +1,770 @@ +# $Id: Makefile.kmk 3572 2022-10-24 08:36:35Z bird $ +## @file +# Sub-makefile for kmk / GNU Make. +# + +# +# Copyright (c) 2004-2011 knut st. osmundsen <bird-kBuild-spamx@anduin.net> +# +# This file is part of kBuild. +# +# kBuild is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# kBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with kBuild. If not, see <http://www.gnu.org/licenses/> +# +# + +SUB_DEPTH = ../.. +include $(KBUILD_PATH)/subheader.kmk + +# Enable new children handling for windows. +CONFIG_NEW_WIN_CHILDREN = 1 + +# +# Template for kmk and the kmk_* binaries in this makefile. +# +TEMPLATE_BIN-KMK = Template for src/gmake binaries +TEMPLATE_BIN-KMK_EXTENDS = BIN-THREADED +TEMPLATE_BIN-KMK_DEFS = \ + HAVE_CONFIG_H \ + $(TEMPLATE_BIN_DEFS) \ + KBUILD_SVN_REV=$(KBUILD_SVN_REV) \ + KBUILD_TYPE=$(TMP_QUOTE_SLASH)"$(KBUILD_TYPE)$(TMP_QUOTE_SLASH)" +TEMPLATE_BIN-KMK_DEPS = \ + $(kmk_0_OUTDIR)/config.h \ + $(kmk_0_OUTDIR)/fts.h +TEMPLATE_BIN-KMK_CLEAN = $(TEMPLATE_BIN-KMK_DEPS) +TEMPLATE_BIN-KMK_DEPS.solaris = \ + $(kmk_0_OUTDIR)/paths.h +TEMPLATE_BIN-KMK_CLEAN.solaris = $(TEMPLATE_BIN-KMK_DEPS.solaris) +TEMPLATE_BIN-KMK_DEPS.win = \ + $(kmk_0_OUTDIR)/sysexits.h \ + $(kmk_0_OUTDIR)/unistd.h \ + $(kmk_0_OUTDIR)/paths.h \ + $(kmk_0_OUTDIR)/grp.h \ + $(kmk_0_OUTDIR)/pwd.h \ + $(kmk_0_OUTDIR)/inttypes.h +TEMPLATE_BIN-KMK_CFLAGS.win.amd64 = $(TEMPLATE_BIN-THREADED_CFLAGS.win.amd64) -wd4244 -wd4267 +TEMPLATE_BIN-KMK_CLEAN.win = $(TEMPLATE_BIN-KMK_DEPS.win) +TEMPLATE_BIN-KMK_DEFS.debug = $(TEMPLATE_BIN_DEFS.debug) MAKE_MAINTAINER_MODE +TEMPLATE_BIN-KMK_INCS = $(kmk_0_OUTDIR) . $(TEMPLATE_BIN-THREADED_INCS) +ifneq ($(KBUILD_TARGET),os2) + TEMPLATE_BIN-KMK_INCS += glob +endif +TEMPLATE_BIN-KMK_LIBS = $(LIB_KUTIL) $(TEMPLATE_BIN-THREADED_LIBS) $(kmkmissing_1_TARGET) $(LIB_KUTIL) +TEMPLATE_BIN-KMK_LIBS.x86 = $(LIB_KUTIL) $(TEMPLATE_BIN-THREADED_LIBS.x86) +TEMPLATE_BIN-KMK_LIBS.amd64 = $(LIB_KUTIL) $(TEMPLATE_BIN-THREADED_LIBS.amd64) +ifdef ELECTRIC_HEAP # for electric heap (see electric.c). +ifeq ($(KBUILD_TARGET),win) + TEMPLATE_BIN-KMK_CFLAGS = $(TEMPLATE_BIN-THREADED_CFLAGS) /FI$(kmk_DEFPATH)/electric.h -DELECTRIC_HEAP=1 +else + TEMPLATE_BIN-KMK_CFLAGS = $(TEMPLATE_BIN-THREADED_CFLAGS) -include $(kmk_DEFPATH)/electric.h -DELECTRIC_HEAP=1 +endif +endif +ifdef CONFIG_WITH_ALLOCCACHE_DEBUG + TEMPLATE_BIN-KMK_DEFS += CONFIG_WITH_ALLOCCACHE_DEBUG +endif +ifdef CONFIG_NEW_WIN_CHILDREN + TEMPLATE_BIN-KMK_DEFS.win = $(TEMPLATE_BIN_DEFS.win) CONFIG_NEW_WIN_CHILDREN +endif +# GCC sanitizers. +ifdef GCC_SANITIZERS + TEMPLATE_BIN-KMK_CFLAGS ?= $(TEMPLATE_BIN-THREADED_CFLAGS) +# TEMPLATE_BIN-KMK_CFLAGS += -fsanitize=address -fsanitize=undefined -static-libubsan -D GCC_ADDRESS_SANITIZER + TEMPLATE_BIN-KMK_CFLAGS += -fsanitize=address -fsanitize=undefined -D GCC_ADDRESS_SANITIZER + TEMPLATE_BIN-KMK_LDFLAGS ?= $(TEMPLATE_BIN-THREADED_LDFLAGS) + TEMPLATE_BIN-KMK_LDFLAGS += -fsanitize=address -fsanitize=undefined +endif + +# +# Library version of the above. +# +TEMPLATE_LIB-KMK = Template for src/gmake libraries +TEMPLATE_LIB-KMK_EXTENDS = BIN-KMK +TEMPLATE_LIB-KMK_POST_CMDS.win = $(NO_SUCH_VARIABLE) + +# +# Template for building standalone built-in utilities. +# +TEMPLATE_BIN-KMK-BUILTIN = Template for standalone built-in utilies. +TEMPLATE_BIN-KMK-BUILTIN_EXTENDS = BIN-KMK +TEMPLATE_BIN-KMK-BUILTIN_EXTENDS_BY = appending +TEMPLATE_BIN-KMK-BUILTIN_DEFS += KMK_BUILTIN_STANDALONE +TEMPLATE_BIN-KMK-BUILTIN_SOURCES += kmkbuiltin/err.c + +# +# A library containing the missing features needed by kmk and the +# kmk_* binaries. Saves a bit of work later on. +# +LIBRARIES += kmkmissing +kmkmissing_TEMPLATE = LIB-KMK +kmkmissing_DEFS = KMK +kmkmissing_NOINST = 1 +kmkmissing_SOURCES = \ + kmkbuiltin/fts.c \ + kmkbuiltin/setmode.c \ + kmkbuiltin/strmode.c \ + kmkbuiltin/kbuild_protection.c \ + kmkbuiltin/common-env-and-cwd-opt.c \ + kmkbuiltin/getopt_r.c \ + kmkbuiltin/getopt1_r.c \ + getopt.c \ + getopt1.c \ + electric.c +ifneq ($(KBUILD_TARGET),os2) +kmkmissing_SOURCES += \ + glob/glob.c +endif + +kmkmissing_SOURCES.darwin = \ + kmkbuiltin/darwin.c \ + glob/fnmatch.c + +kmkmissing_SOURCES.dragonfly = \ + glob/fnmatch.c + +kmkmissing_SOURCES.freebsd = \ + glob/fnmatch.c + +kmkmissing_SOURCES.gnuhurd += \ + kmkbuiltin/strlcpy.c + +kmkmissing_SOURCES.gnukfbsd += \ + kmkbuiltin/strlcpy.c + +kmkmissing_SOURCES.gnuknbsd += \ + kmkbuiltin/strlcpy.c + +kmkmissing_SOURCES.haiku = \ + kmkbuiltin/haikufakes.c \ + glob/fnmatch.c + +kmkmissing_SOURCES.linux += \ + kmkbuiltin/strlcpy.c + +kmkmissing_SOURCES.netbsd = \ + glob/fnmatch.c + +kmkmissing_SOURCES.openbsd = \ + kmkbuiltin/openbsd.c + +kmkmissing_SOURCES.solaris = \ + kmkbuiltin/strlcpy.c \ + kmkbuiltin/solfakes.c \ + glob/fnmatch.c + +kmkmissing_SOURCES.win += \ + kmkbuiltin/strlcpy.c \ + kmkbuiltin/mscfakes.c \ + glob/fnmatch.c \ + getloadavg.c \ + w32/subproc/misc.c \ + w32/subproc/w32err.c \ + w32/pathstuff.c \ + w32/imagecache.c \ + w32/compat/posixfcn.c + +# +# kmk +# +PROGRAMS += kmk + +kmk_TEMPLATE = BIN-KMK + +kmk_DEFS = \ + NO_ARCHIVES \ + EXPERIMENTAL \ + CONFIG_WITH_TOUPPER_TOLOWER \ + CONFIG_WITH_DEFINED \ + CONFIG_WITH_EXPLICIT_MULTITARGET \ + CONFIG_WITH_DOT_MUST_MAKE \ + CONFIG_WITH_PREPEND_ASSIGNMENT \ + CONFIG_WITH_LOCAL_VARIABLES \ + CONFIG_WITH_2ND_TARGET_EXPANSION \ + CONFIG_WITH_ALLOC_CACHES \ + CONFIG_WITH_STRCACHE2 \ + \ + KMK \ + KMK_HELPERS \ + CONFIG_NO_DEFAULT_SUFFIXES \ + CONFIG_NO_DEFAULT_PATTERN_RULES \ + CONFIG_NO_DEFAULT_TERMINAL_RULES \ + CONFIG_NO_DEFAULT_SUFFIX_RULES \ + CONFIG_NO_DEFAULT_VARIABLES \ + \ + CONFIG_WITH_ABSPATHEX \ + CONFIG_WITH_COMMANDS_FUNC \ + CONFIG_WITH_DATE \ + CONFIG_WITH_DEFINED_FUNCTIONS \ + CONFIG_WITH_EVALPLUS \ + CONFIG_WITH_FILE_SIZE \ + CONFIG_WITH_LOOP_FUNCTIONS \ + CONFIG_WITH_MATH \ + CONFIG_WITH_NANOTS \ + CONFIG_WITH_ROOT_FUNC \ + CONFIG_WITH_RSORT \ + CONFIG_WITH_STACK \ + CONFIG_WITH_STRING_FUNCTIONS \ + CONFIG_WITH_WHERE_FUNCTION \ + CONFIG_WITH_WHICH \ + CONFIG_WITH_XARGS \ + \ + CONFIG_WITH_EXTENDED_NOTPARALLEL \ + CONFIG_WITH_INCLUDEDEP \ + CONFIG_WITH_VALUE_LENGTH \ + CONFIG_WITH_COMPARE \ + CONFIG_WITH_SET_CONDITIONALS \ + CONFIG_WITH_IF_CONDITIONALS \ + CONFIG_WITH_PRINTF \ + CONFIG_WITH_MINIMAL_STATS \ + \ + CONFIG_PRETTY_COMMAND_PRINTING \ + CONFIG_WITH_PRINT_STATS_SWITCH \ + CONFIG_WITH_PRINT_TIME_SWITCH \ + CONFIG_WITH_RDONLY_VARIABLE_VALUE \ + CONFIG_WITH_LAZY_DEPS_VARS \ + CONFIG_WITH_MEMORY_OPTIMIZATIONS \ + \ + KBUILD_HOST=$(TMP_QUOTE_SLASH)"$(KBUILD_TARGET)$(TMP_QUOTE_SLASH)" \ + KBUILD_HOST_ARCH=$(TMP_QUOTE_SLASH)"$(KBUILD_TARGET_ARCH)$(TMP_QUOTE_SLASH)" \ + KBUILD_HOST_CPU=$(TMP_QUOTE_SLASH)"$(KBUILD_TARGET_CPU)$(TMP_QUOTE_SLASH)" +# kmk_DEFS += CONFIG_WITH_COMPILER # experimental, doesn't work 101% right it seems. +kmk_DEFS.x86 = CONFIG_WITH_OPTIMIZATION_HACKS +kmk_DEFS.amd64 = CONFIG_WITH_OPTIMIZATION_HACKS +kmk_DEFS.win = CONFIG_NEW_WIN32_CTRL_EVENT CONFIG_WITH_OUTPUT_IN_MEMORY +kmk_DEFS.debug = CONFIG_WITH_MAKE_STATS +ifdef CONFIG_WITH_MAKE_STATS + kmk_DEFS += CONFIG_WITH_MAKE_STATS +endif +#ifdef CONFIG_WITH_KMK_BUILTIN_STATS + kmk_DEFS += CONFIG_WITH_KMK_BUILTIN_STATS +#endif +ifdef CONFIG_WITH_EVAL_COMPILER + kmk_DEFS += CONFIG_WITH_EVAL_COMPILER +endif +ifdef CONFIG_WITH_COMPILE_EVERYTHING + kmk_DEFS += CONFIG_WITH_COMPILE_EVERYTHING +endif + +#ifeq ($(KBUILD_TYPE).$(USERNAME),debug.bird) +# kmk_DEFS += CONFIG_WITH_COMPILER CONFIG_WITH_EVAL_COMPILER CONFIG_WITH_COMPILE_EVERYTHING +#endif + +kmk_SOURCES = \ + main.c \ + read.c \ + hash.c \ + strcache.c \ + variable.c \ + ar.c \ + arscan.c \ + commands.c \ + default.c \ + expand.c \ + file.c \ + function.c \ + implicit.c \ + job.c \ + misc.c \ + output.c \ + remake.c \ + rule.c \ + signame.c \ + version.c \ + vpath.c \ + remote-stub.c \ + guile.c \ + load.c \ + \ + alloccache.c \ + expreval.c \ + incdep.c \ + strcache2.c \ + kmk_cc_exec.c \ + kbuild.c \ + kbuild-object.c +ifeq ($(KBUILD_TARGET),win) + kmk_SOURCES += \ + dir-nt-bird.c \ + w32/w32os.c +else + kmk_SOURCES += \ + dir.c \ + posixos.c +endif + +ifndef CONFIG_NEW_WIN_CHILDREN +kmk_SOURCES.win = \ + w32/subproc/sub_proc.c +else +kmk_SOURCES.win = \ + w32/winchildren.c +endif + +kmk_DEFS.freebsd.x86 = CONFIG_WITHOUT_THREADS + +#kmk_LIBS.solaris = malloc +#kmk_DEFS.solaris += HAVE_MALLINFO + +# +# kmkbuiltin commands +# +kmk_DEFS += CONFIG_WITH_KMK_BUILTIN +kmk_LIBS += $(LIB_KUTIL) #$(LIB_KDEP) +kmk_SOURCES += \ + kmkbuiltin.c \ + kmkbuiltin/append.c \ + kmkbuiltin/cat.c \ + kmkbuiltin/chmod.c \ + kmkbuiltin/cmp.c \ + kmkbuiltin/cmp_util.c \ + kmkbuiltin/cp.c \ + kmkbuiltin/cp_utils.c \ + kmkbuiltin/echo.c \ + kmkbuiltin/expr.c \ + kmkbuiltin/install.c \ + kmkbuiltin/kDepIDB.c \ + kmkbuiltin/kDepObj.c \ + ../lib/kDep.c \ + kmkbuiltin/md5sum.c \ + kmkbuiltin/mkdir.c \ + kmkbuiltin/mv.c \ + kmkbuiltin/ln.c \ + kmkbuiltin/printf.c \ + kmkbuiltin/redirect.c \ + kmkbuiltin/rm.c \ + kmkbuiltin/rmdir.c \ + $(if-expr $(KBUILD_TARGET) == win,kmkbuiltin/kSubmit.c) \ + kmkbuiltin/sleep.c \ + kmkbuiltin/test.c \ + kmkbuiltin/touch.c \ + \ + kmkbuiltin/err.c +kmk_SOURCES.win += \ + kmkbuiltin/kill.c + + +## @todo kmkbuiltin/redirect.c + +## Some profiling +#kmk_SOURCES += kbuildprf.c +#kmk_DEFS += open=prf_open read=prf_read lseek=prf_lseek close=prf_close +##kmk_DEFS += KMK_PRF=1 +##kmkmissing_DEFS += KMK_PRF=1 + +# +# Standalone kmkbuiltin commands. +# +PROGRAMS += \ + kmk_append \ + kmk_cat \ + kmk_chmod \ + kmk_cp \ + kmk_cmp \ + kmk_echo \ + kmk_expr \ + kmk_md5sum \ + kmk_mkdir \ + kmk_mv \ + kmk_install \ + kmk_ln \ + kmk_printf \ + kmk_redirect \ + kmk_rm \ + kmk_rmdir \ + kmk_sleep \ + kmk_test \ + kmk_touch \ + kDepIDB \ + kDepObj +PROGRAMS.win += \ + kmk_kill + +kmk_append_TEMPLATE = BIN-KMK-BUILTIN +kmk_append_INCS = . +kmk_append_SOURCES = \ + kmkbuiltin/append.c + +kmk_cat_TEMPLATE = BIN-KMK-BUILTIN +kmk_cat_SOURCES = \ + kmkbuiltin/cat.c + +kmk_chmod_TEMPLATE = BIN-KMK-BUILTIN +kmk_chmod_SOURCES = \ + kmkbuiltin/chmod.c + +kmk_cmp_TEMPLATE = BIN-KMK-BUILTIN +kmk_cmp_SOURCES = \ + kmkbuiltin/cmp.c \ + kmkbuiltin/cmp_util.c + +kmk_cp_TEMPLATE = BIN-KMK-BUILTIN +kmk_cp_SOURCES = \ + kmkbuiltin/cp.c \ + kmkbuiltin/cp_utils.c \ + kmkbuiltin/cmp_util.c + +kmk_echo_TEMPLATE = BIN-KMK-BUILTIN +kmk_echo_SOURCES = \ + kmkbuiltin/echo.c + +kmk_expr_TEMPLATE = BIN-KMK-BUILTIN +kmk_expr_SOURCES = \ + kmkbuiltin/expr.c + +kmk_install_TEMPLATE = BIN-KMK-BUILTIN +kmk_install_SOURCES = \ + kmkbuiltin/install.c + +kmk_kill_TEMPLATE = BIN-KMK-BUILTIN +kmk_kill_SOURCES = \ + kmkbuiltin/kill.c + +kmk_ln_TEMPLATE = BIN-KMK-BUILTIN +kmk_ln_SOURCES = \ + kmkbuiltin/ln.c + +kmk_mkdir_TEMPLATE = BIN-KMK-BUILTIN +kmk_mkdir_SOURCES = \ + kmkbuiltin/mkdir.c + +kmk_md5sum_TEMPLATE = BIN-KMK-BUILTIN +kmk_md5sum_SOURCES = \ + kmkbuiltin/md5sum.c +kmk_md5sum_LIBS = $(LIB_KUTIL) + +kmk_mv_TEMPLATE = BIN-KMK-BUILTIN +kmk_mv_SOURCES = \ + kmkbuiltin/mv.c + +kmk_printf_TEMPLATE = BIN-KMK-BUILTIN +kmk_printf_SOURCES = \ + kmkbuiltin/printf.c + +kmk_rm_TEMPLATE = BIN-KMK-BUILTIN +kmk_rm_SOURCES = \ + kmkbuiltin/rm.c + +kmk_redirect_TEMPLATE = BIN-KMK-BUILTIN +kmk_redirect_SOURCES = \ + kmkbuiltin/redirect.c +kmk_redirect_SOURCES.win = \ + ../lib/startuphacks-win.c + +kmk_rmdir_TEMPLATE = BIN-KMK-BUILTIN +kmk_rmdir_SOURCES = \ + kmkbuiltin/rmdir.c + +kmk_sleep_TEMPLATE = BIN-KMK-BUILTIN +kmk_sleep_SOURCES = \ + kmkbuiltin/sleep.c + +kmk_test_TEMPLATE = BIN-KMK-BUILTIN +kmk_test_SOURCES = \ + kmkbuiltin/test.c + +kmk_touch_TEMPLATE = BIN-KMK-BUILTIN +kmk_touch_SOURCES = \ + kmkbuiltin/touch.c + +kDepIDB_TEMPLATE = BIN-KMK-BUILTIN +kDepIDB_INCS = . +kDepIDB_LIBS = $(LIB_KDEP) $(LIB_KUTIL) +kDepIDB_SOURCES = \ + kmkbuiltin/kDepIDB.c + +kDepObj_TEMPLATE = BIN-KMK-BUILTIN +kDepObj_INCS = . +kDepObj_LIBS = $(LIB_KDEP) $(LIB_KUTIL) +kDepObj_SOURCES = \ + kmkbuiltin/kDepObj.c + + +# +# kmk_gmake - almost plain GNU Make. +# +PROGRAMS += kmk_gmake + +kmk_gmake_TEMPLATE = BIN-KMK +kmk_gmake_DEFS = \ + HAVE_CONFIG_H \ + CONFIG_WITH_TOUPPER_TOLOWER \ + EXPERIMENTAL +# NO_ARCHIVES + +kmk_gmake_SOURCES = \ + main.c \ + read.c \ + hash.c \ + strcache.c \ + variable.c \ + ar.c \ + arscan.c \ + commands.c \ + default.c \ + dir.c \ + expand.c \ + file.c \ + function.c \ + implicit.c \ + job.c \ + misc.c \ + output.c \ + remake.c \ + rule.c \ + signame.c \ + version.c \ + vpath.c \ + remote-stub.c \ + guile.c \ + load.c +ifeq ($(KBUILD_TARGET),win) + kmk_gmake_SOURCES += \ + w32/w32os.c +else + kmk_gmake_SOURCES += \ + posixos.c +endif + +ifndef CONFIG_NEW_WIN_CHILDREN +kmk_gmake_SOURCES.win = \ + w32/subproc/sub_proc.c +else +kmk_gmake_SOURCES.win = \ + w32/winchildren.c +endif + + +# +# kmk_fmake - Faster GNU Make. +# +ifeq ($(USER),bird) # for experimental purposes only. +PROGRAMS += kmk_fgmake +endif + +kmk_fgmake_TEMPLATE = BIN-KMK +kmk_fgmake_DEFS = \ + HAVE_CONFIG_H \ + NO_ARCHIVES \ + CONFIG_WITH_TOUPPER_TOLOWER \ + EXPERIMENTAL \ + \ + CONFIG_WITH_ALLOC_CACHES \ + CONFIG_WITH_LAZY_DEPS_VARS \ + CONFIG_WITH_STRCACHE2 \ + CONFIG_WITH_VALUE_LENGTH \ + CONFIG_WITH_RDONLY_VARIABLE_VALUE +# TODO ? +# CONFIG_WITH_PRINT_STATS_SWITCH \ +# CONFIG_WITH_EXTENDED_NOTPARALLEL \ + +kmk_fgmake_SOURCES = \ + main.c \ + read.c \ + hash.c \ + strcache.c \ + strcache2.c \ + variable.c \ + ar.c \ + arscan.c \ + commands.c \ + default.c \ + dir.c \ + expand.c \ + file.c \ + function.c \ + implicit.c \ + job.c \ + misc.c \ + output.c \ + alloccache.c \ + remake.c \ + rule.c \ + signame.c \ + version.c \ + vpath.c \ + remote-stub.c \ + guile.c \ + load.c +ifeq ($(KBUILD_TARGET),win) + kmk_fgmake_SOURCES += \ + w32/w32os.c +# @todo: dir-nt-bird.c for fgmake +else + kmk_fgmake_SOURCES += \ + posixos.c +endif + +kmk_fgmake_SOURCES.win = \ + w32/subproc/sub_proc.c + + +# +# tstFileInfo +# +PROGRAMS.win += tstFileInfo +tstFileInfo_TEMPLATE = BIN +tstFileInfo_SOURCES = w32/tstFileInfo.c + +# +# tstFileInfo +# +PROGRAMS.win += tstFtsFake +tstFtsFake_TEMPLATE = BIN-KMK +tstFtsFake_NOINST = 1 +tstFtsFake_DEFS = USE_OLD_FTS +tstFtsFake_SOURCES = ../lib/nt/tstNtFts.c + + + +include $(FILE_KBUILD_SUB_FOOTER) + + +# +# Use checked in config.h instead of running ./Configure for it. +# +kmk_config.h.$(KBUILD_TARGET) := $(kmk_DEFPATH)/config.h.$(KBUILD_TARGET) +$(kmk_0_OUTDIR)/config.h: $(kmk_config.h.$(KBUILD_TARGET)) + $(MKDIR) -p $(dir $@) + $(CP) $^ $@ + +# +# Some missing headers. +# +if1of ($(KBUILD_TARGET), win nt) +$(kmk_0_OUTDIR)/fts.h: $(MAKEFILE) | $(call DIRDEP,$(kmk_0_OUTDIR)) + $(APPEND) -t "$@" "#include <nt/fts-nt.h>" +else +$(kmk_0_OUTDIR)/fts.h: $(kmk_DEFPATH)/kmkbuiltin/ftsfake.h | $(call DIRDEP,$(kmk_0_OUTDIR)) + $(CP) $^ $@ +endif + +$(kmk_0_OUTDIR)/unistd.h: | $(call DIRDEP,$(kmk_0_OUTDIR)) + $(ECHO_EXT) > $@ + +$(kmk_0_OUTDIR)/sysexits.h: | $(call DIRDEP,$(kmk_0_OUTDIR)) + $(ECHO_EXT) > $@ + +$(kmk_0_OUTDIR)/inttypes.h: | $(call DIRDEP,$(kmk_0_OUTDIR)) + $(ECHO_EXT) > $@ + +$(kmk_0_OUTDIR)/paths.h: | $(call DIRDEP,$(kmk_0_OUTDIR)) + $(ECHO_EXT) > $@ + +$(kmk_0_OUTDIR)/pwd.h: | $(call DIRDEP,$(kmk_0_OUTDIR)) + $(ECHO_EXT) > $@ + +$(kmk_0_OUTDIR)/grp.h: | $(call DIRDEP,$(kmk_0_OUTDIR)) + $(ECHO_EXT) > $@ + + +# +# Some tests. +# +parallel: parallel_1 parallel_2 parallel_3 parallel_4 parallel_5 +parallel_1 parallel_2 parallel_3 parallel_4 parallel_5: + echo $@_start ; sleep 1; echo $@_done + +my_test: + echo "1" + echo "2" + echo "3" + echo "4" + + +# +# Shell execution tests. +# +test_shell: test_shell_quoting test_shell_double_quoting test_shell_newline + +# shell double and single quoting check (was busted on windows in 3.81). +test_shell_quoting: + $(ECHO_EXT) "double quoted sTrInG" + $(ECHO_EXT) "double quoted sTrInG" | $(SED_EXT) -e "s/sTrInG/string/g" + $(ECHO_EXT) 'single quoted sTrInG' | $(SED_EXT) -e 's/sTrInG/string/g' + $(ECHO) "This string should not be printed with double quotes." + $(ECHO) 'This string should not be printed with single quotes.' + ( echo " #define PWD \"`pwd`\""; ) + +test_shell_double_quoting: + $(ECHO_EXT) "foo foo foo" | $(SED_EXT) -e \ + "s/foo/$@/" -e \ + "s/foo/works/" \ + -e "s/foo/\!/" + +test_shell_double_quoting2: + $(ECHO_EXT) "foo foo foo" | $(SED_EXT) -e \ + "s/foo/$@/" -e \ + "s/foo/works/" \ + -e\ + "s/foo/\!/" + +# when using batch mode shell, the newline got escaped twice and spoiling everything. +test_shell_newline: + $(ECHO_EXT) "foo foo foo" | $(SED_EXT) -e \ + 's/foo/$@/' -e \ + 's/foo/works/' \ + -e 's/foo/\!/' + + +test_stack: + $(MAKE) -f $(kmk_DEFPATH)/testcase-stack.kmk + +test_math: + $(MAKE) -f $(kmk_DEFPATH)/testcase-math.kmk + +test_if1of: + $(MAKE) -f $(kmk_DEFPATH)/testcase-if1of.kmk + +test_local: + $(MAKE) -f $(kmk_DEFPATH)/testcase-local.kmk + +test_includedep: + $(MAKE) -f $(kmk_DEFPATH)/testcase-includedep.kmk + +test_root: + $(MAKE) -f $(kmk_DEFPATH)/testcase-root.kmk + +test_2ndtargetexp: + $(MAKE) -f $(kmk_DEFPATH)/testcase-2ndtargetexp.kmk + +test_30_continued_on_failure_worker: + this_executable_does_not_exist.exe + echo "We shouldn't see this..." + +test_30_continued_on_failure: + $(MAKE) -f $(MAKEFILE) test_30_continued_on_failure_worker; \ + RC=$$?; \ + if test $${RC} -ne 2; then \ + echo "$@: FAILED - exit code $${RC} instead of 2."; \ + exit 1; \ + else \ + echo "$@: SUCCESS"; \ + fi + +test_lazy_deps_vars: + $(MAKE) -C $(kmk_DEFPATH) -f testcase-lazy-deps-vars.kmk + + +test_all: \ + test_math \ + test_stack \ + test_shell \ + test_if1of \ + test_local \ + test_root \ + test_includedep \ + test_2ndtargetexp \ + test_30_continued_on_failure \ + test_lazy_deps_vars + + |