Fix regeneration of multi-file dependencies
[hcoop/domtool2.git] / src / plugins / apache.sml
index 300ffa4..2d384a9 100644 (file)
@@ -145,7 +145,10 @@ val defaults = [("WebPlaces",
                 (fn () => (EString (Domain.getUser () ^ "@" ^ Config.defaultDomain), dl))),
                ("SuExec",
                 (TBase "suexec_flag", dl),
-                (fn () => (EVar "true", dl)))]
+                (fn () => (EVar "true", dl))),
+               ("PhpVersion",
+                (TBase "php_version", dl),
+                (fn () => (EVar "php4", dl)))]
 
 val () = app Defaults.registerDefault defaults
 
@@ -440,6 +443,10 @@ fun vhostPost () = (!post ();
                    write "</VirtualHost>\n";
                    app (TextIO.closeOut o #2) (!vhostFiles))
 
+val php_version = fn (EVar "php4", _) => SOME 4
+                  | (EVar "php5", _) => SOME 5
+                  | _ => NONE
+
 fun vhostBody (env, makeFullHost) =
     let
        val places = Env.env (Env.list webPlace) (env, "WebPlaces")
@@ -450,6 +457,7 @@ fun vhostBody (env, makeFullHost) =
        val docroot = Env.env Env.string (env, "DocumentRoot")
        val sadmin = Env.env Env.string (env, "ServerAdmin")
        val suexec = Env.env Env.bool (env, "SuExec")
+       val php = Env.env php_version (env, "PhpVersion")
 
        val fullHost = makeFullHost (Domain.currentDomain ())
        val vhostId = fullHost ^ (if Option.isSome ssl then ".ssl" else "")
@@ -515,6 +523,13 @@ fun vhostBody (env, makeFullHost) =
                                  TextIO.output (file, user);
                                  TextIO.output (file, "/DAVLock");
 
+                                 if php <> Config.Apache.defaultPhpVersion then
+                                     (TextIO.output (file, "\n\tAddHandler x-httpd-php");
+                                      TextIO.output (file, Int.toString php);
+                                      TextIO.output (file, " .php .phtml"))
+                                 else
+                                     ();
+
                                  (ld, file)
                              end)
                          places;
@@ -582,9 +597,9 @@ val () = Env.action_three "localProxyRewrite"
         ("from", Env.string, "to", Env.string, "port", Env.int)
         (fn (from, to, port) =>
             (checkRewrite ();
-             write "\tRewriteRule\t";
+             write "\tRewriteRule\t\"";
              write from;
-             write "\thttp://localhost:";
+             write "\"\thttp://localhost:";
              write (Int.toString port);
              write "/";
              write to;
@@ -612,10 +627,11 @@ val () = Env.action_three "rewriteRule"
         ("from", Env.string, "to", Env.string, "flags", Env.list flag)
         (fn (from, to, flags) =>
             (checkRewrite ();
-             write "\tRewriteRule\t";
+             write "\tRewriteRule\t\"";
              write from;
-             write "\t";
+             write "\"\t\"";
              write to;
+             write "\"";
              case flags of
                  [] => ()
                | flag::rest => (write " [";
@@ -629,10 +645,11 @@ val () = Env.action_three "rewriteCond"
         ("test", Env.string, "pattern", Env.string, "flags", Env.list cond_flag)
         (fn (from, to, flags) =>
             (checkRewrite ();
-             write "\tRewriteCond\t";
+             write "\tRewriteCond\t\"";
              write from;
-             write "\t";
+             write "\"\t\"";
              write to;
+             write "\"";
              case flags of
                  [] => ()
                | flag::rest => (write " [";
@@ -646,9 +663,9 @@ val () = Env.action_one "rewriteBase"
         ("prefix", Env.string)
         (fn prefix =>
             (checkRewrite ();
-             write "\tRewriteBase\t";
+             write "\tRewriteBase\t\"";
              write prefix;
-             write "\n"))
+             write "\"\n"))
 
 val () = Env.action_one "rewriteLogLevel"
         ("level", Env.int)
@@ -914,6 +931,17 @@ val () = Env.action_two "addDescription"
                       app (fn pat => (write " "; write pat)) pats;
                       write "\n"))
 
+val () = Env.action_two "addIcon"
+        ("icon", Env.string, "patterns", Env.list Env.string)
+        (fn (icon, pats) =>
+            case pats of
+                [] => ()
+              | _ => (write "\tAddIcon \"";
+                      write icon;
+                      write "\"";
+                      app (fn pat => (write " "; write pat)) pats;
+                      write "\n"))
+
 val () = Env.action_one "indexOptions"
         ("options", Env.list autoindex_option)
         (fn opts =>
@@ -927,6 +955,15 @@ val () = Env.action_one "indexOptions"
                                               (write "="; write arg)) arg)) opts;
                       write "\n"))
 
+val () = Env.action_one "indexIgnore"
+        ("patterns", Env.list Env.string)
+        (fn pats =>
+            case pats of
+                [] => ()
+              | _ => (write "\tIndexIgnore";
+                      app (fn pat => (write " "; write pat)) pats;
+                      write "\n"))
+
 val () = Env.action_one "set_indexOptions"
         ("options", Env.list autoindex_option)
         (fn opts =>
@@ -977,7 +1014,35 @@ val () = Env.action_one "diskCache"
         (fn path => (write "\tCacheEnable disk \"";
                      write path;
                      write "\"\n"))
-        
+
+val () = Env.action_one "phpVersion"
+        ("version", php_version)
+        (fn version => (write "\tAddHandler x-httpd-php";
+                        write (Int.toString version);
+                        write " .php .phtml\n"))
+
+val () = Env.action_two "addType"
+        ("mime type", Env.string, "extension", Env.string)
+        (fn (mt, ext) => (write "\tAddType ";
+                          write mt;
+                          write " ";
+                          write ext;
+                          write "\n"))
+
+val filter = fn (EVar "includes", _) => SOME "INCLUDES"
+             | (EVar "deflate", _) => SOME "DEFLATE"
+             | _ => NONE
+
+val () = Env.action_two "addOutputFilter"
+        ("filters", Env.list filter, "extensions", Env.list Env.string)
+        (fn (f :: fs, exts as (_ :: _)) =>
+            (write "\tAddOutputFilter ";
+             write f;
+             app (fn f => (write ";"; write f)) fs;
+             app (fn ext => (write " "; write ext)) exts;
+             write "\n")
+          | _ => ())
+
 val () = Domain.registerResetLocal (fn () =>
                                       ignore (OS.Process.system (Config.rm ^ " -rf /var/domtool/vhosts/*")))
 
@@ -987,4 +1052,7 @@ val () = Domain.registerDescriber (Domain.considerAll
                                    Domain.Extension {extension = "vhost_ssl",
                                                      heading = fn host => "SSL web vhost " ^ host ^ ":"}])
 
+val () = Env.action_none "testNoHtaccess"
+        (fn path => write "\tAllowOverride None\n")
+
 end