Tux / App-ccdiff

A colored diff that also colors inside changed lines
Artistic License 2.0
18 stars 5 forks source link

How to install properly? #20

Closed xeruf closed 3 years ago

xeruf commented 3 years ago

After installing it on Arch Linux, regardless of via CPAN or directly through the script and running the binary, I get the following error:

Cannot load Algorithm::Diff:

I have zero experience with Perl, what am I supposed to do?

Tux commented 3 years ago
$ cpan Algorithm::Diff

This program only works with its prerequisites installed. The correct (easy) way to install ccdiff is (or should be)

$ cpan App::ccdiff

If that doesn't work, I'm curious to what the error messages are

xeruf commented 3 years ago
❯ cpan App::ccdiff
Loading internal logger. Log::Log4perl recommended for better logging
Reading '/home/janek/.cache/cpan/Metadata'
  Database was generated on Tue, 29 Dec 2020 16:17:03 GMT
Running install for module 'App::ccdiff'
Checksum for /home/janek/.cache/cpan/sources/authors/id/H/HM/HMBRAND/App-ccdiff-0.30.tgz ok
'YAML' not installed, will not store persistent state
Configuring H/HM/HMBRAND/App-ccdiff-0.30.tgz with Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite Algorithm::Diff 1.1901 not found.
Warning: prerequisite Capture::Tiny 0 not found.
Generating a Unix-style Makefile
Writing Makefile for App::ccdiff
Writing MYMETA.yml and MYMETA.json
  HMBRAND/App-ccdiff-0.30.tgz
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- OK
Running make for H/HM/HMBRAND/App-ccdiff-0.30.tgz
---- Unsatisfied dependencies detected during ----
----        HMBRAND/App-ccdiff-0.30.tgz       ----
    Algorithm::Diff [requires]
    Algorithm::Diff::XS [requires,optional]
    Capture::Tiny [build_requires]
Running install for module 'Algorithm::Diff'
Checksum for /home/janek/.cache/cpan/sources/authors/id/R/RJ/RJBS/Algorithm-Diff-1.201.tar.gz ok
Configuring R/RJ/RJBS/Algorithm-Diff-1.201.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for Algorithm::Diff
Writing MYMETA.yml and MYMETA.json
  RJBS/Algorithm-Diff-1.201.tar.gz
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- OK
Running make for R/RJ/RJBS/Algorithm-Diff-1.201.tar.gz
cp lib/Algorithm/DiffOld.pm blib/lib/Algorithm/DiffOld.pm
cp lib/Algorithm/Diff.pm blib/lib/Algorithm/Diff.pm
Manifying 2 pod documents
  RJBS/Algorithm-Diff-1.201.tar.gz
  /usr/bin/make -- OK
The current configuration of allow_installing_outdated_dists is 'ask/no', but for this option we would need 'CPAN::DistnameInfo' installed. Please install 'CPAN::DistnameInfo' as soon as possible. As long as we are not equipped with 'CPAN::DistnameInfo' this option does not take effect
Running make test for RJBS/Algorithm-Diff-1.201.tar.gz
PERL_DL_NONLAZY=1 "/usr/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/base.t .. ok     
t/oo.t .... ok       
All tests successful.
Files=2, Tests=1004,  0 wallclock secs ( 0.03 usr  0.00 sys +  0.04 cusr  0.01 csys =  0.08 CPU)
Result: PASS
  RJBS/Algorithm-Diff-1.201.tar.gz
  /usr/bin/make test -- OK
Running make install for RJBS/Algorithm-Diff-1.201.tar.gz
Manifying 2 pod documents
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/usr/share/man/man3'
Do not have write permissions on '/usr/share/man/man3'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 at -e line 1.
make: *** [Makefile:704: pure_site_install] Error 13
  RJBS/Algorithm-Diff-1.201.tar.gz
  /usr/bin/make install  -- NOT OK
