From 5a88307e3e4d3e10755a550097b38958aa3d653d Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 4 Oct 2016 19:40:47 +0200 Subject: [PATCH] support creating Python workbench with fcbt --- src/Tools/fcbt.py | 3 + src/Tools/fcbt/CreatePyModule.py | 121 +++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 src/Tools/fcbt/CreatePyModule.py diff --git a/src/Tools/fcbt.py b/src/Tools/fcbt.py index b12163aa1..8c0a5bf57 100644 --- a/src/Tools/fcbt.py +++ b/src/Tools/fcbt.py @@ -17,6 +17,7 @@ possible commands are: - DistAll (DA) Run all three above modules - NextBuildNumber (NBN) Increase the Build Number of this Version - CreateModule (CM) Insert a new FreeCAD Module in the module directory + - CreatePyModule (CP) Insert a new FreeCAD Python Module in the module directory For help on the modules type: fcbt ? @@ -49,6 +50,8 @@ elif Cmd == "nextbuildnumber" or Cmd == "nbn": import fcbt.NextBuildNumber elif Cmd == "createmodule" or Cmd == "cm": import fcbt.CreateModule +elif Cmd == "createpymodule" or Cmd == "cp": + import fcbt.CreatePyModule elif Cmd == "?" or Cmd == "help" or Cmd == "/h" or Cmd == "/?" or Cmd == "-h" or Cmd == "-help": sys.stdout.write(help1) else: diff --git a/src/Tools/fcbt/CreatePyModule.py b/src/Tools/fcbt/CreatePyModule.py new file mode 100644 index 000000000..678b8c2a9 --- /dev/null +++ b/src/Tools/fcbt/CreatePyModule.py @@ -0,0 +1,121 @@ +# FreeCAD MakeNewBuildNbr script +# (c) 2003 Werner Mayer +# +# Creates a new application + +#*************************************************************************** +#* (c) Werner Mayer (werner.wm.mayer@gmx.de) 2003 * +#* * +#* This file is part of the FreeCAD CAx development system. * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* FreeCAD is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Lesser General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with FreeCAD; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#* Werner Mayer 2003 * +#*************************************************************************** + +import os,sys,string +import FCFileTools +import MakeAppTools +import re + +FilFilter = ["^.*\\.o$", + "^.*\\Makefile$", + "^.*\\.la$", + "^.*\\.lo$", + "^.*\\.positions$", + "^.*\\.aux$", + "^.*\\.bsc$", + "^.*\\.exp$", + "^.*\\.ilg$", + "^.*\\.ilk$", + "^.*\\.in$", + "^.*\\.mak$", + "^.*\\.ncb$", + "^.*\\.opt$", + "^.*\\.pyc$", + "^.*\\.pyd$", + "^.*\\.pdb$", + "^.*\\.plg$"] + +DirFilter = ["^.*\\.o$", + "^Debug$", + "^DebugCmd$", + "^DebugPy$", + "^Release$", + "^ReleaseCmd$", + "^ReleasePy$", + "^Attic$", + "^CVS$", + "^\\.svn$", + "^\\.deps$", + "^\\.libs$"] + +def SetupFilter(MatchList): + RegList = [] + for regexp in MatchList: + a = re.compile(regexp) + RegList.append(a) + return RegList + + +def createApp(Application): + """ + Create a new application by copying the template + """ + # create directory ../Mod/ + if not os.path.isdir("../Mod/"+Application): + os.mkdir("../Mod/"+Application) + else: + sys.stdout.write(Application + " already exists. Please enter another name.\n") + sys.exit() + + + # copying files from _TEMPLATEPY_ to ../Mod/ + sys.stdout.write("Copying files...") + MakeAppTools.copyTemplate("_TEMPLATEPY_","../Mod/"+Application,"_TEMPLATEPY_", Application, SetupFilter(FilFilter),SetupFilter(DirFilter)) + sys.stdout.write("Ok\n") + + # replace the _TEMPLATEPY_ string by + sys.stdout.write("Modifying files...\n") + MakeAppTools.replaceTemplate("../Mod/" + Application,"_TEMPLATEPY_",Application) + MakeAppTools.replaceTemplate("../Mod/" + Application,"${CMAKE_SOURCE_DIR}/src/Tools/","${CMAKE_SOURCE_DIR}/src/Mod/") + # make the congigure script executable + #os.chmod("../Mod/" + Application + "/configure", 0777); + sys.stdout.write("Modifying files done.\n") + + sys.stdout.write(Application + " module created successfully.\n") + +def validateApp(AppName): + """ + Validates the class name + """ + if(len(AppName) < 2): + sys.stdout.write("Too short name: '"+AppName+"'\n") + sys.exit() + # name is long enough + clName="class "+AppName+": self=0" + try: + exec(clName) + except: + # Invalid class name + sys.stdout.write("Invalid name: '"+AppName+"'\n") + sys.exit() + +sys.stdout.write("Please enter a name for your application:") +AppName = sys.stdin.readline()[:-1] +validateApp(AppName) +createApp(AppName)