view update_use_latex.cmake @ 542:4357ee3d11ed

start to work on the slides for while42sf
author Louis Opter <louis@opter.org>
date Wed, 29 Mar 2017 22:30:03 -0700
parents
children
line wrap: on
line source

# HG changeset patch
# Parent  bb7a1425080bc272456650675e5e03896ca21d54
cmake: update UseLatex.cmake to 2.4.2

diff --git a/.hgignore b/.hgignore
--- a/.hgignore
+++ b/.hgignore
@@ -3,3 +3,4 @@
 ^build
 ^pcaps
 .*\.egg-info$
+\.DS_Store$
diff --git a/CMakeScripts/UseLATEX.cmake b/CMakeScripts/UseLATEX.cmake
--- a/CMakeScripts/UseLATEX.cmake
+++ b/CMakeScripts/UseLATEX.cmake
@@ -1,6 +1,6 @@
 # File: UseLATEX.cmake
 # CMAKE commands to actually use the LaTeX compiler
-# Version: 2.3.2
+# Version: 2.4.2
 # Author: Kenneth Moreland <kmorel@sandia.gov>
 #
 # Copyright 2004, 2015 Sandia Corporation.
@@ -61,15 +61,15 @@
 #       so all input files are copied from the source directory to the
 #       output directory.  This includes the target tex file, any tex file
 #       listed with the INPUTS option, the bibliography files listed with
-#       the BIBFILES option, and any .cls, .bst, and .clo files found in
-#       the current source directory.  Images found in the IMAGE_DIRS
-#       directories or listed by IMAGES are also copied to the output
-#       directory and converted to an appropriate format if necessary.  Any
-#       tex files also listed with the CONFIGURE option are also processed
-#       with the CMake CONFIGURE_FILE command (with the @ONLY flag).  Any
-#       file listed in CONFIGURE but not the target tex file or listed with
-#       INPUTS has no effect. DEPENDS can be used to specify generated files
-#       that are needed to compile the latex target.
+#       the BIBFILES option, and any .cls, .bst, .clo, .sty, .ist, and .fd
+#       files found in the current source directory.  Images found in the
+#       IMAGE_DIRS directories or listed by IMAGES are also copied to the
+#       output directory and converted to an appropriate format if necessary.
+#       Any tex files also listed with the CONFIGURE option are also processed
+#       with the CMake CONFIGURE_FILE command (with the @ONLY flag).  Any file
+#       listed in CONFIGURE but not the target tex file or listed with INPUTS
+#       has no effect. DEPENDS can be used to specify generated files that are
+#       needed to compile the latex target.
 #
 #       The following targets are made. The name prefix is based off of the
 #       base name of the tex file unless TARGET_NAME is specified. If
@@ -115,6 +115,37 @@
 #
 # History:
 #
+# 2.4.2 Fix an issue where new versions of ImageMagick expect the order of
+#       options in command line execution of magick/convert. (See, for
+#       example, http://www.imagemagick.org/Usage/basics/#why.)
+#
+# 2.4.1 Add ability to dump LaTeX log file when using batch mode. Batch
+#       mode suppresses most output, often including error messages. To
+#       make sure critical error messages get displayed, show the full log
+#       on failures.
+#
+# 2.4.0 Remove "-r 600" from the default PDFTOPS_CONVERTER_FLAGS. The -r flag
+#       is available from the Poppler version of pdftops, but not the Xpdf
+#       version.
+#
+#       Fix an issue with the flags for the different programs not being
+#       properly separated.
+#
+#       Fix an issue on windows where the = character is not allowed for
+#       ps2pdf arguments.
+#
+#       Change default arguments for latex and pdflatex commands. Makes the
+#       output more quiet and prints out the file/line where errors occur.
+#       (Thanks to Nikos Koukis.)
+#
+#       After a LaTeX build, check the log file for warnings that are
+#       indicative of problems with the build.
+#
+#       Remove support for latex2html. Instead, use the htlatex program.
+#       This is now part of TeX Live and most other distributions. It also
+#       behaves much more like the other LaTeX programs. Also fixed some
+#       nasty issues with the htlatex arguments.
+#
 # 2.3.2 Declare LaTeX input files as sources for targets so that they show
 #       up in IDEs like QtCreator.
 #
