| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| import os | |
| from setuptools import Extension, find_packages, setup | |
| from setuptools.command.sdist import sdist as _sdist | |
| class sdist(_sdist): | |
| """Custom sdist that excludes .egg-info and setup.cfg.""" | |
| def make_release_tree(self, base_dir: str, files: list[str]) -> None: | |
| # Filter egg-info from the file manifest | |
| files = [f for f in files if ".egg-info" not in f] | |
| super().make_release_tree(base_dir, files) | |
| # Remove setup.cfg after setuptools creates it | |
| setup_cfg = os.path.join(base_dir, "setup.cfg") | |
| if os.path.exists(setup_cfg): | |
| os.remove(setup_cfg) | |
| allowed_to_fail = os.environ.get("CIBUILDWHEEL", "0") != "1" | |
| ext_modules = [] | |
| try: | |
| import Cython.Compiler.Options | |
| from Cython.Build import cythonize | |
| Cython.Compiler.Options.annotate = True | |
| if os.name == "nt": # Windows | |
| extra_compile_args = ["/O2"] | |
| else: # UNIX-based systems (Linux, macOS) | |
| extra_compile_args = ["-O3"] | |
| package_path = "pyiceberg" | |
| extensions = [ | |
| Extension( | |
| "pyiceberg.avro.decoder_fast", | |
| [os.path.join(package_path, "avro", "decoder_fast.pyx")], | |
| extra_compile_args=extra_compile_args, | |
| language="c", | |
| ) | |
| ] | |
| ext_modules = cythonize( | |
| extensions, | |
| include_path=[package_path], | |
| compiler_directives={"language_level": "3"}, | |
| annotate=True, | |
| ) | |
| except Exception: | |
| if not allowed_to_fail: | |
| raise | |
| pyiceberg_packages = find_packages(include=["pyiceberg*"]) | |
| vendor_packages = find_packages(where="vendor", include=["fb303", "hive_metastore"]) | |
| packages = pyiceberg_packages + vendor_packages | |
| setup( | |
| packages=packages, | |
| package_dir={ | |
| "": ".", | |
| "fb303": "vendor/fb303", | |
| "hive_metastore": "vendor/hive_metastore", | |
| }, | |
| include_package_data=True, | |
| ext_modules=ext_modules, | |
| cmdclass={"sdist": sdist}, | |
| ) |