| import importlib.util |
| import sys |
| import os |
| import os.path |
| from platform import machine |
| from setuptools import setup, find_packages |
| from setuptools.extension import Extension |
| from setuptools.command.build_ext import build_ext |
| |
| SRC_DIR = "src" |
| WATCHDOG_PKG_DIR = os.path.join(SRC_DIR, "watchdog") |
| |
| # Load the module version |
| spec = importlib.util.spec_from_file_location( |
| "version", os.path.join(WATCHDOG_PKG_DIR, "version.py") |
| ) |
| version = importlib.util.module_from_spec(spec) |
| spec.loader.exec_module(version) |
| |
| # Ignored Apple devices on which compiling watchdog_fsevents.c would fail. |
| # The FORCE_MACOS_MACHINE envar, when set to 1, will force the compilation. |
| _apple_devices = ("appletv", "iphone", "ipod", "ipad", "watch") |
| is_macos = sys.platform == "darwin" and not machine().lower().startswith(_apple_devices) |
| |
| ext_modules = [] |
| if is_macos or os.getenv("FORCE_MACOS_MACHINE", "0") == "1": |
| ext_modules = [ |
| Extension( |
| name="_watchdog_fsevents", |
| sources=[ |
| "src/watchdog_fsevents.c", |
| ], |
| libraries=["m"], |
| define_macros=[ |
| ("WATCHDOG_VERSION_STRING", '"' + version.VERSION_STRING + '"'), |
| ("WATCHDOG_VERSION_MAJOR", version.VERSION_MAJOR), |
| ("WATCHDOG_VERSION_MINOR", version.VERSION_MINOR), |
| ("WATCHDOG_VERSION_BUILD", version.VERSION_BUILD), |
| ], |
| extra_link_args=[ |
| "-framework", |
| "CoreFoundation", |
| "-framework", |
| "CoreServices", |
| ], |
| extra_compile_args=[ |
| "-std=c99", |
| "-pedantic", |
| "-Wall", |
| "-Wextra", |
| "-fPIC", |
| # Issue #620 |
| "-Wno-nullability-completeness", |
| # Issue #628 |
| "-Wno-nullability-extension", |
| "-Wno-newline-eof", |
| # required w/Xcode 5.1+ and above because of '-mno-fused-madd' |
| "-Wno-error=unused-command-line-argument", |
| ], |
| ), |
| ] |
| |
| extras_require = { |
| "watchmedo": ["PyYAML>=3.10"], |
| } |
| |
| with open("README.rst", encoding="utf-8") as f: |
| readme = f.read() |
| |
| with open("changelog.rst", encoding="utf-8") as f: |
| changelog = f.read() |
| |
| setup( |
| name="watchdog", |
| version=version.VERSION_STRING, |
| description="Filesystem events monitoring", |
| long_description=readme + "\n\n" + changelog, |
| long_description_content_type="text/x-rst", |
| author="Mickaƫl Schoentgen", |
| author_email="[email protected]", |
| license="Apache-2.0", |
| url="https://github.com/gorakhargosh/watchdog", |
| keywords=" ".join( |
| [ |
| "python", |
| "filesystem", |
| "monitoring", |
| "monitor", |
| "FSEvents", |
| "kqueue", |
| "inotify", |
| "ReadDirectoryChangesW", |
| "polling", |
| "DirectorySnapshot", |
| ] |
| ), |
| classifiers=[ |
| "Development Status :: 3 - Alpha", |
| "Environment :: Console", |
| "Intended Audience :: Developers", |
| "Intended Audience :: System Administrators", |
| "License :: OSI Approved :: Apache Software License", |
| "Natural Language :: English", |
| "Operating System :: POSIX :: Linux", |
| "Operating System :: MacOS :: MacOS X", |
| "Operating System :: POSIX :: BSD", |
| "Operating System :: Microsoft :: Windows :: Windows Vista", |
| "Operating System :: Microsoft :: Windows :: Windows 7", |
| "Operating System :: Microsoft :: Windows :: Windows 8", |
| "Operating System :: Microsoft :: Windows :: Windows 8.1", |
| "Operating System :: Microsoft :: Windows :: Windows 10", |
| "Operating System :: Microsoft :: Windows :: Windows 11", |
| "Operating System :: OS Independent", |
| "Programming Language :: Python", |
| "Programming Language :: Python :: 3", |
| "Programming Language :: Python :: 3 :: Only", |
| "Programming Language :: Python :: 3.9", |
| "Programming Language :: Python :: 3.10", |
| "Programming Language :: Python :: 3.11", |
| "Programming Language :: Python :: 3.12", |
| "Programming Language :: Python :: 3.13", |
| "Programming Language :: Python :: Implementation :: PyPy", |
| "Programming Language :: C", |
| "Topic :: Software Development :: Libraries", |
| "Topic :: System :: Monitoring", |
| "Topic :: System :: Filesystems", |
| "Topic :: Utilities", |
| ], |
| package_dir={"": SRC_DIR}, |
| packages=find_packages(SRC_DIR), |
| include_package_data=True, |
| extras_require=extras_require, |
| cmdclass={ |
| "build_ext": build_ext, |
| }, |
| ext_modules=ext_modules, |
| entry_points={ |
| "console_scripts": [ |
| "watchmedo = watchdog.watchmedo:main [watchmedo]", |
| ] |
| }, |
| python_requires=">=3.9", |
| zip_safe=False, |
| ) |