#!/usr/bin/env python

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

from distutils.core import setup

# Since this script is only used for building the installer,
# we can assume the modules have already been built.
from svn.core import SVN_VER_NUMBER

setup (name = "svn-python",
       description = "Subversion Python Bindings",
       maintainer = "Subversion Developers <dev@subversion.apache.org>",
       url = "http://subversion.apache.org",
       version = SVN_VER_NUMBER,
       packages = ["libsvn", "svn"],
       package_data = {"libsvn": ["*.dll", "*.pyd"]})
