<!--
 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.
-->
<project default="all" basedir=".">
    <target name="init">
        <condition property="mvn" value="mvn.bat">
            <os family="dos" />
        </condition>
        <condition property="mvn" value="mvn">
            <not>
                <isset property="mvn" />
            </not>
        </condition>
    </target>
    <target name="clean" depends="init">
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=obr clean" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=plugins clean" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=bundle clean" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle clean" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle-mosgi clean" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=karaf clean" />
        </exec>
    </target>
    <target name="install" depends="init">
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=obr install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=plugins install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=bundle install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=ipojo-bundle install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle-mosgi install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=karaf install" />
        </exec>
    </target>
    <target name="all" depends="init">
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=obr clean install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=plugins clean install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=bundle clean install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle clean install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=ipojo-bundle clean install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle-mosgi clean install" />
        </exec>
        <exec executable="${mvn}" failonerror="true">
            <arg line="-Dpackaging=karaf clean install" />
        </exec>
    </target>
</project>
