2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-16 13:22:11 +00:00
Files
build/v2/tools/make.jam
Vladimir Prus 533abcaadd Bugfix: the main target rules did not work unless called from Jamfile.
The used 'CALLER_MODULE' to determine the project where the main target
is to be declared, which did not work if the rule is called from another
module.

Thanks to Zbynek Winkler for the bug report.

* build/project.jam (current): New rule
* test/wrapper.py: New test
* other files: Use 'project.current'.


[SVN r22569]
2004-03-31 06:53:56 +00:00

70 lines
2.2 KiB
Plaintext

# Copyright (C) Vladimir Prus 2002. Permission to copy, use, modify, sell and
# distribute this software is granted provided this copyright notice appears in
# all copies. This software is provided "as is" without express or implied
# warranty, and with no claim as to its suitability for any purpose.
# This module defines the 'make' main target rule.
import targets ;
import "class" : new ;
import property ;
import errors : error ;
import type : type ;
import regex ;
import property-set ;
import project ;
class make-target-class : basic-target
{
import type regex virtual-target ;
import "class" : new ;
rule __init__ ( name : project : sources * : requirements *
: make-rule + : default-build * )
{
basic-target.__init__ $(name) : $(project) : $(sources) : $(requirements)
: $(default-build) ;
self.make-rule = $(make-rule) ;
}
rule construct ( source-targets * : property-set )
{
local t = [ new file-target $(self.name:S=) : [ type.type $(self.name) ]
: $(self.project) ] ;
$(t).suffix [ regex.match .(.*) : $(self.name:S) ] ;
local a = [ new action $(t) : $(source-targets) : $(self.make-rule)
: $(property-set) ] ;
$(t).action $(a) ;
return [ virtual-target.register $(t) ] ;
}
}
# Declares the 'make' main target.
rule make ( target-name : sources * : generating-rule + : requirements *
: caller ? )
{
caller ?= [ project.current ] ;
local rules = [ RULENAMES $(caller) ] ;
if $(generating-rule[1]) in $(rules)
{
# This is local rule, make it global
local n = $(caller).$(generating-rule[1]) ;
IMPORT $(caller) : $(generating-rule[1]) : : $(n) ;
generating-rule = $(n) $(generating-rule[2-]) ;
}
targets.main-target-alternative
[ new make-target-class $(target-name) : $(caller)
: [ targets.main-target-sources $(sources) : $(target-name) ]
: [ targets.main-target-requirements $(requirements) : $(caller) ]
: $(generating-rule)
: [ targets.main-target-default-build : $(caller) ]
] ;
}
IMPORT $(__name__) : make : : make ;