Upgrade to Encode 2.14
[p5sagit/p5-mst-13.2.git] / ext / Devel / PPPort / parts / inc / ppphdoc
CommitLineData
adfe19db 1################################################################################
2##
4a582685 3## $Revision: 21 $
adfe19db 4## $Author: mhx $
4a582685 5## $Date: 2005/02/27 21:13:25 +0100 $
adfe19db 6##
7################################################################################
8##
9132e1a3 9## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz.
adfe19db 10## Version 2.x, Copyright (C) 2001, Paul Marquess.
11## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
12##
13## This program is free software; you can redistribute it and/or
14## modify it under the same terms as Perl itself.
15##
16################################################################################
17
18=provides
19
20=dontwarn
21
22NEED_function
23NEED_function_GLOBAL
24DPPP_NAMESPACE
25
26=implementation
27
28=pod
29
30=head1 NAME
31
32ppport.h - Perl/Pollution/Portability version __VERSION__
33
34=head1 SYNOPSIS
35
4a582685 36 perl ppport.h [options] [source files]
37
38 Searches current directory for files if no [source files] are given
adfe19db 39
40 --help show short help
41
42 --patch=file write one patch file with changes
43 --copy=suffix write changed copies with suffix
44 --diff=program use diff program and options
45
46 --compat-version=version provide compatibility with Perl version
47 --cplusplus accept C++ comments
48
49 --quiet don't output anything except fatal errors
50 --nodiag don't show diagnostics
51 --nohints don't show hints
52 --nochanges don't suggest changes
4a582685 53 --nofilter don't filter input files
adfe19db 54
55 --list-provided list provided API
56 --list-unsupported list unsupported API
04fc8b94 57 --api-info=name show Perl API portability information
adfe19db 58
59=head1 COMPATIBILITY
60
61This version of F<ppport.h> is designed to support operation with Perl
62installations back to __MIN_PERL__, and has been tested up to __MAX_PERL__.
63
64=head1 OPTIONS
65
66=head2 --help
67
68Display a brief usage summary.
69
70=head2 --patch=I<file>
71
72If this option is given, a single patch file will be created if
73any changes are suggested. This requires a working diff program
74to be installed on your system.
75
76=head2 --copy=I<suffix>
77
78If this option is given, a copy of each file will be saved with
79the given suffix that contains the suggested changes. This does
80not require any external programs.
81
82If neither C<--patch> or C<--copy> are given, the default is to
83simply print the diffs for each file. This requires either
84C<Text::Diff> or a C<diff> program to be installed.
85
86=head2 --diff=I<program>
87
88Manually set the diff program and options to use. The default
89is to use C<Text::Diff>, when installed, and output unified
90context diffs.
91
92=head2 --compat-version=I<version>
93
94Tell F<ppport.h> to check for compatibility with the given
95Perl version. The default is to check for compatibility with Perl
96version __MIN_PERL__. You can use this option to reduce the output
97of F<ppport.h> if you intend to be backward compatible only
98up to a certain Perl version.
99
100=head2 --cplusplus
101
102Usually, F<ppport.h> will detect C++ style comments and
103replace them with C style comments for portability reasons.
104Using this option instructs F<ppport.h> to leave C++
105comments untouched.
106
107=head2 --quiet
108
109Be quiet. Don't print anything except fatal errors.
110
111=head2 --nodiag
112
113Don't output any diagnostic messages. Only portability
114alerts will be printed.
115
116=head2 --nohints
117
118Don't output any hints. Hints often contain useful portability
119notes.
120
121=head2 --nochanges
122
123Don't suggest any changes. Only give diagnostic output and hints
124unless these are also deactivated.
125
4a582685 126=head2 --nofilter
127
128Don't filter the list of input files. By default, files not looking
129like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
130
adfe19db 131=head2 --list-provided
132
133Lists the API elements for which compatibility is provided by
134F<ppport.h>. Also lists if it must be explicitly requested,
135if it has dependencies, and if there are hints for it.
136
137=head2 --list-unsupported
138
139Lists the API elements that are known not to be supported by
140F<ppport.h> and below which version of Perl they probably
141won't be available or work.
142
04fc8b94 143=head2 --api-info=I<name>
144
145Show portability information for API elements matching I<name>.
9132e1a3 146If I<name> is surrounded by slashes, it is interpreted as a regular
147expression.
04fc8b94 148
adfe19db 149=head1 DESCRIPTION
150
151In order for a Perl extension (XS) module to be as portable as possible
152across differing versions of Perl itself, certain steps need to be taken.
153
154=over 4
155
156=item *
157
158Including this header is the first major one. This alone will give you
159access to a large part of the Perl API that hasn't been available in
160earlier Perl releases. Use
161
162 perl ppport.h --list-provided
163
164to see which API elements are provided by ppport.h.
165
166=item *
167
168You should avoid using deprecated parts of the API. For example, using
169global Perl variables without the C<PL_> prefix is deprecated. Also,
170some API functions used to have a C<perl_> prefix. Using this form is
171also deprecated. You can safely use the supported API, as F<ppport.h>
172will provide wrappers for older Perl versions.
173
174=item *
175
176If you use one of a few functions that were not present in earlier
177versions of Perl, and that can't be provided using a macro, you have
178to explicitly request support for these functions by adding one or
179more C<#define>s in your source code before the inclusion of F<ppport.h>.
180
181These functions will be marked C<explicit> in the list shown by
182C<--list-provided>.
183
184Depending on whether you module has a single or multiple files that
185use such functions, you want either C<static> or global variants.
186
187For a C<static> function, use:
188
189 #define NEED_function
190
191For a global function, use:
192
193 #define NEED_function_GLOBAL
194
195Note that you mustn't have more than one global request for one
196function in your project.
197
198 __EXPLICIT_API__
199
200To avoid namespace conflicts, you can change the namespace of the
201explicitly exported functions using the C<DPPP_NAMESPACE> macro.
202Just C<#define> the macro before including C<ppport.h>:
203
204 #define DPPP_NAMESPACE MyOwnNamespace_
205 #include "ppport.h"
206
207The default namespace is C<DPPP_>.
208
209=back
210
211The good thing is that most of the above can be checked by running
212F<ppport.h> on your source code. See the next section for
213details.
214
215=head1 EXAMPLES
216
217To verify whether F<ppport.h> is needed for your module, whether you
218should make any changes to your code, and whether any special defines
219should be used, F<ppport.h> can be run as a Perl script to check your
220source code. Simply say:
221
222 perl ppport.h
223
224The result will usually be a list of patches suggesting changes
225that should at least be acceptable, if not necessarily the most
226efficient solution, or a fix for all possible problems.
227
228If you know that your XS module uses features only available in
229newer Perl releases, if you're aware that it uses C++ comments,
230and if you want all suggestions as a single patch file, you could
231use something like this:
232
233 perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
234
235If you only want your code to be scanned without any suggestions
236for changes, use:
237
238 perl ppport.h --nochanges
239
240You can specify a different C<diff> program or options, using
241the C<--diff> option:
242
243 perl ppport.h --diff='diff -C 10'
244
245This would output context diffs with 10 lines of context.
246
9132e1a3 247To display portability information for the C<newSVpvn> function,
248use:
249
250 perl ppport.h --api-info=newSVpvn
251
252Since the argument to C<--api-info> can be a regular expression,
253you can use
254
255 perl ppport.h --api-info=/_nomg$/
256
257to display portability information for all C<_nomg> functions or
258
259 perl ppport.h --api-info=/./
260
261to display information for all known API elements.
262
adfe19db 263=head1 BUGS
264
265If this version of F<ppport.h> is causing failure during
266the compilation of this module, please check if newer versions
267of either this module or C<Devel::PPPort> are available on CPAN
268before sending a bug report.
269
270If F<ppport.h> was generated using the latest version of
271C<Devel::PPPort> and is causing failure of this module, please
272file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
273
274Please include the following information:
275
276=over 4
277
278=item 1.
279
280The complete output from running "perl -V"
281
282=item 2.
283
284This file.
285
286=item 3.
287
288The name and version of the module you were trying to build.
289
290=item 4.
291
292A full log of the build that failed.
293
294=item 5.
295
296Any other information that you think could be relevant.
297
298=back
299
300For the latest version of this code, please get the C<Devel::PPPort>
301module from CPAN.
302
303=head1 COPYRIGHT
304
9132e1a3 305Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz.
adfe19db 306
307Version 2.x, Copyright (C) 2001, Paul Marquess.
308
309Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
310
311This program is free software; you can redistribute it and/or
312modify it under the same terms as Perl itself.
313
314=head1 SEE ALSO
315
316See L<Devel::PPPort>.
317