<?xml version="1.0" encoding="UTF-8"?>
<?pde version="3.5"?>

<product name="Eclipse IDE for PHP Developers" uid="epp.package.php" id="org.eclipse.epp.package.php.product" application="org.eclipse.ui.ide.workbench" version="4.6.3.qualifier" useFeatures="true" includeLaunchers="true">

   <aboutInfo>
      <image path="/org.eclipse.epp.package.php/eclipse_lg.png"/>
      <text>
         Specified in the plugin.xml of the branding plugin.
      </text>
   </aboutInfo>

   <configIni use="default">
   </configIni>

   <launcherArgs>
      <programArgs>-product org.eclipse.epp.package.php.product
--launcher.defaultAction openFile
      </programArgs>
      <vmArgs>-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
-XX:+UseG1GC
-XX:+UseStringDeduplication
      </vmArgs>
      <vmArgsLin>
      </vmArgsLin>
      <vmArgsMac>-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
      </vmArgsMac>
      <vmArgsWin>
      </vmArgsWin>
   </launcherArgs>

   <windowImages i16="/org.eclipse.epp.package.php/eclipse16.png" i32="/org.eclipse.epp.package.php/eclipse32.png" i48="/org.eclipse.epp.package.php/eclipse48.png" i256="/org.eclipse.epp.package.php/eclipse256.png"/>

   <splash
      startupProgressRect="2,290,448,10"
      startupMessageRect="7,265,320,20"
      startupForegroundColor="9c9696" />
   <launcher name="eclipse">
      <solaris/>
      <win useIco="false">
         <bmp/>
      </win>
   </launcher>

   <intro introId="org.eclipse.ui.intro.universal"/>

   <vm>
      <linux include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8</linux>
      <macos include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8</macos>
      <solaris include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8</solaris>
      <windows include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8</windows>
   </vm>

   <license>
        <url>http://eclipse.org/legal/epl/notice.php</url>
        <text>
Eclipse Foundation Software User Agreement
April 9, 2014

Usage Of Content

THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR
OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").
USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS
AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR
NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU
AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT
AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS
OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE
TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS
OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
BELOW, THEN YOU MAY NOT USE THE CONTENT.

Applicable Licenses

Unless otherwise indicated, all Content made available by the
Eclipse Foundation is provided to you under the terms and conditions of
the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is
provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.
For purposes of the EPL, "Program" will mean the Content.

Content includes, but is not limited to, source code, object code,
documentation and other files maintained in the Eclipse Foundation source code
repository ("Repository") in software modules ("Modules") and made available
as downloadable archives ("Downloads").

    - Content may be structured and packaged into modules to facilitate delivering,
      extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),
      plug-in fragments ("Fragments"), and features ("Features").
    - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)
      in a directory named "plugins".
    - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.
      Each Feature may be packaged as a sub-directory in a directory named "features".
      Within a Feature, files named "feature.xml" may contain a list of the names and version
      numbers of the Plug-ins and/or Fragments associated with that Feature.
    - Features may also include other Features ("Included Features"). Within a Feature, files
      named "feature.xml" may contain a list of the names and version numbers of Included Features.

The terms and conditions governing Plug-ins and Fragments should be
contained in files named "about.html" ("Abouts"). The terms and
conditions governing Features and Included Features should be contained
in files named "license.html" ("Feature Licenses"). Abouts and Feature
Licenses may be located in any directory of a Download or Module
including, but not limited to the following locations:

    - The top-level (root) directory
    - Plug-in and Fragment directories
    - Inside Plug-ins and Fragments packaged as JARs
    - Sub-directories of the directory named "src" of certain Plug-ins
    - Feature directories

Note: if a Feature made available by the Eclipse Foundation is installed using the
Provisioning Technology (as defined below), you must agree to a license ("Feature 
Update License") during the installation process. If the Feature contains
Included Features, the Feature Update License should either provide you
with the terms and conditions governing the Included Features or inform
you where you can locate them. Feature Update Licenses may be found in
the "license" property of files named "feature.properties" found within a Feature.
Such Abouts, Feature Licenses, and Feature Update Licenses contain the
terms and conditions (or references to such terms and conditions) that
govern your use of the associated Content in that directory.

THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):

    - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)
    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)

IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR
TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License
is provided, please contact the Eclipse Foundation to determine what terms and conditions
govern that particular Content.


Use of Provisioning Technology

The Eclipse Foundation makes available provisioning software, examples of which include,
but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for
the purpose of allowing users to install software, documentation, information and/or
other materials (collectively "Installable Software"). This capability is provided with
the intent of allowing such users to install, extend and update Eclipse-based products.
Information about packaging Installable Software is available at
http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").

You may use Provisioning Technology to allow other parties to install Installable Software.
You shall be responsible for enabling the applicable license agreements relating to the
Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
in accordance with the Specification. By using Provisioning Technology in such a manner and
making it available in accordance with the Specification, you further acknowledge your
agreement to, and the acquisition of all necessary rights to permit the following:

    1. A series of actions may occur ("Provisioning Process") in which a user may execute
       the Provisioning Technology on a machine ("Target Machine") with the intent of installing,
       extending or updating the functionality of an Eclipse-based product.
    2. During the Provisioning Process, the Provisioning Technology may cause third party
       Installable Software or a portion thereof to be accessed and copied to the Target Machine.
    3. Pursuant to the Specification, you will provide to the user the terms and conditions that
       govern the use of the Installable Software ("Installable Software Agreement") and such
       Installable Software Agreement shall be accessed from the Target Machine in accordance
       with the Specification. Such Installable Software Agreement must inform the user of the
       terms and conditions that govern the Installable Software and must solicit acceptance by
       the end user in the manner prescribed in such Installable Software Agreement. Upon such
       indication of agreement by the user, the provisioning Technology will complete installation
       of the Installable Software.

Cryptography

Content may contain encryption software. The country in which you are
currently may have restrictions on the import, possession, and use,
and/or re-export to another country, of encryption software. BEFORE
using any encryption software, please check the country's laws,
regulations and policies concerning the import, possession, or use, and
re-export of encryption software, to see if this is permitted.

Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
         </text>
   </license>

   <plugins>
   </plugins>

   <features>
      <feature id="org.eclipse.epp.package.php.feature" version="4.6.3.qualifier"/>
      <feature id="org.eclipse.epp.package.common.feature" version="4.6.3.qualifier"/>
      <feature id="org.eclipse.platform" version="4.6.3.qualifier"/>

      <feature id="org.eclipse.egit" installMode="root"/>
      <feature id="org.eclipse.egit.gitflow.feature"  installMode="root"/>
      <!-- not available in Neon on 2016-02-21
      <feature id="org.eclipse.egit.import" installMode="root"/>
      -->
      <feature id="org.eclipse.egit.mylyn"  installMode="root"/>
      <feature id="org.eclipse.mylyn.bugzilla_feature" installMode="root"/>
      <feature id="org.eclipse.mylyn.context_feature" installMode="root"/>
      <feature id="org.eclipse.mylyn_feature" installMode="root"/>
      <feature id="org.eclipse.mylyn.github.feature"  installMode="root"/>
      <feature id="org.eclipse.mylyn.ide_feature" installMode="root"/>
      <feature id="org.eclipse.mylyn.wikitext_feature" installMode="root"/>
      <feature id="org.eclipse.php" installMode="root"/>
      <feature id="org.eclipse.php.composer" installMode="root"/>
      <feature id="org.eclipse.php.importer" installMode="root"/>
      <feature id="org.eclipse.php.mylyn" installMode="root"/>
      <feature id="org.eclipse.tm.terminal.feature" installMode="root"/>
      <feature id="org.eclipse.wst.jsdt.feature"  installMode="root"/>
      <feature id="org.eclipse.wst.xml_ui.feature" installMode="root"/>
   </features>


</product>
