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