<!--
 * Licensed 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.
 *
 * Author: soren@google.com (Soren Lassen)
 -->
<project name="Federation Protocol Buffers Code Generation" default="compile">
  <description>Generation of Protocol Buffers</description>

  <property file="build.properties"/>
  <property file="build-proto.properties"/>
  <property name="protoc" location="${protoc_dist}/src/protoc"/>

<!-- ================================= 
        target: compile              
       ================================= -->
  <target name="compile" description="Generates the proto_src source files">
    <exec executable="${protoc}">
      <arg value="--proto_path=${src.dir}/"/>
      <arg value="--proto_path=${protoc_dist}/src/"/>
      <arg value="--java_out=proto_src"/>
      <arg value="${src.dir}/org/waveprotocol/wave/federation/federation.protodevel"/>
    </exec>

    <exec executable="${protoc}">
      <arg value="--proto_path=${src.dir}/"/>
      <arg value="--proto_path=${protoc_dist}/src/"/>
      <arg value="--java_out=proto_src"/>
      <arg value="${src.dir}/org/waveprotocol/wave/federation/federation_error.protodevel"/>
    </exec>
  </target>
</project>