----
  You may have to su to root to install the package
  (Or you may want to run something like
    o conf make_install_make_command 'sudo make'
  to raise your permissions.Running install for module 'Capture::Tiny'
Checksum for /home/janek/.cache/cpan/sources/authors/id/D/DA/DAGOLDEN/Capture-Tiny-0.48.tar.gz ok
Configuring D/DA/DAGOLDEN/Capture-Tiny-0.48.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for Capture::Tiny
Writing MYMETA.yml and MYMETA.json
  DAGOLDEN/Capture-Tiny-0.48.tar.gz
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- OK
Running make for D/DA/DAGOLDEN/Capture-Tiny-0.48.tar.gz
cp lib/Capture/Tiny.pm blib/lib/Capture/Tiny.pm
Manifying 1 pod document
  DAGOLDEN/Capture-Tiny-0.48.tar.gz
  /usr/bin/make -- OK
The current configuration of allow_installing_outdated_dists is 'ask/no', but for this option we would need 'CPAN::DistnameInfo' installed. Please install 'CPAN::DistnameInfo' as soon as possible. As long as we are not equipped with 'CPAN::DistnameInfo' this option does not take effect
Running make test for DAGOLDEN/Capture-Tiny-0.48.tar.gz
PERL_DL_NONLAZY=1 "/usr/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00-report-prereqs.t ...... # 
# Versions for all modules listed in MYMETA.json (including optional ones):
# 
# === Configure Requires ===
# 
#     Module              Want Have
#     ------------------- ---- ----
#     ExtUtils::MakeMaker 6.17 7.44
# 
# === Build Requires ===
# 
#     Module              Want Have
#     ------------------- ---- ----
#     ExtUtils::MakeMaker  any 7.44
# 
# === Test Requires ===
# 
#     Module              Want     Have
#     ------------------- ---- --------
#     ExtUtils::MakeMaker  any     7.44
#     File::Spec           any     3.78
#     IO::File             any     1.41
#     Test::More          0.62 1.302175
#     lib                  any     0.65
# 
# === Test Recommends ===
# 
#     Module         Want     Have
#     ---------- -------- --------
#     CPAN::Meta 2.120900 2.150010
# 
# === Runtime Requires ===
# 
#     Module       Want   Have
#     ------------ ---- ------
#     Carp          any   1.50
#     Exporter      any   5.74
#     File::Spec    any   3.78
#     File::Temp    any 0.2309
#     IO::Handle    any   1.42
#     Scalar::Util  any   1.55
#     strict        any   1.11
#     warnings      any   1.47
# 
t/00-report-prereqs.t ...... ok   
t/01-Capture-Tiny.t ........ ok     
t/02-capture.t ............. ok     
t/03-tee.t ................. ok     
t/06-stdout-closed.t ....... ok     
t/07-stderr-closed.t ....... ok     
t/08-stdin-closed.t ........ ok     
t/09-preserve-exit-code.t .. ok   
t/10-stdout-string.t ....... ok     
t/11-stderr-string.t ....... ok     
t/12-stdin-string.t ........ ok     
t/13-stdout-tied.t ......... ok     
t/14-stderr-tied.t ......... ok     
t/15-stdin-tied.t .......... ok     
t/16-catch-errors.t ........ ok   
t/17-pass-results.t ........ ok     
t/18-custom-capture.t ...... ok     
t/19-relayering.t .......... ok   
t/20-stdout-badtie.t ....... ok     
t/21-stderr-badtie.t ....... ok     
t/22-stdin-badtie.t ........ ok     
t/23-all-tied.t ............ ok     
t/24-all-badtied.t ......... ok     
t/25-cap-fork.t ............ ok   
All tests successful.
Files=24, Tests=12005, 17 wallclock secs ( 0.96 usr  0.07 sys + 13.59 cusr  6.39 csys = 21.01 CPU)
Result: PASS
  DAGOLDEN/Capture-Tiny-0.48.tar.gz
  /usr/bin/make test -- OK
Running make install for DAGOLDEN/Capture-Tiny-0.48.tar.gz
Manifying 1 pod document
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/usr/share/man/man3'
Do not have write permissions on '/usr/share/man/man3'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 at -e line 1.
make: *** [Makefile:741: pure_site_install] Error 13
  DAGOLDEN/Capture-Tiny-0.48.tar.gz
  /usr/bin/make install  -- NOT OK
----
  You may have to su to root to install the package
  (Or you may want to run something like
    o conf make_install_make_command 'sudo make'
  to raise your permissions.  HMBRAND/App-ccdiff-0.30.tgz
  Has already been unwrapped into directory /home/janek/.cache/cpan/build/App-ccdiff-0.30-2
  HMBRAND/App-ccdiff-0.30.tgz
  Has already been prepared
Running make for H/HM/HMBRAND/App-ccdiff-0.30.tgz
---- Unsatisfied dependencies detected during ----
----        HMBRAND/App-ccdiff-0.30.tgz       ----
    Algorithm::Diff::XS [requires,optional]
cp lib/App/ccdiff.pm blib/lib/App/ccdiff.pm
cp ccdiff blib/script/ccdiff
"/usr/bin/perl" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/ccdiff
Manifying 1 pod document
Manifying 1 pod document
  HMBRAND/App-ccdiff-0.30.tgz
  /usr/bin/make -- OK
The current configuration of allow_installing_outdated_dists is 'ask/no', but for this option we would need 'CPAN::DistnameInfo' installed. Please install 'CPAN::DistnameInfo' as soon as possible. As long as we are not equipped with 'CPAN::DistnameInfo' this option does not take effect
Running make test for HMBRAND/App-ccdiff-0.30.tgz
PERL_DL_NONLAZY=1 "/usr/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/01-no-color.t .. ok    
All tests successful.
Files=1, Tests=36,  1 wallclock secs ( 0.01 usr  0.00 sys +  0.41 cusr  0.07 csys =  0.49 CPU)
Result: PASS
  HMBRAND/App-ccdiff-0.30.tgz
  /usr/bin/make test -- OK
Running make install for HMBRAND/App-ccdiff-0.30.tgz
Manifying 1 pod document
Manifying 1 pod document
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/usr/bin/site_perl'
Do not have write permissions on '/usr/bin/site_perl'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 at -e line 1.
make: *** [Makefile:775: pure_site_install] Error 13
  HMBRAND/App-ccdiff-0.30.tgz
  /usr/bin/make install  -- NOT OK
----
  You may have to su to root to install the package
  (Or you may want to run something like
    o conf make_install_make_command 'sudo make'
  to raise your permissions.Running install for module 'Algorithm::Diff::XS'
Checksum for /home/janek/.cache/cpan/sources/authors/id/A/AU/AUDREYT/Algorithm-Diff-XS-0.04.tar.gz ok
Configuring A/AU/AUDREYT/Algorithm-Diff-XS-0.04.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for Algorithm::Diff::XS
Writing MYMETA.yml and MYMETA.json
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- OK
Running make for A/AU/AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
---- Unsatisfied dependencies detected during ----
----   AUDREYT/Algorithm-Diff-XS-0.04.tar.gz  ----
    Algorithm::Diff [requires]
Running install for module 'Algorithm::Diff'
  RJBS/Algorithm-Diff-1.201.tar.gz
  Has already been unwrapped into directory /home/janek/.cache/cpan/build/Algorithm-Diff-1.201-3
  RJBS/Algorithm-Diff-1.201.tar.gz
  Has already been prepared
  RJBS/Algorithm-Diff-1.201.tar.gz
  Has already been made
  RJBS/Algorithm-Diff-1.201.tar.gz
  Has already been tested successfully
  RJBS/Algorithm-Diff-1.201.tar.gz
  Already tried without success
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  Has already been unwrapped into directory /home/janek/.cache/cpan/build/Algorithm-Diff-XS-0.04-2
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  Has already been prepared
Running make for A/AU/AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
cp lib/Algorithm/Diff/XS.pm blib/lib/Algorithm/Diff/XS.pm
Running Mkbootstrap for XS ()
chmod 644 "XS.bs"
"/usr/bin/perl" "-Iinc" -MExtUtils::Command::MM -e 'cp_nonempty' -- XS.bs blib/arch/auto/Algorithm/Diff/XS/XS.bs 644
"/usr/bin/perl" "-Iinc" "/usr/share/perl5/core_perl/ExtUtils/xsubpp"  -typemap '/usr/share/perl5/core_perl/ExtUtils/typemap'  XS.xs > XS.xsc
mv XS.xsc XS.c
cc -c   -D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -march=x86-64 -mtune=generic -O2 -pipe -fno-plt   -DVERSION=\"0.04\" -DXS_VERSION=\"0.04\" -fPIC "-I/usr/lib/perl5/5.32/core_perl/CORE"   XS.c
rm -f blib/arch/auto/Algorithm/Diff/XS/XS.so
cc  -shared -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -L/usr/local/lib -fstack-protector-strong  XS.o  -o blib/arch/auto/Algorithm/Diff/XS/XS.so  \
      \

chmod 755 blib/arch/auto/Algorithm/Diff/XS/XS.so
Manifying 1 pod document
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  /usr/bin/make -- OK
The current configuration of allow_installing_outdated_dists is 'ask/no', but for this option we would need 'CPAN::DistnameInfo' installed. Please install 'CPAN::DistnameInfo' as soon as possible. As long as we are not equipped with 'CPAN::DistnameInfo' this option does not take effect
Running make test for AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
"/usr/bin/perl" "-Iinc" -MExtUtils::Command::MM -e 'cp_nonempty' -- XS.bs blib/arch/auto/Algorithm/Diff/XS/XS.bs 644
PERL_DL_NONLAZY=1 "/usr/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t
t/base.t .. ok     
t/oo.t .... ok       
All tests successful.
Files=2, Tests=1004,  0 wallclock secs ( 0.03 usr  0.00 sys +  0.05 cusr  0.01 csys =  0.09 CPU)
Result: PASS
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  /usr/bin/make test -- OK
Running make install for AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
"/usr/bin/perl" "-Iinc" -MExtUtils::Command::MM -e 'cp_nonempty' -- XS.bs blib/arch/auto/Algorithm/Diff/XS/XS.bs 644
Manifying 1 pod document
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/usr/lib/perl5/5.32/site_perl/Algorithm/Diff'
mkdir /usr/lib/perl5/5.32/site_perl/Algorithm: Permission denied at /usr/share/perl5/core_perl/ExtUtils/Install.pm line 489.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 at -e line 1.
make: *** [Makefile:738: pure_site_install] Error 13
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  /usr/bin/make install  -- NOT OK
Running install for module 'Algorithm::Diff::XS'
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  Has already been unwrapped into directory /home/janek/.cache/cpan/build/Algorithm-Diff-XS-0.04-2
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  Has already been prepared
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  Has already been made
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  Has already been tested successfully
  AUDREYT/Algorithm-Diff-XS-0.04.tar.gz
  Already tried without success
Tux commented 3 years ago

oooww, there is a truckload of information in this log:

The current configuration of allow_installing_outdated_dists is 'ask/no', but for this option we would need 'CPAN::DistnameInfo' installed. Please install 'CPAN::DistnameInfo' as soon as possible. As long as we are not equipped with 'CPAN::DistnameInfo' this option does not take effect

Not vital, but it will likely make your installations more smooth if you install CPAN::DistnameInfo

Running make install for RJBS/Algorithm-Diff-1.201.tar.gz
Manifying 2 pod documents
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/usr/share/man/man3'
Do not have write permissions on '/usr/share/man/man3'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

So, you are trying to install as a normal user into the system space. Unless you use sudo this won't (and shouldn't) work. You've got several options here:

The same error applies to installing Capture::Tiny suse$ sudo zypper install perl-Capture-Tiny centos$ sudo yum install perl-Capture-Tiny

As these two prerequisites failed to install, App::ccdiff won't install. All prereqs have to be met.

xeruf commented 3 years ago

See, I have no clue concerning Perl :) thank you!

On arch I needed sudo pacman -S perl-algorithm-diff perl-capture-tiny, and it works now :)

So CPAN can't install into the userspace (i.e. ~/.local/bin)? I guess gonna do it manually then, and maybe I'll get around to creating an AUR package :)

Tux commented 3 years ago

To use a local environment, use cpan -I, but cpan is not as well suited for this as cpanm is.

$ cpanm --help |& grep -i -e local -e bin -e lib
  -l,--local-lib            Specify the install base to install modules
  -L,--local-lib-contained  Specify the install base to install all non-core modules
  cpanm ~/dists/MyCompany-Enterprise-1.00.tar.gz            # install from a local file
  cpanm .                                                   # install from local directory
  cpanm -L extlib Plack                                     # install Plack and all non-core deps into extlib

You can read all about the differences and alternatives here and the docs for cpanm here