You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.5 KiB

  1. librdkafkaVersion = ''
  2. # read librdkafka version from package.json
  3. import json
  4. import os
  5. with open('../package.json') as f:
  6. librdkafkaVersion = json.load(f)['librdkafka']
  7. librdkafkaWinSufix = '7' if librdkafkaVersion == '0.11.5' else '';
  8. depsPrecompiledDir = '../deps/precompiled'
  9. depsIncludeDir = '../deps/include'
  10. buildReleaseDir = 'Release'
  11. # alternative: 'https://api.nuget.org/v3-flatcontainer/librdkafka.redist/{}/librdkafka.redist.{}.nupkg'.format(librdkafkaVersion, librdkafkaVersion)
  12. env_dist = os.environ
  13. downloadBaseUrl = env_dist['NODE_RDKAFKA_NUGET_BASE_URL'] if 'NODE_RDKAFKA_NUGET_BASE_URL' in env_dist else 'https://globalcdn.nuget.org/packages/'
  14. librdkafkaNugetUrl = downloadBaseUrl + 'librdkafka.redist.{}.nupkg'.format(librdkafkaVersion)
  15. print('download librdkafka form ' + librdkafkaNugetUrl)
  16. outputDir = 'librdkafka.redist'
  17. outputFile = outputDir + '.zip'
  18. dllPath = outputDir + '/runtimes/win{}-x64/native'.format(librdkafkaWinSufix)
  19. libPath = outputDir + '/build/native/lib/win{}/x64/win{}-x64-Release/v120'.format(librdkafkaWinSufix, librdkafkaWinSufix)
  20. includePath = outputDir + '/build/native/include/librdkafka'
  21. # download librdkafka from nuget
  22. try:
  23. # For Python 3.0 and later
  24. from urllib.request import urlopen
  25. except ImportError:
  26. # Fall back to Python 2's urllib2
  27. from urllib2 import urlopen
  28. import ssl
  29. filedata = urlopen(librdkafkaNugetUrl, context=ssl._create_unverified_context())
  30. datatowrite = filedata.read()
  31. with open(outputFile, 'wb') as f:
  32. f.write(datatowrite)
  33. # extract package
  34. import zipfile
  35. zip_ref = zipfile.ZipFile(outputFile, 'r')
  36. zip_ref.extractall(outputDir)
  37. zip_ref.close()
  38. # copy files
  39. import shutil, os, errno
  40. def createdir(dir):
  41. try:
  42. os.makedirs(dir)
  43. except OSError as e:
  44. if errno.EEXIST != e.errno:
  45. raise
  46. createdir(depsPrecompiledDir)
  47. createdir(depsIncludeDir)
  48. createdir(buildReleaseDir)
  49. shutil.copy2(libPath + '/librdkafka.lib', depsPrecompiledDir)
  50. shutil.copy2(libPath + '/librdkafkacpp.lib', depsPrecompiledDir)
  51. shutil.copy2(includePath + '/rdkafka.h', depsIncludeDir)
  52. shutil.copy2(includePath + '/rdkafkacpp.h', depsIncludeDir)
  53. shutil.copy2(dllPath + '/zlib.dll', buildReleaseDir)
  54. shutil.copy2(dllPath + '/msvcr120.dll', buildReleaseDir)
  55. shutil.copy2(dllPath + '/librdkafka.dll', buildReleaseDir)
  56. shutil.copy2(dllPath + '/librdkafkacpp.dll', buildReleaseDir)
  57. if not librdkafkaVersion.startswith('0.'):
  58. shutil.copy2(dllPath + '/libzstd.dll', buildReleaseDir)
  59. shutil.copy2(dllPath + '/msvcp120.dll', buildReleaseDir)
  60. # clean up
  61. os.remove(outputFile)
  62. shutil.rmtree(outputDir)