--- a +++ b/codesys-ide/scripts/gen-package-manifest.py @@ -0,0 +1,169 @@ +import sys, os, glob +import uuid +import helper + +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> +""" + + +class SearchBuildDo(helper.SearchBuild): + basepath='' + packageItems='' + license='' + + # define basepath of the package + def setbasepath(self, path): + self.basepath=path + + # Build rules for: + # - package.manifest + # search for all files that we want to pack + def doit(self, filename): + artifacts = list() + + archname=filename[len(self.basepath)+1:] + if filename.endswith(".project"): + self.packageItems += ManifestItemProject % (archname) + if filename.endswith(".devdesc.xml"): + self.packageItems += ManifestItemDevDesc % (archname) + if filename.endswith(".library"): + self.packageItems += ManifestItemLibrary % (archname) + if filename == "license.txt": + self.license = archname; + + return artifacts + + def write(self, name, vendor, copyright, description): + # add an empty license file if none was found + if self.license == '': + file = open(os.path.join(self.basepath, "license.txt"), "w") + if file: + file.write("No license file found.") + file.close(); + self.license = "license.txt" + + guid = uuid.uuid1(); + packageManifest = ManifestSkeleton % (name, vendor, copyright, description, self.license, guid, self.packageItems) + + filename = os.path.join(self.basepath, 'package.manifest') + file = open(filename, "w") + if file: + file.write(packageManifest) + file.close(); + self.artifacts.append(filename) + + +packageFolders = list() +# add trunk / master +if os.path.isdir('trunk'): + packageFolders.append('trunk') +else: + packageFolders.append('.') + +# add all branches +if os.path.isdir('branches'): + for filename in glob.iglob('branches/**'): + if os.path.isdir(filename): + packageFolders.append(filename) + + + +for folder in packageFolders: + print ("creating manifest for folder %s." % folder) + sb = SearchBuildDo() + sb.setbasepath(folder) + sb.search(".library", ".") + sb.search(".project", ".") + sb.search(".devdesc.xml", ".") + sb.search("license.txt", ".") + + name = folder + if name == ".": + name = "master" + sb.write(name, "unknown vendor", "unknown copyright", "no description") + + sb.save(".", ".drone-artifacts") +