Copyright (C) 2020-2022 Free Software Foundation, Inc.
See the end of the file for license conditions.
This repository contains the sources, deployment scripts, and auxiliary files
for NonGNU ELPA (elpa.nongnu.org
). NonGNU ELPA is a free software Emacs Lisp
Package Archive (ELPA) with extensions to GNU Emacs.
This file explains the repository layout, how to add and edit
packages, and how to deploy the archive (either on elpa.nongnu.org
,
or a local copy for testing purposes).
The layout of the nongnu.git
repository is as follows:
- The
main
branch holds the list of specifications of the packages included. It does not hold the scripts to build them. - The copy of the code for a package
<pkg-name>
is not kept inmain
but in a branch namedexternals/<pkg-name>
. Package branches are normally placed as git worktrees in the subdirectorypackages/<pkg-name>
(see below). - The package archive deployment scripts are in the
elpa-admin
branch in the externalelpa.git
repository. This branch is normally put as a git worktree in theadmin
subdirectory.
Start with source that is cloned directly from Savannah. See the Savannah page and look for “NonGNU ELPA”. Using a clone of a clone does not work.
The Makefile
in main
will automatically pull the elpa-admin
branch to populate the admin
subdirectory. This is done by:
make
This will fetch a branch from elpa.git
containing all the build
scripts and makefiles and place them where needed.
To checkout packages, see the instructions in the GNU ELPA README.
Building the NonGNU ELPA package archive means creating the package tarballs,
the archive-contents
file, and other associated files, in an ELPA compatible
directory. This format is described in the Emacs Lisp Reference Manual chapter
Packaging Basics (web link) or from Emacs:
(info "(elisp) Packaging")
To build the archive(s), all it takes is:
cd .../nongnu
make build-all
This will build all the tarballs as well as the archive-contents
file and
put them into the archive
and archive-devel
subdirectories.
If the archive exists already, it will only build those tarballs that are new.
You can also (re)build a specific package [PKG]
with:
make build/[PKG]
If you want to force a rebuild of a tarball that was already built, you have to do:
rm archive/[PKG]-[VERSION].tar; make build/[PKG]
If you have the GNU Guix package manager installed, it can take care of all the dependencies necessary for the ELPA build system to run. You can initialise a shell session by running
guix shell -m manifest.scm
The packages can be installed and used in-place. First you need to make
sure the package(s) you care about are placed in the packages
subdirectory,
e.g. with make worktrees
, and then you can add that .../packages
to your
package-directory-list
. And once that is done, you can do:
make packages/[PKG]
to create the [PKG]-pkg.el
and [PKG]-autoloads.el
file as well as compile
all the ELisp files in that package. You can also do that for all the
packages with:
make
we can add it to NonGNU ELPA if we want to. If the code doesn’t follow them, we can change the code to follow them. We may also change the code in NonGNU ELPA for other reasons, technical or not. After all, it is free software.
to NonGNU ELPA packages, in order to simplify integration of future changes from the upstream version.
NonGNU ELPA version, but we would like to invite them to do that, or to cooperate and coordinate with us in doing that. If you are the developer of a NonGNU ELPA package, or a package that might be added to NonGNU ELPA, and you’re interested in maintaining it there, let’s discuss it.
notices clearly on each nontrivial file. The notices do not have to follow the FSF conventions about their presentation.
Software files need to carry a free license that is compatible with the GNU GPL version 3-or-later. Which licenses qualify is stated in https://gnu.org/licenses/license-list.html.
Manuals need to be under a free license that is compatible with the GNU FDL version 1.4-or-later. Which licenses qualify is stated in https://gnu.org/licenses/license-list.html.
All other documentation files, for users (manuals, help files, man pages, and so on), and for developers (program logic, change logs, and so on), can be under a license acceptable for manuals or a license acceptable for software files (see above). We can agree with the package developers to include documentation published under other free licenses.
Trivial files of just a few lines don’t need to state a copyright or a license.
Normally we don’t include material other than software or documentation, but we can agree with the developers to include specific material. If the material in question is an educational resource, then it can have a license compatible with GNU FDL version 1.4 or one of the free Creative Commons licenses (CC-BY-SA, CC-BY or CC-0), or another free license at our discretion. If the material is not an educational resource, it can instead be licensed under CC-BY-ND.
Maintainers Guide, except for a few specific points as stated below.
https://www.gnu.org/prep/standards/, node References. This means it may not refer users to any nonfree software or nonfree documentation, except as stated there. Leading users to run a program, and suggesting they run it, or depending on it to be installed, are forms of referring users to it.
a package may not run code that it has fetched over the internet.
In particular, the package may install other packages in GNU ELPA and NonGNU ELPA, but not any other software.
We will consider exceptions to that rule, but we will need to consider them carefully, to make sure that the practices are safe for Emacs users, not just in one package but when used in many packages. Each time we approve such an exception, we will say so in comments in the package, with an explanation of our reasoning.
completely free platform based on the GNU operating system (in practice, GNU/Linux), working exclusively with other free software. Otherwise, it would act as an inducement to install nonfree systems or other nonfree software, and that would work against our cause.
However, as an exception it is ok for a package to provide, on some non-GNU operating systems, features that the rest of Emacs (plus GNU ELPA and NonGNU ELPA) already supports on GNU.
This is a moral issue. See https://www.gnu.org/prep/standards/, node System Portability. The reason for this rule is that at no time, in no way, should a NonGNU ELPA package put users who defend their freedom at a disadvantage compared with those who surrender their freedom.
using a standard interface or using an ad-hoc interface for each service, or a combination, provided that these services’ jobs consist of either communication or lookup of published data.
The package may not use remote services to do the user’s own computational processing. “Your own computational processing” means anything you could in principle do in your own computers by installing and running suitable software, without communicating with any other computers.
In general, you may not advertise anything commercial with material in the NonGNU ELPA package or this repository. However, as exceptions, you can point people to commercial support offerings for the package, and you can mention fan items that you sell directly to the users.
Once the NonGNU ELPA maintainers decides that we want to add a package [PKG]
,
here’s what it takes:
- Add a corresponding entry to the file
elpa-packages
, thenmake fetch/<pkgname> make packages/<pkgname> make build/<pkgname>
- Make sure the resulting tarball looks good and works well.
- You might also check that it can be compiled in place:
make packages/<pkgname>
- Push the package’s code to the repository
nongnu.git
:make sync/<pkgname>
- Commit and push the change to
elpa-packages
:git commit -m "* elpa-packages (<pkgname>): New package" -- elpa-packages git push
This file is part of NonGNU ELPA.
NonGNU ELPA is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
NonGNU ELPA is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with NonGNU ELPA. If not, see https://www.gnu.org/licenses/.