@@ -450,8 +450,38 @@ def make(name, target=None, **makevars):
450
450
execute ('make' , * args )
451
451
452
452
453
+ def require_header (header , lang , msg = '' , symbol = False , value = False ):
454
+ debug ('require_header "%s"' , header )
455
+
456
+ cmd = {'c' :'{cc}' , 'c++' :'{cxx}' }[lang ]
457
+ cmd = fill_in (cmd ).split () + ['-fsyntax-only' , '-x' , lang , '-' ]
458
+ proc = subprocess .Popen (cmd , stdin = subprocess .PIPE , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
459
+
460
+ stdin_line = '#include <' + header + '>'
461
+ if symbol :
462
+ if value :
463
+ stdin_line += """\n #if %s != %s
464
+ #error
465
+ #endif """ % (symbol , value )
466
+ else :
467
+ stdin_line += """\n #ifndef %s
468
+ #error
469
+ #endif """ % (symbol )
470
+
471
+ (result_stdout , result_stderr ) = proc .communicate (stdin_line )
472
+ proc .wait ()
473
+
474
+ cmd = ' ' .join (cmd )
475
+
476
+ if proc .returncode == 0 :
477
+ debug ('output from "%s":\n %s' , cmd , result_stdout )
478
+ else :
479
+ debug ('error output from "%s":\n %s' , cmd , result_stderr )
480
+ panic ('require_header failed: %s' , msg )
481
+
482
+
453
483
__all__ = ['setvar' , 'panic' , 'cmpver' , 'find_executable' , 'chmod' , 'execute' ,
454
484
'rmtree' , 'mkdir' , 'copy' , 'copytree' , 'unarc' , 'fetch' , 'cwd' ,
455
485
'symlink' , 'remove' , 'move' , 'find' , 'textfile' , 'env' , 'path' ,
456
486
'add_site_dir' , 'python_setup' , 'recipe' , 'unpack' , 'patch' ,
457
- 'configure' , 'make' ]
487
+ 'configure' , 'make' , 'require_header' ]
0 commit comments