# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
package ModPerl::Config;

use strict;

use Apache2::Build ();
use Apache::TestConfig ();
use File::Spec ();

use constant WIN32 => Apache2::Build::WIN32;

sub as_string {
    my $build = Apache2::Build->build_config;

    my $cfg = '';

    $cfg .= "*** mod_perl version $mod_perl::VERSION\n\n";;

    my $file = File::Spec->rel2abs($INC{'Apache2/BuildConfig.pm'});
    $cfg .= "*** using $file\n\n";

    # the widest key length
    my $max_len = 0;
    for (map {length} grep /^MP_/, keys %$build) {
        $max_len = $_ if $_ > $max_len;
    }

    # mod_perl opts
    $cfg .= "*** Makefile.PL options:\n";
    $cfg .= join '',
        map {sprintf "  %-${max_len}s => %s\n", $_, $build->{$_}}
            grep /^MP_/, sort keys %$build;

    my $command = '';

    # httpd opts
    my $test_config = Apache::TestConfig->new({thaw=>1});

    if (my $httpd = $test_config->{vars}->{httpd}) {
        $command = "$httpd -V";
        $cfg .= "\n\n*** $command\n";
        $cfg .= qx{$command};

        $cfg .= Apache::TestConfig::ldd_as_string($httpd);
    }
    else {
        $cfg .= "\n\n*** The httpd binary was not found\n";
    }

    # apr
    $cfg .= "\n\n*** (apr|apu)-config linking info\n\n";
    my @apru_link_flags = $build->apru_link_flags;
    if (@apru_link_flags) {
        my $libs = join "\n", @apru_link_flags;
        $cfg .= "$libs\n\n";
    }
    else {
        $cfg .= "(apr|apu)-config scripts were not found\n\n";
    }

    # perl opts
    my $perl = $build->{MODPERL_PERLPATH};
    $command = "$perl -V";
    $cfg .= "\n\n*** $command\n";
    $cfg .= qx{$command};

    return $cfg;

}

1;
__END__

=pod

=head1 NAME

ModPerl::Config - Functions to retrieve mod_perl specific env information.

=head1 DESCRIPTION

=cut