@@ -389,48 +389,93 @@ protected string CreateFauxReferencesDirectory (string path, ApiInfo [] versions
389389
390390 protected string CreateFauxJavaSdkDirectory ( string path , string javaVersion , out string javaExe , out string javacExe )
391391 {
392- javaExe = IsWindows ? "Java .cmd" : "java.bash " ;
393- javacExe = IsWindows ? "Javac .cmd" : "javac.bash " ;
394- var jarSigner = IsWindows ? "jarsigner.exe" : "jarsigner" ;
392+ javaExe = IsWindows ? "java .cmd" : "java" ;
393+ javacExe = IsWindows ? "javac .cmd" : "javac" ;
394+
395395 var javaPath = Path . Combine ( Root , path ) ;
396- var javaBinPath = Path . Combine ( javaPath , "bin" ) ;
397- Directory . CreateDirectory ( javaBinPath ) ;
398396
399- CreateFauxJavaExe ( Path . Combine ( javaBinPath , javaExe ) , javaVersion ) ;
400- CreateFauxJavacExe ( Path . Combine ( javaBinPath , javacExe ) , javaVersion ) ;
397+ CreateFauxJdk ( javaPath , javaVersion , javaVersion , javaVersion ) ;
401398
399+ var jarSigner = IsWindows ? "jarsigner.exe" : "jarsigner" ;
400+ var javaBinPath = Path . Combine ( javaPath , "bin" ) ;
402401 File . WriteAllText ( Path . Combine ( javaBinPath , jarSigner ) , "" ) ;
402+
403403 return javaPath ;
404404 }
405405
406- void CreateFauxJavaExe ( string javaExeFullPath , string version )
406+ // https://github.com/xamarin/xamarin-android-tools/blob/683f37508b56c76c24b3287a5687743438625341/tests/Xamarin.Android.Tools.AndroidSdk-Tests/JdkInfoTests.cs#L60-L100
407+ void CreateFauxJdk ( string dir , string releaseVersion , string releaseBuildNumber , string javaVersion )
407408 {
408- var sb = new StringBuilder ( ) ;
409- if ( IsWindows ) {
410- sb . AppendLine ( "@echo off" ) ;
411- sb . AppendLine ( $ "echo java version \" { version } \" ") ;
412- sb . AppendLine ( $ "echo Java(TM) SE Runtime Environment (build { version } -b13)") ;
413- sb . AppendLine ( $ "echo Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)") ;
414- } else {
415- sb . AppendLine ( "#!/bin/bash" ) ;
416- sb . AppendLine ( $ "echo \" java version \\ \" { version } \\ \" \" ") ;
417- sb . AppendLine ( $ "echo \" Java(TM) SE Runtime Environment (build { version } -b13)\" ") ;
418- sb . AppendLine ( $ "echo \" Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)\" ") ;
419- }
420- CreateFauxExecutable ( javaExeFullPath , sb ) ;
421- }
422-
423- void CreateFauxJavacExe ( string javacExeFullPath , string version )
409+ Directory . CreateDirectory ( dir ) ;
410+
411+ using ( var release = new StreamWriter ( Path . Combine ( dir , "release" ) ) ) {
412+ release . WriteLine ( $ "JAVA_VERSION=\" { releaseVersion } \" ") ;
413+ release . WriteLine ( $ "BUILD_NUMBER={ releaseBuildNumber } ") ;
414+ release . WriteLine ( $ "JUST_A_KEY") ;
415+ }
416+
417+ var bin = Path . Combine ( dir , "bin" ) ;
418+ var inc = Path . Combine ( dir , "include" ) ;
419+ var jre = Path . Combine ( dir , "jre" ) ;
420+ var jli = Path . Combine ( jre , "lib" , "jli" ) ;
421+
422+ Directory . CreateDirectory ( bin ) ;
423+ Directory . CreateDirectory ( inc ) ;
424+ Directory . CreateDirectory ( jli ) ;
425+ Directory . CreateDirectory ( jre ) ;
426+
427+ string quote = IsWindows ? "" : "\" " ;
428+ string java = IsWindows
429+ ? $ "echo java version \" { javaVersion } \" { Environment . NewLine } "
430+ : $ "echo java version '\" { javaVersion } \" '{ Environment . NewLine } ";
431+ java = java +
432+ $ "echo Property settings:{ Environment . NewLine } " +
433+ $ "echo { quote } java.home = { dir } { quote } { Environment . NewLine } " +
434+ $ "echo { quote } java.vendor = Xamarin.Android Unit Tests{ quote } { Environment . NewLine } " +
435+ $ "echo { quote } java.version = { javaVersion } { quote } { Environment . NewLine } " +
436+ $ "echo { quote } xamarin.multi-line = line the first{ quote } { Environment . NewLine } " +
437+ $ "echo { quote } line the second{ quote } { Environment . NewLine } " +
438+ $ "echo { quote } .{ quote } { Environment . NewLine } ";
439+
440+ string javac =
441+ $ "echo javac { javaVersion } { Environment . NewLine } ";
442+
443+ CreateShellScript ( Path . Combine ( bin , "jar" ) , "" ) ;
444+ CreateShellScript ( Path . Combine ( bin , "java" ) , java ) ;
445+ CreateShellScript ( Path . Combine ( bin , "javac" ) , javac ) ;
446+ CreateShellScript ( Path . Combine ( jli , "libjli.dylib" ) , "" ) ;
447+ CreateShellScript ( Path . Combine ( jre , "libjvm.so" ) , "" ) ;
448+ CreateShellScript ( Path . Combine ( jre , "jvm.dll" ) , "" ) ;
449+ }
450+
451+ // https://github.com/xamarin/xamarin-android-tools/blob/683f37508b56c76c24b3287a5687743438625341/tests/Xamarin.Android.Tools.AndroidSdk-Tests/JdkInfoTests.cs#L108-L132
452+ void CreateShellScript ( string path , string contents )
424453 {
425- var sb = new StringBuilder ( ) ;
426- if ( IsWindows ) {
427- sb . AppendLine ( "@echo off" ) ;
428- sb . AppendLine ( $ "echo javac { version } ") ;
429- } else {
430- sb . AppendLine ( "#!/bin/bash" ) ;
431- sb . AppendLine ( $ "echo \" javac { version } \" ") ;
454+ if ( IsWindows && string . Compare ( Path . GetExtension ( path ) , ".dll" , true ) != 0 )
455+ path += ".cmd" ;
456+ using ( var script = new StreamWriter ( path ) ) {
457+ if ( IsWindows ) {
458+ script . WriteLine ( "@echo off" ) ;
459+ }
460+ else {
461+ script . WriteLine ( "#!/bin/sh" ) ;
462+ }
463+ script . WriteLine ( contents ) ;
432464 }
433- CreateFauxExecutable ( javacExeFullPath , sb ) ;
465+ if ( IsWindows )
466+ return ;
467+ var chmod = new ProcessStartInfo {
468+ FileName = "chmod" ,
469+ Arguments = $ "+x \" { path } \" ",
470+ UseShellExecute = false ,
471+ RedirectStandardInput = false ,
472+ RedirectStandardOutput = true ,
473+ RedirectStandardError = true ,
474+ CreateNoWindow = true ,
475+ WindowStyle = ProcessWindowStyle . Hidden ,
476+ } ;
477+ var p = Process . Start ( chmod ) ;
478+ p . WaitForExit ( ) ;
434479 }
435480
436481 void CreateFauxExecutable ( string exeFullPath , StringBuilder sb ) {
0 commit comments