bullet3/mk/jam/bisonflex.jam

166 lines
5.1 KiB
Plaintext
Raw Normal View History

#============================================================================
# Rules for flex and bison
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library 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 Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.FLEX)
{
# Some versions of Flex-generated files want to include <unistd.h> which is
# not normally available on Windows, so we need to protect it. We also
# filter out CVS `Header' keywords in order to prevent CVS from thinking that
# the file has changed simply because the Header information is different.
FLEX.SED_SCRIPT =
"'s/\\([ ]*#[ ]*include[ ][ ]*<unistd.h>\\)/#ifndef WIN32\\
\\1\\
#endif/;/\$Header:/d'" ;
# Compilers such as MSVC do not like #line directives. Since the generated
# file might get stored in CVS and used by MSVC users (even if generated on
# Unix, for instance), we want to suppress #line directives in all cases.
FLEX.FLAGS += -L ;
rule FlexRule
{
local object ;
local cfile = [ DoObjectGrist $(<:S=.c) ] ;
MakeLocate $(cfile) : $(LOCATE_TARGET) ;
SEARCH on $(cfile) = $(LOCATE_TARGET) ;
Flex $(cfile) : $(<) ;
object = [ CompileObjects $(cfile) : $(>) ] ;
return $(object) ;
}
RegisterFileType FlexRule : .l ;
rule Flex++Rule
{
local object ;
local cppfile = [ DoObjectGrist $(<:S=.cpp) ] ;
MakeLocate $(cppfile) : $(LOCATE_TARGET) ;
SEARCH on $(cppfile) = $(LOCATE_TARGET) ;
Flex $(cppfile) : $(<) ;
object = [ CompileObjects $(cppfile) : $(>) ] ;
return $(object) ;
}
RegisterFileType Flex++Rule : .ll ;
rule Flex
{
Depends $(<) : $(>) ;
FLEX.FLAGS on $(<) += $(FLEX.FLAGS) ;
}
# Use -t and output redirection to avoid flex choosing undesirable names for
# its output files. Also apply FLEX.SED_SCRIPT.
actions Flex
{
$(CMD.FLEX) -t $(FLEX.FLAGS) $(>) | $(SED) $(FLEX.SED_SCRIPT) > $(<)
}
}
if $(CMD.BISON)
{
rule BisonRule
{
local object ;
local cfile = [ DoObjectGrist $(<:S=.c) ] ;
local headerfile = [ DoObjectGrist $(<:S=.h) ] ;
# Jam's header file scannning doesn't use grist so we have to workaround
# this here.
Includes $(headerfile:G=$(SOURCE_GRIST:E)!$(SUBVARIANT:J=!)) : $(headerfile) ;
MakeLocate $(cfile) $(headerfile) : $(LOCATE_TARGET) ;
BISON.FLAGS on $(cfile) =
[ on [ DoSourceGrist $(<:S=.c) ] GetVar BISON.FLAGS ] ;
Bison $(cfile) : $(<) ;
# Work around for jam warning about independant target when we put both
# headerfile and cppfile in the bison line...
Includes $(cppfile) : $(headerfile) ;
object = [ CompileObjects $(cfile) : $(>) ] ;
SEARCH on $(cfile) = $(LOCATE_TARGET) ;
SEARCH on $(headerfile) = $(LOCATE_TARGET) ;
return $(object) ;
}
RegisterFileType BisonRule : .y ;
rule Bison++Rule
{
local object ;
local cppfile = [ DoObjectGrist $(<:S=.cpp) ] ;
local headerfile = [ DoObjectGrist $(<:S=.hpp) ] ;
# Jam's header file scannning doesn't use grist so we have to workaround
# this here.
Includes $(headerfile:G=$(SOURCE_GRIST:E)!$(SUBVARIANT:J=!)) : $(headerfile) ;
MakeLocate $(cppfile) : $(LOCATE_TARGET) ;
MakeLocate $(headerfile) : $(LOCATE_TARGET) ;
BISON.FLAGS on $(cppfile) =
[ on [ DoSourceGrist $(<:S=.cpp) ] GetVar BISON.FLAGS ] ;
Bison $(cppfile) : $(<) ;
# Work around for jam warning about independant target when we put both
# headerfile and cppfile in the bison line...
Includes $(cppfile) : $(headerfile) ;
object = [ CompileObjects $(cppfile) : $(>) ] ;
SEARCH on $(cppfile) = $(LOCATE_TARGET) ;
SEARCH on $(headerfile) = $(LOCATE_TARGET) ;
return $(object) ;
}
RegisterFileType Bison++Rule : .yy ;
rule Bison
{
Depends $(<) : $(>) ;
BISON.FLAGS on $(<) += $(BISON.FLAGS) ;
}
rule BisonFlags
{
local target ;
if $(<:S) = .yy
{
target = [ DoSourceGrist $(<:S=.cpp) $(<:S=.hpp) ] ;
}
else
{
target = [ DoSourceGrist $(<:S=.c) $(<:S=.h) ] ;
}
BISON.FLAGS on $(target) += $(>) ;
}
# Compilers such as MSVC do not like #line directives. Since the generated
# file might get stored in CVS and used by MSVC users (even if generated on
# Unix, for instance), we want to suppress #line directives in all cases.
BISON.FLAGS += --no-lines ;
actions Bison
{
$(CMD.BISON) -d $(BISON.FLAGS) -o $(<[1]) $(>)
}
}