use strict ; use warnings; use Cwd ; my %expect = qw( CC NOT_PATH DBXML_LIB_NAME NAME DBXML_LIB_PATH LIB DBXML_INC_PATH INC BDB_LIB_NAME NAME BDB_LIB_PATH LIB BDB_INC_PATH INC XERCES_LIB_NAME NAME XERCES_LIB_PATH LIB XQILLA_LIB_NAME NAME XQILLA_LIB_PATH LIB EXTRA_LIBS OPT EXTRA_DEFINE OPT EXTRA_CCFLAGS OPT ); my %parsed = (); my @LIBS = (); my @INCS = (); my @NAMES = (); sub parseConfig { my $prefix = shift ; my $cwd = getcwd; my $config_file = "config" ; if (@ARGV == 2 && $ARGV[0] eq '-config' ) { $config_file = $ARGV[1] ; } $config_file = "$prefix/$config_file" if $config_file !~ m#^/#; open F, "<$config_file" || die "Cannot open $config_file: $!\n" ; while() { s/^\s+//; s/\s+$//; next if /^$/ || /^#/; my ($name, $value) = split (/\s*=\s*/, $_, 2) or die "Error parsing $config_file, line $.\n"; die "Unknown value '$name' in $config_file line $.\n" if ! defined $expect{$name}; if ($expect{$name} eq 'LIB' || $expect{$name} eq 'INC') { $value = "$cwd/$prefix/$value" if $value !~ m#^/# ; die "$config_file, Line $.: path '$value' does not exist\n" if ! -d $value ; $parsed{$name} = makeAbsolute($value); if ($expect{$name} eq 'LIB') { push @LIBS, $parsed{$name} } else { push @INCS, $parsed{$name} } } else { $parsed{$name} = $value; } } close F; my %got = (); $parsed{LIBS} = join " ", map { "-L$_" } grep { !$got{$_}++ } @LIBS ; %got = (); $parsed{INCS} = join " ", map { "-I$_" } grep { !$got{$_}++ } @INCS ; return %parsed ; } sub makeAbsolute { my $relative = shift ; my $absolute = $relative; if (-d $relative) { my $here = getcwd ; chdir $relative ; $absolute = getcwd ; chdir $here ; } return $absolute ; } 1;