Files
perl-Coro/perl-Coro.spec
2025-08-12 18:12:44 +02:00

114 lines
4.4 KiB
RPMSpec

#
# spec file for package perl-Coro
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define cpan_name Coro
Name: perl-Coro
Version: 6.570.0
Release: 0
# 6.57 -> normalize -> 6.570.0
%define cpan_version 6.57
#Upstream: CHECK(Artistic-1.0 or GPL-1.0-or-later)
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: The only real threads in perl
URL: https://metacpan.org/release/%{cpan_name}
Source0: https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/%{cpan_name}-%{cpan_version}.tar.gz
Source1: cpanspec.yml
Source100: README.md
BuildRequires: perl
BuildRequires: perl-macros
BuildRequires: perl(AnyEvent) >= 5
BuildRequires: perl(Canary::Stability)
BuildRequires: perl(ExtUtils::MakeMaker) >= 6.52
BuildRequires: perl(Guard) >= 0.5
BuildRequires: perl(common::sense)
Requires: perl(AnyEvent) >= 5
Requires: perl(Guard) >= 0.5
Requires: perl(common::sense)
Provides: perl(Coro) = %{version}
%undefine __perllib_provides
Recommends: perl(AnyEvent) >= 7
Recommends: perl(AnyEvent::AIO) >= 1.0.0
Recommends: perl(AnyEvent::BDB) >= 1.0.0
Recommends: perl(BDB)
Recommends: perl(EV) >= 4.0.0
Recommends: perl(Event) >= 1.08
Recommends: perl(IO::AIO) >= 3.100.0
%{perl_requires}
%description
For a tutorial-style introduction, please read the Coro::Intro manpage.
This manpage mainly contains reference information.
This module collection manages continuations in general, most often in the
form of cooperative threads (also called coros, or simply "coro" in the
documentation). They are similar to kernel threads but don't (in general)
run in parallel at the same time even on SMP machines. The specific flavor
of thread offered by this module also guarantees you that it will not
switch between threads unless necessary, at easily-identified points in
your program, so locking and parallel access are rarely an issue, making
thread programming much safer and easier than using other thread models.
Unlike the so-called "Perl threads" (which are not actually real threads
but only the windows process emulation (see section of same name for more
details) ported to UNIX, and as such act as processes), Coro provides a
full shared address space, which makes communication between threads very
easy. And coro threads are fast, too: disabling the Windows process
emulation code in your perl and using Coro can easily result in a two to
four times speed increase for your programs. A parallel matrix
multiplication benchmark (very communication-intensive) runs over 300 times
faster on a single core than perls pseudo-threads on a quad core using all
four cores.
Coro achieves that by supporting multiple running interpreters that share
data, which is especially useful to code pseudo-parallel processes and for
event-based programming, such as multiple HTTP-GET requests running
concurrently. See Coro::AnyEvent to learn more on how to integrate Coro
into an event-based environment.
In this module, a thread is defined as "callchain + lexical variables +
some package variables + C stack), that is, a thread has its own callchain,
its own set of lexicals and its own set of perls most important global
variables (see Coro::State for more configuration and background info).
See also the 'SEE ALSO' section at the end of this document - the Coro
module family is quite large.
%prep
%autosetup -n %{cpan_name}-%{cpan_version}
%build
perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"
%make_build
%check
make test
%install
%perl_make_install
%perl_process_packlist
# MANUAL BEGIN
find %buildroot%perl_vendorlib -name jit-*-unix.pl | xargs sed -i '1 s|#\!/opt/bin/perl|#\!/usr/bin/perl|'
# MANUAL END
%perl_gen_filelist
%files -f %{name}.files
%doc Changes doc README README.linux-glibc
%license COPYING
%changelog