#!/usr/bin/perl use strict; use Cwd qw{ getcwd }; use File::Temp qw{ tempdir tempfile}; use IO::Handle; use Debian::Debhelper::Dh_Lib; init(); sub doit_quietly { my ($handle,$tmpfile) = tempfile(UNLINK=>1); my $exitcode; verbose_print(escape_shell(@_)); open (CPERR,">&STDERR") or die "$!"; open (CPOUT,">&STDOUT") or die "$!"; STDOUT->fdopen($handle,'w'); STDERR->fdopen($handle,'w'); my $ret=doit_noerror(@_); STDOUT->fdopen(\*CPOUT,'w'); STDERR->fdopen(\*CPERR,'w'); if (!$ret){ $exitcode=$?; seek $handle, 0, 0 or die "$!"; print while (<$handle>); my $command=join(" ",@_); error("$command returned exit code ".($exitcode >> 8)); } } my $elpadir="/usr/share/emacs/site-lisp/elpa"; foreach my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); my $file=pkgfile($package,"elpa"); my $elpapkg=$package; # TODO do this more sanely or at least allow an override $elpapkg =~ s/^elpa-//; verbose_print("Using elpa package name $elpapkg"); my @files; # Call isnative because it sets $dh{VERSION} # as a side effect. isnative($package); if ($file) { @files=filearray($file, "."); } if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) { push @files, @ARGV; } my $pkg_file; if (scalar(@files) == 1) { $pkg_file=$files[0]; } else { # TODO: add CLEANUP when somewhat debugged. my $tempdir = tempdir(); my $version = $dh{VERSION} or die "version not found!"; $version =~ s/-[^-]+//; # strip Debian version my $pkg_dir = "$elpapkg-$version"; $pkg_file = "$tempdir/$pkg_dir.tar"; mkdir "$tempdir/$pkg_dir" or die "$!"; # copy files into tempdir, flattening hierarchy # TODO: do this more correctly foreach my $el_file (@files) { doit("cp", "-a", $el_file, "$tempdir/$pkg_dir"); } my $cwd = getcwd(); chdir $tempdir or die "$!"; doit("tar","cf",$pkg_file,$pkg_dir); chdir $cwd or die "$!"; } doit_quietly(qw{emacs -batch -Q -l package}, '--eval',"(add-to-list 'package-directory-list \"$elpadir\")", qw{-f package-initialize -l dh-elpa.el}, qw{-f dhelpa-batch-install-file}, "$tmp/$elpadir", $pkg_file); }