@@ -374,6 +405,36 @@
 #############################################################################
 # Functions that perform processing during a LaTeX build.
 #############################################################################
+function(latex_execute_latex)
+  if(NOT LATEX_TARGET)
+    message(SEND_ERROR "Need to define LATEX_TARGET")
+  endif()
+
+  if(NOT LATEX_WORKING_DIRECTORY)
+    message(SEND_ERROR "Need to define LATEX_WORKING_DIRECTORY")
+  endif()
+
+  if(NOT LATEX_FULL_COMMAND)
+    message(SEND_ERROR "Need to define LATEX_FULL_COMMAND")
+  endif()
+
+  set(full_command_original "${LATEX_FULL_COMMAND}")
+  separate_arguments(LATEX_FULL_COMMAND)
+  execute_process(
+    COMMAND ${LATEX_FULL_COMMAND}
+    WORKING_DIRECTORY ${LATEX_WORKING_DIRECTORY}
+    RESULT_VARIABLE execute_result
+    )
+
+  if(NOT ${execute_result} EQUAL 0)
+    message("LaTeX command failed")
+    message("${full_command_original}")
+    message("Log output:")
+    file(READ ${LATEX_WORKING_DIRECTORY}/${LATEX_TARGET}.log log_output)
+    message(FATAL_ERROR "${log_output}")
+  endif()
+endfunction(latex_execute_latex)
+
 function(latex_makeglossaries)
   # This is really a bare bones port of the makeglossaries perl script into
   # CMake scripting.
@@ -492,10 +553,10 @@
         set(codepage_flags "")
       endif()
 
-      message("${XINDY_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} ${language_flags} ${codepage_flags} -I xindy -M ${glossary_name} -t ${glossary_log} -o ${glossary_out} ${glossary_in}"
+      message("${XINDY_COMPILER} ${MAKEGLOSSARIES_COMPILER_ARGS} ${language_flags} ${codepage_flags} -I xindy -M ${glossary_name} -t ${glossary_log} -o ${glossary_out} ${glossary_in}"
         )
       exec_program(${XINDY_COMPILER}
-        ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS}
+        ARGS ${MAKEGLOSSARIES_COMPILER_ARGS}
           ${language_flags}
           ${codepage_flags}
           -I xindy
@@ -514,7 +575,7 @@
       if("${xindy_output}" MATCHES "^Cannot locate xindy module for language (.+) in codepage (.+)\\.$")
         message("*************** Retrying xindy with default codepage.")
         exec_program(${XINDY_COMPILER}
-          ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS}
+          ARGS ${MAKEGLOSSARIES_COMPILER_ARGS}
             ${language_flags}
             -I xindy
             -M ${glossary_name}
@@ -525,8 +586,8 @@
       endif()
 
     else()
-      message("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}")
-      exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS}
+      message("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_ARGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}")
+      exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_ARGS}
         -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}
         )
     endif()
@@ -547,7 +608,7 @@
   set(nomencl_out ${LATEX_TARGET}.nls)
   set(nomencl_in ${LATEX_TARGET}.nlo)
 
-  exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKENOMENCLATURE_COMPILER_FLAGS}
+  exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKENOMENCLATURE_COMPILER_ARGS}
     ${nomencl_in} -s "nomencl.ist" -o ${nomencl_out}
     )
 endfunction(latex_makenomenclature)
@@ -610,6 +671,49 @@
 
 endfunction(latex_correct_synctex)
 
