#!/usr/bin/python """Add a class to the module passed as the first argument. """ import os import sys import getopt import shutil rawheader="""/** * \\file ClassName.h * \\brief XXXXXXXXXXXXXX * * Copyright 2007-2010 IMP Inventors. All rights reserved. */ #ifndef IMPMODULENAME_CLASS_NAME_H #define IMPMODULENAME_CLASS_NAME_H #include "config.h" #include #include #include IMPMODULENAME_BEGIN_NAMESPACE //! XXXX /** XXXXXX. */ class IMPMODULENAMEEXPORT ClassName: public classtype { public: //! XXXX ClassName(); CLASSTYPE }; IMPMODULENAME_END_NAMESPACE #endif /* IMPMODULENAME_CLASS_NAME_H */ """ rawcpp="""/** * \\file ClassName.cpp * \\brief XXXX. * * Copyright 2007-2010 IMP Inventors. All rights reserved. * */ #include "IMP/modulename/ClassName.h" IMPMODULENAME_BEGIN_NAMESPACE ClassName::ClassName( ){ } void ClassName::show(std::ostream &out) const { out << "ClassName" << std::endl; } IMPMODULENAME_END_NAMESPACE """ def usage(): print "Usage: modulename \'Class Name\' [parent_type]\n" % sys.argv[0] print "Add the class ClassName to module modulename inheriting from parent_type.\n" def main(): if len(sys.argv) != 3 and len(sys.argv) != 4: usage() exit(1) modulename = sys.argv[1] classname =sys.argv[2] ccclassname= classname.replace(" ", "") ucclassname= classname.upper().replace(" ", "_") ucmodname= modulename.upper() if len(sys.argv) >3: type= sys.argv[3] typemacro= "IMP_"+type.upper()+"("+ccclassname +", get_module_version_info())" else: type="RefCountedObject" typemacro="IMP_REF_COUNTED_DESTRUCTOR("+ccclassname+")" print "Adding "+classname+" to " + modulename header=rawheader.replace("ClassName", ccclassname)\ .replace("modulename", modulename)\ .replace("CLASS_NAME", ucclassname)\ .replace("MODULENAME", ucmodname)\ .replace('classtype', type).replace('CLASSTYPE', typemacro) cpp=rawcpp.replace("ClassName", ccclassname)\ .replace("modulename", modulename)\ .replace("CLASS_NAME", ucclassname)\ .replace("MODULENAME", ucmodname).replace("modulename", modulename) open(os.path.join("modules", modulename, "include", ccclassname+".h"), 'w')\ .write(header); open(os.path.join("modules", modulename, "src", ccclassname+".cpp"), 'w')\ .write(cpp); if __name__ == '__main__': main()