Implement full dependencies for rbuild: changing a header file will now automatically rebuild all modules that include it, directly or indirectly. Very slow, but an irreplaceable tool for header fixing

Full dependencies can be enabled by setting ROS_RBUILDFLAGS=-df
Whether initially enabled or not, once makefile.auto is generated, full dependencies can be enabled or disabled by setting ROS_BUILDDEPS=full or ROS_BUILDDEPS=auto

In case you missed it, full dependencies are VERY SLOW

svn path=/trunk/; revision=39093
This commit is contained in:
KJK::Hyperion 2009-01-25 16:19:45 +00:00
parent dbd86db31e
commit ba67551bdf
6 changed files with 144 additions and 32 deletions

View file

@ -117,6 +117,8 @@
# -v Be verbose. # -v Be verbose.
# -c Clean as you go. Delete generated files as soon as they are not needed anymore. # -c Clean as you go. Delete generated files as soon as they are not needed anymore.
# -dd Disable automatic dependencies. # -dd Disable automatic dependencies.
# -da Enable automatic dependencies.
# -df Enable full dependencies.
# -dm{module} Check only automatic dependencies for this module. # -dm{module} Check only automatic dependencies for this module.
# -hd Disable precompiled headers. # -hd Disable precompiled headers.
# -mi Let make handle creation of install directories. Rbuild will not generate the directories. # -mi Let make handle creation of install directories. Rbuild will not generate the directories.
@ -244,6 +246,7 @@ ifeq ($(HALFVERBOSEECHO),yes)
ECHO_GENDIB =@echo $(QUOTE)[GENDIB] $@$(QUOTE) ECHO_GENDIB =@echo $(QUOTE)[GENDIB] $@$(QUOTE)
ECHO_STRIP =@echo $(QUOTE)[STRIP] $@$(QUOTE) ECHO_STRIP =@echo $(QUOTE)[STRIP] $@$(QUOTE)
ECHO_RGENSTAT=@echo $(QUOTE)[RGENSTAT] $@$(QUOTE) ECHO_RGENSTAT=@echo $(QUOTE)[RGENSTAT] $@$(QUOTE)
ECHO_DEPENDS =@echo $(QUOTE)[DEPENDS] $<$(QUOTE)
else else
ECHO_CP = ECHO_CP =
ECHO_MKDIR = ECHO_MKDIR =
@ -278,6 +281,7 @@ else
ECHO_GENDIB = ECHO_GENDIB =
ECHO_STRIP = ECHO_STRIP =
ECHO_RGENSTAT= ECHO_RGENSTAT=
ECHO_DEPENDS =
endif endif
# Set host compiler/linker # Set host compiler/linker

View file

