[perl-Test-Mojibake] Initial import (perl-Test-Mojibake-0.3-2)

Paul Howarth pghmcfc at fedoraproject.org
Fri Aug 12 14:10:22 UTC 2011


commit 43d4f14ea49c89102508d61f443de0203f44090c
Author: Paul Howarth <paul at city-fan.org>
Date:   Fri Aug 12 14:52:55 2011 +0100

    Initial import (perl-Test-Mojibake-0.3-2)
    
    Many modern text editors automatically save files using UTF-8 codification.
    However, the perl interpreter does not expect it by default. Whilst this does
    not represent a big deal on (most) backend-oriented programs, Web framework
    (Catalyst, Mojolicious) based applications will suffer so-called Mojibake
    (literally: "unintelligible sequence of characters"). Even worse: if an editor
    saves BOM (Byte Order Mark, U+FEFF character in Unicode) at the start of a
    script with the executable bit set (on Unix systems), it won't execute at all,
    due to shebang corruption.
    
    Avoiding codification problems is quite simple:
    
     * Always use utf8/use common::sense when saving source as UTF-8
     * Always specify =encoding utf8 when saving POD as UTF-8
     * Do neither of above when saving as ISO-8859-1
     * Never save BOM (not that it's wrong; just avoid it as you'll barely
       notice its presence when in trouble)
    
    However, if you find yourself upgrading old code to use UTF-8 or trying to
    standardize a big project with many developers, each one using a different
    platform/editor, reviewing all files manually can be quite painful, especially
    in cases where some files have multiple encodings (note: it all started when I
    realized that gedit and derivatives are unable to open files with character
    conversion tables).
    
    Enter the Test::Mojibake ;)

 .gitignore                             |    1 +
 Test-Mojibake-0.3-old-Test::More.patch |   51 +++++++++++
 Test-Mojibake-0.3-old-eu::mm.patch     |   30 +++++++
 perl-Test-Mojibake.spec                |  148 ++++++++++++++++++++++++++++++++
 sources                                |    1 +
 5 files changed, 231 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index e69de29..a59e0cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/Test-Mojibake-[0-9.]*.tar.gz
