Browse Source

Generate symbols during make

Bryan Drewery 2 years ago
parent
commit
ee78ead6d4
6 changed files with 47 additions and 34 deletions
  1. 1 0
      BSDmakefile
  2. 14 2
      Makefile.in
  3. 0 3
      build/autotools/configure.ac
  4. 0 3
      configure
  5. 27 21
      src/generate_defs.sh
  6. 5 5
      src/generate_symbol.sh

+ 1 - 0
BSDmakefile

@@ -5,6 +5,7 @@ MAKE=env -u MAKELEVEL gmake ${MFLAGS}
 TARGETS=	\
 		all \
 		debug \
+		libdefs \
 		static \
 		dynamic \
 		clean \

+ 14 - 2
Makefile.in

@@ -66,7 +66,7 @@ MAKE_UTILS = $(MAKE) 'MAKE=$(MAKE)' 'CXX=$(CXX)' 'CC=$(CC)' 'STRIP=touch' 'INCLU
 'CCDEPMODE=$(CCDEPMODE)' 'DEBLDFLAGS=$(DEBLDFLAGS)' \
 'CXXFLAGS=$(CXXFLAGS) $(DEBCXXFLAGS)' 'CFLGS=$(CFLGS) $(DEBCXXFLAGS)' 'LIBS=$(LIBS)' 'LD=$(LD_DEBUG) -g'
 
-.PHONY: checkclean.static checkclean.dynamic checkclean.debug lib wraith dwraith lib.debug debug test general sorthelp sort indent tar distrib distclean clean cleanutils test all dynamic static tags
+.PHONY: checkclean.static checkclean.dynamic checkclean.debug lib wraith dwraith lib.debug debug test general sorthelp sort indent tar distrib distclean clean cleanutils test all dynamic static tags libdefs
 
 all: dynamic
 
@@ -137,7 +137,19 @@ sort: sorthelp
 sorthelp: src/sorthelp.cc
 	+@cd src && ${MAKE_UTILS} sorthelp
 
-general:
+libdefs: src/.defs/libcrypto_post.h src/.defs/libssl_post.h src/.defs/libtcl_post.h \
+	 src/.defs/libcrypto_pre.h src/.defs/libssl_pre.h src/.defs/libtcl_pre.h \
+	 src/.defs/exports
+src/.defs/libcrypto_post.h src/.defs/libssl_post.h src/.defs/libtcl_post.h \
+	src/.defs/libcrypto_pre.h src/.defs/libssl_pre.h src/.defs/libtcl_pre.h \
+	src/.defs/exports: \
+	src/generate_defs.sh src/generate_symbol.sh \
+	src/dl.h \
+	src/libcrypto.cc src/libssl.cc src/libtcl.cc
+	CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" INCLUDES="$(INCLUDES)" \
+           SED="sed" src/generate_defs.sh || exit 1
+
+general: libdefs
 
 .NOTPARALLEL: checkclean.static checkclean.dynamic checkclean.debug
 

+ 0 - 3
build/autotools/configure.ac

@@ -291,6 +291,3 @@ if [[ -n "${LIBELF_BUNDLED}" ]] && [[ -f lib/libelf/configure ]]; then
   AC_CONFIG_SUBDIRS([lib/libelf])
 fi
 AC_OUTPUT
-
-CXX="$CXX" CXXFLAGS="$CXXFLAGS" TCL_INCLUDES="$TCL_INCLUDES" SSL_INCLUDES="$SSL_INCLUDES" \
-  SED="$SED" src/generate_defs.sh || exit 1

+ 0 - 3
configure

@@ -11507,6 +11507,3 @@ printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2
 fi
 
 
-CXX="$CXX" CXXFLAGS="$CXXFLAGS" TCL_INCLUDES="$TCL_INCLUDES" SSL_INCLUDES="$SSL_INCLUDES" \
-  SED="$SED" src/generate_defs.sh || exit 1
-

+ 27 - 21
src/generate_defs.sh

@@ -9,7 +9,7 @@ if [ -z "$SED" -o -z "$CXX" ]; then
   exit 1
 fi
 echo "==== Generating lib symbols ===="
-INCLUDES="${TCL_INCLUDES} ${SSL_INCLUDES}"
+: ${INCLUDES:="${TCL_INCLUDES} ${SSL_INCLUDES}"}
 
 mkdir -p src/.defs > /dev/null 2>&1
 TMPFILE=$(mktemp "/tmp/pre.XXXXXX")
@@ -25,14 +25,20 @@ 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
-  : > $defsFile_pre
-  : > $defsFile_post
-  : > $defsFile_wrappers
+  rm -f "${defsFile_pre}" "${defsFile_post}" "${defsFile_wrappers}" > /dev/null 2>&1
+  if [ ! -f "${defsFile_pre}" ]; then
+	  : > "${defsFile_pre}"
+  fi
+  if [ ! -f "${defsFile_post}" ]; then
+	  : > "${defsFile_post}"
+  fi
+  if [ ! -f "${defsFile_wrappers}" ]; then
+	  : > "${defsFile_wrappers}"
+  fi
 done
 
