Boost Build Env Checker (was RE: [boost] Re: Customer Friendlier Boost Installation)

David- Some thoughts below (sorry for taking a bit to come back on this one. I have been contemplating)
-----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of David Abrahams Sent: Tuesday, May 31, 2005 7:08 AM To: boost@lists.boost.org Subject: [boost] Re: Customer Friendlier Boost Installation
"Brian Braatz" <brianb@rmtg.com> writes:
HAVING said that here is the suggestion, reformed:
Boostenvcheck.exe become s a program which LISTS the dependencies for your configuration.
Can you show an example of what that output might look like? I don't even have a clear idea of what you mean by "dependencies" or "your configuration." [Brian Braatz Writes:]
I must say, I need to fully absorb how bjam \ boost.build interoperate, until doing so, please understand the details of this idea maybe ill formed. I get it conceptually, but it is still a "black box" in my head. At a high level all I am talking about is the same style of thinking that goes into coding a unit test being applied to a runtime environment. maybe if I provide a different context: (to at least describe the style of thinking I am espousing) lets say I have developed a command line compiler that has a series of dependencies: * INCLUDE var needs to be set to a valid path * We assume some standard files are available here (stdio.h etc) * LIB var needs to be set to a valid path * we assume some standard lib files- or Maybe just assume there is at least ONE lib file there lets say I have shipped my compiler to the masses, and soon I get reports from the users that they have funky errors when trying to compile something. Most of the time, it is USER error. In fact frequently, I may spend hours on the phone with them only to discover they did not configure something correctly or set it up properly. in my frustration over time wasted I decide to write a env checker for my compiler. ill call it clenvcheck.exe. when you run clenvcheck, if I elected to be extreme, I would: 1- validate INCLUDE and LIB vars are set 2- Read the contents of dirs to ensure some or all of the required core files exist 3- display a list of these "dependencies" in my output report i.e. "found stdio.h at c:\brianscompiler\include" 4- check to see if I can find my linker- send the version and location of it to the report 5- display a HIGH Level message denoting whether the "environment passed the test" for my compiler. so armed with this new tool I can now, when talking with folks over the phone, ask them to run the report. when it says "passed"- I can quickly re-direct them back to their code. if they are not convinced, I can have them send me the report and I can look at it and try to determine where the issue is. ADDTIIONAL scenario: Lets say, in my compiler business, I have a scenario where I occasionally release to the users a bug fixed header file. I send out a mail with the new file and explicit instructions on where to put it. After I have released a few bug fixed header files, I find users complaining about weird problems. Turns out, I am now back to spending an dreadful amount of time on the phone only to discover 9 times out of 10 the user did not follow instructions. 1 time out of 10 there actually was a bug in something I released. 10 times out of 10, the customer is frustrated. Even if the customer REALIZES THEY made the mistake, it still leaves them frustrated with ME and my PRODUCT. So I elect to get a bit more extreme in my env checker. I upgrade it so that it adds to the report a hash of all the "things it depends on", i.e. header files, link.exe etc. So now, when the user has a problem, I have them send me the report. I can also make available to them a list of the hashes for the files which I have tested to "work". I spend less time supporting my product, and my customers are happier because I can keep them running much more effectively. I have put a system in place to "Introspect" the users environment. By doing so, I have decreased the amount of time I have to spend introspecting manually. HOW THIS RELATES TO BOOST.BUILD: I need to understand boost.buiid better to give a better suggestion. Hopefully my example might inspire the "Dependancies" to shake out, even if I do not fully understand boost.build yet. I believe this STYLE of thinking can be applied, but I have to get my current boost things done before I can start down this track. As I said before, if the thinking here inspires someone to START something like this all the better . :) IF NOT, I intend on tackling this in the future. (I first have to become a expert in boost.build though :)) I would like to eventually see something that allows someone to SPIT out a report, mail it to the list, and have the people on the list be able to IMMEDIATELY tell the person what could be horked, or why it is not building for them. Cheers, Brian "The Village Idiot" Braatz

