From 01692d8e696807881a533d4a4f8fa1b0394de5e4 Mon Sep 17 00:00:00 2001 From: Tobias Kellner Date: Thu, 8 Nov 2012 20:07:55 +0100 Subject: Only build 1 pkg per OS, load SWT libs @ runtime --- trunk/pdf-over-gui/pom.xml | 18 +++-- .../src/main/java/at/asit/pdfover/gui/Main.java | 21 +++-- .../java/at/asit/pdfover/gui/utils/SWTLoader.java | 89 +++++++++++++++++++++ trunk/pdf-over-gui/src/main/jnlp/pdfover.jnlp | 61 ++------------ .../src/main/resources/lib-swt/swt-linux-32.jar | Bin 0 -> 1594280 bytes .../src/main/resources/lib-swt/swt-linux-64.jar | Bin 0 -> 1758696 bytes .../src/main/resources/lib-swt/swt-mac-32.jar | Bin 0 -> 1755486 bytes .../src/main/resources/lib-swt/swt-mac-64.jar | Bin 0 -> 1659145 bytes .../src/main/resources/lib-swt/swt-windows-32.jar | Bin 0 -> 1951661 bytes .../src/main/resources/lib-swt/swt-windows-64.jar | Bin 0 -> 1938930 bytes trunk/publish.sh | 4 +- 11 files changed, 120 insertions(+), 73 deletions(-) create mode 100644 trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java create mode 100644 trunk/pdf-over-gui/src/main/resources/lib-swt/swt-linux-32.jar create mode 100644 trunk/pdf-over-gui/src/main/resources/lib-swt/swt-linux-64.jar create mode 100644 trunk/pdf-over-gui/src/main/resources/lib-swt/swt-mac-32.jar create mode 100644 trunk/pdf-over-gui/src/main/resources/lib-swt/swt-mac-64.jar create mode 100644 trunk/pdf-over-gui/src/main/resources/lib-swt/swt-windows-32.jar create mode 100644 trunk/pdf-over-gui/src/main/resources/lib-swt/swt-windows-64.jar diff --git a/trunk/pdf-over-gui/pom.xml b/trunk/pdf-over-gui/pom.xml index 4c485366..23ddf1ca 100644 --- a/trunk/pdf-over-gui/pom.xml +++ b/trunk/pdf-over-gui/pom.xml @@ -118,7 +118,7 @@ true true system - org.codehaus.izpack + org.codehaus.izpack,org.eclipse.swt @@ -167,8 +167,9 @@ src/main/resources - scripts/* icons/* + lib-swt/swt-${target.name}-* + scripts/* @@ -211,6 +212,7 @@ src/main/resources izpack/* + lib-swt/* scripts/* keystore.jks @@ -240,8 +242,8 @@ org.eclipse.swt.gtk.linux.x86_64 - ${project.build.directory}/staging/linux-64 - linux-64 + ${project.build.directory}/staging/linux + linux @@ -283,8 +285,8 @@ org.eclipse.swt.win32.win32.x86_64 - ${project.build.directory}/staging/windows-64 - windows-64 + ${project.build.directory}/staging/windows + windows @@ -312,8 +314,8 @@ org.eclipse.swt.cocoa.macosx.x86_64 - ${project.build.directory}/staging/mac-64 - mac-64 + ${project.build.directory}/staging/mac + mac diff --git a/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java b/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java index e650cfc4..42a811be 100644 --- a/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java +++ b/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/Main.java @@ -21,6 +21,8 @@ import java.io.File; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import at.asit.pdfover.gui.exceptions.InitializationException; +import at.asit.pdfover.gui.utils.SWTLoader; import at.asit.pdfover.gui.workflow.StateMachineImpl; /** @@ -37,20 +39,23 @@ public class Main { * @param args */ public static void main(String[] args) { - StateMachineImpl stateMachine = new StateMachineImpl(args); - + log.debug("Loading SWT libraries"); //$NON-NLS-1$ + try { + SWTLoader.loadSWT(); + } catch (InitializationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + File configDir = new File(System.getProperty("user.home")+"/.pdfover"); //$NON-NLS-1$//$NON-NLS-2$ - if(!configDir.exists()) { configDir.mkdir(); - } - + + StateMachineImpl stateMachine = new StateMachineImpl(args); + log.debug("Starting stateMachine ..."); //$NON-NLS-1$ - stateMachine.start(); - log.debug("Ended stateMachine ..."); //$NON-NLS-1$ } - } diff --git a/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java b/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java new file mode 100644 index 00000000..f966bb71 --- /dev/null +++ b/trunk/pdf-over-gui/src/main/java/at/asit/pdfover/gui/utils/SWTLoader.java @@ -0,0 +1,89 @@ +/* + * Copyright 2012 by A-SIT, Secure Information Technology Center Austria + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + */ +package at.asit.pdfover.gui.utils; + +// Imports +import java.io.File; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.asit.pdfover.gui.exceptions.InitializationException; + +/** + * + */ +@SuppressWarnings("nls") +public class SWTLoader { + /** + * SLF4J Logger instance + **/ + private static final Logger log = LoggerFactory.getLogger(SWTLoader.class); + + /** + * Load the SWT library for this OS + * @throws InitializationException Loading failed + */ + public static void loadSWT() throws InitializationException { + try { + log.debug("loading " + getSwtJarName()); + URLClassLoader cl = (URLClassLoader)SWTLoader.class.getClassLoader(); + Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); + addUrlMethod.setAccessible(true); + + String swtLibPath = "lib-swt/" + getSwtJarName(); + File swtLib = new File(swtLibPath); + if (!swtLib.isFile()) + throw new SWTLoadFailedException("Library " + swtLibPath + " not found"); + log.debug("Adding " + swtLib + " to ClassLoader..."); + addUrlMethod.invoke(cl, swtLib.toURI().toURL()); + log.debug("Success."); + } catch (Exception e) { + throw new InitializationException("SWT loading failed", e); + } + } + + private static int getArchBits() { + String arch = System.getProperty("os.arch"); + return arch.contains("64") ? 64 : 32; + } + + private static String getSwtJarName() throws SWTLoadFailedException { + String os = System.getProperty("os.name").toLowerCase(); + if (os.contains("win")) + os = "windows"; + else if (os.contains("mac")) + os = "mac"; + else if (os.contains("linux") || os.contains("nix")) + os = "linux"; + else { + log.error("Unknown OS: " + os); + throw new SWTLoadFailedException("Unknown OS: " + os); + } + return "swt-" + os + "-" + getArchBits() + ".jar"; + } + + private static class SWTLoadFailedException extends Exception { + private static final long serialVersionUID = 1L; + + SWTLoadFailedException(String msg) { + super(msg); + } + } +} diff --git a/trunk/pdf-over-gui/src/main/jnlp/pdfover.jnlp b/trunk/pdf-over-gui/src/main/jnlp/pdfover.jnlp index df064c22..ccf8a297 100644 --- a/trunk/pdf-over-gui/src/main/jnlp/pdfover.jnlp +++ b/trunk/pdf-over-gui/src/main/jnlp/pdfover.jnlp @@ -21,68 +21,19 @@ - + - - - - - - - - - - - - - - - - - - + - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + diff --git a/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-linux-32.jar b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-linux-32.jar new file mode 100644 index 00000000..95d36dca Binary files /dev/null and b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-linux-32.jar differ diff --git a/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-linux-64.jar b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-linux-64.jar new file mode 100644 index 00000000..2141c784 Binary files /dev/null and b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-linux-64.jar differ diff --git a/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-mac-32.jar b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-mac-32.jar new file mode 100644 index 00000000..7f1718fd Binary files /dev/null and b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-mac-32.jar differ diff --git a/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-mac-64.jar b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-mac-64.jar new file mode 100644 index 00000000..e16cfa1f Binary files /dev/null and b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-mac-64.jar differ diff --git a/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-windows-32.jar b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-windows-32.jar new file mode 100644 index 00000000..eff617af Binary files /dev/null and b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-windows-32.jar differ diff --git a/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-windows-64.jar b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-windows-64.jar new file mode 100644 index 00000000..1e46b588 Binary files /dev/null and b/trunk/pdf-over-gui/src/main/resources/lib-swt/swt-windows-64.jar differ diff --git a/trunk/publish.sh b/trunk/publish.sh index a0a54fdc..7b04941f 100755 --- a/trunk/publish.sh +++ b/trunk/publish.sh @@ -44,8 +44,8 @@ echo -e "Publishing to: $TYELLOW$PUBLISH_DIR$TNORMAL" mkdir -p $PUBLISH_DIR mkdir -p $LOG_DIR -profiles=( linux linux-64 windows windows-64 mac mac-64 ) -names=( linux_x86 linux_x64 windows_x86 windows_x64 mac_x86 mac_x64 ) +profiles=( linux windows mac ) +names=( linux windows mac ) for (( i = 0 ; i < ${#names[@]} ; i++ )) do PROFILE=${profiles[$i]} -- cgit v1.2.3