+function(latex_check_important_warnings)
+  set(log_file ${LATEX_TARGET}.log)
+
+  message("\nChecking ${log_file} for important warnings.")
+  if(NOT LATEX_TARGET)
+    message(SEND_ERROR "Need to define LATEX_TARGET")
+  endif()
+
+  if(NOT EXISTS ${log_file})
+    message("Could not find log file: ${log_file}")
+    return()
+  endif()
+
+  set(found_error)
+
+  # Check for undefined references
+  file(STRINGS ${log_file} reference_warnings REGEX "Reference.*undefined")
+  if(reference_warnings)
+    set(found_error TRUE)
+    message("\nFound missing reference warnings.")
+    foreach(warning ${reference_warnings})
+      message("${warning}")
+    endforeach(warning)
+  endif()
+
+  # Check for overfull
+  file(STRINGS ${log_file} overfull_warnings REGEX "^Overfull")
+  if(overfull_warnings)
+    set(found_error TRUE)
+    message("\nFound overfull warnings. These are indicative of layout errors.")
+    foreach(warning ${overfull_warnings})
+      message("${warning}")
+    endforeach(warning)
+  endif()
+
+  if(found_error)
+    latex_get_filename_component(log_file_path ${log_file} ABSOLUTE)
+    message("\nConsult ${log_file_path} for more information on LaTeX build.")
+  else()
+    message("No known important warnings found.")
+  endif(found_error)
+endfunction(latex_check_important_warnings)
+
 #############################################################################
 # Helper functions for establishing LaTeX build.
 #############################################################################
@@ -645,6 +749,12 @@
     DOC "The pdf to ps converter program from the Poppler package."
     )
 
+  find_program(HTLATEX_COMPILER
+    NAMES htlatex
+    PATHS ${MIKTEX_BINARY_PATH}
+      /usr/bin
+    )
+
   mark_as_advanced(
     LATEX_COMPILER
     PDFLATEX_COMPILER
@@ -656,38 +766,31 @@
     PS2PDF_CONVERTER
     PDFTOPS_CONVERTER
     LATEX2HTML_CONVERTER
+    HTLATEX_COMPILER
     )
 
   latex_needit(LATEX_COMPILER latex)
   latex_wantit(PDFLATEX_COMPILER pdflatex)
+  latex_wantit(HTLATEX_COMPILER htlatex)
   latex_needit(BIBTEX_COMPILER bibtex)
   latex_wantit(BIBER_COMPILER biber)
   latex_needit(MAKEINDEX_COMPILER makeindex)
   latex_wantit(DVIPS_CONVERTER dvips)
   latex_wantit(PS2PDF_CONVERTER ps2pdf)
   latex_wantit(PDFTOPS_CONVERTER pdftops)
-  # MiKTeX calls latex2html htlatex
-  if(NOT ${LATEX2HTML_CONVERTER})
-    find_program(HTLATEX_CONVERTER
-      NAMES htlatex
-      PATHS ${MIKTEX_BINARY_PATH}
-            /usr/bin
-      )
-    mark_as_advanced(HTLATEX_CONVERTER)
-    if(HTLATEX_CONVERTER)
-      set(USING_HTLATEX TRUE CACHE INTERNAL "True when using MiKTeX htlatex instead of latex2html" FORCE)
-      set(LATEX2HTML_CONVERTER ${HTLATEX_CONVERTER}
-        CACHE FILEPATH "htlatex taking the place of latex2html" FORCE)
-    else()
-      set(USING_HTLATEX FALSE CACHE INTERNAL "True when using MiKTeX htlatex instead of latex2html" FORCE)
-    endif()
-  endif()
-  latex_wantit(LATEX2HTML_CONVERTER latex2html)
 
