#!/usr/local/bin/perl -w # # This is a utility that searches out "DECLARE_STACK_OF()" # declarations in header files, and updates/creates/replaces # the corresponding macro declarations that follow it. The # reason is that with "DEBUG_SAFESTACK" defined, each type # will generate 19 functions, all type-safe variants of the # base "sk_***" functions for the general STACK type. Without # DEBUG_SAFESTACK defined, we need to macro define all the # "type'd sk_##type##_***" functions as mapping directly to # the standard sk_*** equivalents. As it's not generally # possible to have macros that generate macros, we need to # control this from the "outside", here in this script. # # Geoff Thorpe, June, 2000 (with massive Perl-hacking # help from Steve Robb) my $type_thing; my $recurse = 0; my @files = @ARGV; while (@ARGV) { my $arg = $ARGV[0]; if($arg eq "-recurse") { $recurse = 1; shift @ARGV; } else { last; } } if($recurse) { @source = (, , , ); } else { @source = @ARGV; } foreach $file (@source) { # After "Configure" has been run, we need to make sure we don't # overwrite symbollic links with new header files! next if -l $file; # Open the .c/.h file for reading open(IN, "< $file") || die "Can't open $file for reading: $!"; open(OUT, "> $file.tmp") || die "Can't open $file.tmp for writing: $!"; select(OUT); process_the_file(); close(OUT); close(IN); unlink($file); rename("$file.tmp", $file); } sub process_the_file { my $inside_block = 0; my $output_defines = 0; while() { if (/^DECLARE_STACK_OF\(([^)]+)\)/) { $type_thing = $1; $output_defines = 1; } if (m|^/\* This block of defines is updated by a perl script, please do not touch! \*/|) { $inside_block = 1; } if (m|^/\* End of perl script block, you may now edit :-\) \*/|) { $inside_block = 0; } elsif ($inside_block == 0) { print; } if($output_defines == 1) { print <