[Haskell-cafe] Re: How to customize dyre recompile?

2009-09-06 Thread Will Donnelly
Hi Andy,

I feel that I should offer a disclaimer here: You are misusing Dyre
somewhat by attempting to make it handle whole-program recompilation.
It is designed to recompile a single configuration file, generally
against an installed library form of the application. Some of its
code, specifically the part that decides when to recompile, is based
almost entirely on this assumption.

That aside, you should be able to accomplish your goals like this:

1. Set the 'forceRecomp' parameter (just added in Dyre 0.7.3) to
'False'. This will remove the '-fforce-recomp' flag from GHC's
options.
2. Run your executable with the '--force-reconf' flag, which will
cause Dyre to always enter the recompilation code.

In a test project I just created, this seems to do what you desire.

Hope this helps clear things up
- Will Donnelly

On Sun, Sep 6 2009 at 1:41 PM, Andy Stewart lazycat.mana...@gmail.com wrote:

 Hi all,

 I use below params for configure dyre:

 rebootParams :: Params Config
 rebootParams = defaultParams
    {projectName = Main
    ,realMain    = manatee
    ,showError   = rebootShowError
    ,cacheDir    = Just $ return /test/Download/cache/
    ,configDir   = Just getCurrentDirectory
    }

 There have two version of function `reboot` to reboot Master binary:

 reboot :: IORefObject - IO ()
 reboot ioRefObject = do
  rs - rebootGetState ioRefObject
  relaunchWithBinaryState rs Nothing

 reboot :: IORefObject - IO ()
 reboot ioRefObject = do
  output - customCompile rebootParams
  case output of
    Just o - putStrLn o   -- output recompile error
    Nothing - do          -- otherwise relaunch
      rs - rebootGetState ioRefObject
      relaunchWithBinaryState rs Nothing

 Becuase i setup `projectName` with `Main`, so i want `dyre` recompile
 NECESSARY module when i change any module in my project.

 In first version of function `reboot`, i just use
 `relauncheWithBinaryState`, i found `dyre` just recompile all project when i
 modified Main.hs, if i modified any others module in project, `dyre`
 won't recompile those modified modules.

 In second version, i use `customCompile` for recompile, but this have
 another problem, `customComiple` use `-fforce-recomp` flags to remove
 all object files, so function `customComiple` will recompile all modules
 in project, and not just recompile NECESSARY modules.

 So how to make `dyre` just recompile NECCESSARY modules whatever i
 change any modules in project?

 Maybe add new option --dyre-reconf-necessary in `dyre`?

 Thanks!

  -- Andy
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: How to customize dyre recompile?

2009-09-06 Thread Andy Stewart
Will Donnelly will.donne...@gmail.com writes:

Hi Will,
 Hi Andy,

 I feel that I should offer a disclaimer here: You are misusing Dyre
 somewhat by attempting to make it handle whole-program recompilation.
 It is designed to recompile a single configuration file, generally
 against an installed library form of the application. Some of its
 code, specifically the part that decides when to recompile, is based
 almost entirely on this assumption.
I use dyre for develop dynamic gtk application, so i hope dyre do
whole-program recompilaton and just recompile necessary files.
Just recompile single file or force recompile all modules is not my desire.

It's better if dyre's support single file recompliation and whole-program
recompilation, isn't? :)


 That aside, you should be able to accomplish your goals like this:

 1. Set the 'forceRecomp' parameter (just added in Dyre 0.7.3) to
 'False'. This will remove the '-fforce-recomp' flag from GHC's
 options.
 2. Run your executable with the '--force-reconf' flag, which will
 cause Dyre to always enter the recompilation code.
Now i use below code finish work:
-- code start --
rebootParams :: Params Config
rebootParams = defaultParams
{projectName = Main
,realMain= manatee
,showError   = rebootShowError
,cacheDir= Just $ return /test/Download/cache/
,configDir   = Just getCurrentDirectory
,forceRecomp = False-- don't recompile all modules, steup for 
recompile whole-program
}

rebootOptions :: Maybe [String]
rebootOptions = Just [--force-reconf]

rebootShowError :: Config - String - Config
rebootShowError cfg msg = cfg {errorMsg = Just msg}

reboot :: IORefObject - IO ()
reboot ioRefObject = do
  rs - rebootGetState ioRefObject
  relaunchWithBinaryState rs rebootOptions
-- code end   --

BTW, looks dyre don't recommand user use function `customCompile`, when
it will call in function `wrapMain' always.

If i just use relaunch function, i just got simple error information: Error 
occurred while
loading configuration file. when recompile failed.

How to display detail information when recompile failed?

I missing something?

Thanks!

  -- Andy


 In a test project I just created, this seems to do what you desire.

 Hope this helps clear things up
 - Will Donnelly

 On Sun, Sep 6 2009 at 1:41 PM, Andy Stewart lazycat.mana...@gmail.com wrote:

 Hi all,

 I use below params for configure dyre:

 rebootParams :: Params Config
 rebootParams = defaultParams
    {projectName = Main
    ,realMain    = manatee
    ,showError   = rebootShowError
    ,cacheDir    = Just $ return /test/Download/cache/
    ,configDir   = Just getCurrentDirectory
    }

 There have two version of function `reboot` to reboot Master binary:

 reboot :: IORefObject - IO ()
 reboot ioRefObject = do
  rs - rebootGetState ioRefObject
  relaunchWithBinaryState rs Nothing

 reboot :: IORefObject - IO ()
 reboot ioRefObject = do
  output - customCompile rebootParams
  case output of
    Just o - putStrLn o   -- output recompile error
    Nothing - do          -- otherwise relaunch
      rs - rebootGetState ioRefObject
      relaunchWithBinaryState rs Nothing

 Becuase i setup `projectName` with `Main`, so i want `dyre` recompile
 NECESSARY module when i change any module in my project.

 In first version of function `reboot`, i just use
 `relauncheWithBinaryState`, i found `dyre` just recompile all project when i
 modified Main.hs, if i modified any others module in project, `dyre`
 won't recompile those modified modules.

 In second version, i use `customCompile` for recompile, but this have
 another problem, `customComiple` use `-fforce-recomp` flags to remove
 all object files, so function `customComiple` will recompile all modules
 in project, and not just recompile NECESSARY modules.

 So how to make `dyre` just recompile NECCESSARY modules whatever i
 change any modules in project?

 Maybe add new option --dyre-reconf-necessary in `dyre`?

 Thanks!

  -- Andy

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe