a | b/trunk/cforge/cforge/Package/CFORGE/Scripts/create-package.py | ||
---|---|---|---|
1 | import sys, os |
||
2 | import zipfile |
||
3 | import cds_script |
||
4 | import uuid |
||
5 | import ui |
||
6 | |||
7 | ManifestSkeleton="""<?xml version="1.0" encoding="ISO-8859-1"?> |
||
8 | <Package> |
||
9 | <Strings> |
||
10 | <String Id="GeneralName"> |
||
11 | <Neutral>%s</Neutral> |
||
12 | </String> |
||
13 | <String Id="GeneralVendor"> |
||
14 | <Neutral>%s</Neutral> |
||
15 | </String> |
||
16 | <String Id="GeneralCopyright"> |
||
17 | <Neutral>%s</Neutral> |
||
18 | </String> |
||
19 | <String Id="GeneralDescription"> |
||
20 | <Neutral>%s</Neutral> |
||
21 | </String> |
||
22 | <String Id="license"> |
||
23 | <Neutral>%s</Neutral> |
||
24 | </String> |
||
25 | <String Id="TargetDir"> |
||
26 | <Neutral>Target directory</Neutral> |
||
27 | </String> |
||
28 | <String Id="TargetDirDescription"> |
||
29 | <Neutral>The target directory where the projects are saved.</Neutral> |
||
30 | </String> |
||
31 | </Strings> |
||
32 | <General> |
||
33 | <Id>{%s}</Id> |
||
34 | <Version>1.0.0.0</Version> |
||
35 | <Name>$GeneralName</Name> |
||
36 | <Vendor>$GeneralVendor</Vendor> |
||
37 | <Copyright>$GeneralCopyright</Copyright> |
||
38 | <Description>$GeneralDescription</Description> |
||
39 | <LicenseAgreement>$license</LicenseAgreement> |
||
40 | <RequiredInstallerVersion>3.5.10.0</RequiredInstallerVersion> |
||
41 | </General> |
||
42 | <TargetDirectoryDefinitions> |
||
43 | <TargetDirectoryDefinition> |
||
44 | <Id>1</Id> |
||
45 | <Name>$TargetDir</Name> |
||
46 | <Description>$TargetDirDescription</Description> |
||
47 | <PromptUser>True</PromptUser> |
||
48 | <DefaultValue>%%USERPROFILE%%\CODESYS Projects\</DefaultValue> |
||
49 | </TargetDirectoryDefinition> |
||
50 | </TargetDirectoryDefinitions> |
||
51 | <Components> |
||
52 | <Component> |
||
53 | <General> |
||
54 | <Id>1</Id> |
||
55 | <Name>Default</Name> |
||
56 | <Description>Default Package</Description> |
||
57 | <Selectable>false</Selectable> |
||
58 | <SelectedByDefault>true</SelectedByDefault> |
||
59 | </General> |
||
60 | <Dependencies> |
||
61 | </Dependencies> |
||
62 | <Items> |
||
63 | %s |
||
64 | </Items> |
||
65 | </Component> |
||
66 | </Components> |
||
67 | </Package> |
||
68 | """ |
||
69 | |||
70 | ManifestItemLibrary = """ |
||
71 | <Library> |
||
72 | <Path>%s</Path> |
||
73 | </Library> |
||
74 | """ |
||
75 | |||
76 | ManifestItemDevDesc = """ |
||
77 | <DeviceDescription> |
||
78 | <Path>%s</Path> |
||
79 | </DeviceDescription> |
||
80 | """ |
||
81 | |||
82 | ManifestItemProject = """ |
||
83 | <File> |
||
84 | <Path>%s</Path> |
||
85 | <IgnoreArchiveFolder>True</IgnoreArchiveFolder> |
||
86 | <TargetFolder>$1</TargetFolder> |
||
87 | <Overwrite> |
||
88 | <Option>Yes</Option> |
||
89 | </Overwrite> |
||
90 | </File> |
||
91 | """ |
||
92 | |||
93 | # This is a cforge command (script file) |
||
94 | # this will be run as ironpython script. |
||
95 | # the filename of this script is automatically the corresponding cforge command |
||
96 | # with some magic functions you can easily integrate it nicely into cforge tool |
||
97 | |||
98 | # cforge_usage: |
||
99 | # here you can return an array of all possible arguments and options that can |
||
100 | # be passed to this command script |
||
101 | def cforge_usage(): |
||
102 | help = [ |
||
103 | ["<path to local repository>", "---"] |
||
104 | ] |
||
105 | |||
106 | return help |
||
107 | |||
108 | |||
109 | if len(sys.argv) <= 1: |
||
110 | print("Oh, there are no arguments. Perhaps you forgot something?") |
||
111 | sys.exit() |
||
112 | |||
113 | folder = sys.argv[1] |
||
114 | scriptpath = os.path.abspath(os.path.dirname(sys.argv[0])) |
||
115 | |||
116 | |||
117 | |||
118 | def zipdir(path, ziph): |
||
119 | # ziph is zipfile handle |
||
120 | for root, dirs, files in os.walk(path): |
||
121 | for file in files: |
||
122 | filename=os.path.join(root, file) |
||
123 | archname=filename[len(path)+1:] |
||
124 | print("Adding file: %s -> %s" % (filename, archname)) |
||
125 | ziph.write(filename, arcname=archname) |
||
126 | |||
127 | |||
128 | # Discover package content |
||
129 | packageItems = "" |
||
130 | license = "" |
||
131 | for root, dirs, files in os.walk(folder): |
||
132 | for file in files: |
||
133 | filename=os.path.join(root, file) |
||
134 | archname=filename[len(folder)+1:] |
||
135 | if file.endswith(".project"): |
||
136 | packageItems += ManifestItemProject % (archname) |
||
137 | if file.endswith(".devdesc"): |
||
138 | packageItems += ManifestItemDevDesc % (archname) |
||
139 | if file.endswith(".library"): |
||
140 | packageItems += ManifestItemLibrary % (archname) |
||
141 | if file == "license.txt": |
||
142 | license = archname; |
||
143 | |||
144 | if license == "": |
||
145 | file = open(os.path.join(folder, "license.txt"), "w") |
||
146 | if file: |
||
147 | file.write("Add license text...") |
||
148 | file.close(); |
||
149 | license = "license.txt" |
||
150 | |||
151 | config = ui.Dialog("Create Package", PkgName=True, PkgVendor=True, PkgCopyright=True, PkgDescription=True) |
||
152 | |||
153 | if config != None: |
||
154 | guid = uuid.uuid1(); |
||
155 | packageManifest = ManifestSkeleton % (config["PkgName"], config["PkgVendor"], config["PkgCopyright"], config["PkgDescription"], "LICENSE.TXT", guid, packageItems) |
||
156 | file = open(os.path.join(folder, "package.manifest"), "w") |
||
157 | if file: |
||
158 | file.write(packageManifest) |
||
159 | file.close(); |
||
160 | print packageManifest |