From 72d2d9b204568b3683c29dea0ae794d3a524f2ee Mon Sep 17 00:00:00 2001 From: hallgren Date: Fri, 26 Nov 2010 14:30:51 +0000 Subject: Split pgf-server into pgf-fcgi and pgf-http. The dependency on the fastcgi package made pgf-server difficult to compile, so it is now split into - pgf-fgci (main module in pgf-fcgi.hs), which is built only if fastcgi is already installed or if you turn on the fastcgi flag (e.g. by doing 'cabal install -f fastcgi'). - pgf-http (main module in pgf-http.hs) which is always built (and hopefully has no problematic dependencies.) The modules FastCGIUtils and PGFService no longer depend on fastcgi. --- src/server/pgf-http.hs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/server/pgf-http.hs (limited to 'src/server/pgf-http.hs') diff --git a/src/server/pgf-http.hs b/src/server/pgf-http.hs new file mode 100644 index 000000000..ff356c6e7 --- /dev/null +++ b/src/server/pgf-http.hs @@ -0,0 +1,38 @@ + +import Network.CGI(requestMethod,getVarWithDefault,logCGI,handleErrors,liftIO) +import System.Environment(getArgs) +import System.Directory(getDirectoryContents) +import System.FilePath(takeExtension,takeFileName,takeDirectory) + +import RunHTTP(runHTTP) +import ServeStaticFile(serveStaticFile) +import PGFService(cgiMain',getPath,stderrToFile,logFile,newPGFCache) +import FastCGIUtils(outputJSONP,handleCGIErrors) + +main :: IO () +main = do stderrToFile logFile + cache <- newPGFCache + args <- getArgs + port <- case args of + [] -> return 41296 + [port] -> readIO port + httpMain cache port + +httpMain cache port = runHTTP port (do log ; serve =<< getPath) + where + log = do method <- requestMethod + uri <- getVarWithDefault "REQUEST_URI" "-" + logCGI $ method++" "++uri + + serve path = + handleErrors . handleCGIErrors $ + if takeExtension path==".pgf" + then cgiMain' cache path + else if takeFileName path=="grammars.cgi" + then grammarList (takeDirectory path) + else serveStaticFile path + + grammarList dir = + do paths <- liftIO $ getDirectoryContents dir + let pgfs = [path|path<-paths, takeExtension path==".pgf"] + outputJSONP pgfs -- cgit v1.2.3