diff --git a/Test-Mojibake-0.3-old-Test::More.patch b/Test-Mojibake-0.3-old-Test::More.patch
new file mode 100644
index 0000000..deea6fe
--- /dev/null
+++ b/Test-Mojibake-0.3-old-Test::More.patch
@@ -0,0 +1,51 @@
+--- Test-Mojibake-0.3/t/06-pp-vs-xs.t
++++ Test-Mojibake-0.3/t/06-pp-vs-xs.t
+@@ -1,7 +1,7 @@
+ #!perl -T
+ use strict;
+ 
+-use Test::More;
++use Test::More 'no_plan';
+ 
+ BEGIN {
+     use_ok('Benchmark', 'countit');
+@@ -10,7 +10,6 @@
+ 
+ unless ($Test::Mojibake::use_xs) {
+     diag('No XS module detected, will fallback to PP implementation!');
+-    done_testing(2);
+     exit;
+ }
+ 
+@@ -33,8 +32,6 @@
+ 
+ diag(sprintf('XS/PP speed ratio is %0.2f', $t0->iters / $t1->iters));
+ 
+-done_testing(7);
+-
+ sub run {
+     my $i = 0;
+     for (@buf) {
+--- Test-Mojibake-0.3/t/release-cpan-changes.t
++++ Test-Mojibake-0.3/t/release-cpan-changes.t
+@@ -1,15 +1,11 @@
+ #!perl
+ 
++use Test::More;
++
+ BEGIN {
+-  unless ($ENV{RELEASE_TESTING}) {
+-    require Test::More;
+-    Test::More::plan(skip_all => 'these tests are for release candidate testing');
+-  }
++  plan skip_all => 'these tests are for release candidate testing' unless ($ENV{RELEASE_TESTING});
++  eval 'use Test::CPAN::Changes';
++  plan skip_all => 'Test::CPAN::Changes required for this test' if $@;
+ }
+ 
+-
+-use Test::More;
+-eval 'use Test::CPAN::Changes';
+-plan skip_all => 'Test::CPAN::Changes required for this test' if $@;
+ changes_ok();
+-done_testing();
diff --git a/Test-Mojibake-0.3-old-eu::mm.patch b/Test-Mojibake-0.3-old-eu::mm.patch
new file mode 100644
index 0000000..15a5b82
--- /dev/null
+++ b/Test-Mojibake-0.3-old-eu::mm.patch
@@ -0,0 +1,30 @@
+--- Test-Mojibake/Makefile.PL
++++ Test-Mojibake/Makefile.PL
+@@ -4,7 +4,7 @@
+ 
+ 
+ 
+-use ExtUtils::MakeMaker 6.30;
++use ExtUtils::MakeMaker;
+ 
+ 
+ 
+@@ -13,7 +13,7 @@
+   'AUTHOR' => 'Stanislaw Pusep <stas at sysd.org>',
+   'BUILD_REQUIRES' => {},
+   'CONFIGURE_REQUIRES' => {
+-    'ExtUtils::MakeMaker' => '6.30'
++    'ExtUtils::MakeMaker' => '0'
+   },
+   'DISTNAME' => 'Test-Mojibake',
+   'EXE_FILES' => [],
+@@ -46,6 +46,9 @@
+ delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
+   unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
+ 
++delete $WriteMakefileArgs{LICENSE}
++  unless eval { ExtUtils::MakeMaker->VERSION(6.31) };
++
+ WriteMakefile(%WriteMakefileArgs);
+ 
+ 
diff --git a/perl-Test-Mojibake.spec b/perl-Test-Mojibake.spec
new file mode 100644
index 0000000..733cd0a
--- /dev/null
+++ b/perl-Test-Mojibake.spec
@@ -0,0 +1,148 @@
+# We don't really need ExtUtils::MakeMaker ≥ 6.30
+%global old_eumm %(perl -MExtUtils::MakeMaker -e 'printf "%d\\n", $ExtUtils::MakeMaker::VERSION < 6.30 ? 1 : 0;' 2>/dev/null || echo 0)
+
+# We need to patch the test suite if we have an old version of Test::More
+%global old_test_more %(perl -MTest::More -e 'printf "%d\\n", $Test::More::VERSION < 0.88 ? 1 : 0;' 2>/dev/null || echo 0)
+
+# noarch, but to avoid debug* files interfering with manifest test:
+%global debug_package %{nil}
+
+# TODO:
+#
+# BuildRequires: perl(Test::Pod::LinkCheck) when available
+#
+# Unicode::CheckUTF8 is an optional requirement that significantly speeds up
+# this module but its license is currently unclear (CPAN RT#70210)
+
+Name:		perl-Test-Mojibake
+Version:	0.3
+Release:	2%{?dist}
+Summary:	Check your source for encoding misbehavior
+Group:		Development/Libraries
+License:	GPL+ or Artistic
+URL:		http://search.cpan.org/dist/Test-Mojibake/
+Source0:	http://search.cpan.org/CPAN/authors/id/S/SY/SYP/Test-Mojibake-%{version}.tar.gz
+Patch0:		Test-Mojibake-0.3-old-eu::mm.patch
+Patch1:		Test-Mojibake-0.3-old-Test::More.patch
+BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(id -nu)
+BuildArch:	noarch
+# ===================================================================
+# Module build requirements
+# ===================================================================
+BuildRequires:	perl(ExtUtils::MakeMaker)
+# ===================================================================
+# Module requirements
+# ===================================================================
+BuildRequires:	perl(File::Spec)
+BuildRequires:	perl(Test::Builder)
+# ===================================================================
+# Regular test suite requirements
+# ===================================================================
+BuildRequires:	perl(Test::Builder::Tester)
+BuildRequires:	perl(Test::More)
+# ===================================================================
+# Author/Release test requirements
+#
+# Don't run these tests or include their requirements if we're
+# bootstrapping, as many of these modules require each other for
+# their author/release tests.
+# ===================================================================
+%if 0%{!?perl_bootstrap:1}
+BuildRequires:	perl(Pod::Coverage::TrustPod)
+BuildRequires:	perl(Test::CPAN::Meta)
+BuildRequires:	perl(Test::DistManifest)
+BuildRequires:	perl(Test::HasVersion)
+BuildRequires:	perl(Test::NoTabs)
+BuildRequires:	perl(Test::Pod::Coverage)
+BuildRequires:	perl(Test::Pod)
+BuildRequires:	perl(Test::Portability::Files)
+# Modules only available from EL-5
+%if 0%{?fedora} || 0%{?rhel} > 4
+BuildRequires:	perl(Test::Perl::Critic)
+BuildRequires:	perl(Test::Synopsis)
+%endif
+# Modules only available from EL-6
+%if 0%{?fedora} || 0%{?rhel} > 5
+BuildRequires:	perl(Test::Kwalitee)
+BuildRequires:	perl(Test::MinimumVersion)
+BuildRequires:	perl(Test::Vars)
+%endif
+# Modules only available from EL-7
+%if 0%{?fedora} || 0%{?rhel} > 6
+BuildRequires:	perl(Test::CPAN::Changes)
+%endif
+%endif
+# ===================================================================
+# Runtime requirements
+# ===================================================================
+Requires:	perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
+
+%description
+Many modern text editors automatically save files using UTF-8 codification.
+However, the perl interpreter does not expect it by default. Whilst this does
+not represent a big deal on (most) backend-oriented programs, Web framework
+(Catalyst, Mojolicious) based applications will suffer so-called Mojibake
+(literally: "unintelligible sequence of characters"). Even worse: if an editor
+saves BOM (Byte Order Mark, U+FEFF character in Unicode) at the start of a
+script with the executable bit set (on Unix systems), it won't execute at all,
+due to shebang corruption.
+
+Avoiding codification problems is quite simple:
+
+ * Always use utf8/use common::sense when saving source as UTF-8
+ * Always specify =encoding utf8 when saving POD as UTF-8
+ * Do neither of above when saving as ISO-8859-1
+ * Never save BOM (not that it's wrong; just avoid it as you'll barely
+   notice its presence when in trouble)
+
+However, if you find yourself upgrading old code to use UTF-8 or trying to
+standardize a big project with many developers, each one using a different
+platform/editor, reviewing all files manually can be quite painful, especially
+in cases where some files have multiple encodings (note: it all started when I
+realized that gedit and derivatives are unable to open files with character
+conversion tables).
+
+Enter the Test::Mojibake ;)
+
+%prep
+%setup -q -n Test-Mojibake-%{version}
+
+# We don't really need ExtUtils::MakeMaker ≥ 6.30
+%if %{old_eumm}
+%patch0 -p1
+%endif
+
+# We need to patch the test suite if we have an old version of Test::More
+%if %{old_test_more}
+%patch1 -p1
+%endif
+
+%build
+perl Makefile.PL INSTALLDIRS=vendor
+make %{?_smp_mflags}
+
+%install
+rm -rf %{buildroot}
+make pure_install PERL_INSTALL_ROOT=%{buildroot}
+find %{buildroot} -type f -name .packlist -exec rm -f {} \;
+find %{buildroot} -depth -type d -exec rmdir {} \; 2>/dev/null
+%{_fixperms} %{buildroot}
+
+%check
+make test %{!?perl_bootstrap:AUTHOR_TESTING=1 RELEASE_TESTING=1}
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root,-)
+%doc Changes LICENSE README
+%{perl_vendorlib}/Test/
+%{_mandir}/man3/Test::Mojibake.3pm*
+
+%changelog
+* Thu Aug 11 2011 Paul Howarth <paul at city-fan.org> - 0.3-2
+- Sanitize for Fedora/EPEL submission
+
+* Thu Aug 11 2011 Paul Howarth <paul at city-fan.org> - 0.3-1
+- Initial RPM version
diff --git a/sources b/sources
index e69de29..db208fb 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+6387414378fc302582d7955e61f132e3  Test-Mojibake-0.3.tar.gz



More information about the perl-devel mailing list