2010-02-20 16:24:28 +03:00
# a waf tool to add autoconf-like macros to the configure section
2010-02-20 16:40:26 +03:00
# and for SAMBA_ macros for building libraries, binaries etc
2010-02-20 16:24:28 +03:00
2010-03-17 12:38:03 +03:00
import Build , os , Logs , sys , Configure , Options , string , Task , Utils , optparse
2010-02-20 16:24:28 +03:00
from Configure import conf
2010-03-17 12:21:47 +03:00
from Logs import debug
2010-02-24 09:38:54 +03:00
from TaskGen import extension
2010-02-20 16:24:28 +03:00
2010-02-26 14:21:50 +03:00
# bring in the other samba modules
from samba_utils import *
from samba_autoconf import *
2010-02-26 14:38:38 +03:00
from samba_patterns import *
2010-02-28 09:34:43 +03:00
from samba_pidl import *
2010-02-23 04:18:04 +03:00
2010-02-26 14:21:50 +03:00
LIB_PATH = " shared "
2010-02-23 04:18:04 +03:00
2010-03-17 12:21:47 +03:00
2010-03-17 12:32:15 +03:00
#################################################################
# create the samba build environment
2010-02-22 03:59:06 +03:00
@conf
def SAMBA_BUILD_ENV ( conf ) :
libpath = " %s / %s " % ( conf . blddir , LIB_PATH )
2010-03-17 12:21:47 +03:00
conf . env [ ' BUILD_DIRECTORY ' ] = conf . blddir
2010-02-22 03:59:06 +03:00
if not os . path . exists ( libpath ) :
os . mkdir ( libpath )
2010-03-17 12:32:15 +03:00
2010-03-17 12:26:03 +03:00
##############################################
# remove .. elements from a path list
def NORMPATH ( bld , ilist ) :
return " " . join ( [ os . path . normpath ( p ) for p in ilist . split ( " " ) ] )
Build . BuildContext . NORMPATH = NORMPATH
2010-02-21 05:56:32 +03:00
2010-03-17 12:26:03 +03:00
################################################################
# add an init_function to the list for a subsystem
def ADD_INIT_FUNCTION ( bld , subsystem , init_function ) :
if init_function is None :
return
bld . ASSERT ( subsystem is not None , " You must specify a subsystem for init_function ' %s ' " % init_function )
2010-02-23 11:23:18 +03:00
cache = LOCAL_CACHE ( bld , ' INIT_FUNCTIONS ' )
2010-02-23 04:18:04 +03:00
if not subsystem in cache :
cache [ subsystem ] = ' '
cache [ subsystem ] + = ' %s , ' % init_function
2010-03-17 12:26:03 +03:00
Build . BuildContext . ADD_INIT_FUNCTION = ADD_INIT_FUNCTION
2010-02-23 06:43:06 +03:00
################################################################
# recursively build the dependency list for a target
def FULL_DEPENDENCIES ( bld , cache , target , chain , path ) :
if not target in cache :
return { }
deps = cache [ target ] . copy ( )
for t in cache [ target ] :
bld . ASSERT ( t not in chain , " Circular dependency for %s : %s -> %s " % ( t , path , t ) ) ;
c2 = chain . copy ( )
c2 [ t ] = True
dict_concat ( deps , FULL_DEPENDENCIES ( bld , cache , t , c2 , " %s -> %s " % ( path , t ) ) )
return deps
############################################################
# check our build dependencies for circular dependencies
def CHECK_TARGET_DEPENDENCY ( bld , target ) :
2010-02-23 11:23:18 +03:00
cache = LOCAL_CACHE ( bld , ' LIB_DEPS ' )
2010-03-17 12:21:47 +03:00
return FULL_DEPENDENCIES ( bld , cache , target , { target : True } , target )
############################################################
# check that all dependencies have been declared
def CHECK_DEPENDENCIES ( bld ) :
cache = LOCAL_CACHE ( bld , ' LIB_DEPS ' )
target_cache = LOCAL_CACHE ( bld , ' TARGET_TYPE ' )
debug ( ' deps: Checking dependencies ' )
for t in cache :
deps = CHECK_TARGET_DEPENDENCY ( bld , t )
for d in deps :
#if not d in target_cache:
# print "Dependency '%s' of target '%s' not declared" % (d, t)
ASSERT ( bld , d in target_cache ,
" Dependency ' %s ' of target ' %s ' not declared " % ( d , t ) )
debug ( " deps: Dependencies checked for %u targets " % len ( target_cache ) )
Build . BuildContext . CHECK_DEPENDENCIES = CHECK_DEPENDENCIES
############################################################
# pre-declare a target as being of a particular type
def PREDECLARE ( bld , target , type ) :
cache = LOCAL_CACHE ( bld , ' PREDECLARED_TARGET ' )
target_cache = LOCAL_CACHE ( bld , ' TARGET_TYPE ' )
ASSERT ( bld , not target in target_cache , " Target ' %s ' is already declared " % target )
ASSERT ( bld , not target in cache , " Target ' %s ' already predeclared " % target )
cache [ target ] = type
Build . BuildContext . PREDECLARE = PREDECLARE
2010-02-23 06:43:06 +03:00
################################################################
# add to the dependency list. Return a new dependency list with
# any circular dependencies removed
2010-02-24 09:38:54 +03:00
# returns a tuple containing (systemdeps, localdeps, add_objects)
2010-02-23 06:43:06 +03:00
def ADD_DEPENDENCIES ( bld , name , deps ) :
2010-03-17 12:21:47 +03:00
debug ( ' deps: Calculating dependencies for %s ' % name )
2010-02-24 09:38:54 +03:00
lib_deps = LOCAL_CACHE ( bld , ' LIB_DEPS ' )
if not name in lib_deps :
lib_deps [ name ] = { }
2010-02-23 06:43:06 +03:00
list = deps . split ( )
list2 = [ ]
for d in list :
2010-02-24 09:38:54 +03:00
lib_deps [ name ] [ d ] = True ;
2010-02-23 06:43:06 +03:00
try :
CHECK_TARGET_DEPENDENCY ( bld , name )
list2 . append ( d )
except AssertionError :
2010-02-28 09:34:43 +03:00
sys . stderr . write ( " Removing dependency %s from target %s " % ( d , name ) )
2010-02-24 09:38:54 +03:00
del ( lib_deps [ name ] [ d ] )
2010-02-23 08:26:59 +03:00
# extract out the system dependencies
sysdeps = [ ]
localdeps = [ ]
2010-03-17 12:21:47 +03:00
add_objects = [ ]
cache = LOCAL_CACHE ( bld , ' EMPTY_TARGETS ' )
target_cache = LOCAL_CACHE ( bld , ' TARGET_TYPE ' )
predeclare = LOCAL_CACHE ( bld , ' PREDECLARED_TARGET ' )
2010-02-23 08:26:59 +03:00
for d in list2 :
2010-02-24 09:38:54 +03:00
recurse = False
2010-02-23 08:48:38 +03:00
# strip out any dependencies on empty libraries
if d in cache :
2010-03-17 12:21:47 +03:00
debug ( " deps: Removing empty dependency ' %s ' from ' %s ' " % ( d , name ) )
2010-02-23 08:48:38 +03:00
continue
2010-03-17 12:21:47 +03:00
type = None
if d in target_cache :
type = target_cache [ d ]
elif d in predeclare :
type = predeclare [ d ]
2010-02-23 08:26:59 +03:00
else :
2010-03-17 12:21:47 +03:00
type = ' SUBSYSTEM '
LOCAL_CACHE_SET ( bld , ' ASSUMED_TARGET ' , d , type )
if type == ' SYSLIB ' :
sysdeps . append ( d )
elif type == ' LIBRARY ' :
2010-02-23 08:26:59 +03:00
localdeps . append ( d )
2010-03-17 12:21:47 +03:00
elif type == ' SUBSYSTEM ' :
add_objects . append ( d )
2010-02-24 09:38:54 +03:00
recurse = True
2010-03-17 12:21:47 +03:00
elif type == ' MODULE ' :
add_objects . append ( d )
2010-02-24 09:38:54 +03:00
recurse = True
2010-03-17 12:21:47 +03:00
elif type == ' PYTHON ' :
pass
elif type == ' ASN1 ' :
pass
2010-02-24 09:38:54 +03:00
elif type == ' BINARY ' :
pass
2010-03-17 12:21:47 +03:00
else :
ASSERT ( bld , False , " Unknown target type ' %s ' for dependency %s " % (
type , d ) )
2010-02-24 09:38:54 +03:00
# for some types we have to build the list recursively
if recurse and ( d in lib_deps ) :
rec_deps = ' ' . join ( lib_deps [ d ] . keys ( ) )
( rec_sysdeps , rec_localdeps , rec_add_objects ) = ADD_DEPENDENCIES ( bld , d , rec_deps )
sysdeps . extend ( rec_sysdeps . split ( ) )
localdeps . extend ( rec_localdeps . split ( ) )
add_objects . extend ( rec_add_objects . split ( ) )
2010-03-17 12:21:47 +03:00
debug ( ' deps: Dependencies for %s : sysdeps: %u localdeps: %u add_objects= %u ' % (
name , len ( sysdeps ) , len ( localdeps ) , len ( add_objects ) ) )
return ( ' ' . join ( sysdeps ) , ' ' . join ( localdeps ) , ' ' . join ( add_objects ) )
2010-02-23 06:43:06 +03:00
2010-03-17 12:26:03 +03:00
2010-02-20 16:24:28 +03:00
#################################################################
# return a include list for a set of library dependencies
2010-03-17 12:26:03 +03:00
def SAMBA_LIBRARY_INCLUDE_LIST ( bld , deps ) :
2010-02-20 16:24:28 +03:00
ret = bld . curdir + ' '
2010-02-23 11:23:18 +03:00
cache = LOCAL_CACHE ( bld , ' INCLUDE_LIST ' )
2010-03-17 12:26:03 +03:00
for l in deps . split ( ) :
2010-02-23 04:18:04 +03:00
if l in cache :
ret = ret + cache [ l ] + ' '
2010-02-20 16:24:28 +03:00
return ret
Build . BuildContext . SAMBA_LIBRARY_INCLUDE_LIST = SAMBA_LIBRARY_INCLUDE_LIST
#################################################################
# define a Samba library
2010-03-17 12:31:46 +03:00
def SAMBA_LIBRARY ( bld , libname , source_list ,
2010-02-23 00:04:00 +03:00
deps = ' ' ,
public_deps = ' ' ,
include_list = ' . ' ,
2010-02-23 03:17:06 +03:00
public_headers = None ,
2010-02-23 00:04:00 +03:00
vnum = None ,
2010-02-24 09:38:12 +03:00
cflags = ' ' ,
2010-02-26 14:25:31 +03:00
output_type = None ,
realname = None ,
2010-02-23 00:56:35 +03:00
autoproto = None ) :
2010-03-17 12:21:47 +03:00
if not SET_TARGET_TYPE ( bld , libname , ' LIBRARY ' ) :
return
2010-02-23 06:43:06 +03:00
2010-02-23 08:48:38 +03:00
# remember empty libraries, so we can strip the dependencies
if ( source_list == ' ' ) or ( source_list == [ ] ) :
2010-03-17 12:21:47 +03:00
LOCAL_CACHE_SET ( bld , ' EMPTY_TARGETS ' , libname , True )
2010-02-23 08:48:38 +03:00
return
2010-03-17 12:21:47 +03:00
( sysdeps , localdeps , add_objects ) = ADD_DEPENDENCIES ( bld , libname , deps )
2010-02-23 06:43:06 +03:00
2010-03-17 12:26:03 +03:00
ilist = bld . SAMBA_LIBRARY_INCLUDE_LIST ( deps ) + bld . SUBDIR ( bld . curdir , include_list )
ilist = bld . NORMPATH ( ilist )
2010-02-24 09:39:23 +03:00
bld . SET_BUILD_GROUP ( ' main ' )
2010-02-20 16:24:28 +03:00
bld (
features = ' cc cshlib ' ,
source = source_list ,
target = libname ,
2010-02-23 11:04:40 +03:00
uselib_local = localdeps ,
2010-02-23 08:26:59 +03:00
uselib = sysdeps ,
2010-03-17 12:21:47 +03:00
add_objects = add_objects ,
2010-02-24 09:39:23 +03:00
ccflags = CURRENT_CFLAGS ( bld , cflags ) ,
2010-03-17 12:21:47 +03:00
includes = ' . ' + bld . env [ ' BUILD_DIRECTORY ' ] + ' /default ' + ilist ,
2010-03-17 12:31:46 +03:00
vnum = vnum )
2010-03-17 12:32:15 +03:00
2010-02-22 03:59:06 +03:00
# put a link to the library in bin/shared
2010-03-17 12:32:15 +03:00
soext = " "
if vnum is not None :
soext = ' . ' + vnum . split ( ' . ' ) [ 0 ]
2010-02-24 09:39:23 +03:00
bld . SET_BUILD_GROUP ( ' final ' )
2010-03-17 12:32:15 +03:00
bld (
source = ' lib %s .so ' % libname ,
2010-03-17 12:21:47 +03:00
rule = ' ln -sf ../$ {SRC} %s %s /lib %s .so %s ' %
2010-02-22 03:59:06 +03:00
( soext , LIB_PATH , libname , soext ) ,
2010-03-17 12:21:47 +03:00
shell = True ,
after = ' cc_link ' ,
2010-03-17 12:32:15 +03:00
)
2010-03-17 12:21:47 +03:00
LOCAL_CACHE_SET ( bld , ' INCLUDE_LIST ' , libname , ilist )
2010-02-23 05:04:34 +03:00
2010-02-20 16:24:28 +03:00
Build . BuildContext . SAMBA_LIBRARY = SAMBA_LIBRARY
2010-03-17 12:26:03 +03:00
2010-02-20 16:24:28 +03:00
#################################################################
# define a Samba binary
2010-02-23 00:04:00 +03:00
def SAMBA_BINARY ( bld , binname , source_list ,
deps = ' ' ,
include_list = ' ' ,
2010-02-23 03:17:06 +03:00
public_headers = None ,
2010-02-23 00:04:00 +03:00
modules = None ,
installdir = None ,
ldflags = None ,
2010-02-24 09:39:23 +03:00
cflags = ' ' ,
2010-02-23 01:04:44 +03:00
autoproto = None ,
2010-02-23 08:26:59 +03:00
use_hostcc = None ,
compiler = None ,
2010-02-24 09:39:23 +03:00
group = ' main ' ,
2010-02-23 01:04:44 +03:00
manpages = None ) :
2010-03-17 12:21:47 +03:00
ilist = ' . ' + bld . env [ ' BUILD_DIRECTORY ' ] + ' /default ' + bld . SAMBA_LIBRARY_INCLUDE_LIST ( deps ) + ' ' + include_list
2010-03-17 12:26:03 +03:00
ilist = bld . NORMPATH ( ilist )
2010-03-17 12:21:47 +03:00
if not SET_TARGET_TYPE ( bld , binname , ' BINARY ' ) :
return
2010-02-23 11:04:40 +03:00
2010-03-17 12:21:47 +03:00
( sysdeps , localdeps , add_objects ) = ADD_DEPENDENCIES ( bld , binname , deps )
2010-02-23 05:04:34 +03:00
2010-02-23 11:23:18 +03:00
cache = LOCAL_CACHE ( bld , ' INIT_FUNCTIONS ' )
2010-03-17 12:26:03 +03:00
if modules is not None :
for m in modules . split ( ) :
2010-02-23 04:18:04 +03:00
bld . ASSERT ( m in cache ,
2010-03-17 12:26:03 +03:00
" No init_function defined for module ' %s ' in binary ' %s ' " % ( m , binname ) )
2010-02-24 09:39:23 +03:00
cflags + = ' -DSTATIC_ %s _MODULES= " %s " ' % ( m , cache [ m ] )
2010-03-17 12:26:03 +03:00
2010-02-24 09:39:23 +03:00
bld . SET_BUILD_GROUP ( group )
2010-02-20 16:24:28 +03:00
bld (
features = ' cc cprogram ' ,
source = source_list ,
target = binname ,
2010-02-23 11:04:40 +03:00
uselib_local = localdeps ,
2010-02-23 08:26:59 +03:00
uselib = sysdeps ,
2010-03-17 12:26:03 +03:00
includes = ilist ,
2010-02-24 09:39:23 +03:00
ccflags = CURRENT_CFLAGS ( bld , cflags ) ,
2010-03-17 12:21:47 +03:00
add_objects = add_objects ,
2010-03-17 12:32:15 +03:00
top = True )
# put a link to the binary in bin/
2010-03-17 12:21:47 +03:00
if not Options . is_install :
bld (
source = binname ,
rule = ' rm -f %s && cp $ {SRC} . ' % ( binname ) ,
shell = True ,
after = ' cc_link '
)
2010-02-20 16:24:28 +03:00
Build . BuildContext . SAMBA_BINARY = SAMBA_BINARY
2010-03-17 12:26:03 +03:00
2010-02-23 00:04:00 +03:00
#################################################################
# define a Samba python module
def SAMBA_PYTHON ( bld , name , source_list ,
deps = ' ' ,
public_deps = ' ' ,
realname = ' ' ) :
2010-02-23 05:04:34 +03:00
2010-03-17 12:21:47 +03:00
if not SET_TARGET_TYPE ( bld , name , ' PYTHON ' ) :
return
2010-02-23 06:43:06 +03:00
2010-03-17 12:21:47 +03:00
( sysdeps , localdeps , add_objects ) = ADD_DEPENDENCIES ( bld , name , deps )
2010-02-23 05:04:34 +03:00
2010-02-23 00:04:00 +03:00
return
Build . BuildContext . SAMBA_PYTHON = SAMBA_PYTHON
2010-03-17 12:21:47 +03:00
2010-02-23 11:04:40 +03:00
#################################################################
# define a Samba ASN1 target
def SAMBA_ASN1 ( bld , name , source ,
options = ' ' ,
directory = ' ' ) :
2010-03-17 12:21:47 +03:00
if not SET_TARGET_TYPE ( bld , name , ' ASN1 ' ) :
return
2010-03-17 12:38:03 +03:00
bld . SET_BUILD_GROUP ( ' build_source ' )
2010-02-23 11:04:40 +03:00
bld (
2010-03-17 12:38:03 +03:00
features = ' cc ' ,
source = source ,
target = name ,
asn1options = options ,
asn1directory = directory
2010-02-24 09:39:23 +03:00
)
2010-02-23 11:04:40 +03:00
Build . BuildContext . SAMBA_ASN1 = SAMBA_ASN1
2010-03-17 12:38:03 +03:00
2010-02-23 11:04:40 +03:00
#################################################################
2010-03-17 12:38:03 +03:00
# define a Samba ET target
2010-02-23 11:04:40 +03:00
def SAMBA_ERRTABLE ( bld , name , source ,
2010-03-17 12:38:03 +03:00
options = ' ' ,
directory = ' ' ) :
if not SET_TARGET_TYPE ( bld , name , ' ET ' ) :
2010-03-17 12:21:47 +03:00
return
2010-03-17 12:38:03 +03:00
bld . SET_BUILD_GROUP ( ' build_source ' )
2010-02-23 11:04:40 +03:00
bld (
2010-03-17 12:38:03 +03:00
features = ' cc ' ,
source = source ,
target = name
)
2010-02-23 11:04:40 +03:00
Build . BuildContext . SAMBA_ERRTABLE = SAMBA_ERRTABLE
2010-03-17 12:21:47 +03:00
#################################################################
# define a set of Samba PIDL targets
2010-02-26 14:48:55 +03:00
def SAMBA_PIDL_LIST ( bld , directory , source_list , options = ' ' ) :
2010-03-17 12:21:47 +03:00
for p in source_list . split ( ) :
2010-02-26 14:48:55 +03:00
bld . SAMBA_PIDL ( directory , p , options )
2010-03-17 12:21:47 +03:00
Build . BuildContext . SAMBA_PIDL_LIST = SAMBA_PIDL_LIST
2010-03-17 12:26:03 +03:00
################################################################
# build a C prototype file automatically
def AUTOPROTO ( bld , header , source_list ) :
if header is not None :
2010-02-24 09:39:23 +03:00
bld . SET_BUILD_GROUP ( ' prototypes ' )
2010-03-17 12:26:03 +03:00
bld (
source = source_list ,
target = header ,
rule = ' ../script/mkproto.pl --srcdir=.. --builddir=. --public=/dev/null --private=$ {TGT} $ {SRC} '
)
Build . BuildContext . AUTOPROTO = AUTOPROTO
#################################################################
# define a Samba module.
def SAMBA_MODULE ( bld , modname , source_list ,
2010-02-23 00:04:00 +03:00
deps = ' ' ,
include_list = ' . ' ,
2010-03-17 12:26:03 +03:00
subsystem = None ,
init_function = None ,
2010-02-23 00:04:00 +03:00
autoproto = None ,
aliases = None ,
2010-02-24 09:39:23 +03:00
cflags = ' ' ,
2010-02-23 00:04:00 +03:00
output_type = None ) :
2010-03-17 12:21:47 +03:00
if not SET_TARGET_TYPE ( bld , modname , ' MODULE ' ) :
return
# remember empty modules, so we can strip the dependencies
if ( source_list == ' ' ) or ( source_list == [ ] ) :
LOCAL_CACHE_SET ( bld , ' EMPTY_TARGETS ' , modname , True )
return
( sysdeps , localdeps , add_objects ) = ADD_DEPENDENCIES ( bld , modname , deps )
ilist = bld . SAMBA_LIBRARY_INCLUDE_LIST ( deps ) + bld . SUBDIR ( bld . curdir , include_list )
ilist = bld . NORMPATH ( ilist )
2010-02-24 09:39:23 +03:00
bld . SET_BUILD_GROUP ( ' main ' )
2010-03-17 12:21:47 +03:00
bld (
features = ' cc ' ,
source = source_list ,
target = modname ,
2010-02-24 09:39:23 +03:00
ccflags = CURRENT_CFLAGS ( bld , cflags ) ,
2010-03-17 12:21:47 +03:00
includes = ' . ' + bld . env [ ' BUILD_DIRECTORY ' ] + ' /default ' + ilist )
2010-03-17 12:26:03 +03:00
Build . BuildContext . SAMBA_MODULE = SAMBA_MODULE
2010-03-17 12:21:47 +03:00
2010-03-17 12:26:03 +03:00
#################################################################
# define a Samba subsystem
def SAMBA_SUBSYSTEM ( bld , modname , source_list ,
2010-02-23 00:04:00 +03:00
deps = ' ' ,
public_deps = ' ' ,
include_list = ' . ' ,
2010-02-23 03:17:06 +03:00
public_headers = None ,
2010-02-23 00:04:00 +03:00
autoproto = None ,
2010-02-24 09:38:12 +03:00
cflags = ' ' ,
group = ' main ' ,
config_option = None ,
2010-02-23 00:04:00 +03:00
init_function_sentinal = None ) :
2010-03-17 12:21:47 +03:00
if not SET_TARGET_TYPE ( bld , modname , ' SUBSYSTEM ' ) :
return
2010-02-24 09:38:12 +03:00
# if the caller specifies a config_option, then we create a blank
# subsystem if that configuration option was found at configure time
if ( config_option is not None ) and bld . CONFIG_SET ( config_option ) :
source_list = ' '
2010-03-17 12:21:47 +03:00
# remember empty subsystems, so we can strip the dependencies
if ( source_list == ' ' ) or ( source_list == [ ] ) :
LOCAL_CACHE_SET ( bld , ' EMPTY_TARGETS ' , modname , True )
return
( sysdeps , localdeps , add_objects ) = ADD_DEPENDENCIES ( bld , modname , deps )
ilist = bld . SAMBA_LIBRARY_INCLUDE_LIST ( deps ) + bld . SUBDIR ( bld . curdir , include_list )
ilist = bld . NORMPATH ( ilist )
2010-02-24 09:39:23 +03:00
bld . SET_BUILD_GROUP ( group )
2010-03-17 12:21:47 +03:00
bld (
features = ' cc ' ,
source = source_list ,
target = modname ,
2010-02-24 09:39:23 +03:00
ccflags = CURRENT_CFLAGS ( bld , cflags ) ,
2010-03-17 12:21:47 +03:00
includes = ' . ' + bld . env [ ' BUILD_DIRECTORY ' ] + ' /default ' + ilist )
2010-03-17 12:26:03 +03:00
Build . BuildContext . SAMBA_SUBSYSTEM = SAMBA_SUBSYSTEM
2010-02-23 03:16:44 +03:00
###############################################################
# add a new set of build rules from a subdirectory
2010-02-23 03:55:28 +03:00
# the @runonce decorator ensures we don't end up
# with duplicate rules
2010-02-23 03:16:44 +03:00
def BUILD_SUBDIR ( bld , dir ) :
2010-03-17 12:21:47 +03:00
path = os . path . normpath ( bld . curdir + ' / ' + dir )
cache = LOCAL_CACHE ( bld , ' SUBDIR_LIST ' )
if path in cache : return
cache [ path ] = True
debug ( " build: Processing subdirectory %s " % dir )
2010-02-23 03:16:44 +03:00
bld . add_subdirs ( dir )
2010-03-17 12:21:47 +03:00
2010-02-23 03:16:44 +03:00
Build . BuildContext . BUILD_SUBDIR = BUILD_SUBDIR
2010-03-17 12:38:03 +03:00
##########################################################
# add a new top level command to waf
def ADD_COMMAND ( opt , name , function ) :
Utils . g_module . __dict__ [ name ] = function
opt . name = function
Options . Handler . ADD_COMMAND = ADD_COMMAND
2010-02-24 09:39:23 +03:00
###########################################################
# setup build groups used to ensure that the different build
# phases happen consecutively
@runonce
def SETUP_BUILD_GROUPS ( bld ) :
bld . env [ ' USING_BUILD_GROUPS ' ] = True
bld . add_group ( ' setup ' )
bld . add_group ( ' build_compilers ' )
bld . add_group ( ' build_source ' )
bld . add_group ( ' prototypes ' )
bld . add_group ( ' main ' )
bld . add_group ( ' final ' )
Build . BuildContext . SETUP_BUILD_GROUPS = SETUP_BUILD_GROUPS
###########################################################
# set the current build group
def SET_BUILD_GROUP ( bld , group ) :
if not ' USING_BUILD_GROUPS ' in bld . env :
return
bld . set_group ( group )
Build . BuildContext . SET_BUILD_GROUP = SET_BUILD_GROUP
2010-03-17 12:38:03 +03:00