#!/home/ben/software/install/bin/perl use warnings; use strict; my $include = 'limits.h'; my %defines; get_defines ($include, \%defines); print_defines (\%defines); exit; sub get_defines { my ($include, $defines) = @_; my $file = "/usr/include/$include"; open my $in, "<", $file or die $!; while (<$in>) { if (/^#\s*include\s*<(.*)>/) { my $subinclude = $1; get_defines ($subinclude, $defines); next; } if (/^#\s*define\s+(\w*)\s+(.*)/) { my $macro = $1; my $value = $2; $value =~ s!\s+|/\*.*?\*/|\(|\)!!g; while ($defines->{$value}) { $value = $defines->{$value}; } $defines->{$macro} = $value; next; } } close $in or die $!; } sub print_defines { my ($defines) = @_; for my $k (sort keys %$defines) { if ($k !~ /^_/ && $k !~ /^[a-z]+$/) { print "$k = $defines->{$k}\n"; } } }