Просмотр исходного кода

Generate defs in smaller chunks

Bryan Drewery 2 лет назад
Родитель
Сommit
d571ca6d92
10 измененных файлов с 89 добавлено и 41 удалено
  1. 30 11
      Makefile.in
  2. 1 1
      src/Makefile.in
  3. 1 1
      src/dl.h
  4. 39 28
      src/generate_defs.sh
  5. 2 0
      src/libcrypto.cc
  6. 4 0
      src/libcrypto.h
  7. 2 0
      src/libssl.cc
  8. 4 0
      src/libssl.h
  9. 2 0
      src/libtcl.cc
  10. 4 0
      src/libtcl.h

+ 30 - 11
Makefile.in

@@ -139,17 +139,36 @@ sorthelp: src/sorthelp.cc
 
 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
+	 src/.defs/libcrypto_exports src/.defs/libssl_exports src/.defs/libtcl_exports
+src/.defs/libcrypto_post.h src/.defs/libcrypto_pre.h src/.defs/libcrypto_exports: src/libcrypto.cc \
+	src/generate_defs.sh src/generate_symbol.sh src/dl.h
+	@CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" INCLUDES="$(INCLUDES)" \
+           SED="sed" src/generate_defs.sh src/libcrypto.cc || exit 1
+src/.defs/libssl_post.h src/.defs/libssl_pre.h src/.defs/libssl_exports: src/libssl.cc \
+	src/generate_defs.sh src/generate_symbol.sh src/dl.h
+	@CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" INCLUDES="$(INCLUDES)" \
+           SED="sed" src/generate_defs.sh src/libssl.cc || exit 1
+src/.defs/libtcl_post.h src/.defs/libtcl_pre.h src/.defs/libtcl_exports: src/libtcl.cc \
+	src/generate_defs.sh src/generate_symbol.sh src/dl.h
+	@CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" INCLUDES="$(INCLUDES)" \
+           SED="sed" src/generate_defs.sh src/libtcl.cc || exit 1
+src/.defs/exports: Makefile \
+	src/.defs/libcrypto_exports src/.defs/libssl_exports src/.defs/libtcl_exports
+	@echo "Generating $@"
+	@{ \
+		echo "{"; \
+		echo "bfd_exports_stub;"; \
+		cat src/.defs/*_exports; \
+		echo "};"; \
+	} > $@.tmp
+	@if ! cmp -s $@.tmp $@; then \
+		mv -f $@.tmp $@; \
+	else \
+		rm -f $@.tmp; \
+		touch $@; \
+	fi
+
+general: libdefs src/.defs/exports
 
 .NOTPARALLEL: checkclean.static checkclean.dynamic checkclean.debug
 

+ 1 - 1
src/Makefile.in

@@ -113,7 +113,7 @@ sorthelp: sorthelp.cc $(top_builddir)/lib/bdlib/libbdlib.a
 	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $< $(top_builddir)/lib/bdlib/libbdlib.a $(LDFLAGS) -o $@
 	@$(STRIP) $@@EXEEXT@
 
-../$(EGGEXEC): $(OBJS) $(top_builddir)/lib/bdlib/libbdlib.a @LIBELF_BUNDLED@
+../$(EGGEXEC): $(OBJS) $(top_builddir)/lib/bdlib/libbdlib.a @LIBELF_BUNDLED@ $(EXPORTS)
 	@echo -e "[LD ]	\033[1m$@\033[0m"
 	$(LD) $(LDFLAGS) -o ../$(EGGEXEC) $(OBJS) $(top_builddir)/lib/bdlib/libbdlib.a \
 	    $(LIBS) @LIBELF_LIB@ -Wl,--dynamic-list=$(EXPORTS)

+ 1 - 1
src/dl.h

@@ -56,7 +56,7 @@ extern const char *dlsym_error;
 
 extern bd::HashTable<bd::String, FunctionPtr> dl_symbol_table;
 
-#ifdef GENERATE_DEFS
+#ifdef GENERATING_DEFS
 #undef DLSYM_GLOBAL
 #undef DLSYM_GLOBAL_FWDCOMPAT
 #endif

+ 39 - 28
src/generate_defs.sh

@@ -8,36 +8,37 @@ if [ -z "$SED" -o -z "$CXX" ]; then
   echo "This must be ran by configure" >&2
   exit 1
 fi
-echo "==== Generating lib symbols ===="
+#echo "==== Generating lib symbols ===="
 : ${INCLUDES:="${TCL_INCLUDES} ${SSL_INCLUDES}"}
 
 mkdir -p src/.defs > /dev/null 2>&1
 TMPFILE=$(mktemp "/tmp/pre.XXXXXX")
-files=$(grep -l DLSYM_GLOBAL src/*.cc|grep -v "src/_")
-exportsFile="src/.defs/exports"
+allfiles=$(grep -l DLSYM_GLOBAL src/*.cc|grep -v "src/_")
 
-for file in ${files}; do
-  suffix=${file##*.}
-  basename=${file%%.*}
-  basename=${basename##*/}
+if [ "$#" -eq 0 ]; then
+	for file in ${allfiles}; do
+	  suffix=${file##*.}
+	  basename=${file%%.*}
+	  basename=${basename##*/}
 
-  defsFile_wrappers="src/.defs/${basename}_defs.${suffix}"
-  defsFile_pre="src/.defs/${basename}_pre.h"
-  defsFile_post="src/.defs/${basename}_post.h"
+	  defsFile_wrappers="src/.defs/${basename}_defs.${suffix}"
+	  defsFile_pre="src/.defs/${basename}_pre.h"
+	  defsFile_post="src/.defs/${basename}_post.h"
 
-  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
+	  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
+fi
 
-echo "{" > "${exportsFile}"
-echo "bfd_exports_stub;" >> "${exportsFile}"
+: ${files:=${1-$(grep -l DLSYM_GLOBAL src/*.cc|grep -v "src/_")}}
 for file in ${files}; do
   suffix=${file##*.}
   basename=${file%%.*}
@@ -46,21 +47,27 @@ for file in ${files}; do
 
   echo -n "Generating symbols for ${basename}... "
 
+  exportsFile="src/.defs/${basename}_exports"
+  {
+	  #echo "{"
+	  :
+  } > "${exportsFile}.new"
+
   defsFile_wrappers="src/.defs/${basename}_defs.${suffix}"
   defsFile_pre="src/.defs/${basename}_pre.h"
   defsFile_post="src/.defs/${basename}_post.h"
 
   {
-	  #echo "#ifndef GENERATE_DEFS"
+	  #echo "#ifndef GENERATING_DEFS"
 	  echo "extern \"C\" {"
   } > "${defsFile_wrappers}.new"
   {
-	  #echo "#ifndef GENERATE_DEFS"
+	  #echo "#ifndef GENERATING_DEFS"
 	  echo "extern \"C\" {"
   } > "${defsFile_post}.new"
 
   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 -DGENERATING_DEFS "../${file}" > "${TMPFILE}"
   # Fix wrapped prototypes
   $SED -e :a -e N -e '$!ba' -e 's/,\n/,/g' "${TMPFILE}" > "${TMPFILE}.sed"
   mv "${TMPFILE}.sed" "${TMPFILE}"
@@ -109,7 +116,7 @@ for file in ${files}; do
 	    continue
     fi
     if [ "${dlsym}" = "DLSYM_GLOBAL_FWDCOMPAT" ]; then
-      echo "_${symbol};" >> "${exportsFile}"
+      echo "_${symbol};" >> "${exportsFile}.new"
     fi
     echo "${symbol} ${existing_typedef} ${typedef}"
   done | src/generate_symbol.sh "${defsFile_wrappers}" "${defsFile_pre}" "${defsFile_post}"
@@ -123,8 +130,13 @@ for file in ${files}; do
 	  #echo "#endif"
   } >> "${defsFile_post}.new"
 
+  {
+	  :
+	  #echo "};"
+  } >> "${exportsFile}.new"
+
   changed=0
-  for file in ${defsFile_wrappers} ${defsFile_pre} ${defsFile_post}; do
+  for file in ${defsFile_wrappers} ${defsFile_pre} ${defsFile_post} ${exportsFile}; do
 	  if ! cmp -s "${file}.new" "${file}"; then
 		  changed=1
 		  mv -f "${file}.new" "${file}"
@@ -141,5 +153,4 @@ for file in ${files}; do
 	  echo "unchanged"
   fi
 done
-echo "};">> "${exportsFile}"
 rm -f "${TMPFILE}"

+ 2 - 0
src/libcrypto.cc

@@ -33,7 +33,9 @@
 #include <bdlib/src/Array.h>
 
 #include "libcrypto.h"
+#ifndef GENERATING_DEFS
 #include ".defs/libcrypto_defs.cc"
+#endif
 
 #ifndef OPENSSL_SHLIB_VERSION
 #define OPENSSL_SHLIB_VERSION_STR SHLIB_VERSION_NUMBER

+ 4 - 0
src/libcrypto.h

@@ -5,7 +5,9 @@
 #  include "config.h"
 #endif
 
+#ifndef GENERATING_DEFS
 #include ".defs/libcrypto_pre.h"
+#endif
 
 #include <openssl/crypto.h>
 #include <openssl/aes.h>
@@ -16,7 +18,9 @@
 #include <openssl/err.h>
 #include <openssl/rand.h>
 
+#ifndef GENERATING_DEFS
 #include ".defs/libcrypto_post.h"
+#endif
 
 #include "src/crypto/aes_util.h"
 #include "src/crypto/bf_util.h"

+ 2 - 0
src/libssl.cc

@@ -33,7 +33,9 @@
 #include <bdlib/src/Array.h>
 
 #include "libssl.h"
+#ifndef GENERATING_DEFS
 #include ".defs/libssl_defs.cc"
+#endif
 
 #ifndef OPENSSL_SHLIB_VERSION
 #define OPENSSL_SHLIB_VERSION_STR SHLIB_VERSION_NUMBER

+ 4 - 0
src/libssl.h

@@ -9,7 +9,9 @@
 #include "dl.h"
 #include <bdlib/src/String.h>
 
+#ifndef GENERATING_DEFS
 #include ".defs/libssl_pre.h"
+#endif
 
 #ifdef EGG_SSL_EXT
 # ifndef EGG_SSL_INCS
@@ -20,7 +22,9 @@
 
 typedef DH* (*dh_callback_t)(SSL*, int, int);
 
+#ifndef GENERATING_DEFS
 #include ".defs/libssl_post.h"
+#endif
 
 typedef void (*SSL_CTX_set_tmp_dh_callback_t)(SSL_CTX*, dh_callback_t);
 

+ 2 - 0
src/libtcl.cc

@@ -32,7 +32,9 @@
 #include <bdlib/src/Array.h>
 
 #include "libtcl.h"
+#ifndef GENERATING_DEFS
 #include ".defs/libtcl_defs.cc"
+#endif
 
 #ifdef USE_SCRIPT_TCL
 Tcl_Interp *global_interp = NULL;

+ 4 - 0
src/libtcl.h

@@ -6,11 +6,15 @@
 #include <bdlib/src/String.h>
 #ifdef USE_SCRIPT_TCL
 
+#ifndef GENERATING_DEFS
 #include ".defs/libtcl_pre.h"
+#endif
 
 #include <tcl.h>
 
+#ifndef GENERATING_DEFS
 #include ".defs/libtcl_post.h"
+#endif
 
 
 #define STDVAR (ClientData cd, Tcl_Interp *interp, int argc, const char *argv[])