From 437d8965e1879a10604f8b7e9e369198973229c1 Mon Sep 17 00:00:00 2001 From: Roel Spilker Date: Fri, 24 Jul 2009 00:23:08 +0200 Subject: [PATCH] Added WindowsDriveInfo support for 64-bit JVMs on windows. We think. Honestly, we haven't tested it! Also updated instructions on how to build the 64-bit version of the JVM, and generalized some of the loading aspects of the DLL, as we now need to potentially try 2 of them. --- src/lombok/installer/EclipseFinder.java | 43 ++++++++++++------ ...riveInfo.dll => WindowsDriveInfo-i386.dll} | Bin .../installer/WindowsDriveInfo-x86_64.dll | Bin 0 -> 66806 bytes src/lombok/installer/WindowsDriveInfo.java | 24 +++++++--- winsrc/.gitignore | 2 + winsrc/lombok_installer_WindowsDriveInfo.c | 23 +++++++++- 6 files changed, 71 insertions(+), 21 deletions(-) rename src/lombok/installer/{WindowsDriveInfo.dll => WindowsDriveInfo-i386.dll} (100%) create mode 100644 src/lombok/installer/WindowsDriveInfo-x86_64.dll diff --git a/src/lombok/installer/EclipseFinder.java b/src/lombok/installer/EclipseFinder.java index 5356d6fc..eabd6f04 100644 --- a/src/lombok/installer/EclipseFinder.java +++ b/src/lombok/installer/EclipseFinder.java @@ -24,7 +24,6 @@ package lombok.installer; import static java.util.Arrays.asList; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -38,6 +37,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import lombok.Lombok; +import lombok.core.Version; /** Utility class for doing various OS-specific operations related to finding Eclipse installations. */ class EclipseFinder { @@ -63,18 +63,36 @@ class EclipseFinder { } private static final AtomicBoolean windowsDriveInfoLibLoaded = new AtomicBoolean(false); - private static void loadWindowsDriveInfoLib() throws IOException, FileNotFoundException { + private static void loadWindowsDriveInfoLib() throws IOException { if ( !windowsDriveInfoLibLoaded.compareAndSet(false, true) ) return; - InputStream in = EclipseFinder.class.getResourceAsStream("WindowsDriveInfo.dll"); - File dllFile; + final String prefix = "lombok-" + Version.getVersion() + "-"; + + File temp = File.createTempFile("lombok", ".mark"); + File dll1 = new File(temp.getParentFile(), prefix + "WindowsDriveInfo-i386.dll"); + File dll2 = new File(temp.getParentFile(), prefix + "WindowsDriveInfo-x86_64.dll"); + temp.delete(); + dll1.deleteOnExit(); + dll2.deleteOnExit(); + try { + if ( unpackDLL("WindowsDriveInfo-i386.dll", dll1) ) { + System.load(dll1.getAbsolutePath()); + return; + } + } catch ( Throwable ignore ) {} + + try { + if ( unpackDLL("WindowsDriveInfo-x64_64.dll", dll1) ) { + System.load(dll2.getAbsolutePath()); + } + } catch ( Throwable ignore ) {} + } + + private static boolean unpackDLL(String dllName, File target) throws IOException { + InputStream in = EclipseFinder.class.getResourceAsStream(dllName); try { - File temp = File.createTempFile("lombok", ".mark"); - dllFile = new File(temp.getParentFile(), "lombok-WindowsDriveInfo.dll"); - temp.delete(); - dllFile.deleteOnExit(); try { - FileOutputStream out = new FileOutputStream(dllFile); + FileOutputStream out = new FileOutputStream(target); try { byte[] b = new byte[32000]; while ( true ) { @@ -86,15 +104,14 @@ class EclipseFinder { out.close(); } } catch ( IOException e ) { - if ( dllFile.exists() && dllFile.canRead() ) { - //Fall through - if there is a file named lombok-WindowsDriveInfo.dll, we'll try it. - } else throw e; + //Fall through - if there is a file named lombok-WindowsDriveInfo-arch.dll, we'll try it. + return target.exists() && target.canRead(); } } finally { in.close(); } - System.load(dllFile.getAbsolutePath()); + return true; } /** diff --git a/src/lombok/installer/WindowsDriveInfo.dll b/src/lombok/installer/WindowsDriveInfo-i386.dll similarity index 100% rename from src/lombok/installer/WindowsDriveInfo.dll rename to src/lombok/installer/WindowsDriveInfo-i386.dll diff --git a/src/lombok/installer/WindowsDriveInfo-x86_64.dll b/src/lombok/installer/WindowsDriveInfo-x86_64.dll new file mode 100644 index 0000000000000000000000000000000000000000..0b7c9a8332757b5e1ce66feb21b90ebeac5120ae GIT binary patch literal 66806 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

