File perl-Readonly-XS.spec of Package perl-Readonly-XS
#
# spec file for package perl-Readonly-XS
#
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# 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 http://bugs.opensuse.org/
#
Name: perl-Readonly-XS
Version: 1.05
Release: 0
%define cpan_name Readonly-XS
Summary: Companion module for Readonly.pm, to speed up read-only
License: GPL-1.0+ or Artistic-1.0
Group: Development/Libraries/Perl
Url: http://search.cpan.org/dist/Readonly-XS/
Source0: https://cpan.metacpan.org/authors/id/R/RO/ROODE/%{cpan_name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
BuildRequires: perl-macros
BuildRequires: perl(Readonly) >= 1.02
Requires: perl(Readonly) >= 1.02
%{perl_requires}
%description
The Readonly module (q.v.) is an effective way to create non-modifiable
variables. However, it's relatively slow.
The reason it's slow is that is implements the read-only-ness of variables
via tied objects. This mechanism is inherently slow. Perl simply has to do
a lot of work under the hood to make tied variables work.
This module corrects the speed problem, at least with respect to scalar
variables. When Readonly::XS is installed, Readonly uses it to access the
internals of scalar variables. Instead of creating a scalar variable object
and tying it, Readonly simply flips the SvREADONLY bit in the scalar's
FLAGS structure.
Readonly arrays and hashes are not sped up by this, since the SvREADONLY
flag only works for scalars. Arrays and hashes always use the tie
interface.
Why implement this as a separate module? Because not everyone can use XS.
Not everyone has a C compiler. Also, installations with a statically-linked
perl may not want to recompile their perl binary just for this module.
Rather than render Readonly.pm useless for these people, the XS portion was
put into a separate module.
Programs that you write do not need to know whether Readonly::XS is
installed or not. They should just "use Readonly" and let Readonly worry
about whether or not it can use XS. If the Readonly::XS is present,
Readonly will be faster. If not, it won't. Either way, it will still work,
and your code will not have to change.
Your program can check whether Readonly.pm is using XS or not by examining
the $Readonly::XSokay variable. It will be true if the XS module was found
and is being used. Please do not change this variable.
%prep
%setup -q -n %{cpan_name}-%{version}
find . -type f ! -name \*.pl -print0 | xargs -0 chmod 644
%build
%{__perl} Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"
%{__make} %{?_smp_mflags}
%check
%{__make} test
%install
%perl_make_install
%perl_process_packlist
%perl_gen_filelist
%files -f %{name}.files
%defattr(-,root,root,755)
%doc Changes README
%changelog