cake3 0.4.0.0 → 0.5.0.0
raw patch · 3 files changed
+30/−33 lines, 3 filesdep ~basedep ~language-javascript
Dependency ranges changed: base, language-javascript
Files
- README.md +24/−28
- cake3.cabal +5/−5
- src/CakeScript.hs +1/−0
README.md view
@@ -21,8 +21,8 @@ The goals of Cake3 are to help the developer to: * Stop overusing Make by writing complex logic in make-language- * Still have a correct Makefile which could be distributed among the users- * Take a bit of Haskell practice :)+ * Still have a correct Makefile which could be distributed among the end-users+ * Practice some Haskell Installation ------------@@ -85,11 +85,11 @@ import Development.Cake3 import Cakefile_P - main = writeMake "Makefile" $ do+ main = writeMake (file "Makefile") $ do selfUpdate - cs <- filterDirectoryContentsRecursive [".c"]+ cs <- return $ [file "main.c", file "second.c"] d <- rule $ do shell [cmd|gcc -M $cs -MF @(file "depend.mk")|]@@ -126,9 +126,9 @@ 'all' rule to be defined at the bottom of Cakefile.hs. * Starting from 0.4, cake3 outputs rule named 'clean' automatically. This rule contains recipe which deletes all intermediate files with 'rm' command.- * selfUpdate call includes the self-updating dependencies. That means, that+ * `selfUpdate` call includes the self-updating dependencies. That means, that Makefile will depend on Cakefile.hs and thus will require ghc to present in- the system. Removing selfUpdate call will make the Makefile fully+ the system. Removing `selfUpdate` call will make the Makefile fully Haskell-independent. @@ -150,6 +150,7 @@ ### Features * *Cake3 generates the 'clean' rule automatically.*+ But if you define your own 'clean', cake3 will take it as is. * *Cake3 takes care of spaces inside the filenames.*@@ -240,16 +241,15 @@ #### Make syntax -As a summary - only a samll subset of Make syntax is supported for generation.-For complex algorithms Haskell looks more suitable so implement everything you-need inside the Cakefile.hs. In particular:+As a summary - only a samll subset of Make syntax is supported. For complex+algorithms Haskell looks more suitable so implement everything you need inside+the Cakefile.hs. In particular: - * Cake3 offers no way of detecting directory content chages. For example, user- has to rerun the ./Cakegen if they add/remove a source file.+ * Cake3 offers no way of detecting directory content chages at the moment. For+ example, user has to rerun the ./Cakegen if they add/remove a source file. * Cake3 doesn't check the contents of Makefile variables. It is user's responsibility to keep them safe.- * Variables as targets is not supported. Implement this logic in Haskell for- now.+ * DSL doesn't allow to place Make variables anywhere except the recipe. #### General@@ -264,24 +264,20 @@ Random implementation details ----------------------------- - 1. User writes a cakefile (./Cake\*.hs) describing the rules. Refer to- Example/GHC/Cakefile.hs. Note, that different cakefiles should have- different names even if they are in different directories due to GHC import- restrictions. This way user can import one cakefile from another, as if- they were in the same directory. Actually, cake3 copies all cakefiles into- one temporary directory and compiles them there. Note that cake3 calls ghc- having several common haskell extentions enabled.+ 1. cake3 script copies all the Cake\*hs files it found in the project tree to+ a single temporary directory before compiling the ./Cakegen application.+ That is why all the cakefiles in project should have different names.+ Another consequence - cakefiles as Haskell modules may be imported by+ filename regardles of their actual position in the project tree. - 2. Cake3 copies all Cake\*.hs files from your project tree into temporary dir- and compiles them with GHC (or calls GHCi). Before that, it creates a- ./Cake\*_P.hs pathfile containing information about paths. The most- important is _files_ function which translates relative _filename_ into- _"." </> path_to_subproject </> filename_.+ 2. Cake3 creates ./Cake\*\_P.hs files for every Cake\*hs. The \_P files+ contain paths information. In particular, they define `file` function for+ the current directiory. `selfUpdate` function is also defined there. - 3. Cake3 uses relative paths only for the final Makefile.+ 3. All filepaths in the final Makefile are relative. 4. Cake3 uses it's own representation of files (File). Many filepath functions (takeDirectory, takeBaseName, dropExtensions, </>, etc) are defined for- them. See System.FilePath.Wrapper.hs. FileLike typeclass makes it possible- to use them with plain FilePath as well.+ File as members of FileLike typeclass. See System.FilePath.Wrapper for the+ details.
cake3.cabal view
@@ -2,7 +2,7 @@ -- see http://haskell.org/cabal/users-guide/ name: cake3-version: 0.4.0.0+version: 0.5.0.0 synopsis: Third cake the Makefile EDSL description: Cake3 is a Makefile EDSL written in Haskell. Write your build logic in Haskell, obtain clean and safe Makefile, distribute it to the end-users.@@ -71,24 +71,24 @@ Development.Cake3.Utils.Find Text.QuasiMake - build-depends: base ==4.6.*, haskell-src-meta, template-haskell,+ build-depends: base ==4.7.*, haskell-src-meta, template-haskell, filepath, containers, text, monadloc, mtl, bytestring, deepseq, system-filepath, text-format, directory, attoparsec, mime-types,- language-javascript ==0.5.*, syb+ language-javascript, syb hs-source-dirs: src executable cake3 hs-source-dirs: src main-is: CakeScript.hs- build-depends: base ==4.6.*, process+ build-depends: base ==4.7.*, process other-modules: Paths_cake3 executable urembed hs-source-dirs: src main-is: Development/Cake3/Ext/UrWeb/UrEmbed.hs- build-depends: base == 4.6.*, mtl, language-javascript ==0.5.*, process,+ build-depends: base == 4.7.*, mtl, language-javascript, process, filepath, syb, optparse-applicative, directory, text, bytestring, containers, language-javascript, haskell-src-meta, template-haskell, attoparsec, monadloc,
src/CakeScript.hs view
@@ -16,6 +16,7 @@ , std_out = Inherit , std_err = Inherit , close_fds = True+ , delegate_ctlc = False , create_group = False } ret <- waitForProcess ph