diff options
| -rw-r--r-- | Jamrules.jam | 831 | 
1 files changed, 430 insertions, 401 deletions
| diff --git a/Jamrules.jam b/Jamrules.jam index d4109d3..54806a6 100644 --- a/Jamrules.jam +++ b/Jamrules.jam @@ -1,401 +1,430 @@ -# Rules for Jamfile.jam
 -
 -if ( $(toolset:I=^mingw) )
 -{
 -	CCFLAGS += -D$(defines) ;
 -
 -	if ( $(configuration) = "debug" )
 -	{
 -		CCFLAGS += -D_DEBUG ;
 -	}
 -	else
 -	{
 -		CCFLAGS += -DNDEBUG -O3 ;
 -	}
 -
 -	if ( PUGIXML_NO_EXCEPTIONS in $(defines) )
 -	{
 -		CCFLAGS += -fno-exceptions ;
 -	}
 -
 -	actions ObjectAction
 -	{
 -		"%$(toolset)_PATH%\bin\gcc" -W -Wall -Wextra -Werror -pedantic -c $(>) -o $(<) $(CCFLAGS)
 -	}
 -	
 -	actions LibraryAction
 -	{
 -		"%$(toolset)_PATH%\bin\ar" rc $(<) $(>)
 -	}
 -	
 -	actions LinkAction
 -	{
 -		"%$(toolset)_PATH%\bin\g++" $(>) -o $(<) -static-libgcc $(LDFLAGS) 
 -	}
 -	
 -	actions CoverageAction
 -	{
 -		"%$(toolset)_PATH%\bin\gcov" $(>:\\) $(GCOVFLAGS) | perl tests/gcov-filter.pl
 -	}
 -}
 -else if ( $(toolset:I=^msvc) )
 -{
 -	CCFLAGS += /D$(defines) ;
 -
 -	if ( $(configuration) = "debug" )
 -	{
 -		CCFLAGS += /D_DEBUG /MTd ;
 -	}
 -	else
 -	{
 -		CCFLAGS += /DNDEBUG /Ox /MT ;
 -	}
 -
 -	if ( $(toolset) != msvc6 )
 -	{
 -		CCFLAGS += /Wp64 /W4 ;
 -	}
 -	else
 -	{
 -		CCFLAGS += /W3 ; # lots of warnings at W4 in standard library
 -	}
 -
 -	if ( ! ( PUGIXML_NO_EXCEPTIONS in $(defines) ) )
 -	{
 -		CCFLAGS += /EHsc ;
 -	}
 -	else if ( $(toolset) = "msvc6" || $(toolset) = "msvc71" )
 -	{
 -		# No no-exception STL in MSVC6, buggy no-exception STL in MSVC71
 -		CCFLAGS += /EHsc ;
 -	}
 -	else
 -	{
 -		CCFLAGS += /D_HAS_EXCEPTIONS=0 ;
 -	}
 -
 -	if ( $(toolset:I=x64$) )
 -	{
 -		postfix = "\\amd64" ;
 -		sdk_postfix = "\\x64" ;
 -		LDFLAGS += /MACHINE:X64 ;
 -	}
 -	else
 -	{
 -		postfix = "" ;
 -		sdk_postfix = "" ;
 -	}
 -
 -	actions ObjectAction
 -	{
 -		"%$(toolset)_PATH%\bin$(postfix)\cl.exe" /WX /I"%$(toolset)_PATH%\include" /c $(>) /Fo$(<) /nologo $(CCFLAGS)
 -	}
 -	
 -	actions LibraryAction
 -	{
 -		"%$(toolset)_PATH%\bin$(postfix)\lib.exe" /NOLOGO /OUT:$(<) $(>)
 -	}
 -	
 -	actions LinkAction
 -	{
 -		"%$(toolset)_PATH%\bin$(postfix)\link.exe" /SUBSYSTEM:CONSOLE /NOLOGO /OUT:$(<) $(>) /LIBPATH:"%$(toolset)_PATH%\lib$(postfix)" /LIBPATH:"%$(toolset)_PATH%\PlatformSDK\lib" /LIBPATH:"%WINSDK_PATH%\Lib$(sdk_postfix)" $(LDFLAGS)
 -	}
 -	
 -	actions CoverageAction
 -	{
 -	}
 -}
 -else if ( $(toolset) = "ic8" )
 -{
 -	msvc = "msvc7" ;
 -
 -	CCFLAGS += /D$(defines) ;
 -
 -	if ( $(configuration) = "debug" )
 -	{
 -		CCFLAGS += /D_DEBUG /MTd ;
 -	}
 -	else
 -	{
 -		CCFLAGS += /DNDEBUG /Ox /MT ;
 -	}
 -
 -	if ( ! ( PUGIXML_NO_EXCEPTIONS in $(defines) ) )
 -	{
 -		CCFLAGS += /EHsc ;
 -	}
 -
 -	actions ObjectAction
 -	{
 -		"%$(toolset)_PATH%\bin\icl.exe" /W4 /WX /Wport /Qwd981,444,280,383,909,304,167,177 /I"%$(msvc)_PATH%\include" /I"%$(toolset)_PATH%\include" /c $(>) /Fo$(<) /nologo $(CCFLAGS)
 -	}
 -	
 -	actions LibraryAction
 -	{
 -		"%$(msvc)_PATH%\bin\lib.exe" /NOLOGO /OUT:$(<) $(>)
 -	}
 -	
 -	actions LinkAction
 -	{
 -		"%$(msvc)_PATH%\bin\link.exe" /SUBSYSTEM:CONSOLE /NOLOGO /OUT:$(<) $(>) /LIBPATH:"%$(toolset)_PATH%\lib" /LIBPATH:"%$(msvc)_PATH%\lib" /LIBPATH:"%$(msvc)_PATH%\PlatformSDK\lib" $(LDFLAGS)
 -	}
 -	
 -	actions CoverageAction
 -	{
 -	}
 -}
 -else if ( $(toolset:I=^dmc) )
 -{
 -	CCFLAGS += -D$(defines) ;
 -
 -	if ( $(configuration) = "debug" )
 -	{
 -		CCFLAGS += -D_DEBUG ;
 -	}
 -	else
 -	{
 -		CCFLAGS += -DNDEBUG ;
 -	}
 -
 -	if ( ! ( PUGIXML_NO_EXCEPTIONS in $(defines) ) )
 -	{
 -		CCFLAGS += -Ae ;
 -	}
 -
 -	actions ObjectAction
 -	{
 -		"%$(toolset)_PATH%\bin\dmc.exe" -c -f -I%$(toolset)_PATH%\stlport\stlport -wx $(>) -o$(<) $(CCFLAGS)
 -	}
 -	
 -	actions LibraryAction
 -	{
 -		"%$(toolset)_PATH%\bin\lib.exe" -c $(<) $(>)
 -	}
 -	
 -	actions LinkAction
 -	{
 -		"%$(toolset)_PATH%\bin\link.exe" $(>:\\) , $(<:\\) , nul , $(LDFLAGS:\\)
 -	}
 -	
 -	actions CoverageAction
 -	{
 -	}
 -}
 -else if ( $(toolset:I=^cw) )
 -{
 -	cw_bin = "%$(toolset)_PATH%\\Other Metrowerks Tools\\Command Line Tools" ;
 -	CCFLAGS += -D$(defines) ;
 -
 -	if ( $(configuration) = "debug" )
 -	{
 -		CCFLAGS += -D_DEBUG ;
 -	}
 -	else
 -	{
 -		CCFLAGS += -DNDEBUG -O4 ;
 -	}
 -
 -	if ( PUGIXML_NO_EXCEPTIONS in $(defines) )
 -	{
 -		CCFLAGS += -Cpp_exceptions off ;
 -	}
 -
 -	actions ObjectAction
 -	{
 -		"$(cw_bin)\mwcc.exe" -c -cwd include -ansi strict -iso_templates on -msext off -w all,cmdline,iserror,nonotused,nonotinlined,noimplicitconv,nounwanted $(>) -o $(<) $(CCFLAGS)
 -	}
 -	
 -	actions LibraryAction
 -	{
 -		"$(cw_bin)\mwld.exe" -library -o $(<) $(>)
 -	}
 -	
 -	actions LinkAction
 -	{
 -		"$(cw_bin)\mwld.exe" -subsystem console -o $(<) $(>) $(LDFLAGS)
 -	}
 -	
 -	actions CoverageAction
 -	{
 -	}
 -}
 -else if ( $(toolset:I=^bcc) )
 -{
 -	CCFLAGS += -D$(defines) ;
 -
 -	if ( $(configuration) = "debug" )
 -	{
 -		CCFLAGS += -D_DEBUG ;
 -	}
 -	else
 -	{
 -		CCFLAGS += -DNDEBUG -Ox ;
 -	}
 -
 -	actions ObjectAction
 -	{
 -		"%$(toolset)_PATH%\bin\bcc32.exe" $(CCFLAGS) -c -q -Q -fp -w -w! -w-8026 -w-8027 -w-8091 -w-8004 -o $(<) $(>)
 -	}
 -	
 -	actions LibraryAction
 -	{
 -		"%$(toolset)_PATH%\bin\tlib.exe" /C $(<:\\) -+$(>:\\)
 -	}
 -	
 -	actions LinkAction
 -	{
 -		"%$(toolset)_PATH%\bin\ilink32.exe" -L"%$(toolset)_PATH%\lib" -Tpe -ap -Gn -x -c "%$(toolset)_PATH%\lib\c0x32.obj" $(>:\\) , $(<:\\) , , $(LDFLAGS:\\) cw32 import32
 -	}
 -	
 -	actions CoverageAction
 -	{
 -	}
 -}
 -else
 -{
 -	exit "Unknown toolset $(toolset)!" ;
 -}
 -
 -actions screenoutput RunAction
 -{
 -	$(>:\\)
 -}
 -
 -actions quietly ignore MakeDirAction
 -{
 -	mkdir $(<:\\) >nul 2>&1
 -}
 -
 -actions quietly ignore DeleteAction
 -{
 -	del /F $(>:\\) >nul 2>&1
 -}
 -
 -rule MakeFileDir TARGET
 -{
 -	local DIR = $(TARGET:D) ;
 -
 -	MakeDirAction $(DIR) ;
 -	Needs $(TARGET) : $(DIR) ;
 -}
 -
 -rule Alias TARGET : SOURCE
 -{
 -	NotFile $(TARGET) ;
 -	Always $(TARGET) ;
 -	Depends $(TARGET) : $(SOURCE) ;
 -}
 -
 -rule Object TARGET : SOURCE
 -{
 -	HDRRULE on $(SOURCE) = C.HdrRule ;
 -	HDRSCAN on $(SOURCE) = $(C.HDRPATTERN) ;
 -
 -	MakeFileDir $(TARGET) ;
 -	ObjectAction $(TARGET) : $(SOURCE) ;
 -	Depends $(TARGET) : $(SOURCE) ;
 -}
 -
 -rule Objects SOURCES
 -{
 -	local OBJECTS ;
 -
 -	for SOURCE in $(SOURCES)
 -	{
 -		local OBJECT = $(BUILD)/$(SOURCE:S=.o) ;
 -
 -		Object $(OBJECT) : $(SOURCE) ;
 -		OBJECTS += $(OBJECT) ;
 -	}
 -
 -	return $(OBJECTS) ;
 -}
 -
 -rule Library TARGET : SOURCES
 -{
 -	# build object files
 -	local OBJECTS = [ Objects $(SOURCES) ] ;
 -
 -	# build library
 -	local LIBRARY = $(BUILD)/$(TARGET).a ;
 -
 -	MakeFileDir $(LIBRARY) ;
 -	LibraryAction $(LIBRARY) : $(OBJECTS) ;
 -	Depends $(LIBRARY) : $(OBJECTS) ;
 -
 -	# make alias
 -	Alias $(TARGET) : $(LIBRARY) ;
 -
 -	# remember library path for linking
 -	$(TARGET)_path = $(LIBRARY) ;
 -
 -	# remember library objects for coverage
 -	$(TARGET)_objects = $(OBJECTS) ;
 -}
 -
 -rule Application TARGET : SOURCES : LIBRARIES
 -{
 -	# build object files
 -	local OBJECTS = [ Objects $(SOURCES) ] ;
 -
 -	# get binary path
 -	local EXECUTABLE = $(BUILD)/$(TARGET).exe ;
 -
 -	# set libraries
 -	LDFLAGS on $(EXECUTABLE) = $(LDFLAGS) $($(LIBRARIES)_path) ;
 -
 -	# build application
 -	MakeFileDir $(EXECUTABLE) ;
 -	LinkAction $(EXECUTABLE) : $(OBJECTS) ;
 -	Depends $(EXECUTABLE) : $(OBJECTS) $($(LIBRARIES)_path) ;
 -	
 -	# make alias
 -	Alias $(TARGET) : $(EXECUTABLE) ;
 -
 -	# remember executable path for running
 -	$(TARGET)_path = $(EXECUTABLE) ;
 -	
 -	# remember executable objects for coverage
 -	$(TARGET)_objects = $(OBJECTS) $($(LIBRARIES)_objects) ;
 -}
 -
 -rule CleanCoverage TARGET 
 -{
 -	# make target
 -	local CLEAN_TARGET = $(TARGET)_clean_coverage ;
 -
 -	NotFile $(CLEAN_TARGET) ;
 -	Always $(CLEAN_TARGET) ;
 -	Depends $(TARGET) : $(CLEAN_TARGET) ;
 -	
 -	# clean object files
 -	local FILES = $($(SOURCE)_objects:S=.gcda) ;
 -
 -	DeleteAction $(CLEAN_TARGET) : $(FILES) ;
 -}
 -
 -rule Test TARGET : SOURCE
 -{
 -	# make alias
 -	Alias $(TARGET) : $(SOURCE) ;
 -
 -	# run tests
 -	RunAction $(TARGET) : $($(SOURCE)_path) ;
 -
 -	# remember executable objects for coverage
 -	$(TARGET)_objects = $($(SOURCE)_objects) ;
 -
 -	# clean coverage files before run
 -	CleanCoverage $(TARGET) ;
 -}
 -
 -rule Coverage TARGET : SOURCE
 -{
 -	local FILES = $($(SOURCE)_objects:S=.gcda) ;
 -
 -	# disable "independent target" warnings
 -	NotFile $(FILES) ;
 -
 -	CoverageAction $(TARGET) : $(FILES) ;
 -	Depends $(TARGET) : $(SOURCE) ;
 -}
 +# Rules for Jamfile.jam + +if ( $(toolset:I=^mingw) || $(toolset) = "gcc" ) +{ +	if ( $(toolset) = "gcc" ) +	{ +		GCCPATH = "" ; +	} +	else +	{ +		GCCPATH = "%$(toolset)_PATH%\bin\\" ; +	} + +	CCFLAGS += -D$(defines) ; + +	if ( $(configuration) = "debug" ) +	{ +		CCFLAGS += -D_DEBUG ; +	} +	else +	{ +		CCFLAGS += -DNDEBUG -O3 ; +	} + +	if ( PUGIXML_NO_EXCEPTIONS in $(defines) ) +	{ +		CCFLAGS += -fno-exceptions ; +	} + +	actions ObjectAction +	{ +		"$(GCCPATH)gcc" -W -Wall -Wextra -Werror -pedantic -c $(>) -o $(<) $(CCFLAGS) +	} +	 +	actions LibraryAction +	{ +		"$(GCCPATH)ar" rc $(<) $(>) +	} +	 +	actions LinkAction +	{ +		"$(GCCPATH)g++" $(>) -o $(<) -static-libgcc $(LDFLAGS)  +	} +	 +	actions CoverageAction +	{ +		"$(GCCPATH)gcov" $(>:\\) $(GCOVFLAGS) | perl tests/gcov-filter.pl +	} +} +else if ( $(toolset:I=^msvc) ) +{ +	CCFLAGS += /D$(defines) ; + +	if ( $(configuration) = "debug" ) +	{ +		CCFLAGS += /D_DEBUG /MTd ; +	} +	else +	{ +		CCFLAGS += /DNDEBUG /Ox /MT ; +	} + +	if ( $(toolset) != msvc6 ) +	{ +		CCFLAGS += /Wp64 /W4 ; +	} +	else +	{ +		CCFLAGS += /W3 ; # lots of warnings at W4 in standard library +	} + +	if ( ! ( PUGIXML_NO_EXCEPTIONS in $(defines) ) ) +	{ +		CCFLAGS += /EHsc ; +	} +	else if ( $(toolset) = "msvc6" || $(toolset) = "msvc71" ) +	{ +		# No no-exception STL in MSVC6, buggy no-exception STL in MSVC71 +		CCFLAGS += /EHsc ; +	} +	else +	{ +		CCFLAGS += /D_HAS_EXCEPTIONS=0 ; +	} + +	if ( $(toolset:I=x64$) ) +	{ +		postfix = "\\amd64" ; +		sdk_postfix = "\\x64" ; +		LDFLAGS += /MACHINE:X64 ; +	} +	else +	{ +		postfix = "" ; +		sdk_postfix = "" ; +	} + +	actions ObjectAction +	{ +		"%$(toolset)_PATH%\bin$(postfix)\cl.exe" /WX /I"%$(toolset)_PATH%\include" /c $(>) /Fo$(<) /nologo $(CCFLAGS) +	} +	 +	actions LibraryAction +	{ +		"%$(toolset)_PATH%\bin$(postfix)\lib.exe" /NOLOGO /OUT:$(<) $(>) +	} +	 +	actions LinkAction +	{ +		"%$(toolset)_PATH%\bin$(postfix)\link.exe" /SUBSYSTEM:CONSOLE /NOLOGO /OUT:$(<) $(>) /LIBPATH:"%$(toolset)_PATH%\lib$(postfix)" /LIBPATH:"%$(toolset)_PATH%\PlatformSDK\lib" /LIBPATH:"%WINSDK_PATH%\Lib$(sdk_postfix)" $(LDFLAGS) +	} +	 +	actions CoverageAction +	{ +	} +} +else if ( $(toolset) = "ic8" ) +{ +	msvc = "msvc7" ; + +	CCFLAGS += /D$(defines) ; + +	if ( $(configuration) = "debug" ) +	{ +		CCFLAGS += /D_DEBUG /MTd ; +	} +	else +	{ +		CCFLAGS += /DNDEBUG /Ox /MT ; +	} + +	if ( ! ( PUGIXML_NO_EXCEPTIONS in $(defines) ) ) +	{ +		CCFLAGS += /EHsc ; +	} + +	actions ObjectAction +	{ +		"%$(toolset)_PATH%\bin\icl.exe" /W4 /WX /Wport /Qwd981,444,280,383,909,304,167,177 /I"%$(msvc)_PATH%\include" /I"%$(toolset)_PATH%\include" /c $(>) /Fo$(<) /nologo $(CCFLAGS) +	} +	 +	actions LibraryAction +	{ +		"%$(msvc)_PATH%\bin\lib.exe" /NOLOGO /OUT:$(<) $(>) +	} +	 +	actions LinkAction +	{ +		"%$(msvc)_PATH%\bin\link.exe" /SUBSYSTEM:CONSOLE /NOLOGO /OUT:$(<) $(>) /LIBPATH:"%$(toolset)_PATH%\lib" /LIBPATH:"%$(msvc)_PATH%\lib" /LIBPATH:"%$(msvc)_PATH%\PlatformSDK\lib" $(LDFLAGS) +	} +	 +	actions CoverageAction +	{ +	} +} +else if ( $(toolset:I=^dmc) ) +{ +	CCFLAGS += -D$(defines) ; + +	if ( $(configuration) = "debug" ) +	{ +		CCFLAGS += -D_DEBUG ; +	} +	else +	{ +		CCFLAGS += -DNDEBUG ; +	} + +	if ( ! ( PUGIXML_NO_EXCEPTIONS in $(defines) ) ) +	{ +		CCFLAGS += -Ae ; +	} + +	actions ObjectAction +	{ +		"%$(toolset)_PATH%\bin\dmc.exe" -c -f -I%$(toolset)_PATH%\stlport\stlport -wx $(>) -o$(<) $(CCFLAGS) +	} +	 +	actions LibraryAction +	{ +		"%$(toolset)_PATH%\bin\lib.exe" -c $(<) $(>) +	} +	 +	actions LinkAction +	{ +		"%$(toolset)_PATH%\bin\link.exe" $(>:\\) , $(<:\\) , nul , $(LDFLAGS:\\) +	} +	 +	actions CoverageAction +	{ +	} +} +else if ( $(toolset:I=^cw) ) +{ +	cw_bin = "%$(toolset)_PATH%\\Other Metrowerks Tools\\Command Line Tools" ; +	CCFLAGS += -D$(defines) ; + +	if ( $(configuration) = "debug" ) +	{ +		CCFLAGS += -D_DEBUG ; +	} +	else +	{ +		CCFLAGS += -DNDEBUG -O4 ; +	} + +	if ( PUGIXML_NO_EXCEPTIONS in $(defines) ) +	{ +		CCFLAGS += -Cpp_exceptions off ; +	} + +	actions ObjectAction +	{ +		"$(cw_bin)\mwcc.exe" -c -cwd include -ansi strict -iso_templates on -msext off -w all,cmdline,iserror,nonotused,nonotinlined,noimplicitconv,nounwanted $(>) -o $(<) $(CCFLAGS) +	} +	 +	actions LibraryAction +	{ +		"$(cw_bin)\mwld.exe" -library -o $(<) $(>) +	} +	 +	actions LinkAction +	{ +		"$(cw_bin)\mwld.exe" -subsystem console -o $(<) $(>) $(LDFLAGS) +	} +	 +	actions CoverageAction +	{ +	} +} +else if ( $(toolset:I=^bcc) ) +{ +	CCFLAGS += -D$(defines) ; + +	if ( $(configuration) = "debug" ) +	{ +		CCFLAGS += -D_DEBUG ; +	} +	else +	{ +		CCFLAGS += -DNDEBUG -Ox ; +	} + +	actions ObjectAction +	{ +		"%$(toolset)_PATH%\bin\bcc32.exe" $(CCFLAGS) -c -q -Q -fp -w -w! -w-8026 -w-8027 -w-8091 -w-8004 -o $(<) $(>) +	} +	 +	actions LibraryAction +	{ +		"%$(toolset)_PATH%\bin\tlib.exe" /C $(<:\\) -+$(>:\\) +	} +	 +	actions LinkAction +	{ +		"%$(toolset)_PATH%\bin\ilink32.exe" -L"%$(toolset)_PATH%\lib" -Tpe -ap -Gn -x -c "%$(toolset)_PATH%\lib\c0x32.obj" $(>:\\) , $(<:\\) , , $(LDFLAGS:\\) cw32 import32 +	} +	 +	actions CoverageAction +	{ +	} +} +else +{ +	exit "Unknown toolset $(toolset)!" ; +} + +if ( $(UNIX) ) +{ +	actions screenoutput RunAction +	{ +		$(>) +	} + +	actions quietly ignore MakeDirAction +	{ +		mkdir -p $(<) +	} + +	actions quietly ignore DeleteAction +	{ +		rm -f $(>) +	} +} +else +{ +	actions screenoutput RunAction +	{ +		$(>:\\) +	} + +	actions quietly ignore MakeDirAction +	{ +		mkdir $(<:\\) >nul 2>&1 +	} + +	actions quietly ignore DeleteAction +	{ +		del /F $(>:\\) >nul 2>&1 +	} +} + +rule MakeFileDir TARGET +{ +	local DIR = $(TARGET:D) ; + +	MakeDirAction $(DIR) ; +	Needs $(TARGET) : $(DIR) ; +} + +rule Alias TARGET : SOURCE +{ +	NotFile $(TARGET) ; +	Always $(TARGET) ; +	Depends $(TARGET) : $(SOURCE) ; +} + +rule Object TARGET : SOURCE +{ +	HDRRULE on $(SOURCE) = C.HdrRule ; +	HDRSCAN on $(SOURCE) = $(C.HDRPATTERN) ; + +	MakeFileDir $(TARGET) ; +	ObjectAction $(TARGET) : $(SOURCE) ; +	Depends $(TARGET) : $(SOURCE) ; +} + +rule Objects SOURCES +{ +	local OBJECTS ; + +	for SOURCE in $(SOURCES) +	{ +		local OBJECT = $(BUILD)/$(SOURCE:S=.o) ; + +		Object $(OBJECT) : $(SOURCE) ; +		OBJECTS += $(OBJECT) ; +	} + +	return $(OBJECTS) ; +} + +rule Library TARGET : SOURCES +{ +	# build object files +	local OBJECTS = [ Objects $(SOURCES) ] ; + +	# build library +	local LIBRARY = $(BUILD)/$(TARGET).a ; + +	MakeFileDir $(LIBRARY) ; +	LibraryAction $(LIBRARY) : $(OBJECTS) ; +	Depends $(LIBRARY) : $(OBJECTS) ; + +	# make alias +	Alias $(TARGET) : $(LIBRARY) ; + +	# remember library path for linking +	$(TARGET)_path = $(LIBRARY) ; + +	# remember library objects for coverage +	$(TARGET)_objects = $(OBJECTS) ; +} + +rule Application TARGET : SOURCES : LIBRARIES +{ +	# build object files +	local OBJECTS = [ Objects $(SOURCES) ] ; + +	# get binary path +	local EXECUTABLE = $(BUILD)/$(TARGET).exe ; + +	# set libraries +	LDFLAGS on $(EXECUTABLE) = $(LDFLAGS) $($(LIBRARIES)_path) ; + +	# build application +	MakeFileDir $(EXECUTABLE) ; +	LinkAction $(EXECUTABLE) : $(OBJECTS) ; +	Depends $(EXECUTABLE) : $(OBJECTS) $($(LIBRARIES)_path) ; +	 +	# make alias +	Alias $(TARGET) : $(EXECUTABLE) ; + +	# remember executable path for running +	$(TARGET)_path = $(EXECUTABLE) ; +	 +	# remember executable objects for coverage +	$(TARGET)_objects = $(OBJECTS) $($(LIBRARIES)_objects) ; +} + +rule CleanCoverage TARGET  +{ +	# make target +	local CLEAN_TARGET = $(TARGET)_clean_coverage ; + +	NotFile $(CLEAN_TARGET) ; +	Always $(CLEAN_TARGET) ; +	Depends $(TARGET) : $(CLEAN_TARGET) ; +	 +	# clean object files +	local FILES = $($(SOURCE)_objects:S=.gcda) ; + +	DeleteAction $(CLEAN_TARGET) : $(FILES) ; +} + +rule Test TARGET : SOURCE +{ +	# make alias +	Alias $(TARGET) : $(SOURCE) ; + +	# run tests +	RunAction $(TARGET) : $($(SOURCE)_path) ; + +	# remember executable objects for coverage +	$(TARGET)_objects = $($(SOURCE)_objects) ; + +	# clean coverage files before run +	CleanCoverage $(TARGET) ; +} + +rule Coverage TARGET : SOURCE +{ +	local FILES = $($(SOURCE)_objects:S=.gcda) ; + +	# disable "independent target" warnings +	NotFile $(FILES) ; + +	CoverageAction $(TARGET) : $(FILES) ; +	Depends $(TARGET) : $(SOURCE) ; +} | 
