From f81f5a20900ca9d8ad9971b6f57c11281ab2b048 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Mon, 11 Apr 2022 17:17:11 -0700
Subject: [PATCH] Add 'nightly' flag and build with this for nightlies.

This flag causes a suffix '-nightly-YYYY-MM-DD' to be added
to the version for nightlies.

Closes #8016.
---
 .github/workflows/nightly.yml             |  6 +++---
 pandoc.cabal                              |  6 ++++++
 src/Text/Pandoc/App/CommandLineOptions.hs | 15 ++++++++++++++-
 3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index fa42816ad..87a7758c9 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -28,7 +28,7 @@ jobs:
           cabal v2-build --dependencies-only
     - name: Build
       run: |
-          cabal v2-install
+          cabal v2-install -fnightly
           strip $HOME/.cabal/bin/pandoc
     - name: Install artifact
       run: |
@@ -58,7 +58,7 @@ jobs:
           for /f %%a in ('powershell -Command "Get-Date -format yyyy-MM-dd"') do set THEDATE=%%a
           set ARTIFACTS=%CD%\nightly-windows\pandoc-nightly-windows-%THEDATE%
           mkdir %ARTIFACTS%
-          stack build pandoc
+          stack build --flag pandoc:nightly pandoc
           forfiles /P .\.stack-work\install /M pandoc*.exe /S /C "cmd /C copy @path %%ARTIFACTS%%"
           copy COPYRIGHT %ARTIFACTS%
           ren %ARTIFACTS%\COPYRIGHT COPYRIGHT.txt
@@ -82,7 +82,7 @@ jobs:
       run: |
           export ARTIFACTS=nightly-macos/pandoc-nightly-macos-$(date +%Y-%m-%d)
           mkdir -p ${ARTIFACTS}
-          stack build pandoc
+          stack build --flag pandoc:nightly pandoc
           for f in $(find .stack-work/install -name 'pandoc*' -perm +001 -type f); do cp $f ${ARTIFACTS}/; done
           mv ${ARTIFACTS}/pandoc ${ARTIFACTS}/pandoc
           cp COPYRIGHT ${ARTIFACTS}/
diff --git a/pandoc.cabal b/pandoc.cabal
index 6b4c0b8ad..1cd724974 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -428,6 +428,10 @@ flag trypandoc
   Description:   Build trypandoc cgi executable.
   Default:       False
 
+flag nightly
+  Description:   Add '-nightly-DATE' to the output of '--version'.
+  Default:       False
+
 common common-options
   default-language: Haskell2010
   build-depends:    base         >= 4.12 && < 5
@@ -531,6 +535,8 @@ library
                  zlib                  >= 0.5      && < 0.7
   if !os(windows)
     build-depends:  unix >= 2.4 && < 2.8
+  if flag(nightly)
+    cpp-options:    -DNIGHTLY
   if flag(lua53)
     build-depends:  hslua >= 2.1 && < 2.2,
                     hslua-aeson >= 2.1 && < 2.3
diff --git a/src/Text/Pandoc/App/CommandLineOptions.hs b/src/Text/Pandoc/App/CommandLineOptions.hs
index ffb7c5eb8..797a73725 100644
--- a/src/Text/Pandoc/App/CommandLineOptions.hs
+++ b/src/Text/Pandoc/App/CommandLineOptions.hs
@@ -56,6 +56,8 @@ import Text.Pandoc.Filter (Filter (..))
 import Text.Pandoc.Highlighting (highlightingStyles)
 import Text.Pandoc.Shared (ordNub, elemText, safeStrRead, defaultUserDataDir)
 import Text.Printf
+import Data.Time.Clock (UTCTime(utctDay), getCurrentTime)
+import Data.Time.Format (defaultTimeLocale, iso8601DateFormat, formatTime)
 
 #ifdef EMBED_DATA_FILES
 import Text.Pandoc.Data (dataFiles)
@@ -952,9 +954,20 @@ options =
                        openlibs
                        getglobal "_VERSION"
                        peek top
+                     versionSuffix <-
+#ifdef NIGHTLY
+                          ("-nightly-" ++)
+                        . formatTime defaultTimeLocale
+                            (iso8601DateFormat Nothing)
+                        . utctDay
+                        <$> Data.Time.Clock.getCurrentTime
+#else
+                       pure ""
+#endif
                      UTF8.hPutStrLn stdout
                       $ T.pack
-                      $ prg ++ " " ++ T.unpack pandocVersion ++
+                      $ prg ++ " " ++
+                        T.unpack pandocVersion ++ versionSuffix ++
                         compileInfo ++ "\nScripting engine: " ++ luaVersion ++
                         "\nUser data directory: " ++ defaultDatadir ++
                         ('\n':copyrightMessage)