<?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,ie10"/>
  <add-linker name="xsiframe"/>

  <set-configuration-property name="CssResource.style" value="obf"/>

  <entry-point class='org.apache.hupa.client.Hupa'/>

  <collapse-all-properties />
</module>
