Revision: 54022
          http://brlcad.svn.sourceforge.net/brlcad/?rev=54022&view=rev
Author:   starseeker
Date:     2012-12-07 15:58:56 +0000 (Fri, 07 Dec 2012)
Log Message:
-----------
Try a non-build-target based approach to the XML validation.

Modified Paths:
--------------
    brlcad/trunk/CMakeLists.txt
    brlcad/trunk/misc/CMake/DocBook.cmake
    brlcad/trunk/misc/CMake/msv.cmake.in
    brlcad/trunk/misc/CMake/rnv.cmake.in
    brlcad/trunk/misc/CMake/xmllint.cmake.in

Modified: brlcad/trunk/CMakeLists.txt
===================================================================
--- brlcad/trunk/CMakeLists.txt 2012-12-07 05:51:27 UTC (rev 54021)
+++ brlcad/trunk/CMakeLists.txt 2012-12-07 15:58:56 UTC (rev 54022)
@@ -1339,14 +1339,7 @@
 # unless build target counts >1800 are beyond MSVC's practical
 # limit.  Until we either find a resolution or a way to reduce
 # the target count on MSVC, disable validation there.
-if(NOT MSVC)
-  CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_VALIDATE "Perform validation for 
DocBook documentation" OFF "BRLCAD_EXTRADOCS;BRLCAD_ENABLE_STRICT" OFF)
-else(NOT MSVC)
-  if(BRLCAD_EXTRADOCS_VALIDATE)
-    message("Visual Studio appears to be having trouble with the number of 
build targets generated by the addition of DocBook validation - disabling.")
-  endif(BRLCAD_EXTRADOCS_VALIDATE)
-  set(BRLCAD_EXTRADOCS_VALIDATE OFF)
-endif(NOT MSVC)
+CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_VALIDATE "Perform validation for 
DocBook documentation" ON "BRLCAD_EXTRADOCS;BRLCAD_ENABLE_STRICT" OFF)
 mark_as_advanced(BRLCAD_EXTRADOCS_VALIDATE)
 
 

Modified: brlcad/trunk/misc/CMake/DocBook.cmake
===================================================================
--- brlcad/trunk/misc/CMake/DocBook.cmake       2012-12-07 05:51:27 UTC (rev 
54021)
+++ brlcad/trunk/misc/CMake/DocBook.cmake       2012-12-07 15:58:56 UTC (rev 
54022)
@@ -129,37 +129,36 @@
   endif(NOT CMAKE_CONFIGURATION_TYPES OR "${CMAKE_CFG_INTDIR}" STREQUAL ".")
 endmacro(DB_SCRIPT)
 
-# Macro to define individual validation build targets and generate the script 
files
+# Macro to define individual validation commands generate the script files
 # used to run the validation step during build
-macro(DB_VALIDATE_TARGET targetname targetdir filename_root)
-  # Man page root names are not unique (and other documents' root names are 
not guaranteed to be
-  # unique) - incorporate the two parent dirs into things like target names 
for uniqueness
-  get_filename_component(root1 ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-  get_filename_component(path1 ${CMAKE_CURRENT_SOURCE_DIR} PATH)
-  get_filename_component(root2 ${path1} NAME)
-  set(validate_target ${root2}_${root1}_${filename_root}_validate)
-  set(db_outfile 
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${filename_root}.valid)
-  # If we're already set up, no need to do it twice (CMake doesn't like it 
anyway)
-  # Handle this by getting a TARGET_NAME property on the target that we set 
when
-  # creating the target. If the target doesn't exist yet, the get returns 
NOTFOUND
-  # and we know to create the target.  Otherwise, the target exists and this 
xml
-  # file has handled - skip it.
-  get_target_property(tarprop ${validate_target} TARGET_NAME)
-  if("${tarprop}" MATCHES "NOTFOUND")
-    DB_SCRIPT("${validate_target}" "${DOC_DIR}/${targetdir}" 
"${VALIDATE_EXECUTABLE}")
+
+define_property(GLOBAL PROPERTY DB_VALIDATION_FILE_LIST BRIEF_DOCS "DocBook 
files to validate" FULL_DOCS "List used to track which files already have a 
validation command set up.")
+
+macro(DB_VALIDATE_TARGET targetdir filename filename_root)
+
+  # Regardless of whether the command is defined or not, we'll need 
xml_valid_stamp set 
+  set(xml_valid_stamp 
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${filename_root}.valid)
+  # If we have already added a validation command for this file, don't add 
another one.  Otherwise,
+  # proceed to add a new custom command
+  get_property(DB_VALIDATION_FILE_LIST GLOBAL PROPERTY DB_VALIDATION_FILE_LIST)
+  set(IN_LIST)
+  list(FIND DB_VALIDATION_FILE_LIST "${CMAKE_CURRENT_SOURCE_DIR}/${filename}" 
IN_LIST)
+  if("${IN_LIST}" STREQUAL "-1")
+    set_property(GLOBAL APPEND PROPERTY DB_VALIDATION_FILE_LIST 
"${CMAKE_CURRENT_SOURCE_DIR}/${filename}")
+
+    DB_SCRIPT("${filename_root}_validate" "${DOC_DIR}/${targetdir}" 
"${VALIDATE_EXECUTABLE}")
     add_custom_command(
-      OUTPUT ${db_outfile}
+      OUTPUT ${xml_valid_stamp}
       COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} 
${XMLLINT_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES}
       COMMENT "Validating DocBook source with ${VALIDATE_EXECUTABLE}:"
       )
-    add_custom_target(${validate_target} ALL DEPENDS ${db_outfile})
-    set_target_properties(${validate_target} PROPERTIES TARGET_NAME 
${validate_target})
-  endif("${tarprop}" MATCHES "NOTFOUND")
+  endif("${IN_LIST}" STREQUAL "-1")
 endmacro(DB_VALIDATE_TARGET)
 
 # HTML output, the format used by BRL-CAD's graphical help systems
 macro(DOCBOOK_TO_HTML targetname_suffix xml_files targetdir deps_list)
+  set(xml_valid_stamp)
   if(BRLCAD_EXTRADOCS_HTML)
     foreach(filename ${${xml_files}})
       string(REGEX REPLACE "([0-9a-z_-]*).xml" "\\1" filename_root 
"${filename}")
@@ -175,27 +174,17 @@
       endforeach(extra_out ${EXTRA_OUTPUTS})
 
       if(BRLCAD_EXTRADOCS_VALIDATE)
-       DB_VALIDATE_TARGET(${targetname} ${targetdir} ${filename_root})
+       DB_VALIDATE_TARGET(${targetdir} "${filename}" ${filename_root})
+      endif(BRLCAD_EXTRADOCS_VALIDATE)
 
-       # Generate the script that will be used to run the XSLT executable
-       DB_SCRIPT("${targetname}" "${DOC_DIR}/${targetdir}" 
"${XSLT_EXECUTABLE}")
+      # Generate the script that will be used to run the XSLT executable
+      DB_SCRIPT("${targetname}" "${DOC_DIR}/${targetdir}" "${XSLT_EXECUTABLE}")
 
-       add_custom_command(
-         OUTPUT ${outfile} ${EXTRAS}
-         COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
-         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} ${db_outfile} 
${XSLTPROC_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES} ${XSL_XHTML_STYLESHEET} 
${deps_list}
-         )
-      else(BRLCAD_EXTRADOCS_VALIDATE)
-
-       # Generate the script that will be used to run the XSLT executable
-       DB_SCRIPT("${targetname}" "${DOC_DIR}/${targetdir}" 
"${XSLT_EXECUTABLE}")
-
-       add_custom_command(
-         OUTPUT ${outfile} ${EXTRAS}
-         COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
-         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} 
${XSLTPROC_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES} ${XSL_XHTML_STYLESHEET} 
${deps_list}
-         )
-      endif(BRLCAD_EXTRADOCS_VALIDATE)
+      add_custom_command(
+       OUTPUT ${outfile} ${EXTRAS}
+       COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
+       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} ${xml_valid_stamp} 
${XSLTPROC_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES} ${XSL_XHTML_STYLESHEET} 
${deps_list}
+       )
       add_custom_target(${targetname} ALL DEPENDS ${outfile})
 
       # CMAKE_CFG_INTDIR can't be used in installation rules:
