On Tue, Jun 3, 2008 at 2:54 PM, Geoffrey Broadwell <[EMAIL PROTECTED]> wrote:
> On Tue, 2008-06-03 at 08:33 -0700, Will Coleda wrote:
>> # New Ticket Created by  Will Coleda
>> # Please include the string:  [perl #55238]
>> # in the subject line of all future correspondence about this issue.
>> # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=55238 >
>>
>>
>> ./parrot -o runtime/parrot/library/OpenGL.pbc 
>> runtime/parrot/library/OpenGL.pir
>> error:imcc:No such file or directory
>>         in file 'runtime/parrot/library/OpenGL.pir' line 79
>> make: *** [runtime/parrot/library/OpenGL.pbc] Error 2
>>
>> The offending line is shown below:
>>
>>     76
>>     77  .namespace ['OpenGL']
>>     78
>>     79  .include 'library/OpenGL_funcs.pir'
>>     80
>>     81
>>     82  =item _opengl_init()
>>
>> "OpenGL_funcs.pir'" doesn't appear to be in the repository, so when we
>> try to build it, it dies.
>>
>> svn blame says.
>>
>>  27975      japhb .include 'library/OpenGL_funcs.pir'
>>
>> Regards.
>
> That file is generated during Configure.pl (by config/gen/opengl.pm).  I
> have a pending question out asking what the right place is to add
> makefile dependencies for libraries in runtime/parrot/library/ (because
> most of them contain at least dependencies on generated files in
> runtime/parrot/include that as far as I can tell we don't enforce).
> Unfortunately, each time I've asked, I've been Warnocked.

Build dependencies _must_ be listed in the makefile; we need more deps
here, not fewer. Are you asking where in root.in they should go?
doesn't matter, carve out a section. ^_^

(Please take the rest of this as a documentation of a rant which is
not specifically directed at you. Some enterprising person could
probably break this up into an RT or two =-)

We have a few kinds of generated files at the moment:

1) generated by normal config
2) generated by config with special maintainer options
3) generated by some funky command line that isn't part of the build
and you have to remember when to run it. (like when adding/deleting
opcodes)
4) generated during the build process.

Step 3 should go away, and either become part of step 2, or step 4,
depending on if a non-standard tool is required.
Step 2 can go away and be replaced by a clever config option that
detects whether or not you have the tools installed. If not, then you
get "touch" and a warning. Everything still depends on each other, but
if you don't have the tool, you can't rebuild the file. (In fact, we
might want to replace this by a failure, not a touch: if you change a
file that generated files depend on and you can't update the generated
(checked in) files, you shouldn't be editing that file in the first
place, now should you?)

Additionally, there are some files (e.g. Parrot::Config) which are
smart enough to at least complain if they need configure to be run and
it hasn't.

Sadly, none of this addresses the issue you present here, which is:
how could I have avoided a realclean after this update. Unifying the
build process is is going to involve a revamp of config, however,
which is a whole can of worms I'm trying to avoid just this second. In
the mean time, we can at least reduce the kinds of generated files we
have by half by cutting out types 2 & 3 above.

A good intermediate step would be to create a dependency for
config-generated files that stopped the build with the message "You
must re-Configure parrot to generate this file."; If we ever have the
ability to generate that file as the type 4 files above, we can just
change the build step there to actually gen the file instead of
complaining.

> There is, however, another problem here.  I'm not sure how you ended up
> *not* having an OpenGL_funcs.pir when you went to make.

Because I did an update and then a make. I typically fallback and do a
realclean and rebuild, but apparently did not in this case.

So, your patch here was just fine, as far as we do things today, but I
hope we can find a way to do better. =-)

Feel free to resolve the ticket.

>  According to
> config/gen/makefiles/root.in , OpenGL_funcs.pir is conditioned on
> has_opengl and included in GEN_PASM_INCLUDES, which is part of
> CONFIGURE_GENERATED_FILES, which should *not* be removed on 'make
> clean', only on 'make realclean'.  And the latter requires a 'perl
> Configure.pl' afterwards, which regenerates that file!
>
> In the mean time, a 'make realclean; perl Configure.pl; make' ought to
> fix it for you.  But I still want to know how you ended up ready to make
> without having that file.
>
>
> -'f

-- 
Will "Coke" Coleda

Reply via email to