On Oct 6, 2012, at 11:54 AM, Left Right <olegsivo...@gmail.com> wrote:
>> Please respond to questions in line rather than a big blob at the end of the >> message filled with questions. > > Sorry, it probably depends on the mail client you are using. But I'll > try to improve, we'll see if it's any better. > > On Oct 5, 2012, at 7:59 AM, Left Right <olegsivo...@gmail.com> wrote: > >>> - provide an additional (xml) file with settings (that's how I'm going >>> to go about compilation). > >> Does this file have a static name and/or belong in a fixed place relative to >> the source file or the project file? >> (In essence this file becomes a source, since changing it should cause a >> recompile) > > Erm... no, it's been deleted right after the compiler finishes. I'm > creating it only because constructing a command in the command line > may overload the command line. Perhaps in the future I'll have a > wrapper for the compiler to communicate to it directly, and this file > will not be needed. SCons can do this for you.. You can use something like this for your action: env['CCCOM'] = '${TEMPFILE("$CC $_MSVC_OUTPUT_FLAG /c $CHANGED_SOURCES $CFLAGS $CCFLAGS $_CCCOMCOM")}' the ${TEMPFILE(….)} will output the contents to a file to get around long compile line issues. > >>> - specify these settings on command line when calling the compiler (in >>> the worst case you risk to overload the command line, it may easily >>> get too long). > >> This wouldn't apply to a SCons build right? You might specify FLEX_FLAGS or >> something like that that the user my alter in their scons logic. > > Yes, this is what I wanted to get from Environment (Variables, or > whichever other way is best), or have some defaults. I'm not sure how > to answer about SCons build. It will only affect my extension code. You should read this section: http://scons.org/doc/production/HTML/scons-user/c2092.html > >>> - read some of them from the source code - there are some particular >>> compiler metadata that instructs it about project settings / parts >>> (none of my concerns, the compiler will do here on its own) > >> Does this impact the generated files from such a source file? (Does it >> change the name or produce more or less files?) > > Yes, it does, here's a very basic example: > > package { > [SWF(name="something.swf")] > class X extends Sprite { ... }} > > This is how source code may look, and, let's say this file is called > something_else.as. The compiler will generate something.swf from it. > It can also cause more files to be produced (if it infers something is > a module, then it will compile it into a separate binary). I can't > think of a situation when there will be less files generated. O.k. So you'll likely need a scanner and/or an emitter for your builder. > >>>> So it parses the sources looking for info on it's dependencies? >>> It's not that simple... some times you need to "help" it. I.e. you may >>> force including a source, which isn't referenced directly from code, >>> or you may ask it to not link statically a particular source, because >>> you will provide it at runtime. And, in case when you compile a >>> library, you will most certainly be looking for the list of sources on >>> your own (just list all sources in a directory is what will do in most >>> cases). > > How do you "Help"? How do you force including a source,etc.. (as you > state above) > > There are many ways, but few common ones would be: > > $ mxmlc <other argumens> -include-library lib0.swc -include-library lib1.swc > ... > > where mxmlc is the compiler and -nclude-library tells it to include > the entire library, similarly, it can be -include-class, -include-file > and perhas there's some more... > It can also include locales, stylesheets, some XML settings files for > RPC... well, I'd need to search through the options to build an > exhaustive list. > The thing about it is that including libraries is usually simple: you > only need to know what's the name of the library, and there aren't > many. But when including separate classes, you would need some > scripting help, because there will be tents or hundreds. One way of > doing it is by generating a manifest file, where all classes are > mentioned and give it to the compiler. It also knows how to handle > these particular files. That's fine when compiling on the command line manually, but doesn't really scale to a repeatable process doe it? You need to think in terms of sources and targets, and flags which affect the generation of the command line. So if it's common for a user to specify --include-library, then you might make a variable "FLEX_INC_LIBS", which then get's expanded using probably _concat (Here's an example from Default.py) '_LIBFLAGS' : '${_concat(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, __env__)}', > >>> Re' environment. I'm not sure yet... can I somehow make users create a >>> different environment, when they do Env()? > >> Not sure what you mean by this at all, can you restate it? (or clarify) > >> Can you paste some code for this so we can see what you're doing? > >> Hope that helps! >> -Bill > > I've uploaded some code but, beware, it's REALLY UGLY :) Sorry, I had > to emphasize it. This is because I'm trying to understand how it > works, and by no means I'm not going to keep it like that. > So, here it is: https://code.google.com/p/scons-flash/ Looks like you really need to read: http://scons.org/wiki/ToolsForFools if you haven't already. Your code is touching way to much SCons internals. Looks like you really have 6 builders: env.Append(BUILDERS = {'Swf' : Swf, 'Swc' : Swc, 'FlashDir' : FlashDir, 'FlashDevelop' : FlashDevelop, 'FlashBuilder' : FlexBuilder, 'Air' : Air}) I'd dump the "Smart" builder, and make it a pseudo-builder.. (which is really what it is..) Hope this helps! -Bill _______________________________________________ Scons-dev mailing list Scons-dev@scons.org http://two.pairlist.net/mailman/listinfo/scons-dev