shake: Shake PKG (or Shake build) builds packages plus their docs
"stack build hledger" will not notice changes in documentation source files (like hledger/Hledger/Cli/Commands/Add.md or hledger-lib/hledger_journal.m4.md), but "./Shake hledger" will. "./Shake build" builds all the packages, like a doc-aware "stack build".
This commit is contained in:
		
							parent
							
								
									3baad5d729
								
							
						
					
					
						commit
						0628b648f3
					
				
							
								
								
									
										58
									
								
								Shake.hs
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								Shake.hs
									
									
									
									
									
								
							| @ -56,11 +56,14 @@ usage = unlines | |||||||
|   ,"./Shake.hs               # compile this script" |   ,"./Shake.hs               # compile this script" | ||||||
|   ,"./Shake manuals          # generate the txt/man/info manuals" |   ,"./Shake manuals          # generate the txt/man/info manuals" | ||||||
|   ,"./Shake website          # generate the website and web manuals" |   ,"./Shake website          # generate the website and web manuals" | ||||||
|  |   ,"./Shake PKG              # build the specified hledger package, with awareness of embedded docs" | ||||||
|  |   ,"./Shake build            # build all hledger packages, with awareness of embedded docs" | ||||||
|   ,"./Shake all              # generate everything" |   ,"./Shake all              # generate everything" | ||||||
|   ,"" |   ,"" | ||||||
|   ,"./Shake site/doc/VERSION/.snapshot   # save the checked-out web manuals as a versioned snapshot" |   ,"./Shake site/doc/VERSION/.snapshot   # save the checked-out web manuals as a versioned snapshot" | ||||||
|  |   ,"./Shake FILE             # build any individual file" | ||||||
|   ,"./Shake clean            # clean generated files" |   ,"./Shake clean            # clean generated files" | ||||||
|   ,"./Shake Clean            # clean more thoroughly" |   ,"./Shake Clean            # clean more thoroughly, including Shake's dependency cache" | ||||||
|   ,"" |   ,"" | ||||||
|   ,"./Shake [help]           # show commands" |   ,"./Shake [help]           # show commands" | ||||||
|   ,"./Shake --help           # show detailed Shake options, eg --color" |   ,"./Shake --help           # show detailed Shake options, eg --color" | ||||||
| @ -82,6 +85,7 @@ main = do | |||||||
|   -- hledger manual also includes the markdown files from here: |   -- hledger manual also includes the markdown files from here: | ||||||
|   let commandsdir = "hledger/Hledger/Cli/Commands" |   let commandsdir = "hledger/Hledger/Cli/Commands" | ||||||
|   commandmds <- filter (".md" `isSuffixOf`) . map (commandsdir </>) <$> S.getDirectoryContents commandsdir |   commandmds <- filter (".md" `isSuffixOf`) . map (commandsdir </>) <$> S.getDirectoryContents commandsdir | ||||||
|  |   let commandtxts = map (-<.> "txt") commandmds | ||||||
| 
 | 
 | ||||||
