diff options
Diffstat (limited to 'tools/fix_tommath_h.tcl')
| -rwxr-xr-x | tools/fix_tommath_h.tcl | 114 |
1 files changed, 81 insertions, 33 deletions
diff --git a/tools/fix_tommath_h.tcl b/tools/fix_tommath_h.tcl index 92b1f77..04bf857 100755 --- a/tools/fix_tommath_h.tcl +++ b/tools/fix_tommath_h.tcl @@ -7,48 +7,96 @@ # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -# RCS: @(#) $Id: fix_tommath_h.tcl,v 1.2 2005/05/10 18:35:25 kennykb Exp $ -# #---------------------------------------------------------------------- set f [open [lindex $argv 0] r] set data [read $f] close $f +set eat_endif 0 +set eat_semi 0 +set def_count 0 foreach line [split $data \n] { - switch -regexp -- $line { - {#define BN_H_} { - puts $line - puts {} - puts "\#ifdef TCL_TOMMATH" - puts "\#include <tclTomMath.h>" - puts "\#endif" - puts "\#ifndef TOMMATH_STORAGE_CLASS" - puts "\#define TOMMATH_STORAGE_CLASS extern" - puts "\#endif" + if {!$eat_semi && !$eat_endif} { + switch -regexp -- $line { + {#define BN_H_} { + puts $line + puts {} + puts "\#include \"tclInt.h\"" + puts "\#include \"tclTomMathDecls.h\"" + puts "\#ifndef MODULE_SCOPE" + puts "\#define MODULE_SCOPE extern" + puts "\#endif" + } + {typedef\s+unsigned long\s+mp_digit;} { + # change the second 'typedef unsigned long mp + incr def_count + puts "\#ifndef MP_DIGIT_DECLARED" + if {$def_count == 2} { + puts [string map {long int} $line] + } else { + puts $line + } + puts "\#define MP_DIGIT_DECLARED" + puts "\#endif" + } + {typedef.*mp_digit;} { + puts "\#ifndef MP_DIGIT_DECLARED" + puts $line + puts "\#define MP_DIGIT_DECLARED" + puts "\#endif" + } + {typedef struct} { + puts "\#ifndef MP_INT_DECLARED" + puts "\#define MP_INT_DECLARED" + puts "typedef struct mp_int mp_int;" + puts "\#endif" + puts "struct mp_int \{" + } + \}\ mp_int\; { + puts "\};" + } + {^(char|int|void)} { + puts "/*" + puts $line + set eat_semi 1 + set after_semi "*/" + } + {^extern (int|const)} { + puts "\#if defined(BUILD_tcl) || !defined(_WIN32)" + puts [regsub {^extern} $line "MODULE_SCOPE"] + set eat_semi 1 + set after_semi "\#endif" + } + {define heap macros} { + puts $line + puts "\#if 0 /* these are macros in tclTomMathDecls.h */" + set eat_endif 1 + } + {__x86_64__} { + puts "[string map {__x86_64__ NEVER} $line]\ + /* 128-bit ints fail in too many places */" + } + {#include} { + # remove all includes + } + default { + puts $line + } } - {typedef.*mp_digit;} { - puts "\#ifndef MP_DIGIT_DECLARED" - puts $line - puts "\#define MP_DIGIT_DECLARED" - puts "\#endif" + } else { + puts $line + } + if {$eat_semi} { + if {[regexp {; *$} $line]} { + puts $after_semi + set eat_semi 0 } - {typedef struct} { - puts "\#ifndef MP_INT_DECLARED" - puts "\#define MP_INT_DECLARED" - puts "typedef struct mp_int mp_int;" + } + if {$eat_endif} { + if {[regexp {^\#endif} $line]} { puts "\#endif" - puts "struct mp_int \{" - } - \}\ mp_int\; { - puts "\};" - } - "^(char|int|void)" { - puts "TOMMATH_STORAGE_CLASS $line" - } - default { - puts $line + set eat_endif 0 } } -}
\ No newline at end of file +} |
