diff --git a/.gitignore b/.gitignore index f841f39e6e..16314abf76 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ Setup tmp test Build/SysConfig +Build/Version Build/InstallDesktopFile Build/EvilSplicer Build/Standalone diff --git a/Build/BuildVersion.hs b/Build/BuildVersion.hs index 0093f5b5b1..5ae1c4cef7 100644 --- a/Build/BuildVersion.hs +++ b/Build/BuildVersion.hs @@ -1,6 +1,12 @@ -{- Outputs the version of git-annex that was built, for use by - - autobuilders. Note that this includes the git rev. -} +{- For use by autobuilders, this outputs the version of git-annex that + - is being built, and also updates the Build/Version file so the build + - will report the right version, including the current git rev. -} + +{-# OPTIONS_GHC -fno-warn-tabs #-} import Build.Version -main = putStr =<< getVersion +main = do + ver <- getVersion + writeVersion ver + putStr ver diff --git a/Build/Configure.hs b/Build/Configure.hs index 4907d976fb..c490148f50 100644 --- a/Build/Configure.hs +++ b/Build/Configure.hs @@ -1,4 +1,4 @@ -{- Checks system configuration and generates SysConfig. -} +{- Checks system configuration and generates Build/SysConfig and Build/Version. -} {-# OPTIONS_GHC -fno-warn-tabs #-} @@ -12,15 +12,13 @@ import Utility.Env.Basic import qualified Git.Version import Utility.Directory -import Control.Monad.IfElse import Control.Monad import Control.Applicative import Prelude tests :: [TestCase] tests = - [ TestCase "version" (Config "packageversion" . StringConfig <$> getVersion) - , TestCase "UPGRADE_LOCATION" getUpgradeLocation + [ TestCase "UPGRADE_LOCATION" getUpgradeLocation , TestCase "git" $ testCmd "git" "git --version >/dev/null" , TestCase "git version" getGitVersion , testCp "cp_a" "-a" @@ -120,6 +118,7 @@ run ts = do case v of Just "Android" -> writeSysConfig $ androidConfig config _ -> writeSysConfig config + writeVersion =<< getVersion cleanup {- Hard codes some settings to cross-compile for Android. -} diff --git a/Build/Version.hs b/Build/Version.hs index 1d827ff685..69752a0897 100644 --- a/Build/Version.hs +++ b/Build/Version.hs @@ -1,4 +1,4 @@ -{- Package version determination, for configure script. -} +{- Package version determination. -} {-# OPTIONS_GHC -fno-warn-tabs #-} @@ -13,7 +13,6 @@ import Prelude import Utility.Monad import Utility.Exception -import Utility.Directory type Version = String @@ -33,7 +32,6 @@ getVersion = do ifM (isReleaseBuild) ( return changelogversion , catchDefaultIO changelogversion $ do - let major = takeWhile (/= '.') changelogversion gitversion <- takeWhile (\c -> isAlphaNum c) <$> readProcess "sh" [ "-c" , "git log -n 1 --format=format:'%h'" @@ -54,3 +52,18 @@ getChangelogVersion = do return $ middle (words verline !! 1) where middle = drop 1 . init + +writeVersion :: Version -> IO () +writeVersion = writeFile "Build/Version" . body + where + body ver = unlines $ concat + [ header + , ["packageversion :: String"] + , ["packageversion = \"" ++ ver ++ "\""] + , footer + ] + header = [ + "{- Automatically generated. -}" + , "" + ] + footer = [] diff --git a/BuildInfo.hs b/BuildInfo.hs index 40aa2fdfb4..465ac372ef 100644 --- a/BuildInfo.hs +++ b/BuildInfo.hs @@ -12,3 +12,5 @@ module BuildInfo where -- This file is generated by the configure program with the results of its -- probing. #include "Build/SysConfig" +-- This file is automatically generated from the CHANGELOG version +#include "Build/Version" diff --git a/Makefile b/Makefile index 9f4c122c3c..c5773c5c71 100644 --- a/Makefile +++ b/Makefile @@ -108,7 +108,7 @@ docs: mans clean: if [ "$(BUILDER)" != ./Setup ] && [ "$(BUILDER)" != cabal ]; then $(BUILDER) clean; fi rm -rf tmp dist git-annex $(mans) configure *.tix .hpc \ - doc/.ikiwiki html dist tags Build/SysConfig \ + doc/.ikiwiki html dist tags Build/SysConfig Build/Version \ Setup Build/InstallDesktopFile Build/EvilSplicer \ Build/Standalone Build/OSXMkLibs Build/LinuxMkLibs \ Build/DistributionUpdate Build/BuildVersion Build/MakeMans \ diff --git a/standalone/windows/build.sh b/standalone/windows/build.sh index b0e6bdd4ff..123dc7ddf9 100755 --- a/standalone/windows/build.sh +++ b/standalone/windows/build.sh @@ -63,6 +63,11 @@ getextra rsync.exe 85cb7a4d16d274fcf8069b39042965ad26abd6aa #stack upgrade --git stack --version +# Update version info for git rev being built. +mkdir -p dist +stack ghc --stack-yaml stack-windows.yaml --no-haddock Build/BuildVersion.hs +./Build/BuildVersion > dist/build-version + # Build git-annex stack setup --stack-yaml stack-windows.yaml stack install -j 1 --stack-yaml stack-windows.yaml --no-haddock \ @@ -73,10 +78,6 @@ withcygpreferred stack ghc --stack-yaml stack-windows.yaml --no-haddock \ --package nsis Build/NullSoftInstaller.hs ./Build/NullSoftInstaller -mkdir -p dist -stack ghc --stack-yaml stack-windows.yaml --no-haddock Build/BuildVersion.hs -./Build/BuildVersion > dist/build-version - # Test git-annex # The test is run in c:/WINDOWS/Temp, because running it in the autobuilder # directory runs afoul of Windows's short PATH_MAX.