~ubuntu-branches/ubuntu/trusty/erlang/trusty

« back to all changes in this revision

Viewing changes to lib/dialyzer/test/small_tests_SUITE_data/src/gs_make.erl

  • Committer: Bazaar Package Importer
  • Author(s): Clint Byrum
  • Date: 2011-05-05 15:48:43 UTC
  • mfrom: (3.5.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110505154843-0om6ekzg6m7ugj27
Tags: 1:14.b.2-dfsg-3ubuntu1
* Merge from debian unstable.  Remaining changes:
  - Drop libwxgtk2.8-dev build dependency. Wx isn't in main, and not
    supposed to.
  - Drop erlang-wx binary.
  - Drop erlang-wx dependency from -megaco, -common-test, and -reltool, they
    do not really need wx. Also drop it from -debugger; the GUI needs wx,
    but it apparently has CLI bits as well, and is also needed by -megaco,
    so let's keep the package for now.
  - debian/patches/series: Do what I meant, and enable build-options.patch
    instead.
* Additional changes:
  - Drop erlang-wx from -et
* Dropped Changes:
  - patches/pcre-crash.patch: CVE-2008-2371: outer level option with
    alternatives caused crash. (Applied Upstream)
  - fix for ssl certificate verification in newSSL: 
    ssl_cacertfile_fix.patch (Applied Upstream)
  - debian/patches/series: Enable native.patch again, to get stripped beam
    files and reduce the package size again. (build-options is what
    actually accomplished this)
  - Remove build-options.patch on advice from upstream and because it caused
    odd build failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
%% ``The contents of this file are subject to the Erlang Public License,
 
2
%% Version 1.1, (the "License"); you may not use this file except in
 
3
%% compliance with the License. You should have received a copy of the
 
4
%% Erlang Public License along with this software. If not, it can be
 
5
%% retrieved via the world wide web at http://www.erlang.org/.
 
6
%% 
 
7
%% Software distributed under the License is distributed on an "AS IS"
 
8
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 
9
%% the License for the specific language governing rights and limitations
 
10
%% under the License.
 
11
%% 
 
12
%% The Initial Developer of the Original Code is Ericsson Utvecklings AB.
 
13
%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
 
14
%% AB. All Rights Reserved.''
 
15
%% 
 
16
%%     $Id: gs_make.erl,v 1.1 2008/12/17 09:53:50 mikpe Exp $
 
17
%%
 
18
-module(gs_make).
 
19
 
 
20
-export([start/0]).
 
21
 
 
22
start() ->
 
23
    Terms = the_config(),
 
24
    DB=fill_ets(Terms),
 
25
    {ok,OutFd} = file:open("gstk_generic.hrl", [write]),
 
26
    put(stdout,OutFd),
 
27
%    io:format("terms: ~p ~n ets:~p~n",[Terms,ets:tab2list(DB)]),
 
28
    p("% Don't edit this file. It was generated by gs_make:start/0 "),
 
29
    p("at ~p-~p-~p, ~p:~p:~p.\n\n",
 
30
      lists:append(tuple_to_list(date()),tuple_to_list(time()))),
 
31
    gen_out_opts(DB),
 
32
    gen_read(DB),
 
33
    file:close(OutFd),
 
34
    {ok,"gstk_generic.hrl",DB}.
 
35
 
 
36
fill_ets(Terms) ->
 
37
    DB = ets:new(gs_mapping,[bag,public]),
 
38
    fill_ets(DB,Terms).
 
39
 
 
40
fill_ets(DB,[]) -> DB;
 
41
fill_ets(DB,[{Objs,Opt,Fun,Access}|Terms]) ->
 
42
    fill_ets(DB,lists:flatten(Objs),Opt,Fun,Access),
 
43
    fill_ets(DB,Terms).
 
44
 
 
45
fill_ets(_DB,[],_,_,_) -> done;
 
46
fill_ets(DB,[Obj|Objs],Opt,Fun,rw) ->
 
47
    ets:insert(DB,{Obj,Opt,Fun,read}),
 
48
    ets:insert(DB,{Obj,Opt,Fun,write}),
 
49
    fill_ets(DB,Objs,Opt,Fun,rw);
 
50
fill_ets(DB,[Obj|Objs],Opt,Fun,r) ->
 
51
    ets:insert(DB,{Obj,Opt,Fun,read}),
 
52
    fill_ets(DB,Objs,Opt,Fun,r);
 
53
fill_ets(DB,[Obj|Objs],Opt,Fun,w) ->
 
54
    ets:insert(DB,{Obj,Opt,Fun,write}),
 
55
    fill_ets(DB,Objs,Opt,Fun,w).
 
56
 
 
57
    
 
58
    
 
59
gen_out_opts(DB) ->
 
60
    ObjTypes = lists:flatten(ordsets:from_list(ets:match(DB,{'$1','_','_',write}))),
 
61
    p("out_opts([Option|Options],Gstkid,TkW,DB,ExtraArg,S,P,C) ->\n"),
 
62
    p("  {Opt,Val} =\n"),
 
63
    p("    case Option of \n"),
 
64
    p("      {{default,Cat,Key},V} -> {default,{Cat,{Key,V}}};\n"),
 
65
    p("      {_Key,_V} -> Option;\n"),
 
66
    p("      {default,Cat,Opti} -> {default,{Cat,Opti}};\n"),
 
67
    p("      Atom when atom(Atom) -> {Atom,undefined};\n"),
 
68
    p("      _ -> {error, {invalid_option,Option}}\n"),
 
69
    p("    end,\n"),
 
70
    p("  case Gstkid#gstkid.objtype of\n"),
 
71
    gen_out_type_case_clauses(merge_types(ObjTypes),DB),
 
72
    p("    Q -> exit({internal_error,unknown_objtype,Q})\n"),
 
73
    p("  end;\n"),
 
74
    p("out_opts([],_Gstkid,_TkW,_DB,_ExtraArg,S,P,C) -> \n"),
 
75
    p("  {S,P,C}.\n").
 
76
 
 
77
 
 
78
gen_out_type_case_clauses([],_DB) -> done;
 
79
gen_out_type_case_clauses([Objtype|Objtypes],DB) ->
 
80
    OptsFuns = lists:map(fun (L) -> list_to_tuple(L) end,
 
81
                         ets:match(DB,{Objtype,'$1','$2',write})),
 
82
    p("   ~p -> \ncase Opt of\n",[Objtype]),
 
83
    gen_opt_case_clauses(merge_opts(opt_prio(),OptsFuns)),
 
84
    p("  _ -> \n"),
 
85
    p("    handle_external_opt_call([Option|Options],Gstkid,TkW,DB,ExtraArg,"
 
86
      "                             gstk_~p:option(Option,Gstkid,TkW,DB,ExtraArg),S,P,C)\n",
 
87
      [Objtype]),
 
88
    p("  end;\n"),
 
89
    gen_out_type_case_clauses(Objtypes,DB).
 
90
 
 
91
gen_opt_case_clauses([]) ->
 
92
    done;
 
93
gen_opt_case_clauses([{Opt,Fun}|OptFuncs]) ->
 
94
    p("  ~p ->\n",[Opt]),
 
95
    p("    ~p(Val,Options,Gstkid,TkW,DB,ExtraArg,S,P,C);\n",[Fun]),
 
96
    gen_opt_case_clauses(OptFuncs).
 
97
 
 
98
gen_read(DB) ->
 
99
    ObjTypes = lists:flatten(ordsets:from_list(ets:match(DB,{'$1','_','_',read}))),
 
100
    p("read_option(DB,Gstkid,TkW,Option,ExtraArg) ->\n"),
 
101
    p("  Key = case Option of\n"),
 
102
    p("    Atom when atom(Atom) -> Atom;\n"),
 
103
    p("    Opt when tuple(Opt) -> element(1,Opt)\n"),
 
104
    p("  end,\n"),
 
105
    p("  case Gstkid#gstkid.objtype of\n"),
 
106
    gen_read_type_clauses(merge_types(ObjTypes),DB),
 
107
    p("    Q -> exit({internal_error,unknown_objtype,Q})\n"),
 
108
    p("  end.\n").
 
109
    
 
110
 
 
111
gen_read_type_clauses([],_) -> done;
 
112
gen_read_type_clauses([Objtype|Objtypes],DB) ->
 
113
    OptsFuns = lists:map(fun (L) -> list_to_tuple(L) end,
 
114
                         ets:match(DB,{Objtype,'$1','$2',read})),
 
115
    p("  ~p -> \ncase Key of\n",[Objtype]),
 
116
    gen_readopt_case_clauses(merge_opts(opt_prio(),OptsFuns)),
 
117
    p("  _ -> \nhandle_external_read(gstk_~p:read_option(Option,Gstkid,TkW,DB,ExtraArg))\n",[Objtype]),
 
118
    p("  end;\n"),
 
119
    gen_read_type_clauses(Objtypes,DB).
 
120
 
 
121
gen_readopt_case_clauses([]) ->
 
122
    done;
 
123
gen_readopt_case_clauses([{Opt,Fun}|OptFuncs]) ->
 
124
    p("  ~p -> \n~p(Option,Gstkid,TkW,DB,ExtraArg);\n",[Opt,Fun]),
 
125
    gen_readopt_case_clauses(OptFuncs).
 
126
 
 
127
 
 
128
p(Str) ->
 
129
    ok = io:format(get(stdout),Str,[]).
 
130
 
 
131
p(Format,Data) ->
 
132
    ok = io:format(get(stdout),Format,Data).
 
133
 
 
134
%%----------------------------------------------------------------------
 
135
%% There items should be placed early in a case statement.
 
136
%%----------------------------------------------------------------------
 
137
obj_prio() -> [rectangle,line,gridline,image,button,canvas,checkbutton,radiobutton].
 
138
opt_prio() -> [x,y,width,height,move,coords,data].
 
139
 
 
140
merge_types(Types) ->
 
141
    T2 = ordsets:from_list(Types),
 
142
    P2 = ordsets:from_list(obj_prio()),
 
143
    obj_prio() ++ ordsets:subtract(T2, P2).
 
144
 
 
145
merge_opts([],L) -> L;
 
146
merge_opts([Opt|Opts],Dict) ->
 
147
    case gs:assq(Opt,Dict) of
 
148
        {value,V} -> [{Opt,V}|merge_opts(Opts,lists:keydelete(Opt,1,Dict))];
 
149
        false -> merge_opts(Opts,Dict)
 
150
    end.
 
151
 
 
152
the_config() ->
 
153
    Buttons=[button,checkbutton,radiobutton],
 
154
    AllPureTk = [Buttons,canvas,editor,entry,frame,label,listbox,
 
155
                 menubar,menubutton,scale,window],
 
156
    CanvasObj = [arc,image,line,oval,polygon,rectangle,text],
 
157
    All = [AllPureTk,CanvasObj,grid,gridline,menu,menuitem,gs],
 
158
    Containers = [canvas,frame,grid,menu,menubar,menubutton,menuitem,window],
 
159
    Ob1 = [Buttons,canvas,grid,frame,label,entry,editor,listbox,scale],
 
160
    Ob2 = [button,checkbutton,radiobutton,label,menubutton],
 
161
    Ob3 = [Buttons,frame,label,entry,editor,listbox,scale,menubutton,
 
162
           menubar,menu],
 
163
    Ob4 = [canvas,editor,listbox],
 
164
    [{[Buttons,entry,scale,menubutton],enable,gen_enable,rw},
 
165
     {[Buttons,label,entry,scale,menubutton,menu],fg,gen_fg,rw},
 
166
     {[Buttons,label,entry,scale,menubutton,menu],bg,gen_bg,rw},
 
167
     {Ob1,anchor,gen_anchor,rw},
 
168
     {Ob1,height,gen_height,r},
 
169
     {Ob1--[frame],height,gen_height,w},
 
170
     {Ob1,width,gen_width,r},
 
171
     {Ob1--[frame],width,gen_width,w},
 
172
     {Ob1,pack_x,gen_pack_x,rw},
 
173
     {Ob1,pack_y,gen_pack_y,rw},
 
174
     {Ob1,pack_xy,gen_pack_xy,w},
 
175
     {Ob1,x,gen_x,rw},
 
176
     {Ob1,y,gen_y,rw},
 
177
     {Ob1,raise,gen_raise,w},
 
178
     {Ob1,lower,gen_lower,w},
 
179
     {Ob2,align,gen_align,rw},
 
180
     {Ob2,font,gen_font,rw},
 
181
     {Ob2,justify,gen_justify,rw},
 
182
     {Ob2,padx,gen_padx,rw},
 
183
     {Ob2,pady,gen_pady,rw},
 
184
     {Containers,default,gen_default,w},
 
185
     {[AllPureTk,menu],relief,gen_relief,rw},
 
186
     {[AllPureTk,menu],bw,gen_bw,rw},
 
187
     {[Buttons,canvas,frame,label,entry,scale,menubutton,menu,menubar],
 
188
      setfocus,gen_setfocus,rw},
 
189
     {Ob3,buttonpress,gen_buttonpress,rw}, 
 
190
     {Ob3,buttonrelease,gen_buttonrelease,rw},
 
191
     {Ob3,configure,gen_configure,rw},
 
192
     {[Ob3,window],destroy,gen_destroy,rw},
 
193
     {[Ob3,window],enter,gen_enter,rw},
 
194
     {[Ob3,window],leave,gen_leave,rw},
 
195
     {[Ob3,window],focus,gen_focus_ev,rw},
 
196
     {[Ob3,window],keypress,gen_keypress,rw},
 
197
     {[Ob3,window],keyrelease,gen_keyrelease,rw},
 
198
     {Ob3,motion,gen_motion,rw},
 
199
     %% events containing x,y are special
 
200
     {[window],buttonpress,gen_buttonpress,r},
 
201
     {[window],buttonrelease,gen_buttonrelease,r},
 
202
     {[window],motion,gen_motion,r},
 
203
     {All,font_wh,gen_font_wh,r},
 
204
     {All,choose_font,gen_choose_font,r},
 
205
     {All,data,gen_data,rw},
 
206
     {All,children,gen_children,r},
 
207
     {All,id,gen_id,r},
 
208
     {All,parent,gen_parent,r},
 
209
     {All,type,gen_type,r},
 
210
     {All,beep,gen_beep,w},
 
211
     {All,keep_opt,gen_keep_opt,w},
 
212
     {All,flush,gen_flush,rw},
 
213
     {AllPureTk,highlightbw,gen_highlightbw,rw},
 
214
     {AllPureTk,highlightbg,gen_highlightbg,rw},
 
215
     {AllPureTk,highlightfg,gen_highlightfg,rw},
 
216
     {AllPureTk,cursor,gen_cursor,rw}, % bug
 
217
     {[Buttons,label,menubutton],label,gen_label,rw},
 
218
     {[Buttons,menubutton,menu],activebg,gen_activebg,rw},
 
219
     {[Buttons,menubutton,menu],activefg,gen_activefg,rw},
 
220
     {[entry],selectbg,gen_selectbg,rw},
 
221
     {[entry],selectbw,gen_selectbw,rw},
 
222
     {[entry],selectfg,gen_selectfg,rw},
 
223
     {Ob4,activebg,gen_so_activebg,rw},
 
224
     {Ob4,bc,gen_so_bc,rw},
 
225
     {Ob4,bg,gen_so_bg,rw},
 
226
     {Ob4,hscroll,gen_so_hscroll,r},
 
227
     {Ob4,scrollbg,gen_so_scrollbg,rw},
 
228
     {Ob4,scrollfg,gen_so_scrollfg,rw},
 
229
     {Ob4,scrolls,gen_so_scrolls,w},
 
230
     {Ob4,selectbg,gen_so_selectbg,rw},
 
231
     {Ob4,selectbg,gen_so_selectbg,rw},
 
232
     {Ob4,selectbw,gen_so_selectbw,rw},
 
233
     {Ob4,selectbw,gen_so_selectbw,rw},
 
234
     {Ob4,selectfg,gen_so_selectfg,rw},
 
235
     {Ob4,selectfg,gen_so_selectfg,rw},
 
236
     {Ob4,vscroll,gen_so_vscroll,r},
 
237
     {CanvasObj,coords,gen_citem_coords,rw},
 
238
     {CanvasObj,lower,gen_citem_lower,w},
 
239
     {CanvasObj,raise,gen_citem_raise,w},
 
240
     {CanvasObj,move,gen_citem_move,w},
 
241
     {CanvasObj,setfocus,gen_citem_setfocus,rw},
 
242
     {CanvasObj,buttonpress,gen_citem_buttonpress,w}, % should be rw
 
243
     {CanvasObj,buttonrelease,gen_citem_buttonrelease,w},
 
244
     {CanvasObj,enter,gen_citem_enter,w},
 
245
     {CanvasObj,focus,gen_citem_setfocus,w},
 
246
     {CanvasObj,keypress,gen_citem_keypress,w},
 
247
     {CanvasObj,keyrelease,gen_citem_keyrelease,w},
 
248
     {CanvasObj,leave,gen_citem_leave,w},
 
249
     {CanvasObj,motion,gen_citem_motion,w},
 
250
     {CanvasObj,buttonpress,gen_buttonpress,r}, 
 
251
     {CanvasObj,buttonrelease,gen_buttonrelease,r},
 
252
     {CanvasObj,configure,gen_configure,r},
 
253
     {CanvasObj,destroy,gen_destroy,r},
 
254
     {CanvasObj,enter,gen_enter,r},
 
255
     {CanvasObj,leave,gen_leave,r},
 
256
     {CanvasObj,focus,gen_focus_ev,r},
 
257
     {CanvasObj,keypress,gen_keypress,r},
 
258
     {CanvasObj,keyrelease,gen_keyrelease,r},
 
259
     {CanvasObj,motion,gen_motion,r},
 
260
     {[arc,oval,polygon,rectangle],fill,gen_citem_fill,rw}].
 
261