Initialize modern autotools projects, Inspired by Mozilla Cargo but without the NIH and currently more limited in scope.
improve the adding-new-language part of the README



#conf - Initialize modern autotools projects

Inspired by Mozilla Cargo ( ) but without the NIH and currently more limited in scope.

See NEWS for user-visible changes. See ChangeLog or the history for detailed changes.


#Create a new project (example: hello)

conf new hello  --lang bash

The filenames of projects are restricted to lowercase alphanumerics to avoid any problems due to edge-cases in different languages.

#Build and install a project (example: hello)

cd hello && ./ && ./configure && make && make install

user installation:

cd hello && ./ && ./configure --prefix ~/.local && make && make install

And generally everything else you can do with autotools. Also see

make help

#Currently implemented languages:

#adding a new language

For a language named LANGUAGE, create the directory templates/LANGUAGE including files that use TEMPLATE_AUTHOR for the user name and TEMPLATE_PROJ for the project name.

Add needed extensions to the and templates. You can build upon the generic files in templates/ (i.e. by creating *.head and *.tail files (i.e.,, These will then be used as begin (head) or end (tail) of the generated files.

To replace files, create them in your LANGUAGE directory without .head or .tail suffix.

Files and folders named TEMPLATE_PROJ* will be renamed to the project name. For example with a project named foo, will be renamed

For complex file structures, you might have to adjust Look for test x"${PROJLANG}" to find the place to edit.

For inspiration, look into template/bash since that includes some necessary tricks to access data paths with autotools under bash.


#build conf

./ ; make


./ && make install

To install only for the current user, use

./ --prefix=$HOME/.local && make install

Also see

make help

For details on installing a release, see INSTALL



#Release Process

  • Check/Update NEWS

  • Increase version in (see

  • Commit, merge to stable and tag (see branching[^1])

      ./ && make distcheck

[^1]: maintainer action "do a release" in


We need bash for Makefiles, so we can use bash for scripting.