[NEW] Adding Jasper gestalts (from jay via ohloh)
[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 'WPF' do
30       filenames '\.xaml$'
31     end
32
33     define_platform 'VisualBasic' do
34       language :visualbasic, :min_percent => 5
35     end
36
37     define_platform 'Ruby' do
38       language :ruby, :min_percent => 15
39     end
40
41     define_platform 'Rails' do
42       _and do
43         gestalt(:platform, 'Ruby')
44         ruby_keywords("RAILS_ROOT")
45       end
46     end
47
48     define_platform 'Java' do
49       language :java, :min_percent => 15
50     end
51
52     define_platform 'Javascript' do
53       language :javascript, :min_percent => 20
54     end
55
56     define_platform 'JQuery' do
57       filenames 'jquery-\d.\d.\d.min.js'
58     end
59
60     define_platform 'XWindows' do
61       c_headers 'Xlib.h', 'X11\/xpm.h', 'X11/Xlib.h'
62     end
63
64     define_platform 'Mac' do
65       # apple events
66       c_keywords 'AppleEvent', 'AEBuildAppleEvent'
67
68       # plist is a mac thing, right?
69       filenames '\.plist'
70     end
71
72     define_platform 'PHP' do
73       language :php, :min_percent => 15
74     end
75
76     define_platform 'WxWidgets' do
77       c_headers 'wx/window.h'
78     end
79
80                 define_platform 'ZendFramework' do
81       _and do
82         gestalt(:platform, 'PHP')
83         php_keywords('Zend_Controller_Action')
84       end
85                 end
86
87                 define_platform 'Symfony' do
88                         _and do
89         gestalt(:platform, 'PHP')
90         php_keywords('sfCore', 'sfConfig')
91       end
92     end
93
94                 define_platform 'Pear' do
95       _and do
96         gestalt(:platform, 'PHP')
97         _or do
98           filenames('\bpackage\.xml(\.tpl)?$')
99           xml_keywords('pear\.php\.net/dtd/package\-2\.0')
100         end
101       end
102                 end
103
104                 define_platform 'Moodle' do
105                         _and do
106                                 gestalt(:platform, 'PHP')
107                                 php_keywords("moodle")
108       end
109                 end
110
111     define_platform 'SQL' do
112       language :sql
113     end
114
115     define_platform 'MySQL' do
116       php_keywords('mysql_connect')
117     end
118
119     define_platform 'PostgreSQL' do
120       php_keywords('pg_connect')
121     end
122
123                 define_platform 'Python' do
124                         language :python, :min_percent => 15
125                 end
126
127                 define_platform 'Perl' do
128                         language :perl, :min_percent => 20
129                 end
130
131                 define_platform 'Scripting' do
132                         gestalt(:platform, 'Javascript')
133                         gestalt(:platform, 'Perl')
134                         gestalt(:platform, 'PHP')
135                         gestalt(:platform, 'Python')
136                         gestalt(:platform, 'Ruby')
137                 end
138
139                 define_platform 'CakePHP' do
140                         _and do
141         gestalt(:platform, 'PHP')
142                                 php_keywords('CAKE_CORE_INCLUDE_PATH')
143       end
144                 end
145
146                 define_platform 'KDE' do
147                         c_headers 'KDEInit.h', 'kdeversion.h'
148                 end
149
150                 define_platform 'GTK' do
151                         c_keywords 'gtk_init', 'gtk_main', 'gtk_window_new', 'GtkWidget'
152                 end
153
154                 define_platform 'Drupal' do
155                         _and do
156                                 gestalt(:platform, 'PHP')
157                                 _or do
158                                         php_keywords('drupal_set_message')
159                                         php_keywords('drupal_render')
160                                         php_keywords('Drupal', :min => 3)
161         end
162       end
163                 end
164
165                 define_platform 'MSDos' do
166                         c_keywords '__MSDOS__', 'MSDOS', :min => 2
167     end
168
169     define_platform 'EclipsePlatform' do
170       java_import /org\.eclipse\./
171     end
172
173
174     ############################### Tools ###############################
175
176     define_tool 'VisualStudio' do
177       filenames '\.(sln|vcproj|vsproj|csproj|vbproj|vbp)$'
178     end
179
180     define_tool 'Eclipse' do
181       filenames '\.(project|classpath)$'
182     end
183
184     define_tool 'NetBeans' do
185       filenames '\bnbplatform\b'
186       filenames '\.nbm$'
187     end
188
189     ############################ ARM ###################################
190
191                 define_platform 'arm' do
192                         c_headers "arm4.h", "arm3.h"
193                         c_keywords "arm_int32_t", "arm_start_application", "__arm__"
194                         make_keywords '\b\-mabi\b','\barmcc\b'
195                         java_keywords '\barm\-eabi'
196                         assembler_keywords '\bsmlal\b', '\bsmulw\b', '\borrs\b'
197                         gestalt(:platform, 'arm_neon')
198                         java_import /org\.opengroup\.arm/
199                 end
200
201     ########################## ARM NEON ################################
202
203     define_platform 'arm_neon' do
204       assembler_keywords '\bvld1\.\d\d\b', '\bvld1\.\d\d\b','\bvmov\b','\bvmov\.u8\b'
205       make_keywords '\bneon\b','\bNEON\b'
206     end
207
208                 ############################ ATOM ##################################
209                 # Atom is hard to detect, since it implements x86 instruction set
210
211                 define_platform 'sse3_atom_flag' do
212                         make_keywords 'SSE3_ATOM'
213                 end
214
215                 define_platform 'xL_flag' do
216                         make_keywords '\bxL\b', '\/QxL\b'
217                 end
218
219                 define_platform 'atom' do
220                         gestalt(:platform, 'sse3_atom_flag')
221                         gestalt(:platform, 'xL_flag')
222                 end
223
224                 ########################## COMPILER ################################
225                 define_platform 'intel_compiler' do
226                         make_keywords '\bicc\b'
227                 end
228
229                 define_platform 'gcc' do
230                         make_keywords '\bgcc\b'
231                 end
232
233     ########################### MOBLIN #################################
234
235                 define_platform 'clutter' do
236                         c_keywords "ClutterActor", '\bclutter_actor_', "ClutterStage", "ClutterBehavior", "clutter_main"
237                         csharp_keywords "ClutterActor", '\bclutter_actor_', "ClutterStage", "ClutterBehavior", "clutter_main"
238                         perl_keywords "Clutter::Behavior", "Clutter::Actor", "Clutter::Stage"
239                         java_keywords "ClutterActor", "ClutterStage", "ClutterShader"
240                         ruby_keywords "Clutter::Actor", "Clutter::Stage", "Clutter::Shader", "Clutter::Cairo"
241                 end
242
243                 define_platform 'moblin' do
244                         c_keywords '\"org\.moblin\.', 'MOBLIN_NETBOOK_SYSTEM_TRAY_H', 'org_Moblin_', '\"org\.Moblin\.', "url=\"http://moblin.org\">http://moblin.org</ulink>"
245                         make_keywords "org\.moblin\.", "moblin-netbook"
246                         filenames 'moblin-netbook-system-tray.h$'
247                 end
248
249                 define_platform 'nbtk' do
250                         c_keywords '\bnbtk_[a-z]+', '\bNbtk[A-Z][a-z]+'
251                         java_keywords '\bnbtk_[a-z]+', '\bNbtk[A-Z][a-z]+'
252                         ruby_keywords '\bnbtk_[a-z]+', '\bNbtk[A-Z][a-z]+'
253                         filenames 'nbtk\/nbtk.h'
254                 end
255
256                 define_platform 'moblin_all' do
257                         gestalt(:platform, 'clutter')
258                         gestalt(:platform, 'moblin')
259                         gestalt(:platform, 'nbtk')
260                 end
261
262     ########################### ANDROID #################################
263
264                 define_platform 'android' do
265                         java_import /\bandroid\./
266                 end
267
268     ############################ iPhone #################################
269
270                 define_platform 'iPhone' do
271                         objective_c_keywords '\bUIApplicationMain', '\bUIWindow', '\bUIView', '\bUIResponder'
272                 end
273
274     ############################ Maemo #################################
275
276                 define_platform 'hildon' do
277                         c_keywords '\bHildonFile', '\bhildon_file_', '\bHildonProgram', '\bHildonWindow', '\bhildon_window'
278                         c_headers 'hildon/hildon.h'
279                         _and do
280                                 python_keywords '\bimport hildon'
281                                 python_keywords '\bimport gtk'
282                         end
283                 end
284                 define_platform 'maemo' do
285                         gestalt(:platform, 'hildon')
286                 end
287
288                 define_platform 'MID_combined' do
289                         gestalt(:platform, 'clutter')
290                         gestalt(:platform, 'nbtk')
291                         gestalt(:platform, 'moblin')
292                         gestalt(:platform, 'maemo')
293                         gestalt(:platform, 'android')
294                         gestalt(:platform, 'iPhone')
295                 end
296
297
298     ############################ Windows CE ############################
299                 define_platform 'windows_ce_incomplete' do
300                         csharp_keywords 'Microsoft\.WindowsCE', 'Microsoft\.WindowsMobile'
301                         vb_keywords 'Microsoft\.WindowsCE', 'Microsoft\.WindowsMobile'
302                 end
303
304                 ######################### Native Code ##############################
305                 define_platform 'native_code' do
306                         language :c, :min_percent => 5
307                         language :cpp, :min_percent => 5
308                         language :cncpp, :min_percent => 5
309                         language :assembly, :min_percent => 5
310                         language :d, :min_percent => 5
311                         language :fortran, :min_percent => 5
312                         language :haskell, :min_percent => 5
313                         language :cobol, :min_percent => 5
314                 end
315         end
316 end