From: Iustin Pop Date: Wed, 23 Mar 2011 15:06:50 +0000 (+0100) Subject: Another attempt at fixing htools build without curl X-Git-Tag: v2.5.0beta1~486 X-Git-Url: https://code.grnet.gr/git/ganeti-local/commitdiff_plain/c478f8377e8af9df319a016cced3ed1f70a31840 Another attempt at fixing htools build without curl OK, my previous small fix was not good. There is another issue: haddoc (the documentation generator) needs to pass the same compiler options (i.e. in our case, -DNO_CURL) to ghc. But in case of no curl, then it shouldn't scan at all the RAPI library, as that is not used in our builds. Clearly, this is not a nice thing. So this patch changes from including/excluding RAPI conditionally (in two places, the ExtLoader.hs module and in hscan.hs), to always include RAPI, and moves the curl/no curl login to RAPI itself, where it belongs. Together with passing --optghc to haddock, this makes the builds consistent both with and without RAPI. I also undo the removal of RAPI from QC.hs. Signed-off-by: Iustin Pop Reviewed-by: Michael Hanselmann --- diff --git a/Makefile.am b/Makefile.am index eb6de4f..cb750fa 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1046,6 +1046,10 @@ hs-apidoc: $(HS_BUILT_SRCS) ln -s ../hscolour.css $(APIDOC_HS_DIR)/Ganeti/HTools/hscolour.css set -e ; \ cd htools; \ + if [ "$(HTOOLS_NOCURL)" ]; \ + then OPTGHC="--optghc=$(HTOOLS_NOCURL)"; \ + else OPTGHC=""; \ + fi; \ RELSRCS="$(HS_LIB_SRCS:htools/%=%)"; \ for file in $$RELSRCS; do \ hfile=`echo $$file|sed 's/\\.hs$$//'`.html; \ @@ -1055,6 +1059,7 @@ hs-apidoc: $(HS_BUILT_SRCS) -t ganeti-htools -p haddock-prologue \ --source-module="%{MODULE/.//}.html" \ --source-entity="%{MODULE/.//}.html#%{NAME}" \ + $$OPTGHC \ $(filter-out Ganeti/HTools/ExtLoader.hs,$(HS_LIB_SRCS:htools/%=%)) .PHONY: TAGS diff --git a/htools/Ganeti/HTools/ExtLoader.hs b/htools/Ganeti/HTools/ExtLoader.hs index 0412c1b..9be8dc7 100644 --- a/htools/Ganeti/HTools/ExtLoader.hs +++ b/htools/Ganeti/HTools/ExtLoader.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - {-| External data loader This module holds the external data loading, and thus is the only one @@ -10,7 +8,7 @@ libraries implementing the low-level protocols. {- -Copyright (C) 2009, 2010 Google Inc. +Copyright (C) 2009, 2010, 2011 Google Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -43,9 +41,7 @@ import System import Text.Printf (printf, hPrintf) import qualified Ganeti.HTools.Luxi as Luxi -#ifndef NO_CURL import qualified Ganeti.HTools.Rapi as Rapi -#endif import qualified Ganeti.HTools.Simu as Simu import qualified Ganeti.HTools.Text as Text import Ganeti.HTools.Loader (mergeData, checkData, ClusterData(..) @@ -109,12 +105,7 @@ loadExternalData opts = do exitWith $ ExitFailure 1) input_data <- case () of - _ | setRapi -> -#ifdef NO_CURL - return $ Bad "RAPI/curl backend disabled at compile time" -#else - wrapIO $ Rapi.loadData mhost -#endif + _ | setRapi -> wrapIO $ Rapi.loadData mhost | setLuxi -> wrapIO $ Luxi.loadData $ fromJust lsock | setSim -> Simu.loadData simdata | setFile -> wrapIO $ Text.loadData $ fromJust tfile diff --git a/htools/Ganeti/HTools/QC.hs b/htools/Ganeti/HTools/QC.hs index 62b00c1..534a7b1 100644 --- a/htools/Ganeti/HTools/QC.hs +++ b/htools/Ganeti/HTools/QC.hs @@ -58,6 +58,7 @@ import qualified Ganeti.HTools.Luxi import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Group as Group import qualified Ganeti.HTools.PeerMap as PeerMap +import qualified Ganeti.HTools.Rapi import qualified Ganeti.HTools.Simu import qualified Ganeti.HTools.Text as Text import qualified Ganeti.HTools.Types as Types diff --git a/htools/Ganeti/HTools/Rapi.hs b/htools/Ganeti/HTools/Rapi.hs index 19aa817..1b0b9d2 100644 --- a/htools/Ganeti/HTools/Rapi.hs +++ b/htools/Ganeti/HTools/Rapi.hs @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -} -{-# LANGUAGE BangPatterns #-} +{-# LANGUAGE BangPatterns, CPP #-} module Ganeti.HTools.Rapi ( @@ -32,8 +32,10 @@ module Ganeti.HTools.Rapi ) where import Data.Maybe (fromMaybe) +#ifndef NO_CURL import Network.Curl import Network.Curl.Types () +#endif import Control.Monad import Text.JSON (JSObject, JSValue, fromJSObject, decodeStrict) import Text.JSON.Types (JSValue(..)) @@ -46,6 +48,14 @@ import qualified Ganeti.HTools.Group as Group import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Instance as Instance +-- | Read an URL via curl and return the body if successful. +getUrl :: (Monad m) => String -> IO (m String) + +#ifdef NO_CURL +getUrl _ = return $ fail "RAPI/curl backend disabled at compile time" + +#else + -- | The curl options we use curlOpts :: [CurlOption] curlOpts = [ CurlSSLVerifyPeer False @@ -54,14 +64,13 @@ curlOpts = [ CurlSSLVerifyPeer False , CurlConnectTimeout (fromIntegral connTimeout) ] --- | Read an URL via curl and return the body if successful. -getUrl :: (Monad m) => String -> IO (m String) getUrl url = do (code, !body) <- curlGetString url curlOpts return (case code of CurlOK -> return body _ -> fail $ printf "Curl error for '%s', error %s" url (show code)) +#endif -- | Append the default port if not passed in. formatHost :: String -> String diff --git a/htools/hscan.hs b/htools/hscan.hs index 6960133..07ab657 100644 --- a/htools/hscan.hs +++ b/htools/hscan.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE CPP #-} - {-| Scan clusters via RAPI or LUXI and write state data files. -} @@ -40,9 +38,7 @@ import qualified Ganeti.HTools.Container as Container import qualified Ganeti.HTools.Cluster as Cluster import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Instance as Instance -#ifndef NO_CURL import qualified Ganeti.HTools.Rapi as Rapi -#endif import qualified Ganeti.HTools.Luxi as Luxi import Ganeti.HTools.Loader (checkData, mergeData, ClusterData(..)) import Ganeti.HTools.Text (serializeCluster) @@ -155,12 +151,6 @@ main = do result <- writeData nlen name opts input_data unless result $ exitWith $ ExitFailure 2 -#ifndef NO_CURL results <- mapM (\name -> Rapi.loadData name >>= writeData nlen name opts) clusters unless (all id results) $ exitWith (ExitFailure 2) -#else - when (not $ null clusters) $ do - putStrLn "RAPI/curl backend disabled at compile time, cannot scan clusters" - exitWith $ ExitFailure 1 -#endif