tmkproject - Rapid Project Templating
tmkproject.sh [-c] name type 'description'
where,
-c Create project, but do not check into CVS
name Name of the project
type Programmnig language (pl, py, sh ...)
'description' A brief description of the project
Must be passed as a single argument
tmkproject.sh -v
Displays program version and exits
tmkproject
is a way to quickly produce the code and documentation
skeletons for a new project and to put these under CVS
version
control. It allows you to "brand" them with your own company and
copyright information, as well specifying a standard license and
pricing (if any).
The package comes with example templates for perl
, python
, and
shell scripts
. These contain some of the standard code you may
want to use with every project.
Also included is an example standard for writing documentation using
the Restructured Text
markdown language.
Finally, a makefile
is included to produce documentation and
release packaging for your project. Documentation is automatically
produced in a wide variety of formats including html
,
PostScript
, pdf
, man
, and plain text.
The package comes with a default Makefile
that is useful when
creating a FreeBSD
port of your project.
Because everything is template-driven, it is simple to customize the "standard" program and documentation templates to suit your needs. It is also quite straightforward to add support for additional languages.
For example, you almost certainly will want to change the licensing
terms contained in ./common/license.txt
. Once you've edited
that file, every project you create with tmkproject
will have
YOUR licensing terms in it.
tmkproject
requires certain tools to be properly installed and
configured in order to operate properly. The majority of these have
to do with producing documentation in various output formats from a
Restructured Text source document:
CVS
(You must have this properly configured for checkin, checkout.)Python
TeX/LaTex
(A full implementation w/utilities like TeX Live.)docutils
enscript
You also need a modern version of make
, like the one from the GNU
project. Old BSD type make
utilities will not work.
The python
skeleton includes code to parse a configuration file
using the TundraWare Inc. tconfpy
parser. tconfpy
is not
included in the tmkproject
package distribution, hence
configuration file handling is commented out in the python
code
skeleton. If you wish to use tconfpy
, it is freely available at:
http://www.tundraware.com/Software/tconfpy
Each time you run tmkproject.sh
, it looks in its own directory for
a file called .tmkproject
. This file contains site-specific
items you may wish to customize. These are things like the vendor
name, program author's name, the editor to use, and so on. The
information found in this file is applied to each new project you
create.
Each user can also maintain their own copy of the .tmkproject
file. By default, after tmkproject.sh
reads the "master" copy in
its own directory, it looks for a copy in the user's home directory.
That way, each user can override the site-wide defaults to suit
themselves. You can change where tmkproject.sh
looks for the
user's copy by changing the USERCONFIGDIR
variable in the master
copy of .tmkproject
.
Once you've edited .tmkproject
, you are ready to create a new
project. Recall that you do this:
tmkproject.sh name type 'description`
This will generate a project under the PROJECTSDIR
directory
defined in .tmkproject
, and check them in to CVS
.
For example::
tmkproject.sh MyFineProject py 'A Free Program That Does Nothing`
Would create the directory ${PROJECTSDIR}/MyFineProject
. This
directory would contain all the program, documentation, and licensing
files needed to start the project, along with a makefile
to
support document creation and project packaging.
The various program and documentation files would have the description "A Free Program That Does Nothing" embedded appropriately.
Projects created by tmkproject
are controlled by a makefile
that allows you to do everything from produce documentation
to package everything for release. The makefile
supports
the following major targets:
docs Produce project documentation is a wide variety of formats
including html, PostScript, pdf, man format, and plain text.
release Create a release tarball in the project's ./Releases
directory. The tarball will contain both the name
and version number of the project.
clean Remove the intermediate files created during
the documentation production process.
scrub Remove (almost) everything, except for the makefile itself
and the support/release directories.
init Scrub the working directory and checkout the last
committed copies from the CVS repository.
version Display the current version of the project.
You can add new language support pretty trivially:
tmkproject.sh
and add a stanza to the case
statement
near the top to define the INTERPRETER
and LANGUAGE
variables appropriately for the new language.program.typesuffix
. This should be your default skeleton
code for that language. Do not include the initial header block -
tmkproject
will insert it for you.common/makefile
add an enscript
(or other pretty printer
program) stanza to pretty print your program code.When writing your own skeleton code and documentation files, there are
a number of tokens you can use which tmkproject
will fill in when
it creates a new project. You can see examples of how these are used
in the example skeletons provided with tmkproject
.
The major tokens of interst are:
Token Replaced By
----- -----------
__AUTHOR__ Program author's name (.tmkproject)
__COPYOWNER__ Copyright string (.tmkproject)
__COPYRIGHT__ Full copyright string (internal)
__DESCRIPTION__ Project description (command line argument)
__EDITOR__ Name of editor (.tmkproject)
__EDITARGS__ Editor arguments (.tmkproject)
__EMAILSUPPORT__ Email support address (.tmkproject)
__FULLNAME__ The full name of the program w/type suffix
__ID__ CVS version string, ``$Id`` (internal)
__INTERPRETER__ "Hash bang" string for the selected language.
__LANGUAGE__ Name of the language (internal)
__LICENSE__ Full name of the license file (internal)
__PROJECTNAME__ Name of the project (command line argument)
__RESERVED__ "All Rights Reserved ..." string (internal)
__TYPE__ Program type (command line argument)
__UPDATES__ Reference to the update website (internal)
__VENDORNAME__ Name of the project vendor (.tmkproject)
__WEBSITE__ Website where updates can be found (.tmkproject)
You can also define additional substitution tokens of your own by
editing the tokens
file provided with the program distribution.
This file is read every time you generate a new project. The
left-hand column is the name of the substitution token and the
right-hand column is the substitution text.
The right-hand entry can be any combination of variable references
(assuming they are defined) and literal text. Bear in mind that this
has to make sense to sed
which is used to do the actual
substitutions! For example, you will see $
and /
escaped so
that sed
does the right thing. This escaping has to be done
appropriately in both the tokens
file and anywhere a variable is
defined that is referenced in a substitution token definition. For
example, __WEBSITE__
refers to ${WEBSITE}
which actually gets
defined in .tmkproject
. If you look there, you will see that all
the forward slashes have been escaped in anticipation of the fact that
we're going to feed the string to sed
.
None.
None known as of this release.
tmkproject is Copyright (c) 2012 TundraWare Inc., Des Plaines, IL 60018 USA
For terms of use, see the tmkproject-license.txt
file in the
program distribution.
Tim Daneliuk
tmkproject@tundraware.com
$Id: tmkproject.rst,v 1.128 2012/09/06 15:56:08 tundra Exp $
You can find the latest version of this program at:
http://www.tundraware.com/Software/tmkproject