Bryan Drewery пре 2 година
родитељ
комит
23aa32cfb6
2 измењених фајлова са 41 додато и 12 уклоњено
  1. 34 7
      src/generate_defs.sh
  2. 7 5
      src/generate_symbol.sh

+ 34 - 7
src/generate_defs.sh

@@ -25,7 +25,6 @@ for file in ${files}; do
   defsFile_pre="src/.defs/${basename}_pre.h"
   defsFile_post="src/.defs/${basename}_post.h"
 
-  rm -f "${defsFile_pre}" "${defsFile_post}" "${defsFile_wrappers}" > /dev/null 2>&1
   if [ ! -f "${defsFile_pre}" ]; then
 	  : > "${defsFile_pre}"
   fi
@@ -51,8 +50,14 @@ for file in ${files}; do
   defsFile_pre="src/.defs/${basename}_pre.h"
   defsFile_post="src/.defs/${basename}_post.h"
 
-  echo "extern \"C\" {" > "${defsFile_wrappers}"
-  echo "extern \"C\" {" > "${defsFile_post}"
+  {
+	  #echo "#ifndef GENERATE_DEFS"
+	  echo "extern \"C\" {"
+  } > "${defsFile_wrappers}.new"
+  {
+	  #echo "#ifndef GENERATE_DEFS"
+	  echo "extern \"C\" {"
+  } > "${defsFile_post}.new"
 
   cd src
   $CXX $CXXFLAGS -E -I. -I.. -I../lib ${INCLUDES} -DHAVE_CONFIG_H -DGENERATE_DEFS "../${file}" > "${TMPFILE}"
@@ -109,10 +114,32 @@ for file in ${files}; do
     echo "${symbol} ${existing_typedef} ${typedef}"
   done | src/generate_symbol.sh "${defsFile_wrappers}" "${defsFile_pre}" "${defsFile_post}"
 
-  echo "}" >> "${defsFile_wrappers}"
-  echo "}" >> "${defsFile_post}"
-
-  echo "done"
+  {
+	  echo "}"
+	  #echo "#endif"
+  } >> "${defsFile_wrappers}.new"
+  {
+	  echo "}"
+	  #echo "#endif"
+  } >> "${defsFile_post}.new"
+
+  changed=0
+  for file in ${defsFile_wrappers} ${defsFile_pre} ${defsFile_post}; do
+	  if ! cmp -s "${file}.new" "${file}"; then
+		  changed=1
+		  mv -f "${file}.new" "${file}"
+	  else
+		  rm -f "${file}.new"
+		  # Needed because generate_defs.sh may have triggered this
+		  # (or other deps like dl.h)
+		  touch "${file}"
+	  fi
+  done
+  if [ "${changed}" -eq 1 ]; then
+	  echo "done"
+  else
+	  echo "unchanged"
+  fi
 done
 echo "};">> "${exportsFile}"
 rm -f "${TMPFILE}"

+ 7 - 5
src/generate_symbol.sh

@@ -7,11 +7,12 @@ defsFile_post="$3"
 
 # X="typedef int (*Tcl_Eval_t)(Tcl_Interp*, const char*);"
 
+echo "#ifndef GENERATING_DEFS" > "${defsFile_pre}.new"
 while read symbol existing_typedef typedef; do
-  echo "#define ${symbol} ORIGINAL_SYMBOL_${symbol}" >> "${defsFile_pre}"
-  echo "#undef ${symbol}" >> "${defsFile_post}"
+  echo "#define ${symbol} ORIGINAL_SYMBOL_${symbol}" >> "${defsFile_pre}.new"
+  echo "#undef ${symbol}" >> "${defsFile_post}.new"
   if [ "${existing_typedef}" -eq 0 ]; then
-	  echo "$typedef" >> "${defsFile_post}"
+	  echo "$typedef" >> "${defsFile_post}.new"
   fi
 
   returntype=$(echo "$typedef" | sed -e 's/typedef \([^(]*\) (\*\([^ ]*\)_t)(\(.*\));/\1/') || :
@@ -47,13 +48,14 @@ while read symbol existing_typedef typedef; do
     i=$((i + 1))
   done
 
-  cat >> "${defsFile_wrappers}" << EOF
+  cat >> "${defsFile_wrappers}.new" << EOF
 $returntype $name ($params_full) {
   return DLSYM_VAR($name)($param_names);
 }
 EOF
 
-  echo "$returntype $name ($params_full);" >> "${defsFile_post}"
+  echo "$returntype $name ($params_full);" >> "${defsFile_post}.new"
 
   IFS=$SAVE_IFS
 done
+echo "#endif" >> "${defsFile_pre}.new"