-  set(LATEX_COMPILER_FLAGS "-interaction=nonstopmode"
+  set(LATEX_COMPILER_FLAGS "-interaction=batchmode -file-line-error"
     CACHE STRING "Flags passed to latex.")
   set(PDFLATEX_COMPILER_FLAGS ${LATEX_COMPILER_FLAGS}
     CACHE STRING "Flags passed to pdflatex.")
+  set(HTLATEX_COMPILER_TEX4HT_FLAGS "html"
+    CACHE STRING "Options for the tex4ht.sty and *.4ht style files.")
+  set(HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS ""
+    CACHE STRING "Options for the text4ht postprocessor.")
+  set(HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS ""
+    CACHE STRING "Options for the t4ht postprocessor.")
+  set(HTLATEX_COMPILER_LATEX_FLAGS ${LATEX_COMPILER_FLAGS}
+    CACHE STRING "Flags passed from htlatex to the LaTeX compiler.")
   set(LATEX_SYNCTEX_FLAGS "-synctex=1"
     CACHE STRING "latex/pdflatex flags used to create synctex file.")
   set(BIBTEX_COMPILER_FLAGS ""
@@ -702,15 +805,26 @@
     CACHE STRING "Flags passed to makenomenclature.")
   set(DVIPS_CONVERTER_FLAGS "-Ppdf -G0 -t letter"
     CACHE STRING "Flags passed to dvips.")
-  set(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct=100 -dCompatibilityLevel=1.3 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -dMonoImageFilter=/FlateEncode"
-    CACHE STRING "Flags passed to ps2pdf.")
-  set(PDFTOPS_CONVERTER_FLAGS -r 600
+  if(NOT WIN32)
+    set(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct=100 -dCompatibilityLevel=1.3 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -dMonoImageFilter=/FlateEncode"
+      CACHE STRING "Flags passed to ps2pdf.")
+  else()
+    # Most windows ports of ghostscript utilities use .bat files for ps2pdf
+    # commands. bat scripts interpret "=" as a special character and separate
+    # those arguments. To get around this, the ghostscript utilities also
+    # support using "#" in place of "=".
+    set(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct#100 -dCompatibilityLevel#1.3 -dSubsetFonts#true -dEmbedAllFonts#true -dAutoFilterColorImages#false -dAutoFilterGrayImages#false -dColorImageFilter#/FlateEncode -dGrayImageFilter#/FlateEncode -dMonoImageFilter#/FlateEncode"
+      CACHE STRING "Flags passed to ps2pdf.")
+  endif()
+  set(PDFTOPS_CONVERTER_FLAGS ""
     CACHE STRING "Flags passed to pdftops.")
-  set(LATEX2HTML_CONVERTER_FLAGS ""
-    CACHE STRING "Flags passed to latex2html.")
   mark_as_advanced(
     LATEX_COMPILER_FLAGS
     PDFLATEX_COMPILER_FLAGS
+    HTLATEX_COMPILER_TEX4HT_FLAGS
+    HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS
+    HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS
+    HTLATEX_COMPILER_LATEX_FLAGS
     LATEX_SYNCTEX_FLAGS
     BIBTEX_COMPILER_FLAGS
     BIBER_COMPILER_FLAGS
@@ -720,10 +834,17 @@
     DVIPS_CONVERTER_FLAGS
     PS2PDF_CONVERTER_FLAGS
     PDFTOPS_CONVERTER_FLAGS
-    LATEX2HTML_CONVERTER_FLAGS
     )
+
+  # Because it is easier to type, the flags variables are entered as
+  # space-separated strings much like you would in a shell. However, when
+  # using a CMake command to execute a program, it works better to hold the
+  # arguments in semicolon-separated lists (otherwise the whole string will
+  # be interpreted as a single argument). Use the separate_arguments to
+  # convert the space-separated strings to semicolon-separated lists.
   separate_arguments(LATEX_COMPILER_FLAGS)
   separate_arguments(PDFLATEX_COMPILER_FLAGS)
+  separate_arguments(HTLATEX_COMPILER_LATEX_FLAGS)
   separate_arguments(LATEX_SYNCTEX_FLAGS)
   separate_arguments(BIBTEX_COMPILER_FLAGS)
   separate_arguments(BIBER_COMPILER_FLAGS)
@@ -733,7 +854,24 @@
   separate_arguments(DVIPS_CONVERTER_FLAGS)
   separate_arguments(PS2PDF_CONVERTER_FLAGS)
   separate_arguments(PDFTOPS_CONVERTER_FLAGS)
-  separate_arguments(LATEX2HTML_CONVERTER_FLAGS)
+
+  # Not quite done. When you call separate_arguments on a cache variable,
+  # the result is written to a local variable. That local variable goes
+  # away when this function returns (which is before any of them are used).
+  # So, copy these variables with local scope to cache variables with
+  # global scope.
+  set(LATEX_COMPILER_ARGS "${LATEX_COMPILER_FLAGS}" CACHE INTERNAL "")
+  set(PDFLATEX_COMPILER_ARGS "${PDFLATEX_COMPILER_FLAGS}" CACHE INTERNAL "")
+  set(HTLATEX_COMPILER_ARGS "${HTLATEX_COMPILER_LATEX_FLAGS}" CACHE INTERNAL "")
+  set(LATEX_SYNCTEX_ARGS "${LATEX_SYNCTEX_FLAGS}" CACHE INTERNAL "")
+  set(BIBTEX_COMPILER_ARGS "${BIBTEX_COMPILER_FLAGS}" CACHE INTERNAL "")
+  set(BIBER_COMPILER_ARGS "${BIBER_COMPILER_FLAGS}" CACHE INTERNAL "")
+  set(MAKEINDEX_COMPILER_ARGS "${MAKEINDEX_COMPILER_FLAGS}" CACHE INTERNAL "")
+  set(MAKEGLOSSARIES_COMPILER_ARGS "${MAKEGLOSSARIES_COMPILER_FLAGS}" CACHE INTERNAL "")
+  set(MAKENOMENCLATURE_COMPILER_ARGS "${MAKENOMENCLATURE_COMPILER_FLAGS}" CACHE INTERNAL "")
+  set(DVIPS_CONVERTER_ARGS "${DVIPS_CONVERTER_FLAGS}" CACHE INTERNAL "")
+  set(PS2PDF_CONVERTER_ARGS "${PS2PDF_CONVERTER_FLAGS}" CACHE INTERNAL "")
+  set(PDFTOPS_CONVERTER_ARGS "${PDFTOPS_CONVERTER_FLAGS}" CACHE INTERNAL "")
 
   find_program(IMAGEMAGICK_CONVERT
     NAMES magick convert
@@ -875,7 +1013,7 @@
     if(PS2PDF_CONVERTER)
       set(require_imagemagick_convert FALSE)
       set(converter ${PS2PDF_CONVERTER})
-      set(convert_flags -dEPSCrop ${PS2PDF_CONVERTER_FLAGS})
+      set(convert_flags -dEPSCrop ${PS2PDF_CONVERTER_ARGS})
     else()
       message(SEND_ERROR "Using postscript files with pdflatex requires ps2pdf for conversion.")
     endif()
@@ -886,7 +1024,7 @@
     if(PDFTOPS_CONVERTER)
       set(require_imagemagick_convert FALSE)
       set(converter ${PDFTOPS_CONVERTER})
-      set(convert_flags -eps ${PDFTOPS_CONVERTER_FLAGS})
+      set(convert_flags -eps ${PDFTOPS_CONVERTER_ARGS})
     else()
       message(STATUS "Consider getting pdftops from Poppler to convert PDF images to EPS images.")
       set(convert_flags ${flags})
@@ -902,17 +1040,24 @@
         message(SEND_ERROR "IMAGEMAGICK_CONVERT set to Window's convert.exe for changing file systems rather than ImageMagick's convert for changing image formats. Please make sure ImageMagick is installed (available at http://www.imagemagick.org). If you have a recent version of ImageMagick (7.0 or higher), use the magick program instead of convert for IMAGEMAGICK_CONVERT.")
       else()
         set(converter ${IMAGEMAGICK_CONVERT})
+        # ImageMagick requires a special order of arguments where resize and
+        # arguments of that nature must be placed after the input image path.
+        add_custom_command(OUTPUT ${output_path}
+          COMMAND ${converter}
+            ARGS ${input_path} ${convert_flags} ${output_path}
+          DEPENDS ${input_path}
+          )
       endif()
     else()
       message(SEND_ERROR "Could not find convert program. Please download ImageMagick from http://www.imagemagick.org and install.")
     endif()
+  else() # Not ImageMagick convert
+    add_custom_command(OUTPUT ${output_path}
+      COMMAND ${converter}
+        ARGS ${convert_flags} ${input_path} ${output_path}
+      DEPENDS ${input_path}
+      )
   endif()
-
-  add_custom_command(OUTPUT ${output_path}
-    COMMAND ${converter}
-      ARGS ${convert_flags} ${input_path} ${output_path}
-    DEPENDS ${input_path}
-    )
 endfunction(latex_add_convert_command)
 
 # Makes custom commands to convert a file to a particular type.
@@ -1157,18 +1302,42 @@
 
 function(add_latex_targets_internal)
   if(LATEX_USE_SYNCTEX)
-    set(synctex_flags ${LATEX_SYNCTEX_FLAGS})
+    set(synctex_flags ${LATEX_SYNCTEX_ARGS})
   else()
     set(synctex_flags)
   endif()
 
   # The commands to run LaTeX.  They are repeated multiple times.
   set(latex_build_command
-    ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
+    ${LATEX_COMPILER} ${LATEX_COMPILER_ARGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
     )
+  if(LATEX_COMPILER_ARGS MATCHES ".*batchmode.*")
+    # Wrap command in script that dumps the log file on error. This makes sure
+    # errors can be seen.
+    set(latex_build_command
+      ${CMAKE_COMMAND}
+        -D LATEX_BUILD_COMMAND=execute_latex
+        -D LATEX_TARGET=${LATEX_TARGET}
+        -D LATEX_WORKING_DIRECTORY="${output_dir}"
+        -D LATEX_FULL_COMMAND="${latex_build_command}"
+        -P "${LATEX_USE_LATEX_LOCATION}"
+      )
+  endif()
   set(pdflatex_build_command
-    ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
+    ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_ARGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
     )
+  if(PDFLATEX_COMPILER_ARGS MATCHES ".*batchmode.*")
+    # Wrap command in script that dumps the log file on error. This makes sure
+    # errors can be seen.
+    set(pdflatex_build_command
+      ${CMAKE_COMMAND}
+        -D LATEX_BUILD_COMMAND=execute_latex
+        -D LATEX_TARGET=${LATEX_TARGET}
+        -D LATEX_WORKING_DIRECTORY="${output_dir}"
+        -D LATEX_FULL_COMMAND="${pdflatex_build_command}"
+        -P "${LATEX_USE_LATEX_LOCATION}"
+      )
+  endif()
 
   if(NOT LATEX_TARGET_NAME)
     set(LATEX_TARGET_NAME ${LATEX_TARGET})
@@ -1267,7 +1436,7 @@
         -D LATEX_TARGET=${LATEX_TARGET}
         -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
         -D XINDY_COMPILER=${XINDY_COMPILER}
-        -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS}
+        -D MAKEGLOSSARIES_COMPILER_ARGS=${MAKEGLOSSARIES_COMPILER_ARGS}
         -P ${LATEX_USE_LATEX_LOCATION}
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
         ${latex_build_command}
@@ -1279,7 +1448,7 @@
         -D LATEX_TARGET=${LATEX_TARGET}
         -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
         -D XINDY_COMPILER=${XINDY_COMPILER}
-        -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS}
+        -D MAKEGLOSSARIES_COMPILER_ARGS=${MAKEGLOSSARIES_COMPILER_ARGS}
         -P ${LATEX_USE_LATEX_LOCATION}
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
         ${pdflatex_build_command}
@@ -1295,7 +1464,7 @@
         -D LATEX_BUILD_COMMAND=makenomenclature
         -D LATEX_TARGET=${LATEX_TARGET}
         -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
-        -D MAKENOMENCLATURE_COMPILER_FLAGS=${MAKENOMENCLATURE_COMPILER_FLAGS}
+        -D MAKENOMENCLATURE_COMPILER_ARGS=${MAKENOMENCLATURE_COMPILER_ARGS}
         -P ${LATEX_USE_LATEX_LOCATION}
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
         ${latex_build_command}
@@ -1306,7 +1475,7 @@
         -D LATEX_BUILD_COMMAND=makenomenclature
         -D LATEX_TARGET=${LATEX_TARGET}
         -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
-        -D MAKENOMENCLATURE_COMPILER_FLAGS=${MAKENOMENCLATURE_COMPILER_FLAGS}
+        -D MAKENOMENCLATURE_COMPILER_ARGS=${MAKENOMENCLATURE_COMPILER_ARGS}
         -P ${LATEX_USE_LATEX_LOCATION}
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
         ${pdflatex_build_command}
@@ -1317,13 +1486,13 @@
   if(LATEX_BIBFILES)
     if(LATEX_USE_BIBLATEX)
       if(NOT BIBER_COMPILER)
-	message(SEND_ERROR "I need the biber command.")
+        message(SEND_ERROR "I need the biber command.")
       endif()
       set(bib_compiler ${BIBER_COMPILER})
-      set(bib_compiler_flags ${BIBER_COMPILER_FLAGS})
+      set(bib_compiler_flags ${BIBER_COMPILER_ARGS})
     else()
       set(bib_compiler ${BIBTEX_COMPILER})
-      set(bib_compiler_flags ${BIBTEX_COMPILER_FLAGS})
+      set(bib_compiler_flags ${BIBTEX_COMPILER_ARGS})
     endif() 
     if(LATEX_MULTIBIB_NEWCITES)
       foreach (multibib_auxfile ${LATEX_MULTIBIB_NEWCITES})
@@ -1367,12 +1536,12 @@
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
         ${latex_build_command}
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-        ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${idx_name}.idx)
+        ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_ARGS} ${idx_name}.idx)
       set(make_pdf_command ${make_pdf_command}
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
         ${pdflatex_build_command}
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-        ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${idx_name}.idx)
+        ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_ARGS} ${idx_name}.idx)
       set(auxiliary_clean_files ${auxiliary_clean_files}
         ${output_dir}/${idx_name}.idx
         ${output_dir}/${idx_name}.ilg
@@ -1430,6 +1599,22 @@
       )
   endif()
 