-echo "{" > $exportsFile
-echo "bfd_exports_stub;" >> $exportsFile
+echo "{" > "${exportsFile}"
+echo "bfd_exports_stub;" >> "${exportsFile}"
 for file in ${files}; do
   suffix=${file##*.}
   basename=${file%%.*}
@@ -45,20 +51,20 @@ 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 "extern \"C\" {" > "${defsFile_wrappers}"
+  echo "extern \"C\" {" > "${defsFile_post}"
 
   cd src
-  $CXX $CXXFLAGS -E -I. -I.. -I../lib ${INCLUDES} -DHAVE_CONFIG_H -DGENERATE_DEFS ../${file} > $TMPFILE
+  $CXX $CXXFLAGS -E -I. -I.. -I../lib ${INCLUDES} -DHAVE_CONFIG_H -DGENERATE_DEFS "../${file}" > "${TMPFILE}"
   # Fix wrapped prototypes
-  $SED -e :a -e N -e '$!ba' -e 's/,\n/,/g' $TMPFILE > $TMPFILE.sed
-  mv $TMPFILE.sed $TMPFILE
+  $SED -e :a -e N -e '$!ba' -e 's/,\n/,/g' "${TMPFILE}" > "${TMPFILE}.sed"
+  mv "${TMPFILE}.sed" "${TMPFILE}"
   cd ..
 
-  $SED -n -e 's/.*\(DLSYM_GLOBAL[^ (]*\)(.*, \([^)]*\).*/\2 \1/p' $TMPFILE | \
+  $SED -n -e 's/.*\(DLSYM_GLOBAL[^ (]*\)(.*, \([^)]*\).*/\2 \1/p' "${TMPFILE}" | \
     sort -u | while read symbol dlsym; do
     # Check if the typedef is already defined ...
-    typedef=$(grep "^typedef .*(\*${symbol}_t)" ${dirname}/${basename}.h) || :
+    typedef=$(grep "^typedef .*(\*${symbol}_t)" "${dirname}/${basename}.h") || :
     # ... if not, generate it
     if [ -z "$typedef" ]; then
       if ! grep -v "DLSYM" "${TMPFILE}" | grep -qw "${symbol}"; then
@@ -69,7 +75,7 @@ for file in ${files}; do
       fi
 
       # Trim off any extern "C", trim out the variable names, cleanup whitespace issues
-      typedef=$(grep -w "${symbol}" $TMPFILE |
+      typedef=$(grep -w "${symbol}" "${TMPFILE}" |
 	      head -n 1 |
 	      $SED \
 	         -e 's/extern "C" *//' \
@@ -98,15 +104,15 @@ for file in ${files}; do
 	    continue
     fi
     if [ "${dlsym}" = "DLSYM_GLOBAL_FWDCOMPAT" ]; then
-      echo "_${symbol};" >> $exportsFile
+      echo "_${symbol};" >> "${exportsFile}"
     fi
     echo "${symbol} ${existing_typedef} ${typedef}"
-  done | src/generate_symbol.sh $defsFile_wrappers $defsFile_pre $defsFile_post
+  done | src/generate_symbol.sh "${defsFile_wrappers}" "${defsFile_pre}" "${defsFile_post}"
 
-  echo "}" >> $defsFile_wrappers
-  echo "}" >> $defsFile_post
+  echo "}" >> "${defsFile_wrappers}"
+  echo "}" >> "${defsFile_post}"
 
   echo "done"
 done
-echo "};">> $exportsFile
-rm -f $TMPFILE
+echo "};">> "${exportsFile}"
+rm -f "${TMPFILE}"

+ 5 - 5
src/generate_symbol.sh

@@ -8,10 +8,10 @@ defsFile_post="$3"
 # X="typedef int (*Tcl_Eval_t)(Tcl_Interp*, const char*);"
 
 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}"
+  echo "#undef ${symbol}" >> "${defsFile_post}"
   if [ "${existing_typedef}" -eq 0 ]; then
-	  echo "$typedef" >> $defsFile_post
+	  echo "$typedef" >> "${defsFile_post}"
   fi
 
   returntype=$(echo "$typedef" | sed -e 's/typedef \([^(]*\) (\*\([^ ]*\)_t)(\(.*\));/\1/') || :
@@ -47,13 +47,13 @@ while read symbol existing_typedef typedef; do
     i=$((i + 1))
   done
 
-  cat >> $defsFile_wrappers << EOF
+  cat >> "${defsFile_wrappers}" << 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}"
 
   IFS=$SAVE_IFS
 done