| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | 
							- from setuptools import setup
 
- from setuptools.command.build_py import build_py
 
- import glob
 
- import os
 
- import pathlib
 
- import shutil
 
- import subprocess
 
- import sys
 
- if os.name != 'nt':
 
-     raise EnvironmentError(f"This is only supported on Windows... not for: {os.name}")
 
- THIS_FOLDER = os.path.abspath(os.path.dirname(__file__))
 
- def getVersion() -> str:
 
-     with open(os.path.join(THIS_FOLDER, 'pydeskband', '__init__.py'), 'r') as f:
 
-         text = f.read()
 
-     for line in text.splitlines():
 
-         if line.startswith('__version__'):
 
-             version = line.split('=', 1)[1].replace('\'', '').replace('"', '')
 
-             return version.strip()
 
-     raise EnvironmentError("Unable to find __version__!")
 
- def get_msbuild() -> str:
 
-     ''' globs to find VS 2019's instance of MSBuild.exe '''
 
-     matches = glob.glob(r'C:\Program Files*\Microsoft Visual Studio\2019\*\MSBuild\*\Bin\MSBuild.exe')
 
-     if matches:
 
-         print(f"MSBuild: {matches[0]}")
 
-         return pathlib.Path(matches[0])
 
-     raise EnvironmentError("Could not find MSBuild for VS 2019!")
 
- def get_sln() -> pathlib.Path:
 
-     sln = pathlib.Path(THIS_FOLDER) / "dll/PyDeskband/PyDeskband.sln"
 
-     if not sln.is_file():
 
-         raise FileNotFoundError(f"Could not find sln file: {sln}")
 
-     return sln
 
- def run_msbuild(configuration, platform) -> pathlib.Path:
 
-     ''' Runs MSBuild for the given configuration/platform. Returns the path to the built dll '''
 
-     if configuration not in ('Debug', 'Release'):
 
-         raise ValueError("configuration should be Debug or Release")
 
-     if platform not in ('x64', 'x86'):
 
-         raise ValueError("platform should be x64 or x86")
 
-     if subprocess.check_call([
 
-         get_msbuild(),
 
-         get_sln(),
 
-         f'/p:Configuration={configuration}',
 
-         f'/p:Platform={platform}',
 
-     ]) == 0:
 
-         arch_folder = 'x64' if platform == 'x64' else ''
 
-         output = pathlib.Path(THIS_FOLDER) / f"dll/PyDeskband/{arch_folder}/{configuration}/PyDeskband.dll"
 
-         if not output.is_file():
 
-             raise FileNotFoundError("MSBuild was successful, though we couldn't find the output dll.")
 
-         return output
 
- class BuildPyCommand(build_py):
 
-     """Custom build command. That will build dlls using MSBuild"""
 
-     def build_and_copy_dlls(self):
 
-         '''
 
-         Build x64 and x86 versions of the dll. Then copies them to pydeskband/dlls within the Python package
 
-         '''
 
-         x64_dll = run_msbuild('Release', 'x64')
 
-         x86_dll = run_msbuild('Release', 'x86')
 
-         dll_dir = pathlib.Path(THIS_FOLDER) / "pydeskband/dlls"
 
-         if not dll_dir.is_dir():
 
-             dll_dir.mkdir()
 
-         # copy dlls to dll dir
 
-         shutil.copy(x64_dll, dll_dir / "PyDeskband_x64.dll")
 
-         shutil.copy(x86_dll, dll_dir / "PyDeskband_x86.dll")
 
-         print("DLLs have been copied!")
 
-     def run(self):
 
-         '''
 
-         Called to perform the build_py step
 
-         '''
 
-         self.build_and_copy_dlls()
 
-         build_py.run(self)
 
- setup(
 
-     name='pydeskband',
 
-     author='csm10495',
 
-     author_email='csm10495@gmail.com',
 
-     url='http://github.com/csm10495/pydeskband',
 
-     version=getVersion(),
 
-     packages=['pydeskband'],
 
-     license='MIT License',
 
-     python_requires='>=3.7',
 
-     long_description=open(os.path.join(os.path.dirname(__file__), 'README.md')).read(),
 
-     long_description_content_type="text/markdown",
 
-     classifiers=[
 
-         'Intended Audience :: Developers',
 
-         'Natural Language :: English',
 
-         'Operating System :: Microsoft :: Windows',
 
-         'Programming Language :: Python',
 
-         'Programming Language :: Python :: 3',
 
-     ],
 
-     package_data={
 
-         "pydeskband": ["dlls/*.dll"],
 
-     },
 
-     cmdclass={
 
-         'build_py': BuildPyCommand
 
-     },
 
-     install_requires=[],
 
- )
 
 
  |