diff options
-rw-r--r-- | dh-elpa.el | 23 | ||||
-rwxr-xr-x | dh_elpa.in | 2 |
2 files changed, 23 insertions, 2 deletions
@@ -119,7 +119,10 @@ The directory must either be named `package' or `package-version'. If a working directory WORK-DIR is specified, cleaning up is the caller's responsibility. Optional EPOCH-TIME specifies time to use in generated autoloads files." - (let* ((desc (package-load-descriptor elpa-dir))) + (unless (file-exists-p + (expand-file-name (package--description-file elpa-dir) elpa-dir)) + (dhelpa-generate-pkg-file elpa-dir)) + (let ((desc (package-load-descriptor elpa-dir))) (if (not desc) (message "Could not compute version from directory %s" elpa-dir) (let* ((canonical-dir (package-desc-full-name desc)) @@ -137,4 +140,22 @@ specifies time to use in generated autoloads files." (delete-file tar-file) (delete-directory temp-dir)))))) +(defun dhelpa-generate-pkg-file (pkg-dir) + "Generate PKG-DIR/foo-pkg.el by consulting PKG-DIR/foo.el." + (let* ((pkg-file (expand-file-name (package--description-file pkg-dir) pkg-dir)) + (root-file (replace-regexp-in-string "-pkg" "" pkg-file)) + (pkg-desc + (condition-case nil + (with-temp-buffer + (find-file root-file) + (package-buffer-info)) + (error (progn + (message "dh_elpa: couldn't generate -pkg file; please write one") + (kill-emacs -1)))))) + ;; although the docstring for `package-generate-description-file' + ;; says that it generates a description for single-file packages, + ;; there is in fact no difference between the descriptions for + ;; single-file and multifile packages + (package-generate-description-file pkg-desc pkg-file))) + ;;; dh-elpa.el ends here @@ -178,7 +178,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) { if ($file) { @files=filearray($file, "."); scalar(@files) == 1 || grep { m/\b${elpapkg}-pkg.el$/ } @files or - error "missing ${elpapkg}-pkg.el"; + warning "missing ${elpapkg}-pkg.el; will try to generate it"; } if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) { |