Blame gdk/makegdkalias.pl

Packit 98cdb6
#!/usr/bin/perl -w
Packit 98cdb6
Packit 98cdb6
my $do_def = 0;
Packit 98cdb6
Packit 98cdb6
if (($#ARGV >= 0) && ($ARGV[0] eq "-def")) {
Packit 98cdb6
    shift;
Packit 98cdb6
    $do_def = 1;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
print <
Packit 98cdb6
/* Generated by makegdkalias.pl */
Packit 98cdb6
Packit 98cdb6
#ifndef DISABLE_VISIBILITY
Packit 98cdb6
Packit 98cdb6
#include <glib.h>
Packit 98cdb6
Packit 98cdb6
#ifdef G_HAVE_GNUC_VISIBILITY
Packit 98cdb6
Packit 98cdb6
EOF
Packit 98cdb6
Packit 98cdb6
if ($do_def) {
Packit 98cdb6
    print <
Packit 98cdb6
#undef IN_FILE
Packit 98cdb6
#define IN_FILE defined
Packit 98cdb6
Packit 98cdb6
#undef IN_HEADER
Packit 98cdb6
#define IN_HEADER(x) 1
Packit 98cdb6
Packit 98cdb6
EOF
Packit 98cdb6
} 
Packit 98cdb6
else { 
Packit 98cdb6
    print <
Packit 98cdb6
#define IN_FILE(x) 1
Packit 98cdb6
#define IN_HEADER defined
Packit 98cdb6
Packit 98cdb6
EOF
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
my $in_comment = 0;
Packit 98cdb6
my $in_skipped_section = 0;
Packit 98cdb6
Packit 98cdb6
while (<>) {
Packit 98cdb6
Packit 98cdb6
  # ignore empty lines
Packit 98cdb6
  next if /^\s*$/;
Packit 98cdb6
Packit 98cdb6
  # skip comments
Packit 98cdb6
  if ($_ =~ /^\s*\/\*/)
Packit 98cdb6
  {
Packit 98cdb6
      $in_comment = 1;
Packit 98cdb6
  }
Packit 98cdb6
  
Packit 98cdb6
  if ($in_comment)
Packit 98cdb6
  {
Packit 98cdb6
      if ($_ =~  /\*\/\s$/)
Packit 98cdb6
      {
Packit 98cdb6
	  $in_comment = 0;
Packit 98cdb6
      }
Packit 98cdb6
      
Packit 98cdb6
      next;
Packit 98cdb6
  }
Packit 98cdb6
Packit 98cdb6
  # handle ifdefs
Packit 98cdb6
  if ($_ =~ /^\#endif/)
Packit 98cdb6
  {
Packit 98cdb6
      if (!$in_skipped_section)
Packit 98cdb6
      {
Packit 98cdb6
	  print $_;
Packit 98cdb6
      }
Packit 98cdb6
Packit 98cdb6
      $in_skipped_section = 0;
Packit 98cdb6
Packit 98cdb6
      next;
Packit 98cdb6
  }
Packit 98cdb6
Packit 98cdb6
  if ($_ =~ /^\#ifdef\s+(INCLUDE_VARIABLES|INCLUDE_INTERNAL_SYMBOLS|ALL_FILES)/)
Packit 98cdb6
  {
Packit 98cdb6
      $in_skipped_section = 1;
Packit 98cdb6
  }
Packit 98cdb6
Packit 98cdb6
  if ($in_skipped_section)
Packit 98cdb6
  {
Packit 98cdb6
      next;
Packit 98cdb6
  }
Packit 98cdb6
Packit 98cdb6
  if ($_ =~ /^\#ifn?def\s+G/)
Packit 98cdb6
  {
Packit 98cdb6
      print $_;
Packit 98cdb6
      
Packit 98cdb6
      next;
Packit 98cdb6
  }
Packit 98cdb6
Packit 98cdb6
  if ($_ =~ /^\#if.*(IN_FILE|IN_HEADER)/)
Packit 98cdb6
  {
Packit 98cdb6
      print $_;
Packit 98cdb6
      
Packit 98cdb6
      next;
Packit 98cdb6
  }
Packit 98cdb6
Packit 98cdb6
  chop;
Packit 98cdb6
  my $str = $_;
Packit 98cdb6
  my @words;
Packit 98cdb6
  my $attributes = "";
Packit 98cdb6
Packit 98cdb6
  @words = split(/ /, $str);
Packit 98cdb6
  $str = shift(@words);
Packit 98cdb6
  chomp($str);
Packit 98cdb6
  my $alias = "IA__".$str;
Packit 98cdb6
  
Packit 98cdb6
  # Drop any Win32 specific .def file syntax,  but keep attributes
Packit 98cdb6
  foreach $word (@words) {
Packit 98cdb6
      $attributes = "$attributes $word" unless $word eq "PRIVATE";
Packit 98cdb6
  }
Packit 98cdb6
      
Packit 98cdb6
  if (!$do_def) {
Packit 98cdb6
    print <
Packit 98cdb6
extern __typeof ($str) $alias __attribute((visibility("hidden")))$attributes;
Packit 98cdb6
\#define $str $alias
Packit 98cdb6
Packit 98cdb6
EOF
Packit 98cdb6
  }
Packit 98cdb6
  else {
Packit 98cdb6
    print <
Packit 98cdb6
\#undef $str 
Packit 98cdb6
extern __typeof ($str) $str __attribute((alias("$alias"), visibility("default")));
Packit 98cdb6
Packit 98cdb6
EOF
Packit 98cdb6
  }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
print <
Packit 98cdb6
Packit 98cdb6
#endif /* G_HAVE_GNUC_VISIBILITY */
Packit 98cdb6
#endif /* DISABLE_VISIBILITY */
Packit 98cdb6
EOF
Packit 98cdb6