mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-03-10 08:31:29 +00:00
913 lines
44 KiB
XML
913 lines
44 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>
|
|
|
|
<target name="update_continuous_br141" depends="fetch-third-party,fetch-annotations">
|
|
<execute_update_with_idea_maven_artifacts
|
|
base.url="https://www.jetbrains.com/intellij-repository/snapshots/com/jetbrains/intellij/idea"
|
|
idea.maven.version="141-SNAPSHOT"/>
|
|
</target>
|
|
|
|
<target name="update_continuous_br143" depends="fetch-third-party,fetch-annotations">
|
|
<execute_update_with_idea_maven_artifacts
|
|
base.url="https://www.jetbrains.com/intellij-repository/snapshots/com/jetbrains/intellij/idea"
|
|
idea.maven.version="143-SNAPSHOT"/>
|
|
</target>
|
|
|
|
<target name="update_continuous_br144" depends="fetch-third-party,fetch-annotations">
|
|
<execute_update_with_idea_maven_artifacts
|
|
base.url="https://www.jetbrains.com/intellij-repository/snapshots/com/jetbrains/intellij/idea"
|
|
idea.maven.version="144-SNAPSHOT"/>
|
|
</target>
|
|
|
|
<target name="update_continuous_br162" depends="fetch-third-party,fetch-annotations">
|
|
<execute_update_with_idea_maven_artifacts
|
|
base.url="https://www.jetbrains.com/intellij-repository/snapshots/com/jetbrains/intellij/idea"
|
|
idea.maven.version="162-SNAPSHOT"/>
|
|
</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"/>
|
|
</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="(\d+)"(.*)$" 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="(\d+)"(.*)$" 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="(@{build.number.pattern})"(.*)$" 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="([\w-+\.]+)"(.*)$" 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>
|