+  # Check LaTeX output for important warnings at end of build
+  set(make_dvi_command ${make_dvi_command}
+    COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+    ${CMAKE_COMMAND}
+      -D LATEX_BUILD_COMMAND=check_important_warnings
+      -D LATEX_TARGET=${LATEX_TARGET}
+      -P ${LATEX_USE_LATEX_LOCATION}
+    )
+  set(make_pdf_command ${make_pdf_command}
+    COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+    ${CMAKE_COMMAND}
+      -D LATEX_BUILD_COMMAND=check_important_warnings
+      -D LATEX_TARGET=${LATEX_TARGET}
+      -P ${LATEX_USE_LATEX_LOCATION}
+    )
+
   # Capture the default build.
   string(TOLOWER "${LATEX_DEFAULT_BUILD}" default_build)
 
@@ -1483,7 +1668,7 @@
     if(DVIPS_CONVERTER)
       add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.ps
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-        ${DVIPS_CONVERTER} ${DVIPS_CONVERTER_FLAGS} -o ${LATEX_TARGET}.ps ${LATEX_TARGET}.dvi
+        ${DVIPS_CONVERTER} ${DVIPS_CONVERTER_ARGS} -o ${LATEX_TARGET}.ps ${LATEX_TARGET}.dvi
         DEPENDS ${output_dir}/${LATEX_TARGET}.dvi)
       add_custom_target(${ps_target}
         DEPENDS ${output_dir}/${LATEX_TARGET}.ps
@@ -1498,7 +1683,7 @@
         # simply force a recompile every time.
         add_custom_target(${safepdf_target}
           ${CMAKE_COMMAND} -E chdir ${output_dir}
-          ${PS2PDF_CONVERTER} ${PS2PDF_CONVERTER_FLAGS} ${LATEX_TARGET}.ps ${LATEX_TARGET}.pdf
+          ${PS2PDF_CONVERTER} ${PS2PDF_CONVERTER_ARGS} ${LATEX_TARGET}.ps ${LATEX_TARGET}.pdf
           DEPENDS ${ps_target}
           )
         if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
@@ -1513,10 +1698,10 @@
       set(default_build html)
     endif()
 
-    if(LATEX2HTML_CONVERTER AND LATEX_MAIN_INPUT_SUBDIR)
+    if(HTLATEX_COMPILER AND LATEX_MAIN_INPUT_SUBDIR)
       message(STATUS
-	"Disabling HTML build for ${LATEX_TARGET_NAME}.tex because the main file is in subdirectory ${LATEX_MAIN_INPUT_SUBDIR}"
-	)
+        "Disabling HTML build for ${LATEX_TARGET_NAME}.tex because the main file is in subdirectory ${LATEX_MAIN_INPUT_SUBDIR}"
+        )
       # The code below to run HTML assumes that LATEX_TARGET.tex is in the
       # current directory. I have tried to specify that LATEX_TARGET.tex is
       # in a subdirectory. That makes the build targets correct, but the
