On Sat, Aug 8, 2015 at 9:14 AM, Alexandre Feblot <alexan...@feblot.fr> wrote:
> Hi, > would have this been available, I indeed would already have used scons > --envdump=CXXFLAGS,CFLAGS,ENV.PATH A.o > > When I thought about the feature, I also thought the case 2 was more useful, thank you for your feedback. I can do both if we decided that printing the whole environment object is ever useful, but lean code bases make for maintainable code bases :) > *--* > Alexandre Feblot > > Le 8 août 2015 à 15:04, William Blevins <wblevins...@gmail.com> a écrit : > > I guess I should be a bit more explicit about what I am trying to do. > > Example: > A.cpp > SConstruct -> "Program( 'exe', Glob( '*.cpp' ) )" > > My goal original goal was to be able to print environment objects from the > command-line without having to modify code: > 1. As written: [Example: "scons --debug=envdump A.o" would print the build > environment object assigned to "A.o" ]. > 2. Afterthought on usability: [Example: "scons --envdump=LIBS A.o" would > print the variable LIBS from the build environment assigned to "A.o"]. > 2.1 Since environment objects are rather large, maybe printing just a > single value from the environment object would be more readable and/or > desired on a regular basis. > > The supplied patch works for Case 1, but I am having a hard time getting > only the targets on the command-line. Currently, the patch prints the > environment for all targets on the command-line, plus all their > dependencies (as long as they have build environments) and I am hoping to > not print their dependencies. > > [Example: "scons --debug=envdump A.o" would print the environment for > target "A.o" but not "A.cpp" or "/usr/bin/g++" because they don't have a > build environment.] > > [Example: "scons --debug=envdump exe" would print the environment for > target "exe" plus "A.o" because it's in the target list (as a dependency of > "exe")] > > If I can figure out a clean way to get only the targets on the > command-line, then that makes the most sense. The real question is do we > want Case 1, Case 2,or both capabilities? > > V/R, > William > > > > > > On Sat, Aug 8, 2015 at 3:42 AM, Roberto De Vecchi < > roberto.devec...@vi-grade.com> wrote: > >> William, >> >> from my experience using varname as a filter to limit the output will not >> help much in big trees where my cloned env are assigned to vars with the >> same name. >> >> I would find very useful having the env dump limited to the target node >> specified on the command line: is this already supported by your proposal? >> >> Roberto >> --- Messaggio Originale --- *Da: * William Blevins <wblevins...@gmail.com >> > *Data: * 08 Agosto 2015 07:22:12 *Oggetto: * [Scons-dev] Patch for >> potential new debug option *A: * SCons developer list < >> scons-dev@scons.org> >> >> Here is a patch for dumping build environments via the command-line. >>> >>> I couldn't ever figure out a good way to get only explicitly lister >>> targets (non-default commandline targets). It will essentially print the >>> node.get_env().Dump() for all targets with a build_env defined. >>> >>> I could potentially change it from "--debug=envdump" to something like >>> "--envdump=<VARIABLE>" so that it could print a particular variable rather >>> than the whole env. >>> >>> Does this interest anyone or waste of chars? >>> >>> diff -r 682b8a7a51fb src/engine/SCons/Script/Main.py >>>> --- a/src/engine/SCons/Script/Main.py Mon Jun 29 15:37:44 2015 -0400 >>>> +++ b/src/engine/SCons/Script/Main.py Thu Aug 06 23:44:50 2015 -0400 >>>> @@ -391,6 +391,21 @@ >>>> def prepare(self): >>>> pass >>>> >>>> +class EnvDumpTask(SCons.Taskmaster.AlwaysTask): >>>> + """SCons task for --debug=envdump. Prints env dump for >>>> BUILD_TARGETS.""" >>>> + def prepare(self): >>>> + pass >>>> + >>>> + def execute(self): >>>> + for target in self.targets: >>>> + if target.get_build_env(): >>>> + print 'Environment dump for target: ' + str(target) >>>> + print target.get_env().Dump() >>>> + >>>> + def executed(self): >>>> + pass >>>> + >>>> + >>>> class QuestionTask(SCons.Taskmaster.AlwaysTask): >>>> """An SCons task for the -q (question) option.""" >>>> def prepare(self): >>>> @@ -657,6 +672,7 @@ >>>> if "memory" in debug_values: >>>> memory_stats.enable(sys.stdout) >>>> print_objects = ("objects" in debug_values) >>>> + options.debug_envdump = ( "envdump" in debug_values ) >>>> if print_objects: >>>> SCons.Debug.track_instances = True >>>> if "presub" in debug_values: >>>> @@ -1210,8 +1226,13 @@ >>>> failure_message = "done building targets (errors occurred >>>> during build)." >>>> else: >>>> failure_message = "building terminated because of errors." >>>> + >>>> + if options.debug_envdump: >>>> + task_class = EnvDumpTask >>>> + >>>> if options.question: >>>> task_class = QuestionTask >>>> + >>>> try: >>>> if options.clean: >>>> task_class = CleanTask >>>> diff -r 682b8a7a51fb src/engine/SCons/Script/SConsOptions.py >>>> --- a/src/engine/SCons/Script/SConsOptions.py Mon Jun 29 15:37:44 >>>> 2015 -0400 >>>> +++ b/src/engine/SCons/Script/SConsOptions.py Thu Aug 06 23:44:50 >>>> 2015 -0400 >>>> @@ -673,7 +673,7 @@ >>>> "tree" : '; please use --tree=all instead', >>>> } >>>> >>>> - debug_options = ["count", "duplicate", "explain", "findlibs", >>>> + debug_options = ["count", "duplicate", "explain", "envdump", >>>> "findlibs", >>>> "includes", "memoizer", "memory", "objects", >>>> "pdb", "prepare", "presub", "stacktrace", >>>> "time"] >>>> >>>> >>> >>> V/R, >>> William >>> >> > _______________________________________________ > Scons-dev mailing list > Scons-dev@scons.org > https://pairlist2.pair.net/mailman/listinfo/scons-dev > > > > _______________________________________________ > Scons-dev mailing list > Scons-dev@scons.org > https://pairlist2.pair.net/mailman/listinfo/scons-dev > >
_______________________________________________ Scons-dev mailing list Scons-dev@scons.org https://pairlist2.pair.net/mailman/listinfo/scons-dev