From: Eric S. <ems...@fc...> - 2002-06-03 22:57:59
|
So I took it upon myself to tidy up the lang/perl directory, and I'm mostly done with it. What I did was to take the existing code and reformat it to work with Perl's ExtUtils::MakeMaker system. This creates a set of files with a Makefile.PL file. This Makefile.PL file is essentially a Perl program that creates a Makefile that you can then run. The disadvantage, of course, is that it creates another Makefile. I have read the "recursive makefiles considered harmful" paper, and I more or less agree with most of the principles of it. However, in this case, I think the benefits far outweigh the problems, and several of the problems are quite mitigate-able, since the Makefile.PL is a Perl program, after all. The benefits are: Perl creates your Makefile, so it already knows where to install binary and arch-independent extensions to itself. You, as a Perl extension author, shouldn't need to care about all that stuff-- just ask Perl to install for you, and It Just Works(tm). Perl also handles all the overhead of creating C function prototypes and all the Perl arguments translation for you, so you can concentrate on writing code instead of doing stuff like all that "#ifdef PERL5_6" and STAF_PERL_API_PROLOGUE, and so on. I was able to reduce PLSTAF_Register from 49 lines to 28, by letting Perl handle that sort of thing. HOWEVER, there's a catch-- a weirdness that I don't quite get. I was able to compile and install the PLSTAF binary and Perl modules (oh, and I recast the PLSTAF.pm module to use prototypes, which negates the need for a lot of the manual args-checking you were doing). If I run STAF.pl, as-is, it hangs at STAF::Register. If I just add the line else { print ""; } to the "if ($rc != 0)" statement, then everything works correctly. Much weirdness. I've attached my .tar.gz file (it's < 7k); if anybody can take a look at what I've done and figure out why adding the empty print statement is making it work (and more importantly, how to fix that), that would be great. -=Eric |