OTWO-1213 Works around lost encoding in Ruby/C binding layer
[ohcount] / ruby / gestalt / definitions.rb
1 module Ohcount
2         module Gestalt
3
4
5     ############################# Platforms #############################
6     #                                                                   #
7     # Platforms is used in the most general sense of the word. We don't #
8     # discriminate between OS-platforms and a lightweight framework -   #
9     # any type of dependency is fair game.                              #
10     #                                                                   #
11     # What guides what we add here is mostly for internal Ohloh         #
12     # purposes.                                                         #
13     #                                                                   #
14     #####################################################################
15
16     define_platform 'posix' do
17       # gnu_lib && generic
18       c_headers 'pthread.h', 'xstrtol.h', 'xreadlink.h', 'fatal-signal.h', 'diacrit.h', 'syslog.h', 'sys/stat.h'
19
20       # autoconf means m4 (unix macro processor)
21       language :autoconf
22     end
23
24     define_platform 'win32' do
25       c_headers 'windows.h'
26       c_keywords 'WM_PAINT', 'ReleaseDC', 'WndProc', :min => 2
27     end
28
29     define_platform 'visualbasic' do
30       language :visualbasic, :min_percent => 5
31     end
32
33     define_platform 'ruby' do
34       language :ruby, :min_percent => 15
35     end
36
37     define_platform 'rails' do
38       _and do
39         gestalt(:platform, 'ruby')
40         ruby_keywords("RAILS_ROOT")
41       end
42     end
43
44     define_platform 'java' do
45       language :java, :min_percent => 15
46     end
47
48     define_platform 'javascript' do
49       language :javascript, :min_percent => 20
50     end
51
52     define_platform 'jquery' do
53       filenames 'jquery-\d.\d.\d.min.js$'
54     end
55
56                 define_platform 'mootools' do
57                         filenames '\bmootools-\d(\.\d)*(-core)?(-..)?\.js$'
58                 end
59
60                 define_platform 'prototype' do
61                         filenames '\bprototype(-\d+(\.\d)+)?.js$'
62                 end
63
64                 define_platform 'yui' do
65                         _or do
66                                 filenames '\byahoo-min\.js$'
67                                 html_keywords '\byahoo-min\.js\b'
68                         end
69                 end
70
71                 define_platform 'dojo' do
72                         _or do
73                                 filenames '\bdojo\.js$'
74                                 html_keywords '\bdojo\.xd\.js\b'
75                         end
76                 end
77
78                 define_platform 'flash' do
79                         _or do
80                                 language :actionscript, :min_percent => 1
81                                 _and do
82                                         gestalt(:platform, 'java')
83                                         java_import /^(flash)\..+/
84                                 end
85                         end
86                 end
87
88                 define_platform 'flex' do
89                         _or do
90                                 language :mxml, :min_percent => 1
91                                 _and do
92                                         gestalt(:platform, 'java')
93                                         java_import /^(mx)\..+/
94                                 end
95                         end
96                 end
97
98     define_platform 'xwindows' do
99       c_headers 'Xlib.h', 'X11\/xpm.h', 'X11/Xlib.h'
100     end
101
102     define_platform 'mac' do
103       # apple events
104       c_keywords 'AppleEvent', 'AEBuildAppleEvent'
105
106       # plist is a mac thing, right?
107       filenames '\.plist'
108     end
109
110     define_platform 'php' do
111       language :php, :min_percent => 15
112     end
113
114     define_platform 'wxwidgets' do
115       c_headers 'wx/window.h'
116     end
117
118                 define_platform 'zendframework' do
119       _and do
120         gestalt(:platform, 'php')
121         php_keywords('Zend_Controller_Action')
122       end
123                 end
124
125                 define_platform 'symfony' do
126                         _and do
127         gestalt(:platform, 'php')
128         php_keywords('sfCore', 'sfConfig')
129       end
130     end
131
132                 define_platform 'pear' do
133       _and do
134         gestalt(:platform, 'php')
135         _or do
136           filenames('\bpackage\.xml(\.tpl)?$')
137           xml_keywords('pear\.php\.net/dtd/package\-2\.0')
138         end
139       end
140                 end
141
142                 define_platform 'moodle' do
143                         _and do
144                                 gestalt(:platform, 'php')
145                                 php_keywords("moodle")
146       end
147                 end
148
149     define_platform 'sql' do
150       language :sql
151     end
152
153     define_platform 'mysql' do
154       php_keywords('mysql_connect')
155     end
156
157     define_platform 'postgresql' do
158       php_keywords('pg_connect')
159     end
160
161                 define_platform 'python' do
162                         language :python, :min_percent => 15
163                 end
164
165                 define_platform 'perl' do
166                         language :perl, :min_percent => 20
167                 end
168
169                 define_platform 'scripting' do
170                         gestalt(:platform, 'javascript')
171                         gestalt(:platform, 'perl')
172                         gestalt(:platform, 'php')
173                         gestalt(:platform, 'python')
174                         gestalt(:platform, 'ruby')
175                 end
176
177                 define_platform 'cakephp' do
178                         _and do
179         gestalt(:platform, 'php')
180                                 php_keywords('CAKE_CORE_INCLUDE_PATH')
181       end
182                 end
183
184                 define_platform 'kde' do
185                         c_headers 'KDEInit.h', 'kdeversion.h'
186                 end
187
188                 define_platform 'gtk' do
189                         c_keywords 'gtk_init', 'gtk_main', 'gtk_window_new', 'GtkWidget'
190                 end
191
192                 define_platform 'drupal' do
193                         _and do
194                                 gestalt(:platform, 'php')
195                                 _or do
196                                         php_keywords('drupal_set_message')
197                                         php_keywords('drupal_render')
198                                         php_keywords('Drupal', :min => 3)
199         end
200       end
201                 end
202
203                 define_platform 'msdos' do
204                         c_keywords '__MSDOS__', 'MSDOS', :min => 2
205     end
206
207     define_platform 'eclipseplatform' do
208       java_import /org\.eclipse\./
209     end
210
211
212     ############################### Tools ###############################
213
214     define_tool 'visualstudio' do
215       filenames '\.(sln|vcproj|vsproj|csproj|vbproj|vbp)$'
216     end
217
218     define_tool 'eclipse' do
219       filenames '\.(project|classpath)$'
220     end
221
222     define_tool 'netbeans' do
223       filenames '\bnbplatform\b'
224       filenames '\.nbm$'
225     end
226
227     ############################ ARM ###################################
228
229                 define_platform 'arm' do
230                         c_headers "arm4.h", "arm3.h"
231                         c_keywords "arm_int32_t", "arm_start_application", "__arm__"
232                         make_keywords '\b\-mabi\b','\barmcc\b'
233                         java_keywords '\barm\-eabi'
234                         assembler_keywords '\bsmlal\b', '\bsmulw\b', '\borrs\b'
235                         gestalt(:platform, 'arm_neon')
236                         java_import /org\.opengroup\.arm/
237                 end
238
239     ########################## ARM NEON ################################
240
241     define_platform 'arm_neon' do
242       assembler_keywords '\bvld1\.\d\d\b', '\bvld1\.\d\d\b','\bvmov\b','\bvmov\.u8\b'
243       make_keywords '\bneon\b','\bNEON\b'
244     end
245
246                 ############################ ATOM ##################################
247                 # Atom is hard to detect, since it implements x86 instruction set
248
249                 define_platform 'sse3_atom_flag' do
250                         make_keywords 'SSE3_ATOM'
251                 end
252
253                 define_platform 'xl_flag' do
254                         make_keywords '\bxL\b', '\/QxL\b'
255                 end
256
257                 define_platform 'atom' do
258                         gestalt(:platform, 'sse3_atom_flag')
259                         gestalt(:platform, 'xl_flag')
260                 end
261
262                 ########################## COMPILER ################################
263                 define_platform 'intel_compiler' do
264                         make_keywords '\bicc\b'
265                 end
266
267                 define_platform 'gcc' do
268                         make_keywords '\bgcc\b'
269                 end
270
271     ########################### MOBLIN #################################
272
273                 define_platform 'clutter' do
274                         c_keywords "ClutterActor", '\bclutter_actor_', "ClutterStage", "ClutterBehavior", "clutter_main"
275                         csharp_keywords "ClutterActor", '\bclutter_actor_', "ClutterStage", "ClutterBehavior", "clutter_main"
276                         perl_keywords "Clutter::Behavior", "Clutter::Actor", "Clutter::Stage"
277                         java_keywords "ClutterActor", "ClutterStage", "ClutterShader"
278                         ruby_keywords "Clutter::Actor", "Clutter::Stage", "Clutter::Shader", "Clutter::Cairo"
279                 end
280
281                 define_platform 'moblin_misc' do
282                         c_keywords '\"org\.moblin\.', 'MOBLIN_NETBOOK_SYSTEM_TRAY_H', 'org_Moblin_', '\"org\.Moblin\.', "url=\"http://moblin.org\">http://moblin.org</ulink>"
283                         make_keywords "org\.moblin\.", "moblin-netbook"
284                         filenames 'moblin-netbook-system-tray.h$'
285                 end
286
287                 define_platform 'nbtk' do
288                         c_keywords '\bnbtk_[a-z]+', '\bNbtk[A-Z][a-z]+'
289                         java_keywords '\bnbtk_[a-z]+', '\bNbtk[A-Z][a-z]+'
290                         ruby_keywords '\bnbtk_[a-z]+', '\bNbtk[A-Z][a-z]+'
291                         filenames 'nbtk\/nbtk.h'
292                 end
293
294                 define_platform 'moblin' do
295                         gestalt(:platform, 'clutter')
296                         gestalt(:platform, 'moblin_misc')
297                         gestalt(:platform, 'nbtk')
298                 end
299
300     ########################### ANDROID #################################
301
302                 define_platform 'android' do
303                         java_import /\bandroid\./
304                 end
305
306     ############################ iPhone #################################
307
308                 define_platform 'iphone' do
309                         objective_c_keywords '\bUIApplicationMain', '\bUIWindow', '\bUIView', '\bUIResponder'
310                 end
311
312     ############################ Maemo #################################
313
314                 define_platform 'hildon' do
315                         c_keywords '\bHildonFile', '\bhildon_file_', '\bHildonProgram', '\bHildonWindow', '\bhildon_window'
316                         c_headers 'hildon/hildon.h'
317                         _and do
318                                 python_keywords '\bimport hildon'
319                                 python_keywords '\bimport gtk'
320                         end
321                 end
322                 define_platform 'maemo' do
323                         gestalt(:platform, 'hildon')
324                 end
325
326                 define_platform 'mid_combined' do
327                         gestalt(:platform, 'clutter')
328                         gestalt(:platform, 'nbtk')
329                         gestalt(:platform, 'moblin')
330                         gestalt(:platform, 'maemo')
331                         gestalt(:platform, 'android')
332                         gestalt(:platform, 'iphone')
333                 end
334
335
336     ############################ Windows CE ############################
337                 define_platform 'windows_ce_incomplete' do
338                         csharp_keywords 'Microsoft\.WindowsCE', 'Microsoft\.WindowsMobile'
339                         vb_keywords 'Microsoft\.WindowsCE', 'Microsoft\.WindowsMobile'
340                 end
341
342                 ######################### Native Code ##############################
343                 define_platform 'native_code' do
344                         language :c, :min_percent => 5
345                         language :cpp, :min_percent => 5
346                         language :cncpp, :min_percent => 5
347                         language :assembly, :min_percent => 5
348                         language :d, :min_percent => 5
349                         language :fortran, :min_percent => 5
350                         language :haskell, :min_percent => 5
351                         language :cobol, :min_percent => 5
352                 end
353         end
354 end