Prechádzať zdrojové kódy

* Undefine real headers/symbols and define our own to avoid redeclaration errors

Bryan Drewery 15 rokov pred
rodič
commit
61877f9f0e
5 zmenil súbory, kde vykonal 30 pridanie a 9 odobranie
  1. 14 9
      src/generate_defs.sh
  2. 2 0
      src/generate_symbol.sh
  3. 5 0
      src/libcrypto.h
  4. 4 0
      src/libssl.h
  5. 5 0
      src/libtcl.h

+ 14 - 9
src/generate_defs.sh

@@ -5,17 +5,22 @@ echo "Generating lib symbols"
 mkdir -p src/.defs > /dev/null 2>&1
 
 for file in $(git grep -l DLSYM_GLOBAL|grep "\.c$"); do
-  defsFile="src/.defs/$(basename $file .c)_defs.c"
-  cat > $defsFile << EOF
-extern "C" {
-EOF
+  defsFile_wrappers="src/.defs/$(basename $file .c)_defs.c"
+  defsFile_pre="src/.defs/$(basename $file .c)_pre.h"
+  defsFile_post="src/.defs/$(basename $file .c)_post.h"
+
+  rm -f $defsFile_pre $defsFile_post > /dev/null 2>&1
+
+  echo "extern \"C\" {" > $defsFile_wrappers
+  echo "extern \"C\" {" > $defsFile_post
 
   for symbol in $(sed -n -e 's/.*DLSYM_GLOBAL(.*, \([^)]*\).*/\1/p' $file|sort -u); do
-    grep "^typedef .*(\*${symbol}_t)" $(dirname $file)/$(basename $file .c).h | src/generate_symbol.sh
-  done >> $defsFile
+    echo "#define ${symbol} ORIGINAL_SYMBOL_${symbol}" >> $defsFile_pre
+    echo "#undef ${symbol}" >> $defsFile_post
+    grep "^typedef .*(\*${symbol}_t)" $(dirname $file)/$(basename $file .c).h | src/generate_symbol.sh >> $defsFile_wrappers 2>> $defsFile_post
+  done
 
-  cat >> $defsFile << EOF
-}
-EOF
+  echo "}" >> $defsFile_wrappers
+  echo "}" >> $defsFile_post
 done
 

+ 2 - 0
src/generate_symbol.sh

@@ -36,4 +36,6 @@ $returntype $name ($params_full) {
   return DLSYM_VAR($name)($param_names);
 }
 EOF
+
+  echo "$returntype $name ($params_full);" >&2
 done

+ 5 - 0
src/libcrypto.h

@@ -1,11 +1,16 @@
 #ifndef _LIBCRYPTO_H
 #define _LIBCRYPTO_H
 
+#include ".defs/libcrypto_pre.h"
+
 #include <openssl/crypto.h>
 #include <openssl/aes.h>
 #include <openssl/blowfish.h>
 #include <openssl/md5.h>
 #include <openssl/sha.h>
+
+#include ".defs/libcrypto_post.h"
+
 #include "src/crypto/aes_util.h"
 #include "src/crypto/bf_util.h"
 #include "src/crypto/dh_util.h"

+ 4 - 0
src/libssl.h

@@ -5,6 +5,8 @@
 #include "dl.h"
 #include <bdlib/src/String.h>
 
+#include ".defs/libssl_pre.h"
+
 #ifdef EGG_SSL_EXT
 # ifndef EGG_SSL_INCS
 #  include <openssl/ssl.h>
@@ -14,6 +16,8 @@
 # endif
 #endif
 
+#include ".defs/libssl_post.h"
+
 typedef int (*SSL_get_error_t)(const SSL*, int);
 typedef void (*SSL_free_t)(SSL*);
 typedef int (*SSL_connect_t)(SSL*);

+ 5 - 0
src/libtcl.h

@@ -5,8 +5,13 @@
 #include "dl.h"
 #include <bdlib/src/String.h>
 #ifdef HAVE_LIBTCL
+
+#include ".defs/libtcl_pre.h"
+
 #include <tcl.h>
 
+#include ".defs/libtcl_post.h"
+
 typedef int (*Tcl_Eval_t)(Tcl_Interp*, const char*);
 typedef Tcl_Command (*Tcl_CreateCommand_t)(Tcl_Interp*, const char*, Tcl_CmdProc*, ClientData, Tcl_CmdDeleteProc*);
 typedef const char* (*Tcl_GetStringResult_t)(Tcl_Interp*);