Files
kotlin-fork/update_dependencies.xml
T
Alexey Andreev 174068c462 Add JS source map parser and remapper
JS source map remapper takes parsed source maps
together with JS AST with correct JS positioning information
and converts the latter into Kotlin positioning information
2017-06-07 11:13:51 +03:00

892 lines
42 KiB
XML

<project xmlns:if="ant:if" xmlns:unless="ant:unless" name="Update Dependencies" default="update">
<import file="common.xml" optional="false"/>
<import file="node_utils.xml" optional="false"/>
<property name="automerge_dummy" value="This property is used to trick git merge. Do not delete empty lines around."/>
<property name="ideaVersion" value="171-SNAPSHOT"/>
<property name="idea.kotlin.branch" value="rc"/>
<property name="kotlin.bootstrap.branch" value=""/>
<property name="kotlin.bootstrap.branch.locator" value=""/>
<property name="kotlin.bootstrap.locator" value="buildType:bt345,tag:bootstrap,status:SUCCESS${kotlin.bootstrap.branch.locator}"/>
<property name="kotlin.bootstrap.locator.force" value="false"/>
<property name="markdown.locator" value="buildType:IntelliJMarkdownParser_Build,status:SUCCESS,tag:forKotlin"/>
<property name="bootstrap.build.no.tests" value="false"/>
<!--<property name="use.ultimate.by.default" value="true"/>-->
<property name="sdk.version.prefix" value="IU" if:set="use.ultimate.by.default"/>
<property name="sdk.version.prefix" value="IC" unless:set="use.ultimate.by.default"/>
<!-- Uncomment to enable force version increment in branch. Set override.version.disabled to temporary disable feature without commits -->
<!--
<property name="override.version.branch" value="${kotlin.bootstrap.branch.locator}"/>
<property name="override.version.url" value="https://teamcity.jetbrains.com/guestAuth/app/rest/builds/?locator=buildType:bt345,count:1,branch:${override.version.branch}"/>
-->
<!--<property name="override.version.disabled" value="true"/>-->
<condition property="kotlinc.executable.path" value="kotlinc.bat" else="kotlinc">
<os family="windows"/>
</condition>
<property name="uast.version" value="1.0.12"/>
<property name="kotlinx.coroutines.version" value="0.14.1"/>
<property name="generators" value="${basedir}/generators"/>
<property name="idea.dir" value="ideaSDK"/>
<property name="idea.sdk.fetch.needed" value="true"/>
<property name="dependencies.info.file" value="${dependencies}/dependencies.properties"/>
<property name="gradle.libs.repo" value="http://repo.gradle.org/gradle/libs-releases-local"/>
<property name="native-platform-lib-version" value="0.14"/>
<property file="${dependencies.info.file}" prefix="dependencies.info.prev"/>
<target name="update" depends="fetch-third-party,fetch-annotations" description="Update dependencies">
<execute_update_with_idea_maven_artifacts
base.url="https://www.jetbrains.com/intellij-repository/snapshots/com/jetbrains/intellij/idea"
idea.maven.version="${ideaVersion}"/>
</target>
<!--<target name="update_teamcity" depends="fetch-third-party,fetch-annotations">-->
<!--<execute_update_with_idea_teamcity_artifacts-->
<!--teamcity.server.url="https://teamcity.jetbrains.com"-->
<!--build.locator.request="buildType:bt410,status:SUCCESS,branch:idea/${ideaVersion}-${idea.kotlin.branch}"/>-->
<!--</target>-->
<target name="jb_update" depends="fetch-third-party,fetch-annotations" description="Update dependencies for JB local network">
<execute_update_with_idea_maven_artifacts
base.url="http://jetbrains-com-mirror.labs.intellij.net/intellij-repository/snapshots/com/jetbrains/intellij/idea"
idea.maven.version="${ideaVersion}"/>
</target>
<macrodef name="get-maven-library">
<attribute name="prefix"/>
<attribute name="lib"/>
<attribute name="version"/>
<attribute name="bin" default="true"/>
<attribute name="src" default="true"/>
<attribute name="server" default="http://repository.jetbrains.com/remote-repos"/>
<attribute name="jar.name.base" default="@{lib}-@{version}"/>
<attribute name="target.jar.name.base" default="@{jar.name.base}"/>
<attribute name="path" default="@{prefix}/@{lib}/@{version}/@{jar.name.base}"/>
<attribute name="download" default="${dependencies}/download"/>
<attribute name="dependencies" default="${dependencies}"/>
<sequential>
<sequential if:true="@{bin}">
<get src="@{server}/@{path}.jar" dest="@{download}/@{jar.name.base}.jar" usetimestamp="true"/>
<copy file="@{download}/@{jar.name.base}.jar" tofile="@{dependencies}/@{target.jar.name.base}.jar" overwrite="true"/>
</sequential>
<sequential if:true="@{src}">
<get src="@{server}/@{path}-sources.jar" dest="@{download}/@{jar.name.base}-sources.jar" usetimestamp="true"/>
<copy file="@{download}/@{jar.name.base}-sources.jar" tofile="@{dependencies}/@{target.jar.name.base}-sources.jar"
overwrite="true"/>
</sequential>
</sequential>
</macrodef>
<macrodef name="get-ant-library">
<attribute name="version"/>
<attribute name="folderName"/>
<sequential>
<get src="http://archive.apache.org/dist/ant/binaries/apache-ant-@{version}-bin.tar.gz"
dest="${dependencies}/download/apache-ant-@{version}-bin.tar.gz" usetimestamp="true"/>
<get src="http://archive.apache.org/dist/ant/source/apache-ant-@{version}-src.zip"
dest="${dependencies}/apache-ant-@{version}-src.zip" usetimestamp="true"/>
<delete dir="${dependencies}/@{folderName}" failonerror="false"/>
<untar src="${dependencies}/download/apache-ant-@{version}-bin.tar.gz" dest="${dependencies}" compression="gzip"/>
<move file="${dependencies}/apache-ant-@{version}" tofile="${dependencies}/@{folderName}"/>
</sequential>
</macrodef>
<target name="make-native-platform-uberjar">
<property name="dependencies" value="${dependencies}"/>
<property name="download" value="${dependencies}/download"/>
<property name="server" value="${gradle.libs.repo}"/>
<property name="version" value="${native-platform-lib-version}"/>
<property name="common.name" value="native-platform"/>
<property name="common.prefix" value="${server}/net/rubygrapefruit/${common.name}"/>
<macrodef name="get-lib">
<attribute name="suffix"/>
<sequential>
<get src="${common.prefix}@{suffix}/${version}/${common.name}@{suffix}-${version}.jar" dest="${download}/${common.name}@{suffix}.jar" usetimestamp="true"/>
</sequential>
</macrodef>
<mkdir dir="${dependencies}"/>
<mkdir dir="${download}"/>
<get-lib suffix=""/>
<get-lib suffix="-windows-amd64"/>
<get-lib suffix="-windows-i386"/>
<get-lib suffix="-osx-amd64"/>
<get-lib suffix="-osx-i386"/>
<get-lib suffix="-linux-amd64"/>
<get-lib suffix="-linux-i386"/>
<get-lib suffix="-freebsd-amd64-libcpp"/>
<get-lib suffix="-freebsd-amd64-libstdcpp"/>
<get-lib suffix="-freebsd-i386-libcpp"/>
<get-lib suffix="-freebsd-i386-libstdcpp"/>
<jar destfile="${dependencies}/${common.name}-uberjar.jar">
<zipfileset src="${download}/${common.name}.jar" includes="**" />
<zipfileset src="${download}/${common.name}-windows-amd64.jar" includes="**" />
<zipfileset src="${download}/${common.name}-windows-i386.jar" includes="**" />
<zipfileset src="${download}/${common.name}-osx-amd64.jar" includes="**" />
<zipfileset src="${download}/${common.name}-osx-i386.jar" includes="**" />
<zipfileset src="${download}/${common.name}-linux-amd64.jar" includes="**" />
<zipfileset src="${download}/${common.name}-linux-i386.jar" includes="**" />
<zipfileset src="${download}/${common.name}-freebsd-amd64-libcpp.jar" includes="**" />
<zipfileset src="${download}/${common.name}-freebsd-amd64-libstdcpp.jar" includes="**" />
<zipfileset src="${download}/${common.name}-freebsd-i386-libcpp.jar" includes="**" />
<zipfileset src="${download}/${common.name}-freebsd-i386-libstdcpp.jar" includes="**" />
</jar>
</target>
<target name="fetch-third-party" depends="make-dependency-dirs, make-native-platform-uberjar">
<antcall target="override-version"/>
<!-- ProGuard -->
<get-maven-library prefix="net/sf/proguard" lib="proguard-base" version="5.3" target.jar.name.base="proguard" src="false"/>
<get-maven-library prefix="net/sf/proguard" lib="proguard-anttask" version="5.3" target.jar.name.base="proguard-anttask" src="false"/>
<!-- JarJar -->
<get src="http://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/jarjar/jarjar-1.4.jar" dest="${dependencies}/download/jarjar-1.4.jar" usetimestamp="true"/>
<copy file="${dependencies}/download/jarjar-1.4.jar" tofile="${dependencies}/jarjar.jar" overwrite="true"/>
<!-- ant 1.8.2 -->
<get-ant-library version="1.8.2" folderName="ant-1.8"/>
<!-- dx.jar -->
<property name="android-build-tools.zip" value="build-tools_r21.1.1-linux.zip"/>
<get
src="https://dl-ssl.google.com/android/repository/${android-build-tools.zip}"
dest="${dependencies}/download/${android-build-tools.zip}"
usetimestamp="true"/>
<unzip src="${dependencies}/download/${android-build-tools.zip}" dest="${dependencies}"/>
<property name="android-sources.tgz" value="dx.tar.gz"/>
<get
src="https://android.googlesource.com/platform/dalvik/+archive/android-5.0.0_r2/${android-sources.tgz}"
dest="${dependencies}/download/${android-sources.tgz}"
usetimestamp="true"/>
<delete dir="${dependencies}/dx-src" failonerror="false"/>
<untar src="${dependencies}/download/${android-sources.tgz}" dest="${dependencies}/dx-src" compression="gzip"/>
<mkdir dir="${dependencies}/jflex"/>
<get src="https://raw.github.com/JetBrains/intellij-community/master/tools/lexer/jflex-1.7.0-SNAPSHOT.jar"
dest="${dependencies}/jflex/JFlex.jar" usetimestamp="true"/>
<get src="https://raw.github.com/JetBrains/intellij-community/master/tools/lexer/idea-flex.skeleton"
dest="${dependencies}/jflex/idea-flex.skeleton" usetimestamp="true"/>
<!-- jline -->
<get-maven-library prefix="jline" lib="jline" version="2.12.1" target.jar.name.base="jline"/>
<!-- jansi -->
<get-maven-library prefix="org/fusesource/jansi" lib="jansi" version="1.11" target.jar.name.base="jansi"/>
<!-- Guava 19 sources-->
<get-maven-library prefix="com/google/guava" lib="guava" version="19.0" bin="false"/>
<!-- ASM -->
<get src="https://raw.github.com/JetBrains/intellij-community/171/lib/src/asm-src.zip"
dest="${dependencies}/asm-src.zip"/>
<!-- Junit Sources -->
<get-maven-library prefix="junit" lib="junit" version="4.12" bin="false"/>
<get-maven-library prefix="org/hamcrest" lib="hamcrest-core" version="1.3" bin="false"/>
<!-- Android SDK platform -->
<ant antfile="download_android_sdk.xml" target="download_android_sdk"/>
<!-- Javaslang -->
<get-maven-library prefix="io/javaslang" lib="javaslang" version="2.0.6"/>
<!-- Uast -->
<property name="uast.server" value="http://dl.bintray.com/kotlin/uast"/>
<get-maven-library prefix="org/jetbrains/uast" lib="uast-common" version="${uast.version}" target.jar.name.base="uast-common" server="${uast.server}"/>
<get-maven-library prefix="org/jetbrains/uast" lib="uast-java" version="${uast.version}" target.jar.name.base="uast-java" server="${uast.server}"/>
<get-maven-library prefix="org/jetbrains/uast" lib="uast-tests" version="${uast.version}" target.jar.name.base="uast-tests" server="${uast.server}"/>
<!-- kotlinx.coroutines -->
<get-maven-library prefix="org/jetbrains/kotlinx" lib="kotlinx-coroutines-core" version="${kotlinx.coroutines.version}"
target.jar.name.base="kotlinx-coroutines-core" server="http://dl.bintray.com/kotlin/kotlinx/"/>
<delete file="${dependencies}/android.jar" failonerror="false"/>
<get src="http://dl-ssl.google.com/android/repository/android-19_r02.zip"
dest="${dependencies}/download/android-sdk.zip" usetimestamp="true"/>
<unzip src="${dependencies}/download/android-sdk.zip" dest="${dependencies}">
<patternset>
<include name="**/android.jar"/>
</patternset>
<mapper type="flatten"/>
</unzip>
<local name="download.bootstrap.compiler"/>
<condition property="download.bootstrap.compiler">
<or>
<not>
<isset property="teamcity.version"/>
</not>
<and>
<istrue value="${kotlin.bootstrap.locator.force}"/>
<istrue value="${bootstrap.build.no.tests}"/>
</and>
</or>
</condition>
<sequential if:set="download.bootstrap.compiler">
<!-- Download bootstrap compiler for local build -->
<download_teamcity_artifact
teamcity.server.url="https://teamcity.jetbrains.com"
build.locator.request="${kotlin.bootstrap.locator}"
artifact.path="kotlin-plugin-{build.number}.zip"
dest="${dependencies}/download/bootstrap-compiler.zip"
build.number.pattern="[\w-+\.]+"
usetimestamp="true"/>
<delete dir="${dependencies}/bootstrap-compiler" failonerror="false"/>
<unzip src="${dependencies}/download/bootstrap-compiler.zip" dest="${dependencies}/bootstrap-compiler"/>
</sequential>
<sequential unless:set="download.bootstrap.compiler">
<available file="${dependencies}/bootstrap-compiler/Kotlin" property="have.bootstrap.compiler"/>
<fail message="Bootstrap compiler is expected to be downloaded to '${dependencies}/bootstrap-compiler' by TeamCity" unless:set="have.bootstrap.compiler"/>
<echo message="Bootstrap compiler found in '${dependencies}/bootstrap-compiler'" if:set="have.bootstrap.compiler"/>
</sequential>
<local name="bootstrap.need.chmod"/>
<condition property="bootstrap.need.chmod">
<or>
<isset property="isMac" />
<isset property="isLinux" />
</or>
</condition>
<!-- Java can't manipulate permissions -->
<exec executable="find" if:set="bootstrap.need.chmod">
<arg value="${dependencies}/bootstrap-compiler/Kotlin/kotlinc/bin"/>
<arg line="-name 'kotlin*' ! -name '*.bat' -exec chmod a+x '{}' ;"/>
</exec>
<get-protobuf-and-rename-packages/>
<download_teamcity_artifact
teamcity.server.url="https://teamcity.jetbrains.com"
build.locator.request="${markdown.locator}"
artifact.path="markdown_jar/markdown.jar"
dest="${dependencies}/markdown.jar"
usetimestamp="true"
build.number.pattern="\d+\s-\sKotlin\s[\w-+\.]+"
/>
<!-- node.js -->
<antcall target="download-nodejs-and-npm"/>
<!-- JSON.org -->
<get src="https://repo.maven.apache.org/maven2/org/json/json/20160807/json-20160807.jar" dest="${dependencies}/json-org.jar"/>
</target>
<macrodef name="get-protobuf-and-rename-packages">
<sequential>
<macrodef name="rename-packages-in-binaries">
<attribute name="target.jar"/>
<attribute name="source.jar"/>
<sequential>
<delete file="@{target.jar}" failonerror="false"/>
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${dependencies}/jarjar.jar"/>
<jarjar jarfile="@{target.jar}" filesonly="true">
<zipfileset src="@{source.jar}">
<exclude name="META-INF/maven/com.google.protobuf/protobuf-java/pom.properties"/>
</zipfileset>
<rule pattern="com.google.protobuf.**" result="org.jetbrains.kotlin.protobuf.@1"/>
</jarjar>
</sequential>
</macrodef>
<macrodef name="rename-packages-in-sources">
<attribute name="target.jar"/>
<attribute name="source.jar"/>
<sequential>
<local name="tmp.src"/>
<property name="tmp.src" value="${dependencies}/download/protobuf-src"/>
<delete dir="${tmp.src}" failonerror="false"/>
<unzip src="@{source.jar}" dest="${tmp.src}">
<patternset includes="**/*"/>
</unzip>
<replaceregexp match="com\.google\.protobuf" replace="org.jetbrains.kotlin.protobuf" flags="g">
<fileset dir="${tmp.src}/" includes="**/*.java"/>
</replaceregexp>
<move file="${tmp.src}/com/google/protobuf"
tofile="${tmp.src}/org/jetbrains/kotlin/protobuf"/>
<delete file="@{target.jar}" failonerror="false"/>
<zip destfile="@{target.jar}" basedir="${tmp.src}"/>
</sequential>
</macrodef>
<property name="protobuf.version" value="2.6.1"/>
<!-- Download protobuf and rename packages -->
<get-maven-library prefix="com/google/protobuf" lib="protobuf-java" version="${protobuf.version}"/>
<delete file="${dependencies}/protobuf-java-${protobuf.version}.jar"/>
<delete file="${dependencies}/protobuf-java-${protobuf.version}-sources.jar"/>
<rename-packages-in-binaries
source.jar="${dependencies}/download/protobuf-java-${protobuf.version}.jar"
target.jar="${dependencies}/protobuf-${protobuf.version}.jar"
/>
<rename-packages-in-sources
source.jar="${dependencies}/download/protobuf-java-${protobuf.version}-sources.jar"
target.jar="${dependencies}/protobuf-${protobuf.version}-sources.jar"
/>
</sequential>
</macrodef>
<macrodef name="execute_update_with_idea_maven_artifacts">
<attribute name="base.url"/>
<attribute name="idea.maven.version"/>
<sequential>
<get src="@{base.url}/BUILD/@{idea.maven.version}/BUILD-@{idea.maven.version}.txt" dest="${dependencies}/version.txt"/>
<loadfile property="execute.build.id" srcFile="${dependencies}/version.txt"/>
<condition property="idea.sdk.exists">
<available file="${idea.dir}/build.txt"/>
</condition>
<loadfile property="idea.sdk.version" srcFile="${idea.dir}/build.txt" if:set="idea.sdk.exists"/>
<condition property="edition.matched">
<equals arg1="${idea.sdk.version}" arg2="${sdk.version.prefix}-${execute.build.id}"/>
</condition>
<local name="idea.already.downloaded"/>
<condition property="idea.already.downloaded">
<and>
<equals arg1="${dependencies.info.prev.idea.build.id}" arg2="${execute.build.id}"/>
<istrue value="${edition.matched}"/>
</and>
</condition>
<echo message="IDEA build id: ${execute.build.id}. Already downloaded." if:set="idea.already.downloaded"/>
<sequential unless:set="idea.already.downloaded">
<echo message="IDEA build id: ${execute.build.id}, previous build id: ${dependencies.info.prev.idea.build.id}"/>
<delete dir="${idea.dir}" unless:set="edition.matched">
<exclude name="config-idea/**"/>
<exclude name="system-idea/**"/>
</delete>
<download_and_update_idea idea.maven.version="@{idea.maven.version}" base.repository.url="@{base.url}"/>
<propertyfile file="${dependencies.info.file}">
<entry key="idea.build.id" value="${execute.build.id}"/>
</propertyfile>
</sequential>
</sequential>
</macrodef>
<macrodef name="execute_update_with_idea_teamcity_artifacts">
<attribute name="teamcity.server.url"/>
<attribute name="build.locator.request"/>
<sequential>
<loadresource property="execute.build.id">
<url url="@{teamcity.server.url}/guestAuth/app/rest/builds/?locator=@{build.locator.request},count:1"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex pattern="^(.*)\sid=&quot;(\d+)&quot;(.*)$" replace="\2" flags="s"/>
</tokenfilter>
</filterchain>
</loadresource>
<local name="idea.already.downloaded"/>
<condition property="idea.already.downloaded">
<equals arg1="${dependencies.info.prev.idea.build.id}" arg2="${execute.build.id}"/>
</condition>
<echo message="IDEA build id: ${execute.build.id}. Already downloaded." if:set="idea.already.downloaded"/>
<sequential unless:set="idea.already.downloaded">
<echo message="IDEA build id: ${execute.build.id}, previous build id: ${dependencies.info.prev.idea.build.id}"/>
<download_and_update_idea_teamcity base.url="@{teamcity.server.url}/guestAuth/app/rest/builds/id:${execute.build.id}"/>
<propertyfile file="${dependencies.info.file}">
<entry key="idea.build.id" value="${execute.build.id}"/>
</propertyfile>
</sequential>
</sequential>
</macrodef>
<macrodef name="download_teamcity_artifact">
<attribute name="teamcity.server.url"/>
<attribute name="build.locator.request"/>
<attribute name="artifact.path"/>
<attribute name="dest"/>
<attribute name="usetimestamp"/>
<attribute name="build.number.pattern" default="[\w-+\.]+"/>
<sequential>
<local name="artifact.build.id"/>
<local name="build.request.url"/>
<property name="build.request.url"
value="@{teamcity.server.url}/guestAuth/app/rest/builds/?locator=@{build.locator.request},count:1"/>
<echo message="Requested URL ${build.request.url}"/>
<loadresource property="artifact.build.id">
<url url="${build.request.url}"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex pattern="^(.*)\sid=&quot;(\d+)&quot;(.*)$" replace="\2" flags="s"/>
</tokenfilter>
</filterchain>
</loadresource>
<local name="processed.artifact.path"/>
<local name="artifact.build.number"/>
<loadresource property="artifact.build.number">
<url url="${build.request.url}"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex pattern="^(.*)\snumber=&quot;(@{build.number.pattern})&quot;(.*)$" replace="\2" flags="s"/>
</tokenfilter>
</filterchain>
</loadresource>
<loadresource property="processed.artifact.path">
<string value="@{artifact.path}"/>
<filterchain>
<replacestring from="{build.number}" to="${artifact.build.number}"/>
</filterchain>
</loadresource>
<echo message="Build Number: ${artifact.build.number} Build Id: ${artifact.build.id}"/>
<get
src="@{teamcity.server.url}/guestAuth/app/rest/builds/id:${artifact.build.id}/artifacts/content/${processed.artifact.path}"
dest="@{dest}" usetimestamp="@{usetimestamp}"/>
</sequential>
</macrodef>
<macrodef name="configure_idea_sdk_dir">
<attribute name="idea.dir"/>
<attribute name="idea.sdk.fetch.needed"/>
<attribute name="download.dir.intellij-core"/>
<attribute name="download.dir.jps-standalone"/>
<attribute name="download.file.archive.idea"/>
<attribute name="download.file.archive.sources"/>
<attribute name="download.file.archive.jps-build-test"/>
<attribute name="core" default="@{idea.dir}/core"/>
<attribute name="jps" default="@{idea.dir}/jps"/>
<attribute name="jps-test" default="@{jps}/test"/>
<attribute name="sources" default="@{idea.dir}/sources"/>
<sequential>
<sequential if:true="@{idea.sdk.fetch.needed}">
<delete dir="@{idea.dir}" failonerror="false">
<exclude name="config-idea/**"/>
<exclude name="system-idea/**"/>
</delete>
<unzip src="@{download.file.archive.idea}" dest="@{idea.dir}" />
<sequential if:set="isMac">
<!-- Java can't manipulate permissions -->
<exec executable="chmod">
<arg value="a+x"/>
<arg path="@{idea.dir}/bin/mac/fsnotifier"/>
<arg path="@{idea.dir}/bin/inspect.sh"/>
<arg path="@{idea.dir}/bin/printenv.py"/>
<arg path="@{idea.dir}/bin/restarter"/>
</exec>
</sequential>
<sequential if:set="isLinux">
<!-- Java can't manipulate permissions -->
<exec executable="chmod">
<arg value="a+x"/>
<arg path="@{idea.dir}/bin/linux/fsnotifier"/>
<arg path="@{idea.dir}/bin/linux/fsnotifier64"/>
<arg path="@{idea.dir}/bin/inspect.sh"/>
<arg path="@{idea.dir}/bin/idea.sh"/>
</exec>
</sequential>
<!--
This one needs to be deleted because otherwise it gets onto the classpath
together with junit-4.10.jar and the classloading goes crazy that breaks
many nice features of IDEA including diffs in the test console.
-->
<delete file="@{idea.dir}/lib/junit.jar"/>
<!--
Plugin depends on newer runtime and reflect jar from our bootstrap compiler.
Avoid depending on old runtime during build phase but attach original runtime when idea starts.
-->
<mkdir dir="@{idea.dir}/idea-kotlin-runtime"/>
<move file="@{idea.dir}/lib/kotlin-runtime.jar" todir="@{idea.dir}/idea-kotlin-runtime"/>
<move file="@{idea.dir}/lib/kotlin-reflect.jar" todir="@{idea.dir}/idea-kotlin-runtime"/>
<delete dir="@{idea.dir}/plugins/Kotlin"/>
<mkdir dir="@{core}"/>
<copy todir="@{core}" flatten="true" verbose="true">
<resources>
<file file="@{download.dir.intellij-core}/intellij-core.jar"/>
<file file="@{download.dir.intellij-core}/annotations.jar"/>
<file file="@{download.dir.intellij-core}/guava-19.0.jar"/>
<file file="@{download.dir.intellij-core}/picocontainer.jar"/>
<file file="@{download.dir.intellij-core}/trove4j.jar"/>
<file file="@{idea.dir}/lib/jdom.jar"/>
<file file="@{idea.dir}/lib/jna.jar"/>
<file file="@{idea.dir}/lib/log4j.jar"/>
<file file="@{idea.dir}/lib/xstream-1.4.8.jar"/>
<file file="@{idea.dir}/lib/xpp3-1.1.4-min.jar"/>
<file file="@{idea.dir}/lib/asm-all.jar"/>
<file file="@{idea.dir}/lib/snappy-in-java-0.5.1.jar"/>
<!-- TODO temporary workaround since util-rt is not packaged into intellij-core.jar -->
<file file="@{idea.dir}/lib/util.jar"/>
</resources>
</copy>
<mkdir dir="@{jps}"/>
<copy todir="@{jps}" flatten="true" verbose="true">
<resources>
<file file="@{download.dir.jps-standalone}/groovy-jps-plugin.jar"/>
<file file="@{download.dir.jps-standalone}/groovy_rt.jar"/>
<file file="@{download.dir.jps-standalone}/jdom.jar"/>
<file file="@{download.dir.jps-standalone}/jgoodies-forms.jar"/>
<file file="@{download.dir.jps-standalone}/jna.jar"/>
<file file="@{download.dir.jps-standalone}/jps-builders.jar"/>
<file file="@{download.dir.jps-standalone}/jps-builders-6.jar"/>
<file file="@{download.dir.jps-standalone}/jps-model.jar"/>
<file file="@{download.dir.jps-standalone}/log4j.jar"/>
<file file="@{download.dir.jps-standalone}/nanoxml-2.2.3.jar"/>
<file file="@{download.dir.jps-standalone}/trove4j.jar"/>
<file file="@{download.dir.jps-standalone}/ui-designer-jps-plugin.jar"/>
<file file="@{download.dir.jps-standalone}/util.jar"/>
</resources>
</copy>
<mkdir dir="@{jps-test}"/>
<copy file="@{download.file.archive.jps-build-test}" tofile="@{jps-test}/jps-build-test.jar"/>
<mkdir dir="@{sources}"/>
<copy file="@{download.file.archive.sources}" tofile="@{sources}/sources.jar" overwrite="true" failonerror="false"/>
</sequential>
</sequential>
</macrodef>
<macrodef name="download_and_update_idea">
<attribute name="idea.maven.version"/>
<attribute name="base.repository.url"/>
<attribute name="download.dir" default="${dependencies}/idea${ideaVersion}"/>
<sequential>
<delete dir="@{download.dir}"/>
<mkdir dir="@{download.dir}"/>
<property name="idea.id" value="idea${sdk.version.prefix}"/>
<get src="@{base.repository.url}/ideaIC/@{idea.maven.version}/ideaIC-@{idea.maven.version}-sources.jar"
dest="@{download.dir}/ideaIC-@{idea.maven.version}-sources.jar" usetimestamp="true" ignoreerrors="true"/>
<get src="@{base.repository.url}/${idea.id}/@{idea.maven.version}/${idea.id}-@{idea.maven.version}.zip"
dest="@{download.dir}/${idea.id}-@{idea.maven.version}.zip" usetimestamp="true"/>
<download_and_unzip
dir="@{download.dir}/intellij-core-@{idea.maven.version}"
url="@{base.repository.url}/intellij-core/@{idea.maven.version}/intellij-core-@{idea.maven.version}.zip"
usetimestamp="true"/>
<get src="@{base.repository.url}/jps-build-test/@{idea.maven.version}/jps-build-test-@{idea.maven.version}.jar"
dest="@{download.dir}/jps-build-test-@{idea.maven.version}.jar" usetimestamp="true"/>
<download_and_unzip
dir="@{download.dir}/jps-standalone-@{idea.maven.version}"
url="@{base.repository.url}/jps-standalone/@{idea.maven.version}/jps-standalone-@{idea.maven.version}.zip"
usetimestamp="true"/>
<configure_idea_sdk_dir
idea.dir="${idea.dir}"
idea.sdk.fetch.needed="${idea.sdk.fetch.needed}"
download.dir.intellij-core="@{download.dir}/intellij-core-@{idea.maven.version}"
download.dir.jps-standalone="@{download.dir}/jps-standalone-@{idea.maven.version}"
download.file.archive.idea="@{download.dir}/${idea.id}-@{idea.maven.version}.zip"
download.file.archive.sources="@{download.dir}/ideaIC-@{idea.maven.version}-sources.jar"
download.file.archive.jps-build-test="@{download.dir}/jps-build-test-@{idea.maven.version}.jar"/>
</sequential>
</macrodef>
<macrodef name="download_and_update_idea_teamcity">
<attribute name="base.url"/>
<sequential>
<loadresource property="idea.build.number">
<url url="@{base.url}/artifacts/children"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex pattern="^(.*)ideaIC-([\w\.]+)\.win\.zip(.*)$" replace="\2" flags="s"/>
</tokenfilter>
</filterchain>
</loadresource>
<property name="idea.archive.name" value="ideaIC-${idea.build.number}.zip"/>
<echo message="IDEA build number: ${idea.build.number}"/>
<echo message="IDEA archive file: ${idea.archive.name}"/>
<property name="content.base.url" value="@{base.url}/artifacts/content"/>
<property name="idea.download.dir" value="${dependencies}/idea" />
<property name="jps.extracted.dir" value="${idea.download.dir}/standalone-jps"/>
<property name="core.dir" value="${idea.download.dir}/core"/>
<sequential if:true="${idea.sdk.fetch.needed}">
<delete dir="${idea.download.dir}"/>
<mkdir dir="${idea.download.dir}"/>
<get src="${content.base.url}/jps/standalone-jps-IC-${idea.build.number}.zip"
dest="${idea.download.dir}/standalone-jps.zip"/>
<unzip src="${idea.download.dir}/standalone-jps.zip"
dest="${jps.extracted.dir}"/>
<delete file="${idea.download.dir}/${idea.archive.name}" failonerror="false"/>
<get src="${content.base.url}/${idea.archive.name}"
dest="${idea.download.dir}/${idea.archive.name}"/>
<get src="${content.base.url}/jps/jps-build-test-IC-${idea.build.number}.jar"
dest="${idea.download.dir}/jps-build-test.jar"
usetimestamp="true"/>
<mkdir dir="${core.dir}"/>
<get src="${content.base.url}/core/intellij-core.jar" dest="${core.dir}/intellij-core.jar"/>
<get src="${content.base.url}/core/annotations.jar" dest="${core.dir}/annotations.jar"/>
<get src="${content.base.url}/core/guava-19.0.jar" dest="${core.dir}/guava-19.0.jar"/>
<get src="${content.base.url}/core/picocontainer.jar" dest="${core.dir}/picocontainer.jar"/>
<get src="${content.base.url}/core/trove4j.jar" dest="${core.dir}/trove4j.jar"/>
<delete file="${idea.download.dir}/idea-sdk-sources.jar" failonerror="false"/>
<get src="${content.base.url}/sources.zip" dest="${idea.download.dir}/idea-sdk-sources.jar"/>
</sequential>
<configure_idea_sdk_dir
idea.dir="${idea.dir}"
idea.sdk.fetch.needed="${idea.sdk.fetch.needed}"
download.dir.intellij-core="${core.dir}"
download.dir.jps-standalone="${jps.extracted.dir}"
download.file.archive.idea="${idea.download.dir}/${idea.archive.name}"
download.file.archive.sources="${idea.download.dir}/idea-sdk-sources.jar"
download.file.archive.jps-build-test="${idea.download.dir}/jps-build-test.jar"/>
</sequential>
</macrodef>
<macrodef name="download_and_unzip">
<attribute name="url"/>
<attribute name="dir"/>
<attribute name="usetimestamp"/>
<sequential>
<get src="@{url}" dest="@{dir}.zip" usetimestamp="@{usetimestamp}"/>
<local name="need.unpack"/>
<condition property="need.unpack">
<not>
<available file="@{dir}" type="dir"/>
</not>
</condition>
<unzip src="@{dir}.zip" dest="@{dir}" if:set="need.unpack"/>
<echo message="Folder exist - so not unpacked @{dir}" unless:set="need.unpack"/>
</sequential>
</macrodef>
<!--
Currently we use empty annotations.
Future options are:
- Drop the target when will be sure that custom annotations are unneeded
- Fill the target with downloading correct annotations
-->
<target name="fetch-annotations"/>
<target name="get_android_studio">
<condition property="android.os.tag" value="windows">
<os family="windows"/>
</condition>
<condition property="android.os.tag" value="mac">
<os family="mac"/>
</condition>
<condition property="android.os.tag" value="linux">
<and>
<os family="unix"/>
<not>
<os family="mac"/>
</not>
</and>
</condition>
<local name="have.android.version"/>
<condition property="have.android.version">
<and>
<isset property="android.version"/>
<isset property="android.build.version"/>
</and>
</condition>
<sequential unless:set="have.android.version">
<loadresource property="android.version">
<url url="http://tools.android.com/download/studio/canary/latest"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex
pattern="^(.*)https?://dl\.google\.com/dl/android/studio/ide-zips/([\d\.]+)/android-studio-ide(.*)$"
replace="\2" flags="s"/>
</tokenfilter>
</filterchain>
</loadresource>
<loadresource property="android.build.version">
<url url="http://tools.android.com/download/studio/canary/latest"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex
pattern="^(.*)https?://dl\.google\.com/dl/android/studio/ide-zips/[\d\.]+/android-studio-ide-([\d\.]+)-(.*)$"
replace="\2" flags="s"/>
</tokenfilter>
</filterchain>
</loadresource>
</sequential>
<echo message="Download android studio: ${android.version} ${android.build.version}"/>
<property name="android.file.name" value="android-studio-ide-${android.build.version}-${android.os.tag}.zip"/>
<property name="android.studio.url"
value="http://dl.google.com/dl/android/studio/ide-zips/${android.version}/${android.file.name}"/>
<property name="android.destination.dir" value="android-studio/sdk"/>
<mkdir dir="${dependencies}/download"/>
<get src="${android.studio.url}" dest="${dependencies}/download" usetimestamp="true"/>
<delete dir="${android.destination.dir}" failonerror="false" includeemptydirs="true">
<exclude name="config/**"/>
<exclude name="system/**"/>
</delete>
<unzip src="${dependencies}/download/${android.file.name}" dest="${android.destination.dir}">
<cutdirsmapper dirs="1"/>
</unzip>
<local name="android.studio.mac"/>
<condition property="android.studio.mac">
<matches pattern=".+mac\.zip" string="${android.file.name}"/>
</condition>
<local name="android.studio.linux"/>
<condition property="android.studio.linux">
<matches pattern=".+linux\.zip" string="${android.file.name}"/>
</condition>
<exec executable="chmod" if:set="android.studio.mac">
<arg value="a+x"/>
<arg path="${android.destination.dir}/bin/fsnotifier"/>
<arg path="${android.destination.dir}/bin/inspect.sh"/>
<arg path="${android.destination.dir}/bin/printenv.py"/>
<arg path="${android.destination.dir}/bin/update_studio.sh"/>
</exec>
<exec executable="chmod" if:set="android.studio.linux">
<arg value="a+x"/>
<arg path="${android.destination.dir}/bin/fsnotifier"/>
<arg path="${android.destination.dir}/bin/fsnotifier64"/>
<arg path="${android.destination.dir}/bin/inspect.sh"/>
<arg path="${android.destination.dir}/bin/studio.sh"/>
<arg path="${android.destination.dir}/bin/update_studio.sh"/>
</exec>
</target>
<target name="override-version">
<condition property="need.version.override">
<and>
<isset property="override.version.url"/>
<equals arg1="${override.version.branch}" arg2="${teamcity.build.branch}"/>
<not>
<isset property="override.version.disabled"/>
</not>
<not>
<istrue value="${bootstrap.build.no.tests}"/>
</not>
<isset property="teamcity.version"/>
</and>
</condition>
<sequential if:set="need.version.override">
<local name="override.version.build.number"/>
<loadresource property="override.version.build.number">
<url url="${override.version.url}"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replaceregex pattern="^(.*)\snumber=&quot;([\w-+\.]+)&quot;(.*)$" replace="\2" flags="s"/>
</tokenfilter>
</filterchain>
</loadresource>
<echo message="URL: ${override.version.url} Version: ${override.version.build.number}"/>
<exec executable="${dependencies}/bootstrap-compiler/Kotlin/kotlinc/bin/${kotlinc.executable.path}" failonerror="false">
<arg value="-cp"/>
<arg value="${dependencies}/bootstrap-compiler/Kotlin/kotlinc/lib/kotlin-compiler.jar"/>
<arg value="-script"/>
<arg value="${generators}/infrastructure/increment-version.kts"/>
<arg value="${override.version.build.number}"/>
<arg value="${dependencies}/updated-version.txt"/>
</exec>
<loadfile property="updated.version.number" srcFile="${dependencies}/updated-version.txt"/>
<echo message="##teamcity[buildNumber '${updated.version.number}']"/>
</sequential>
</target>
</project>