Commit cfb236f2 authored by Victor Poughon's avatar Victor Poughon

ENH: make Cookbook a cmake target

parent e80f1451
......@@ -455,6 +455,10 @@ add_subdirectory(Utilities/Doxygen)
add_subdirectory(Utilities/Completion)
if (BUILD_DOCUMENTATION)
add_subdirectory(Documentation/Cookbook)
endif()
#----------------------------------------------------------------------------
# Provide a target to generate the SuperBuild archive (only for Unix)
if(UNIX)
......
#!/bin/sh
export LD_LIBRARY_PATH=@OTB_INSTALL_PREFIX@/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=@CMAKE_BINARY_DIR@/lib:$LD_LIBRARY_PATH
export PYTHONPATH=@OTB_PYTHONPATH@:$PYTHONPATH
export OTB_APPLICATION_PATH=@OTB_APPLICATION_PATH@
@PYTHON_EXECUTABLE@ @CMAKE_SOURCE_DIR@/Scripts/otbGenerateWrappersRstDoc.py -o "$1"
python3 @CMAKE_CURRENT_SOURCE_DIR@/Scripts/otbGenerateWrappersRstDoc.py -o "$1"
set(OUT_OF_SOURCE_BUILD FALSE)
#
# Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES)
#
# This file is part of Orfeo Toolbox
#
# https://www.orfeo-toolbox.org/
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Build the cookbook
#
message(STATUS "")
message(STATUS "Configuring Cookbook...")
message(STATUS "")
if(NOT PROJECT_NAME)
cmake_minimum_required(VERSION 3.0)
project(OTBCookBook)
set(OUT_OF_SOURCE_BUILD TRUE)
option(BUILD_TESTING "Build the testing tree." ON)
endif()
if(BUILD_TESTING)
enable_testing()
include(CTest)
endif()
string(TIMESTAMP OTB_COPYRIGHT_YEAR "%Y")
set(OTB_COPYRIGHT_TEXT "${OTB_COPYRIGHT_YEAR} CNES.The OTB CookBook is licensed under a Creative Commons Attribution-ShareAlike 4.0 International license (CC-BY-SA)")
#find OTB
find_package(OTB REQUIRED)
if( OTB_FOUND )
include(${OTB_USE_FILE})
message(STATUS "Found OTB: ${OTB_DIR} (found version \"${OTB_VERSION}\")")
else()
message(FATAL_ERROR "OTB not found. Please set OTB_DIR")
message(FATAL_ERROR "OTB not found while configuring cookbook")
return()
endif()
get_filename_component(OTB_INSTALL_PREFIX ${OTB_MODULES_DIR} PATH)
get_filename_component(OTB_INSTALL_PREFIX ${OTB_INSTALL_PREFIX} PATH)
get_filename_component(OTB_INSTALL_PREFIX ${OTB_INSTALL_PREFIX} PATH)
get_filename_component(OTB_INSTALL_PREFIX ${OTB_INSTALL_PREFIX} PATH)
message(STATUS "OTB_PYTHONPATH = '${OTB_PYTHONPATH}'")
message(STATUS "OTB_APPLICATION_PATH = '${OTB_APPLICATION_PATH}'")
message(STATUS "OTB_INSTALL_PREFIX = '${OTB_INSTALL_PREFIX}'")
if(NOT OTB_PYTHONPATH)
message(FATAL_ERROR "OTB_PYTHONPATH empty")
endif()
if(NOT OTB_APPLICATION_PATH)
message(FATAL_ERROR "OTB_APPLICATION_PATH empty")
endif()
if(NOT OTB_INSTALL_PREFIX)
message(FATAL_ERROR "OTB_INSTALL_PREFIX empty")
endif()
macro(remove_and_make_directories)
foreach(dir in ${ARGV})
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${dir})
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${dir})
endforeach()
endmacro()
#find Python
find_package(PythonInterp REQUIRED)
# here we could add
# find_package (Python3 COMPONENTS Interpreter)
# but it requires cmake 3.12+
find_program(SH_INTERP sh)
mark_as_advanced(SH_INTERP)
......@@ -73,18 +58,37 @@ mark_as_advanced(SPHINX_BUILD)
find_program(PDFLATEX_COMMAND NAMES pdflatex )
mark_as_advanced(PDFLATEX_COMMAND)
foreach(cmd LATEX_COMMAND TAR_COMMAND PDFLATEX_COMMAND SPHINX_BUILD SH_INTERP)
# Check that we found everything we need
foreach(cmd
OTB_PYTHONPATH
OTB_APPLICATION_PATH
LATEX_COMMAND
TAR_COMMAND
PDFLATEX_COMMAND
SPHINX_BUILD
SH_INTERP)
if(NOT ${cmd})
message(FATAL_ERROR "${cmd} not set. Cannot continue")
endif()
endforeach()
set(RST_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rst)
set(RST_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/rst)
set(LATEX_DIR ${CMAKE_CURRENT_BINARY_DIR}/latex)
set(HTML_DIR ${CMAKE_CURRENT_BINARY_DIR}/html)
message(STATUS "RST_SOURCE_DIR = ${RST_SOURCE_DIR}")
message(STATUS "RST_BINARY_DIR = ${RST_BINARY_DIR}")
message(STATUS "LATEX_DIR = ${LATEX_DIR}")
message(STATUS "HTML_DIR = ${HTML_DIR}")
# Clean any existing build
macro(remove_and_make_directories)
foreach(dir in ${ARGV})
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${dir})
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${dir})
endforeach()
endmacro()
remove_and_make_directories(
${HTML_DIR}
......@@ -107,6 +111,9 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/Art DESTINATION ${RST_BINARY_DIR})
set(SPHINX_CONF_DIR ${CMAKE_CURRENT_BINARY_DIR})
string(TIMESTAMP OTB_COPYRIGHT_YEAR "%Y")
set(OTB_COPYRIGHT_TEXT "${OTB_COPYRIGHT_YEAR} CNES.The OTB CookBook is licensed under a Creative Commons Attribution-ShareAlike 4.0 International license (CC-BY-SA)")
configure_file(${RST_SOURCE_DIR}/conf.py.in ${SPHINX_CONF_DIR}/conf.py @ONLY)
#configure_file(${RST_SOURCE_DIR}/Makefile.in ${RST_GENERATED_SOURCE_DIR}/Makefile.sphinx @ONLY)
......@@ -122,6 +129,8 @@ add_custom_target(generate_otbapps_rst
${RST_BINARY_DIR}
WORKING_DIRECTORY ${RST_BINARY_DIR}
COMMENT "Auto-generating Application Reference Documentation in RST"
DEPENDS OTBSWIGWrapper-all
# TODO add DEPENDS to all apps
)
add_custom_target(CookBookHTML
......
#!/usr/bin/python
#!/usr/bin/env python3
import otbApplication
import os
import sys
......@@ -59,7 +60,7 @@ def GetPixelType(value):
# look for type
foundcode = -1
foundname = ""
for ptypename, ptypecode in pixeltypes.iteritems():
for ptypename, ptypecode in pixeltypes.items():
if value.endswith(ptypename):
foundcode = ptypecode
foundname = ptypename
......@@ -166,14 +167,14 @@ def FindLengthOfLargestColumnText(app,paramlist):
def RstTableHeaderLine(strlist, listlen, delimiter):
line = "+"
for i in xrange(len(strlist)):
for i in range(len(strlist)):
line += delimiter * listlen[i] + '+'
line += linesep
return line
def RstTableHeading(strlist, listlen):
heading = RstTableHeaderLine(strlist, listlen, '-')
for i in xrange(len(strlist)):
for i in range(len(strlist)):
spaces = ' ' * ((listlen[i] - len(strlist[i])) )
heading += '|' + strlist[i] + spaces
heading += '|' + linesep
......@@ -189,7 +190,7 @@ def GenerateParametersTable(app,paramlist):
colLength = FindLengthOfLargestColumnText(app, paramlist)
output = linesep + ".. [#] Table: Parameters table for " + ConvertString(app.GetDocName()) + "." + linesep + linesep
headerlist = ["Parameter Key", "Parameter Name", "Parameter Type"]
for i in xrange(len(headerlist)):
for i in range(len(headerlist)):
colLength[i] = len(headerlist[i]) if colLength[i] < len(headerlist[i]) else colLength[i]
output += RstTableHeading(headerlist, colLength)
for param in paramlist:
......@@ -446,7 +447,7 @@ def ApplicationToRst(appname):
try:
app = otbApplication.Registry.CreateApplication(appname)
except e:
print e
print(e)
# TODO: remove this when bug 440 is fixed
app.Init()
output += RstHeading(app.GetName() + ' - ' + app.GetDocName(), '^')
......@@ -516,18 +517,19 @@ def GenerateRstForApplications():
allApps = None
try:
allApps = otbApplication.Registry.GetAvailableApplications( )
print(allApps)
except:
print 'error in otbApplication.Registry.GetAvailableApplications()'
print('error in otbApplication.Registry.GetAvailableApplications()')
sys.exit(1)
if not allApps:
print 'No OTB applications available. Please check OTB_APPLICATION_PATH env variable'
sys.exit(1)
print('No OTB applications available. Please check OTB_APPLICATION_PATH env variable')
sys.exit(1)
writtenTags = []
appNames = [app for app in allApps if app not in blackList]
print "All apps: %s" % (appNames,)
print("All apps: %s" % (appNames,))
appIndexFile = open(RST_DIR + '/Applications.rst', 'w')
appIndexFile.write(RstPageHeading("Applications Reference Documentation", "2", ref="apprefdoc"))
......@@ -535,7 +537,7 @@ def GenerateRstForApplications():
tags = GetApplicationTags(appName)
if not tags:
print "No tags for application: " + appName
print("No tags for application: " + appName)
sys.exit(1)
tag = tags[0]
......@@ -545,7 +547,7 @@ def GenerateRstForApplications():
tag_ = tag.replace(' ', '_')
if not tag_:
print 'empty tag found for ' + appName
print('empty tag found for ' + appName)
if not tag_ in writtenTags:
appIndexFile.write('\tApplications/' + tag_ + '.rst' + linesep)
......@@ -562,7 +564,7 @@ def GenerateRstForApplications():
tagFile.write("\tapp_" + appName + linesep)
tagFile.close()
print "Generating " + appName + ".rst" + " on tag " + tag_
print("Generating " + appName + ".rst" + " on tag " + tag_)
appFile = open(RST_DIR + '/Applications/app_' + appName + '.rst', 'w')
out = ApplicationToRst(appName)
appFile.write(out)
......@@ -571,17 +573,16 @@ def GenerateRstForApplications():
return out
# Start parsing options
parser = OptionParser(usage="Export application(s) to rst file.")
parser.add_option("-a",dest="appname",help="Generate rst only for this application (eg: OrthoRectification)")
parser.add_option("-m",dest="module",help="Generate rst only for this module (eg: Image Manipulation)")
parser.add_option("-o",dest="rstdir",help="directory where rst files are generated")
(options, args) = parser.parse_args()
if __name__ == "__main__":
parser = OptionParser(usage="Export application(s) to rst file.")
parser.add_option("-a",dest="appname",help="Generate rst only for this application (eg: OrthoRectification)")
parser.add_option("-m",dest="module",help="Generate rst only for this module (eg: Image Manipulation)")
parser.add_option("-o",dest="rstdir",help="directory where rst files are generated")
(options, args) = parser.parse_args()
RST_DIR = options.rstdir
RST_DIR = options.rstdir
if not options.appname is None:
out = ApplicationToRst(options.appname)
#print out
else:
GenerateRstForApplications()
if not options.appname is None:
out = ApplicationToRst(options.appname)
else:
GenerateRstForApplications()
......@@ -14,12 +14,7 @@
import sys
import os
HAVE_RTD_THEME=False
try:
import sphinx_rtd_theme
HAVE_RTD_THEME=True
except:
pass
import sphinx_rtd_theme
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
......@@ -111,11 +106,10 @@ pygments_style = 'sphinx'
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
if HAVE_RTD_THEME:
html_theme = 'sphinx_rtd_theme'
# Add any paths that contain custom themes here, relative to this directory.
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
html_theme = 'sphinx_rtd_theme'
# Add any paths that contain custom themes here, relative to this directory.
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment