view release on metacpan or search on metacpan
- Fix Test::Alien bug where -L could be placed after directories specified in %Config
(this was already handled correctly by Alien::Base::Wrapper).
- Remove cpp and C++ options for xs_ok (I don't believe these were used in practice
and were issuing deprecation warnings for a while).
- A number of documentation errors have been fixed (jjatria++ leto++)
1.25 2017-10-09 08:57:34 -0400
- Production release identical to 1.24_01
1.24_01 2017-10-08 10:40:11 -0400
- Build process now considers share/pkgconfig in addition to lib/pkgconfig
for all things pkg-config related (gh#39, gh#40 a3f++)
1.23_01 2017-10-07 20:58:52 -0400
- Improve SSL diagnostics for Download::Negotiate and Fetch::HTTPTiny
plugins.
1.22 2017-10-05 11:43:25 -0400
- Improved bootstrap_ssl to allow use of Net::SSLeay, if it is already
installed.
- Windows path fix in test suite
Changes.Alien-Base view on Meta::CPAN
0.000_012 Apr 29, 2012
- Simplified capture mechanism, this should prevent warnings from being suppressed
- Check the return status of alien_build, die if necessary
0.000_011 Apr 25, 2012
- I'm starting to believe the bug is in the dontpanic library build chain
- Die on more warnings in that build chain. This won't fix anything,
but may show where the true problem lies
0.000_010 Apr 24, 2012
- Prevent build process from cwd-ing from underneath us (hopefully)
0.000_009 Apr 24, 2012
- Note: Released from 'dlopen' branch
- Uses new dynamic loading mechanism via DynaLoader
0.000_008 Apr 11, 2012
- Prevent do_system from changing wd globally
0.000_007 Apr 4, 2012
- Don't rebuild library on repeated M::B::dispatch
% make install
On Windows platforms, you should use `dmake` or `nmake`, instead of `make`.
If your perl is system-managed, you can create a local::lib in your home
directory to install modules to. For details, see the local::lib documentation:
https://metacpan.org/pod/local::lib
The prerequisites of this distribution will also have to be installed manually. The
prerequisites are listed in one of the files: `MYMETA.yml` or `MYMETA.json` generated
by running the manual build process described above.
## Configure Prerequisites
This distribution requires other modules to be installed before this
distribution's installer can be run. They can be found under the
"configure_requires" key of META.yml or the
"{prereqs}{configure}{requires}" key of META.json.
## Other Prerequisites
plugin, and thus is not part of the Alien::Build spec.
runtime_prop
my $href = $build->runtime_prop;
Runtime properties are used during the install and runtime phases
(either under share or system install). This should include anything
that you will need to know to use the library or tool during runtime,
and shouldn't include anything that is no longer relevant once the
install process is complete.
alien_build_version
The version of Alien::Build used to install the library or tool.
alt
Alternate configurations. If the alienized package has multiple
libraries this could be used to store the different compiler or
linker flags for each library. Typically this will be set by a plugin
system install this will be propagated to system_probe_instance_id
for later use.
METHODS
checkpoint
$build->checkpoint;
Save any install or runtime properties so that they can be reloaded on
a subsequent run in a separate process. This is useful if your build
needs to be done in multiple stages from a Makefile, such as with
ExtUtils::MakeMaker. Once checkpointed you can use the resume
constructor (documented above) to resume the probe/build/install]
process.
root
my $dir = $build->root;
This is just a shortcut for:
my $root = $build->install_prop->{root};
Except that it will be created if it does not already exist.
corpus/vcpkg/r2/installed/vcpkg/info/openssl-windows_1.1.1d-1_x64-windows.list view on Meta::CPAN
x64-windows/debug/html/man3/OSSL_STORE_error.html
x64-windows/debug/html/man3/OSSL_STORE_error_fn.html
x64-windows/debug/html/man3/OSSL_STORE_expect.html
x64-windows/debug/html/man3/OSSL_STORE_expect_fn.html
x64-windows/debug/html/man3/OSSL_STORE_find.html
x64-windows/debug/html/man3/OSSL_STORE_find_fn.html
x64-windows/debug/html/man3/OSSL_STORE_load.html
x64-windows/debug/html/man3/OSSL_STORE_load_fn.html
x64-windows/debug/html/man3/OSSL_STORE_open.html
x64-windows/debug/html/man3/OSSL_STORE_open_fn.html
x64-windows/debug/html/man3/OSSL_STORE_post_process_info_fn.html
x64-windows/debug/html/man3/OSSL_STORE_register_loader.html
x64-windows/debug/html/man3/OSSL_STORE_supports_search.html
x64-windows/debug/html/man3/OSSL_STORE_unregister_loader.html
x64-windows/debug/html/man3/OTHERNAME_free.html
x64-windows/debug/html/man3/OTHERNAME_new.html
x64-windows/debug/html/man3/OpenSSL_add_all_algorithms.html
x64-windows/debug/html/man3/OpenSSL_add_all_ciphers.html
x64-windows/debug/html/man3/OpenSSL_add_all_digests.html
x64-windows/debug/html/man3/OpenSSL_add_ssl_algorithms.html
x64-windows/debug/html/man3/OpenSSL_version.html
corpus/vcpkg/r2/installed/vcpkg/info/openssl-windows_1.1.1d-1_x64-windows.list view on Meta::CPAN
x64-windows/debug/html/man3/UI_method_set_data_duplicator.html
x64-windows/debug/html/man3/UI_method_set_ex_data.html
x64-windows/debug/html/man3/UI_method_set_flusher.html
x64-windows/debug/html/man3/UI_method_set_opener.html
x64-windows/debug/html/man3/UI_method_set_prompt_constructor.html
x64-windows/debug/html/man3/UI_method_set_reader.html
x64-windows/debug/html/man3/UI_method_set_writer.html
x64-windows/debug/html/man3/UI_new.html
x64-windows/debug/html/man3/UI_new_method.html
x64-windows/debug/html/man3/UI_null.html
x64-windows/debug/html/man3/UI_process.html
x64-windows/debug/html/man3/UI_set_default_method.html
x64-windows/debug/html/man3/UI_set_ex_data.html
x64-windows/debug/html/man3/UI_set_method.html
x64-windows/debug/html/man3/UI_set_result.html
x64-windows/debug/html/man3/UI_set_result_ex.html
x64-windows/debug/html/man3/UI_string_types.html
x64-windows/debug/html/man3/USERNOTICE_free.html
x64-windows/debug/html/man3/USERNOTICE_new.html
x64-windows/debug/html/man3/X509V3_EXT_d2i.html
x64-windows/debug/html/man3/X509V3_EXT_i2d.html
corpus/vcpkg/r2/installed/vcpkg/info/openssl-windows_1.1.1d-1_x64-windows.list view on Meta::CPAN
x64-windows/html/man3/OSSL_STORE_error.html
x64-windows/html/man3/OSSL_STORE_error_fn.html
x64-windows/html/man3/OSSL_STORE_expect.html
x64-windows/html/man3/OSSL_STORE_expect_fn.html
x64-windows/html/man3/OSSL_STORE_find.html
x64-windows/html/man3/OSSL_STORE_find_fn.html
x64-windows/html/man3/OSSL_STORE_load.html
x64-windows/html/man3/OSSL_STORE_load_fn.html
x64-windows/html/man3/OSSL_STORE_open.html
x64-windows/html/man3/OSSL_STORE_open_fn.html
x64-windows/html/man3/OSSL_STORE_post_process_info_fn.html
x64-windows/html/man3/OSSL_STORE_register_loader.html
x64-windows/html/man3/OSSL_STORE_supports_search.html
x64-windows/html/man3/OSSL_STORE_unregister_loader.html
x64-windows/html/man3/OTHERNAME_free.html
x64-windows/html/man3/OTHERNAME_new.html
x64-windows/html/man3/OpenSSL_add_all_algorithms.html
x64-windows/html/man3/OpenSSL_add_all_ciphers.html
x64-windows/html/man3/OpenSSL_add_all_digests.html
x64-windows/html/man3/OpenSSL_add_ssl_algorithms.html
x64-windows/html/man3/OpenSSL_version.html
corpus/vcpkg/r2/installed/vcpkg/info/openssl-windows_1.1.1d-1_x64-windows.list view on Meta::CPAN
x64-windows/html/man3/UI_method_set_data_duplicator.html
x64-windows/html/man3/UI_method_set_ex_data.html
x64-windows/html/man3/UI_method_set_flusher.html
x64-windows/html/man3/UI_method_set_opener.html
x64-windows/html/man3/UI_method_set_prompt_constructor.html
x64-windows/html/man3/UI_method_set_reader.html
x64-windows/html/man3/UI_method_set_writer.html
x64-windows/html/man3/UI_new.html
x64-windows/html/man3/UI_new_method.html
x64-windows/html/man3/UI_null.html
x64-windows/html/man3/UI_process.html
x64-windows/html/man3/UI_set_default_method.html
x64-windows/html/man3/UI_set_ex_data.html
x64-windows/html/man3/UI_set_method.html
x64-windows/html/man3/UI_set_result.html
x64-windows/html/man3/UI_set_result_ex.html
x64-windows/html/man3/UI_string_types.html
x64-windows/html/man3/USERNOTICE_free.html
x64-windows/html/man3/USERNOTICE_new.html
x64-windows/html/man3/X509V3_EXT_d2i.html
x64-windows/html/man3/X509V3_EXT_i2d.html
corpus/vcpkg/r2/installed/vcpkg/status view on Meta::CPAN
Multi-Arch: same
Description: OpenSSL support
Type: Port
Status: install ok installed
Package: libressl
Version: 2.9.1-2
Architecture: x64-windows
Multi-Arch: same
Abi: faa3fe00496397545d489c14b1a14c25143d91bd
Description: LibreSSL is a version of the TLS/crypto stack forked from OpenSSL in 2014, with goals of modernizing the codebase, improving security, and applying best practice development processes.
Type: Port
Status: install ok installed
Package: libffi
Version: 3.3
Architecture: x86-windows
Multi-Arch: same
Abi: 26fac73eca7ab28cad695055b44f461dace1fc39
Description: Portable, high level programming interface to various calling conventions
Type: Port
example/xz-manual.alienfile view on Meta::CPAN
start_url 'http://tukaani.org/xz/xz-5.2.3.tar.gz';
# the first one which succeeds will be used
download [ 'wget %{.meta.start_url}' ];
download [ 'curl -O %{.meta.start_url}' ];
# use tar to extract the tarball
extract [ 'tar zxf %{.install.download}' ];
# use the standard build process
build [
'./configure --prefix=%{.install.prefix} --disable-shared',
'%{make}',
'%{make} install',
];
# This package doesn't build a dynamic library by default, but if
# it did this would make sure that it wasn't used with XS.
# (See Alien::Build::Manual::AlienAuthor for details).
plugin 'Gather::IsolateDynamic';
inc/probebad.pl view on Meta::CPAN
}
}
{ # compiler checks
my $cb = ExtUtils::CBuilder->new;
if($cb->have_compiler)
{
my $pxs = ExtUtils::ParseXS->new;
eval {
$pxs->process_file(
filename => "inc/trivial.xs",
output => "inc/trivial.c",
versioncheck => 0,
prototypes => 0,
);
};
if(my $error = $@)
{
print "Configuration unsupported\n";
print "You appear to have a C compiler, but I am unable to process a\n";
print "trivial XS file, errored with:\n";
print "$error\n";
exit;
}
if($pxs->report_error_count != 0)
{
print "Configuration unsupported\n";
print "You appear to have a C compiler, but there were errors processing\n";
print "a trivial XS file.\n";
exit;
}
my($cc_out, $obj, $cc_exception) = capture_merged(
sub {
my $obj = eval {
$cb->compile(
source => "inc/trivial.c",
);
};
($obj, $@);
}
);
if(! $obj)
{
print "Configuration unsupported\n";
print "You appear to have a C compiler, but there were errors processing\n";
print "the C file generated from a trivial XS file.\n";
if($cc_exception)
{
print "Exception:\n";
print "$cc_exception\n";
}
if($cc_out)
{
print "Compiler output:\n";
print "$cc_out\n";
lib/Alien/Base.pm view on Meta::CPAN
as a public interface primarily so that it can be overridden at run
time. This can also be specified in your C<Build.PL> with
L<Alien::Base::ModuleBuild> using the C<alien_inline_auto_include>
property.
=head2 runtime_prop
my $hashref = Alien::MyLibrary->runtime_prop;
Returns a hash reference of the runtime properties computed by L<Alien::Build> during its
install process. If the L<Alien::Base> based L<Alien> was not built using L<Alien::Build>,
then this will return undef.
=head2 alt
my $new_alien = Alien::MyLibrary->alt($alt_name);
my $new_alien = $old_alien->alt($alt_name);
Returns an L<Alien::Base> instance with the alternate configuration.
Some packages come with multiple libraries, and multiple C<.pc> files to
lib/Alien/Build.pm view on Meta::CPAN
part of the L<Alien::Build> spec.
=head2 runtime_prop
my $href = $build->runtime_prop;
Runtime properties are used during the install and runtime phases
(either under C<share> or C<system> install). This should include
anything that you will need to know to use the library or tool
during runtime, and shouldn't include anything that is no longer
relevant once the install process is complete.
=over 4
=item alien_build_version
The version of L<Alien::Build> used to install the library or tool.
=item alt
Alternate configurations. If the alienized package has multiple
lib/Alien/Build.pm view on Meta::CPAN
=back
=head1 METHODS
=head2 checkpoint
$build->checkpoint;
Save any install or runtime properties so that they can be reloaded on
a subsequent run in a separate process. This is useful if your build
needs to be done in multiple stages from a C<Makefile>, such as with
L<ExtUtils::MakeMaker>. Once checkpointed you can use the C<resume>
constructor (documented above) to resume the probe/build/install]
process.
=head2 root
my $dir = $build->root;
This is just a shortcut for:
my $root = $build->install_prop->{root};
Except that it will be created if it does not already exist.
lib/Alien/Build/MM.pm view on Meta::CPAN
sub mm_args
{
my($self, %args) = @_;
if($args{DISTNAME})
{
$self->build->set_stage(Path::Tiny->new("blib/lib/auto/share/dist/$args{DISTNAME}")->absolute->stringify);
$self->build->install_prop->{mm}->{distname} = $args{DISTNAME};
my $module = $args{DISTNAME};
$module =~ s/-/::/g;
# See if there is an existing version installed, without pulling it into this process
my($old_prefix, $err, $ret) = capture { system $^X, "-M$module", -e => "print $module->dist_dir"; $? };
if($ret == 0)
{
chomp $old_prefix;
my $file = Path::Tiny->new($old_prefix, qw( _alien alien.json ));
if(-r $file)
{
my $old_runtime = eval {
require JSON::PP;
JSON::PP::decode_json($file->slurp);
lib/Alien/Build/Manual/FAQ.pod view on Meta::CPAN
=head2 Cannot find either a share directory or a ConfigData module
If you see an error like this:
Cannot find either a share directory or a ConfigData module for Alien::libfoo.
(Alien::libfoo loaded from lib/Alien/libfoo.pm)
Please see https://metacpan.org/pod/distribution/Alien-Build/lib/Alien/Build/Manual/FAQ.pod#Cannot-find-either-a-share-directory-or-a-ConfigData-module
Can't locate Alien/libfoo/ConfigData.pm in @INC (you may need to install the Alien::libfoo::ConfigData module) (@INC contains: ...)
it means you are trying to use an Alien that hasn't been properly installed. An L<Alien::Base>
based Alien needs to have either the share directory build during the install process or for
older legacy L<Alien::Base::ModuleBuild> based Aliens, a ConfigData module generated by
L<Module::Build>.
This usually happens if you try to use an Alien module from the lib directory as part of the
Alien's distribution. You need to build the alien and use C<blib/lib> instead of C<lib> or
install the alien and use the installed path.
It is also possible that your Alien installer is not set up correctly. Make sure your
C<Makefile.PL> is using L<Alien::Build::MM> correctly.
lib/Alien/Build/Manual/PluginAuthor.pod view on Meta::CPAN
plugin 'Build::MyPlugin' => (
arg1 => 'override for arg1',
arg2 => [ 'something', 'else' ],
);
=for html <p>flowchart</p>
<div style="display: flex"><div style="margin: 3px; flex: 1 1 50%">
<img src="image/PluginAuthor-flowchart.png" style="max-width: 100%">
</div></div>
<p><b>Notes</b>: The colored blocks indicate <tt>alienfile</tt> blocks.
Hooks are indicated as predefined process (rectangle with double struck
vertical edges). Hooks that can easily be implemented from an
<tt>alienfile</tt> are indicated in blue (Note that <tt>[]</tt> is used
to indicate passing in an array reference, but a subroutine
reference can also be used). For simplicity, the the flowchart does
not include when required modules are loaded. Except for configure
time requirements, they are loaded when the corresponding <tt>alienfile</tt>
blocks are entered. It is not shown, but generally any plugin can cause
a <b>Fail</b> by throwing an exception with <tt>die</tt>.</p>
Perlish pseudo code for how plugins are called:
lib/Alien/Build/Manual/PluginAuthor.pod view on Meta::CPAN
$meta->register_hook( download => sub {
my($build) = @_;
...
});
This hook is used to download from the internet the source. Either as
an archive (like tar, zip, etc), or as a directory of files (C<git clone>,
etc). When the hook is called, the current working directory will be a
new empty directory, so you can save the download to the current
directory. If you store a single file in the directory, L<Alien::Build>
will assume that it is an archive, which will be processed by the
L<extract hook|/"extract hook">. If you store multiple files, L<Alien::Build> will
assume the current directory is the source root. If no files are stored
at all, an exception with an appropriate diagnostic will be thrown.
B<Note>: If you register this hook, then the fetch, decode and prefer
hooks will NOT be called, unless you call them yourself from this hook.
=head2 extract hook
$meta->register_hook( extract => sub {
lib/Alien/Build/Plugin/Core/Setup.pm view on Meta::CPAN
my @output = `lparstat -i 2>/dev/null | grep "^Online Virtual CPUs"`;
if ( @output ) {
$output[0] =~ /(\d+)\n$/;
$ncpu = $1 if $1;
}
if ( !$ncpu ) {
@output = `pmcycles -m 2>/dev/null`;
if ( @output ) {
$ncpu = scalar @output;
} else {
@output = `lsdev -Cc processor -S Available 2>/dev/null`;
$ncpu = scalar @output if @output;
}
}
last OS_CHECK;
};
/gnu/ && do {
chomp( my @output = `nproc 2>/dev/null` );
$ncpu = $output[0] if @output;
last OS_CHECK;
};
/haiku/ && do {
my @output = `sysinfo -cpu 2>/dev/null | grep "^CPU #"`;
$ncpu = scalar @output if @output;
last OS_CHECK;
};
/hp-?ux/ && do {
my $count = grep { /^processor/ } `ioscan -fkC processor 2>/dev/null`;
$ncpu = $count if $count;
last OS_CHECK;
};
/irix/ && do {
my @out = grep { /\s+processors?$/i } `hinv -c processor 2>/dev/null`;
$ncpu = (split ' ', $out[0])[0] if @out;
last OS_CHECK;
};
/osf|solaris|sunos|svr5|sco/ && do {
if (-x '/usr/sbin/psrinfo') {
my $count = grep { /on-?line/ } `psrinfo 2>/dev/null`;
$ncpu = $count if $count;
}
else {
lib/Alien/Build/Plugin/Download/Negotiate.pm view on Meta::CPAN
=head2 version
Regular expression to parse out the version from a filename. The regular expression
should store the result in C<$1>.
Note: if you provide a C<version> property, this plugin will assume that you will
be downloading an initial index to select package downloads from. Depending on
the protocol (and typically this is the case for http and HTML) that may bring in
additional dependencies. If start_url points to a tarball or other archive directly
(without needing to do through an index selection process), it is recommended that
you not specify this property.
=head2 ssl
If your initial URL does not need SSL, but you know ahead of time that a subsequent
request will need it (for example, if your directory listing is on C<http>, but includes
links to C<https> URLs), then you can set this property to true, and the appropriate
Perl SSL modules will be loaded.
=head2 passive
lib/Test/Alien.pm view on Meta::CPAN
{
open my $fh, '>', $xs_filename;
print $fh $xs->{xs};
close $fh;
require ExtUtils::ParseXS;
my $pxs = ExtUtils::ParseXS->new;
my($out, $err) = capture_merged {
eval {
$pxs->process_file(
filename => $xs_filename,
output => $c_filename,
versioncheck => 0,
prototypes => 0,
%{ $xs->{pxs} },
);
};
$@;
};
lib/Test/Alien.pm view on Meta::CPAN
to work easily with L<Alien::Base> based modules, but can also be used
via the synthetic interface to test non L<Alien::Base> based L<Alien>
modules. It has very modest prerequisites.
Prior to this module the best way to test a L<Alien> module was via L<Test::CChecker>.
The main downside to that module is that it is heavily influenced by and uses
L<ExtUtils::CChecker>, which is a tool for checking at install time various things
about your compiler. It was also written before L<Alien::Base> became as stable as it
is today. In particular, L<Test::CChecker> does its testing by creating an executable
and running it. Unfortunately Perl uses extensions by creating dynamic libraries
and linking them into the Perl process, which is different in subtle and error prone
ways. This module attempts to test the libraries in the way that they will actually
be used, via either C<XS> or L<FFI::Platypus>. It also provides a mechanism for
testing binaries that are provided by the various L<Alien> modules (for example
L<Alien::gmake> and L<Alien::patch>).
L<Alien> modules can actually be usable without a compiler, or without L<FFI::Platypus>
(for example, if the library is provided by the system, and you are using L<FFI::Platypus>,
or if you are building from source and you are using C<XS>), so tests with missing
prerequisites are automatically skipped. For example, L</xs_ok> will automatically skip
itself if a compiler is not found, and L</ffi_ok> will automatically skip itself
lib/Test/Alien/Run.pm view on Meta::CPAN
use Test2::V0;
use Test::Alien;
run_ok([ $^X, -e => 'print "some output"; exit 22'])
->exit_is(22)
->out_like(qr{some});
=head1 DESCRIPTION
This class stores information about a process run as performed by
L<Test::Alien#run_ok>. That function is the I<ONLY> way to create
an instance of this class.
=head1 ATTRIBUTES
=head2 out
my $str = $run->out;
The standard output from the run.
lib/Test/Alien/Run.pm view on Meta::CPAN
=head2 exit
my $int = $run->exit;
The exit value of the run.
=head2 signal
my $int = $run->signal;
The signal that killed the run, or zero if the process was terminated normally.
=head1 METHODS
These methods return the run object itself, so they can be chained,
as in the synopsis above.
=head2 success
$run->success;
$run->success($message);
Passes if the process terminated normally with an exit value of 0.
=head2 exit_is
$run->exit_is($exit);
$run->exit_is($exit, $message);
Passes if the process terminated with the given exit value.
=head2 exit_isnt
$run->exit_isnt($exit);
$run->exit_isnt($exit, $message);
Passes if the process terminated with an exit value of anything
but the given value.
=head2 out_like
$run->out_like($regex);
$run->out_like($regex, $message);
Passes if the output of the run matches the given pattern.
=head2 out_unlike