Use CMake's built-in timestamp formatting.
Build and Test / build-linux (push) Waiting to run
Build and Test / build-wayland (push) Waiting to run
Build and Test / build-macos (push) Waiting to run
Build and Test / build-windows (push) Waiting to run

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
+15 -11
View File
@@ -37,16 +37,12 @@ if(GENERATE_DOCS)
# create required variables # create required variables
execute_process(COMMAND date "+%Y" string(TIMESTAMP YEAR "%Y" UTC)
OUTPUT_VARIABLE YEAR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# note: current locale is used for abbreviated month # note: current locale is used for abbreviated month
execute_process(COMMAND date "+%b %d, %Y" string(TIMESTAMP CURRENT_DATE "%b %d, %Y" UTC)
OUTPUT_VARIABLE CURRENT_DATE string(TIMESTAMP PDF_DATE "D:%Y%m%d%H%M%SZ" UTC)
OUTPUT_STRIP_TRAILING_WHITESPACE string(TIMESTAMP TODAY "%B %d, %Y" UTC)
) string(REPLACE " 0" " " TODAY "${TODAY}")
# Find "short" doxygen version if it was built from Git # Find "short" doxygen version if it was built from Git
# Note: this is still needed in CMake 3.15 but later CMake versions # Note: this is still needed in CMake 3.15 but later CMake versions
@@ -77,6 +73,8 @@ if(GENERATE_DOCS)
if(0) # debug if(0) # debug
fl_debug_var(YEAR) fl_debug_var(YEAR)
fl_debug_var(CURRENT_DATE) fl_debug_var(CURRENT_DATE)
fl_debug_var(PDF_DATE)
fl_debug_var(TODAY)
fl_debug_var(FLTK_GIT_REVISION) fl_debug_var(FLTK_GIT_REVISION)
fl_debug_var(DOXYGEN_FOUND) fl_debug_var(DOXYGEN_FOUND)
fl_debug_var(DOXYGEN_EXECUTABLE) fl_debug_var(DOXYGEN_EXECUTABLE)
@@ -179,7 +177,7 @@ if(FLTK_BUILD_PDF_DOCS)
COMMENT "Converting ${DOXYFILE} to doxygen version ${DOXYGEN_VERSION_SHORT}" VERBATIM 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( configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-title.tex.in ${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-title.tex.in
@@ -187,6 +185,12 @@ if(FLTK_BUILD_PDF_DOCS)
@ONLY @ONLY
) )
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/make_pdf.in
${CMAKE_CURRENT_BINARY_DIR}/make_pdf
@ONLY
)
# generate fltk.pdf # generate fltk.pdf
add_custom_command( add_custom_command(
@@ -196,7 +200,7 @@ if(FLTK_BUILD_PDF_DOCS)
${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex ${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex
${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex ${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE} 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 COMMAND cp -f latex/refman.pdf fltk.pdf
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}
${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex ${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex
@@ -26,10 +26,15 @@
# #
# Used in: Makefile and CMakeLists.txt # Used in: Makefile and CMakeLists.txt
run_pdflatex() {
pdflatex --interaction=nonstopmode \
"\pdfinfo{/CreationDate(@PDF_DATE@)/ModDate(@PDF_DATE@)}\input{refman.tex}"
}
( cd latex ( cd latex
pdflatex --interaction=nonstopmode refman.tex run_pdflatex
makeindex refman.idx makeindex refman.idx
pdflatex --interaction=nonstopmode refman.tex run_pdflatex
latex_count=5 latex_count=5
while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log \ while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log \
&& [ $latex_count -gt 0 ] && [ $latex_count -gt 0 ]
+1 -1
View File
@@ -25,7 +25,7 @@ provided this copyright and permission notice are preserved.}\\
\vspace*{1.5cm} \vspace*{1.5cm}
{\large Generated by Doxygen @DOXY_VERSION@}\\ {\large Generated by Doxygen @DOXY_VERSION@}\\
\vspace*{0.5cm} \vspace*{0.5cm}
\today{}\\ @TODAY@\\
\vspace*{0.5cm} \vspace*{0.5cm}
{\small Git revision @FLTK_GIT_REVISION@}\\ {\small Git revision @FLTK_GIT_REVISION@}\\
\end{center} \end{center}