#!/bin/sh # tmkproject.sh - Create A New Project Skeleton # # Copyright (c) 2012, TundraWare Inc., Des Plaines, IL 60018 USA # All Rights Reserved. For Terms Of Use, See: tmkproject-license.txt # $Id: tmkproject.sh,v 1.118 2013/03/04 20:46:29 tundra Exp $ CVSID='$Id: tmkproject.sh,v 1.118 2013/03/04 20:46:29 tundra Exp $' # If user just wants program version, display it and exit. if [ _$1 = _-v ] then echo ${CVSID} exit fi # Note if user wants to suppress project CVS checkin CVSCHECKIN="True" if [ _$1 = _-c ] then CVSCHECKIN="False" shift fi # Make sure we have a valid command line if [ $# -ne 3 ] then echo "usage: tmkproject.sh [-v -c] name type 'Brief Description'" exit 1 fi # Get the command line args into normal form PROJECTNAME=$1 TYPE=$2 DESCRIPTION=$3 # Find out where we're installed FULL=`readlink -f $0` BASE=`dirname ${FULL}` # Readin site-wide configuration . ${BASE}/.tmkproject # Readin the user's configuration if there is one USERCONFIG=${USERCONFIGDIR}/.tmkproject if [ -e ${USERCONFIG} ] then . ${USERCONFIG} fi # We'll need some temporary files TMPFILE=tmpfile SEDRULES=sedrules # Make sure requested language is supported and # setup language-specific literals # Note that the interpreter strings must # escape all '/' characters because they # will be used by 'sed' in substituion commands case ${TYPE} in "pl") INTERPRETER="\/usr\/bin\/env perl" LANGUAGE="perl" ;; "py") INTERPRETER="\/usr\/bin\/env python" LANGUAGE="python" ;; "sh") INTERPRETER="\/bin\/sh" LANGUAGE="the shell interpreter" ;; *) echo "'${TYPE}' Programs Not Supported (Yet)" exit 1 ;; esac # Additional replacement strings COPYDATE=`date +%Y` COPYRIGHT="Copyright (c) ${COPYDATE} ${COPYOWNER}" LICENSE="${PROJECTNAME}-license.txt" RESERVED="All Rights Reserved. For Terms Of Use See: ${LICENSE}" UPDATES="For Program Updates See: ${WEBSITE}" # Make relevant directories and go to the working directory RELEASES="Releases" WRKDIR=${TMPDIR}/${PROJECTNAME} mkdir -p ${WRKDIR}/${RELEASES} cd ${WRKDIR} # Pre-process the token defintions touch ${SEDRULES} while read tokdef do rule="s/""`echo $tokdef | cut -d " " -f1`/`echo $tokdef | cut -d " " -f2-999`/g" eval echo ${rule} >>${SEDRULES} done < ${BASE}/tokens # Copy project files, preserving permissions # Substitute template tokens with actual values for F in `find -H ${BASE}/common ${BASE}/${TYPE} -maxdepth 1 -type f ` do echo "Processing: ${F}" cp -p $F . sed -f ${SEDRULES} <$F >`basename $F` done # Combine the generic program template and the # language-specific program template cat program_header program.${TYPE} >${TMPFILE} cat ${TMPFILE} >program.${TYPE} # Clean up rm ${SEDRULES} ${TMPFILE} program_header # Set the project file names correctly for file in * do newname=`echo ${file} | sed -e s/program/${PROJECTNAME}/g \ -e s/license/${PROJECTNAME}-license/g \ -e s/manpage/${PROJECTNAME}/g` if [ ${newname} != ${file} ] then mv -v ${file} ${newname} fi done # Get everything under CVS control unless told not to if [ $CVSCHECKIN = "True" ] then cvs import -m "${DESCRIPTION}" ${PROJECTNAME} ${VENDORTAG} start cd .. rm -rf ${PROJECTNAME} # Instantiate the project in the projects directory mkdir -p ${PROJECTSDIR} # Make sure it exists cd ${PROJECTSDIR} cvs co ${PROJECTNAME} cd ${PROJECTNAME} cvs commit -r1.100 -m 'Initial CVS checkin to initialize version number' # Get rid of sticky tags for f in `find ./ -type f | grep -v CVS` do cvs update -A $f done # No CVS checkin just place the project in the current directory else cd - mv -v ${WRKDIR} . fi # Reminders echo echo echo echo echo echo "------------------------------------------------------------------------" echo "Don't Forget To Manually Add Any Additional Files And Update makefile!!!" echo "------------------------------------------------------------------------" echo echo echo "-----------------------------------------------------------------------------------" echo "Don't Forget To Verify That The Mail Alias: ${EMAILSUPPORT} Is Active!!!" echo "-----------------------------------------------------------------------------------"