summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2015-07-12 08:54:07 +0200
committerDavid Bremner <david@tethera.net>2015-07-12 22:45:14 +0200
commit321c4fb956e7bed1feb218f8266aeb45d4441a06 (patch)
tree422e1a1c6c0dc7f5e0e67478eedde6fec011d49e
parent054fd3bdac9847a4008cc9ec447a83e5fb83dd55 (diff)
Initial support for multiple-file packages
Still no byte compilation, and grotesque amounts of output
-rw-r--r--dh-elpa.el20
-rwxr-xr-xdh_elpa29
2 files changed, 40 insertions, 9 deletions
diff --git a/dh-elpa.el b/dh-elpa.el
index cff7009..ece3a9e 100644
--- a/dh-elpa.el
+++ b/dh-elpa.el
@@ -33,15 +33,13 @@
(dirname (package-desc-full-name pkg-desc))
(pkg-dir (expand-file-name dirname destdir))
(backup-inhibited t))
+ (make-directory pkg-dir t)
(pcase (package-desc-kind pkg-desc)
(`tar
- (make-directory package-user-dir t)
- ;; FIXME: should we delete PKG-DIR if it exists?
- (let* ((default-directory (file-name-as-directory package-user-dir)))
- (package-untar-buffer dirname)))
+ (let ((default-directory (file-name-as-directory destdir)))
+ (package-untar-buffer dirname)))
(`single
(let ((el-file (expand-file-name (format "%s.el" name) pkg-dir)))
- (make-directory pkg-dir t)
(package--write-file-no-coding el-file)))
(kind (error "Unknown package kind: %S" kind)))
(package--make-autoloads-and-stuff pkg-desc pkg-dir)
@@ -66,7 +64,13 @@ Downloads and installs required packages as needed."
into second command line argument"
(let ((dest (car command-line-args-left))
(el-file (cadr command-line-args-left)))
- (with-temp-buffer
- (insert-file-contents-literally el-file)
- (dhelpa-install-from-buffer dest))))
+ (dhelpa-install-file dest el-file)))
+
+;;;###autoload
+(defun dhelpa-install-file (dest el-file)
+ (with-temp-buffer
+ (insert-file-contents-literally el-file)
+ (when (string-match "\\.tar\\'" el-file) (tar-mode))
+ (dhelpa-install-from-buffer (expand-file-name dest))))
+
;;; dh-elpa.el ends here
diff --git a/dh_elpa b/dh_elpa
index c122f48..be68a1f 100755
--- a/dh_elpa
+++ b/dh_elpa
@@ -1,5 +1,9 @@
#!/usr/bin/perl
+use strict;
+use Cwd qw{ getcwd };
+use File::Temp qw{ tempdir };
+
use Debian::Debhelper::Dh_Lib;
init();
@@ -12,6 +16,10 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
my $file=pkgfile($package,"elpa");
my @files;
+
+ # Call isnative because it sets $dh{VERSION}
+ # as a side effect.
+ isnative($package);
if ($file) {
@files=filearray($file, ".");
}
@@ -20,10 +28,29 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
push @files, @ARGV;
}
+ my $pkg_file;
if (scalar(@files) == 1) {
$pkg_file=$files[0];
} else {
- die("multifile packages unimplimented");
+ # 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 = "$package-$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(qw{emacs -batch -Q -l package},