| #!/bin/bash |
| # The MCLinker project |
| # |
| # This file is distributed under the University of Illinois Open Source |
| # License. See LICENSE.TXT for details. |
| |
| function ask_filename |
| { |
| echo -n "What is the class name? "; |
| } |
| |
| function ask_brief |
| { |
| CLASS_NAME=$1 |
| echo "Please brief the class ${CLASS_NAME}: " |
| } |
| |
| function copy_template_header |
| { |
| local NAME=$1 |
| local DEPLOYMENT=$2 |
| local TARGET_FILE="${MCLINKERTOP}/include/mcld/${DEPLOYMENT}/${NAME}.h"; |
| local SOURCE_FILE="${MCLINKERTOP}/templates/header.h"; |
| mkdir -p ${MCLINKERTOP}/include/mcld/${DEPLOYMENT} |
| cp ${SOURCE_FILE} ${TARGET_FILE} |
| # replace the template name by target flie name and adjust the padding of '-' |
| local header_str="header"; |
| PADDING_LEN=`expr ${#header_str} - ${#NAME}`; |
| ABS_PADDING_LEN=${PADDING_LEN}; |
| PADDING=""; |
| |
| if [ "${PADDING_LEN}" -lt "0" ]; then |
| ABS_PADDING_LEN=`expr ${ABS_PADDING_LEN} \* -1`; |
| fi |
| for (( i=0; i < ${ABS_PADDING_LEN}; i = i + 1 )); do |
| PADDING="${PADDING}-"; |
| done |
| |
| if [ "${PADDING_LEN}" -gt "0" ]; then # replace and add padding |
| sed -e "s/header.h /${NAME}.h ${PADDING}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| elif [ "${PADDING_LEN}" -lt "0" ]; then # replace and strip padding |
| sed -e "s/header.h ${PADDING}/${NAME}.h /g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| else # replace directly |
| sed -e "s/header/${NAME}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| fi |
| |
| echo "${TARGET_FILE}"; |
| } |
| |
| function copy_template_impl |
| { |
| local NAME=$1 |
| local DEPLOYMENT=$2 |
| local TARGET_FILE="${MCLINKERTOP}/lib/${DEPLOYMENT}/${NAME}.cpp"; |
| local SOURCE_FILE="${MCLINKERTOP}/templates/impl.cpp"; |
| mkdir -p ${MCLINKERTOP}/lib/${DEPLOYMENT} |
| cp ${SOURCE_FILE} ${TARGET_FILE} |
| # replace the template name by target flie name and adjust the padding of '-' |
| local impl_str="impl"; |
| PADDING_LEN=`expr ${#impl_str} - ${#NAME}`; |
| ABS_PADDING_LEN=${PADDING_LEN}; |
| PADDING=""; |
| if [ "${PADDING_LEN}" -lt "0" ]; then |
| ABS_PADDING_LEN=`expr ${ABS_PADDING_LEN} \* -1`; |
| fi |
| |
| for (( i = 0; i < ${ABS_PADDING_LEN}; i = i + 1 )); do |
| PADDING="${PADDING}-"; |
| done |
| |
| if [ "${PADDING_LEN}" -gt "0" ]; then # replace and add padding |
| sed -e "s/impl.cpp /${NAME}.cpp ${PADDING}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| elif [ "${PADDING_LEN}" -lt "0" ]; then # replace and strip padding |
| sed -e "s/impl.cpp ${PADDING}/${NAME}.cpp /g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| else # replace directly |
| sed -e "s/impl/${NAME}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| fi |
| |
| echo "${TARGET_FILE}"; |
| } |
| |
| function replace_author |
| { |
| local TARGET_FILE=$1 |
| shift |
| local AUTHOR=$* |
| |
| sed -e "s/\${AUTHOR}/${AUTHOR}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| } |
| |
| function repalce_email |
| { |
| local TARGET_FILE=$1 |
| local EMAIL=$2 |
| sed -e "s/\${EMAIL}/${EMAIL}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| |
| # adjust the length of header |
| NEW_SPACE=`grep '> *' ${TARGET_FILE} | wc -c` |
| NEW_SPACE=`expr 79 - ${NEW_SPACE}` |
| ADDEND=">"; |
| if [ "${NEW_SPACE}" -gt "0" ]; then # add space |
| for (( i=0; i<${NEW_SPACE}; i=i+1 )); do |
| ADDEND="${ADDEND} "; |
| done |
| sed -e "s/${EMAIL}>/${EMAIL}${ADDEND}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| elif [ "${NEW_SPACE}" -lt "0" ]; then # strip space |
| for (( i=${NEW_SPACE}; i<0; i=i+1 )); do |
| ADDEND="${ADDEND} "; |
| done |
| sed -e "s/${EMAIL}${ADDEND}/${EMAIL}>/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| fi |
| } |
| |
| function replace_class |
| { |
| local TARGET_FILE=$1 |
| local CLASS_NAME=$2 |
| local UPCLASS_NAME=`echo ${CLASS_NAME} | tr [:lower:] [:upper:]` |
| |
| sed -e "s/\${class_name}/${CLASS_NAME}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| sed -e "s/\${CLASS_NAME}/${UPCLASS_NAME}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| } |
| |
| function replace_brief |
| { |
| local TARGET_FILE=$1 |
| shift |
| local BRIEF=$* |
| sed -e "s/\${brief}/${BRIEF}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp |
| mv ${TARGET_FILE}.tmp ${TARGET_FILE} |
| } |
| |