diff --git a/src/build/generators.jam b/src/build/generators.jam index e87d2ebb6..b2cab15ba 100644 --- a/src/build/generators.jam +++ b/src/build/generators.jam @@ -121,7 +121,15 @@ rule generator ( self.target-types += $(m[1]) ; self.name-pre-post.$(m[1]) = $(m[3]) $(m[4]) ; } + + # Note that 'transform' here, is the same as 'for_each'. + sequence.transform type.validate : $(self.source-types) ; + if $(self.target-types) != * + { + sequence.transform type.validate : $(self.target-types) ; + } + self.optional-properties = [ feature.expand $(self.target-types) ] ; @@ -478,7 +486,7 @@ rule generator ( class generator ; -rule composing-generator ( id : source-types + : target-types + : +rule composing-generator ( id : source-types * : target-types + : requirements * ) { generator.__init__ $(id) : $(source-types) : $(target-types) : diff --git a/src/build/type.jam b/src/build/type.jam index 31dd4ef60..5eaabaa44 100644 --- a/src/build/type.jam +++ b/src/build/type.jam @@ -109,6 +109,16 @@ rule registered ( type ) } } +# Issues an error if 'type' is unknown. +rule validate ( type ) +{ + if ! $(type) in $(.types) + { + errors.error "Unknown target type $(type)" ; + } +} + + # Sets a scanner class that will be used for this 'type'. rule set-scanner ( type : scanner ) { diff --git a/src/tools/builtin.jam b/src/tools/builtin.jam index 7f0d2a424..6db1996a4 100644 --- a/src/tools/builtin.jam +++ b/src/tools/builtin.jam @@ -291,7 +291,7 @@ type.register C : c ; # "shared" feature. rule lib-generator ( ) { - composing-generator.__init__ lib-generator : unknown-source-type : LIB : LIB ; + composing-generator.__init__ lib-generator : : LIB : LIB ; rule run ( project name ? : properties * : sources * ) {