Use CMake's built-in timestamp formatting.

It notably honors SOURCE_DATE_EPOCH if set, making for reproducible
output.  For even better reproducibility, use UTC.  (Unlike the date
command's output, the result is already always in English.)  Extend
this approach to the book, introducing appropriately formatted
PDF_DATE and TODAY variables for its PDF metadata and title page
respectively and making make_pdf configurable.
This commit is contained in:
Aaron M. Ucko 2025-03-30 20:56:57 -04:00 committed by Albrecht Schlosser
parent 794d493eb6
commit 678c850272
3 changed files with 23 additions and 14 deletions

View File

@ -37,16 +37,12 @@ if(GENERATE_DOCS)
# create required variables
execute_process(COMMAND date "+%Y"
OUTPUT_VARIABLE YEAR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(TIMESTAMP YEAR "%Y" UTC)
# note: current locale is used for abbreviated month
execute_process(COMMAND date "+%b %d, %Y"
OUTPUT_VARIABLE CURRENT_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(TIMESTAMP CURRENT_DATE "%b %d, %Y" UTC)
string(TIMESTAMP PDF_DATE "D:%Y%m%d%H%M%SZ" UTC)
string(TIMESTAMP TODAY "%B %d, %Y" UTC)
string(REPLACE " 0" " " TODAY "${TODAY}")
# Find "short" doxygen version if it was built from Git
# Note: this is still needed in CMake 3.15 but later CMake versions
@ -77,6 +73,8 @@ if(GENERATE_DOCS)
if(0) # debug
fl_debug_var(YEAR)
fl_debug_var(CURRENT_DATE)
fl_debug_var(PDF_DATE)
fl_debug_var(TODAY)
fl_debug_var(FLTK_GIT_REVISION)
fl_debug_var(DOXYGEN_FOUND)
fl_debug_var(DOXYGEN_EXECUTABLE)
@ -179,7 +177,7 @@ if(FLTK_BUILD_PDF_DOCS)
COMMENT "Converting ${DOXYFILE} to doxygen version ${DOXYGEN_VERSION_SHORT}" VERBATIM
)
# generate LaTeX title fltk-title.tex
# generate LaTeX title fltk-title.tex and make_pdf script
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-title.tex.in
@ -187,6 +185,12 @@ if(FLTK_BUILD_PDF_DOCS)
@ONLY
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/make_pdf.in
${CMAKE_CURRENT_BINARY_DIR}/make_pdf
@ONLY
)
# generate fltk.pdf
add_custom_command(
@ -196,7 +200,7 @@ if(FLTK_BUILD_PDF_DOCS)
${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex
${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE}
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_pdf
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/make_pdf
COMMAND cp -f latex/refman.pdf fltk.pdf
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}
${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex

View File

@ -26,10 +26,15 @@
#
# Used in: Makefile and CMakeLists.txt
run_pdflatex() {
pdflatex --interaction=nonstopmode \
"\pdfinfo{/CreationDate(@PDF_DATE@)/ModDate(@PDF_DATE@)}\input{refman.tex}"
}
( cd latex
pdflatex --interaction=nonstopmode refman.tex
run_pdflatex
makeindex refman.idx
pdflatex --interaction=nonstopmode refman.tex
run_pdflatex
latex_count=5
while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log \
&& [ $latex_count -gt 0 ]

View File

@ -25,7 +25,7 @@ provided this copyright and permission notice are preserved.}\\
\vspace*{1.5cm}
{\large Generated by Doxygen @DOXY_VERSION@}\\
\vspace*{0.5cm}
\today{}\\
@TODAY@\\
\vspace*{0.5cm}
{\small Git revision @FLTK_GIT_REVISION@}\\
\end{center}