quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

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 )