1#!/bin/bash 2# The MCLinker project 3# 4# This file is distributed under the University of Illinois Open Source 5# License. See LICENSE.TXT for details. 6 7function ask_filename 8{ 9 echo -n "What is the class name? "; 10} 11 12function ask_brief 13{ 14 CLASS_NAME=$1 15 echo "Please brief the class ${CLASS_NAME}: " 16} 17 18function copy_template_header 19{ 20 local NAME=$1 21 local DEPLOYMENT=$2 22 local TARGET_FILE="${MCLINKERTOP}/include/mcld/${DEPLOYMENT}/${NAME}.h"; 23 local SOURCE_FILE="${MCLINKERTOP}/templates/header.h"; 24 mkdir -p ${MCLINKERTOP}/include/mcld/${DEPLOYMENT} 25 cp ${SOURCE_FILE} ${TARGET_FILE} 26 # replace the template name by target flie name and adjust the padding of '-' 27 local header_str="header"; 28 PADDING_LEN=`expr ${#header_str} - ${#NAME}`; 29 ABS_PADDING_LEN=${PADDING_LEN}; 30 PADDING=""; 31 32 if [ "${PADDING_LEN}" -lt "0" ]; then 33 ABS_PADDING_LEN=`expr ${ABS_PADDING_LEN} \* -1`; 34 fi 35 for (( i=0; i < ${ABS_PADDING_LEN}; i = i + 1 )); do 36 PADDING="${PADDING}-"; 37 done 38 39 if [ "${PADDING_LEN}" -gt "0" ]; then # replace and add padding 40 sed -e "s/header.h /${NAME}.h ${PADDING}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 41 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 42 elif [ "${PADDING_LEN}" -lt "0" ]; then # replace and strip padding 43 sed -e "s/header.h ${PADDING}/${NAME}.h /g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 44 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 45 else # replace directly 46 sed -e "s/header/${NAME}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 47 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 48 fi 49 50 echo "${TARGET_FILE}"; 51} 52 53function copy_template_impl 54{ 55 local NAME=$1 56 local DEPLOYMENT=$2 57 local TARGET_FILE="${MCLINKERTOP}/lib/${DEPLOYMENT}/${NAME}.cpp"; 58 local SOURCE_FILE="${MCLINKERTOP}/templates/impl.cpp"; 59 mkdir -p ${MCLINKERTOP}/lib/${DEPLOYMENT} 60 cp ${SOURCE_FILE} ${TARGET_FILE} 61 # replace the template name by target flie name and adjust the padding of '-' 62 local impl_str="impl"; 63 PADDING_LEN=`expr ${#impl_str} - ${#NAME}`; 64 ABS_PADDING_LEN=${PADDING_LEN}; 65 PADDING=""; 66 if [ "${PADDING_LEN}" -lt "0" ]; then 67 ABS_PADDING_LEN=`expr ${ABS_PADDING_LEN} \* -1`; 68 fi 69 70 for (( i = 0; i < ${ABS_PADDING_LEN}; i = i + 1 )); do 71 PADDING="${PADDING}-"; 72 done 73 74 if [ "${PADDING_LEN}" -gt "0" ]; then # replace and add padding 75 sed -e "s/impl.cpp /${NAME}.cpp ${PADDING}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 76 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 77 elif [ "${PADDING_LEN}" -lt "0" ]; then # replace and strip padding 78 sed -e "s/impl.cpp ${PADDING}/${NAME}.cpp /g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 79 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 80 else # replace directly 81 sed -e "s/impl/${NAME}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 82 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 83 fi 84 85 echo "${TARGET_FILE}"; 86} 87 88function replace_author 89{ 90 local TARGET_FILE=$1 91 shift 92 local AUTHOR=$* 93 94 sed -e "s/\${AUTHOR}/${AUTHOR}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 95 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 96} 97 98function repalce_email 99{ 100 local TARGET_FILE=$1 101 local EMAIL=$2 102 sed -e "s/\${EMAIL}/${EMAIL}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 103 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 104 105 # adjust the length of header 106 NEW_SPACE=`grep '> *' ${TARGET_FILE} | wc -c` 107 NEW_SPACE=`expr 79 - ${NEW_SPACE}` 108 ADDEND=">"; 109 if [ "${NEW_SPACE}" -gt "0" ]; then # add space 110 for (( i=0; i<${NEW_SPACE}; i=i+1 )); do 111 ADDEND="${ADDEND} "; 112 done 113 sed -e "s/${EMAIL}>/${EMAIL}${ADDEND}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 114 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 115 elif [ "${NEW_SPACE}" -lt "0" ]; then # strip space 116 for (( i=${NEW_SPACE}; i<0; i=i+1 )); do 117 ADDEND="${ADDEND} "; 118 done 119 sed -e "s/${EMAIL}${ADDEND}/${EMAIL}>/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 120 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 121 fi 122} 123 124function replace_class 125{ 126 local TARGET_FILE=$1 127 local CLASS_NAME=$2 128 local UPCLASS_NAME=`echo ${CLASS_NAME} | tr [:lower:] [:upper:]` 129 130 sed -e "s/\${class_name}/${CLASS_NAME}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 131 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 132 sed -e "s/\${CLASS_NAME}/${UPCLASS_NAME}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 133 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 134} 135 136function replace_brief 137{ 138 local TARGET_FILE=$1 139 shift 140 local BRIEF=$* 141 sed -e "s/\${brief}/${BRIEF}/g" ${TARGET_FILE} > ${TARGET_FILE}.tmp 142 mv ${TARGET_FILE}.tmp ${TARGET_FILE} 143} 144 145