X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=make%2Fconfigure.pm;h=bccef2147ce7a78f1329bd35db5f21ed5c07937a;hb=77730fd5f09f8fc193205654c8bba84d34365670;hp=dbbbf650978ec6af386201428b34594c221adafd;hpb=7851faac62d7a83c94cd5d37e0109b5d0a152bf9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/make/configure.pm b/make/configure.pm index dbbbf6509..bccef2147 100644 --- a/make/configure.pm +++ b/make/configure.pm @@ -34,12 +34,13 @@ use warnings FATAL => qw(all); use Cwd qw(getcwd); use Exporter qw(import); use File::Basename qw(basename dirname); -use File::Spec::Functions qw(catfile); +use File::Spec::Functions qw(catdir catfile); use make::common; use make::console; -use constant CONFIGURE_DIRECTORY => '.configure'; +use constant CONFIGURE_ROOT => dirname dirname __FILE__; +use constant CONFIGURE_DIRECTORY => catdir(CONFIGURE_ROOT, '.configure'); use constant CONFIGURE_CACHE_FILE => catfile(CONFIGURE_DIRECTORY, 'cache.cfg'); use constant CONFIGURE_CACHE_VERSION => '1'; use constant CONFIGURE_ERROR_PIPE => $ENV{INSPIRCD_VERBOSE} ? '' : '1>/dev/null 2>/dev/null'; @@ -90,7 +91,6 @@ sub __get_template_settings($$$) { $settings{CONFIGURE_DIRECTORY} = CONFIGURE_DIRECTORY; $settings{CONFIGURE_CACHE_FILE} = CONFIGURE_CACHE_FILE; $settings{SYSTEM_NAME} = lc $^O; - chomp($settings{SYSTEM_NAME_VERSION} = `uname -sr 2>/dev/null`); return %settings; } @@ -139,6 +139,9 @@ PATH OPTIONS --module-dir=[dir] The location where the loadable modules are stored. [$PWD/run/modules] + --script-dir=[dir] The location where the scripts, such as the + init scripts, are stored. + [$PWD/run] EXTRA MODULE OPTIONS @@ -199,7 +202,7 @@ sub test_file($$;$) { my ($compiler, $file, $args) = @_; my $status = 0; $args //= ''; - $status ||= system "$compiler -o __test_$file make/test/$file $args ${\CONFIGURE_ERROR_PIPE}"; + $status ||= system "$compiler -o __test_$file ${\CONFIGURE_ROOT}/make/test/$file $args ${\CONFIGURE_ERROR_PIPE}"; $status ||= system "./__test_$file ${\CONFIGURE_ERROR_PIPE}"; unlink "./__test_$file"; return !$status; @@ -228,7 +231,7 @@ sub write_configure_cache(%) { sub get_compiler_info($) { my $binary = shift; my %info = (NAME => 'Unknown', VERSION => '0.0'); - return %info if system "$binary -o __compiler_info make/test/compiler_info.cpp ${\CONFIGURE_ERROR_PIPE}"; + return %info if system "$binary -o __compiler_info ${\CONFIGURE_ROOT}/make/test/compiler_info.cpp ${\CONFIGURE_ERROR_PIPE}"; open(my $fh, '-|', './__compiler_info 2>/dev/null'); while (my $line = <$fh>) { $info{$1} = $2 if $line =~ /^([A-Z]+)\s(.+)$/; @@ -258,7 +261,7 @@ sub parse_templates($$$) { foreach () { print_format "Parsing <|GREEN $_|> ...\n"; open(my $fh, $_) or print_error "unable to read $_: $!"; - my (@lines, $mode, @platforms, %targets); + my (@lines, $mode, @platforms, @targets); # First pass: parse template variables and directives. while (my $line = <$fh>) { @@ -288,11 +291,7 @@ sub parse_templates($$$) { } elsif ($1 eq 'platform') { push @platforms, $2; } elsif ($1 eq 'target') { - if ($2 =~ /(\w+)\s(.+)/) { - $targets{$1} = $2; - } else { - $targets{DEFAULT} = $2; - } + push @targets, $2 } else { print_warning "unknown template command '$1' in $_!"; push @lines, $line; @@ -307,86 +306,12 @@ sub parse_templates($$$) { if ($#platforms < 0 || grep { $_ eq $^O } @platforms) { # Add a default target if the template has not defined one. - unless (scalar keys %targets) { - $targets{DEFAULT} = catfile(CONFIGURE_DIRECTORY, basename $_); + unless (@targets) { + push @targets, catfile(CONFIGURE_DIRECTORY, basename $_); } - # Second pass: parse makefile junk and write files. - while (my ($name, $target) = each %targets) { - - # TODO: when buildtool is done this mess can be removed completely. - my @final_lines; - foreach my $line (@lines) { - - # Are we parsing a makefile and does this line match a statement? - if ($name =~ /(?:BSD|GNU)_MAKE/ && $line =~ /^\s*\@(\w+)(?:\s+(.+))?$/) { - my @tokens = split /\s/, $2 if defined $2; - if ($1 eq 'DO_EXPORT' && defined $2) { - if ($name eq 'BSD_MAKE') { - foreach my $variable (@tokens) { - push @final_lines, "MAKEENV += $variable='\${$variable}'"; - } - } elsif ($name eq 'GNU_MAKE') { - push @final_lines, "export $2"; - } - } elsif ($1 eq 'ELSE') { - if ($name eq 'BSD_MAKE') { - push @final_lines, ".else"; - } elsif ($name eq 'GNU_MAKE') { - push @final_lines, "else"; - } - } elsif ($1 eq 'ENDIF') { - if ($name eq 'BSD_MAKE') { - push @final_lines, ".endif"; - } elsif ($name eq 'GNU_MAKE') { - push @final_lines, "endif"; - } - } elsif ($1 eq 'ELSIFEQ' && defined $2) { - if ($name eq 'BSD_MAKE') { - push @final_lines, ".elif $tokens[0] == $tokens[1]"; - } elsif ($name eq 'GNU_MAKE') { - push @final_lines, "else ifeq ($tokens[0], $tokens[1])"; - } - } elsif ($1 eq 'IFDEF' && defined $2) { - if ($name eq 'BSD_MAKE') { - push @final_lines, ".if defined($2)"; - } elsif ($name eq 'GNU_MAKE') { - push @final_lines, "ifdef $2"; - } - } elsif ($1 eq 'IFEQ' && defined $2) { - if ($name eq 'BSD_MAKE') { - push @final_lines, ".if $tokens[0] == $tokens[1]"; - } elsif ($name eq 'GNU_MAKE') { - push @final_lines, "ifeq ($tokens[0],$tokens[1])"; - } - } elsif ($1 eq 'IFNEQ' && defined $2) { - if ($name eq 'BSD_MAKE') { - push @final_lines, ".if $tokens[0] != $tokens[1]"; - } elsif ($name eq 'GNU_MAKE') { - push @final_lines, "ifneq ($tokens[0],$tokens[1])"; - } - } elsif ($1 eq 'IFNDEF' && defined $2) { - if ($name eq 'BSD_MAKE') { - push @final_lines, ".if !defined($2)"; - } elsif ($name eq 'GNU_MAKE') { - push @final_lines, "ifndef $2"; - } - } elsif ($1 eq 'TARGET' && defined $2) { - if ($tokens[0] eq $name) { - push @final_lines, substr($2, length($tokens[0]) + 1); - } - } elsif ($1 !~ /[A-Z]/) { - # HACK: silently ignore if lower case as these are probably make commands. - push @final_lines, $line; - } else { - print_warning "unknown template command '$1' in $_!"; - push @final_lines, $line; - } - next; - } - - push @final_lines, $line; - } + # Write the templated files to disk. + for my $target (@targets) { # Create the directory if it doesn't already exist. my $directory = dirname $target; @@ -398,7 +323,7 @@ sub parse_templates($$$) { # Write the template file. print_format "Writing <|GREEN $target|> ...\n"; open(my $fh, '>', $target) or print_error "unable to write $target: $!"; - foreach (@final_lines) { + foreach (@lines) { say $fh $_; } close $fh;