From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Achim Gratz Newsgroups: gmane.emacs.bugs Subject: bug#10125: RFE: require and load-path-shadowing Date: Sat, 12 Jan 2013 11:15:40 +0100 Organization: Linux Private Site Message-ID: <87ip72n1v7.fsf__31846.7005076402$1357988983$gmane$org@Rainer.invalid> References: <87sj68eogm.fsf@Rainer.invalid> <87wqvjd7qa.fsf@Rainer.invalid> <87bocvcx9f.fsf__44551.6247455545$1357934081$gmane$org@Rainer.invalid> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1357988964 7485 80.91.229.3 (12 Jan 2013 11:09:24 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 12 Jan 2013 11:09:24 +0000 (UTC) To: 10125@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Jan 12 12:09:41 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Ttyxx-0004hC-1E for geb-bug-gnu-emacs@m.gmane.org; Sat, 12 Jan 2013 12:09:33 +0100 Original-Received: from localhost ([::1]:46276 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ttyxg-0000iD-Uz for geb-bug-gnu-emacs@m.gmane.org; Sat, 12 Jan 2013 06:09:16 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:36182) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TtyxW-0000Ma-7v for bug-gnu-emacs@gnu.org; Sat, 12 Jan 2013 06:09:11 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TtyxP-0000sT-GQ for bug-gnu-emacs@gnu.org; Sat, 12 Jan 2013 06:09:06 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:50851) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TtyxG-0000rQ-CW; Sat, 12 Jan 2013 06:08:50 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TtyxS-00026L-3D; Sat, 12 Jan 2013 06:09:02 -0500 X-Loop: help-debbugs@gnu.org In-Reply-To: <81pqgh90sp.fsf@gmail.com> Resent-From: Achim Gratz Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org, emacs-orgmode@gnu.org Resent-Date: Sat, 12 Jan 2013 11:09:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 10125 X-GNU-PR-Package: emacs,org-mode X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.13579889278055 (code B ref -1); Sat, 12 Jan 2013 11:09:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 12 Jan 2013 11:08:47 +0000 Original-Received: from localhost ([127.0.0.1]:56315 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TtyxD-00025r-FU for submit@debbugs.gnu.org; Sat, 12 Jan 2013 06:08:47 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:52909) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TtyxB-00025f-VO for submit@debbugs.gnu.org; Sat, 12 Jan 2013 06:08:46 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ttywl-0000mC-KZ for submit@debbugs.gnu.org; Sat, 12 Jan 2013 06:08:28 -0500 Original-Received: from lists.gnu.org ([208.118.235.17]:53499) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ttywl-0000m2-HJ for submit@debbugs.gnu.org; Sat, 12 Jan 2013 06:08:19 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:35998) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ttywg-0007nr-TJ for bug-gnu-emacs@gnu.org; Sat, 12 Jan 2013 06:08:19 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ttywa-0000kl-66 for bug-gnu-emacs@gnu.org; Sat, 12 Jan 2013 06:08:14 -0500 Original-Received: from plane.gmane.org ([80.91.229.3]:38756) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tty8A-00076Y-DL for bug-gnu-emacs@gnu.org; Sat, 12 Jan 2013 05:16:02 -0500 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1Tty8N-0001CI-9u for bug-gnu-emacs@gnu.org; Sat, 12 Jan 2013 11:16:15 +0100 Original-Received: from pd9eb289d.dip.t-dialin.net ([217.235.40.157]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 12 Jan 2013 11:16:15 +0100 Original-Received: from Stromeko by pd9eb289d.dip.t-dialin.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 12 Jan 2013 11:16:15 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 57 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: pd9eb289d.dip.t-dialin.net User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2.91 (gnu/linux) Cancel-Lock: sha1:dKWvanI+OKnO08gvNkgu/R1axBs= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:69647 Archived-At: Achim Gratz writes: > Stefan Monnier writes: >> Yes, this subroutine is never directly called from C, so placing an >> advice should work just fine. > > OK, I'll give it a try. Here's what I've come up with: --8<---------------cut here---------------start------------->8--- ;; some parts of Org might already have been used from a different ;; place, try to reload these parts from the current load-path (defadvice require (before org-require-reload-when-shadowed (feature &optional filename noerror) activate compile preactivate) "Check whether a required feature has been shadowed by changing `load-path' after it has been loaded and reload that feature from current load-path in this case." (when (featurep feature) (let ((feature-name (or filename (symbol-name feature)))) (when (string-match "^\\(org\\|ob\\)[.-]" feature-name) (let ((feature-lib (file-name-directory (or (locate-library feature-name) ""))) (feature-dir (file-name-directory (feature-file feature)))) ;(message "require-reload-when shadowed %s\n\t%s\n\t%s" feature-name feature-lib feature-dir) (when (not (string= feature-lib feature-dir)) (message "Reloading %s" feature-name) (unload-feature feature t))))))) (require 'org-macs) (require 'org-compat) (require 'org-entities) (require 'org-faces) (require 'org-list) (require 'org-pcomplete) (require 'org-src) (require 'org-footnote) ;; babel (require 'ob) (eval-and-compile (ad-unadvise 'require)) --8<---------------cut here---------------end--------------->8--- This takes care of a situation when Org is activated after some parts of it have already been loaded (maybe via autoload) and the load-path has been changed inbetween. This uses unload-feature although it would probably work to just (setq features (delq feature features)). For package manager, a slightly more general version of the above (not conditionalized on the feature starting with "org" or "ob") could be used around the package compilation. I haven't yet tried this, though. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Wavetables for the Waldorf Blofeld: http://Synth.Stromeko.net/Downloads.html#BlofeldUserWavetables