From: "Sebastien Vauban" <wxhgmqzgwmuf-geNee64TY+gS+FvcfC7Uqw@public.gmane.org>
To: help-gnu-emacs-mXXj517/zsQ@public.gmane.org
Subject: Re: Show who is requiring
Date: Fri, 07 Dec 2012 22:57:02 +0100 [thread overview]
Message-ID: <80zk1pv841.fsf@somewhere.org> (raw)
In-Reply-To: 804nkl7eqc.fsf@somewhere.org
Hello Stefan and all,
"Sebastien Vauban" wrote:
> Stefan Monnier wrote:
>>>>> I tried using (current-buffer) to get the name of the "source" package
>>>>> (i.e., the one which makes the `require' request), but that's wrong. Any
>>>>> idea how to get the name of the "caller" package?
>>>>
>>>> IIUC you want load-file-name.
>>>
>>> How does this report the names of files that require another package?
>>
>> IIUC he has put an advice on `require', so in this advice, `load-file-name'
>> should contain the name of the code that's calling the `require'.
>
> From your description, that's exactly what I'm after. I'll test and report.
For some unknown reason (I mean: to me), `load-file-name' is sometimes nil,
like if the requires came out of nowhere:
--8<---------------cut here---------------start------------->8---
Loading Minimal Emacs...
.emacs-minimal -> help-fns... Done [3 times]
Loading Minimal Emacs... Done
org -> calendar...
calendar -> cal-menu...
cal-menu -> calendar... Done
calendar -> cal-menu... Done
org -> calendar... Done
org -> find-func... Done
org -> format-spec... Done
org -> ob-emacs-lisp...
ob-emacs-lisp -> ob...
ob -> ob-eval... Done
ob -> org-macs... Done
ob -> org-compat...
org-compat -> org-macs... Done
ob -> org-compat... Done
ob-emacs-lisp -> ob... Done
org -> ob-emacs-lisp... Done
org -> org-compat... Done
org -> outline... Done
org -> noutline... Done
org -> time-date... Done
org -> easymenu... Done
org -> overlay... Done
org -> org-macs... Done
org -> org-entities...
org-entities -> org-macs... Done
org -> org-entities... Done
org -> org-faces...
org-faces -> org-macs... Done
org-faces -> org-compat... Done
org -> org-faces... Done
org -> org-list...
org-list -> org-macs... Done
org-list -> org-compat... Done
org -> org-list... Done
org -> org-pcomplete...
org-pcomplete -> org-macs... Done
org-pcomplete -> org-compat... Done
org-pcomplete -> pcomplete...
pcomplete -> comint...
comint -> ring... Done
comint -> ansi-color... Done
comint -> regexp-opt... Done
pcomplete -> comint... Done
org-pcomplete -> pcomplete... Done
org -> org-pcomplete... Done
org -> org-src...
org-src -> org-macs... Done
org-src -> org-compat... Done
org-src -> ob-keys...
ob-keys -> ob... Done
org-src -> ob-keys... Done
org-src -> ob-comint...
ob-comint -> ob... Done
ob-comint -> org-compat... Done
ob-comint -> comint... Done
org-src -> ob-comint... Done
org -> org-src... Done
org -> org-footnote...
org-footnote -> org-macs... Done
org-footnote -> org-compat... Done
org -> org-footnote... Done
org -> ob... Done
org -> ob-table...
ob-table -> ob... Done
org -> ob-table... Done
org -> ob-lob...
ob-lob -> ob... Done
ob-lob -> ob-table... Done
org -> ob-lob... Done
org -> ob-ref...
ob-ref -> ob... Done
org -> ob-ref... Done
org -> ob-tangle...
ob-tangle -> ob... Done
ob-tangle -> org-src... Done
org -> ob-tangle... Done
org -> ob-comint... Done
org -> ob-keys... Done
org -> font-lock... Done
org -> help-fns... Done [2 times]
org -> bytecomp...
bytecomp -> backquote... Done
bytecomp -> macroexp... Done
bytecomp -> cconv... Done
org -> bytecomp... Done
org -> warnings... Done
byte-opt -> bytecomp... Done
byte-opt -> macroexp... Done
org -> help-fns... Done [3 times]
nil? -> org-bbdb...
org-bbdb -> org... Done
nil? -> org-bbdb... Done
nil? -> org-bibtex...
org-bibtex -> org... Done
org-bibtex -> bibtex...
bibtex -> button... Done
org-bibtex -> bibtex... Done
org-bibtex -> org-compat... Done
nil? -> org-bibtex... Done
nil? -> org-docview...
org-docview -> org... Done
nil? -> org-docview... Done
nil? -> org-gnus...
org-gnus -> org... Done
org-gnus -> gnus-util...
gnus-util -> time-date... Done
org-gnus -> gnus-util... Done
nil? -> org-gnus... Done
nil? -> org-info...
org-info -> org... Done
nil? -> org-info... Done
nil? -> org-jsinfo...
org-jsinfo -> org-exp...
org-exp -> org... Done
org-exp -> org-macs... Done
org-exp -> org-agenda...
org-agenda -> org... Done
org-agenda -> org-macs... Done
org-exp -> org-agenda... Done
org-exp -> org-exp-blocks...
org-exp-blocks -> find-func... Done
org-exp-blocks -> org-compat... Done
org-exp -> org-exp-blocks... Done
org-exp -> ob-exp...
ob-exp -> ob... Done
ob-exp -> org-exp-blocks... Done
org-exp -> ob-exp... Done
org-exp -> org-src... Done
org-jsinfo -> org-exp... Done
org-jsinfo -> org-html...
org-html -> org-exp... Done
org-html -> format-spec... Done
org-jsinfo -> org-html... Done
nil? -> org-jsinfo... Done
nil? -> org-irc...
org-irc -> org... Done
nil? -> org-irc... Done
nil? -> org-mew...
org-mew -> org... Done
nil? -> org-mew... Done
nil? -> org-mhe...
org-mhe -> org... Done
nil? -> org-mhe... Done
nil? -> org-rmail...
org-rmail -> org... Done
nil? -> org-rmail... Done
nil? -> org-vm...
org-vm -> org... Done
nil? -> org-vm... Done
nil? -> org-w3m...
org-w3m -> org... Done
nil? -> org-w3m... Done
nil? -> org-wl...
org-wl -> org... Done
nil? -> org-wl... Done
OVERVIEW
Loading vc-svn...done
nil? -> vc-svn... Done
--8<---------------cut here---------------end--------------->8---
The above trace is obtained with the following minimal Emacs file:
--8<---------------cut here---------------start------------->8---
(message "Loading Minimal Emacs...")
(defadvice require (around require-around)
"Leave a trace of packages being loaded."
(let* ((feature (ad-get-arg 0))
(require-depth (or (and (boundp 'require-depth) require-depth)
0))
(prefix (concat (make-string (* 2 require-depth) ? ) "")))
(cond ((featurep feature)
(message "%s%s -> %s... Done" ;; already loaded
prefix
(if load-file-name
(file-name-base load-file-name)
"nil?")
feature)
(setq ad-return-value feature))
(t
(let ((lvn/time-start))
(message "%s%s -> %s..."
prefix
(if load-file-name
(file-name-base load-file-name)
"nil?")
feature)
(setq lvn/time-start (float-time))
(let ((require-depth (1+ require-depth)))
ad-do-it)
(message "%s%s -> %s... Done"
prefix
(if load-file-name
(file-name-base load-file-name)
"nil?")
feature))))))
(ad-activate 'require)
(message "Loading Minimal Emacs... Done")
--8<---------------cut here---------------end--------------->8---
launched with the command `emacs -q -l .emacs-minimal.el'.
In the above session, I just opened a random `.org' file...
Any idea on (how to get) who is requiring packages such as:
- org-bbdb,
- org-bibtex,
- org-docview,
- org-gnus,
- org-info,
- org-jsinfo,
- org-irc,
- org-mew,
- org-mhe,
- org-rmail,
- org-vm,
- org-w3m,
- org-wl, and
- vc-svn?
Writing it down, I just realize that all the `org-*' packages here are the
ones in `org-modules'. In fact, that's `org.el' who's requiring them:
--8<---------------cut here---------------start------------->8---
(defun org-load-modules-maybe (&optional force)
"Load all extensions listed in `org-modules'."
(when (or force (not org-modules-loaded))
(mapc (lambda (ext)
(condition-case nil (require ext)
(error (message "Problems while trying to load feature `%s'" ext))))
org-modules)
(setq org-modules-loaded t)))
--8<---------------cut here---------------end--------------->8---
Why isn't `load-file-name' set to `org.el' in this case, then?
No idea, neither, for `vc-svn'... Who required it? Who's hidden under the
alias nil, here?
Best regards,
Seb
--
Sebastien Vauban
next prev parent reply other threads:[~2012-12-07 21:57 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-16 23:08 Show who is requiring Sebastien Vauban
2012-11-17 7:53 ` Eli Zaretskii
2012-11-17 8:29 ` Bastien
2012-11-17 9:43 ` Oleksandr Gavenko
2012-11-17 10:05 ` Bastien
[not found] ` <mailman.13164.1353140953.855.help-gnu-emacs@gnu.org>
2012-11-17 9:41 ` Sebastien Vauban
2012-11-17 10:11 ` Eli Zaretskii
2012-11-17 10:38 ` Thien-Thi Nguyen
2012-11-17 11:02 ` Eli Zaretskii
2012-11-17 12:00 ` Thien-Thi Nguyen
2012-11-17 16:17 ` Drew Adams
2012-11-19 14:59 ` Stefan Monnier
2012-11-19 15:18 ` Ludwig, Mark
[not found] ` <mailman.13321.1353338324.855.help-gnu-emacs@gnu.org>
2012-11-19 16:03 ` Stefan Monnier
2012-11-19 16:13 ` Sebastien Vauban
2012-12-07 21:57 ` Sebastien Vauban [this message]
2012-12-07 22:31 ` Sebastien Vauban
2012-12-07 22:54 ` Sebastien Vauban
2012-12-11 1:57 ` Stefan Monnier
2012-11-19 15:54 ` Kevin Rodgers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=80zk1pv841.fsf@somewhere.org \
--to=wxhgmqzgwmuf-genee64ty+gs+fvcfc7uqw@public.gmane.org \
--cc=help-gnu-emacs-mXXj517/zsQ@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.