cl-asdf 1.84 ebuild does not check for existence of /usr/lib/common-lisp before trying to install files there, however even though the ebuild does not correctly install all files the first time around, it doesn't error/fail out indicating there was a problem. Once a couple of lisp packages that use /usr/lib/common-lisp get installed, the directory gets created and further emerges will work correctly. Reproducible: Always Steps to Reproduce: 1. start with a clean system that doesn't have /usr/lib/common-lisp 2. emerge cl-asdf, which will not fully install, but also not fail indicating an error Expected Results: check for existence of /usr/lib/common-lisp and mkdir it if necessary
This also affects the ebuild for dev-lisp/cl-defsystem3-3.3i-r4
Created attachment 40246 [details, diff] dodir patch This patch adds dodir statements before insinto statements to ensure the directories are created.
In CVS. Thanks.
mkennedy has brought to my attention the fact that I may have added a redundency in this ebuild by adding the dodir statements to explicitly create the directories in question. This is because they should be created when insinto executes (install -d is called). This being the case, why was this bug filed? Were you seeing an error and thus filed the bug or did you simply notice that the ebuild omitted the any appearant directoty checking? I'm re-opening the bug until this hs nailed down.
this package and cl-defsystem are both dependencies for the clisp package. when these are installed they attempt to execute a program in /usr/lib/common-lisp/bin (not sure what eventually gets installed there, but presumably it is for additional setup for other lisp packages) this dir is not created until a later dependency, so the ebuilds for this and cl-defsystem both generate errors to the effect of "/usr/lib/common-lisp does not exist" which to my mind is a bogus error, since I'd think it should simply silently make the dir and not do anything rather than emit a rather alarming error message during the install perhaps checking for the existence of the dir before trying to execute something in it would be a more appropriate solution than my original "make the dir" idea, although it seems like a later package just makes the empty dir anyway
OK, looking deeper into this one. At postinstall, the ebuild calls reregister-all-common-lisp-implementations() from common-lisp-common. This function tries to run scripts in /usr/lib/common-lisp/bin ($clc_bin_dir) which, if this if your first install of any lisp implementation, will fail because it doesn't exist. Because no lisp is installed yet, there are no implementations with which to reregister. I suggest a patch to reregister() which only runs the reregister scripts if virtual/commonlisp has been provided. Of course, this would require that all of the lisp implementations provide virtual/commonlisp. A quick grep shows that the only ebuilds providing this virtual are the sbcl ebuilds. In light of all of this, the dodir statements I added are definitly not required.
Comment #4 ndimiduk: insinto/doins creates necessary directory, so it's not needed. See 5 ebuild and insinto() in /usr/lib/portage/bin/ebuid.sh.
This should now be fixed. It was a dependency problem with cl-asdf, cl-defsystem3 and common-lisp-controller.