5 ############################# Platforms #############################
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. #
11 # What guides what we add here is mostly for internal Ohloh #
14 #####################################################################
16 define_platform 'POSIX' do
18 c_headers 'pthread.h', 'xstrtol.h', 'xreadlink.h', 'fatal-signal.h', 'diacrit.h', 'syslog.h', 'sys/stat.h'
20 # autoconf means m4 (unix macro processor)
24 define_platform 'Win32' do
26 c_keywords 'WM_PAINT', 'ReleaseDC', 'WndProc', :min => 2
29 define_platform 'WPF' do
33 define_platform 'VisualBasic' do
34 language :visualbasic, :min_percent => 5
37 define_platform 'Ruby' do
38 language :ruby, :min_percent => 15
41 define_platform 'Rails' do
43 gestalt(:platform, 'Ruby')
44 ruby_keywords("RAILS_ROOT")
48 define_platform 'Java' do
49 language :java, :min_percent => 15
52 define_platform 'Javascript' do
53 language :javascript, :min_percent => 20
56 define_platform 'JQuery' do
57 filenames 'jquery-\d.\d.\d.min.js'
60 define_platform 'XWindows' do
61 c_headers 'Xlib.h', 'X11\/xpm.h', 'X11/Xlib.h'
64 define_platform 'Mac' do
66 c_keywords 'AppleEvent', 'AEBuildAppleEvent'
68 # plist is a mac thing, right?
72 define_platform 'PHP' do
73 language :php, :min_percent => 15
76 define_platform 'WxWidgets' do
77 c_headers 'wx/window.h'
80 define_platform 'ZendFramework' do
82 gestalt(:platform, 'PHP')
83 php_keywords('Zend_Controller_Action')
87 define_platform 'Symfony' do
89 gestalt(:platform, 'PHP')
90 php_keywords('sfCore', 'sfConfig')
94 define_platform 'Pear' do
96 gestalt(:platform, 'PHP')
98 filenames('\bpackage\.xml(\.tpl)?$')
99 xml_keywords('pear\.php\.net/dtd/package\-2\.0')
104 define_platform 'Moodle' do
106 gestalt(:platform, 'PHP')
107 php_keywords("moodle")
111 define_platform 'SQL' do
115 define_platform 'MySQL' do
116 php_keywords('mysql_connect')
119 define_platform 'PostgreSQL' do
120 php_keywords('pg_connect')
123 define_platform 'Python' do
124 language :python, :min_percent => 15
127 define_platform 'Perl' do
128 language :perl, :min_percent => 20
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')
139 define_platform 'CakePHP' do
141 gestalt(:platform, 'PHP')
142 php_keywords('CAKE_CORE_INCLUDE_PATH')
146 define_platform 'KDE' do
147 c_headers 'KDEInit.h', 'kdeversion.h'
150 define_platform 'GTK' do
151 c_keywords 'gtk_init', 'gtk_main', 'gtk_window_new', 'GtkWidget'
154 define_platform 'Drupal' do
156 gestalt(:platform, 'PHP')
158 php_keywords('drupal_set_message')
159 php_keywords('drupal_render')
160 php_keywords('Drupal', :min => 3)
165 define_platform 'MSDos' do
166 c_keywords '__MSDOS__', 'MSDOS', :min => 2
169 define_platform 'EclipsePlatform' do
170 java_import /org\.eclipse\./
174 ############################### Tools ###############################
176 define_tool 'VisualStudio' do
177 filenames '\.(sln|vcproj|vsproj|csproj|vbproj|vbp)$'
180 define_tool 'Eclipse' do
181 filenames '\.(project|classpath)$'
184 define_tool 'NetBeans' do
185 filenames '\bnbplatform\b'
189 ############################ ARM ###################################
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/
201 ########################## ARM NEON ################################
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'
208 ############################ ATOM ##################################
209 # Atom is hard to detect, since it implements x86 instruction set
211 define_platform 'sse3_atom_flag' do
212 make_keywords 'SSE3_ATOM'
215 define_platform 'xL_flag' do
216 make_keywords '\bxL\b', '\/QxL\b'
219 define_platform 'atom' do
220 gestalt(:platform, 'sse3_atom_flag')
221 gestalt(:platform, 'xL_flag')
224 ########################## COMPILER ################################
225 define_platform 'intel_compiler' do
226 make_keywords '\bicc\b'
229 define_platform 'gcc' do
230 make_keywords '\bgcc\b'
233 ########################### MOBLIN #################################
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"
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$'
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'
256 define_platform 'moblin_all' do
257 gestalt(:platform, 'clutter')
258 gestalt(:platform, 'moblin')
259 gestalt(:platform, 'nbtk')
262 ########################### ANDROID #################################
264 define_platform 'android' do
265 java_import /\bandroid\./
268 ############################ iPhone #################################
270 define_platform 'iPhone' do
271 objective_c_keywords '\bUIApplicationMain', '\bUIWindow', '\bUIView', '\bUIResponder'
274 ############################ Maemo #################################
276 define_platform 'hildon' do
277 c_keywords '\bHildonFile', '\bhildon_file_', '\bHildonProgram', '\bHildonWindow', '\bhildon_window'
278 c_headers 'hildon/hildon.h'
280 python_keywords '\bimport hildon'
281 python_keywords '\bimport gtk'
284 define_platform 'maemo' do
285 gestalt(:platform, 'hildon')
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')
298 ############################ Windows CE ############################
299 define_platform 'windows_ce_incomplete' do
300 csharp_keywords 'Microsoft\.WindowsCE', 'Microsoft\.WindowsMobile'
301 vb_keywords 'Microsoft\.WindowsCE', 'Microsoft\.WindowsMobile'
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