@@ -211,6 +200,17 @@
       get_property(BRLCAD_EXTRADOCS_HTML_TARGETS GLOBAL PROPERTY 
BRLCAD_EXTRADOCS_HTML_TARGETS)
       set(BRLCAD_EXTRADOCS_HTML_TARGETS ${BRLCAD_EXTRADOCS_HTML_TARGETS} 
${targetname})
       set_property(GLOBAL PROPERTY BRLCAD_EXTRADOCS_HTML_TARGETS 
"${BRLCAD_EXTRADOCS_HTML_TARGETS}")
+
+      # If multiple outputs are being generated from the same file, make sure
+      # one of them is run to completion before the others to avoid multiple
+      # triggerings of the XML valiation command.
+      get_property(1ST_TARGET SOURCE ${filename} PROPERTY 1ST_TARGET)
+      if(1ST_TARGET)
+       add_dependencies(${targetname} ${1ST_TARGET})
+      else(1ST_TARGET)
+       set_property(SOURCE ${filename} PROPERTY 1ST_TARGET "${targetname}")
+      endif(1ST_TARGET)
+
     endforeach(filename ${${xml_files}})
   endif(BRLCAD_EXTRADOCS_HTML)
 
@@ -219,6 +219,7 @@
 
 # This macro produces Unix-style manual or "man" pages
 macro(DOCBOOK_TO_MAN targetname_suffix xml_files mannum manext targetdir 
deps_list)
+  set(xml_valid_stamp)
   if(BRLCAD_EXTRADOCS_MAN)
     foreach(filename ${${xml_files}})
       string(REGEX REPLACE "([0-9a-z_-]*).xml" "\\1" filename_root 
"${filename}")
@@ -234,27 +235,17 @@
       endforeach(extra_out ${EXTRA_OUTPUTS})
 
       if(BRLCAD_EXTRADOCS_VALIDATE)
