From 0f8498f3b5f14301d216975a62d194d5641c47b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 13 Jun 2013 15:21:07 +0200 Subject: [PATCH] Revert "use relative path in tagfiles, otherwise documentation output cannot be moved" This reverts commit ea256c954a6580d693215bd378904229e0847abc. Conflicts: Documentation/CMakeLists.txt --- Documentation/CMakeLists.txt | 2 +- .../doc/Documentation/fig/pkg-small.png | Bin 0 -> 9467 bytes Mesh_3/include/CGAL/make_mesh_3.h | 2 +- Polyhedron/demo/Polyhedron/MainWindow.cpp | 4 +- .../Implicit_function_interface.h | 2 +- .../cgal_create_package_dir.py | 199 ++++++++++++++++++ 6 files changed, 205 insertions(+), 4 deletions(-) create mode 100644 Documentation/doc/Documentation/fig/pkg-small.png create mode 100755 Scripts/developer_scripts/cgal_create_package_dir.py diff --git a/Documentation/CMakeLists.txt b/Documentation/CMakeLists.txt index 01547f79d85..4721628dc9e 100644 --- a/Documentation/CMakeLists.txt +++ b/Documentation/CMakeLists.txt @@ -54,7 +54,7 @@ function(configure_doxygen_package CGAL_PACKAGE_NAME) foreach(depend ${DEPENDENCIES}) file(APPEND ${CGAL_DOC_PACKAGE_DEFAULTS} - "TAGFILES += ${CGAL_DOC_TAG_DIR}/${depend}.tag=../${depend}\n") + "TAGFILES += ${CGAL_DOC_TAG_DIR}/${depend}.tag=${CGAL_DOC_OUTPUT_DIR}/${depend}/html\n") endforeach() configure_file(${CGAL_PACKAGE_DIR}/doc/${CGAL_PACKAGE_NAME}/Doxyfile.in diff --git a/Documentation/doc/Documentation/fig/pkg-small.png b/Documentation/doc/Documentation/fig/pkg-small.png new file mode 100644 index 0000000000000000000000000000000000000000..5609b037587a48c46b483d2c0768c7ae88b40c72 GIT binary patch literal 9467 zcmZ`QsjDeqppv3OAP@}2H?o@G)$`?vj0nC9ne$JA7erHK1zGS4zV2k21HcQ4 z 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 literal 0 HcmV?d00001 diff --git a/Mesh_3/include/CGAL/make_mesh_3.h b/Mesh_3/include/CGAL/make_mesh_3.h index 0e91240e125..ece1ce34164 100644 --- a/Mesh_3/include/CGAL/make_mesh_3.h +++ b/Mesh_3/include/CGAL/make_mesh_3.h @@ -131,7 +131,7 @@ namespace Mesh_3 { template < typename C3T3, typename MeshDomain, typename MeshCriteria > void -init_c3t3(C3T3& c3t3, const MeshDomain& domain, const MeshCriteria& criteria) +init_c3t3(C3T3& c3t3, const MeshDomain& domain, const MeshCriteria&) { typedef typename MeshDomain::Point_3 Point_3; typedef typename MeshDomain::Index Index; diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 126473ec2ad..c290cd9614d 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -777,6 +777,9 @@ void MainWindow::open(QString filename) fileinfo.absoluteDir().absolutePath()); Scene_item* scene_item = load_item(fileinfo, find_loader(load_pair.first)); + if(scene_item != 0) { + this->addToRecentFiles(filename); + } selectSceneItem(scene->addItem(scene_item)); } @@ -1122,7 +1125,6 @@ void MainWindow::on_actionLoad_triggered() this->addToRecentFiles(filename); } else { open(filename); - this->addToRecentFiles(filename); } } } diff --git a/Polyhedron/demo/Polyhedron/implicit_functions/Implicit_function_interface.h b/Polyhedron/demo/Polyhedron/implicit_functions/Implicit_function_interface.h index 77bd7f0d808..4386010f268 100644 --- a/Polyhedron/demo/Polyhedron/implicit_functions/Implicit_function_interface.h +++ b/Polyhedron/demo/Polyhedron/implicit_functions/Implicit_function_interface.h @@ -46,7 +46,7 @@ public: /// In that case, the function will be scanned over the bounding box to /// compute approximation of the extrema. If the method is not /// overloaded by derived classes, the default is to return false. - virtual bool get_min_max(double& min, double& max) { + virtual bool get_min_max(double&, double&) { return false; } }; diff --git a/Scripts/developer_scripts/cgal_create_package_dir.py b/Scripts/developer_scripts/cgal_create_package_dir.py new file mode 100755 index 00000000000..53f62604a08 --- /dev/null +++ b/Scripts/developer_scripts/cgal_create_package_dir.py @@ -0,0 +1,199 @@ +#!/usr/bin/env python + +# This script creates the directory structure for a new package. +# Usage: +# cgal_create_package_dir.py Package_name [optional creation directory] + +import sys +import os +import re +import argparse +import shutil + +parser = argparse.ArgumentParser( + description='Create directory structure for a new CGAL package.', + epilog='A single directory named after the package, which contains ' + + 'the whole directory structure, is created at the creation path.') +parser.add_argument('packagename', + help='name of new CGAL package') +parser.add_argument('creationpath', nargs='?', + help='directory where package is created; ' + + 'if omitted, the package directory is created ' + + 'in the current directory') +args = parser.parse_args() +packagename = args.packagename +creationpath = args.creationpath + +doxystring = \ +r"""@INCLUDE = ${CGAL_DOC_PACKAGE_DEFAULTS} +PROJECT_NAME = "CGAL ${CGAL_CREATED_VERSION_NUM} - Put title of project here" +INPUT = ${CMAKE_SOURCE_DIR}/PACKAGENAME/doc/PACKAGENAME/ \ + ${CMAKE_SOURCE_DIR}/PACKAGENAME/include +""" + +descrstring = \ +r"""// PRETTY PACKAGE NAME should equal the project title in Doxyfile.in + +/// \defgroup PkgPACKAGE PRETTY PACKAGE NAME Reference +/// \defgroup PkgPACKAGEConcepts Concepts +/// \ingroup PkgPACKAGE + +/// \defgroup PkgPACKAGEAlgorithmClasses Algorithm Classes +/// \ingroup PkgPACKAGE + +/// \defgroup PkgPACKAGETraitsClasses Traits Classes +/// \ingroup PkgPACKAGE + +/// \defgroup PkgPACKAGEMiscellaneous Miscellaneous +/// \ingroup PkgPACKAGE + +/*! +\addtogroup PkgPACKAGE +\todo check generated documentation + +\cgalPkgDescriptionBegin{PACKAGE NAME,PkgPACKAGESummary} +\cgalPkgPicture{pkg-small.png} + +\cgalPkgSummaryBegin +\cgalPkgAuthors{PACKAGE AUTHOR} +\cgalPkgDesc{PACKAGE DESCRIPTION. +The package provides ... } +\cgalPkgManuals{Chapter_PACKAGE_NAME,PkgPACKAGE} +\cgalPkgSummaryEnd + +\cgalPkgShortInfoBegin +\cgalPkgSince{X.X} +\cgalPkgDependsOn{\ref PkgDEPENDENCY} +\cgalPkgBib{cgal:x-x} +\cgalPkgLicense{\ref licensesGPL "GPL"} +\cgalPkgDemo{DEMO 1,demo1.zip} +\cgalPkgDemo{DEMO 2,demo2.zip} +\cgalPkgShortInfoEnd + +\cgalPkgDescriptionEnd + +*/ +""" + +usermanstring = \ +r"""namespace CGAL { +/*! + +\mainpage User Manual +\anchor Chapter_PACKAGE_NAME +\anchor chaptermine +\cgalAutoToc +\author AUTHOR1, AUTHOR2 + +This chapter describes the ... + +\section secmydefinitions Definitions + +Section on definitions here ... + +\section secmyexamples Examples + +\subsection myFirstExample First Example + +The following example shows ... + +*/ +} /* namespace CGAL */ +""" + +depsstring = \ +r"""Manual +Kernel_23 +STL_Extension +Algebraic_foundations +Circulator +Stream_support +""" + +if re.match("^[A-Za-z_][A-Za-z0-9_]*$", packagename): + + if creationpath and (not creationpath == '.'): + packagepath = os.path.join(creationpath, packagename) + else: + packagepath = packagename + + os.mkdir(packagepath) + open(os.path.join(packagepath, 'dont_submit'), 'w').close() + + inclpath = os.path.join(packagepath, 'include', 'CGAL', packagename) + os.makedirs(inclpath) + + os.mkdir(os.path.join(packagepath, 'src')) + + testpath = os.path.join(packagepath, 'test', packagename) + os.makedirs(testpath) + os.mkdir(os.path.join(testpath, 'data')) + os.mkdir(os.path.join(testpath, 'include')) + + expath = os.path.join(packagepath, 'examples', packagename) + os.makedirs(expath) + os.mkdir(os.path.join(expath, 'data')) + os.mkdir(os.path.join(expath, 'include')) + open(os.path.join(expath, 'README'), 'w').close() + + demopath = os.path.join(packagepath, 'demo', packagename) + os.makedirs(demopath) + os.mkdir(os.path.join(demopath, 'data')) + os.mkdir(os.path.join(demopath, 'include')) + open(os.path.join(demopath, 'README'), 'w').close() + + benpath = os.path.join(packagepath, 'benchmark', packagename) + os.makedirs(benpath) + + os.mkdir(os.path.join(packagepath, 'scripts')) + os.mkdir(os.path.join(packagepath, 'developer_scripts')) + + infopath = os.path.join(packagepath, 'package_info', packagename) + os.makedirs(infopath) + open(os.path.join(infopath, 'copyright.txt'), 'w').close() + open(os.path.join(infopath, 'description.txt'), 'w').close() + open(os.path.join(infopath, 'license.txt'), 'w').close() + open(os.path.join(infopath, 'long_description.txt'), 'w').close() + open(os.path.join(infopath, 'maintainer'), 'w').close() + + docpath = os.path.join(packagepath, 'doc', packagename) + os.makedirs(docpath) + os.mkdir(os.path.join(docpath, 'CGAL')) + os.mkdir(os.path.join(docpath, 'Concepts')) + figpath = os.path.join(docpath, 'fig') + os.mkdir(figpath) + open(os.path.join(docpath, 'examples.txt'), 'w').close() + + usermanpath = os.path.join(docpath, (packagename + '.txt')) + usermanfile = open(usermanpath, 'w') + usermanfile.write(usermanstring) + usermanfile.close() + + doxypath = os.path.join(docpath, ('Doxyfile.in')) + doxyfile = open(doxypath, 'w') + doxyfile.write(re.sub('PACKAGENAME', packagename, doxystring)) + doxyfile.close() + + descrpath = os.path.join(docpath, 'PackageDescription.txt') + descrfile = open(descrpath, 'w') + descrfile.write(descrstring) + descrfile.close() + + depspath = os.path.join(docpath, ('dependencies')) + depsfile = open(depspath, 'w') + depsfile.write(depsstring) + depsfile.close() + + # try to find figure pkg-small.png and copy it to figure path + scriptdir = os.path.dirname(sys.argv[0]) + cgaldir = os.path.dirname(os.path.dirname(scriptdir)) + figfile = os.path.join(cgaldir, 'Documentation', 'doc', + 'Documentation', 'fig', 'pkg-small.png') + + if os.path.exists(figfile): + shutil.copy(figfile, figpath) +else: + sys.stderr.write("Error: Bad package name: " + packagename + '\n') + sys.stderr.write("The package name should consist of:" + '\n') + sys.stderr.write \ + ("letters, digits and underscores and not start with a digit." + '\n')