#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.8.3
Build-Depends: openjdk-6-jdk, debhelper (>= 5), po-debconf

Package: ofbiz-framework
Architecture: all
Depends: dbconfig-common (>= 1.8.38), xalan, ${misc:Depends}, ucf, openjdk-6-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 pseudo-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