-       DB_VALIDATE_TARGET(${targetname} ${targetdir} ${filename_root})
+       DB_VALIDATE_TARGET(${targetdir} "${filename}" ${filename_root})
+      endif(BRLCAD_EXTRADOCS_VALIDATE)
 
-       # Generate the script that will be used to run the XSLT executable
-       DB_SCRIPT("${targetname}" "${MAN_DIR}/${targetdir}" 
"${XSLT_EXECUTABLE}")
+      # Generate the script that will be used to run the XSLT executable
+      DB_SCRIPT("${targetname}" "${MAN_DIR}/${targetdir}" "${XSLT_EXECUTABLE}")
 
-       add_custom_command(
-         OUTPUT ${outfile} ${EXTRAS}
-         COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
-         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} ${db_outfile} 
${XSLTPROC_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES} ${XSL_MAN_STYLESHEET} 
${deps_list}
-         )
-      else(BRLCAD_EXTRADOCS_VALIDATE)
-
-       # Generate the script that will be used to run the XSLT executable
-       DB_SCRIPT("${targetname}" "${MAN_DIR}/${targetdir}" 
"${XSLT_EXECUTABLE}")
-
-       add_custom_command(
-         OUTPUT ${outfile} ${EXTRAS}
-         COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
-         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} 
${XSLTPROC_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES} ${XSL_MAN_STYLESHEET} 
${deps_list}
-         )
-      endif(BRLCAD_EXTRADOCS_VALIDATE)
+      add_custom_command(
+       OUTPUT ${outfile} ${EXTRAS}
+       COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
+       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} ${xml_valid_stamp} 
${XSLTPROC_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES} ${XSL_MAN_STYLESHEET} 
${deps_list}
+       )
       add_custom_target(${targetname} ALL DEPENDS ${outfile})
 
       # CMAKE_CFG_INTDIR can't be used in installation rules:
@@ -272,6 +263,16 @@
       set(BRLCAD_EXTRADOCS_MAN_TARGETS ${BRLCAD_EXTRADOCS_MAN_TARGETS} 
${targetname})
       set_property(GLOBAL PROPERTY BRLCAD_EXTRADOCS_MAN_TARGETS 
"${BRLCAD_EXTRADOCS_MAN_TARGETS}")
 
