# 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.
#

[build-system]
requires = [
    "setuptools>=69",
    "wheel", 
    "Cython>=3", 
    "numpy>=2.0.0,<3"
    ]

build-backend = "setuptools.build_meta"

[project]
name = "tsfile"
version = "2.2.1.dev"
requires-python = ">=3.9"
description = "TsFile Python"
readme = {file = "README.md", content-type = "text/markdown"}
maintainers = [
    {name = "Apache TsFile Developers", email = "dev@tsfile.apache.org"}
]
dependencies = [
    "numpy>=2.0.0,<3",
    "pandas>=2.0",
    "pyarrow>=16.0"
]

[project.urls]
Homepage = "https://tsfile.apache.org/"
Documentation = "https://tsfile.apache.org/zh/UserGuide/latest/QuickStart/Navigating_Time_Series_Data.html"
Repository = "https://github.com/apache/tsfile"
Issues = "https://github.com/apache/tsfile/issues"

[tool.setuptools]
package-dir = {"" = "."}

[tool.setuptools.packages.find]
where = ["."]
include = ["tsfile*"]

[tool.setuptools.package-data]
tsfile = [
    "*.pxd",
    "*.pxi",
    "*.so",
    "*.so.*",
    "*.dylib",
    "*.dylib.*",
    "*.dll",
    "*.dll.a",
    "*.lib",
    "*.lib.a",
    "include/**/*"
]
