source: trunk/kBuild/header.kmk@ 660

Last change on this file since 660 was 660, checked in by bird, 19 years ago

Target properties has precedence over template properties. Grouped accumulative props by where the 'most significan item' is and target <- template inheritance respect this. Fixes #11.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 17.0 KB
Line 
1# $Id: header.kmk 660 2006-12-05 14:36:19Z bird $
2## @file
3#
4# kBuild - File included at top of makefile.
5#
6# Copyright (c) 2004-2005 knut st. osmundsen <bird-srcspam@anduin.net>
7#
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 2 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, write to the Free Software
23# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24#
25#
26
27ifndef __header_kmk__
28# start-of-file-content
29
30#
31# default rule
32#
33all: all_recursive
34
35#
36# The FORCE rule.
37#
38FORCE:
39
40#
41# Try avoid inference rules.
42#
43.SUFFIXES:
44SUFFIXES :=
45
46
47#
48# General purpose macros.
49#
50
51## get last word in a list.
52# @returns last word in $1.
53# @param $1 Word list.
54lastword = $(word $(words $(1)), $(1))
55
56##
57# Newline character(s).
58define NL
59
60
61endef
62
63##
64# Tab character.
65TAB := $(subst ., ,.)
66
67##
68# Space character.
69SP := $(subst ., ,.)
70
71##
72# Checks if two strings are equal.
73# @returns blank if equal
74# @returns non-blank if not equal.
75# @param $1 String 1.
76# @param $2 String 2
77STRCMP = $( todo )
78
79#
80# Set default build type.
81#
82ifndef BUILD_TYPE
83 ifdef BUILD_MODE
84 # BUILD_MODE is legacy from the OS/2 build system. :)
85BUILD_TYPE := $(tolower $(BUILD_MODE))
86 else
87BUILD_TYPE := release
88 endif
89endif
90
91
92#
93# Assert build platform.
94#
95ifndef BUILD_PLATFORM
96 $(error kBuild: BUILD_PLATFORM is undefined!)
97else
98 BUILD_PLATFORM := $(strip $(BUILD_PLATFORM))
99 ifneq ($(words $(BUILD_PLATFORM))$(filter-out darwin freebsd l4 linux nt os2 win win32 win64,$(BUILD_PLATFORM)),1)
100 # OS/2 (have uppercase legacy)
101 ifeq ($(BUILD_PLATFORM),OS2)
102 $(error kBuild: BUILD_PLATFORM must be all lowercase!)
103 endif
104 $(error kBuild: BUILD_PLATFORM value '$(BUILD_PLATFORM)' was not recognized!)
105 endif
106endif
107
108# Fill in defaults if needed.
109ifndef BUILD_PLATFORM_ARCH
110 ifeq ($(filter-out win64,$(BUILD_PLATFORM)),)
111 BUILD_PLATFORM_ARCH := amd64
112 else
113 BUILD_PLATFORM_ARCH := x86
114 endif
115endif
116ifndef BUILD_PLATFORM_CPU
117 ifeq ($(filter-out amd64,$(BUILD_PLATFORM_ARCH)),)
118 BUILD_PLATFORM_CPU:= k8
119 else
120 BUILD_PLATFORM_CPU:= i586
121 endif
122endif
123
124
125#
126# Assert target platform.
127#
128ifndef BUILD_TARGET
129# not defined, set to the same as build platform
130BUILD_TARGET := $(BUILD_PLATFORM)
131else
132 BUILD_TARGET := $(strip $(BUILD_TARGET))
133 ifneq ($(words $(BUILD_TARGET))$(filter-out darwin freebsd l4 linux nt os2 win win32 win64,$(BUILD_TARGET)),1)
134 # OS/2 (have uppercase legacy)
135 ifeq ($(BUILD_TARGET),OS2)
136 $(error kBuild: BUILD_TARGET must be all lowercase!)
137 endif
138 $(error kBuild: BUILD_TARGET value '$(BUILD_TARGET)' was not recognized!)
139 endif
140endif
141
142# Fill in defaults if needed.
143ifndef BUILD_TARGET_ARCH
144 BUILD_TARGET_ARCH := x86
145endif
146ifndef BUILD_TARGET_CPU
147 BUILD_TARGET_CPU := i586
148endif
149
150# Adjust the DEPTH definition first
151ifeq ($(strip $(DEPTH)),)
152DEPTH := .
153endif
154
155#
156# Common definitions.
157#
158PATH_CURRENT := $(abspath $(CURDIR))
159ifneq ($(strip $(SUB_DEPTH)),)
160PATH_SUB_CURRENT := $(abspath $(PATH_CURRENT)/$(SUB_DEPTH))
161else
162PATH_SUB_CURRENT := $(PATH_CURRENT)
163endif
164PATH_ROOT := $(abspath $(PATH_CURRENT)/$(DEPTH))
165
166# Subdirectory relative to the root.
167ifneq ($(PATH_ROOT),$(PATH_CURRENT))
168CURSUBDIR := $(patsubst $(PATH_ROOT)/%,%,$(PATH_SUB_CURRENT))
169else
170CURSUBDIR := .
171endif
172
173# Output directories.
174ifndef PATH_OUT_BASE
175PATH_OUT_BASE := $(PATH_ROOT)/out
176endif
177ifndef PATH_OUT
178ifdef BUILD_TARGET_SUB # (BUILD_TARGET_SUB is not currently recognized by kBuild in any other places.)
179PATH_OUT := $(PATH_OUT_BASE)/$(BUILD_TARGET).$(BUILD_TARGET_ARCH).$(BUILD_TARGET_SUB)/$(BUILD_TYPE)
180else
181PATH_OUT := $(PATH_OUT_BASE)/$(BUILD_TARGET).$(BUILD_TARGET_ARCH)/$(BUILD_TYPE)
182endif
183endif # !define PATH_OUT
184PATH_OBJ = $(PATH_OUT)/obj
185PATH_TARGET = $(PATH_OBJ)/$(CURSUBDIR)
186PATH_INS = $(PATH_OUT)
187PATH_BIN = $(PATH_INS)/bin
188PATH_DLL = $(PATH_INS)/bin
189PATH_SYS = $(PATH_INS)/bin
190PATH_LIB = $(PATH_INS)/lib
191PATH_DOC = $(PATH_INS)/doc
192
193# Usually kBuild is external to the source tree.
194ifndef PATH_KBUILD
195PATH_KBUILD := $(PATH_ROOT)/kBuild
196endif
197PATH_KBUILD := $(abspath $(PATH_KBUILD))
198# kBuild files which might be of interest.
199FILE_KBUILD_HEADER := $(PATH_KBUILD)/header.kmk
200FILE_KBUILD_CONFIG := $(PATH_KBUILD)/config.kmk
201FILE_KBUILD_FOOTER := $(PATH_KBUILD)/footer.kmk
202
203SUFF_DEP := .dep
204MAKEFILE := $(firstword $(MAKEFILE_LIST))
205
206
207#
208# Check make version.
209#
210ifdef KMK_VERSION
211 ifneq ($(KBUILD_VERSION_MAJOR).$(KBUILD_VERSION_MINOR),0.1)
212 ifneq ($(KBUILD_VERSION_MAJOR),0)
213 $(warning kBuild: kmk major version mismatch, expected '0' found '$(KBUILD_VERSION_MAJOR)'!)
214 else
215 $(warning kBuild: kmk minor version mismatch, expected '1' found '$(KBUILD_VERSION_MINOR)'!)
216 endif
217 endif
218else
219 # Vanilla GNU Make. Only supported for kBuild bootstrapping. Disable some features to make it work.
220 NO_COMPILE_CMDS_DEPS:= 1
221 NO_LINK_CMDS_DEPS := 1
222 sinclude $(PATH_KBUILD)/StampOutPredefines.kmk
223 ifndef IS_BOOTSTRAPPING_KBUILD_NOW
224 $(warning kBuild: Using vanilla GNU make isn't safe for anything but kBuild bootstrapping!)
225 endif
226endif
227
228
229#
230# Build platform setup.
231#
232# OS/2
233ifeq ($(BUILD_PLATFORM),os2)
234EXEC_X86_WIN32 := innopec.exe
235HOSTSUFF_EXE := .exe
236endif
237
238# Linux
239ifeq ($(BUILD_PLATFORM),linux)
240EXEC_X86_WIN32 := wine
241HOSTSUFF_EXE :=
242endif
243
244# Win, Win32, Win64, NT.
245ifeq ($(filter-out win32 win64 win nt,$(BUILD_PLATFORM)),)
246EXEC_X86_WIN32 :=
247HOSTSUFF_EXE := .exe
248endif
249
250# FreeBSD
251ifeq ($(BUILD_PLATFORM),freebsd)
252EXEC_X86_WIN32 := wine
253HOSTSUFF_EXE :=
254endif
255
256# Darwin / Mac OS X
257ifeq ($(BUILD_PLATFORM),darwin)
258EXEC_X86_WIN32 := false
259HOSTSUFF_EXE :=
260endif
261
262ifndef PATH_KBUILD_BIN
263 PATH_KBUILD_BIN := $(PATH_KBUILD)/bin/$(BUILD_PLATFORM_ARCH).$(BUILD_PLATFORM)
264 ifeq ($(wildcard $(PATH_KBUILD_BIN)/kmk_ash$(HOSTSUFF_EXE)),)
265 ifeq ($(BUILD_TARGET_ARCH),amd64)
266 PATH_KBUILD_BIN := $(PATH_KBUILD)/bin/x86.$(BUILD_PLATFORM)
267 endif
268 ifeq ($(wildcard $(PATH_KBUILD_BIN)/kmk_ash$(HOSTSUFF_EXE)),)
269 ifeq ($(filter-out win64 win32 win nt ,$(BUILD_PLATFORM)),)
270 PATH_KBUILD_BIN := $(PATH_KBUILD)/bin/x86.win
271 endif
272 endif
273 ifeq ($(wildcard $(PATH_KBUILD_BIN)/kmk_ash$(HOSTSUFF_EXE)),)
274 # give up
275 PATH_KBUILD_BIN := $(PATH_KBUILD)/bin/$(BUILD_PLATFORM_ARCH).$(BUILD_PLATFORM)
276 endif
277 endif
278endif
279
280
281#
282# Build target setup.
283#
284ifeq ($(filter-out win32 win64 win nt os2,$(BUILD_TARGET)),)
285SUFF_OBJ := .obj
286SUFF_LIB := .lib
287SUFF_DLL := .dll
288SUFF_EXE := .exe
289SUFF_SYS := .sys
290SUFF_RES := .res
291endif
292ifeq ($(BUILD_TARGET),l4)
293SUFF_OBJ := .o
294SUFF_LIB := .a
295SUFF_DLL := .s.so
296SUFF_EXE :=
297SUFF_SYS := .a
298SUFF_RES :=
299endif
300ifeq ($(BUILD_TARGET),darwin)
301SUFF_OBJ := .o
302SUFF_LIB := .a
303SUFF_DLL := .dylib
304SUFF_EXE :=
305SUFF_SYS := .a
306SUFF_RES :=
307endif
308ifndef SUFF_OBJ
309SUFF_OBJ := .o
310SUFF_LIB := .a
311SUFF_DLL := .so
312SUFF_EXE :=
313SUFF_SYS := .a
314SUFF_RES :=
315endif
316
317#
318# Standard kBuild tools.
319#
320ifeq ($(MAKE),kmk)
321MAKE := $(PATH_KBUILD_BIN)/kmk$(HOSTSUFF_EXE)
322endif
323
324DEP_EXT := $(PATH_KBUILD_BIN)/kDep$(HOSTSUFF_EXE)
325ifeq ($(filter kDep,$(KMK_BUILTIN)),kDep)
326DEP := kmk_builtin_kDep
327else
328DEP := $(DEP_EXT)
329endif
330
331DEP_IDB_EXT := $(PATH_KBUILD_BIN)/kDepIDB$(HOSTSUFF_EXE)
332ifeq ($(filter kDepPre,$(KMK_BUILTIN)),kDepIDB)
333DEP_IDB := $(if kmk_builtin_kDepIDB
334else
335DEP_IDB := $(DEP_IDB_EXT)
336endif
337
338DEP_PRE_EXT := $(PATH_KBUILD_BIN)/kDepPre$(HOSTSUFF_EXE)
339ifeq ($(filter kDepPre,$(KMK_BUILTIN)),kDepPre)
340DEP_PRE := $(if kmk_builtin_kDepPre
341else
342DEP_PRE := $(DEP_PRE_EXT)
343endif
344
345APPEND_EXT := $(PATH_KBUILD_BIN)/kmk_append$(HOSTSUFF_EXE)
346ifeq ($(filter append,$(KMK_BUILTIN)),append)
347APPEND := kmk_builtin_append
348else
349APPEND := $(APPEND_EXT)
350endif
351
352CAT_EXT := $(PATH_KBUILD_BIN)/kmk_cat$(HOSTSUFF_EXE)
353ifeq ($(filter cat,$(KMK_BUILTIN)),cat)
354CAT := kmk_builtin_cat
355else
356CAT := $(CAT_EXT)
357endif
358
359CP_EXT := $(PATH_KBUILD_BIN)/kmk_cp$(HOSTSUFF_EXE)
360ifeq ($(filter cp,$(KMK_BUILTIN)),cp)
361CP := kmk_builtin_cp
362else
363CP := $(CP_EXT)
364endif
365
366ECHO_EXT := $(PATH_KBUILD_BIN)/kmk_echo$(HOSTSUFF_EXE)
367ifeq ($(filter echo,$(KMK_BUILTIN)),echo)
368ECHO := kmk_builtin_echo
369else
370ECHO := $(ECHO_EXT)
371endif
372
373INSTALL_EXT := $(PATH_KBUILD_BIN)/kmk_install$(HOSTSUFF_EXE)
374ifeq ($(filter install,$(KMK_BUILTIN)),install)
375INSTALL := kmk_builtin_install
376else
377INSTALL := $(INSTALL_EXT)
378endif
379
380LN_EXT := $(PATH_KBUILD_BIN)/kmk_ln$(HOSTSUFF_EXE)
381ifeq ($(filter ln,$(KMK_BUILTIN)),ln)
382LN := kmk_builtin_ln
383else
384LN := $(LN_EXT)
385endif
386
387MKDIR_EXT := $(PATH_KBUILD_BIN)/kmk_mkdir$(HOSTSUFF_EXE)
388ifeq ($(filter mkdir,$(KMK_BUILTIN)),mkdir)
389MKDIR := kmk_builtin_mkdir
390else
391MKDIR := $(MKDIR_EXT)
392endif
393
394MV_EXT := $(PATH_KBUILD_BIN)/kmk_mv$(HOSTSUFF_EXE)
395ifeq ($(filter mv,$(KMK_BUILTIN)),mv)
396MV := kmk_builtin_mv
397else
398MV := $(MV_EXT)
399endif
400
401RM_EXT := $(PATH_KBUILD_BIN)/kmk_rm$(HOSTSUFF_EXE)
402ifeq ($(filter rm,$(KMK_BUILTIN)),rm)
403RM := kmk_builtin_rm
404else
405RM := $(RM_EXT)
406endif
407
408RMDIR_EXT := $(PATH_KBUILD_BIN)/kmk_rmdir$(HOSTSUFF_EXE)
409ifeq ($(filter rmdir,$(KMK_BUILTIN)),rmdir)
410RMDIR := kmk_builtin_rmdir
411else
412RMDIR := $(RMDIR_EXT)
413endif
414
415SED_EXT := $(PATH_KBUILD_BIN)/kmk_sed$(HOSTSUFF_EXE)
416ifeq ($(filter sed,$(KMK_BUILTIN)),sed)
417SED := kmk_builtin_sed
418else
419SED := $(SED_EXT)
420endif
421
422# Our default shell is the Almquist shell from *BSD.
423ASH := $(PATH_KBUILD_BIN)/kmk_ash$(HOSTSUFF_EXE)
424MAKESHELL := $(ASH)
425SHELL := $(ASH)
426export SHELL MAKESHELL
427
428# Symlinking is problematic on some platforms...
429LN_SYMLINK := $(LN) -s
430
431
432
433#
434# Message macros.
435#
436
437ifndef BUILD_QUIET
438ifdef BUILD_DEBUG
439BUILD_VERBOSE := 9
440endif
441MSG_L1 = @$(ECHO) "kBuild: $1"
442ifdef BUILD_VERBOSE
443MSG_L2 = @$(ECHO) "kBuild: $1"
444QUIET :=
445else
446QUIET := @
447MSG_L2 =
448endif
449ifdef BUILD_DEBUG
450MSG_L3 = @$(ECHO) "kBuild: $1"
451else
452MSG_L3 =
453endif
454else
455QUIET :=
456MSG_L1 =
457MSG_L2 =
458MSG_L3 =
459endif
460
461## ABSPATH - make paths absolute.
462# This implementation is clumsy and doesn't resolve '..' and '.' components.
463#
464# @param $1 The paths to make absolute.
465ABSPATH = $(abspath $(1))
466
467## DIRDEP - make create directory dependencies.
468#
469# @param $1 The paths to the directories which must be created.
470DIRDEP = $(foreach path,$(patsubst %/,%,$(1)),$(path)/)
471
472
473## Cygwin kludge.
474# This converts /cygdrive/x/% to x:%.
475#
476# @param $1 The paths to make native.
477# @remark This macro is pretty much obsolete since we don't use cygwin base make.
478ifneq ($(patsubst /cygdrive/%,%,$(CURDIR)),$(CURDIR))
479CYGPATHMIXED = $(foreach path,$(1)\
480 ,$(if $(patsubst /cygdrive/%,,$(path)),$(path),$(patsubst $(strip $(firstword $(subst /, ,$(patsubst /cygdrive/%,%,$(path)))))/%,$(strip $(firstword $(subst /, ,$(patsubst /cygdrive/%,%,$(path))))):/%,$(patsubst /cygdrive/%,%,$(path)))))
481else
482CYGPATHMIXED = $(1)
483endif
484
485#
486# Initialize some of the globals which the Config.kmk and
487# others can add stuff to if they like for processing in the footer.
488#
489
490## ALL_TARGET
491# This is the list of all targets.
492ALL_TARGETS :=
493
494## TEMPLATE_PATHS
495# List a paths (separated by space) where templates can be found.
496TEMPLATE_PATHS :=
497
498## TOOL_PATHS
499# List of paths (separated by space) where tools can be found.
500TOOL_PATHS :=
501
502## SDK_PATHS
503# List of paths (separated by space) where SDKs can be found.
504SDK_PATHS :=
505
506## Proritized list of the default makefile when walking subdirectories.
507# The user can overload this list.
508DEFAULT_MAKEFILE := Makefile.kmk makefile.kmk Makefile makefile
509
510## PROPS_TOOLS
511# This is a subset of the other PROPS
512PROPS_TOOLS := TOOL CTOOL CXXTOOL ASTOOL RCTOOL ARTOOL LDTOOL FETCHTOOL UNPACKTOOL PATCHTOOL
513
514## PROPS_SINGLE
515# The list of non-accumulative target properties.
516# A Config.kmk file can add it's own properties to this list and kBuild
517# will do the necessary inheritance from templates to targets.
518PROPS_SINGLE := $(PROPS_TOOLS) INST NOINST BLD_TYPE BLD_TRG BLD_TRG_ARCH BLD_TRG_CPU FETCHDIR \
519 OBJSUFF COBJSUFF CXXOBJSUFF ASOBJSUFF RCOBJSUFF SYSSUFF EXESUFF DLLSUFF LIBSUFF ARLIBSUFF
520
521## PROPS_DEFERRED
522# This list of non-accumulative target properties which are functions,
523# and thus should not be expanded until the very last moment.
524PROPS_DEFERRED := INSTFUN INSTALLER
525
526## PROPS_ACCUMULATE_R
527# The list of accumulative target properties where the right most value/flag
528# is the 'most significant'.
529# A Config.kmk file can add it's own properties to this list and kBuild
530# will do the necessary inheritance from templates to targets.
531PROPS_ACCUMULATE_R := \
532 DEFS DEPS \
533 CFLAGS CDEFS \
534 CXXFLAGS CXXDEFS \
535 ASFLAGS ASDEFS \
536 RCFLAGS RCDEFS \
537 LDFLAGS \
538 FETCHFLAGS UNPACKFLAGS PATCHFLAGS
539
540## PROPS_ACCUMULATE
541# The list of accumulative target properties where the left most value/flag
542# is the 'most significant'.
543# A Config.kmk file can add it's own properties to this list and kBuild
544# will do the necessary inheritance from templates to targets.
545PROPS_ACCUMULATE_L := \
546 SDKS SOURCES \
547 INCS CINCS CXXINCX ASINCS RCINCS \
548 LIBS LIBPATH
549
550
551#
552# Pass configuration.
553#
554# The PASS_<passname>_trgs variable is listing the targets.
555# The PASS_<passname>_vars variable is listing the target variables.
556# The PASS_<passname>_pass variable is the lowercased passname.
557#
558
559## PASS: fetches
560# This pass fetches and unpacks things needed to complete the build.
561PASS_FETCHES := Fetches
562PASS_FETCHES_trgs :=
563PASS_FETCHES_vars := _FETCHES
564PASS_FETCHES_pass := fetches
565
566## PASS: patches
567# This pass applies patches.
568PASS_PATCHES := Patches
569PASS_PATCHES_trgs :=
570PASS_PATCHES_vars := _PATCHES
571PASS_PATCHES_pass := patches
572
573## PASS: bldprogs
574# This pass builds targets which are required for building the rest.
575PASS_BLDPROGS := Build Programs
576PASS_BLDPROGS_trgs :=
577PASS_BLDPROGS_vars := _BLDPROGS
578PASS_BLDPROGS_pass := bldprogs
579
580## PASS: libraries
581# This pass builds library targets.
582PASS_LIBRARIES := Libraries
583PASS_LIBRARIES_trgs :=
584PASS_LIBRARIES_vars := _LIBS _IMPORT_LIBS _OTHER_LIBRARIES
585PASS_LIBRARIES_pass := libraries
586
587## PASS: binaries
588# This pass builds dll targets.
589PASS_DLLS := DLLs
590PASS_DLLS_trgs :=
591PASS_DLLS_vars := _DLLS _OTHER_DLLS
592PASS_DLLS_pass := dlls
593
594## PASS: binaries
595# This pass builds binary targets, i.e. programs, system modules and stuff.
596PASS_BINARIES := Programs
597PASS_BINARIES_trgs :=
598PASS_BINARIES_vars := _PROGRAMS _SYSMODS _OTHER_BINARIES
599PASS_BINARIES_pass := binaries
600
601## PASS: others
602# This pass builds other targets.
603PASS_OTHERS := Other Stuff
604PASS_OTHERS_trgs :=
605PASS_OTHERS_vars := _OTHERS
606PASS_OTHERS_pass := others
607
608## PASS: install
609# This pass installs the built entities to a sandbox area.
610PASS_INSTALLS := Install
611PASS_INSTALLS_trgs :=
612PASS_INSTALLS_vars := _INSTALLS_DIRS _INSTALLS
613PASS_INSTALLS_pass := installs
614
615## PASS: packing
616# This pass processes custom packing rules.
617PASS_PACKING := Packing
618PASS_PACKING_trgs :=
619PASS_PACKING_vars := _PACKING
620PASS_PACKING_pass := packing
621#alias
622packing: pass_packing
623
624## PASS: clean
625# This pass removes all generated files.
626PASS_CLEAN := Clean
627PASS_CLEAN_trgs := do-clean
628PASS_CLEAN_vars :=
629PASS_CLEAN_pass := clean
630# alias
631clean: pass_clean
632
633## PASS: nothing
634# This pass just walks the tree.
635PASS_NOTHING := Nothing
636PASS_NOTHING_trgs := do-nothing
637PASS_NOTHING_vars :=
638PASS_NOTHING_pass := nothing
639# alias
640nothing: pass_nothing
641
642## DEFAULT_PASSES
643# The default passes and their order.
644DEFAULT_PASSES := BLDPROGS LIBRARIES DLLS BINARIES OTHERS INSTALLS
645
646## PASSES
647# The passes that should be defined. This must include
648# all passes mentioned by DEFAULT_PASSES.
649PASSES := FETCHES PATCHES $(DEFAULT_PASSES) NOTHING CLEAN
650
651
652#
653# This is how we find the closest config.kmk.
654# It's a little hacky but I think it works fine.
655#
656_CFGDIR := .
657_CFGFILES := ./Config.kmk ./config.kmk
658define def_include_config
659$(eval _CFGDIR := $(_CFGDIR)/$(dir))
660_CFGFILES += $(_CFGDIR)/Config.kmk $(_CFGDIR)/config.kmk
661endef
662# walk down the _RELATIVE_ path specified by DEPTH.
663$(foreach dir,$(subst /, ,$(DEPTH)), $(eval $(def_include_config)) )
664# add the default config file.
665_CFGFILE := $(firstword $(wildcard $(_CFGFILES) $(FILE_KBUILD_CONFIG)))
666_CFGFILES :=
667_CFGDIR :=
668ifeq ($(_CFGFILE),)
669$(error kBuild: no Config.kmk file found! Check the DEPTH: DEPTH='$(DEPTH)' PATH_CURRENT='$(PATH_CURRENT)')
670endif
671
672# Include the config.kmk we found file (or the default one).
673include $(_CFGFILE)
674
675
676# end-of-file-content
677__header_kmk__ := 1
678endif # __header_kmk__
679
Note: See TracBrowser for help on using the repository browser.