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