#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.
Source: ofbiz
Section: misc
Priority: extra
Maintainer: Adam Heath <doogie@brainfood.com>
Origin: brainfood
Bugs: mozilla://bugs.brainfood.com
Standards-Version: 3.9.1
Build-Depends: sun-java6-jdk, debhelper (>= 5), po-debconf

Package: ofbiz-framework
Architecture: all
Depends: dbconfig-common (>= 1.8.38), xalan, ${misc:Depends}, ucf, sun-java6-jdk, libpg-java, libmysql-java, jsvc, adduser
Recommends: postgresql-8.1 | postgresql-7.5 | mysql-server
Description: An Open Source E-Commerce System
 The Apache Open For Business Project is an open source enterprise
 automation software providing: ERP, CRM, E-Business / E-Commerce,
 SCM, MRP, CMMS/EAM, and more.
 .
 This package contains the Apache OFBiz framework.

Package: ofbiz-applications
Architecture: all
Depends: ofbiz-framework (= ${binary:Version}), ${misc:Depends}
Description: An Open Source E-Commerce System
 The Apache Open For Business Project is an open source enterprise
 automation software providing: ERP, CRM, E-Business / E-Commerce,
 SCM, MRP, CMMS/EAM, and more.
 .
 This package contains the Apache OFBiz applications.

Package: ofbiz
Architecture: all
Depends: ofbiz-framework (= ${binary:Version}), ofbiz-applications (= ${binary:Version}), ${misc:Depends}
Description: An Open Source E-Commerce System
 The Apache Open For Business Project is an open source enterprise
 automation software providing: ERP, CRM, E-Business / E-Commerce,
 SCM, MRP, CMMS/EAM, and more.
 .
 This is a meta-package, used to install all of the standard Apache
 OFBiz components.

Package: ofbiz-specialpurpose
Architecture: all
Depends: ofbiz-framework (= ${binary:Version}), ofbiz-applications (= ${binary:Version}), ${misc:Depends}
Description: OFBiz - SpecialPurpose Applications
 The Apache Open For Business Project is an open source enterprise
 automation software providing: ERP, CRM, E-Business / E-Commerce,
 SCM, MRP, CMMS/EAM, and more.
 .
 This package contains additional specialpurpose applications:
 assetmaint, bi, cmssite, googlebase, googleCheckout, hhfacility,
 oagis, pos, projectmgr

