diff --git a/dist/bin/common b/dist/bin/common index 63e598d70d7e..2de8bdf9f99a 100644 --- a/dist/bin/common +++ b/dist/bin/common @@ -6,25 +6,9 @@ source "$PROG_HOME/bin/common-shared" # * The code below is for Dotty # *-------------------------------------------------*/ -load_classpath () { - command="$1" - psep_pattern="$2" - __CLASS_PATH="" - while IFS= read -r line || [ -n "$line" ]; do - # jna-5 only appropriate for some combinations - if ! [[ ( -n ${conemu-} || -n ${msys-}) && "$line" == "*jna-5*" ]]; then - if [ -n "$__CLASS_PATH" ]; then - __CLASS_PATH+="$psep_pattern" - fi - __CLASS_PATH+="$PROG_HOME/maven2/$line" - fi - done < "$PROG_HOME/etc/$command.classpath" - echo "$__CLASS_PATH" -} - compilerJavaClasspathArgs () { - toolchain="$(load_classpath "scala" "$PSEP")" - toolchain_extra="$(load_classpath "with_compiler" "$PSEP")" + toolchain="$PROG_HOME/lib/scala.jar" + toolchain_extra="$PROG_HOME/lib/with_compiler.jar" if [ -n "$toolchain_extra" ]; then toolchain+="$PSEP$toolchain_extra" diff --git a/dist/bin/common.bat b/dist/bin/common.bat index f9c35e432b36..510771d43b6e 100644 --- a/dist/bin/common.bat +++ b/dist/bin/common.bat @@ -38,6 +38,6 @@ if not defined _PROG_HOME ( set _EXITCODE=1 goto :eof ) -set "_ETC_DIR=%_PROG_HOME%\etc" +set "_LIB_DIR=%_PROG_HOME%\lib" set _PSEP=; diff --git a/dist/bin/scalac.bat b/dist/bin/scalac.bat index dbcbaf11b8e2..7ad368582127 100644 --- a/dist/bin/scalac.bat +++ b/dist/bin/scalac.bat @@ -88,17 +88,8 @@ goto :eof @rem output parameter: _JVM_CP_ARGS :compilerJavaClasspathArgs - -set "CP_FILE=%_ETC_DIR%\scala.classpath" -call :loadClasspathFromFile %CP_FILE% -set "__TOOLCHAIN=%_CLASS_PATH_RESULT%" - -set "CP_FILE=%_ETC_DIR%\with_compiler.classpath" -call :loadClasspathFromFile %CP_FILE% - -if defined _CLASS_PATH_RESULT ( - set "__TOOLCHAIN=%__TOOLCHAIN%%_PSEP%%_CLASS_PATH_RESULT%" -) +set "__TOOLCHAIN=%_LIB_DIR%\scala.jar" +set "__TOOLCHAIN=%__TOOLCHAIN%%_PSEP%%_LIB_DIR%\with_compiler.jar%" if defined _SCALA_CPATH ( set "_JVM_CP_ARGS=%__TOOLCHAIN%%_SCALA_CPATH%" @@ -107,24 +98,6 @@ if defined _SCALA_CPATH ( ) goto :eof -@REM concatentate every line in "%_ARG_FILE%" with _PSEP -@REM arg 1 - file to read -:loadClasspathFromFile -set _ARG_FILE=%1 -set _CLASS_PATH_RESULT= -if exist "%_ARG_FILE%" ( - for /f "usebackq delims=" %%i in ("%_ARG_FILE%") do ( - set "_LIB=%_PROG_HOME%\maven2\%%i" - set "_LIB=!_LIB:/=\!" - if not defined _CLASS_PATH_RESULT ( - set "_CLASS_PATH_RESULT=!_LIB!" - ) else ( - set "_CLASS_PATH_RESULT=!_CLASS_PATH_RESULT!%_PSEP%!_LIB!" - ) - ) -) -goto :eof - @rem ######################################################################### @rem ## Cleanups diff --git a/dist/bin/scaladoc b/dist/bin/scaladoc index 15bc0813f93a..b13dece2803e 100755 --- a/dist/bin/scaladoc +++ b/dist/bin/scaladoc @@ -36,6 +36,7 @@ CompilerMain=dotty.tools.dotc.Main DecompilerMain=dotty.tools.dotc.decompiler.Main ReplMain=dotty.tools.repl.Main ScriptingMain=dotty.tools.scripting.Main +JVM_CP_ARGS="$PROG_HOME/lib/scaladoc.jar" PROG_NAME=$CompilerMain @@ -52,12 +53,6 @@ addScrip() { script_args+=("'$1'") } -classpathArgs () { - CLASS_PATH="$(load_classpath "scaladoc" "$PSEP")" - - jvm_cp_args="-classpath \"$CLASS_PATH\"" -} - #for A in "$@" ; do echo "A[$A]" ; done ; exit 2 while [[ $# -gt 0 ]]; do @@ -79,12 +74,10 @@ case "$1" in esac done -classpathArgs - eval "\"$JAVACMD\"" \ ${JAVA_OPTS:-$default_java_opts} \ "${java_args[@]}" \ - "${jvm_cp_args-}" \ + "${JVM_CP_ARGS-}" \ -Dscala.usejavacp=true \ "dotty.tools.scaladoc.Main" \ "${scala_args[@]}" \ diff --git a/dist/bin/scaladoc.bat b/dist/bin/scaladoc.bat index 16433a83f501..fe4055633e02 100644 --- a/dist/bin/scaladoc.bat +++ b/dist/bin/scaladoc.bat @@ -21,8 +21,6 @@ call :args %* @rem ######################################################################### @rem ## Main -call :classpathArgs - if defined JAVA_OPTS ( set _JAVA_OPTS=%JAVA_OPTS% ) else ( set _JAVA_OPTS=%_DEFAULT_JAVA_OPTS% ) @@ -31,7 +29,7 @@ if defined JAVA_OPTS ( set _JAVA_OPTS=%JAVA_OPTS% set "_JAVACMD=!_JAVACMD:%%=%%%%!" call "%_JAVACMD%" %_JAVA_OPTS% %_JAVA_DEBUG% %_JAVA_ARGS% ^ --classpath "%_CLASS_PATH%" ^ +-classpath "%_LIB_DIR%\scaladoc.jar" ^ -Dscala.usejavacp=true ^ dotty.tools.scaladoc.Main %_SCALA_ARGS% %_RESIDUAL_ARGS% if not %ERRORLEVEL%==0 ( @@ -103,29 +101,6 @@ goto :eof set _RESIDUAL_ARGS=%_RESIDUAL_ARGS% %~1 goto :eof -@rem output parameter: _CLASS_PATH -:classpathArgs -set "_ETC_DIR=%_PROG_HOME%\etc" -@rem keep list in sync with bash script `bin\scaladoc` ! -call :loadClasspathFromFile -goto :eof - -@REM concatentate every line in "%_ETC_DIR%\scaladoc.classpath" with _PSEP -:loadClasspathFromFile -set _CLASS_PATH= -if exist "%_ETC_DIR%\scaladoc.classpath" ( - for /f "usebackq delims=" %%i in ("%_ETC_DIR%\scaladoc.classpath") do ( - set "_LIB=%_PROG_HOME%\maven2\%%i" - set "_LIB=!_LIB:/=\!" - if not defined _CLASS_PATH ( - set "_CLASS_PATH=!_LIB!" - ) else ( - set "_CLASS_PATH=!_CLASS_PATH!%_PSEP%!_LIB!" - ) - ) -) -goto :eof - @rem ######################################################################### @rem ## Cleanups diff --git a/project/Build.scala b/project/Build.scala index 28146989e40c..54b4a6bf7801 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -2134,7 +2134,7 @@ object Build { republishRepo := target.value / "republish", packResourceDir += (republishRepo.value / "bin" -> "bin"), packResourceDir += (republishRepo.value / "maven2" -> "maven2"), - packResourceDir += (republishRepo.value / "etc" -> "etc"), + packResourceDir += (republishRepo.value / "lib" -> "lib"), republishCommandLibs += ("scala" -> List("scala3-interfaces", "scala3-compiler", "scala3-library", "tasty-core")), republishCommandLibs += diff --git a/project/RepublishPlugin.scala b/project/RepublishPlugin.scala index e4bf40545a6b..4414b4d2a760 100644 --- a/project/RepublishPlugin.scala +++ b/project/RepublishPlugin.scala @@ -213,16 +213,24 @@ object RepublishPlugin extends AutoPlugin { val classpaths = coursierFetch(coursierJar, log, csrCacheDir, localRepo, resolvedLocal.map(_.id.toString)) if (commandLibs.nonEmpty) { - IO.createDirectory(republishDir / "etc") + IO.createDirectory(republishDir / "lib") for ((command, libs) <- commandLibs) { val (negated, actual) = libs.partition(_.startsWith("^!")) val subtractions = negated.map(_.stripPrefix("^!")) def compose(libs: List[String]): List[String] = libs.map(fuzzyFind(classpaths, _)).reduceOption(_ ++ _).map(_.distinct).getOrElse(Nil) - + + // Compute the classpath entries val entries = compose(actual).diff(compose(subtractions)) - IO.write(republishDir / "etc" / s"$command.classpath", entries.mkString("\n")) + // Generate the MANIFEST for the pathing jar + val manifest = new java.util.jar.Manifest(); + manifest.getMainAttributes().put(java.util.jar.Attributes.Name.MANIFEST_VERSION, "1.0"); + manifest.getMainAttributes().put(java.util.jar.Attributes.Name.CLASS_PATH, entries.mkString(" ")) + // Write the pathing jar to the Disk + val file = republishDir / "lib" / s"$command.jar" + val jar = new java.util.jar.JarOutputStream(new java.io.FileOutputStream(file), manifest) + jar.close() } }