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

Pygments
pytz
Babel
Genshi
-e ../trac
-e svn+https://trac-hacks.org/svn/accountmanagerplugin/0.11#egg=TracAccountManager
-e ../bloodhound_multiproduct
-e svn+https://trac-hacks.org/svn/themeengineplugin/0.11#egg=TracThemeEngine
-e ../bloodhound_dashboard
-e ../bloodhound_theme
-e svn+https://trac-hacks.org/svn/permredirectplugin/0.11#egg=TracPermRedirect

