--- a +++ b/trunk/cforge/cforge/Package/CFORGE/Scripts/create-package.py @@ -0,0 +1,160 @@ +import sys, os +import zipfile +import cds_script +import uuid +import ui + +ManifestSkeleton="""<?xml version="1.0" encoding="ISO-8859-1"?> +<Package> + <Strings> + <String Id="GeneralName"> + <Neutral>%s</Neutral> + </String> + <String Id="GeneralVendor"> + <Neutral>%s</Neutral> + </String> + <String Id="GeneralCopyright"> + <Neutral>%s</Neutral> + </String> + <String Id="GeneralDescription"> + <Neutral>%s</Neutral> + </String> + <String Id="license"> + <Neutral>%s</Neutral> + </String> + <String Id="TargetDir"> + <Neutral>Target directory</Neutral> + </String> + <String Id="TargetDirDescription"> + <Neutral>The target directory where the projects are saved.</Neutral> + </String> + </Strings> + <General> + <Id>{%s}</Id> + <Version>1.0.0.0</Version> + <Name>$GeneralName</Name> + <Vendor>$GeneralVendor</Vendor> + <Copyright>$GeneralCopyright</Copyright> + <Description>$GeneralDescription</Description> + <LicenseAgreement>$license</LicenseAgreement> + <RequiredInstallerVersion>3.5.10.0</RequiredInstallerVersion> + </General> + <TargetDirectoryDefinitions> + <TargetDirectoryDefinition> + <Id>1</Id> + <Name>$TargetDir</Name> + <Description>$TargetDirDescription</Description> + <PromptUser>True</PromptUser> + <DefaultValue>%%USERPROFILE%%\CODESYS Projects\</DefaultValue> + </TargetDirectoryDefinition> + </TargetDirectoryDefinitions> + <Components> + <Component> + <General> + <Id>1</Id> + <Name>Default</Name> + <Description>Default Package</Description> + <Selectable>false</Selectable> + <SelectedByDefault>true</SelectedByDefault> + </General> + <Dependencies> + </Dependencies> + <Items> +%s + </Items> + </Component> + </Components> +</Package> +""" + +ManifestItemLibrary = """ + <Library> + <Path>%s</Path> + </Library> +""" + +ManifestItemDevDesc = """ + <DeviceDescription> + <Path>%s</Path> + </DeviceDescription> +""" + +ManifestItemProject = """ + <File> + <Path>%s</Path> + <IgnoreArchiveFolder>True</IgnoreArchiveFolder> + <TargetFolder>$1</TargetFolder> + <Overwrite> + <Option>Yes</Option> + </Overwrite> + </File> +""" + +# This is a cforge command (script file) +# this will be run as ironpython script. +# the filename of this script is automatically the corresponding cforge command +# with some magic functions you can easily integrate it nicely into cforge tool + +# cforge_usage: +# here you can return an array of all possible arguments and options that can +# be passed to this command script +def cforge_usage(): + help = [ + ["<path to local repository>", "---"] + ] + + return help + + +if len(sys.argv) <= 1: + print("Oh, there are no arguments. Perhaps you forgot something?") + sys.exit() + +folder = sys.argv[1] +scriptpath = os.path.abspath(os.path.dirname(sys.argv[0])) + + + +def zipdir(path, ziph): + # ziph is zipfile handle + for root, dirs, files in os.walk(path): + for file in files: + filename=os.path.join(root, file) + archname=filename[len(path)+1:] + print("Adding file: %s -> %s" % (filename, archname)) + ziph.write(filename, arcname=archname) + + +# Discover package content +packageItems = "" +license = "" +for root, dirs, files in os.walk(folder): + for file in files: + filename=os.path.join(root, file) + archname=filename[len(folder)+1:] + if file.endswith(".project"): + packageItems += ManifestItemProject % (archname) + if file.endswith(".devdesc"): + packageItems += ManifestItemDevDesc % (archname) + if file.endswith(".library"): + packageItems += ManifestItemLibrary % (archname) + if file == "license.txt": + license = archname; + +if license == "": + file = open(os.path.join(folder, "license.txt"), "w") + if file: + file.write("Add license text...") + file.close(); + license = "license.txt" + +config = ui.Dialog("Create Package", PkgName=True, PkgVendor=True, PkgCopyright=True, PkgDescription=True) + +if config != None: + guid = uuid.uuid1(); + packageManifest = ManifestSkeleton % (config["PkgName"], config["PkgVendor"], config["PkgCopyright"], config["PkgDescription"], "LICENSE.TXT", guid, packageItems) + file = open(os.path.join(folder, "package.manifest"), "w") + if file: + file.write(packageManifest) + file.close(); + print packageManifest \ No newline at end of file