changeset 2:de4bd4784796

Finish the CMake serie
author Louis Opter <louis@lse.epitech.net>
date Thu, 05 Jan 2012 15:08:50 +0100
parents 2213af0b61f0
children 2389c2bc501f
files maintainers_add_rathaxes_cmake_library.patch maintainers_fix_buildbot_build_mkdir.patch maintainers_improve_add_rathaxes_executable.patch maintainers_update_use_latex.cmake rathaxes_add_the_output_option_to_rathaxes_generate.patch rathaxes_replace_generate_by_a_cmakelist.patch series
diffstat 7 files changed, 0 insertions(+), 1157 deletions(-) [+]
line wrap: on
line diff
--- a/maintainers_add_rathaxes_cmake_library.patch	Sun Jan 01 15:56:47 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,229 +0,0 @@
-# HG changeset patch
-# Parent 237e60d20f4fd8063a48ff47cf37a8072f55478c
-maintainers: add a new CMake "library" UseRathaxes.cmake to add a minimal Rathaxes support into CMake
-
-- Add the new ADD_RATHAXES_EXECUTABLE function to build a .rtx target;
-- No more generated files in the source directory;
-- No more tedious generate shell script to write;
-- ADD_RATHAXES_TEST is renamed to ADD_RATHAXES_CWS_TEST.
-
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -33,7 +33,7 @@
- INCLUDE(AddFileDependencies)
- INCLUDE(FileCopy)
- INCLUDE(RathaxesCopyLatexClasses)
--INCLUDE(AddRathaxesTest)
-+INCLUDE(UseRathaxes)
- 
- # Global definitions ###########################################################
- 
-diff --git a/maintainers/CMakeScripts/AddRathaxesTest.cmake b/maintainers/CMakeScripts/AddRathaxesTest.cmake
-deleted file mode 100644
---- a/maintainers/CMakeScripts/AddRathaxesTest.cmake
-+++ /dev/null
-@@ -1,8 +0,0 @@
--# This function call codeworker + cnorm with the given codeworker script.
--#
--# The codeworker script must return 0 on success.
--
--FUNCTION(ADD_RATHAXES_TEST CW_SCRIPT)
--    STRING(REGEX MATCH "(.*)\\.cws$" TEST_NAME "${CW_SCRIPT}")
--    ADD_TEST("Rathaxes_${TEST_NAME}" ${CODEWORKER_BINARY_PATH} "-I" "${RATHAXES_SOURCE_DIR}/maintainers/cnorm/src" "-I" "${RATHAXES_SOURCE_DIR}/rathaxes/compiler/" "-script" "${CMAKE_CURRENT_SOURCE_DIR}/${CW_SCRIPT}" "-args" "${RATHAXES_SOURCE_DIR}/rathaxes")
--ENDFUNCTION(ADD_RATHAXES_TEST CW_SCRIPT)
-diff --git a/maintainers/CMakeScripts/UseRathaxes.cmake b/maintainers/CMakeScripts/UseRathaxes.cmake
-new file mode 100644
---- /dev/null
-+++ b/maintainers/CMakeScripts/UseRathaxes.cmake
-@@ -0,0 +1,119 @@
-+FUNCTION(_RTX_PARSE_OPTIONS ARGS RTI_OUT BLT_OUT SYSTEM_OUT)
-+    SET(OPTIONS "RTI" "BLT" "SYSTEM")
-+    SET(FILE_LISTS ${RTI_OUT} ${BLT_OUT} ${SYSTEM_OUT})
-+
-+    FOREACH(I ${ARGS})
-+        LIST(FIND OPTIONS "${I}" OPTION_IDX)
-+        IF (NOT ${OPTION_IDX} EQUAL -1)
-+            LIST(GET FILE_LISTS ${OPTION_IDX} CURRENT_FILE_LIST)
-+        ELSE (NOT ${OPTION_IDX} EQUAL -1)
-+            IF (DEFINED CURRENT_FILE_LIST)
-+                LIST(APPEND ${CURRENT_FILE_LIST} "${I}")
-+            ELSE (DEFINED CURRENT_FILE_LIST)
-+                MESSAGE(SEND_ERROR "Unexpected argument: ${I}")
-+            ENDIF (DEFINED CURRENT_FILE_LIST)
-+        ENDIF (NOT ${OPTION_IDX} EQUAL -1)
-+    ENDFOREACH(I ${ARGS})
-+
-+    IF (NOT DEFINED ${SYSTEM_OUT})
-+        SET(${SYSTEM_OUT} ${CMAKE_SYSTEM_NAME})
-+    ENDIF (NOT DEFINED ${SYSTEM_OUT})
-+
-+    # It's a "return value" variable so we have to "export" it with
-+    # PARENT_SCOPE, otherwise it will stay local to the function.
-+    #
-+    # {RTI,BLT,SYSTEM}_OUT point to a variable name hence the double
-+    # expand to get the value.
-+    SET(${RTI_OUT} ${${RTI_OUT}} PARENT_SCOPE)
-+    SET(${BLT_OUT} ${${BLT_OUT}} PARENT_SCOPE)
-+    SET(${SYSTEM_OUT} ${${SYSTEM_OUT}} PARENT_SCOPE)
-+ENDFUNCTION(_RTX_PARSE_OPTIONS ARGS RTI_OUT BLT_OUT)
-+
-+FUNCTION(_RTX_GENERATE_BUILD_COMMANDS REGISTER_COMMANDS_OUT RTI_FILES BLT_FILES GENERATE_COMMANDS_OUT SYSTEMS)
-+    FOREACH(RTI ${RTI_FILES})
-+        LIST(APPEND ${REGISTER_COMMANDS_OUT}
-+             "COMMAND" ${_RTX_CODEWORKER_COMMAND}
-+             "rti-register" "${CMAKE_CURRENT_SOURCE_DIR}/${RTI}")
-+    ENDFOREACH(RTI ${RTI_FILES})
-+
-+    FOREACH(BLT ${BLT_FILES})
-+        LIST(APPEND ${REGISTER_COMMANDS_OUT}
-+            "COMMAND" ${_RTX_CODEWORKER_COMMAND}
-+            "blt-register" "${CMAKE_CURRENT_SOURCE_DIR}/${BLT}")
-+    ENDFOREACH(BLT ${BLT_FILES})
-+
-+    FOREACH(OS ${SYSTEMS})
-+        LIST(APPEND ${GENERATE_COMMANDS_OUT}
-+             COMMAND ${_RTX_CODEWORKER_COMMAND}
-+             "generate" "${OS}"
-+             "${CMAKE_CURRENT_SOURCE_DIR}/${RTX_FILE}")
-+    ENDFOREACH(OS ${SYSTEMS})
-+
-+    SET(${REGISTER_COMMANDS_OUT} ${${REGISTER_COMMANDS_OUT}} PARENT_SCOPE)
-+    SET(${GENERATE_COMMANDS_OUT} ${${GENERATE_COMMANDS_OUT}} PARENT_SCOPE)
-+ENDFUNCTION(_RTX_GENERATE_BUILD_COMMANDS REGISTER_COMMANDS_OUT RTI_FILES BLT_FILES GENERATE_COMMANDS_OUT SYSTEMS)
-+
-+# This function will build a Rathaxes target. Usage:
-+#
-+# ADD_RATHAXES_EXECUTABLE(hello.rtx
-+#                         [RTI hello.rti [file.rti]]
-+#                         [BLT hello.blt [file.blt]]
-+#                         [SYSTEM windows [linux]])
-+#
-+# Files are built in the same order as they are listed, except for the rtx file
-+# which is built last.
-+#
-+# If no system are specified with SYSTEM then the source will be generated for
-+# the current system (as in CMAKE_SYSTEM_NAME).
-+#
-+# At some point we will certainly have our own language definition for CMake
-+# but let's start with simpler things.
-+FUNCTION(ADD_RATHAXES_EXECUTABLE OUT_NAME RTX_FILE)
-+    SET(_RTX_CODEWORKER_COMMAND
-+        ${CODEWORKER_BINARY_PATH} "-nologo"
-+        "-I" "${RATHAXES_SOURCE_DIR}/maintainers/cnorm/src"
-+        "-I" "${RATHAXES_SOURCE_DIR}/rathaxes/compiler/"
-+        "-script" "${CMAKE_SOURCE_DIR}/rathaxes/compiler/rathaxes.cws"
-+        "-args" "${CMAKE_SOURCE_DIR}/rathaxes/" "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/RathaxesCache/")
-+
-+    LIST(REMOVE_ITEM ARGV ${OUT_NAME} ${RTX_FILE})
-+
-+    # We have to expand ARGV inside quotes, so it expand as a single LIST
-+    # argument (otherwise it would expand as different arguments).
-+    _RTX_PARSE_OPTIONS("${ARGV}" RTI_FILES BLT_FILES SYSTEMS)
-+
-+    _RTX_GENERATE_BUILD_COMMANDS(REGISTER_COMMANDS
-+                                 "${RTI_FILES}"
-+                                 "${BLT_FILES}"
-+                                 GENERATE_COMMANDS
-+                                 "${SYSTEMS}")
-+
-+    # As soon as we start to write the generation result to files this should
-+    # be translated to an ADD_CUSTOM_COMMAND:
-+    ADD_CUSTOM_TARGET(${OUT_NAME}
-+                      ${_RTX_CODEWORKER_COMMAND} "cache" "clear"
-+                      ${REGISTER_COMMANDS}
-+                      COMMENT "Registering .rti and .blt for the Rathaxes target ${OUT_NAME}"
-+                      VERBATIM
-+                      SOURCES ${RTX_FILE} ${RTI_FILES} ${BLT_FILES})
-+
-+    STRING(REPLACE ";" ", " SYSTEMS "${SYSTEMS}")
-+    ADD_CUSTOM_COMMAND(TARGET ${OUT_NAME} POST_BUILD
-+                       ${GENERATE_COMMANDS}
-+                       COMMENT "Building Rathaxes target ${OUT_NAME} for ${SYSTEMS}"
-+                       VERBATIM)
-+ENDFUNCTION(ADD_RATHAXES_EXECUTABLE OUT_NAME RTX_FILE)
-+
-+# This function call codeworker + cnorm with the given codeworker script. The
-+# path to the rathaxes source directory is given as the first argument (arg[0]).
-+#
-+# The codeworker script must return 0 on success.
-+FUNCTION(ADD_RATHAXES_CWS_TEST CW_SCRIPT)
-+    STRING(REGEX MATCH "(.*)\\.cws$" TEST_NAME "${CW_SCRIPT}")
-+    ADD_TEST("Rathaxes_${TEST_NAME}"
-+             ${CODEWORKER_BINARY_PATH}
-+             "-I" "${RATHAXES_SOURCE_DIR}/maintainers/cnorm/src"
-+             "-I" "${RATHAXES_SOURCE_DIR}/rathaxes/compiler/"
-+             "-script" "${CMAKE_CURRENT_SOURCE_DIR}/${CW_SCRIPT}"
-+             "-args" "${RATHAXES_SOURCE_DIR}/rathaxes")
-+ENDFUNCTION(ADD_RATHAXES_CWS_TEST CW_SCRIPT)
-diff --git a/rathaxes/compiler/tests/CMakeLists.txt b/rathaxes/compiler/tests/CMakeLists.txt
---- a/rathaxes/compiler/tests/CMakeLists.txt
-+++ b/rathaxes/compiler/tests/CMakeLists.txt
-@@ -1,39 +1,39 @@
- # Pure backend compilation and resolution tests
--ADD_RATHAXES_TEST(01_A_test_back_parse.cws)
--ADD_RATHAXES_TEST(01_B_test_back_compile.cws)
--ADD_RATHAXES_TEST(01_C_test_back_meta.cws)
--ADD_RATHAXES_TEST(01_D_test_back_type_hash.cws)
--ADD_RATHAXES_TEST(01_E_test_back_introspect.cws)
--ADD_RATHAXES_TEST(01_F_test_back_gen.cws)
--ADD_RATHAXES_TEST(01_G_test_back_registerToCache.cws)
--ADD_RATHAXES_TEST(01_H_test_back_loadFromCache.cws)
--ADD_RATHAXES_TEST(01_I_test_back_resolveCall.cws)
--ADD_RATHAXES_TEST(01_J_test_back_resolvePointcut.cws)
--ADD_RATHAXES_TEST(01_K_test_back_resolvePointcutDefault.cws)
--ADD_RATHAXES_TEST(01_L_test_back_resolveTypeMapping.cws)
--ADD_RATHAXES_TEST(01_M_test_back_resolveTypeChunkCall.cws)
--ADD_RATHAXES_TEST(01_N_test_back_resolveSequenceCall.cws)
-+ADD_RATHAXES_CWS_TEST(01_A_test_back_parse.cws)
-+ADD_RATHAXES_CWS_TEST(01_B_test_back_compile.cws)
-+ADD_RATHAXES_CWS_TEST(01_C_test_back_meta.cws)
-+ADD_RATHAXES_CWS_TEST(01_D_test_back_type_hash.cws)
-+ADD_RATHAXES_CWS_TEST(01_E_test_back_introspect.cws)
-+ADD_RATHAXES_CWS_TEST(01_F_test_back_gen.cws)
-+ADD_RATHAXES_CWS_TEST(01_G_test_back_registerToCache.cws)
-+ADD_RATHAXES_CWS_TEST(01_H_test_back_loadFromCache.cws)
-+ADD_RATHAXES_CWS_TEST(01_I_test_back_resolveCall.cws)
-+ADD_RATHAXES_CWS_TEST(01_J_test_back_resolvePointcut.cws)
-+ADD_RATHAXES_CWS_TEST(01_K_test_back_resolvePointcutDefault.cws)
-+ADD_RATHAXES_CWS_TEST(01_L_test_back_resolveTypeMapping.cws)
-+ADD_RATHAXES_CWS_TEST(01_M_test_back_resolveTypeChunkCall.cws)
-+ADD_RATHAXES_CWS_TEST(01_N_test_back_resolveSequenceCall.cws)
- 
- # Pure middle-end validation tests
--ADD_RATHAXES_TEST(02_A_test_middle_parse.cws)
--ADD_RATHAXES_TEST(02_B_test_middle_parse_rti_file.cws)
--ADD_RATHAXES_TEST(02_C_test_middle_check_inheritance.cws)
--ADD_RATHAXES_TEST(02_D_test_middle_check_types_declaration.cws)
-+ADD_RATHAXES_CWS_TEST(02_A_test_middle_parse.cws)
-+ADD_RATHAXES_CWS_TEST(02_B_test_middle_parse_rti_file.cws)
-+ADD_RATHAXES_CWS_TEST(02_C_test_middle_check_inheritance.cws)
-+ADD_RATHAXES_CWS_TEST(02_D_test_middle_check_types_declaration.cws)
- 
- # Required for test 2_B
- FILE_COPY(full_lkm/simplified_lkm.rti full_lkm/simplified_lkm.rti)
- 
- # Tests for configuration matching (against with blocks)
--ADD_RATHAXES_TEST(03_A_test_config_match_lesser.cws)
--ADD_RATHAXES_TEST(03_B_test_config_match_lesser_or_equal.cws)
--ADD_RATHAXES_TEST(03_C_test_config_match_equal.cws)
--ADD_RATHAXES_TEST(03_D_test_config_match_greater_or_equal.cws)
--ADD_RATHAXES_TEST(03_E_test_config_match_greater.cws)
--ADD_RATHAXES_TEST(03_F_test_config_match.cws)
-+ADD_RATHAXES_CWS_TEST(03_A_test_config_match_lesser.cws)
-+ADD_RATHAXES_CWS_TEST(03_B_test_config_match_lesser_or_equal.cws)
-+ADD_RATHAXES_CWS_TEST(03_C_test_config_match_equal.cws)
-+ADD_RATHAXES_CWS_TEST(03_D_test_config_match_greater_or_equal.cws)
-+ADD_RATHAXES_CWS_TEST(03_E_test_config_match_greater.cws)
-+ADD_RATHAXES_CWS_TEST(03_F_test_config_match.cws)
- 
- # Tests for the Front-end
--ADD_RATHAXES_TEST(04_A_test_front_parse.cws)
-+ADD_RATHAXES_CWS_TEST(04_A_test_front_parse.cws)
- 
- # Tests for Link module
--ADD_RATHAXES_TEST(05_A_test_link_merge.cws)
--ADD_RATHAXES_TEST(05_B_test_link_merge_conflict.cws)
-+ADD_RATHAXES_CWS_TEST(05_A_test_link_merge.cws)
-+ADD_RATHAXES_CWS_TEST(05_B_test_link_merge_conflict.cws)
--- a/maintainers_fix_buildbot_build_mkdir.patch	Sun Jan 01 15:56:47 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-# HG changeset patch
-# Parent 1e3eba44b04af9bee8927b33a455a69a38675c6e
-maintainers: improve the buildbot master configuration to use cmake -E to create the build directory instead of a shell snippet (which would break on Windows)
-
-diff --git a/maintainers/buildbot/master/master-dotcloud.cfg b/maintainers/buildbot/master/master-dotcloud.cfg
---- a/maintainers/buildbot/master/master-dotcloud.cfg
-+++ b/maintainers/buildbot/master/master-dotcloud.cfg
-@@ -64,7 +64,7 @@
- 
- fullbuild_factory = BuildFactory()
- fullbuild_factory.addStep(Mercurial(repourl='https://code.google.com/p/rathaxes', method='clean', branchType='inrepo'))
--fullbuild_factory.addStep(ShellCommand(command='mkdir build || :', lazylogfiles=True))
-+fullbuild_factory.addStep(ShellCommand(command=['cmake', '-E', 'make_directory', 'build'], lazylogfiles=True))
- # The default is already build/ thus build/build
- fullbuild_factory.addStep(Configure(command=['cmake', '-DCMAKE_BUILD_TYPE=RELEASE', '..'], workdir='build/build'))
- fullbuild_factory.addStep(Compile(workdir='build/build'))
--- a/maintainers_improve_add_rathaxes_executable.patch	Sun Jan 01 15:56:47 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-# HG changeset patch
-# Parent 4ea23ed6f787e6ef986cc7fee99d2e77c257c737
-maintainers: improve the little CMake Rathaxes library to take advantage of the new `/o' option of rathaxes generate
-
-diff --git a/maintainers/CMakeScripts/UseRathaxes.cmake b/maintainers/CMakeScripts/UseRathaxes.cmake
---- a/maintainers/CMakeScripts/UseRathaxes.cmake
-+++ b/maintainers/CMakeScripts/UseRathaxes.cmake
-@@ -29,7 +29,13 @@
-     SET(${SYSTEM_OUT} ${${SYSTEM_OUT}} PARENT_SCOPE)
- ENDFUNCTION(_RTX_PARSE_OPTIONS ARGS RTI_OUT BLT_OUT)
- 
--FUNCTION(_RTX_GENERATE_BUILD_COMMANDS REGISTER_COMMANDS_OUT RTI_FILES BLT_FILES GENERATE_COMMANDS_OUT SYSTEMS)
-+FUNCTION(_RTX_GENERATE_BUILD_COMMANDS
-+         OUT_NAME               # [in] Name of the target
-+         REGISTER_COMMANDS_OUT  # [out] rathaxes [rti,blt]-registers commands
-+         RTI_FILES BLT_FILES    # [in, in] rti and blt files
-+         GENERATE_COMMANDS_OUT  # [out] rathaxes generate /o commands
-+         OUTPUTS                # [out] name of each generate file
-+         SYSTEMS)               # [in] name of each target system
-     FOREACH(RTI ${RTI_FILES})
-         LIST(APPEND ${REGISTER_COMMANDS_OUT}
-              "COMMAND" ${_RTX_CODEWORKER_COMMAND}
-@@ -43,15 +49,25 @@
-     ENDFOREACH(BLT ${BLT_FILES})
- 
-     FOREACH(OS ${SYSTEMS})
-+        LIST(APPEND ${OUTPUTS} "${OUT_NAME}_${OS}.c")
-+        # At some point I guess we will use different directories instead of
-+        # different file names.
-         LIST(APPEND ${GENERATE_COMMANDS_OUT}
-              COMMAND ${_RTX_CODEWORKER_COMMAND}
--             "generate" "${OS}"
-+             "generate" "/o" "${OUT_NAME}_${OS}.c" "${OS}"
-              "${CMAKE_CURRENT_SOURCE_DIR}/${RTX_FILE}")
-     ENDFOREACH(OS ${SYSTEMS})
- 
-     SET(${REGISTER_COMMANDS_OUT} ${${REGISTER_COMMANDS_OUT}} PARENT_SCOPE)
-     SET(${GENERATE_COMMANDS_OUT} ${${GENERATE_COMMANDS_OUT}} PARENT_SCOPE)
--ENDFUNCTION(_RTX_GENERATE_BUILD_COMMANDS REGISTER_COMMANDS_OUT RTI_FILES BLT_FILES GENERATE_COMMANDS_OUT SYSTEMS)
-+    SET(${OUTPUTS} ${${OUTPUTS}} PARENT_SCOPE)
-+ENDFUNCTION(_RTX_GENERATE_BUILD_COMMANDS
-+            OUT_NAME
-+            REGISTER_COMMANDS_OUT
-+            RTI_FILES BLT_FILES
-+            GENERATE_COMMANDS_OUT
-+            OUTPUTS
-+            SYSTEMS)
- 
- # This function will build a Rathaxes target. Usage:
- #
-@@ -82,26 +98,24 @@
-     # argument (otherwise it would expand as different arguments).
-     _RTX_PARSE_OPTIONS("${ARGV}" RTI_FILES BLT_FILES SYSTEMS)
- 
--    _RTX_GENERATE_BUILD_COMMANDS(REGISTER_COMMANDS
-+    _RTX_GENERATE_BUILD_COMMANDS(${OUT_NAME}
-+                                 REGISTER_COMMANDS
-                                  "${RTI_FILES}"
-                                  "${BLT_FILES}"
-                                  GENERATE_COMMANDS
-+                                 OUTPUTS
-                                  "${SYSTEMS}")
- 
--    # As soon as we start to write the generation result to files this should
--    # be translated to an ADD_CUSTOM_COMMAND:
--    ADD_CUSTOM_TARGET(${OUT_NAME}
--                      ${_RTX_CODEWORKER_COMMAND} "cache" "clear"
--                      ${REGISTER_COMMANDS}
--                      COMMENT "Registering .rti and .blt for the Rathaxes target ${OUT_NAME}"
--                      VERBATIM
--                      SOURCES ${RTX_FILE} ${RTI_FILES} ${BLT_FILES})
--
-     STRING(REPLACE ";" ", " SYSTEMS "${SYSTEMS}")
--    ADD_CUSTOM_COMMAND(TARGET ${OUT_NAME} POST_BUILD
-+    ADD_CUSTOM_COMMAND(OUTPUT ${OUTPUTS}
-+                       COMMAND ${_RTX_CODEWORKER_COMMAND} "cache" "clear"
-+                       ${REGISTER_COMMANDS}
-                        ${GENERATE_COMMANDS}
-                        COMMENT "Building Rathaxes target ${OUT_NAME} for ${SYSTEMS}"
--                       VERBATIM)
-+                       VERBATIM
-+                       DEPENDS ${RTX_FILE} ${RTI_FILES} ${BLT_FILES})
-+
-+    ADD_CUSTOM_TARGET(${OUT_NAME} ALL DEPENDS ${OUTPUTS})
- ENDFUNCTION(ADD_RATHAXES_EXECUTABLE OUT_NAME RTX_FILE)
- 
- # This function call codeworker + cnorm with the given codeworker script. The
--- a/maintainers_update_use_latex.cmake	Sun Jan 01 15:56:47 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,655 +0,0 @@
-# HG changeset patch
-# Parent 13253d542625d2f6a8b7d73878f55e2bca521f34
-maintainers: update the UseLatex.cmake script to 1.8.2
-
-diff --git a/maintainers/CMakeScripts/UseLATEX.cmake b/maintainers/CMakeScripts/UseLATEX.cmake
---- a/maintainers/CMakeScripts/UseLATEX.cmake
-+++ b/maintainers/CMakeScripts/UseLATEX.cmake
-@@ -1,7 +1,7 @@
- # File: UseLATEX.cmake
- # CMAKE commands to actually use the LaTeX compiler
--# Version: 1.7.4
--# Author: Kenneth Moreland (kmorel at sandia dot gov)
-+# Version: 1.8.2
-+# Author: Kenneth Moreland <kmorel@sandia.gov>
- #
- # Copyright 2004 Sandia Corporation.
- # Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
-@@ -19,7 +19,7 @@
- #                       [IMAGES] <image_files>
- #                       [CONFIGURE] <tex_files>
- #                       [DEPENDS] <tex_files>
--#                       [USE_INDEX] [USE_GLOSSARY]
-+#                       [USE_INDEX] [USE_GLOSSARY] [USE_NOMENCL]
- #                       [DEFAULT_PDF] [DEFAULT_SAFEPDF]
- #                       [MANGLE_TARGET_NAMES])
- #       Adds targets that compile <tex_file>.  The latex output is placed
-@@ -47,8 +47,11 @@
- #                       on images.
- #               ps: Makes <name>.ps
- #               html: Makes <name>.html
--#               auxclean: Deletes <name>.aux.  This is sometimes necessary
--#                       if a LaTeX error occurs and writes a bad aux file.
-+#               auxclean: Deletes <name>.aux and other auxiliary files.
-+#                       This is sometimes necessary if a LaTeX error occurs
-+#                       and writes a bad aux file.  Unlike the regular clean
-+#                       target, it does not delete other input files, such as
-+#                       converted images, to save time on the rebuild.
- #
- #       The dvi target is added to the ALL.  That is, it will be the target
- #       built by default.  If the DEFAULT_PDF argument is given, then the
-@@ -63,6 +66,24 @@
- #
- # History:
- #
-+# 1.8.2 Fix corner case when an argument name was also a variable containing
-+#       the text of an argument.  In this case, the CMake IF was matching
-+#       the argument text with the contents of the variable with the same
-+#       argument name.
-+#
-+# 1.8.1 Fix problem where ps2pdf was not getting the appropriate arguments.
-+#
-+# 1.8.0 Add support for synctex.
-+#
-+# 1.7.7 Support calling xindy when making glossaries.
-+#
-+#       Improved make clean support.
-+#
-+# 1.7.6 Add support for the nomencl package (thanks to Myles English).
-+#
-+# 1.7.5 Fix issue with bibfiles being copied two different ways, which causes
-+#       Problems with dependencies (thanks to Edwin van Leeuwen).
-+#
- # 1.7.4 Added the DEFAULT_SAFEPDF option (thanks to Raymond Wan).
- #
- #       Added warnings when image directories are not found (and were
-@@ -164,9 +185,9 @@
- MACRO(LATEX_LIST_CONTAINS var value)
-   SET(${var})
-   FOREACH (value2 ${ARGN})
--    IF (${value} STREQUAL ${value2})
-+    IF ("not_a_var_${value}" STREQUAL "not_a_var_${value2}")
-       SET(${var} TRUE)
--    ENDIF (${value} STREQUAL ${value2})
-+    ENDIF ("not_a_var_${value}" STREQUAL "not_a_var_${value2}")
-   ENDFOREACH (value2)
- ENDMACRO(LATEX_LIST_CONTAINS)
- 
-@@ -217,15 +238,13 @@
- # Macros that perform processing during a LaTeX build.
- #############################################################################
- MACRO(LATEX_MAKEGLOSSARIES)
-+  # This is really a bare bones port of the makeglossaries perl script into
-+  # CMake scripting.
-   MESSAGE("**************************** In makeglossaries")
-   IF (NOT LATEX_TARGET)
-     MESSAGE(SEND_ERROR "Need to define LATEX_TARGET")
-   ENDIF (NOT LATEX_TARGET)
- 
--  IF (NOT MAKEINDEX_COMPILER)
--    MESSAGE(SEND_ERROR "Need to define MAKEINDEX_COMPILER")
--  ENDIF (NOT MAKEINDEX_COMPILER)
--
-   SET(aux_file ${LATEX_TARGET}.aux)
- 
-   IF (NOT EXISTS ${aux_file})
-@@ -245,6 +264,19 @@
-     istfile ${istfile_line}
-     )
- 
-+  STRING(REGEX MATCH ".*\\.xdy" use_xindy "${istfile}")
-+  IF (use_xindy)
-+    MESSAGE("*************** Using xindy")
-+    IF (NOT XINDY_COMPILER)
-+      MESSAGE(SEND_ERROR "Need to define XINDY_COMPILER")
-+    ENDIF (NOT XINDY_COMPILER)
-+  ELSE (use_xindy)
-+    MESSAGE("*************** Using makeindex")
-+    IF (NOT MAKEINDEX_COMPILER)
-+      MESSAGE(SEND_ERROR "Need to define MAKEINDEX_COMPILER")
-+    ENDIF (NOT MAKEINDEX_COMPILER)
-+  ENDIF (use_xindy)
-+
-   FOREACH(newglossary ${newglossary_lines})
-     STRING(REGEX REPLACE
-       "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
-@@ -262,13 +294,186 @@
-       "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
-       "${LATEX_TARGET}.\\4" glossary_in ${newglossary}
-       )
--    MESSAGE("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}")
--    EXEC_PROGRAM(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS}
--      -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}
--      )
-+
-+    IF (use_xindy)
-+      LATEX_FILE_MATCH(xdylanguage_line ${aux_file}
-+        "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}"
-+        "@xdylanguage{${glossary_name}}{english}"
-+        )
-+      STRING(REGEX REPLACE
-+        "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}"
-+        "\\1"
-+        language
-+        ${xdylanguage_line}
-+        )
-+      # What crazy person makes a LaTeX index generater that uses different
-+      # identifiers for language than babel (or at least does not support
-+      # the old ones)?
-+      IF (${language} STREQUAL "frenchb")
-+        SET(language "french")
-+      ELSEIF (${language} MATCHES "^n?germanb?$")
-+        SET(language "german")
-+      ELSEIF (${language} STREQUAL "magyar")
-+        SET(language "hungarian")
-+      ELSEIF (${language} STREQUAL "lsorbian")
-+        SET(language "lower-sorbian")
-+      ELSEIF (${language} STREQUAL "norsk")
-+        SET(language "norwegian")
-+      ELSEIF (${language} STREQUAL "portuges")
-+        SET(language "portuguese")
-+      ELSEIF (${language} STREQUAL "russianb")
-+        SET(language "russian")
-+      ELSEIF (${language} STREQUAL "slovene")
-+        SET(language "slovenian")
-+      ELSEIF (${language} STREQUAL "ukraineb")
-+        SET(language "ukrainian")
-+      ELSEIF (${language} STREQUAL "usorbian")
-+        SET(language "upper-sorbian")
-+      ENDIF (${language} STREQUAL "frenchb")
-+      IF (language)
-+        SET(language_flags "-L ${language}")
-+      ELSE (language)
-+        SET(language_flags "")
-+      ENDIF (language)
-+
-+      LATEX_FILE_MATCH(codepage_line ${aux_file}
-+        "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}"
-+        "@gls@codepage{${glossary_name}}{utf}"
-+        )
-+      STRING(REGEX REPLACE
-+        "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}"
-+        "\\1"
-+        codepage
-+        ${codepage_line}
-+        )
-+      IF (codepage)
-+        SET(codepage_flags "-C ${codepage}")
-+      ELSE (codepage)
-+        # Ideally, we would check that the language is compatible with the
-+        # default codepage, but I'm hoping that distributions will be smart
-+        # enough to specify their own codepage.  I know, it's asking a lot.
-+        SET(codepage_flags "")
-+      ENDIF (codepage)
-+
-+      MESSAGE("${XINDY_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} ${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}
-+          ${language_flags}
-+          ${codepage_flags}
-+          -I xindy
-+          -M ${glossary_name}
-+          -t ${glossary_log}
-+          -o ${glossary_out}
-+          ${glossary_in}
-+        OUTPUT_VARIABLE xindy_output
-+        )
-+      MESSAGE("${xindy_output}")
-+
-+      # So, it is possible (perhaps common?) for aux files to specify a
-+      # language and codepage that are incompatible with each other.  Check
-+      # for that condition, and if it happens run again with the default
-+      # codepage.
-+      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}
-+            ${language_flags}
-+            -I xindy
-+            -M ${glossary_name}
-+            -t ${glossary_log}
-+            -o ${glossary_out}
-+            ${glossary_in}
-+          )
-+      ENDIF ("${xindy_output}" MATCHES "^Cannot locate xindy module for language (.+) in codepage (.+)\\.$")
-+      #ENDIF ("${xindy_output}" MATCHES "Cannot locate xindy module for language (.+) in codepage (.+)\\.")
-+      
-+    ELSE (use_xindy)
-+      MESSAGE("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}")
-+      EXEC_PROGRAM(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS}
-+        -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}
-+        )
-+    ENDIF (use_xindy)
-+
-   ENDFOREACH(newglossary)
- ENDMACRO(LATEX_MAKEGLOSSARIES)
- 
-+MACRO(LATEX_MAKENOMENCLATURE)
-+  MESSAGE("**************************** In makenomenclature")
-+  IF (NOT LATEX_TARGET)
-+    MESSAGE(SEND_ERROR "Need to define LATEX_TARGET")
-+  ENDIF (NOT LATEX_TARGET)
-+
-+  IF (NOT MAKEINDEX_COMPILER)
-+    MESSAGE(SEND_ERROR "Need to define MAKEINDEX_COMPILER")
-+  ENDIF (NOT MAKEINDEX_COMPILER)
-+
-+  SET(nomencl_out ${LATEX_TARGET}.nls)
-+  SET(nomencl_in ${LATEX_TARGET}.nlo)
-+
-+  EXEC_PROGRAM(${MAKEINDEX_COMPILER} ARGS ${MAKENOMENCLATURE_COMPILER_FLAGS}
-+    ${nomencl_in} -s "nomencl.ist" -o ${nomencl_out}
-+    )
-+ENDMACRO(LATEX_MAKENOMENCLATURE)
-+
-+MACRO(LATEX_CORRECT_SYNCTEX)
-+  MESSAGE("**************************** In correct SyncTeX")
-+  IF (NOT LATEX_TARGET)
-+    MESSAGE(SEND_ERROR "Need to define LATEX_TARGET")
-+  ENDIF (NOT LATEX_TARGET)
-+
-+  IF (NOT GZIP)
-+    MESSAGE(SEND_ERROR "Need to define GZIP")
-+  ENDIF (NOT GZIP)
-+
-+  IF (NOT LATEX_SOURCE_DIRECTORY)
-+    MESSAGE(SEND_ERROR "Need to define LATEX_SOURCE_DIRECTORY")
-+  ENDIF (NOT LATEX_SOURCE_DIRECTORY)
-+
-+  IF (NOT LATEX_BINARY_DIRECTORY)
-+    MESSAGE(SEND_ERROR "Need to define LATEX_BINARY_DIRECTORY")
-+  ENDIF (NOT LATEX_BINARY_DIRECTORY)
-+
-+  SET(synctex_file ${LATEX_BINARY_DIRECTORY}/${LATEX_TARGET}.synctex)
-+  SET(synctex_file_gz ${synctex_file}.gz)
-+
-+  IF (EXISTS ${synctex_file_gz})
-+
-+    MESSAGE("Making backup of synctex file.")
-+    CONFIGURE_FILE(${synctex_file_gz} ${synctex_file}.bak.gz COPYONLY)
-+
-+    MESSAGE("Uncompressing synctex file.")
-+    EXEC_PROGRAM(${GZIP}
-+      ARGS --decompress ${synctex_file_gz}
-+      )
-+
-+    MESSAGE("Reading synctex file.")
-+    FILE(READ ${synctex_file} synctex_data)
-+
-+    MESSAGE("Replacing relative with absolute paths.")
-+    STRING(REGEX REPLACE
-+      "(Input:[0-9]+:)([^/\n][^\n]*)"
-+      "\\1${LATEX_SOURCE_DIRECTORY}/\\2"
-+      synctex_data
-+      "${synctex_data}"
-+      )
-+
-+    MESSAGE("Writing synctex file.")
-+    FILE(WRITE ${synctex_file} "${synctex_data}")
-+
-+    MESSAGE("Compressing synctex file.")
-+    EXEC_PROGRAM(${GZIP}
-+      ARGS ${synctex_file}
-+      )
-+
-+  ELSE (EXISTS ${synctex_file_gz})
-+
-+    MESSAGE(SEND_ERROR "File ${synctex_file_gz} not found.  Perhaps synctex is not supported by your LaTeX compiler.")
-+
-+  ENDIF (EXISTS ${synctex_file_gz})
-+
-+ENDMACRO(LATEX_CORRECT_SYNCTEX)
-+
- #############################################################################
- # Helper macros for establishing LaTeX build.
- #############################################################################
-@@ -292,11 +497,19 @@
- 
-   FIND_PACKAGE(LATEX)
- 
-+  FIND_PROGRAM(XINDY_COMPILER
-+    NAME xindy
-+    PATHS ${MIKTEX_BINARY_PATH} /usr/bin
-+    )
-+
-+  FIND_PACKAGE(UnixCommands)
-+
-   MARK_AS_ADVANCED(CLEAR
-     LATEX_COMPILER
-     PDFLATEX_COMPILER
-     BIBTEX_COMPILER
-     MAKEINDEX_COMPILER
-+    XINDY_COMPILER
-     DVIPS_CONVERTER
-     PS2PDF_CONVERTER
-     LATEX2HTML_CONVERTER
-@@ -314,12 +527,16 @@
-     CACHE STRING "Flags passed to latex.")
-   SET(PDFLATEX_COMPILER_FLAGS ${LATEX_COMPILER_FLAGS}
-     CACHE STRING "Flags passed to pdflatex.")
-+  SET(LATEX_SYNCTEX_FLAGS "-synctex=1"
-+    CACHE STRING "latex/pdflatex flags used to create synctex file.")
-   SET(BIBTEX_COMPILER_FLAGS ""
-     CACHE STRING "Flags passed to bibtex.")
-   SET(MAKEINDEX_COMPILER_FLAGS ""
-     CACHE STRING "Flags passed to makeindex.")
-   SET(MAKEGLOSSARIES_COMPILER_FLAGS ""
-     CACHE STRING "Flags passed to makeglossaries.")
-+  SET(MAKENOMENCLATURE_COMPILER_FLAGS ""
-+    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"
-@@ -329,18 +546,22 @@
-   MARK_AS_ADVANCED(
-     LATEX_COMPILER_FLAGS
-     PDFLATEX_COMPILER_FLAGS
-+    LATEX_SYNCTEX_FLAGS
-     BIBTEX_COMPILER_FLAGS
-     MAKEINDEX_COMPILER_FLAGS
-     MAKEGLOSSARIES_COMPILER_FLAGS
-+    MAKENOMENCLATURE_COMPILER_FLAGS
-     DVIPS_CONVERTER_FLAGS
-     PS2PDF_CONVERTER_FLAGS
-     LATEX2HTML_CONVERTER_FLAGS
-     )
-   SEPARATE_ARGUMENTS(LATEX_COMPILER_FLAGS)
-   SEPARATE_ARGUMENTS(PDFLATEX_COMPILER_FLAGS)
-+  SEPARATE_ARGUMENTS(LATEX_SYNCTEX_FLAGS)
-   SEPARATE_ARGUMENTS(BIBTEX_COMPILER_FLAGS)
-   SEPARATE_ARGUMENTS(MAKEINDEX_COMPILER_FLAGS)
-   SEPARATE_ARGUMENTS(MAKEGLOSSARIES_COMPILER_FLAGS)
-+  SEPARATE_ARGUMENTS(MAKENOMENCLATURE_COMPILER_FLAGS)
-   SEPARATE_ARGUMENTS(DVIPS_CONVERTER_FLAGS)
-   SEPARATE_ARGUMENTS(PS2PDF_CONVERTER_FLAGS)
-   SEPARATE_ARGUMENTS(LATEX2HTML_CONVERTER_FLAGS)
-@@ -352,6 +573,11 @@
-     MESSAGE(SEND_ERROR "Could not find convert program.  Please download ImageMagick from http://www.imagemagick.org and install.")
-   ENDIF (NOT IMAGEMAGICK_CONVERT)
- 
-+  OPTION(LATEX_USE_SYNCTEX
-+    "If on, have LaTeX generate a synctex file, which WYSIWYG editors can use to correlate output files like dvi and pdf with the lines of LaTeX source that generates them.  In addition to adding the LATEX_SYNCTEX_FLAGS to the command line, this option also adds build commands that \"corrects\" the resulting synctex file to point to the original LaTeX files rather than those generated by UseLATEX.cmake."
-+    OFF
-+    )
-+
-   OPTION(LATEX_SMALL_IMAGES
-     "If on, the raster images will be converted to 1/6 the original size.  This is because papers usually require 600 dpi images whereas most monitors only require at most 96 dpi.  Thus, smaller images make smaller files for web distributation and can make it faster to read dvi files."
-     OFF)
-@@ -402,7 +628,7 @@
-   IF (${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf")
-     IF (PS2PDF_CONVERTER)
-       SET (converter ${PS2PDF_CONVERTER})
--      SET (convert_flags "-dEPSCrop ${flags}")
-+      SET (convert_flags -dEPSCrop ${PS2PDF_CONVERTER_FLAGS})
-     ELSE (PS2PDF_CONVERTER)
-       MESSAGE(SEND_ERROR "Using postscript files with pdflatex requires ps2pdf for conversion.")
-     ENDIF (PS2PDF_CONVERTER)
-@@ -560,7 +786,7 @@
- 
- MACRO(LATEX_USAGE command message)
-   MESSAGE(SEND_ERROR
--    "${message}\nUsage: ${command}(<tex_file>\n           [BIBFILES <bib_file> <bib_file> ...]\n           [INPUTS <tex_file> <tex_file> ...]\n           [IMAGE_DIRS <directory1> <directory2> ...]\n           [IMAGES <image_file1> <image_file2>\n           [CONFIGURE <tex_file> <tex_file> ...]\n           [DEPENDS <tex_file> <tex_file> ...]\n           [USE_INDEX] [USE_GLOSSARY]\n           [DEFAULT_PDF] [DEFAULT_SAFEPDF]\n           [MANGLE_TARGET_NAMES])"
-+    "${message}\nUsage: ${command}(<tex_file>\n           [BIBFILES <bib_file> <bib_file> ...]\n           [INPUTS <tex_file> <tex_file> ...]\n           [IMAGE_DIRS <directory1> <directory2> ...]\n           [IMAGES <image_file1> <image_file2>\n           [CONFIGURE <tex_file> <tex_file> ...]\n           [DEPENDS <tex_file> <tex_file> ...]\n           [USE_INDEX] [USE_GLOSSARY] [USE_NOMENCL]\n           [DEFAULT_PDF] [DEFAULT_SAFEPDF]\n           [MANGLE_TARGET_NAMES])"
-     )
- ENDMACRO(LATEX_USAGE command message)
- 
-@@ -571,7 +797,7 @@
-   LATEX_PARSE_ARGUMENTS(
-     LATEX
-     "BIBFILES;INPUTS;IMAGE_DIRS;IMAGES;CONFIGURE;DEPENDS"
--    "USE_INDEX;USE_GLOSSARY;USE_GLOSSARIES;DEFAULT_PDF;DEFAULT_SAFEPDF;MANGLE_TARGET_NAMES"
-+    "USE_INDEX;USE_GLOSSARY;USE_GLOSSARIES;USE_NOMENCL;DEFAULT_PDF;DEFAULT_SAFEPDF;MANGLE_TARGET_NAMES"
-     ${ARGN}
-     )
- 
-@@ -598,6 +824,20 @@
-   LATEX_GET_OUTPUT_PATH(output_dir)
-   PARSE_ADD_LATEX_ARGUMENTS(ADD_LATEX_TARGETS ${ARGV})
- 
-+  IF (LATEX_USE_SYNCTEX)
-+    SET(synctex_flags ${LATEX_SYNCTEX_FLAGS})
-+  ELSE (LATEX_USE_SYNCTEX)
-+    SET(synctex_flags)
-+  ENDIF (LATEX_USE_SYNCTEX)
-+
-+  # The commands to run LaTeX.  They are repeated multiple times.
-+  SET(latex_build_command
-+    ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
-+    )
-+  SET(pdflatex_build_command
-+    ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
-+    )
-+
-   # Set up target names.
-   IF (LATEX_MANGLE_TARGET_NAMES)
-     SET(dvi_target      ${LATEX_TARGET}_dvi)
-@@ -615,6 +855,31 @@
-     SET(auxclean_target auxclean)
-   ENDIF (LATEX_MANGLE_TARGET_NAMES)
- 
-+  # Probably not all of these will be generated, but they could be.
-+  # Note that the aux file is added later.
-+  SET(auxiliary_clean_files
-+    ${output_dir}/${LATEX_TARGET}.bbl
-+    ${output_dir}/${LATEX_TARGET}.blg
-+    ${output_dir}/${LATEX_TARGET}-blx.bib
-+    ${output_dir}/${LATEX_TARGET}.glg
-+    ${output_dir}/${LATEX_TARGET}.glo
-+    ${output_dir}/${LATEX_TARGET}.gls
-+    ${output_dir}/${LATEX_TARGET}.idx
-+    ${output_dir}/${LATEX_TARGET}.ilg
-+    ${output_dir}/${LATEX_TARGET}.ind
-+    ${output_dir}/${LATEX_TARGET}.ist
-+    ${output_dir}/${LATEX_TARGET}.log
-+    ${output_dir}/${LATEX_TARGET}.out
-+    ${output_dir}/${LATEX_TARGET}.toc
-+    ${output_dir}/${LATEX_TARGET}.lof
-+    ${output_dir}/${LATEX_TARGET}.xdy
-+    ${output_dir}/${LATEX_TARGET}.synctex.gz
-+    ${output_dir}/${LATEX_TARGET}.synctex.bak.gz
-+    ${output_dir}/${LATEX_TARGET}.dvi
-+    ${output_dir}/${LATEX_TARGET}.ps
-+    ${output_dir}/${LATEX_TARGET}.pdf
-+    )
-+
-   # For each directory in LATEX_IMAGE_DIRS, glob all the image files and
-   # place them in LATEX_IMAGES.
-   FOREACH(dir ${LATEX_IMAGE_DIRS})
-@@ -636,16 +901,24 @@
- 
-   SET(make_dvi_command
-     ${CMAKE_COMMAND} -E chdir ${output_dir}
--    ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT})
-+    ${latex_build_command})
-   SET(make_pdf_command
-     ${CMAKE_COMMAND} -E chdir ${output_dir}
--    ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT})
-+    ${pdflatex_build_command}
-+    )
- 
-   SET(make_dvi_depends ${LATEX_DEPENDS} ${dvi_images})
-   SET(make_pdf_depends ${LATEX_DEPENDS} ${pdf_images})
-   FOREACH(input ${LATEX_MAIN_INPUT} ${LATEX_INPUTS})
-     SET(make_dvi_depends ${make_dvi_depends} ${output_dir}/${input})
-     SET(make_pdf_depends ${make_pdf_depends} ${output_dir}/${input})
-+    IF (${input} MATCHES "\\.tex$")
-+      STRING(REGEX REPLACE "\\.tex$" "" input_we ${input})
-+      SET(auxiliary_clean_files ${auxiliary_clean_files}
-+        ${output_dir}/${input_we}.aux
-+        ${output_dir}/${input}.aux
-+        )
-+    ENDIF (${input} MATCHES "\\.tex$")
-   ENDFOREACH(input)
- 
-   IF (LATEX_USE_GLOSSARY)
-@@ -656,10 +929,11 @@
-         -D LATEX_BUILD_COMMAND=makeglossaries
-         -D LATEX_TARGET=${LATEX_TARGET}
-         -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
-+        -D XINDY_COMPILER=${XINDY_COMPILER}
-         -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS}
-         -P ${LATEX_USE_LATEX_LOCATION}
-         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
--        ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
-+        ${latex_build_command}
-         )
-       SET(make_pdf_command ${make_pdf_command}
-         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-@@ -667,14 +941,42 @@
-         -D LATEX_BUILD_COMMAND=makeglossaries
-         -D LATEX_TARGET=${LATEX_TARGET}
-         -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
-+        -D XINDY_COMPILER=${XINDY_COMPILER}
-         -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS}
-         -P ${LATEX_USE_LATEX_LOCATION}
-         COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
--        ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
-+        ${pdflatex_build_command}
-         )
-     ENDFOREACH(dummy)
-   ENDIF (LATEX_USE_GLOSSARY)
- 
-+  IF (LATEX_USE_NOMENCL)
-+    FOREACH(dummy 0 1)   # Repeat these commands twice.
-+      SET(make_dvi_command ${make_dvi_command}
-+        COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-+        ${CMAKE_COMMAND}
-+        -D LATEX_BUILD_COMMAND=makenomenclature
-+        -D LATEX_TARGET=${LATEX_TARGET}
-+        -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
-+        -D MAKENOMENCLATURE_COMPILER_FLAGS=${MAKENOMENCLATURE_COMPILER_FLAGS}
-+        -P ${LATEX_USE_LATEX_LOCATION}
-+        COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-+        ${latex_build_command}
-+        )
-+      SET(make_pdf_command ${make_pdf_command}
-+        COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-+        ${CMAKE_COMMAND}
-+        -D LATEX_BUILD_COMMAND=makenomenclature
-+        -D LATEX_TARGET=${LATEX_TARGET}
-+        -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
-+        -D MAKENOMENCLATURE_COMPILER_FLAGS=${MAKENOMENCLATURE_COMPILER_FLAGS}
-+        -P ${LATEX_USE_LATEX_LOCATION}
-+        COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-+        ${pdflatex_build_command}
-+        )
-+    ENDFOREACH(dummy)
-+  ENDIF (LATEX_USE_NOMENCL)
-+
-   IF (LATEX_BIBFILES)
-     SET(make_dvi_command ${make_dvi_command}
-       COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-@@ -691,26 +993,50 @@
-   IF (LATEX_USE_INDEX)
-     SET(make_dvi_command ${make_dvi_command}
-       COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
--      ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
-+      ${latex_build_command}
-       COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-       ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${LATEX_TARGET}.idx)
-     SET(make_pdf_command ${make_pdf_command}
-       COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
--      ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
-+      ${pdflatex_build_command}
-       COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
-       ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${LATEX_TARGET}.idx)
-   ENDIF (LATEX_USE_INDEX)
- 
-   SET(make_dvi_command ${make_dvi_command}
-     COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
--    ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
-+    ${latex_build_command}
-     COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
--    ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT})
-+    ${latex_build_command})
-   SET(make_pdf_command ${make_pdf_command}
-     COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
--    ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
-+    ${pdflatex_build_command}
-     COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
--    ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT})
-+    ${pdflatex_build_command})
-+
-+  IF (LATEX_USE_SYNCTEX)
-+    IF (NOT GZIP)
-+      MESSAGE(SEND_ERROR "UseLATEX.cmake: USE_SYNTEX option requires gzip program.  Set GZIP variable.")
-+    ENDIF (NOT GZIP)
-+    SET(make_dvi_command ${make_dvi_command}
-+      COMMAND ${CMAKE_COMMAND}
-+      -D LATEX_BUILD_COMMAND=correct_synctex
-+      -D LATEX_TARGET=${LATEX_TARGET}
-+      -D GZIP=${GZIP}
-+      -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}"
-+      -D "LATEX_BINARY_DIRECTORY=${output_dir}"
-+      -P ${LATEX_USE_LATEX_LOCATION}
-+      )
-+    SET(make_pdf_command ${make_pdf_command}
-+      COMMAND ${CMAKE_COMMAND}
-+      -D LATEX_BUILD_COMMAND=correct_synctex
-+      -D LATEX_TARGET=${LATEX_TARGET}
-+      -D GZIP=${GZIP}
-+      -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}"
-+      -D "LATEX_BINARY_DIRECTORY=${output_dir}"
-+      -P ${LATEX_USE_LATEX_LOCATION}
-+      )
-+  ENDIF (LATEX_USE_SYNCTEX)
- 
-   # Add commands and targets for building dvi outputs.
-   ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${LATEX_TARGET}.dvi
-@@ -774,8 +1100,13 @@
-     ADD_DEPENDENCIES(${html_target} ${LATEX_MAIN_INPUT} ${LATEX_INPUTS})
-   ENDIF (LATEX2HTML_CONVERTER)
- 
-+  SET_DIRECTORY_PROPERTIES(.
-+    ADDITIONAL_MAKE_CLEAN_FILES "${auxiliary_clean_files}"
-+    )
-+
-   ADD_CUSTOM_TARGET(${auxclean_target}
--    ${CMAKE_COMMAND} -E remove ${output_dir}/${LATEX_TARGET}.aux ${output_dir}/${LATEX_TARGET}.idx ${output_dir}/${LATEX_TARGET}.ind
-+    COMMENT "Cleaning auxiliary LaTeX files."
-+    COMMAND ${CMAKE_COMMAND} -E remove ${auxiliary_clean_files}
-     )
- ENDMACRO(ADD_LATEX_TARGETS)
- 
-@@ -787,14 +1118,7 @@
-     LATEX_COPY_INPUT_FILE(${LATEX_MAIN_INPUT})
- 
-     FOREACH (bib_file ${LATEX_BIBFILES})
--      CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${bib_file}
--        ${output_dir}/${bib_file}
--        COPYONLY)
--      ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${bib_file}
--        COMMAND ${CMAKE_COMMAND}
--        ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${bib_file} ${output_dir}/${bib_file}
--        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${bib_file}
--        )
-+      LATEX_COPY_INPUT_FILE(${bib_file})
-     ENDFOREACH (bib_file)
- 
-     FOREACH (input ${LATEX_INPUTS})
-@@ -805,6 +1129,7 @@
-     LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.bst ${output_dir})
-     LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.clo ${output_dir})
-     LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.sty ${output_dir})
-+    LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.ist ${output_dir})
- 
-     ADD_LATEX_TARGETS(${ARGV})
-   ENDIF (output_dir)
-@@ -822,6 +1147,16 @@
-     SET(command_handled TRUE)
-   ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries)
- 
-+  IF ("${LATEX_BUILD_COMMAND}" STREQUAL makenomenclature)
-+    LATEX_MAKENOMENCLATURE()
-+    SET(command_handled TRUE)
-+  ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL makenomenclature)
-+
-+  IF ("${LATEX_BUILD_COMMAND}" STREQUAL correct_synctex)
-+    LATEX_CORRECT_SYNCTEX()
-+    SET(command_handled TRUE)
-+  ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL correct_synctex)
-+
-   IF (NOT command_handled)
-     MESSAGE(SEND_ERROR "Unknown command: ${LATEX_BUILD_COMMAND}")
-   ENDIF (NOT command_handled)
--- a/rathaxes_add_the_output_option_to_rathaxes_generate.patch	Sun Jan 01 15:56:47 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-# HG changeset patch
-# Parent 5c7b83ad7fcab2fb5f1addeeeb70ae28a6c099cf
-rathaxes: add a `/o' option to `rathaxes generate' to write the result to the given file
-
-diff --git a/rathaxes/compiler/rathaxes.cws b/rathaxes/compiler/rathaxes.cws
---- a/rathaxes/compiler/rathaxes.cws
-+++ b/rathaxes/compiler/rathaxes.cws
-@@ -38,7 +38,11 @@
- 
- function usage()
- {
--    traceLine(  "Usage: rathaxes generate (linux|openbsd|windows) file.rtx" + endl()
-+    /*
-+     * We use /o options because codeworker doesn't have a way to escape
-+     * options (i.e: --)...
-+     */
-+    traceLine(  "Usage: rathaxes generate [/o output.c] (linux|openbsd|windows) file.rtx" + endl()
-                 + "    or rathaxes rti-check    (file.rti|file.rtx)" + endl()
-                 + "    or rathaxes rti-register (file.rti|file.rtx)" + endl()
-                 + "    or rathaxes blt-check    (file.blt|file.rtx)" + endl()
-@@ -74,6 +78,32 @@
-     }
- }
- 
-+function rtxParseGenerateOptions(argv : node, options : node)
-+{
-+    local to_remove;
-+    foreach item in argv
-+    {
-+        switch (item)
-+        {
-+            case "/o":
-+                local arg_key = $item.key() + 1$;
-+                if (findElement(arg_key, argv) && charAt(argv[arg_key], 0) != "/")
-+                {
-+                    insert options["output"] = argv[arg_key];
-+                    pushItem to_remove = item.key();
-+                    pushItem to_remove = arg_key;
-+                    break ;
-+                }
-+                error("Missing argument for option /o");
-+            default:
-+                break ;
-+        }
-+    }
-+
-+    foreach item in to_remove
-+        removeElement(argv, item);
-+}
-+
- /*
-  * First, setup the paths 
-  */
-@@ -96,8 +126,16 @@
- 
- if (toLowerString(this.operation) == "generate")
- {
--    local target_os = toLowerString(_ARGS[3]);
--    local inputFile = _ARGS[4];
-+    local options;
-+
-+    rtxParseGenerateOptions(_ARGS, options);
-+
-+    /*
-+     * rtxParseGenerateOptions will have messed up the keys to remove the
-+     * options from _ARGS so use "absolute" indexes with the # notation
-+     */
-+    local target_os = toLowerString(_ARGS#[3]);
-+    local inputFile = _ARGS#[4];
- 
-     if (rtxLink_LoadCache() == false)
-         traceLine("Could not load cache. Trying to do without it...");
-@@ -133,13 +171,25 @@
-         traceLine(RED + "[Error] Driver could not be generated." + DEFAULT_COLOR);
-         exit(6);
-     }
--    
-+
-     //traceLine(BLUE + toString(this.c_tree.c_block,true) + DEFAULT_COLOR);
-     //removeElement(this.c_tree.c_block.block, "_3_8");
-     //removeVariable(this.c_tree.c_block.compile);
-     //traceLine(PURPLE + toString(this.c_tree.c_block,true) + DEFAULT_COLOR);
- 
--    traceLine("Resulting code:"+cnorm2c(this.c_tree.c_block));
-+    /*
-+     * This is our final code, tell cnorm2c that this is a root block,
-+     * otherwise it will scope the whole thing inside braces.
-+     */
-+    this.c_tree.c_block.type = "__root_block__";
-+    local code = cnorm2c(this.c_tree.c_block);
-+    traceLine("Resulting code: " + code);
-+
-+    if (findElement("output", options))
-+    {
-+        traceLine("Writing to file: " + options["output"]);
-+        saveToFile(options["output"], code + endl());
-+    }
- }
- else if (   toLowerString(this.operation) == "blt-check"
-          || toLowerString(this.operation) == "blt-register")
--- a/rathaxes_replace_generate_by_a_cmakelist.patch	Sun Jan 01 15:56:47 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-# HG changeset patch
-# Parent f9f6458ed45071bb998561fd096551d102f8534d
-rathaxes: replace the generate script for the helloworld sample by a simpler CMakeLists.txt
-
-diff --git a/rathaxes/CMakeLists.txt b/rathaxes/CMakeLists.txt
---- a/rathaxes/CMakeLists.txt
-+++ b/rathaxes/CMakeLists.txt
-@@ -1,4 +1,5 @@
- ADD_SUBDIRECTORY(compiler)
-+ADD_SUBDIRECTORY(samples)
- 
- # Generate a rathaxes binary script that set up all the path automatically
- # thanks to CMake.
-diff --git a/rathaxes/samples/CMakeLists.txt b/rathaxes/samples/CMakeLists.txt
-new file mode 100644
---- /dev/null
-+++ b/rathaxes/samples/CMakeLists.txt
-@@ -0,0 +1,1 @@
-+ADD_SUBDIRECTORY(helloworld)
-diff --git a/rathaxes/samples/helloworld/CMakeLists.txt b/rathaxes/samples/helloworld/CMakeLists.txt
-new file mode 100644
---- /dev/null
-+++ b/rathaxes/samples/helloworld/CMakeLists.txt
-@@ -0,0 +1,4 @@
-+ADD_RATHAXES_EXECUTABLE(hello hello.rtx
-+                        RTI types.rti main.rti log.rti
-+                        BLT types.blt log.blt main.blt
-+                        SYSTEM linux)
-diff --git a/rathaxes/samples/helloworld/generate b/rathaxes/samples/helloworld/generate
-deleted file mode 100755
---- a/rathaxes/samples/helloworld/generate
-+++ /dev/null
-@@ -1,31 +0,0 @@
--#!/bin/sh
--
--msg() {
--    echo "\033[1;32m-->\033[0m $*"
--}
--
--compiler=${1:-rathaxes}
--
--if ! type $compiler >/dev/null ; then
--    msg "Cannot find the rathaxes compiler, install it or provide it like:"
--    msg "$0 /path/to/rathaxes"
--    exit 1
--fi
--
--msg "clearing cache"
--$compiler cache clear
--
--set -e
--
--for f in types.rti main.rti log.rti ; do
--    msg "registering rti $f"
--    $compiler rti-register $f
--done
--
--for f in types.blt log.blt main.blt ; do
--    msg "registring blt $f"
--    $compiler blt-register $f
--done
--
--msg "generating for Linux"
--$compiler generate linux hello.rtx
--- a/series	Sun Jan 01 15:56:47 2012 +0100
+++ b/series	Thu Jan 05 15:08:50 2012 +0100
@@ -1,6 +0,0 @@
-maintainers_update_use_latex.cmake
-maintainers_add_rathaxes_cmake_library.patch
-rathaxes_replace_generate_by_a_cmakelist.patch
-rathaxes_add_the_output_option_to_rathaxes_generate.patch
-maintainers_improve_add_rathaxes_executable.patch
-maintainers_fix_buildbot_build_mkdir.patch