You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ryzom-core/tool/quick_start/find_external.py

154 lines
4.1 KiB
Python

# This script detects all external library paths
# Useful for locating all dynamic libraries
from .common_config import *
import os
def FilterExternalDirs(libs):
filterMap = {
"assimp": "include/assimp/mesh.h",
"boost": "include/boost/algorithm/algorithm.hpp",
"curl": "include/curl/curl.h",
"ffmpeg": "include/libavcodec/codec.h",
"freetype2": "include/freetype2/ft2build.h",
"gl": "include/GL/glcorearb.h",
"gles": "include/GLES2/gl2.h",
"iconv": "include/iconv.h",
"libjpeg": "include/jpeglib.h",
"libpng": "include/png.h",
"libxml2": "include/libxml2/libxml/xmlreader.h",
"lua": "include/lua.h",
"luabind": "include/luabind/luabind.hpp",
"mariadb": "include/mariadb/mysql.h",
"msquic": "include/msquic.h",
"ogg": "include/ogg/ogg.h",
"openal": "include/AL/al.h",
"openssl": "include/openssl/opensslconf.h",
"protobuf": "include/google/protobuf/message.h",
"qt5": "include/QtCore/QBuffer",
"squish": "include/squish.h",
"vorbis": "include/vorbis/codec.h",
"zlib": "include/zlib.h"
}
res = []
for dir in FoundExternalDirs:
for lib in libs:
file = os.path.join(dir, filterMap[lib])
if os.path.isfile(file):
res += [ dir ]
break
return res
# The list of folders to potentially pass to CMake as PREFIX
def FindPrefixPaths(externalDir):
def DirHasAny(dir, includeSearch):
for search in includeSearch:
if os.path.isfile(os.path.join(dir, os.path.normcase(search))):
return True
return False
tempExternal = {}
# Headers to include
includeSearch = [
"include/assimp/mesh.h",
"include/boost/algorithm/algorithm.hpp",
"include/curl/curl.h",
"include/libavcodec/codec.h",
"include/freetype2/ft2build.h",
"include/GL/glcorearb.h",
"include/GLES2/gl2.h",
"include/iconv.h",
"include/jpeglib.h",
"include/png.h",
"include/libxml2/libxml/xmlreader.h",
"include/lua.h",
"include/luabind/luabind.hpp",
"include/mariadb/mysql.h",
"include/msquic.h",
"include/ogg/ogg.h",
"include/AL/al.h",
"include/openssl/opensslconf.h",
"include/google/protobuf/message.h",
"include/QtCore/QBuffer",
"include/squish.h",
"include/vorbis/codec.h",
"include/zlib.h"
]
# Only search one level deep
if DirHasAny(externalDir, includeSearch):
tempExternal[externalDir] = True
for di in os.listdir(externalDir):
if di.startswith("."):
continue
sdi = os.path.join(externalDir, di)
if not os.path.isdir(sdi):
continue
if DirHasAny(sdi, includeSearch):
tempExternal[sdi] = True
res = []
for dir in tempExternal:
res += [ dir ]
return res
# The list of folders to potentially pass into the Visual Studio debug PATH env var
def FindBinPaths(prefixPaths):
tempExternalBinaries = {}
for dir in prefixPaths:
for subDir in os.listdir(dir):
if subDir.startswith("."):
continue
binDir = os.path.join(dir, subDir)
if not os.path.isdir(binDir):
continue
for file in os.listdir(binDir):
if not file.startswith(".") and (file.endswith(".exe") or file.endswith(".dll")):
tempExternalBinaries[binDir] = True
break
res = []
for dir in tempExternalBinaries:
res += [ dir ]
return res
def FindVSPrefixPaths(toolset, platform):
# 2021q4_external_v143_x64
dirExt = "_external_" + toolset + "_" + platform
found = []
for dir in os.listdir("C:\\"):
if not dir.startswith(".") and dir.endswith(dirExt):
found += [ dir ]
found.sort(reverse = True)
if len(found):
return FindPrefixPaths(os.path.join("C:\\", found[0]))
if toolset == "v143":
return FindVSPrefixPaths("v142", platform)
if toolset == "v142":
return FindVSPrefixPaths("v141", platform)
if toolset == "v141":
return FindVSPrefixPaths("v140", platform)
return []
def FindLuaVersion(prefixPaths):
for dir in prefixPaths:
luaHeader = os.path.join(dir, "include/lua.h")
if os.path.isfile(luaHeader):
fi = open(luaHeader)
line = fi.readline()
while line:
if "LUA_VERSION_NUM" in line:
fi.close()
line = line.strip()
syms = line.split()
vers = syms[len(syms) - 1]
return int(vers)
line = fi.readline()
fi.close()
# TODO: For linux, if hunter, don't care,
# otherwise, detect which lua version the system luabind depends on!
return
# end of file