Opened 11 years ago

Last modified 9 years ago

#462 new defect

Improve library bundling

Reported by: David Aspinall Owned by: David Aspinall
Priority: minor Milestone: PG-Emacs-4.4
Component: 2:pg-emacs Keywords:
Cc:

Description

(Jonas Bernoulli sent me the following message - David)

The Emacsmirror (1) is a large collection of Emacs packages. All packages are available as git repositories; the last version and tagged releases are also available as tarballs. Upstream changes are integrated regularly.

As the maintainer of the mirror I occasionally try to fix problems of mirrored packages. Currently I am trying to resolve feature conflicts that result from one package bundling libraries from another package. In many cases these libraries were probably included so that users would not have to find, download and install each dependency manually.

Unfortunately bundling also has some negative side-effects: if the bundled libraries are also installed separately, then it is unclear which version actually gets loaded when the respective feature is required. Initially that isn't a big problem but unfortunately in may cases upstream changes are not included or only after a long delay. This can be very confusing for users who are not aware that some of the installed packages bundle libraries which are also installed separately. In other cases bugs are fixed in the bundled versions but the fixes are never submitted to upstream.

Also now that Emacs contains the package.el package manager there is a better way to not require users to manually deal with dependencies: add the package (and when necessary the dependencies) to the melpa (2) package repository. If make is required to install your make you might want to add it to el-get's (another popular package manager) (3) package repository instead.

  1. https://emacsmirror.github.com
  2. http://melpa.milkbox.net
  3. https://github.com/dimitri/el-get

Alternatively if you want to keep bundling these libraries please move them to a directory only containing no original libraries and add the file ".nosearch" to that directory. You can then load the library using something like this:

(or (require 'bundled nil t)
    (let ((load-path
           (cons (expand-file-name "fallback-libs"
                                   (or load-file-name buffer-file-name)
                                   load-path))))
      (require 'bundled)))

Of course if your version differs from the upstream version this might not be enough and you actually should get your changes merged.

proofgeneral bundles at least the following libraries:

  • maths-menu
  • mmm-*
  • texi-docstring-magic

Change History (2)

comment:1 Changed 11 years ago by David Aspinall

Priority: majorminor

comment:2 Changed 9 years ago by David Aspinall

Milestone: PG-Emacs-4.3PG-Emacs-4.4
Note: See TracTickets for help on using tickets.