1 ################################################################################
3 ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
4 ## Version 2.x, Copyright (C) 2001, Paul Marquess.
5 ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
7 ## This program is free software; you can redistribute it and/or
8 ## modify it under the same terms as Perl itself.
10 ################################################################################
28 ppport.h - Perl/Pollution/Portability version __VERSION__
32 perl ppport.h [options] [source files]
34 Searches current directory for files if no [source files] are given
36 --help show short help
38 --version show version
40 --patch=file write one patch file with changes
41 --copy=suffix write changed copies with suffix
42 --diff=program use diff program and options
44 --compat-version=version provide compatibility with Perl version
45 --cplusplus accept C++ comments
47 --quiet don't output anything except fatal errors
48 --nodiag don't show diagnostics
49 --nohints don't show hints
50 --nochanges don't suggest changes
51 --nofilter don't filter input files
53 --strip strip all script and doc functionality
56 --list-provided list provided API
57 --list-unsupported list unsupported API
58 --api-info=name show Perl API portability information
62 This version of F<ppport.h> is designed to support operation with Perl
63 installations back to __MIN_PERL__, and has been tested up to __MAX_PERL__.
69 Display a brief usage summary.
73 Display the version of F<ppport.h>.
75 =head2 --patch=I<file>
77 If this option is given, a single patch file will be created if
78 any changes are suggested. This requires a working diff program
79 to be installed on your system.
81 =head2 --copy=I<suffix>
83 If this option is given, a copy of each file will be saved with
84 the given suffix that contains the suggested changes. This does
85 not require any external programs. Note that this does not
86 automagically add a dot between the original filename and the
87 suffix. If you want the dot, you have to include it in the option
90 If neither C<--patch> or C<--copy> are given, the default is to
91 simply print the diffs for each file. This requires either
92 C<Text::Diff> or a C<diff> program to be installed.
94 =head2 --diff=I<program>
96 Manually set the diff program and options to use. The default
97 is to use C<Text::Diff>, when installed, and output unified
100 =head2 --compat-version=I<version>
102 Tell F<ppport.h> to check for compatibility with the given
103 Perl version. The default is to check for compatibility with Perl
104 version __MIN_PERL__. You can use this option to reduce the output
105 of F<ppport.h> if you intend to be backward compatible only
106 down to a certain Perl version.
110 Usually, F<ppport.h> will detect C++ style comments and
111 replace them with C style comments for portability reasons.
112 Using this option instructs F<ppport.h> to leave C++
117 Be quiet. Don't print anything except fatal errors.
121 Don't output any diagnostic messages. Only portability
122 alerts will be printed.
126 Don't output any hints. Hints often contain useful portability
127 notes. Warnings will still be displayed.
131 Don't suggest any changes. Only give diagnostic output and hints
132 unless these are also deactivated.
136 Don't filter the list of input files. By default, files not looking
137 like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
141 Strip all script and documentation functionality from F<ppport.h>.
142 This reduces the size of F<ppport.h> dramatically and may be useful
143 if you want to include F<ppport.h> in smaller modules without
144 increasing their distribution size too much.
146 The stripped F<ppport.h> will have a C<--unstrip> option that allows
147 you to undo the stripping, but only if an appropriate C<Devel::PPPort>
150 =head2 --list-provided
152 Lists the API elements for which compatibility is provided by
153 F<ppport.h>. Also lists if it must be explicitly requested,
154 if it has dependencies, and if there are hints or warnings for it.
156 =head2 --list-unsupported
158 Lists the API elements that are known not to be supported by
159 F<ppport.h> and below which version of Perl they probably
160 won't be available or work.
162 =head2 --api-info=I<name>
164 Show portability information for API elements matching I<name>.
165 If I<name> is surrounded by slashes, it is interpreted as a regular
170 In order for a Perl extension (XS) module to be as portable as possible
171 across differing versions of Perl itself, certain steps need to be taken.
177 Including this header is the first major one. This alone will give you
178 access to a large part of the Perl API that hasn't been available in
179 earlier Perl releases. Use
181 perl ppport.h --list-provided
183 to see which API elements are provided by ppport.h.
187 You should avoid using deprecated parts of the API. For example, using
188 global Perl variables without the C<PL_> prefix is deprecated. Also,
189 some API functions used to have a C<perl_> prefix. Using this form is
190 also deprecated. You can safely use the supported API, as F<ppport.h>
191 will provide wrappers for older Perl versions.
195 If you use one of a few functions or variables that were not present in
196 earlier versions of Perl, and that can't be provided using a macro, you
197 have to explicitly request support for these functions by adding one or
198 more C<#define>s in your source code before the inclusion of F<ppport.h>.
200 These functions or variables will be marked C<explicit> in the list shown
201 by C<--list-provided>.
203 Depending on whether you module has a single or multiple files that
204 use such functions or variables, you want either C<static> or global
207 For a C<static> function or variable (used only in a single source
210 #define NEED_function
211 #define NEED_variable
213 For a global function or variable (used in multiple source files),
216 #define NEED_function_GLOBAL
217 #define NEED_variable_GLOBAL
219 Note that you mustn't have more than one global request for the
220 same function or variable in your project.
224 To avoid namespace conflicts, you can change the namespace of the
225 explicitly exported functions / variables using the C<DPPP_NAMESPACE>
226 macro. Just C<#define> the macro before including C<ppport.h>:
228 #define DPPP_NAMESPACE MyOwnNamespace_
231 The default namespace is C<DPPP_>.
235 The good thing is that most of the above can be checked by running
236 F<ppport.h> on your source code. See the next section for
241 To verify whether F<ppport.h> is needed for your module, whether you
242 should make any changes to your code, and whether any special defines
243 should be used, F<ppport.h> can be run as a Perl script to check your
244 source code. Simply say:
248 The result will usually be a list of patches suggesting changes
249 that should at least be acceptable, if not necessarily the most
250 efficient solution, or a fix for all possible problems.
252 If you know that your XS module uses features only available in
253 newer Perl releases, if you're aware that it uses C++ comments,
254 and if you want all suggestions as a single patch file, you could
255 use something like this:
257 perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
259 If you only want your code to be scanned without any suggestions
262 perl ppport.h --nochanges
264 You can specify a different C<diff> program or options, using
265 the C<--diff> option:
267 perl ppport.h --diff='diff -C 10'
269 This would output context diffs with 10 lines of context.
271 If you want to create patched copies of your files instead, use:
273 perl ppport.h --copy=.new
275 To display portability information for the C<newSVpvn> function,
278 perl ppport.h --api-info=newSVpvn
280 Since the argument to C<--api-info> can be a regular expression,
283 perl ppport.h --api-info=/_nomg$/
285 to display portability information for all C<_nomg> functions or
287 perl ppport.h --api-info=/./
289 to display information for all known API elements.
293 If this version of F<ppport.h> is causing failure during
294 the compilation of this module, please check if newer versions
295 of either this module or C<Devel::PPPort> are available on CPAN
296 before sending a bug report.
298 If F<ppport.h> was generated using the latest version of
299 C<Devel::PPPort> and is causing failure of this module, please
300 send a bug report to L<perlbug@perl.org|mailto:perlbug@perl.org>.
302 Please include the following information:
308 The complete output from running "perl -V"
316 The name and version of the module you were trying to build.
320 A full log of the build that failed.
324 Any other information that you think could be relevant.
328 For the latest version of this code, please get the C<Devel::PPPort>
333 Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz.
335 Version 2.x, Copyright (C) 2001, Paul Marquess.
337 Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
339 This program is free software; you can redistribute it and/or
340 modify it under the same terms as Perl itself.
344 See L<Devel::PPPort>.