@@ -1524,17 +1709,20 @@
       # generated where expected. I am getting around the problem by simply
       # disabling HTML in this case. If someone really cares, they can fix
       # this, but make sure it runs on many platforms and build programs.
-    elseif(LATEX2HTML_CONVERTER)
-      if(USING_HTLATEX)
-        # htlatex places the output in a different location
-        set(HTML_OUTPUT "${output_dir}/${LATEX_TARGET}.html")
-      else()
-        set(HTML_OUTPUT "${output_dir}/${LATEX_TARGET}/${LATEX_TARGET}.html")
-      endif()
+    elseif(HTLATEX_COMPILER)
+      # htlatex places the output in a different location
+      set(HTML_OUTPUT "${output_dir}/${LATEX_TARGET}.html")
       add_custom_command(OUTPUT ${HTML_OUTPUT}
         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-          ${LATEX2HTML_CONVERTER} ${LATEX2HTML_CONVERTER_FLAGS} ${LATEX_MAIN_INPUT}
-        DEPENDS ${output_dir}/${LATEX_TARGET}.tex
+          ${HTLATEX_COMPILER} ${LATEX_MAIN_INPUT}
+          "${HTLATEX_COMPILER_TEX4HT_FLAGS}"
+          "${HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS}"
+          "${HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS}"
+          ${HTLATEX_COMPILER_ARGS}
+        DEPENDS
+          ${output_dir}/${LATEX_TARGET}.tex
+          ${output_dir}/${LATEX_TARGET}.dvi
+        VERBATIM
         )
       add_custom_target(${html_target}
         DEPENDS ${HTML_OUTPUT} ${dvi_target}
@@ -1616,6 +1804,11 @@
 if(LATEX_BUILD_COMMAND)
   set(command_handled)
 
+  if("${LATEX_BUILD_COMMAND}" STREQUAL execute_latex)
+    latex_execute_latex()
+    set(command_handled TRUE)
+  endif()
+
   if("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries)
     latex_makeglossaries()
     set(command_handled TRUE)
@@ -1631,6 +1824,11 @@
     set(command_handled TRUE)
   endif()
 
+  if("${LATEX_BUILD_COMMAND}" STREQUAL check_important_warnings)
+    latex_check_important_warnings()
+    set(command_handled TRUE)
+  endif()
+
   if(NOT command_handled)
     message(SEND_ERROR "Unknown command: ${LATEX_BUILD_COMMAND}")
   endif()