#! /bin/sh /usr/share/dpatch/dpatch-run
## 076_apxs2_a2enmo.dpatch by Stefan Fritsch <sf@debian.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Make apxs2 use a2enmod and /etc/apache2/mods-available

@DPATCH@
diff -urNad trunk~/support/apxs.in trunk/support/apxs.in
--- trunk~/support/apxs.in	2010-01-02 21:52:57.828866228 +0100
+++ trunk/support/apxs.in	2010-01-02 21:55:48.375597120 +0100
@@ -521,7 +521,7 @@
 	# $dir =~ s|^$CFG_PREFIX/?||;
         $dir =~ s|(.)$|$1/|;
 	$t =~ s|\.la$|.so|;
-        push(@lmd, sprintf("LoadModule %-18s %s", "${name}_module", "$dir$t"));
+        push(@lmd, [ $name, sprintf("LoadModule %-18s %s", "${name}_module", "$dir$t") ] );
     }
 
     #   execute the commands
@@ -529,108 +529,35 @@
 
     #   activate module via LoadModule/AddModule directive
     if ($opt_a or $opt_A) {
-        if (not -f "$CFG_SYSCONFDIR/httpd.conf") {
-            error("Config file $CFG_SYSCONFDIR/httpd.conf not found");
+        if (not -d "$CFG_SYSCONFDIR/mods-available") {
+            error("Config file $CFG_SYSCONFDIR/mods-available not found");
             exit(1);
         }
 
-        open(FP, "<$CFG_SYSCONFDIR/httpd.conf") || die;
-        my $content = join('', <FP>);
-        close(FP);
-
-        if ($content !~ m|\n#?\s*LoadModule\s+|) {
-            error("Activation failed for custom $CFG_SYSCONFDIR/httpd.conf file.");
-            error("At least one `LoadModule' directive already has to exist.");
-            exit(1);
-        }
-
-        my $lmd;
-        my $c = '';
-        $c = '#' if ($opt_A);
-        foreach $lmd (@lmd) {
-            my $what = $opt_A ? "preparing" : "activating";
-            my $lmd_re = $lmd;
-            $lmd_re =~ s/\s+/\\s+/g;
-
-            if ($content !~ m|\n#?\s*$lmd_re|) {
-                # check for open <containers>, so that the new LoadModule
-                # directive always appears *outside* of an <container>.
-
-                my $before = ($content =~ m|^(.*\n)#?\s*LoadModule\s+[^\n]+\n|s)[0];
-
-                # the '()=' trick forces list context and the scalar
-                # assignment counts the number of list members (aka number
-                # of matches) then
-                my $cntopen = () = ($before =~ m|^\s*<[^/].*$|mg);
-                my $cntclose = () = ($before =~ m|^\s*</.*$|mg);
-
-                if ($cntopen == $cntclose) {
-                    # fine. Last LoadModule is contextless.
-                    $content =~ s|^(.*\n#?\s*LoadModule\s+[^\n]+\n)|$1$c$lmd\n|s;
-                }
-                elsif ($cntopen < $cntclose) {
-                    error('Configuration file is not valid. There are sections'
-                          . ' closed before opened.');
-                    exit(1);
-                }
-                else {
-                    # put our cmd after the section containing the last
-                    # LoadModule.
-                    my $found =
-                    $content =~ s!\A (               # string and capture start
-                                  (?:(?:
-                                    ^\s*             # start of conf line with a
-                                    (?:[^<]|<[^/])   # directive which does not
-                                                     # start with '</'
-
-                                    .*(?:$)\n        # rest of the line.
-                                                     # the '$' is in parentheses
-                                                     # to avoid misinterpreting
-                                                     # the string "$\" as
-                                                     # perl variable.
-
-                                    )*               # catch as much as possible
-                                                     # of such lines. (including
-                                                     # zero)
-
-                                    ^\s*</.*(?:$)\n? # after the above, we
-                                                     # expect a config line with
-                                                     # a closing container (</)
-
-                                  ) {$cntopen}       # the whole pattern (bunch
-                                                     # of lines that end up with
-                                                     # a closing directive) must
-                                                     # be repeated $cntopen
-                                                     # times. That's it.
-                                                     # Simple, eh? ;-)
-
-                                  )                  # capture end
-                                 !$1$c$lmd\n!mx;
-
-                    unless ($found) {
-                        error('Configuration file is not valid. There are '
-                              . 'sections opened and not closed.');
-                        exit(1);
-                    }
+        my $entry;
+        foreach $entry (@lmd) {
+            my ($name, $lmd) = @{$entry};
+            my $filename = "$CFG_SYSCONFDIR/mods-available/$name.load";
+            if (-f $filename) {
+                my $cmd = "mv $filename $filename.bak~";
+                if (system($cmd) != 0) {
+                    die "'$cmd' failed\n";
                 }
-            } else {
-                # replace already existing LoadModule line
-                $content =~ s|^(.*\n)#?\s*$lmd_re[^\n]*\n|$1$c$lmd\n|s;
             }
-            $lmd =~ m|LoadModule\s+(.+?)_module.*|;
-            notice("[$what module `$1' in $CFG_SYSCONFDIR/httpd.conf]");
+
+            notice("[preparing module `$name' in $filename]");
+            open(FP, ">$filename") || die;
+            print FP "$lmd\n";
+            close(FP);
+
+            if ($opt_a) {
+                my $cmd = "a2enmod $name";
+                if (system($cmd) != 0) {
+                    die "'$cmd' failed\n";
+                }
+            }               
+
         }
-        if (@lmd) {
-            if (open(FP, ">$CFG_SYSCONFDIR/httpd.conf.new")) {
-                print FP $content;
-                close(FP);
-                system("cp $CFG_SYSCONFDIR/httpd.conf $CFG_SYSCONFDIR/httpd.conf.bak && " .
-                       "cp $CFG_SYSCONFDIR/httpd.conf.new $CFG_SYSCONFDIR/httpd.conf && " .
-                       "rm $CFG_SYSCONFDIR/httpd.conf.new");
-            } else {
-                notice("unable to open configuration file");
-            }
-	}
     }
 }
 
