1#!/usr/bin/perl -w
2
3my $do_def = 0;
4
5if (($#ARGV >= 0) && ($ARGV[0] eq "-def")) {
6    shift;
7    $do_def = 1;
8}
9
10print <<EOF;
11/* Generated by makegioalias.pl */
12
13#ifndef DISABLE_VISIBILITY
14
15#include "glib.h"
16
17#ifdef G_HAVE_GNUC_VISIBILITY
18
19EOF
20
21if ($do_def) {
22    print <<EOF
23#undef IN_FILE
24#define IN_FILE defined
25
26#undef IN_HEADER
27#define IN_HEADER(x) 1
28
29EOF
30}
31else {
32    print <<EOF
33#define IN_FILE(x) 1
34#define IN_HEADER defined
35
36EOF
37}
38
39my $in_comment = 0;
40my $in_skipped_section = 0;
41
42while (<>) {
43
44  # ignore empty lines
45  next if /^\s*$/;
46
47  # skip comments
48  if ($_ =~ /^\s*\/\*/)
49  {
50      $in_comment = 1;
51  }
52
53  if ($in_comment)
54  {
55      if ($_ =~  /\*\/\s$/)
56      {
57	  $in_comment = 0;
58      }
59
60      next;
61  }
62
63  # handle ifdefs
64  if ($_ =~ /^\#endif/)
65  {
66      if (!$in_skipped_section)
67      {
68	  print $_;
69      }
70
71      $in_skipped_section = 0;
72
73      next;
74  }
75
76  if ($_ =~ /^\#ifdef\s+(INCLUDE_VARIABLES|INCLUDE_INTERNAL_SYMBOLS|ALL_FILES)/)
77  {
78      $in_skipped_section = 1;
79  }
80
81  if ($in_skipped_section)
82  {
83      next;
84  }
85
86  if ($_ =~ /^\#ifn?def\s+G/)
87  {
88      print $_;
89
90      next;
91  }
92
93  if ($_ =~ /^\#if.*(IN_FILE|IN_HEADER)/)
94  {
95      print $_;
96
97      next;
98  }
99
100  chop;
101  my $str = $_;
102  my @words;
103  my $attributes = "";
104
105  @words = split(/ /, $str);
106  $str = shift(@words);
107  chomp($str);
108  my $alias = "IA__".$str;
109
110  # Drop any Win32 specific .def file syntax,  but keep attributes
111  foreach $word (@words) {
112      $attributes = "$attributes $word" unless $word eq "PRIVATE";
113  }
114
115  if (!$do_def) {
116    print <<EOF
117extern __typeof ($str) $alias __attribute((visibility("hidden")))$attributes;
118\#define $str $alias
119
120EOF
121  }
122  else {
123    print <<EOF
124\#undef $str
125extern __typeof ($str) $str __attribute((alias("$alias"), visibility("default")));
126
127EOF
128  }
129}
130
131print <<EOF;
132
133#endif /* G_HAVE_GNUC_VISIBILITY */
134#endif /* DISABLE_VISIBILITY */
135EOF
136
137
138