"Brian Braatz" <brianb@rmtg.com> writes:
boost-bounces@lists.boost.org wrote:
On Behalf Of David Abrahams Sent: Tuesday, May 31, 2005 7:08 AM To: boost@lists.boost.org Subject: [boost] Re: Customer Friendlier Boost Installation
"Brian Braatz" <brianb@rmtg.com> writes:
HAVING said that here is the suggestion, reformed:
Boostenvcheck.exe become s a program which LISTS the dependencies for your configuration.
Can you show an example of what that output might look like? I don't even have a clear idea of what you mean by "dependencies" or "your configuration." [Brian Braatz Writes:]
I must say, I need to fully absorb how bjam \ boost.build interoperate, until doing so, please understand the details of this idea maybe ill formed. I get it conceptually, but it is still a "black box" in my head.
<snip example of non-Boost environment check>
when it says "passed"- I can quickly re-direct them back to their code. if they are not convinced, I can have them send me the report and I can look at it and try to determine where the issue is.
Well, let's look at the dependencies for Boost. 1. Boost.Build v2 (I'm ignoring v1 as we're going to retire it) A. Boost.Jam I. bjam in the PATH, or II. The contents of tools/build/jam_src available with which to build it. Should we check for every file? Just running the bjam build procedure does that by itself; does it make sense to build a redundant checker? B. The contents of tools/build/v2. Should we check for every file? C. Toolsets properly configured in user-config.jam and/or site-config.jam. Default versions of these configuration files ship with Boost.Build and are used unless the user supplies her own versions, so there's nothing to check for. Boost.Build itself is designed to detect when there are no toolsets configured or when toolsets are configured improperly. Should we really try to build a redundant checker? 2. The Boost header files for the libraries the user wants to use. Should we check for every file? 3. The libs/whatever/src and libs/whatever/build directories for any non-header-only libraries the user wants to use. Should we check for every file? I can't think of anything else. So what, precisely, should we check for, and what would the output look like if something were not found?
ADDTIIONAL scenario:
Lets say, in my compiler business, I have a scenario where I occasionally release to the users a bug fixed header file. I send out a mail with the new file and explicit instructions on where to put it.
After I have released a few bug fixed header files, I find users complaining about weird problems. Turns out, I am now back to spending an dreadful amount of time on the phone only to discover 9 times out of 10 the user did not follow instructions. 1 time out of 10 there actually was a bug in something I released. 10 times out of 10, the customer is frustrated. Even if the customer REALIZES THEY made the mistake, it still leaves them frustrated with ME and my PRODUCT.
So I elect to get a bit more extreme in my env checker.
I upgrade it so that it adds to the report a hash of all the "things it depends on", i.e. header files, link.exe etc.
So now, when the user has a problem, I have them send me the report. I can also make available to them a list of the hashes for the files which I have tested to "work".
I spend less time supporting my product, and my customers are happier because I can keep them running much more effectively.
I have put a system in place to "Introspect" the users environment. By doing so, I have decreased the amount of time I have to spend introspecting manually.
I understand the principle, but I don't understand how to apply it effectively in our case.
HOW THIS RELATES TO BOOST.BUILD: I need to understand boost.buiid better to give a better suggestion. Hopefully my example might inspire the "Dependancies" to shake out, even if I do not fully understand boost.build yet.
I believe this STYLE of thinking can be applied, but I have to get my current boost things done before I can start down this track.
As I said before, if the thinking here inspires someone to START something like this all the better . :)
IF NOT, I intend on tackling this in the future. (I first have to become a expert in boost.build though :))
I disagree. Understanding what the system depends on does not require understanding all its internals.
I would like to eventually see something that allows someone to SPIT out a report, mail it to the list, and have the people on the list be able to IMMEDIATELY tell the person what could be horked, or why it is not building for them.
That'd be great. The question is, what gets reported? -- Dave Abrahams Boost Consulting www.boost-consulting.com
participants (2)
-
Brian Braatz
-
David Abrahams