<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->
<module rename-to='hupa'>
  <inherits name='org.apache.hupa.Hupa'/> 

  <!-- Provide gzipped version of generated js, so as it will sent compressed by jetty -->
  <inherits name="com.google.gwt.precompress.Precompress"/>

  <!-- This reduces a lot the size of compiled javascript-->
  <set-property name="compiler.stackMode" value="strip" />

  <!-- Set the languages to compile -->
  <!-- It multiplies the number of permutations -->
  <!-- <extend-property name="locale" values="es,de"/>  -->
  <set-configuration-property name="locale.useragent" value="Y"/>

  <!-- Compile for all browsers -->
  <set-property name="user.agent" value="gecko1_8,safari,ie9"/>

  <set-configuration-property name="CssResource.style" value="obf"/>
  
  <entry-point class='org.apache.hupa.client.Hupa'/>  
</module>