|   shakeArgs |   shakeArgs | ||||||
|     shakeOptions{ |     shakeOptions{ | ||||||
| @ -93,7 +97,7 @@ main = do | |||||||
| 
 | 
 | ||||||
|     phony "help" $ liftIO $ putStrLn usage |     phony "help" $ liftIO $ putStrLn usage | ||||||
| 
 | 
 | ||||||
|     phony "all" $ need ["manuals", "website"] |     phony "all" $ need ["manuals", "website", "build"] | ||||||
| 
 | 
 | ||||||
|     -- phony "compile" $ need ["Shake"] |     -- phony "compile" $ need ["Shake"] | ||||||
|     -- "Shake" %> \out -> do |     -- "Shake" %> \out -> do | ||||||
| @ -102,13 +106,30 @@ main = do | |||||||
|     --   putLoud "You can now run ./Shake instead of ./Shake.hs" |     --   putLoud "You can now run ./Shake instead of ./Shake.hs" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     -- MANUALS |     -- NAMES, FILES, URIS.. | ||||||
| 
 | 
 | ||||||
|     let |     let | ||||||
|       -- documentation versions shown on the website (excluding 0.27 which is handled specially) |       -- documentation versions shown on the website (excluding 0.27 which is handled specially) | ||||||
|       docversions = [ "1.0" , "1.1" , "1.2" , "1.3" , "1.4" , "1.5" , "1.9", "1.10", "1.11", "1.12" ] |       docversions = [ "1.0" , "1.1" , "1.2" , "1.3" , "1.4" , "1.5" , "1.9", "1.10", "1.11", "1.12" ] | ||||||
| 
 | 
 | ||||||
|       -- names, files, uris: |       -- main package names, in standard build order | ||||||
|  |       packages = [ | ||||||
|  |          "hledger-lib" | ||||||
|  |         ,"hledger" | ||||||
|  |         ,"hledger-ui" | ||||||
|  |         ,"hledger-web" | ||||||
|  |         ,"hledger-api" | ||||||
|  |         ] | ||||||
|  | 
 | ||||||
|  |       -- doc files (or related targets) that should be generated | ||||||
|  |       -- before building hledger packages. | ||||||
|  |       -- [(PKG, [TARGETS])] | ||||||
|  |       embeddedFiles = [ | ||||||
|  |          -- hledger embeds the plain text command help files and all packages' text/nroff/info manuals | ||||||
|  |          ("hledger", commandtxts ++ ["manuals"]) | ||||||
|  |          -- hledger-ui imports the hledger-ui manuals from hledger | ||||||
|  |         ,("hledger-ui", ["hledger"]) | ||||||
|  |         ] | ||||||
| 
 | 
 | ||||||
|       -- man page names (manual names plus a man section number), in suggested reading order |       -- man page names (manual names plus a man section number), in suggested reading order | ||||||
|       manpageNames = [ |       manpageNames = [ | ||||||
| @ -194,6 +215,8 @@ main = do | |||||||
|       manpageUriToName u | "hledger" `isPrefixOf` u = u <.> "1" |       manpageUriToName u | "hledger" `isPrefixOf` u = u <.> "1" | ||||||
|                          | otherwise                = "hledger_" ++ u <.> "5" |                          | otherwise                = "hledger_" ++ u <.> "5" | ||||||
| 
 | 
 | ||||||
|  |     -- MANUALS | ||||||
|  | 
 | ||||||
|     -- Generate the manuals in nroff, plain text and info formats. |     -- Generate the manuals in nroff, plain text and info formats. | ||||||
|     phony "manuals" $ do |     phony "manuals" $ do | ||||||
|       need $ |       need $ | ||||||
| @ -328,6 +351,33 @@ main = do | |||||||
|                          "--lua-filter"              "tools/pandoc-site.lua" |                          "--lua-filter"              "tools/pandoc-site.lua" | ||||||
|                          "--output"                  out |                          "--output"                  out | ||||||
| 
 | 
 | ||||||
|  |     -- HLEDGER PACKAGES/EXECUTABLES | ||||||
|  | 
 | ||||||
|  |     phony "build" $ cmd Shell "stack build" | ||||||
|  | 
 | ||||||
|  |     -- shortpackagenames |%> \out -> do | ||||||
|  |     --   let pkg | out=="cli" = "hledger" | ||||||
|  |     --           | otherwise  = "hledger-"++out | ||||||
|  |     --   -- need ["hledger/Hledger/Cli/Commands/Close.md"] | ||||||
|  |     --   -- need ["hledger/hledger.1"] | ||||||
|  |     --   -- need ["hledger/hledger.info"] | ||||||
|  |     --   -- need ["hledger/hledger.txt"] | ||||||
|  |     --   cmd Shell "stack build" pkg | ||||||
|  | 
 | ||||||
|  |     -- build (and install) any of the hledger packages, after | ||||||
|  |     -- generating any doc files they embed or import. | ||||||
|  |     sequence_ [ phony pkg $ do | ||||||
|  |       need $ fromMaybe [] $ lookup pkg embeddedFiles | ||||||
|  |       cmd Shell "stack build " pkg | ||||||
|  |       | pkg <- packages ] | ||||||
|  | 
 | ||||||
|  |     commandtxts |%> \out -> do | ||||||
|  |       let src = out -<.> "md" | ||||||
|  |           -- lib = "doc/lib.m4" | ||||||
|  |       need [src] | ||||||
|  |       cmd Shell | ||||||
|  |         -- "m4 -P -DHELP -I" commandsdir lib src "|" | ||||||
|  |         pandoc fromsrcmd src "-o" out | ||||||
| 
 | 
 | ||||||
|     -- MISC |     -- MISC | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user