mirror of https://github.com/CGAL/cgal
200 lines
5.6 KiB
Python
Executable File
200 lines
5.6 KiB
Python
Executable File
#!/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_DOC_VERSION} - 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,PkgPACKAGE}
|
|
\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, and AUTHOR3
|
|
|
|
This chapter describes the ...
|
|
|
|
\section secmydefinitions Definitions
|
|
|
|
Section on definitions here ...
|
|
|
|
\section secmyexamples Examples
|
|
|
|
\subsection myFirstExample First Example
|
|
|
|
The following example shows ...
|
|
|
|
\cgalExample{ }
|
|
|
|
\cgalFigureBegin{figPck,bench.png}
|
|
Left: ...
|
|
\cgalFigureEnd
|
|
|
|
*/
|
|
} /* 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)
|
|
|
|
inclpath = os.path.join(packagepath, 'include', 'CGAL', packagename)
|
|
os.makedirs(inclpath)
|
|
|
|
|
|
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'))
|
|
|
|
demopath = os.path.join(packagepath, 'demo', packagename)
|
|
os.makedirs(demopath)
|
|
os.mkdir(os.path.join(demopath, 'data'))
|
|
os.mkdir(os.path.join(demopath, 'include'))
|
|
|
|
benpath = os.path.join(packagepath, 'benchmark', packagename)
|
|
os.makedirs(benpath)
|
|
|
|
|
|
infopath = os.path.join(packagepath, 'package_info', packagename)
|
|
os.makedirs(infopath)
|
|
open(os.path.join(infopath, 'copyright'), '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')
|