Hi all, I've been trying to resolve a compile time issue[1] with<br>
wxHaskell, and I thought I'd throw it open to see if anyone on cafe<br>
can help.<br>
Here's the crux of the issue:<br>
<br>
The Setup.hs for wxcore (the major component of wxHaskell) uses<br>
"simpleUserHooks", overriding only "confHook".<br>
However there is also "cleanHook", which is defined by simpleUserHooks to be:<br>
&nbsp;cleanHook = \p _ _ f -&gt; clean p f,<br>
<br>
If you consult the source for clean[2] you'll see that it tries to<br>
"remove the whole dist/ directory rather than tracking exactly what<br>
files we created in there". I presume that's why we have to do a full<br>
re-build every time?<br>
<br>
To try and circumvent this I modified the definition of "main" in<br>
Setup.hs to this:<br>
main = defaultMainWithHooks simpleUserHooks { confHook = myConfHook,<br>
cleanHook = (\_ _ _ _ -&gt; return ())}<br>
<br>
Unfortunately it still seems to re-build all the C++ on each 'install'<br>
from cabal.<br>
Not sure why?<br>
<br>
Dave,<br>
<br>
<br>
[1] <a href="http://sourceforge.net/mailarchive/message.php?msg_id=28099997" target="_blank">http://sourceforge.net/<wbr>mailarchive/message.php?msg_<wbr>id=28099997</a><br>
<br>
[2] Taken from <a href="http://www.haskell.org/ghc/docs/6.10.4/html/libraries/Cabal/src/Distribution-Simple.html#simpleUserHooks" target="_blank">http://www.haskell.org/ghc/<wbr>docs/6.10.4/html/libraries/<wbr>Cabal/src/Distribution-Simple.<wbr>html#simpleUserHooks</a><br>
-- Cleaning<br>
<br>
clean :: PackageDescription -&gt; CleanFlags -&gt; IO ()<br>
clean pkg_descr flags = do<br>
 &nbsp; &nbsp;let distPref = fromFlag $ cleanDistPref flags<br>
 &nbsp; &nbsp;notice verbosity "cleaning..."<br>
<br>
 &nbsp; &nbsp;maybeConfig &lt;- if fromFlag (cleanSaveConf flags)<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; then maybeGetPersistBuildConfig distPref<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else return Nothing<br>
<br>
 &nbsp; &nbsp;-- remove the whole dist/ directory rather than tracking exactly what files<br>
 &nbsp; &nbsp;-- we created in there.<br>
 &nbsp; &nbsp;chattyTry "removing dist/" $ do<br>
 &nbsp; &nbsp; &nbsp;exists &lt;- doesDirectoryExist distPref<br>
 &nbsp; &nbsp; &nbsp;when exists (removeDirectoryRecursive distPref)<br>
<br>
 &nbsp; &nbsp;-- these live in the top level dir so must be removed separately<br>
 &nbsp; &nbsp;removeRegScripts<br>
<br>
 &nbsp; &nbsp;-- Any extra files the user wants to remove<br>
 &nbsp; &nbsp;mapM_ removeFileOrDirectory (extraTmpFiles pkg_descr)<br>
<br>
 &nbsp; &nbsp;-- If the user wanted to save the config, write it back<br>
 &nbsp; &nbsp;maybe (return ()) (writePersistBuildConfig distPref) maybeConfig<br>
<br>
 &nbsp;where<br>
 &nbsp; &nbsp; &nbsp; &nbsp;removeFileOrDirectory :: FilePath -&gt; IO ()<br>
 &nbsp; &nbsp; &nbsp; &nbsp;removeFileOrDirectory fname = do<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;isDir &lt;- doesDirectoryExist fname<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;isFile &lt;- doesFileExist fname<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if isDir then removeDirectoryRecursive fname<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if isFile then removeFile fname<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else return ()<br>
 &nbsp; &nbsp; &nbsp; &nbsp;verbosity = fromFlag (cleanVerbosity flags)