1Alien::Build::Manual::CUosnetrriCbounttirnigb(u3t)ed PerAlliDeonc:u:mBeunitladt:i:oMnanual::Contributing(3)
2
3
4

NAME

6       Alien::Build::Manual::Contributing - Over-detailed contributing guide
7

VERSION

9       version 1.55
10

SYNOPSIS

12        perldoc Alien::Build::Manual::Contributing
13

DESCRIPTION

15       Thank you for considering to contribute to my open source project!  If
16       you have a small patch please consider just submitting it.  Doing so
17       through the project GitHub is probably the best way:
18
19       <https://github.com/plicease/Alien-Build/issues>
20
21       If you have a more invasive enhancement or bugfix to contribute, please
22       take the time to review these guidelines.  In general it is good idea
23       to work closely with the Alien::Build developers, and the best way to
24       contact them is on the "#native" IRC channel on irc.perl.org.
25
26   History
27       Joel Berger wrote the original Alien::Base.  This distribution included
28       the runtime code Alien::Base and an installer class
29       Alien::Base::ModuleBuild.  The significant thing about Alien::Base was
30       that it provided tools to make it relatively easy for people to roll
31       their own Alien distributions.  Over time, the Perl5-Alien (github
32       organization) or "Alien::Base team" has taken over development of
33       Alien::Base with myself (Graham Ollis) being responsible for
34       integration and releases.  Joel Berger is still involved in the
35       project.
36
37       Since the original development of Alien::Base, Module::Build, on which
38       Alien::Base::ModuleBuild is based, has been removed from the core of
39       Perl.  It seemed worthwhile to write a replacement installer that works
40       with ExtUtils::MakeMaker which IS still bundled with the Perl core.
41       Because this is a significant undertaking it is my intention to
42       integrate the many lessons learned by Joel Berger, myself and the
43       "Alien::Base team" as possible.  If the interface seems good then it is
44       because I've stolen the ideas from some pretty good places.
45
46   Philosophy
47       avoid dependencies
48
49       One of the challenges with Alien development is that you are by the
50       nature of the problem, trying to make everyone happy.  Developers
51       working out of CPAN just want stuff to work, and some build
52       environments can be hostile in terms of tool availability, so for
53       reliability you end up pulling a lot of dependencies.  On the other
54       hand, operating system vendors who are building Perl modules usually
55       want to use the system version of a library so that they do not have to
56       patch libraries in multiple places.  Such vendors have to package any
57       extra dependencies and having to do so for packages that the don't even
58       use makes them understandably unhappy.
59
60       As general policy the Alien::Build core should have as few dependencies
61       as possible, and should only pull extra dependencies if they are
62       needed.  Where dependencies cannot be avoidable, popular and reliable
63       CPAN modules, which are already available as packages in the major
64       Linux vendors (Debian, Red Hat) should be preferred.
65
66       As such Alien::Build is hyper aggressive at using dynamic
67       prerequisites.
68
69       interface agnostic
70
71       One of the challenges with Alien::Buil::ModuleBuild was that
72       Module::Build was pulled from the core.  In addition, there is a degree
73       of hostility toward Module::Build in some corners of the Perl
74       community.  I agree with Joel Berger's rationale for choosing
75       Module::Build at the time, as I believe its interface more easily lends
76       itself to building Alien distributions.
77
78       That said, an important feature of Alien::Build is that it is installer
79       agnostic.  Although it is initially designed to work with
80       ExtUtils::MakeMaker, it has been designed from the ground up to work
81       with any installer (Perl, or otherwise).
82
83       As an extension of this, although Alien::Build may have external CPAN
84       dependencies, they should not be exposed to developers USING
85       Alien::Build.  As an example, Path::Tiny is used heavily internally
86       because it does what File::Spec does, plus the things that it doesn't,
87       and uses forward slashes on Windows (backslashes are the "correct
88       separator on windows, but actually using them tends to break
89       everything).  However, there aren't any interfaces in Alien::Build that
90       will return a Path::Tiny object (or if there are, then this is a bug).
91
92       This means that if we ever need to port Alien::Build to a platform that
93       doesn't support Path::Tiny (such as VMS), then it may require some work
94       to Alien::Build itself, modules that USE Alien::Build shouldn't need to
95       be modified.
96
97       plugable
98
99       The actual logic that probes the system, downloads source and builds it
100       should be as pluggable as possible.  One of the challenges with
101       Alien::Build::ModuleBuild was that it was designed to work well with
102       software that works with "autoconf" and "pkg-config".  While you can
103       build with other tools, you have to know a bit of how the installer
104       logic works, and which hooks need to be tweaked.
105
106       Alien::Build has plugins for "autoconf", "pkgconf" (successor of
107       "pkg-config"), vanilla Makefiles, and CMake.  If your build system
108       doesn't have a plugin, then all you have to do is write one!  Plugins
109       that prove their worth may be merged into the Alien::Build core.
110       Plugins that after a while feel like maybe not such a good idea may be
111       removed from the core, or even from CPAN itself.
112
113       In addition, Alien::Build has a special type of plugin, called a
114       negotiator which picks the best plugin for the particular environment
115       that it is running in.  This way, as development of the negotiator and
116       plugins develop over time modules that use Alien::Build will benefit,
117       without having to change the way they interface with Alien::Build
118

ACKNOWLEDGEMENT

120       I would like to that Joel Berger for getting things running in the
121       first place.  Also important to thank other members of the "Alien::Base
122       team":
123
124       Zaki Mughal (SIVOAIS)
125
126       Ed J (ETJ, mohawk)
127
128       Also kind thanks to all of the developers who have contributed to
129       Alien::Base over the years:
130
131       <https://metacpan.org/pod/Alien::Base#CONTRIBUTORS>
132

SEE ALSO

134       alienfile, Alien::Build::MM, Alien::Build::Plugin, Alien::Base, Alien
135

AUTHOR

137       Author: Graham Ollis <plicease@cpan.org>
138
139       Contributors:
140
141       Diab Jerius (DJERIUS)
142
143       Roy Storey
144
145       Ilya Pavlov
146
147       David Mertens (run4flat)
148
149       Mark Nunberg (mordy, mnunberg)
150
151       Christian Walde (Mithaldu)
152
153       Brian Wightman (MidLifeXis)
154
155       Zaki Mughal (zmughal)
156
157       mohawk (mohawk2, ETJ)
158
159       Vikas N Kumar (vikasnkumar)
160
161       Flavio Poletti (polettix)
162
163       Salvador Fandiño (salva)
164
165       Gianni Ceccarelli (dakkar)
166
167       Pavel Shaydo (zwon, trinitum)
168
169       Kang-min Liu (劉康民, gugod)
170
171       Nicholas Shipp (nshp)
172
173       Juan Julián Merelo Guervós (JJ)
174
175       Joel Berger (JBERGER)
176
177       Petr Pisar (ppisar)
178
179       Lance Wicks (LANCEW)
180
181       Ahmad Fatoum (a3f, ATHREEF)
182
183       José Joaquín Atria (JJATRIA)
184
185       Duke Leto (LETO)
186
187       Shoichi Kaji (SKAJI)
188
189       Shawn Laffan (SLAFFAN)
190
191       Paul Evans (leonerd, PEVANS)
192
194       This software is copyright (c) 2011-2018 by Graham Ollis.
195
196       This is free software; you can redistribute it and/or modify it under
197       the same terms as the Perl 5 programming language system itself.
198
199
200
201perl v5.28.1                      2019-02-A2l4ien::Build::Manual::Contributing(3)
Impressum