+      # If multiple outputs are being generated from the same file, make sure
+      # one of them is run to completion before the others to avoid multiple
+      # triggerings of the XML valiation command.
+      get_property(1ST_TARGET SOURCE ${filename} PROPERTY 1ST_TARGET)
+      if(1ST_TARGET)
+       add_dependencies(${targetname} ${1ST_TARGET})
+      else(1ST_TARGET)
+       set_property(SOURCE ${filename} PROPERTY 1ST_TARGET "${targetname}")
+      endif(1ST_TARGET)
+
     endforeach(filename ${${xml_files}})
   endif(BRLCAD_EXTRADOCS_MAN)
   # Mark files for distcheck
@@ -281,6 +282,7 @@
 # PDF output is generated in a two stage process - the XML file is first
 # converted to an "FO" file, and the FO file is in turn translated to PDF.
 macro(DOCBOOK_TO_PDF targetname_suffix xml_files targetdir deps_list)
+  set(xml_valid_stamp)
   if(BRLCAD_EXTRADOCS_PDF)
     foreach(filename ${${xml_files}})
       string(REGEX REPLACE "([0-9a-z_-]*).xml" "\\1" filename_root 
"${filename}")
@@ -294,21 +296,14 @@
       set(fo_outfile ${outfile})
       set(CURRENT_XSL_STYLESHEET ${XSL_FO_STYLESHEET})
       if(BRLCAD_EXTRADOCS_VALIDATE)
-       DB_VALIDATE_TARGET(${targetname} ${targetdir} ${filename_root})
-       DB_SCRIPT("${targetname}" "${DOC_DIR}/${targetdir}" 
"${XSLT_EXECUTABLE}")
-       add_custom_command(
-         OUTPUT ${outfile}
-         COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
-         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} ${db_outfile} 
${XSLTPROC_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES} ${XSL_FO_STYLESHEET} 
${deps_list}
-         )
-      else(BRLCAD_EXTRADOCS_VALIDATE)
-       DB_SCRIPT("${targetname}" "${DOC_DIR}/${targetdir}" 
"${XSLT_EXECUTABLE}")
-       add_custom_command(
-         OUTPUT ${outfile}
-         COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
-         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} 
${XSLTPROC_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES} ${XSL_FO_STYLESHEET} 
${deps_list}
-         )
+       DB_VALIDATE_TARGET(${targetdir} "${filename}" ${filename_root})
       endif(BRLCAD_EXTRADOCS_VALIDATE)
+      DB_SCRIPT("${targetname}" "${DOC_DIR}/${targetdir}" "${XSLT_EXECUTABLE}")
+      add_custom_command(
+       OUTPUT ${outfile}
+       COMMAND ${CMAKE_COMMAND} -P ${scriptfile}
+       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename} ${xml_valid_stamp} 
${XSLTPROC_EXECUTABLE_TARGET} ${DOCBOOK_RESOURCE_FILES} ${XSL_FO_STYLESHEET} 
${deps_list}
+       )
       set(targetname ${filename_root}_${targetname_suffix}_pdf)
       set(outfile ${bin_root}/${DOC_DIR}/${targetdir}/${filename_root}.pdf)
       DB_SCRIPT("${targetname}_pdf" "${DOC_DIR}/${targetdir}" 
"${PDF_CONV_EXECUTABLE}")
@@ -327,6 +322,17 @@
       get_property(BRLCAD_EXTRADOCS_PDF_TARGETS GLOBAL PROPERTY 
BRLCAD_EXTRADOCS_PDF_TARGETS)
       set(BRLCAD_EXTRADOCS_PDF_TARGETS ${BRLCAD_EXTRADOCS_PDF_TARGETS} 
${targetname})
       set_property(GLOBAL PROPERTY BRLCAD_EXTRADOCS_PDF_TARGETS 
"${BRLCAD_EXTRADOCS_PDF_TARGETS}")
+
+      # If multiple outputs are being generated from the same file, make sure
+      # one of them is run to completion before the others to avoid multiple
+      # triggerings of the XML valiation command.
+      get_property(1ST_TARGET SOURCE ${filename} PROPERTY 1ST_TARGET)
+      if(1ST_TARGET)
+       add_dependencies(${targetname} ${1ST_TARGET})
+      else(1ST_TARGET)
+       set_property(SOURCE ${filename} PROPERTY 1ST_TARGET "${targetname}")
+      endif(1ST_TARGET)
+
     endforeach(filename ${${xml_files}})
   endif(BRLCAD_EXTRADOCS_PDF)
   CMAKEFILES(${${xml_files}})

