Blame gtk/makegtkalias.pl

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