@ -313,7 +313,7 @@ MingwBackend::Process ()
void void
MingwBackend::CheckAutomaticDependenciesForModuleOnly () MingwBackend::CheckAutomaticDependenciesForModuleOnly ()
{ {
if ( configuration.AutomaticDependencies ) if ( configuration.Dependencies == AutomaticDependencies )
{ {
Module* module = ProjectNode.LocateModule ( configuration.CheckDependenciesForModuleOnlyModule ); Module* module = ProjectNode.LocateModule ( configuration.CheckDependenciesForModuleOnlyModule );
if ( module == NULL ) if ( module == NULL )
@ -519,6 +519,15 @@ MingwBackend::GenerateProjectLFLAGS () const
void void
MingwBackend::GenerateGlobalVariables () const MingwBackend::GenerateGlobalVariables () const
{ {
if ( configuration.Dependencies == FullDependencies )
{
fprintf ( fMakefile,
"ifeq ($(ROS_BUILDDEPS),)\n"
"ROS_BUILDDEPS:=%s\n"
"endif\n",
"full" );
}
fprintf ( fMakefile, fprintf ( fMakefile,
"PREFIX := %s\n", "PREFIX := %s\n",
compilerPrefix.c_str () ); compilerPrefix.c_str () );
@ -715,7 +724,7 @@ MingwBackend::GenerateProxyMakefiles ()
void void
MingwBackend::CheckAutomaticDependencies () MingwBackend::CheckAutomaticDependencies ()
{ {
if ( configuration.AutomaticDependencies ) if ( configuration.Dependencies == AutomaticDependencies )
{ {
printf ( "Checking automatic dependencies..." ); printf ( "Checking automatic dependencies..." );
AutomaticDependency automaticDependency ( ProjectNode ); AutomaticDependency automaticDependency ( ProjectNode );

View file

@ -1059,10 +1059,17 @@ Rule arHostRule2 ( "\t$(ECHO_HOSTAR)\n"
"\t${host_ar} -rc $@ $($(module_name)_OBJS)\n", "\t${host_ar} -rc $@ $($(module_name)_OBJS)\n",
NULL ); NULL );
Rule gasRule ( "$(source): ${$(module_name)_precondition}\n" Rule gasRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_unique).o: $(source)$(dependencies) | $(intermediate_dir)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_unique).o.d: $(source) | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gcc} -x assembler-with-cpp -MF $@ -D__ASM__ $($(module_name)_CFLAGS) -M -MP -MT $@ $<\n"
"-include $(intermediate_path_unique).o.d\n"
"endif\n"
"$(intermediate_path_unique).o: $(source)$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_unique).o.d)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_GAS)\n" "\t$(ECHO_GAS)\n"
"\t${gcc} -x assembler-with-cpp -o $@ -D__ASM__ $($(module_name)_CFLAGS) -c $<\n", "\t${gcc} -x assembler-with-cpp -o $@ -D__ASM__ $($(module_name)_CFLAGS) -c $<\n",
"$(intermediate_path_unique).o", "$(intermediate_path_unique).o",
"$(intermediate_path_unique).o.d",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule bootRule ( "$(source): ${$(module_name)_precondition}\n" Rule bootRule ( "$(source): ${$(module_name)_precondition}\n"
"$(module_output): $(source)$(dependencies) | $(OUTPUT)$(SEP)$(source_dir)\n" "$(module_output): $(source)$(dependencies) | $(OUTPUT)$(SEP)$(source_dir)\n"
@ -1076,7 +1083,13 @@ Rule nasmRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_unique).o", "$(intermediate_path_unique).o",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule windresRule ( "$(source): ${$(module_name)_precondition}\n" Rule windresRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_unique).coff: $(source)$(dependencies) $(WRC_TARGET) | $(intermediate_dir) $(TEMPORARY)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_unique).coff.d: $(source) | $(intermediate_dir) $(TEMPORARY)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gcc} -xc -M -MP -MT $@ -DRC_INVOKED ${$(module_name)_RCFLAGS} $(source) -MF $@\n"
"-include $(intermediate_path_unique).coff.d\n"
"endif\n"
"$(intermediate_path_unique).coff: $(source)$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_unique).coff.d)$(dependencies) $(WRC_TARGET) | $(intermediate_dir) $(TEMPORARY)\n"
"\t$(ECHO_WRC)\n" "\t$(ECHO_WRC)\n"
"\t${gcc} -xc -E -DRC_INVOKED ${$(module_name)_RCFLAGS} $(source) > $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp\n" "\t${gcc} -xc -E -DRC_INVOKED ${$(module_name)_RCFLAGS} $(source) > $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp\n"
"\t$(Q)$(WRC_TARGET) ${$(module_name)_RCFLAGS} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp\n" "\t$(Q)$(WRC_TARGET) ${$(module_name)_RCFLAGS} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).rci.tmp $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp\n"
@ -1084,6 +1097,7 @@ Rule windresRule ( "$(source): ${$(module_name)_precondition}\n"
"\t${windres} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp -o $@\n" "\t${windres} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp -o $@\n"
"\t-@${rm} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp 2>$(NUL)\n", "\t-@${rm} $(TEMPORARY)$(SEP)$(module_name).$(source_name_noext).res.tmp 2>$(NUL)\n",
"$(intermediate_path_unique).coff", "$(intermediate_path_unique).coff",
"$(intermediate_path_unique).coff.d",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule wmcRule ( "$(intermediate_path_noext).rc $(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h: $(WMC_TARGET) $(source) | $(intermediate_dir)\n" Rule wmcRule ( "$(intermediate_path_noext).rc $(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h: $(WMC_TARGET) $(source) | $(intermediate_dir)\n"
"\t$(ECHO_WMC)\n" "\t$(ECHO_WMC)\n"
@ -1091,24 +1105,38 @@ Rule wmcRule ( "$(intermediate_path_noext).rc $(INTERMEDIATE)$(SEP)include$(SEP)
"$(intermediate_path_noext).rc", "$(intermediate_path_noext).rc",
"$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h", "$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule winebuildPDefRule ( "$(intermediate_path_unique).spec: $(source)$(dependencies) | $(intermediate_dir)\n" Rule winebuildPDefRule ( "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_unique).spec.d: $(source) | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gcc} -xc -M -MP -MT $@ ${$(module_name)_RCFLAGS} $(source) -MF $@\n\n"
"-include $(intermediate_path_unique).spec.d\n"
"endif\n"
"$(intermediate_path_unique).spec: $(source)$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_unique).spec.d)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_CPP)\n" "\t$(ECHO_CPP)\n"
"\t${gcc} -xc -E ${$(module_name)_RCFLAGS} $(source) > $(intermediate_path_unique).spec\n\n" "\t${gcc} -xc -E ${$(module_name)_RCFLAGS} $(source) > $(intermediate_path_unique).spec\n\n"
"$(intermediate_path_unique).auto.def: $(intermediate_path_unique).spec $(WINEBUILD_TARGET) | $(intermediate_dir)\n" "$(intermediate_path_unique).auto.def: $(intermediate_path_unique).spec $(WINEBUILD_TARGET) | $(intermediate_dir)\n"
"\t$(ECHO_WINEBLD)\n" "\t$(ECHO_WINEBLD)\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(intermediate_path_unique).auto.def --def -E $(intermediate_path_unique).spec --filename $(module_dllname)\n\n", "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(intermediate_path_unique).auto.def --def -E $(intermediate_path_unique).spec --filename $(module_dllname)\n\n",
"$(intermediate_path_unique).spec", "$(intermediate_path_unique).spec",
"$(intermediate_path_unique).spec.d",
"$(intermediate_path_unique).auto.def", "$(intermediate_path_unique).auto.def",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule winebuildPRule ( "$(intermediate_path_unique).stubs.c: $(intermediate_path_unique).spec $(WINEBUILD_TARGET) | $(intermediate_dir)\n" Rule winebuildPRule ( "$(intermediate_path_unique).stubs.c: $(intermediate_path_unique).spec $(WINEBUILD_TARGET) | $(intermediate_dir)\n"
"\t$(ECHO_WINEBLD)\n" "\t$(ECHO_WINEBLD)\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $@ --pedll $(intermediate_path_unique).spec --filename $(module_dllname)\n\n" "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $@ --pedll $(intermediate_path_unique).spec --filename $(module_dllname)\n\n"
"$(intermediate_path_unique).stubs.o: $(intermediate_path_unique).stubs.c | $(intermediate_dir)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_unique).stubs.o.d: $(intermediate_path_unique).stubs.c | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gcc} -MF $@ $($(module_name)_CFLAGS)$(compiler_flags) -M -MP -MT $@ $<\n"
"-include $(intermediate_path_unique).stubs.o.d\n"
"endif\n"
"$(intermediate_path_unique).stubs.o: $(intermediate_path_unique).stubs.c$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_unique).stubs.o.d) | $(intermediate_dir)\n"
"\t$(ECHO_CC)\n" "\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
"$(intermediate_path_unique).spec", "$(intermediate_path_unique).spec",
"$(intermediate_path_unique).stubs.c", "$(intermediate_path_unique).stubs.c",
"$(intermediate_path_unique).stubs.o", "$(intermediate_path_unique).stubs.o",
"$(intermediate_path_unique).stubs.o.d",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule winebuildDefRule ( "$(intermediate_path_unique).auto.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(intermediate_dir)\n" Rule winebuildDefRule ( "$(intermediate_path_unique).auto.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(intermediate_dir)\n"
"\t$(ECHO_WINEBLD)\n" "\t$(ECHO_WINEBLD)\n"
@ -1119,87 +1147,144 @@ Rule winebuildDefRule ( "$(intermediate_path_unique).auto.def: $(source)$(depend
Rule winebuildRule ( "$(intermediate_path_unique).stubs.c: $(source) $(WINEBUILD_TARGET)\n" Rule winebuildRule ( "$(intermediate_path_unique).stubs.c: $(source) $(WINEBUILD_TARGET)\n"
"\t$(ECHO_WINEBLD)\n" "\t$(ECHO_WINEBLD)\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $@ --pedll $(source) --filename $(module_dllname)\n" "\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $@ --pedll $(source) --filename $(module_dllname)\n"
"$(intermediate_path_unique).stubs.o: $(intermediate_path_unique).stubs.c$(dependencies) | $(intermediate_dir)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_unique).stubs.o.d: $(intermediate_path_unique).stubs.c | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gcc} -MF $@ $($(module_name)_CFLAGS)$(compiler_flags) -M -MP -MT $@ $<\n"
"-include $(intermediate_path_unique).stubs.o.d\n"
"endif\n"
"$(intermediate_path_unique).stubs.o: $(intermediate_path_unique).stubs.c$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_unique).stubs.o.d)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_CC)\n" "\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
"$(intermediate_path_unique).stubs.c", "$(intermediate_path_unique).stubs.c",
"$(intermediate_path_unique).stubs.o", "$(intermediate_path_unique).stubs.o",
"$(intermediate_path_unique).stubs.o.d",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule widlHeaderRule ( "$(source): ${$(module_name)_precondition}\n" Rule widlHeaderRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_noext).h: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "$(intermediate_path_noext).h: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n"
"\t$(ECHO_WIDL)\n" "\t$(ECHO_WIDL)\n"
"\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext).h $(source)\n", "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext).h $(source)\n",
"$(intermediate_path_noext).h", "$(intermediate_path_noext).h",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule widlServerRule ( "$(source): ${$(module_name)_precondition}\n" Rule widlServerRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_noext)_s.c $(intermediate_path_noext)_s.h: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "$(intermediate_path_noext)_s.c $(intermediate_path_noext)_s.h: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n"
"\t$(ECHO_WIDL)\n" "\t$(ECHO_WIDL)\n"
"\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext)_s.h -s -S $(intermediate_path_noext)_s.c $(source)\n" "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext)_s.h -s -S $(intermediate_path_noext)_s.c $(source)\n"
"$(intermediate_path_noext)_s.o: $(intermediate_path_noext)_s.c $(intermediate_path_noext)_s.h$(dependencies) | $(intermediate_dir)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_noext)_s.o.d: $(intermediate_path_noext)_s.c | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gcc} -MF $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -M -MP -MT $@ $<\n"
"-include $(intermediate_path_noext)_s.o.d\n"
"endif\n"
"$(intermediate_path_noext)_s.o: $(intermediate_path_noext)_s.c $(intermediate_path_noext)_s.h$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_noext)_s.o.d)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_CC)\n" "\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -c $<\n", "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -c $<\n",
"$(intermediate_path_noext)_s.h", "$(intermediate_path_noext)_s.h",
"$(intermediate_path_noext)_s.c", "$(intermediate_path_noext)_s.c",
"$(intermediate_path_noext)_s.o", "$(intermediate_path_noext)_s.o",
"$(intermediate_path_noext)_s.o.d",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule widlClientRule ( "$(source): ${$(module_name)_precondition}\n" Rule widlClientRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_noext)_c.c $(intermediate_path_noext)_c.h: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "$(intermediate_path_noext)_c.c $(intermediate_path_noext)_c.h: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n"
"\t$(ECHO_WIDL)\n" "\t$(ECHO_WIDL)\n"
"\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext)_c.h -c -C $(intermediate_path_noext)_c.c $(source)\n" "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext)_c.h -c -C $(intermediate_path_noext)_c.c $(source)\n"
"$(intermediate_path_noext)_c.o: $(intermediate_path_noext)_c.c $(intermediate_path_noext)_c.h$(dependencies) | $(intermediate_dir)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_noext)_c.o.d: $(intermediate_path_noext)_c.c | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gcc} -MF $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -M -MP -MT $@ $<\n"
"-include $(intermediate_path_noext)_c.o.d\n"
"endif\n"
"$(intermediate_path_noext)_c.o: $(intermediate_path_noext)_c.c $(intermediate_path_noext)_c.h$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_noext)_c.o.d)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_CC)\n" "\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -c $<\n", "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -c $<\n",
"$(intermediate_path_noext)_c.h", "$(intermediate_path_noext)_c.h",
"$(intermediate_path_noext)_c.c", "$(intermediate_path_noext)_c.c",
"$(intermediate_path_noext)_c.o", "$(intermediate_path_noext)_c.o",
"$(intermediate_path_noext)_c.o.d",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule widlProxyRule ( "$(source): ${$(module_name)_precondition}\n" Rule widlProxyRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_noext)_p.c $(intermediate_path_noext)_p.h: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "$(intermediate_path_noext)_p.c $(intermediate_path_noext)_p.h: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n"
"\t$(ECHO_WIDL)\n" "\t$(ECHO_WIDL)\n"
"\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext)_p.h -p -P $(intermediate_path_noext)_p.c $(source)\n" "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -h -H $(intermediate_path_noext)_p.h -p -P $(intermediate_path_noext)_p.c $(source)\n"
"$(intermediate_path_noext)_p.o: $(intermediate_path_noext)_p.c $(intermediate_path_noext)_p.h$(dependencies) | $(intermediate_dir)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_noext)_p.o.d: $(intermediate_path_noext)_p.c | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gcc} -MF $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -M -MP -MT $@ $<\n"
"-include $(intermediate_path_noext)_p.o.d\n"
"endif\n"
"$(intermediate_path_noext)_p.o: $(intermediate_path_noext)_p.c $(intermediate_path_noext)_p.h$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_noext)_p.o.d)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_CC)\n" "\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -c $<\n", "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -fno-unit-at-a-time -c $<\n",
"$(intermediate_path_noext)_p.h", "$(intermediate_path_noext)_p.h",
"$(intermediate_path_noext)_p.c", "$(intermediate_path_noext)_p.c",
"$(intermediate_path_noext)_p.o", "$(intermediate_path_noext)_p.o",
"$(intermediate_path_noext)_p.o.d",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule widlDlldataRule ( "$(source): $(dependencies) ${$(module_name)_precondition} $(WIDL_TARGET) | $(intermediate_dir)\n" Rule widlDlldataRule ( "$(source): $(dependencies) ${$(module_name)_precondition} $(WIDL_TARGET) | $(intermediate_dir)\n"
"\t$(ECHO_WIDL)\n" "\t$(ECHO_WIDL)\n"
"\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) --dlldata-only --dlldata=$(source) $(bare_dependencies)\n" "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) --dlldata-only --dlldata=$(source) $(bare_dependencies)\n"
"$(intermediate_path_noext).o: $(source) $(dependencies) | $(intermediate_dir)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"\t$(ECHO_CC)\n" "$(intermediate_path_noext).o.d: $(source) | $(intermediate_dir)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", "\t$(ECHO_DEPENDS)\n"
"$(intermediate_path_noext).o", NULL ); "\t${gcc} -MF $@ $($(module_name)_CFLAGS)$(compiler_flags) -M -MP -MT $@ $<\n"
"-include $(intermediate_path_noext).o.d\n"
"endif\n"
"$(intermediate_path_noext).o: $(source)$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_noext).o.d)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
"$(intermediate_path_noext).o",
"$(intermediate_path_noext).o.d", NULL );
Rule widlTlbRule ( "$(source): ${$(module_name)_precondition}\n" Rule widlTlbRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_dir)$(SEP)$(module_name).tlb: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n" "$(intermediate_dir)$(SEP)$(module_name).tlb: $(source)$(dependencies) $(WIDL_TARGET) | $(intermediate_dir)\n"
"\t$(ECHO_WIDL)\n" "\t$(ECHO_WIDL)\n"
"\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -t -T $(intermediate_path_noext).tlb $(source)\n", "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -t -T $(intermediate_path_noext).tlb $(source)\n",
"$(intermediate_dir)$(SEP)", NULL ); "$(intermediate_dir)$(SEP)", NULL );
Rule gccRule ( "$(source): ${$(module_name)_precondition}\n" Rule gccRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_unique).o: $(source)$(dependencies) | $(intermediate_dir)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_unique).o.d: $(source) | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gcc} -MF $@ $($(module_name)_CFLAGS)$(compiler_flags) -M -MP -MT $@ $<\n"
"-include $(intermediate_path_unique).o.d\n"
"endif\n"
"$(intermediate_path_unique).o: $(source)$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_unique).o.d)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_CC)\n" "\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
"$(intermediate_path_unique).o", NULL ); "$(intermediate_path_unique).o",
"$(intermediate_path_unique).o.d", NULL );
Rule gccHostRule ( "$(source): ${$(module_name)_precondition}\n" Rule gccHostRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_unique).o: $(source)$(dependencies) | $(intermediate_dir)\n" "$(intermediate_path_unique).o: $(source)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_HOSTCC)\n" "\t$(ECHO_HOSTCC)\n"
"\t${host_gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", "\t${host_gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
"$(intermediate_path_unique).o", NULL ); "$(intermediate_path_unique).o", NULL );
Rule gppRule ( "$(source): ${$(module_name)_precondition}\n" Rule gppRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_unique).o: $(source)$(dependencies) | $(intermediate_dir)\n" "ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_path_unique).o.d: $(source) | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t${gpp} -MF $@ $($(module_name)_CXXFLAGS)$(compiler_flags) -M -MP -MT $@ $<\n"
"-include $(intermediate_path_unique).o.d\n"
"endif\n"
"$(intermediate_path_unique).o: $(source)$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_unique).o.d)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_CC)\n" "\t$(ECHO_CC)\n"
"\t${gpp} -o $@ $($(module_name)_CXXFLAGS)$(compiler_flags) -c $<\n", "\t${gpp} -o $@ $($(module_name)_CXXFLAGS)$(compiler_flags) -c $<\n",
"$(intermediate_path_unique).o", NULL ); "$(intermediate_path_unique).o",
"$(intermediate_path_unique).o.d", NULL );
Rule gppHostRule ( "$(source): ${$(module_name)_precondition}\n" Rule gppHostRule ( "$(source): ${$(module_name)_precondition}\n"
"$(intermediate_path_unique).o: $(source)$(dependencies) | $(intermediate_dir)\n" "$(intermediate_path_unique).o: $(source)$(dependencies) | $(intermediate_dir)\n"
"\t$(ECHO_HOSTCC)\n" "\t$(ECHO_HOSTCC)\n"
"\t${host_gpp} -o $@ $($(module_name)_CXXFLAGS)$(compiler_flags) -c $<\n", "\t${host_gpp} -o $@ $($(module_name)_CXXFLAGS)$(compiler_flags) -c $<\n",
"$(intermediate_path_unique).o", NULL ); "$(intermediate_path_unique).o", NULL );
Rule pchRule ( "$(intermediate_dir)$(SEP).gch_$(module_name)$(SEP)$(source_name).gch: $(source)$(dependencies) | $(intermediate_dir)$(SEP).gch_$(module_name)\n" Rule pchRule ( "$(source): ${$(module_name)_precondition}\n"
"ifeq ($(ROS_BUILDDEPS),full)\n"
"$(intermediate_dir)$(SEP).gch_$(module_name)$(SEP)$(source_name).gch.d: $(source) | $(intermediate_dir)\n"
"\t$(ECHO_DEPENDS)\n"
"\t$(pch_cc) -MF $@ $(pch_ccflags)$(compiler_flags) -x $(pch_language) -M -MP -MT $@ $<\n"
"-include $(intermediate_dir)$(SEP).gch_$(module_name)$(SEP)$(source_name).gch.d\n"
"endif\n"
"$(intermediate_dir)$(SEP).gch_$(module_name)$(SEP)$(source_name).gch: $(source)$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_dir)$(SEP).gch_$(module_name)$(SEP)$(source_name).gch.d)$(dependencies) | $(intermediate_dir)$(SEP).gch_$(module_name)\n"
"\t$(ECHO_PCH)\n" "\t$(ECHO_PCH)\n"
"\t$(pch_cc) -o $@ $(pch_ccflags)$(compiler_flags) -x $(pch_language) -c $<\n", "\t$(pch_cc) -o $@ $(pch_ccflags)$(compiler_flags) -x $(pch_language) -c $<\n",
"$(intermediate_dir)$(SEP).gch_$(module_name)$(SEP)$(source_name).gch", NULL ); "$(intermediate_dir)$(SEP).gch_$(module_name)$(SEP)$(source_name).gch",
"$(intermediate_dir)$(SEP).gch_$(module_name)$(SEP)$(source_name).gch.d", NULL );
Rule emptyRule ( "", NULL ); Rule emptyRule ( "", NULL );
void void

View file

@ -24,7 +24,7 @@ Configuration::Configuration ()
{ {
Verbose = false; Verbose = false;
CleanAsYouGo = false; CleanAsYouGo = false;
AutomaticDependencies = true; Dependencies = AutomaticDependencies;
CheckDependenciesForModuleOnly = false; CheckDependenciesForModuleOnly = false;
CompilationUnitsEnabled = true; CompilationUnitsEnabled = true;
PrecompiledHeadersEnabled = true; PrecompiledHeadersEnabled = true;

View file

@ -45,7 +45,13 @@ ParseAutomaticDependencySwitch (
switch ( switchChar2 ) switch ( switchChar2 )
{ {
case 'd': case 'd':
configuration.AutomaticDependencies = false; configuration.Dependencies = NoDependencies;
break;
case 'a':
configuration.Dependencies = AutomaticDependencies;
break;
case 'f':
configuration.Dependencies = FullDependencies;
break; break;
case 'm': case 'm':
if ( strlen ( switchStart ) <= 3 ) if ( strlen ( switchStart ) <= 3 )
@ -293,6 +299,8 @@ main ( int argc, char** argv )
printf ( " -c Clean as you go. Delete generated files as soon as they are not\n" ); printf ( " -c Clean as you go. Delete generated files as soon as they are not\n" );
printf ( " needed anymore.\n" ); printf ( " needed anymore.\n" );
printf ( " -dd Disable automatic dependencies.\n" ); printf ( " -dd Disable automatic dependencies.\n" );
printf ( " -da Enable automatic dependencies.\n" );
printf ( " -df Enable full dependencies.\n" );
printf ( " -dm{module} Check only automatic dependencies for this module.\n" ); printf ( " -dm{module} Check only automatic dependencies for this module.\n" );
printf ( " -ud Disable multiple source files per compilation unit.\n" ); printf ( " -ud Disable multiple source files per compilation unit.\n" );
printf ( " -mi Let make handle creation of install directories. Rbuild will\n" ); printf ( " -mi Let make handle creation of install directories. Rbuild will\n" );

View file

@ -148,6 +148,12 @@ private:
bool verbose ); bool verbose );
}; };
enum DependenciesType
{
NoDependencies,
AutomaticDependencies,
FullDependencies
};
class Configuration class Configuration
{ {
@ -156,7 +162,7 @@ public:
~Configuration (); ~Configuration ();
bool Verbose; bool Verbose;
bool CleanAsYouGo; bool CleanAsYouGo;
bool AutomaticDependencies; DependenciesType Dependencies;
bool CheckDependenciesForModuleOnly; bool CheckDependenciesForModuleOnly;
bool CompilationUnitsEnabled; bool CompilationUnitsEnabled;
bool PrecompiledHeadersEnabled; bool PrecompiledHeadersEnabled;