The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NEED_function NEED_function_GLOBAL DPPP_NAMESPACE

NAME

ppport.h - Perl/Pollution/Portability version __VERSION__

SYNOPSIS

  perl ppport.h [options] [files]

  --help                      show short help

  --patch=file                write one patch file with changes
  --copy=suffix               write changed copies with suffix
  --diff=program              use diff program and options

  --compat-version=version    provide compatibility with Perl version
  --cplusplus                 accept C++ comments

  --quiet                     don't output anything except fatal errors
  --nodiag                    don't show diagnostics
  --nohints                   don't show hints
  --nochanges                 don't suggest changes

  --list-provided             list provided API
  --list-unsupported          list unsupported API

COMPATIBILITY

This version of ppport.h is designed to support operation with Perl installations back to __MIN_PERL__, and has been tested up to __MAX_PERL__.

OPTIONS

--help

Display a brief usage summary.

--patch=file

If this option is given, a single patch file will be created if any changes are suggested. This requires a working diff program to be installed on your system.

--copy=suffix

If this option is given, a copy of each file will be saved with the given suffix that contains the suggested changes. This does not require any external programs.

If neither --patch or --copy are given, the default is to simply print the diffs for each file. This requires either Text::Diff or a diff program to be installed.

--diff=program

Manually set the diff program and options to use. The default is to use Text::Diff, when installed, and output unified context diffs.

--compat-version=version

Tell ppport.h to check for compatibility with the given Perl version. The default is to check for compatibility with Perl version __MIN_PERL__. You can use this option to reduce the output of ppport.h if you intend to be backward compatible only up to a certain Perl version.

--cplusplus

Usually, ppport.h will detect C++ style comments and replace them with C style comments for portability reasons. Using this option instructs ppport.h to leave C++ comments untouched.

--quiet

Be quiet. Don't print anything except fatal errors.

--nodiag

Don't output any diagnostic messages. Only portability alerts will be printed.

--nohints

Don't output any hints. Hints often contain useful portability notes.

--nochanges

Don't suggest any changes. Only give diagnostic output and hints unless these are also deactivated.

--list-provided

Lists the API elements for which compatibility is provided by ppport.h. Also lists if it must be explicitly requested, if it has dependencies, and if there are hints for it.

--list-unsupported

Lists the API elements that are known not to be supported by ppport.h and below which version of Perl they probably won't be available or work.

DESCRIPTION

In order for a Perl extension (XS) module to be as portable as possible across differing versions of Perl itself, certain steps need to be taken.

  • Including this header is the first major one. This alone will give you access to a large part of the Perl API that hasn't been available in earlier Perl releases. Use

        perl ppport.h --list-provided

    to see which API elements are provided by ppport.h.

  • You should avoid using deprecated parts of the API. For example, using global Perl variables without the PL_ prefix is deprecated. Also, some API functions used to have a perl_ prefix. Using this form is also deprecated. You can safely use the supported API, as ppport.h will provide wrappers for older Perl versions.

  • If you use one of a few functions that were not present in earlier versions of Perl, and that can't be provided using a macro, you have to explicitly request support for these functions by adding one or more #defines in your source code before the inclusion of ppport.h.

    These functions will be marked explicit in the list shown by --list-provided.

    Depending on whether you module has a single or multiple files that use such functions, you want either static or global variants.

    For a static function, use:

        #define NEED_function

    For a global function, use:

        #define NEED_function_GLOBAL

    Note that you mustn't have more than one global request for one function in your project.

        __EXPLICIT_API__

    To avoid namespace conflicts, you can change the namespace of the explicitly exported functions using the DPPP_NAMESPACE macro. Just #define the macro before including ppport.h:

        #define DPPP_NAMESPACE MyOwnNamespace_
        #include "ppport.h"

    The default namespace is DPPP_.

The good thing is that most of the above can be checked by running ppport.h on your source code. See the next section for details.

EXAMPLES

To verify whether ppport.h is needed for your module, whether you should make any changes to your code, and whether any special defines should be used, ppport.h can be run as a Perl script to check your source code. Simply say:

    perl ppport.h

The result will usually be a list of patches suggesting changes that should at least be acceptable, if not necessarily the most efficient solution, or a fix for all possible problems.

If you know that your XS module uses features only available in newer Perl releases, if you're aware that it uses C++ comments, and if you want all suggestions as a single patch file, you could use something like this:

    perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff

If you only want your code to be scanned without any suggestions for changes, use:

    perl ppport.h --nochanges

You can specify a different diff program or options, using the --diff option:

    perl ppport.h --diff='diff -C 10'

This would output context diffs with 10 lines of context.

BUGS

If this version of ppport.h is causing failure during the compilation of this module, please check if newer versions of either this module or Devel::PPPort are available on CPAN before sending a bug report.

If ppport.h was generated using the latest version of Devel::PPPort and is causing failure of this module, please file a bug report using the CPAN Request Tracker at http://rt.cpan.org/.

Please include the following information:

  1. The complete output from running "perl -V"

  2. This file.

  3. The name and version of the module you were trying to build.

  4. A full log of the build that failed.

  5. Any other information that you think could be relevant.

For the latest version of this code, please get the Devel::PPPort module from CPAN.

COPYRIGHT

Version 3.x, Copyright (c) 2004, Marcus Holland-Moritz.

Version 2.x, Copyright (C) 2001, Paul Marquess.

Version 1.x, Copyright (C) 1999, Kenneth Albanowski.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

See Devel::PPPort.

3 POD Errors

The following errors were encountered while parsing the POD:

Around line 18:

Unknown directive: =provides

Around line 20:

Unknown directive: =dontwarn

Around line 26:

Unknown directive: =implementation