pre-build.sh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #! /bin/bash
  2. if [ "$(uname)" = "Darwin" ]; then
  3. SED=gsed
  4. else
  5. SED=sed
  6. fi
  7. function Trace()
  8. {
  9. if [ "${VERBOSE_PRE_BLD}" != "" ]; then
  10. echo "$1" 1>&2
  11. fi
  12. }
  13. function Update_Sources()
  14. {
  15. if [ -f ${BLD_DIR}/${STAMP_UNPACK} ]; then
  16. Trace "Skipped @ ${BLD_DIR}/${STAMP_UNPACK}"
  17. return 0
  18. fi
  19. if [ "${PKG_SWITCH}" = "" ]; then
  20. Trace "Warning @ CONFIG_${MODULE} = '${PKG_SWITCH}'"
  21. fi
  22. Trace "MODULE_NAME: [${MODULE}]"
  23. Trace "SRC_DIR: [${SRC_DIR}]"
  24. Trace "BLD_DIR: [${BLD_DIR}]"
  25. Trace "PACKAGE_DIR: [${PACKAGE_DIR}]"
  26. Trace "PKG_SOURCE: [${PKG_SOURCE}]"
  27. Trace "PKG_BRANCH: [${PKG_BRANCH}]"
  28. Trace "PKG_REVISION: [${PKG_REVISION}]"
  29. Trace "PKG_UPSTREAM: [${PKG_UPSTREAM}]"
  30. for i in $(find -L ${MODULE} -type d -not -path "*.git*"|${SED} "s,${MODULE}/*,,1"|${SED} '/^$/d'); do
  31. mkdir -p ${BLD_DIR}/${i}
  32. done
  33. if [ "${PKG_SOURCE}" != "" ] && [ -d ${PACKAGE_DIR}/${PKG_SOURCE} ]; then
  34. GIT_BASENAME=$(basename ${PKG_SOURCE})
  35. GIT_NAME_LEN=$(echo -n "${GIT_BASENAME}"|wc -c|awk '{ print $1 }')
  36. GIT_OFFSET=$(( GIT_NAME_LEN - 3 ))
  37. GIT_MOD_NAME=$(echo "${GIT_BASENAME}" | cut -c"1-$(( GIT_OFFSET-1 ))"|awk '{ print $1 }')
  38. GIT_POSTFIX=$(echo "${GIT_BASENAME}" | cut -c"${GIT_OFFSET}-${GIT_NAME_LEN}"|awk '{ print $1 }')
  39. Trace "GIT_POSTFIX: [${GIT_POSTFIX}]"
  40. Trace "GIT_MOD_NAME: [${GIT_MOD_NAME}]"
  41. fi
  42. set +x
  43. if [ "${GIT_POSTFIX}" = ".git" ]; then
  44. GIT_COPY=${MODULE}/${GIT_MOD_NAME}
  45. DEV_COPY_BASE=${TOP_DIR}.pkgs
  46. Trace "GIT_COPY: [${GIT_COPY}]"
  47. Trace "DEV_COPY_BASE: [${DEV_COPY_BASE}]"
  48. eval "${CMDSET_X}"
  49. mkdir -p ${DEV_COPY_BASE}
  50. cd ${DEV_COPY_BASE}
  51. if [ ! -d ${GIT_MOD_NAME} ]; then
  52. git clone ${OPTION_Q} ${PACKAGE_DIR}/${PKG_SOURCE} ${GIT_MOD_NAME} \
  53. $([ "${PKG_BRANCH}" = "" ] || echo "-b ${PKG_BRANCH}")
  54. if [ "${PKG_UPSTREAM}" != "" ]; then
  55. cd ${GIT_MOD_NAME};
  56. git remote add upstream ${PKG_UPSTREAM}
  57. cd ${OLDPWD};
  58. fi
  59. fi
  60. if [ "${PKG_REVISION}" != "" ]; then
  61. cd ${GIT_MOD_NAME} && git reset ${OPTION_Q} --hard ${PKG_REVISION} && cd ${OLDPWD}
  62. else
  63. cd ${GIT_MOD_NAME}
  64. git pull ${OPTION_Q} origin ${PKG_BRANCH} || exit 1
  65. fi
  66. cd ${TOP_DIR}
  67. rm -fr ${SRC_DIR}/${GIT_MOD_NAME}
  68. ln -sf ${DEV_COPY_BASE}/${GIT_MOD_NAME} ${SRC_DIR}/${GIT_MOD_NAME}
  69. touch ${BLD_DIR}/${STAMP_UNPACK}
  70. PKG_SOURCE=""
  71. set +x
  72. SRC_ELEM=$(ls ${SRC_DIR}|grep -v ${HD_MAKEFILE}|grep -v ${MAKE_SEGMENT})
  73. BLD_ELEM=$(ls ${BLD_DIR}|grep -v ${HD_MAKEFILE}|grep -v ${MAKE_SEGMENT})
  74. if [ "${BLD_ELEM}" = "" ]; then
  75. for iter in ${SRC_ELEM}; do
  76. Trace "Bulk [${SRC_DIR}/${iter} => ${BLD_DIR}"
  77. # cp -Lrf ${SRC_DIR}/${iter} ${BLD_DIR}
  78. done
  79. return 0
  80. fi
  81. fi
  82. # for FILE in \
  83. # $(find -L ${SRC_DIR}/ -type f -o -type l -name "*.[ch]" -o -name "*.mk" -o -name "*.cpp") \
  84. # $(find ${SRC_DIR}/ -maxdepth 1 -name "*.patch" -o -name "lib*.a" -o -name "lib*.so") \
  85. # $([ "" != "${PKG_SOURCE}" ] && [ -d ${PACKAGE_DIR}/${PKG_SOURCE} ] && find ${PACKAGE_DIR}/${PKG_SOURCE}/ -type f -o -type l) \
  86. # ; \
  87. # do
  88. # if [ "" != "${PKG_SOURCE}" ] && \
  89. # [ -d ${PKG_SOURCE} ] && \
  90. # [ "$(dirname ${FILE})" != "${TOP_DIR}/${MODULE}" ]; then
  91. # SUBD=$(echo $(dirname ${FILE})|${SED} "s:$(dirname ${PKG_SOURCE})::")
  92. # SUBD=$(echo ${SUBD}|${SED} "s:${SRC_DIR}::")
  93. # else
  94. # SUBD=$(echo $(dirname ${FILE})|${SED} "s:${SRC_DIR}::")
  95. # SUBD=$(echo ${SUBD}|${SED} "s:${PACKAGE_DIR}/*::")
  96. # fi
  97. #
  98. # COPY_DIR=${OUTPUT_DIR}/${MODULE}/${SUBD}
  99. # mkdir -p ${COPY_DIR}
  100. # COPY_BASE=$(basename ${FILE})
  101. # FILE_COPY=${COPY_DIR}/${COPY_BASE}
  102. # # grep -q "\.git" <<< ${FILE} || Trace "Check: ${FILE}: ${FILE_COPY}"
  103. #
  104. # if [ ! -e ${FILE_COPY} -o \
  105. # ${FILE} -nt ${FILE_COPY} ]; then
  106. # mkdir -p ${BLD_DIR}/${FILE_DIR}
  107. # cp -f ${FILE} ${FILE_COPY}
  108. # fi
  109. # done
  110. }
  111. function Update_Makefile()
  112. {
  113. BLD_MFILE=${BLD_DIR}/${HD_MAKEFILE}
  114. if [ ${BLD_MFILE} -nt ${SRC_DIR}/${MAKE_SEGMENT} ] && \
  115. [ ${BLD_MFILE} -nt ${STAMP_BLD_ENV} ]; then
  116. return 0;
  117. fi
  118. rm -f ${BLD_MFILE}
  119. echo "MODULE_NAME := ${MODULE}" >> ${BLD_MFILE}
  120. cat ${STAMP_BLD_ENV} >> ${BLD_MFILE}
  121. cat << EOB >> ${BLD_MFILE}
  122. include \$(RULE_DIR)/settings.mk
  123. include \$(CONFIG_TPL)
  124. all:
  125. EOB
  126. cp -f ${SRC_DIR}/${MAKE_SEGMENT} ${BLD_DIR}/${MAKE_SEGMENT}
  127. cat ${BLD_DIR}/${MAKE_SEGMENT} >> ${BLD_MFILE}
  128. ${SED} -i 's/clean:/clean : clean-prepare/g' ${BLD_MFILE}
  129. cat << EOB >> ${BLD_MFILE}
  130. env:
  131. @echo ""
  132. @printf -- "-----------------------------------------------------------------\n"
  133. @\$(foreach var,\$(SHOW_ENV_VARS),\$(call Dump_Var,\$(var)))
  134. @printf -- "-----------------------------------------------------------------\n"
  135. @echo ""
  136. include \$(RULE_DIR)/rules.mk
  137. EOB
  138. Trace "Updated: ${BLD_MFILE}"
  139. }
  140. if [ "$#" != "1" -a "$#" != "2" ]; then exit 12; fi
  141. MODULE=${1}
  142. BLD_DIR=${OUTPUT_DIR}/${MODULE}
  143. SRC_DIR=${TOP_DIR}/${MODULE}
  144. if [ ! -d ${SRC_DIR} ]; then
  145. exit 0
  146. fi
  147. if [ "${VERBOSE_PRE_BLD}" != "" ]; then
  148. OPTION_V="-v"
  149. CMDSET_X="set -x"
  150. else
  151. OPTION_Q="-q"
  152. fi
  153. mkdir -p ${BLD_DIR}
  154. MSG=$(printf "%-28s%s" "${MODULE}" "[..]")
  155. echo -ne "\r "
  156. echo -ne "\033[0;37;0;44m""\r[..] o ${MSG}""\033[0;m"
  157. Trace ""
  158. if [ "$#" = "1" ]; then
  159. Update_Sources
  160. fi
  161. Update_Makefile