regen-msvc.py (6948B)
1 #! /usr/bin/env python3 2 3 import glob 4 import os 5 import uuid 6 7 dirs = set() 8 9 tlv1 = "" 10 for file in glob.iglob("src/libsodium/**/*.c", recursive=True): 11 file = file.replace("/", "\\") 12 tlv1 = tlv1 + ' <ClCompile Include="..\\..\\{}" />\r\n'.format(file) 13 14 tlv2 = "" 15 for file in glob.iglob("src/libsodium/**/*.h", recursive=True): 16 file = file.replace("/", "\\") 17 tlv2 = tlv2 + ' <ClInclude Include="..\\..\\{}" />\r\n'.format(file) 18 19 tlf1 = "" 20 for file in glob.iglob("src/libsodium/**/*.c", recursive=True): 21 file = file.replace("/", "\\") 22 tlf1 = tlf1 + ' <ClCompile Include="..\\..\\{}">\r\n'.format(file) 23 tlf1 = tlf1 + " <Filter>Source Files</Filter>\r\n" 24 tlf1 = tlf1 + " </ClCompile>\r\n" 25 26 tlf2 = "" 27 for file in glob.iglob("src/libsodium/**/*.h", recursive=True): 28 file = file.replace("/", "\\") 29 tlf2 = tlf2 + ' <ClInclude Include="..\\..\\{}">\r\n'.format(file) 30 tlf2 = tlf2 + " <Filter>Header Files</Filter>\r\n" 31 tlf2 = tlf2 + " </ClInclude>\r\n" 32 33 v1 = "" 34 for file in glob.iglob("src/libsodium/**/*.c", recursive=True): 35 file = file.replace("/", "\\") 36 v1 = v1 + ' <ClCompile Include="..\\..\\..\\..\\{}" />\r\n'.format(file) 37 38 v2 = "" 39 for file in glob.iglob("src/libsodium/**/*.h", recursive=True): 40 file = file.replace("/", "\\") 41 v2 = v2 + ' <ClInclude Include="..\\..\\..\\..\\{}" />\r\n'.format(file) 42 43 f1 = "" 44 for file in glob.iglob("src/libsodium/**/*.c", recursive=True): 45 basedir = os.path.dirname(file).replace("src/libsodium/", "") 46 t = basedir 47 while t != "": 48 dirs.add(t) 49 t = os.path.dirname(t) 50 basedir = basedir.replace("/", "\\") 51 file = file.replace("/", "\\") 52 f1 = f1 + ' <ClCompile Include="..\\..\\..\\..\\{}">\r\n'.format(file) 53 f1 = f1 + " <Filter>{}</Filter>\r\n".format(basedir) 54 f1 = f1 + " </ClCompile>\r\n" 55 56 f2 = "" 57 for file in glob.iglob("src/libsodium/**/*.h", recursive=True): 58 basedir = os.path.dirname(file).replace("src/libsodium/", "") 59 t = basedir 60 while t != "": 61 dirs.add(t) 62 t = os.path.dirname(t) 63 basedir = basedir.replace("/", "\\") 64 file = file.replace("/", "\\") 65 f2 = f2 + ' <ClInclude Include="..\\..\\..\\..\\{}">\r\n'.format(file) 66 f2 = f2 + " <Filter>{}</Filter>\r\n".format(basedir) 67 f2 = f2 + " </ClInclude>\r\n" 68 69 fd = "" 70 dirs = list(dirs) 71 dirs.sort() 72 for dir in dirs: 73 dir = dir.replace("/", "\\") 74 uid = uuid.uuid3(uuid.UUID(bytes=b"LibSodiumMSVCUID"), dir) 75 fd = fd + ' <Filter Include="{}">\r\n'.format(dir) 76 fd = fd + " <UniqueIdentifier>{{{}}}</UniqueIdentifier>\r\n".format(uid) 77 fd = fd + " </Filter>\r\n" 78 79 80 def get_project_configurations(vs_version): 81 projconfig = "" 82 configs = [ 83 "DebugDLL", 84 "ReleaseDLL", 85 "DebugLIB", 86 "ReleaseLIB", 87 "DebugLTCG", 88 "ReleaseLTCG", 89 ] 90 platforms = ["Win32", "x64"] 91 # add arm64 platform only for v142+ toolchain 92 if vs_version >= 142: 93 platforms.append("ARM64") 94 for config in configs: 95 for platform in platforms: 96 projconfig = ( 97 projconfig 98 + ' <ProjectConfiguration Include="{}|{}">\r\n'.format( 99 config, platform 100 ) 101 ) 102 projconfig = ( 103 projconfig 104 + " <Configuration>{}</Configuration>\r\n".format(config) 105 ) 106 projconfig = projconfig + " <Platform>{}</Platform>\r\n".format( 107 platform 108 ) 109 projconfig = projconfig + " </ProjectConfiguration>\r\n" 110 return projconfig 111 112 113 def apply_template(tplfile, outfile, sbox): 114 tpl = "" 115 with open(tplfile, "rb") as fd: 116 tpl = fd.read() 117 for s in sbox.keys(): 118 tpl = tpl.replace( 119 str.encode("{{" + s + "}}", "utf8"), str.encode(str.strip(sbox[s]), "utf8") 120 ) 121 122 with open(outfile, "wb") as fd: 123 fd.write(tpl) 124 125 126 sbox = { 127 "tlv1": tlv1, 128 "tlv2": tlv2, 129 "tlf1": tlf1, 130 "tlf2": tlf2, 131 "v1": v1, 132 "v2": v2, 133 "f1": f1, 134 "f2": f2, 135 "fd": fd, 136 } 137 138 sd = os.path.dirname(os.path.realpath(__file__)) 139 140 apply_template( 141 sd + "/tl_libsodium.vcxproj.filters.tpl", 142 "ci/appveyor/libsodium.vcxproj.filters", 143 sbox, 144 ) 145 146 sbox.update({"platform": "v140"}) 147 sbox.update({"configurations": get_project_configurations(140)}) 148 apply_template(sd + "/tl_libsodium.vcxproj.tpl", "ci/appveyor/libsodium.vcxproj", sbox) 149 150 apply_template( 151 sd + "/libsodium.vcxproj.filters.tpl", 152 "builds/msvc/vs2022/libsodium/libsodium.vcxproj.filters", 153 sbox, 154 ) 155 apply_template( 156 sd + "/libsodium.vcxproj.filters.tpl", 157 "builds/msvc/vs2019/libsodium/libsodium.vcxproj.filters", 158 sbox, 159 ) 160 apply_template( 161 sd + "/libsodium.vcxproj.filters.tpl", 162 "builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters", 163 sbox, 164 ) 165 apply_template( 166 sd + "/libsodium.vcxproj.filters.tpl", 167 "builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters", 168 sbox, 169 ) 170 apply_template( 171 sd + "/libsodium.vcxproj.filters.tpl", 172 "builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters", 173 sbox, 174 ) 175 apply_template( 176 sd + "/libsodium.vcxproj.filters.tpl", 177 "builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters", 178 sbox, 179 ) 180 apply_template( 181 sd + "/libsodium.vcxproj.filters.tpl", 182 "builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters", 183 sbox, 184 ) 185 186 sbox.update({"platform": "v143"}) 187 sbox.update({"configurations": get_project_configurations(143)}) 188 apply_template( 189 sd + "/libsodium.vcxproj.tpl", 190 "builds/msvc/vs2022/libsodium/libsodium.vcxproj", 191 sbox, 192 ) 193 194 sbox.update({"platform": "v142"}) 195 sbox.update({"configurations": get_project_configurations(142)}) 196 apply_template( 197 sd + "/libsodium.vcxproj.tpl", 198 "builds/msvc/vs2019/libsodium/libsodium.vcxproj", 199 sbox, 200 ) 201 202 sbox.update({"platform": "v141"}) 203 sbox.update({"configurations": get_project_configurations(141)}) 204 apply_template( 205 sd + "/libsodium.vcxproj.tpl", 206 "builds/msvc/vs2017/libsodium/libsodium.vcxproj", 207 sbox, 208 ) 209 210 sbox.update({"platform": "v140"}) 211 sbox.update({"configurations": get_project_configurations(140)}) 212 apply_template( 213 sd + "/libsodium.vcxproj.tpl", 214 "builds/msvc/vs2015/libsodium/libsodium.vcxproj", 215 sbox, 216 ) 217 218 sbox.update({"platform": "v120"}) 219 sbox.update({"configurations": get_project_configurations(120)}) 220 apply_template( 221 sd + "/libsodium.vcxproj.tpl", 222 "builds/msvc/vs2013/libsodium/libsodium.vcxproj", 223 sbox, 224 ) 225 226 sbox.update({"platform": "v110"}) 227 sbox.update({"configurations": get_project_configurations(110)}) 228 apply_template( 229 sd + "/libsodium.vcxproj.tpl", 230 "builds/msvc/vs2012/libsodium/libsodium.vcxproj", 231 sbox, 232 ) 233 234 sbox.update({"platform": "v100"}) 235 sbox.update({"configurations": get_project_configurations(100)}) 236 apply_template( 237 sd + "/libsodium.vcxproj.tpl", 238 "builds/msvc/vs2010/libsodium/libsodium.vcxproj", 239 sbox, 240 )