A program for adding license text to code
codlic is a program that is meant for quickly licensing code files. You can
write them all, then license them all at once. It is written in Common Lisp.
codlic only installs on Unix-like systems, although building it on any
platform is theoretically possible. To build, a Common Lisp implementation such
as sbcl or ccl is required. quicklisp and the program buildapp are also
required, as well as a makefile program. Only sbcl is supported.
Run make in the project directory to build. Installation may require root
privileges, so to install run sudo make install. As a warning, running sudo make may fail, as quicklisp is required to be loaded which is usually
configured on the user side. If you actually want to build as root, or if you
wanted to make a source distribution that's not version controlled including all
dependencies, you can run make build_manifest, which actually installs
quicklisp and all dependencies locally in the project directory. This gets rid
of the dependency on quicklisp. The result including this quicklisp
directory could then be distributed. Then, run sudo make build_app and sudo make install.
A note about the makefile, dependencies are not set up, so running make install will not build the program first. This also means that running make
twice will recompile the whole program.
The basic usage is codlic [options] [files].
Running codlic requires a license, a way to select files, and a way to select
the comment type to use.
You can specify the license with --license-file or --license-name. Using
--license-name you can specify one of the included licenses such as gplv3 or
mit. Note, these licenses are templates. The relevant information needs to be
filled in with the --license-replace option. This option takes a
colon-separated list of pairs of string separated by /. You can escape these
with a backslash. The license defaults to MIT. To license using the MIT license
with the correct information, use --license-name mit --license-replace '<copyright year>/2017:<copyright holder>/Your Name'. To see the license before
using it, pass the --print-license option.
To determine what comment style to use, one of the easiest options to use is
--auto-detect-comment-type which does a lookup on some preset filetypes. This
option is used by default. You can specify individual comment languages with the
--comment-language option to specify one of the presets, such as c or
lisp. You can also use custom comment types, such as python style with
--single-comment-string '#' or C with --opening-comment-string "/*",
--closing-comment-string " */", and --continuation-comment-string " *".
Notice the leading spaces in the closing and continuation comment strings, this
is so the formatting lines up.
To choose what files to license, simply pass files or directories as arguments
with some selection options. One way to filter out files is to use the
--filetype-language with a preset such as c or lisp. Another way is to use
a regex. To license files that end in both .c and .cc, you can use
--filetype-regex '.*\.c|.*\.cc' or '.*\.cc?. By default, codlic attempts
to license every file that is passed to it, but this will probably fail when
licensing a directory when it cannot figure out what comment type to use.
See man codlic for information on every option.
To add another language or update an existing one, edit the function
MAKE-LANGUAGES-TABLE in filetypes.lisp. It should be pretty simple using
existing patterns, and the functions MAKE-SINGLE-COMMENT-TYPE and
MAKE-COMPOSITE-COMMENT-TYPE.
To add a license, place the license text in a file in the licenses
subdirectory. Then, update the function MAKE-LICENSE-TABLE in the file
license.lisp so that it knows both the license name and filename. Finally, add
an installation instruction to the Makefile next to the other license files.
License all C files in a directory with the MIT License:
codlic --license-name mit --filetype-language c --comment-language c \
--license-replace "<copyright year>/2017:<copyright holder> Jason Waataja" \
my_dirNote, you could omit --comment-language c because the comment language is
automatically detected when possible.
License all C++ files in a directory with the gplv3.
cp /usr/local/share/codlic/license/gplv3 .
sed -i 's/Foobar/your-project/g' gplv3
codlic --license-file ./gplv3 --filetype-regex '.*\.cc' \
--auto-detect-comment-type my_dir