all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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


  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.