Hello, I am the bnf-mode[1] creator. I am trying to figure out what happens when I install the mode from the tar archive. Frankly speaking, I get a strange error message. You can see the fresh Makefile I use to create tar archive at GitHub repo[2]. All I need to create a tar archive is a command `make package'. And it seems it works as expected. However, after creating the archive, I was failed to install it. After changing this line[3] as follows: diff --git a/Makefile b/Makefile index c04c01c..d11ac3d 100644 --- a/Makefile +++ b/Makefile @@ -122,7 +122,8 @@ package: $(PACKAGE_NAME).tar .PHONY: install install: $(PACKAGE_NAME).tar - $(EMACS) --batch -l package -f package-initialize --eval "(package-install-file \"$(PWD)/$(PACKAGE_NAME).tar\")" + $(EMACS) --batch -l package -f package-initialize --eval \ + "(let ((debug-on-error t))(package-install-file \"$(PWD)/$(PACKAGE_NAME).tar\"))" .PHONY: help help: .title I got the following debug trace: $ make install Parsing tar file... Parsing tar file...done Debugger entered--Lisp error: (wrong-type-argument arrayp nil) tar--describe-as-link(nil) tar--check-descriptor(nil) tar-get-file-descriptor("bnf-mode-0.4.3/PaxHeader/PaxHeader-pkg.el") package-tar-file-info() package-install-from-buffer() package-install-file("/home/klay/work/bnf-mode/bnf-mode-0.4.3.tar") (let ((debug-on-error t)) (package-install-file "/home/klay/work/bnf-mode/bnf-mode-0.4.3.tar")) eval((let ((debug-on-error t)) (package-install-file "/home/klay/work/bnf-mode/bnf-mode-0.4.3.tar"))) command-line-1(("-l" "package" "-f" "package-initialize" "--eval" "(let ((debug-on-error t))(package-install-file \"/home/klay/work/bnf-mode/bnf-mode-0.4.3.tar\"))")) command-line() normal-top-level() make: *** [Makefile:125: install] Error 255 I have no idea what is PaxHeader/PaxHeader-pkg.el and even stranger that after inspecting `tar-mode' I found this: (defun tar-get-file-descriptor (file) ;; Used by package.el. (let ((desc ())) (dolist (hdr tar-parse-info) (when (equal file (tar-header-name hdr)) (setq desc hdr))) (tar--check-descriptor desc) desc)) As you can see without any validation `desc' was passed to `tar--check-descriptor` defun. The `tar--check-descriptor` is just calls `tar--describe-as-link`: (defun tar--check-descriptor (descriptor) (let ((link-desc (tar--describe-as-link descriptor))) (when link-desc (error "This is %s, not a real file" link-desc)))) And finally it calls `tar-header-link-type': (defun tar--describe-as-link (descriptor) (let ((link-p (tar-header-link-type descriptor))) (if link-p (cond ((eq link-p 5) "a directory") ((eq link-p 20) "a tar directory header") ((eq link-p 28) "a next has longname") ((eq link-p 29) "a multivolume-continuation") ((eq link-p 35) "a sparse entry") ((eq link-p 38) "a volume header") ((eq link-p 55) "a pax global extended header") ((eq link-p 72) "a pax extended header") (t "a link"))))) I will be happy for any help and tips in the right direction. N.B. My GNU Emacs version is 26.3 on Debian/GNU Linux 10. [1]: https://elpa.gnu.org/packages/bnf-mode.html [2]: https://github.com/sergeyklay/bnf-mode/blob/87c779851e44aab6639cdf2ab699aa9cd41f97c7/Makefile [3]: https://github.com/sergeyklay/bnf-mode/blob/87c779851e44aab6639cdf2ab699aa9cd41f97c7/Makefile#L125 -- Serghei