GIF89a;
Direktori : /usr/share/doc/perl-ExtUtils-MakeMaker-6.68/ |
Current File : //usr/share/doc/perl-ExtUtils-MakeMaker-6.68/PATCHING |
"The easy way is always mined. The important things are always simple. The simple things are always hard." -- Some of Murphy's Laws of Combat This is a short set of guidelines for those patching ExtUtils::MakeMaker. Its not an iron-clad set of rules, but just things which make life easier when reading and integrating a patch. Lots of information can be found in makemaker.org. MakerMaker is being maintained until something else can replace it. Bugs will be fixed and compatibility improved, but I would like to avoid new features. If you want to add something to MakeMaker, consider instead working on Module::Build, MakeMaker's heir apparent. Reporting bugs - Often the only information we have for fixing a bug is contained in your report. So... - Please report your bugs via http://rt.cpan.org or by mailing to makemaker@perl.org. RT is preferred. - Please report your bug immediately upon encountering it. Do not wait until you have a patch to fix the bug. Patches are good, but not at the expense of timely bug reports. - Please be as verbose as possible. Include the complete output of your 'make test' or even 'make test TEST_VERBOSE=1' and a copy of the generated Makefile. Err on the side of verbosity. The more data we have to work with, the faster we can diagnose the problem. - If you find an undocumented feature, or if a feature has changed/been added which causes a problem, report it. Do not assume it was done deliberately. Even if it was done deliberately, we still want to hear if it caused problems. - If you're testing MakeMaker against a development version of Perl, please also check it against the latest stable version. This makes it easier to figure out if its MakeMaker or Perl at fault. Patching details - Please use unified diffs. (diff -u) - Patches against the latest development snapshot from makemaker.org are preferred. Patches against the latest CPAN version are ok, too. - Post your patch to makemaker@perl.org. Code formatting - No literal tabs (except where necessary inside Makefile code, obviously). - 4 character indentation. - this_style is prefered instead of studlyCaps. - Private subroutine names (ie. those used only in the same package they're declared in) should start with an underscore (_sekret_method). - Protected subroutines (ie. ones intended to be used by other modules in ExtUtils::*) should be named normally (no leading underscore) but documented as protected (see Documentation below). - Do not use indirect object syntax (ie. new Foo::Bar (@args)) - make variables use dollar signs like Perl scalars. This causes problems when you have to mix them both in a string. If you find yourself backwacking lots of dollar signs because you have one interpolated perl variable, like this: return <<EOT; subdirs :: \$(NOECHO)cd $subdir && \$(MAKE) -f \$(FIRST_MAKEFILE) all \$(PASTHRU) EOT or are switching quoting contexts: return q{ subdirs :: $(NOECHO)cd }.$subdir.q{ && $(MAKE) -f $(FIRST_MAKEFILE) all $(PASTHRU) }; consider using sprintf instead. return sprintf <<'EOT', $subdir; subdirs :: $(NOECHO)cd %s && $(MAKE) -f $(FIRST_MAKEFILE) all $(PASTHRU) EOT Refactoring and Cleanup - MakeMaker is a mess. We like patches which clean things up. Backwards Compatibility - MakeMaker must be backwards compatible to 5.5.4 (5.005_04). Avoid any obvious 5.6-isms (threads, warnings.pm, Unicode, our, v1.2.3, attributes open my $fh, lvalue subroutines, qr//, any new core modules, etc...). - MakeMaker should avoid having module dependencies. Avoid using modules which didn't come with 5.5.4 and avoid using features from newer versions. Sometimes this is unavoidable. Cross-Platform Compatibility - With the exception of MacOS Classic, MakeMaker must work on all architectures Perl works on (see perlport.pod). This means all Unixen (including Cygwin and MacOS X), Windows (including Win9x and DOS), and VMS. - Use the available macros rather than shell commands $(MV), $(CP), $(TOUCH), etc... - MakeMaker must work on many makes. GNU, BSD, Solaris, nmake, dmake, MMS and MMK to name the most common. Keep your make code as simple as possible. - Avoid special make variables (even $@). - Format targets as "target : dependency", the spacing is important. - Use $(NOECHO) instead of @. - Use - to tell make to ignore the exit code of a command. (Unfortunately, some make variants don't honor an $(IGNORE) macro). - Always put a space between $(NOECHO) and the command. - Always put a space between - (ignore) and the command. - Always put $(NOECHO) and - together, no space between them. # Right -$(NOECHO) command $(NOECHO) command - command - Often when you patch ExtUtils::MM_Unix, similar patches must be done to the other MM_* modules. If you can, please do this extra work otherwise I have to. If you can't, that's ok. We can help. - If possible, please test your patch on two Very Different architectures. Unix, Windows and VMS being Very Different. Note: Cygwin and OS X are Unixen for our purposes. - If nothing else, at least try it on two different Unixen or Windows machines (ie. Linux and IRIX or WinNT and Win95). - HP's TestDrive (www.testdrive.compaq.com) and SourceForge's compile farm (www.sourceforge.net) are good sources of testing machines of many different architectures and platforms. Accounts are free. - If you find yourself writing "do_this if $^O eq 'That'" (ie. checks on the OS type) perhaps your code belongs in one of the non-Unix MM_* modules (ie. MM_Win32, MM_VMS, etc...). If one does not exist, consider creating one. Its ok to have an MM_* module with only one method. - Some shells have very small buffers. This means command lines must be as small as possible. If your command is just too long, consider making it an ExtUtils::Command::MM function. If your command might receive many arguments (such as pod2man or pm_to_blib) consider using split_command() to split it into several, shorter calls. - Most shells quote differently. If you need to put a perl one-liner in the Makefile, please use oneliner() to generate it. Tests - Tests would be nice, but I'm not going to pretend testing MakeMaker is easy. If nothing else, let us know how you tested your patch by hand. Documentation - Documentation would be nice. - If the new feature/method is private, please document it with POD wrapped in "=begin/end private" tags. That way it will be documented, but won't be displayed (future versions of perldoc may have options to display). =begin private =head3 _foo_bar $mm->_foo_bar Blah blah blah =end private =cut sub _foo_bar { ... - If you're overriding a method, document that its an override and *why* its being overridden. Don't repeat the original documentation.