diff --git a/build/.gitignore b/build/.gitignore index de4c555304d0..60660d4da867 100644 --- a/build/.gitignore +++ b/build/.gitignore @@ -1,5 +1,6 @@ /kotlinc/ /jdk/ /download/ +/jps-bootstrap-work/ kotlin-plugin*.zip dependencies/buildSrc/build diff --git a/build/full_updater.cmd b/build/full_updater.cmd index 228902cc7a83..4fd194585690 100755 --- a/build/full_updater.cmd +++ b/build/full_updater.cmd @@ -4,8 +4,8 @@ GOTO :CMDSCRIPT ::CMDLITERAL set -eux -exec "$(cd "$(dirname "$0")"; pwd)/../platform/jps-bootstrap/jps-bootstrap.sh" "$@" intellij.idea.community.build FullUpdaterBuildTarget +exec "$(cd "$(dirname "$0")"; pwd)/../platform/jps-bootstrap/jps-bootstrap.sh" "$@" "$(cd "$(dirname "$0")"; pwd)/.." intellij.idea.community.build FullUpdaterBuildTarget :CMDSCRIPT -call "%~dp0\..\platform\jps-bootstrap\jps-bootstrap.cmd" %* intellij.idea.community.build FullUpdaterBuildTarget +call "%~dp0\..\platform\jps-bootstrap\jps-bootstrap.cmd" %* "%~dp0\.." intellij.idea.community.build FullUpdaterBuildTarget EXIT /B %ERRORLEVEL% diff --git a/build/intellij.idea.community.build.iml b/build/intellij.idea.community.build.iml index 548c78a88147..593480b8a2c5 100644 --- a/build/intellij.idea.community.build.iml +++ b/build/intellij.idea.community.build.iml @@ -11,6 +11,7 @@ + diff --git a/build/updateFromSources.cmd b/build/updateFromSources.cmd index 1463121ebe6f..a9ed2910bdb3 100755 --- a/build/updateFromSources.cmd +++ b/build/updateFromSources.cmd @@ -4,8 +4,8 @@ GOTO :CMDSCRIPT ::CMDLITERAL set -eux -exec "$(cd "$(dirname "$0")"; pwd)/../platform/jps-bootstrap/jps-bootstrap.sh" "$@" intellij.idea.community.build OpenSourceCommunityUpdateFromSourcesBuildTarget +exec "$(cd "$(dirname "$0")"; pwd)/../platform/jps-bootstrap/jps-bootstrap.sh" "$@" "$(cd "$(dirname "$0")"; pwd)/.." intellij.idea.community.build OpenSourceCommunityUpdateFromSourcesBuildTarget :CMDSCRIPT -call "%~dp0\..\platform\jps-bootstrap\jps-bootstrap.cmd" %* intellij.idea.community.build OpenSourceCommunityUpdateFromSourcesBuildTarget +call "%~dp0\..\platform\jps-bootstrap\jps-bootstrap.cmd" %* "%~dp0\.." intellij.idea.community.build OpenSourceCommunityUpdateFromSourcesBuildTarget EXIT /B %ERRORLEVEL% diff --git a/installers.cmd b/installers.cmd index 8476826648b0..73e15563e5b9 100755 --- a/installers.cmd +++ b/installers.cmd @@ -4,8 +4,9 @@ GOTO :CMDSCRIPT ::CMDLITERAL set -eux -exec "$(cd "$(dirname "$0")"; pwd)/platform/jps-bootstrap/jps-bootstrap.sh" "$@" intellij.idea.community.build OpenSourceCommunityInstallersBuildTarget +root="$(cd "$(dirname "$0")"; pwd)" +exec "$root/platform/jps-bootstrap/jps-bootstrap.sh" "$@" "$root" intellij.idea.community.build OpenSourceCommunityInstallersBuildTarget :CMDSCRIPT -call "%~dp0\platform\jps-bootstrap\jps-bootstrap.cmd" %* intellij.idea.community.build OpenSourceCommunityInstallersBuildTarget +call "%~dp0\platform\jps-bootstrap\jps-bootstrap.cmd" %* "%~dp0" intellij.idea.community.build OpenSourceCommunityInstallersBuildTarget EXIT /B %ERRORLEVEL% diff --git a/platform/jps-bootstrap/jps-bootstrap.cmd b/platform/jps-bootstrap/jps-bootstrap.cmd index c821aa13a412..9f388eae67f4 100644 --- a/platform/jps-bootstrap/jps-bootstrap.cmd +++ b/platform/jps-bootstrap/jps-bootstrap.cmd @@ -5,7 +5,7 @@ set JPS_BOOTSTRAP_DIR=%~dp0 for %%F in ("%JPS_BOOTSTRAP_DIR%\.") do set JPS_BOOTSTRAP_COMMUNITY_PLATFORM_DIR=%%~dpF for %%F in ("%JPS_BOOTSTRAP_COMMUNITY_PLATFORM_DIR%\.") do set JPS_BOOTSTRAP_COMMUNITY_HOME=%%~dpF -set JPS_BOOTSTRAP_WORK_DIR=%JPS_BOOTSTRAP_COMMUNITY_HOME%out\jps-bootstrap\ +set JPS_BOOTSTRAP_PREPARE_DIR=%JPS_BOOTSTRAP_COMMUNITY_HOME%out\jps-bootstrap\ setlocal @@ -77,14 +77,14 @@ if not exist "%JAVA_HOME%\bin\java.exe" ( echo Using JVM at %JAVA_HOME% REM Download and compile jps-bootstrap itself -"%JAVA_HOME%\bin\java.exe" -ea -Daether.connector.resumeDownloads=false -jar "%JPS_BOOTSTRAP_COMMUNITY_HOME%lib\ant\lib\ant-launcher.jar" "-Dbuild.dir=%JPS_BOOTSTRAP_WORK_DIR%." -f "%JPS_BOOTSTRAP_DIR%jps-bootstrap-classpath.xml" +"%JAVA_HOME%\bin\java.exe" -ea -Daether.connector.resumeDownloads=false -jar "%JPS_BOOTSTRAP_COMMUNITY_HOME%lib\ant\lib\ant-launcher.jar" "-Dbuild.dir=%JPS_BOOTSTRAP_PREPARE_DIR%." -f "%JPS_BOOTSTRAP_DIR%jps-bootstrap-classpath.xml" if errorlevel 1 goto fail REM %RANDOM% may not be so random, but let's assume this script does not run several times per second -set _JPS_BOOTSTRAP_JAVA_ARGS_FILE=%JPS_BOOTSTRAP_WORK_DIR%\java.args.%RANDOM%.txt +set _JPS_BOOTSTRAP_JAVA_ARGS_FILE=%JPS_BOOTSTRAP_PREPARE_DIR%\java.args.%RANDOM%.txt REM Run jps-bootstrap and produce java args file to run actual user class -"%JAVA_HOME%\bin\java.exe" -ea -Xmx4g -Djava.awt.headless=true -classpath "%JPS_BOOTSTRAP_WORK_DIR%jps-bootstrap.out.lib\*" org.jetbrains.jpsBootstrap.JpsBootstrapMain "--java-argfile-target=%_JPS_BOOTSTRAP_JAVA_ARGS_FILE%" %* +"%JAVA_HOME%\bin\java.exe" -ea -Xmx4g -Djava.awt.headless=true -classpath "%JPS_BOOTSTRAP_PREPARE_DIR%jps-bootstrap.out.lib\*" org.jetbrains.jpsBootstrap.JpsBootstrapMain "--java-argfile-target=%_JPS_BOOTSTRAP_JAVA_ARGS_FILE%" %* if errorlevel 1 goto fail REM Run user class via wrapper from platform to correctly capture and report exception to TeamCity build log diff --git a/platform/jps-bootstrap/jps-bootstrap.sh b/platform/jps-bootstrap/jps-bootstrap.sh index f873e0bf9071..eab47a64bb27 100755 --- a/platform/jps-bootstrap/jps-bootstrap.sh +++ b/platform/jps-bootstrap/jps-bootstrap.sh @@ -5,7 +5,7 @@ set -eu JPS_BOOTSTRAP_DIR="$(cd "$(dirname "$0")"; pwd)" JPS_BOOTSTRAP_COMMUNITY_HOME="$(cd "$JPS_BOOTSTRAP_DIR/../.."; pwd)" -JPS_BOOTSTRAP_WORK_DIR="$JPS_BOOTSTRAP_COMMUNITY_HOME/out/jps-bootstrap" +JPS_BOOTSTRAP_PREPARE_DIR="$JPS_BOOTSTRAP_COMMUNITY_HOME/out/jps-bootstrap" SCRIPT_VERSION=jps-bootstrap-cmd-v1 @@ -58,15 +58,15 @@ else fi JVM_URL="$ZULU_BASE/$ZULU_PREFIX-$ZULU_ARCH.tar.gz" -JVM_TARGET_DIR="$JPS_BOOTSTRAP_WORK_DIR/jvm/$ZULU_PREFIX-$ZULU_ARCH-$SCRIPT_VERSION" +JVM_TARGET_DIR="$JPS_BOOTSTRAP_PREPARE_DIR/jvm/$ZULU_PREFIX-$ZULU_ARCH-$SCRIPT_VERSION" -mkdir -p "$JPS_BOOTSTRAP_WORK_DIR/jvm" +mkdir -p "$JPS_BOOTSTRAP_PREPARE_DIR/jvm" if [ -e "$JVM_TARGET_DIR/.flag" ] && [ -n "$(ls "$JVM_TARGET_DIR")" ] && [ "x$(cat "$JVM_TARGET_DIR/.flag")" = "x${JVM_URL}" ]; then # Everything is up-to-date in $JVM_TARGET_DIR, do nothing true else - JVM_TEMP_FILE=$(mktemp "$JPS_BOOTSTRAP_WORK_DIR/jvm.tar.gz.XXXXXXXXX") + JVM_TEMP_FILE=$(mktemp "$JPS_BOOTSTRAP_PREPARE_DIR/jvm.tar.gz.XXXXXXXXX") trap 'echo "Removing $JVM_TEMP_FILE"; rm -f "$JVM_TEMP_FILE"; trap - EXIT' EXIT INT HUP warn "Downloading $JVM_URL to $JVM_TEMP_FILE" @@ -105,15 +105,15 @@ fi set -x # Download and compile jps-bootstrap -"$JAVA_HOME/bin/java" -ea -Daether.connector.resumeDownloads=false -jar "$JPS_BOOTSTRAP_COMMUNITY_HOME/lib/ant/lib/ant-launcher.jar" "-Dbuild.dir=$JPS_BOOTSTRAP_WORK_DIR" -f "$JPS_BOOTSTRAP_DIR/jps-bootstrap-classpath.xml" +"$JAVA_HOME/bin/java" -ea -Daether.connector.resumeDownloads=false -jar "$JPS_BOOTSTRAP_COMMUNITY_HOME/lib/ant/lib/ant-launcher.jar" "-Dbuild.dir=$JPS_BOOTSTRAP_PREPARE_DIR" -f "$JPS_BOOTSTRAP_DIR/jps-bootstrap-classpath.xml" -_java_args_file="$JPS_BOOTSTRAP_WORK_DIR/java.args.$$.txt" +_java_args_file="$JPS_BOOTSTRAP_PREPARE_DIR/java.args.$$.txt" # shellcheck disable=SC2064 trap "rm -f '$_java_args_file'" EXIT INT HUP # Run jps-bootstrap and produce java args file to run actual user class export JPS_BOOTSTRAP_COMMUNITY_HOME -"$JAVA_HOME/bin/java" -ea -Xmx4g -Djava.awt.headless=true -classpath "$JPS_BOOTSTRAP_WORK_DIR/jps-bootstrap.out.lib/*" org.jetbrains.jpsBootstrap.JpsBootstrapMain "--java-argfile-target=$_java_args_file" "$@" +"$JAVA_HOME/bin/java" -ea -Xmx4g -Djava.awt.headless=true -classpath "$JPS_BOOTSTRAP_PREPARE_DIR/jps-bootstrap.out.lib/*" org.jetbrains.jpsBootstrap.JpsBootstrapMain "--java-argfile-target=$_java_args_file" "$@" # Run user class via wrapper from platform to correctly capture and report exception to TeamCity build log "$JAVA_HOME/bin/java" "@$_java_args_file" diff --git a/platform/jps-bootstrap/src/main/java/org/jetbrains/jpsBootstrap/JpsBootstrapMain.java b/platform/jps-bootstrap/src/main/java/org/jetbrains/jpsBootstrap/JpsBootstrapMain.java index 45b86b9a4e75..ec02885eddc9 100644 --- a/platform/jps-bootstrap/src/main/java/org/jetbrains/jpsBootstrap/JpsBootstrapMain.java +++ b/platform/jps-bootstrap/src/main/java/org/jetbrains/jpsBootstrap/JpsBootstrapMain.java @@ -92,8 +92,20 @@ public class JpsBootstrapMain { showUsagesAndExit(); } - moduleNameToRun = freeArgs.get(0); - classNameToRun = freeArgs.get(1); + String projectHomeFromCommandline = null; + + // Temporary measures to migrate from 2 arguments to 3 + if (freeArgs.size() == 2) { + moduleNameToRun = freeArgs.get(0); + classNameToRun = freeArgs.get(1); + mainArgsToRun = Collections.emptyList(); + } + else { + projectHomeFromCommandline = freeArgs.get(0); + moduleNameToRun = freeArgs.get(1); + classNameToRun = freeArgs.get(2); + mainArgsToRun = freeArgs.subList(3, freeArgs.size()); + } additionalSystemProperties = cmdline.getOptionProperties("D"); @@ -118,7 +130,9 @@ public class JpsBootstrapMain { Path ultimateHome = communityHome.getParent(); Path ultimateCheckFile = ultimateHome.resolve("intellij.idea.ultimate.main.iml"); - if (Files.exists(riderCheckFile)) { + if (projectHomeFromCommandline != null) { + projectHome = Path.of(projectHomeFromCommandline).normalize(); + } else if (Files.exists(riderCheckFile)) { projectHome = riderHome; } else if (Files.exists(ultimateCheckFile)) { @@ -129,12 +143,11 @@ public class JpsBootstrapMain { projectHome = communityHome; } - jpsBootstrapWorkDir = communityHome.resolve("out").resolve("jps-bootstrap"); + jpsBootstrapWorkDir = projectHome.resolve("build").resolve("jps-bootstrap-work"); info("Working directory: " + jpsBootstrapWorkDir); Files.createDirectories(jpsBootstrapWorkDir); - mainArgsToRun = freeArgs.subList(2, freeArgs.size()); javaArgsFileTarget = Path.of(cmdline.getOptionValue(OPT_JAVA_ARGFILE_TARGET)); buildTargetXmx = cmdline.hasOption(OPT_BUILD_TARGET_XMX) ? cmdline.getOptionValue(OPT_BUILD_TARGET_XMX) : DEFAULT_BUILD_SCRIPT_XMX; } diff --git a/tests.cmd b/tests.cmd index 0606a712bcd5..2307c7390acd 100755 --- a/tests.cmd +++ b/tests.cmd @@ -4,8 +4,9 @@ GOTO :CMDSCRIPT ::CMDLITERAL set -eux -exec "$(cd "$(dirname "$0")"; pwd)/platform/jps-bootstrap/jps-bootstrap.sh" "$@" intellij.idea.community.build CommunityRunTestsBuildTarget +root="$(cd "$(dirname "$0")"; pwd)" +exec "$root/platform/jps-bootstrap/jps-bootstrap.sh" "$@" "$root" intellij.idea.community.build CommunityRunTestsBuildTarget :CMDSCRIPT -call "%~dp0\platform\jps-bootstrap\jps-bootstrap.cmd" %* intellij.idea.community.build CommunityRunTestsBuildTarget +call "%~dp0\platform\jps-bootstrap\jps-bootstrap.cmd" %* "%~dp0" intellij.idea.community.build CommunityRunTestsBuildTarget EXIT /B %ERRORLEVEL%