Modified: brlcad/trunk/misc/CMake/msv.cmake.in
===================================================================
--- brlcad/trunk/misc/CMake/msv.cmake.in        2012-12-07 05:51:27 UTC (rev 
54021)
+++ brlcad/trunk/misc/CMake/msv.cmake.in        2012-12-07 15:58:56 UTC (rev 
54022)
@@ -33,12 +33,12 @@
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 ###
-execute_process(COMMAND "@CMAKE_COMMAND@" -E remove -f "@db_outfile@")
+execute_process(COMMAND "@CMAKE_COMMAND@" -E remove -f "@xml_valid_stamp@")
 execute_process(COMMAND msv -warning 
"@BRLCAD_BINARY_DIR@/doc/docbook/resources/other/docbook-schema/rng/docbookxi.rng"
 "@CMAKE_CURRENT_SOURCE_DIR@/@filename@" RESULT_VARIABLE CMDRESULT)
 if(CMDRESULT)
   message(FATAL_ERROR "msv failure: ${CMDRESULT}")
 else(CMDRESULT)
-  execute_process(COMMAND "@CMAKE_COMMAND@" -E touch "@db_outfile@")
+  execute_process(COMMAND "@CMAKE_COMMAND@" -E touch "@xml_valid_stamp@")
 endif(CMDRESULT)
 
 

Modified: brlcad/trunk/misc/CMake/rnv.cmake.in
===================================================================
--- brlcad/trunk/misc/CMake/rnv.cmake.in        2012-12-07 05:51:27 UTC (rev 
54021)
+++ brlcad/trunk/misc/CMake/rnv.cmake.in        2012-12-07 15:58:56 UTC (rev 
54022)
@@ -33,12 +33,12 @@
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 ###
-execute_process(COMMAND "@CMAKE_COMMAND@" -E remove -f "@db_outfile@")
+execute_process(COMMAND "@CMAKE_COMMAND@" -E remove -f "@xml_valid_stamp@")
 execute_process(COMMAND rnv 
"@BRLCAD_BINARY_DIR@/doc/docbook/resources/other/docbook-schema/rng/docbookxi.rnc"
 "@CMAKE_CURRENT_SOURCE_DIR@/@filename@" RESULT_VARIABLE CMDRESULT)
 if(CMDRESULT)
   message(FATAL_ERROR "rnv failure: ${CMDRESULT}")
 else(CMDRESULT)
-  execute_process(COMMAND "@CMAKE_COMMAND@" -E touch "@db_outfile@")
+  execute_process(COMMAND "@CMAKE_COMMAND@" -E touch "@xml_valid_stamp@")
 endif(CMDRESULT)
 
 

Modified: brlcad/trunk/misc/CMake/xmllint.cmake.in
===================================================================
--- brlcad/trunk/misc/CMake/xmllint.cmake.in    2012-12-07 05:51:27 UTC (rev 
54021)
+++ brlcad/trunk/misc/CMake/xmllint.cmake.in    2012-12-07 15:58:56 UTC (rev 
54022)
@@ -33,12 +33,12 @@
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 ###
-execute_process(COMMAND "@CMAKE_COMMAND@" -E remove -f "@db_outfile@")
+execute_process(COMMAND "@CMAKE_COMMAND@" -E remove -f "@xml_valid_stamp@")
 execute_process(COMMAND "@XMLLINT_EXECUTABLE@"  --xinclude --schema 
"@BRLCAD_BINARY_DIR@/doc/docbook/resources/other/docbook-schema/xsd/docbook.xsd"
 --noout --nonet "@CMAKE_CURRENT_SOURCE_DIR@/@filename@" RESULT_VARIABLE 
CMDRESULT)
 if(CMDRESULT)
   message(FATAL_ERROR "xmllint failure: ${CMDRESULT}")
 else(CMDRESULT)
-  execute_process(COMMAND "@CMAKE_COMMAND@" -E touch "@db_outfile@")
+  execute_process(COMMAND "@CMAKE_COMMAND@" -E touch "@xml_valid_stamp@")
 endif(CMDRESULT)
 
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to