#!/usr/bin/env perl eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' & eval 'exec perl -w -S $0 $argv:q' if 0; # ****************************************************************** # Author: Chad Elliott # Date: 3/1/2006 # Description: Generate an export header file for use with various compilers # ****************************************************************** # ****************************************************************** # Pragma Section # ****************************************************************** use strict; use FileHandle; use File::Basename; # ****************************************************************** # Data Section # ****************************************************************** my $version = '1.2'; # ****************************************************************** # Subroutine Section # ****************************************************************** sub generate_export_header { my($name, $output) = @_; my $fh = new FileHandle(); my $status = 0; if (open($fh, ">$output")) { $name = uc($name); print $fh <= 0x550) # if defined(${name}_BUILD_DLL) # define ${name}_Export __symbolic # else # define ${name}_Export __global # endif # elif defined(WIN32) || defined(UNDER_CE) || defined(__CYGWIN__) # if defined(${name}_BUILD_DLL) # define ${name}_Export __declspec(dllexport) # else # define ${name}_Export __declspec(dllimport) # endif # elif (defined(__GNUC__) && (__GNUC__ >= 4)) # if defined(${name}_BUILD_DLL) # define ${name}_Export __attribute__((visibility("default"))) # else # define ${name}_Export # endif # else # define ${name}_Export # endif #else # define ${name}_Export #endif #endif EOM ; close($fh); print "Output written to $output\n"; } else { print STDERR "ERROR: Unable to write to $output\n"; ++$status; } return $status; } sub usageAndExit { my $str = shift; print STDERR "$str\n" if (defined $str); print STDERR "Generate Export Header v$version\n", "Usage: ", basename($0), " [output file]\n"; exit(0); } # ****************************************************************** # Main Section # ****************************************************************** my $name = shift; my $output = shift; if (!defined $name) { usageAndExit(); } elsif (index($name, '-') == 0) { usageAndExit(); } if (!defined $output) { $output = $name . '_' . ($name =~ /^[A-Z]/ ? 'E' : 'e') . 'xport.h'; } if ($name =~ s/^\d+//) { print "WARNING: Removing beginning numbers from export name.\n"; } if ($name =~ s/-\s/_/g) { print "WARNING: Converting dashes and ", "whitespace to underscores in export name.\n"; } exit(generate_export_header($name, $output));