1 ################################################################################
5 ## $Date: 2006/01/14 18:08:00 +0100 $
7 ################################################################################
9 ## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz.
10 ## Version 2.x, Copyright (C) 2001, Paul Marquess.
11 ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
13 ## This program is free software; you can redistribute it and/or
14 ## modify it under the same terms as Perl itself.
16 ################################################################################
34 ppport.h - Perl/Pollution/Portability version __VERSION__
38 perl ppport.h [options] [source files]
40 Searches current directory for files if no [source files] are given
42 --help show short help
44 --patch=file write one patch file with changes
45 --copy=suffix write changed copies with suffix
46 --diff=program use diff program and options
48 --compat-version=version provide compatibility with Perl version
49 --cplusplus accept C++ comments
51 --quiet don't output anything except fatal errors
52 --nodiag don't show diagnostics
53 --nohints don't show hints
54 --nochanges don't suggest changes
55 --nofilter don't filter input files
57 --strip strip all script and doc functionality from
58 ppport.h (this, obviously, cannot be undone)
60 --list-provided list provided API
61 --list-unsupported list unsupported API
62 --api-info=name show Perl API portability information
66 This version of F<ppport.h> is designed to support operation with Perl
67 installations back to __MIN_PERL__, and has been tested up to __MAX_PERL__.
73 Display a brief usage summary.
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.
87 If neither C<--patch> or C<--copy> are given, the default is to
88 simply print the diffs for each file. This requires either
89 C<Text::Diff> or a C<diff> program to be installed.
91 =head2 --diff=I<program>
93 Manually set the diff program and options to use. The default
94 is to use C<Text::Diff>, when installed, and output unified
97 =head2 --compat-version=I<version>
99 Tell F<ppport.h> to check for compatibility with the given
100 Perl version. The default is to check for compatibility with Perl
101 version __MIN_PERL__. You can use this option to reduce the output
102 of F<ppport.h> if you intend to be backward compatible only
103 down to a certain Perl version.
107 Usually, F<ppport.h> will detect C++ style comments and
108 replace them with C style comments for portability reasons.
109 Using this option instructs F<ppport.h> to leave C++
114 Be quiet. Don't print anything except fatal errors.
118 Don't output any diagnostic messages. Only portability
119 alerts will be printed.
123 Don't output any hints. Hints often contain useful portability
128 Don't suggest any changes. Only give diagnostic output and hints
129 unless these are also deactivated.
133 Don't filter the list of input files. By default, files not looking
134 like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
138 Strip all script and documentation functionality from F<ppport.h>.
139 This reduces the size of F<ppport.h> dramatically and may be useful
140 if you want to include F<ppport.h> in smaller modules without
141 increasing their distribution size too much.
143 =head2 --list-provided
145 Lists the API elements for which compatibility is provided by
146 F<ppport.h>. Also lists if it must be explicitly requested,
147 if it has dependencies, and if there are hints for it.
149 =head2 --list-unsupported
151 Lists the API elements that are known not to be supported by
152 F<ppport.h> and below which version of Perl they probably
153 won't be available or work.
155 =head2 --api-info=I<name>
157 Show portability information for API elements matching I<name>.
158 If I<name> is surrounded by slashes, it is interpreted as a regular
163 In order for a Perl extension (XS) module to be as portable as possible
164 across differing versions of Perl itself, certain steps need to be taken.
170 Including this header is the first major one. This alone will give you
171 access to a large part of the Perl API that hasn't been available in
172 earlier Perl releases. Use
174 perl ppport.h --list-provided
176 to see which API elements are provided by ppport.h.
180 You should avoid using deprecated parts of the API. For example, using
181 global Perl variables without the C<PL_> prefix is deprecated. Also,
182 some API functions used to have a C<perl_> prefix. Using this form is
183 also deprecated. You can safely use the supported API, as F<ppport.h>
184 will provide wrappers for older Perl versions.
188 If you use one of a few functions or variables that were not present in
189 earlier versions of Perl, and that can't be provided using a macro, you
190 have to explicitly request support for these functions by adding one or
191 more C<#define>s in your source code before the inclusion of F<ppport.h>.
193 These functions or variables will be marked C<explicit> in the list shown
194 by C<--list-provided>.
196 Depending on whether you module has a single or multiple files that
197 use such functions or variables, you want either C<static> or global
200 For a C<static> function or variable (used only in a single source
203 #define NEED_function
204 #define NEED_variable
206 For a global function or variable (used in multiple source files),
209 #define NEED_function_GLOBAL
210 #define NEED_variable_GLOBAL
212 Note that you mustn't have more than one global request for the
213 same function or variable in your project.
217 To avoid namespace conflicts, you can change the namespace of the
218 explicitly exported functions / variables using the C<DPPP_NAMESPACE>
219 macro. Just C<#define> the macro before including C<ppport.h>:
221 #define DPPP_NAMESPACE MyOwnNamespace_
224 The default namespace is C<DPPP_>.
228 The good thing is that most of the above can be checked by running
229 F<ppport.h> on your source code. See the next section for
234 To verify whether F<ppport.h> is needed for your module, whether you
235 should make any changes to your code, and whether any special defines
236 should be used, F<ppport.h> can be run as a Perl script to check your
237 source code. Simply say:
241 The result will usually be a list of patches suggesting changes
242 that should at least be acceptable, if not necessarily the most
243 efficient solution, or a fix for all possible problems.
245 If you know that your XS module uses features only available in
246 newer Perl releases, if you're aware that it uses C++ comments,
247 and if you want all suggestions as a single patch file, you could
248 use something like this:
250 perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
252 If you only want your code to be scanned without any suggestions
255 perl ppport.h --nochanges
257 You can specify a different C<diff> program or options, using
258 the C<--diff> option:
260 perl ppport.h --diff='diff -C 10'
262 This would output context diffs with 10 lines of context.
264 To display portability information for the C<newSVpvn> function,
267 perl ppport.h --api-info=newSVpvn
269 Since the argument to C<--api-info> can be a regular expression,
272 perl ppport.h --api-info=/_nomg$/
274 to display portability information for all C<_nomg> functions or
276 perl ppport.h --api-info=/./
278 to display information for all known API elements.
282 If this version of F<ppport.h> is causing failure during
283 the compilation of this module, please check if newer versions
284 of either this module or C<Devel::PPPort> are available on CPAN
285 before sending a bug report.
287 If F<ppport.h> was generated using the latest version of
288 C<Devel::PPPort> and is causing failure of this module, please
289 file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
291 Please include the following information:
297 The complete output from running "perl -V"
305 The name and version of the module you were trying to build.
309 A full log of the build that failed.
313 Any other information that you think could be relevant.
317 For the latest version of this code, please get the C<Devel::PPPort>
322 Version 3.x, Copyright (c) 2004-2006, Marcus Holland-Moritz.
324 Version 2.x, Copyright (C) 2001, Paul Marquess.
326 Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
328 This program is free software; you can redistribute it and/or
329 modify it under the same terms as Perl itself.
333 See L<Devel::PPPort>.