OpenSubdiv/cmake/FindDocutils.cmake
David G Yu c53895310a Additional fix/cleanup for FindDocutils.cmake
Always call FindPackageHandleStandardArgs() and allow it to
set DOCUTILS_FOUND appropriately. By marking DOCUTILS_VERSION
as required we'll also get a useful error message if the version
string from RST2HTML_EXECUTABLE could not be parsed correctly.
2021-02-04 14:59:14 -08:00

93 lines
3.1 KiB
CMake

#
# Copyright 2013 Pixar
#
# Licensed under the Apache License, Version 2.0 (the "Apache License")
# with the following modification; you may not use this file except in
# compliance with the Apache License and the following modification to it:
# Section 6. Trademarks. is deleted and replaced with:
#
# 6. Trademarks. This License does not grant permission to use the trade
# names, trademarks, service marks, or product names of the Licensor
# and its affiliates, except as required to comply with Section 4(c) of
# the License and to reproduce the content of the NOTICE file.
#
# You may obtain a copy of the Apache License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the Apache License with the above modification is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the Apache License for the specific
# language governing permissions and limitations under the Apache License.
#
# - Try to find the restructured text to HTML converter
#
# Once done this will define
#
# DOCUTILS_FOUND - System has Docutils
#
# RST2HTML_EXECUTABLE
find_package(PackageHandleStandardArgs)
find_program( RST2HTML_EXECUTABLE
NAMES
rst2html.py
rst2html
DOC
"The Python Docutils reStructuredText to HTML converter"
)
if (RST2HTML_EXECUTABLE)
# Note we only check for a python interpreter and use it for the command
# on Windows. It would be cleaner if we could agree that this is the
# right way to do it for all platforms, or find a way that works for all
# platforms uniformly.
if (WIN32)
find_package(PythonInterp)
if (NOT PYTHON_EXECUTABLE)
message(FATAL_ERROR "Could not find Python interpreter, which is required for Docutils")
endif()
execute_process(COMMAND ${PYTHON_EXECUTABLE} ${RST2HTML_EXECUTABLE} --version OUTPUT_VARIABLE VERSION_STRING )
else()
execute_process(COMMAND ${RST2HTML_EXECUTABLE} --version OUTPUT_VARIABLE VERSION_STRING )
endif()
# The above code may fail to find a version. Which will make the REGEX
# REPLACE below fail and break the build. So we check for an empty
# VERSION_STRING.
if (NOT "${VERSION_STRING}" STREQUAL "")
# find the version
# ex : rst2html (Docutils 0.6 [release], Python 2.6.6, on linux2)
string(REGEX MATCHALL "([^\ ]+\ |[^\ ]+$)" VERSION_TOKENS "${VERSION_STRING}")
# isolate the 3rd. word in the string
list (GET VERSION_TOKENS 2 VERSION_STRING)
# remove white space
string(REGEX REPLACE "[ \t]+$" "" VERSION_STRING ${VERSION_STRING})
string(REGEX REPLACE "^[ \t]+" "" VERSION_STRING ${VERSION_STRING})
set(DOCUTILS_VERSION ${VERSION_STRING})
endif()
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Docutils
REQUIRED_VARS
RST2HTML_EXECUTABLE
DOCUTILS_VERSION
VERSION_VAR
DOCUTILS_VERSION
)
mark_as_advanced(
RST2HTML_EXECUTABLE
)