wqMaW0j*<;Nj&@;z^hrymQg&IL5`2eORSI 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 literal 0 HcmV?d00001 diff --git a/src/lombok/installer/WindowsDriveInfo.java b/src/lombok/installer/WindowsDriveInfo.java index a0cfcbc1..fd16ee6e 100644 --- a/src/lombok/installer/WindowsDriveInfo.java +++ b/src/lombok/installer/WindowsDriveInfo.java @@ -45,19 +45,29 @@ import java.util.List; * your git bash prompt's path (/etc/profile) and then run: * * $ gcc -c \ - * -I "/c/Program Files/Java/jdk1.6.0_14/include" \ - * -I "/c/Program Files/Java/jdk1.6.0_14/include/win32" \ - * -D__int64="long long" lombok_installer_WindowsDriveInfo.c + -I "/c/Program Files/Java/jdk1.6.0_14/include" \ + -I "/c/Program Files/Java/jdk1.6.0_14/include/win32" \ + -D__int64="long long" lombok_installer_WindowsDriveInfo.c * * $ dllwrap.exe --add-stdcall-alias \ - * -o WindowsDriveInfo.dll \ - * lombok_installer_WindowsDriveInfo.o + -o WindowsDriveInfo-i386.dll \ + lombok_installer_WindowsDriveInfo.o * * You may get a warning along the lines of "Creating an export definition". * This is expected behaviour. * - * The DLL produced has been checked into the git repository so you won't - * need to build this file again unless you make some changes to it. + *

+ * Now download MinGW-w64 to build the 64-bit version of the dll (you thought you were done, weren't you?) + * from: http://sourceforge.net/projects/mingw-w64/files/ + * (under toolchains targetting Win64 / Release for GCC 4.4.0 (or later) / the version for your OS.) + * + * Then, do this all over again, but this time with the x86_64-w64-mingw32-gcc and + * x86_64-w64-mingw32-dllwrap versions that are part of the MinGW-w64 distribution. + * Name the dll 'WindowsDriveInfo-x86_64.dll'. + * + * Both the 32-bit and 64-bit DLLs that this produces have been checked into the git repository + * under src/lombok/installer so you won't need to build them again unless you make some changes to + * the code in the winsrc directory. */ public class WindowsDriveInfo { /** diff --git a/winsrc/.gitignore b/winsrc/.gitignore index 7d929cba..3bf43ac3 100644 --- a/winsrc/.gitignore +++ b/winsrc/.gitignore @@ -1,2 +1,4 @@ lombok_installer_WindowsDriveInfo.o WindowsDriveInfo.dll +WindowsDriveInfo-x86_64.dll +WindowsDriveInfo-i386.dll diff --git a/winsrc/lombok_installer_WindowsDriveInfo.c b/winsrc/lombok_installer_WindowsDriveInfo.c index 5bccd047..dd08706a 100644 --- a/winsrc/lombok_installer_WindowsDriveInfo.c +++ b/winsrc/lombok_installer_WindowsDriveInfo.c @@ -1,4 +1,25 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ +/* + * Copyright © 2009 Reinier Zwitserloot and Roel Spilker. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + #include #include #include