+++ /dev/null
-Install Manager ChangeLog
-
-== Version 2.0.4 ==
-* 4-September-2012
- * [N] Add check box to select the latest snapshot.
-
-== Version 2.0.3 ==
-* 31-August-2012
- * [N] Shihyun kim / always enable to use connectable proxy configuration
-
-
Type:
Package-Server:
Server-Type: snapshot
-InstallManager-Version: 2.0.0
-Distribution: release
+InstallManager-Version: 2.3.0
+Distribution: tizen_2.2
Release-note: https://developer.tizen.org
import org.tizen.installmanager.core.IMExitException;
import org.tizen.installmanager.core.IMFatalException;
import org.tizen.installmanager.core.InstallManager;
+import org.tizen.installmanager.core.InstallManagerConstants;
import org.tizen.installmanager.core.Options;
import org.tizen.installmanager.lib.Downloader;
import org.tizen.installmanager.lib.ErrorController;
import org.tizen.installmanager.lib.Platform;
import org.tizen.installmanager.lib.ErrorController.ErrorCode;
import org.tizen.installmanager.lib.NetworkProxy.ProxyType;
+import org.tizen.installmanager.lib.Registry;
import org.tizen.installmanager.lib.exception.IMNetworkException;
import org.tizen.installmanager.lib.linux.LinuxFileSystemInfo;
import org.tizen.installmanager.lib.win.WindowsFileSystemInfo;
public class CliInstall {
private static final String DISTRIBUTION_INFO = "distribution.info";
private static final String ESSENTIAL_COMPONENT = "ESSENTIAL-COMPONENT";
- private static final String WINDOWS_DEFAULT_TARGET_PATH = "C:\\tizen-sdk";
private static ViewController controller = null;
PackageManager pm = PackageManager.getInstance();
- String targetDir = setTargetDir();
+ String targetDir = getTargetDir();
+ Registry.sdkWorkSpacePath = getSDKDataPath();
+ Config.USER_CONFIG_HOME_PATH = getSDKDataPath();
if (packageNames.contains("all")) {
if (checkAvailableSize(getAllPackages(), targetDir)) {
* When cli installation, sets SDK target directory as user input.
* @return SDK install directory.
*/
- private static String setTargetDir() {
+ private static String getTargetDir() {
String inputTargetDir = Options.targetDir;
String targetDir = null;
if (Platform.isLinux() || Platform.isMacOS()) {
targetDir = System.getProperty("user.home") + File.separator + Config.SDK_DIRECTORY;
} else if (Platform.isWindows()) {
- targetDir = WINDOWS_DEFAULT_TARGET_PATH;
+ targetDir = InstallManagerConstants.WINDOWS_DEFAULT_TARGET_PATH;
} else {
throw new IMFatalException(ErrorCode.UNSUPPORTED_PLATFORM);
}
return targetDir;
}
+ private static String getSDKDataPath() {
+ String inputDataDir = Options.sdkDataPath;
+
+ String dataDir = null;
+
+ if (inputDataDir == null) {
+ if (Platform.isLinux() || Platform.isMacOS()) {
+ dataDir = System.getProperty("user.home") + File.separator + Config.SDK_DIRECTORY;
+ } else if (Platform.isWindows()) {
+ dataDir = InstallManagerConstants.WINDOWS_DEFAULT_DATA_PATH;
+ } else {
+ throw new IMFatalException(ErrorCode.UNSUPPORTED_PLATFORM);
+ }
+ } else if (inputDataDir.startsWith("~")) {
+ dataDir = inputDataDir.replaceFirst("~", System.getProperty("user.home"));
+ if (checkCorrectPath(dataDir)) {
+ return inputDataDir;
+ } else {
+ return null;
+ }
+ } else if (checkCorrectPath(inputDataDir)) {
+ dataDir = inputDataDir;
+ } else {
+ return null;
+ }
+
+ return dataDir;
+ }
+
/**
* Check path which is correct depend on platform.
* @param targetPath
* @return
*/
public boolean makeConfigHome() {
+ Log.log("Create config home.");
boolean bResult = true;
File configHomeDirFile = null;
* @return <code>true</true> if success.
*/
public boolean makeInfoDirectory() {
-
boolean bResult = makeConfigHome();
if (bResult) {
} catch (UnsupportedEncodingException e) {
Log.ExceptionLog(e);
return encodeRepository;
- }
+ }
- String downloadPath = PathUtil.get(Config.INSTALL_MANAGER_TEMP_DIRECTORY,
- INSTALL_MANAGER_DOWNLOAD_DIRECTORY_NAME, encodeRepository);
- return downloadPath;
+ return PathUtil.get(getDownloadDirPath(), encodeRepository);
+ }
+
+ /**
+ * get downloaded directory path
+ * @return
+ */
+ public String getDownloadDirPath() {
+ if (mTargetDir == null || mTargetDir.isEmpty()) {
+ return PathUtil.get(Config.INSTALL_MANAGER_TEMP_DIRECTORY,
+ INSTALL_MANAGER_DOWNLOAD_DIRECTORY_NAME);
+ } else {
+ return PathUtil.get(
+ mTargetDir,
+ InstallManagerConstants.SDK_CONFIGURATION_DIR,
+ INSTALL_MANAGER_DOWNLOAD_DIRECTORY_NAME);
+ }
}
public static void setSelectedSDKPath(String path) {
Log.log("Loading config file failed");
throw new IMFatalException("Loading configuration file failed");
}
-
+
if (!Registry.getInstalledPath().isEmpty()) {
mConfig.setTargetDir(Registry.getInstalledPath());
}
for (Package pkg : downloadPkgSet) {
if (monitor != null) {
- monitor.setProgressTitle(pkg.getPackageName());
+ monitor.workedDownload(pkg.getPackageName());
} else {
if (Options.doInstallNoUI) {
System.out.println(pkg.getPackageName() + " is downloading...");
}
// Check cache foler
- if (existInCacheFolder(packageToDownload, fileDownloadTargetPath)) {
+ if (existInCacheFolder(packageToDownload, fileDownloadTargetPath, monitor)) {
if (monitor != null) {
if (monitor.isCanceled()) {
throw new IMFatalException(ErrorCode.CANCEL);
* @return <code>true</code> if the package is already downloaded to the
* file path
*/
- private boolean existInCacheFolder(Package pkg, String filePath) {
+ private boolean existInCacheFolder(Package pkg, String filePath, IIMProgressMonitor monitor) {
File file = new File(filePath);
if (!file.exists()) {
return false;
}
+
+ if (monitor != null) {
+ monitor.workedChecksum(pkg.getPackageName());
+ }
if (Options.doPackageValidation) {
if (Checksum.getSHA256(filePath) != null) {
Log.log("Install package '" + pkg + "'");
if (monitor != null) {
- monitor.setProgressTitle(pkg.getPackageName());
+ monitor.workedProcess(pkg.getPackageName());
} else {
if (Options.doInstallNoUI) {
System.out.println(pkg.getPackageName() + " is installing...");
InstallProgressMonitor monitor) throws IMExitException, IMNetworkException{
Log.log("InstallManager.install() installable packages : " + installablePackages);
- if (installablePackages == null || targetDir == null) {
+ if (installablePackages == null || targetDir == null || targetDir.isEmpty()) {
Log.err("packaegs => " + installablePackages + ", targetDir => "
+ targetDir);
return false;
}
+ mConfig.setTargetDir(targetDir);
+
// download packages from repository
if (downloadPackages(installablePackages, monitor)) {
Log.log("Success to download packages from repository.");
if (!installInstallManagerFromLocal(targetDir)) {
Log.err("Cannot install install-manager from local directory.");
}
-
}
int i = 0;
// move InstallManager to target directory
if (monitor != null) {
- monitor.setFileName("Move to target directory...");
- monitor.workedFileName();
+ monitor.workedSubTitle("Move to target directory...");
}
if (Config.status == Config.Status.INSTALL) {
Log.log("Remove missing packages => " + missingPackages);
if (monitor != null) {
- monitor.setProgressTitle("Remove Missing Packages");
+ monitor.workedTitle("Remove Missing Packages");
}
for (Package pkg : missingPackages) {
PackageSet conflictPackages = packageManager
.getConflictPackagesInUpdate(installableMetaPkgs);
Log.log("Remove conflict packages => " + conflictPackages);
+
+ if (conflictPackages.isEmpty()) {
+ return true;
+ }
if (monitor != null) {
- monitor.setProgressTitle("Remove Conflict Packages");
+ monitor.workedTitle("Remove Conflict Packages");
}
return remove(conflictPackages);
IIMProgressMonitor monitor) {
PackageSet updatablePackages = packageManager
.getdifferentVersionFromInstalledPackages(installablePackages);
+
+ if (updatablePackages.isEmpty()) {
+ return true;
+ }
Log.log("Remove packages in snapshot => " + updatablePackages);
if (monitor != null) {
- monitor.setProgressTitle("Remove updatable Packages");
+ monitor.workedTitle("Remove updatable Packages...");
}
return remove(updatablePackages);
IIMProgressMonitor monitor) {
PackageSet updatablePackages = packageManager
.getUpdatablePackagesInUpdate(installablePackages);
+
+ if (updatablePackages.isEmpty()) {
+ return true;
+ }
Log.log("Remove updatable packages => " + updatablePackages);
if (monitor != null) {
- monitor.setProgressTitle("Remove updatable Packages");
+ monitor.workedTitle("Remove updatable Packages");
}
return remove(updatablePackages);
}
if (monitor != null) {
- monitor.setProgressTitle(pkg.getPackageName());
+ monitor.workedTitle(pkg.getPackageName());
}
if (Options.doRemoveNoUI || Options.doInstallNoUI) {
if (!packageManager.existInstalledMetaPackages()) {
Log.log("Installed meta packages do not exist");
if (monitor != null) {
- monitor.setFileName("Remove target directory...");
+ monitor.workedSubTitle("Remove target directory...");
monitor.worked(pkgsToRemove.size());
}
Log.log("Remove all packages.");
if (monitor != null) {
- monitor.setProgressTitle(REMOVE_ALL_PACKAGES);
+ monitor.workedTitle(REMOVE_ALL_PACKAGES);
}
PackageSet removablePackages = packageManager.getInstalledPackages();
Log.log("InstallManager removeSDK start");
if (monitor != null) {
- monitor.setProgressTitle(REMOVE_ALL_SDK_FILES);
+ monitor.workedTitle(REMOVE_ALL_SDK_FILES);
}
removeInstallManager();
final static public String DESKTOP_SHORTCUT_IMAGE_NAME = getDesktopShortcutImageName();
final static public String DESKTOP_SHORTCUT_IMAGE_PATH = PathUtil.get("/res", "desktop_directory", DESKTOP_SHORTCUT_IMAGE_NAME);
+ //target directory path
+ final static public String WINDOWS_DEFAULT_TARGET_PATH = "C:\\tizen-sdk";
+ final static public String WINDOWS_DEFAULT_DATA_PATH = "C:\\tizen-sdk-data";
+
+ //sdk configuration file
+ final static public String SDK_CONFIGURATION_DIR = ".info";
+ final static public String SDK_INFORMATION_FILE_NAME = "sdk.info";
+ final static public String SDK_INSTALLED_PACKAGE_LIST_FILE = "installedpackage.list";
+ final static public String SDK_INSTALLED_PACKAGE_LIST_PATH = PathUtil.get(SDK_CONFIGURATION_DIR, SDK_INSTALLED_PACKAGE_LIST_FILE);
+
+
static String getInstallManagerBinaryName() {
if (Platform.isLinux()) {
return INSTALLMANAGER_EXECUTALBE_FILE_NAME_FOR_LINUX;
Log.log("All files moved properly.");
}
- executeInstallScript(pack, monitor, tempDir);
+ if (!executeInstallScript(pack, monitor, tempDir)) {
+ Log.err("Fail to execute install script.");
+ throw new IMFatalException(ErrorCode.INSTALL_SCRIPT_FATAL_ERROR);
+ }
+ if (!moveRemoveScript(tempDir, pack)) {
+ return false;
+ }
+
+// if (!moveInstallScript(tempDir, pack)) {
+// return false;
+// }
+
+ PathUtil.remove(tempDir);
+ return true;
+ }
+
+ private boolean moveRemoveScript(String tempDir, Package pack) {
// move removeScript file to special Directory
File removeScriptFrom = new File(tempDir + File.separator
+ pack.getRemoveScript());
}
}
}
- PathUtil.remove(tempDir);
+ return true;
+ }
+
+ private boolean moveInstallScript(String tempDir, Package pack) {
+ // move removeScript file to special Directory
+ File installScriptFrom = new File(tempDir + File.separator
+ + pack.getInstallScript());
+
+ if ((pack.getInstallScript() != null)
+ && !(pack.getInstallScript().equals(""))
+ && (installScriptFrom.exists())) {
+ File installScriptTo = new File(getInstallScriptLocalPath(pack));
+ if (!createInstallScriptDir(installScriptTo)) {
+ Log.err("Cannot create install script directory in Info directory => "
+ + pack.getPackageName());
+ return false;
+ } else {
+ if (installScriptTo.exists()) {
+ if (!installScriptTo.delete()) {
+ Log.err("Fail to delete file ==> " + installScriptTo);
+ }
+ }
+ if (!PathUtil.moveFile(installScriptFrom, installScriptTo)) {
+ Log.err("Cannot move install Script to targetDir => "
+ + pack.getPackageName());
+ return false;
+ }
+ }
+ }
return true;
}
if (Options.interactive) {
env.put("INTERACTIVE", "true");
- env.put("SUPASS", Options.suPass);
} else {
env.put("INTERACTIVE", "false");
+ env.put("SUPASS", Options.suPass);
}
return env;
PathUtil.getFromInstalledPath(Config.INFO_DIRECTORY),
pkg.getPackageName(), pkg.getRemoveScript());
}
+
+ private String getInstallScriptLocalPath(Package pkg) {
+ return PathUtil.get(
+ PathUtil.getFromInstalledPath(Config.INFO_DIRECTORY),
+ pkg.getPackageName(), pkg.getInstallScript());
+ }
private String getInstalledFileListPath(Package pkg) {
return PathUtil.get(
return true;
}
}
+
+ private boolean createInstallScriptDir(File installScript) {
+ File parentDir = installScript.getParentFile();
+
+ if (!parentDir.exists()) {
+ return parentDir.mkdirs();
+ } else {
+ return true;
+ }
+ }
private boolean executeInstallScript(Package pack,
IIMProgressMonitor monitor, String tempDir) {
Log.log("Execute install script");
if (monitor != null) {
- monitor.setFileName(scriptFile.getName());
- monitor.workedFileName();
+ monitor.workedSubTitle(scriptFile.getName());
}
try {
return executeScript(scriptFile);
if (scriptFile.exists()) {
if (monitor != null) {
- monitor.setFileName(scriptFile.getName());
- monitor.workedFileName();
+ monitor.workedSubTitle(scriptFile.getName());
}
try {
// check exit code
if (exitCode == 0) {
return true;
- } else if (exitCode > 0 && exitCode < 10) {
+ } else if (exitCode == 1) {
Log.err("Exit code => " + Integer.toString(exitCode));
return false;
} else if (exitCode == 99) {
ErrorController.setInfoCode(InfoCode.RESTART_THE_COMPUTER);
Log.log("Set restart message.");
return true;
- } else {
+ } else {
Log.err("Installer.executeScript() install script error => "
+ scriptFile.getAbsolutePath());
Log.err("Exit code => " + Integer.toString(exitCode));
- throw new IMFatalException(ErrorCode.INSTALL_SCRIPT_FATAL_ERROR);
+ throw new IMFatalException(ErrorCode.SCRIPT_FATAL_ERROR);
}
}
}
package org.tizen.installmanager.core;
-import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
*/
public static boolean snapshot = false;
+ /**
+ * Use cli mode
+ */
public static String repository = null;
public static String imageFilePath = null;
public static String snapshotPath = null;
public static ServerType serverType = null;
public static String distribution = null;
public static String targetDir = null;
+ public static String sdkDataPath = null;
public static boolean isNetwork = true;
private static void workCliOptions(String[] args) {
ArrayList<String> argArray = new ArrayList<String>();
+
for (String t : args) {
if (!t.equalsIgnoreCase("-install") && !t.equalsIgnoreCase("-remove")) {
argArray.add(t);
}
Iterator<String> argIter = argArray.iterator();
-
+ while (argIter.hasNext()) {
+ if (argIter.next().equalsIgnoreCase("-path")) {
+ argIter.remove();
+ argIter.next();
+ argIter.remove();
+ }
+ }
+
// set repository
+ argIter = argArray.iterator();
while (argIter.hasNext()) {
if (argIter.next().equalsIgnoreCase("-r")) {
argIter.remove();
argIter.remove();
}
}
+
+ argIter = argArray.iterator();
+ while (argIter.hasNext()) {
+ if (argIter.next().equalsIgnoreCase("-w")) {
+ argIter.remove();
+ sdkDataPath = argIter.next();
+ argIter.remove();
+ }
+ }
// set distribution
argIter = argArray.iterator();
if (argIter.next().equalsIgnoreCase("-p")) {
argIter.remove();
while (argIter.hasNext()) {
- packages.add(argIter.next());
- argIter.remove();
+ String pkg = argIter.next();
+ if (!pkg.startsWith("-")) {
+ packages.add(pkg);
+ argIter.remove();
+ } else {
+ break;
+ }
}
}
}
if (!argIter.next().equalsIgnoreCase("-passwd")) {
throw new IMFatalException(ErrorCode.WRONG_OPTION);
} else {
+ argIter.remove();
if (argIter.hasNext()) {
suPass = argIter.next();
interactive = false;
}
}
} else if (Platform.isWindows()) {
- interactive = false;
- }
+ interactive = true;
+ } else if (Platform.isMacOS()) {
+ interactive = true;
+ } else {
+ throw new IMFatalException(ErrorCode.UNSUPPORTED_PLATFORM);
+ }
} else {
throw new IMFatalException(ErrorCode.WRONG_OPTION);
}
PACKAGE_NOT_EXIST_TO_INSTALL_OR_UNINSTALL("Install or uninstall package not found."),
INSTALL_SCRIPT_NOT_EXISTS("Install script files not found."),
INSTALL_SCRIPT_FATAL_ERROR("Fatal error occurred while installing the Tizen SDK."),
+ SCRIPT_FATAL_ERROR("Fatal error occurred while executing post script."),
// Network error
INTERNET_CONNECTION_ERROR("Server connection failed. Check the network status or set InstallManager settings."),
*
*/
public interface IIMProgressMonitor extends IProgressMonitor{
+
/**
- * set name of package.
- * @param name
+ * Display title of progress bar.
+ * @param title
*/
- public void setProgressTitle(String name);
+ public void workedTitle(String title);
+
/**
- * set file name while installing or uninstalling
- * @param name
+ * Display title of progress bar.
+ * @param title
*/
- public void setFileName(String name);
+ public void workedChecksum(String title);
+
/**
- * Display file name to UI.
+ * Display subtitle of progress bar.
*/
- public void workedFileName();
+ public void workedSubTitle(String subTitle);
+
/**
* Display download size to UI.
* @param size
*/
public void workedProgressbar(int percent);
public void setError(int errorCode);
+
+ /**
+ * Set progress package name to title.
+ * @param title
+ */
+ void workedProcess(String title);
+
+ /**
+ * Set file name to download.
+ * @param title
+ */
+ void workedDownload(String title);
}
import org.tizen.installmanager.core.Config;
import org.tizen.installmanager.core.IMFatalException;
+import org.tizen.installmanager.core.InstallManagerConstants;
+import org.tizen.installmanager.core.Options;
import org.tizen.installmanager.lib.ErrorController.ErrorCode;
import org.tizen.installmanager.util.PathUtil;
//installed path.
public static final String REGISTRY_FILE_NAME = "tizensdkpath";
public static final String MULTI_SDK_FILE_NAME = "multisdkpath";
- private static final String SDK_INFORMATION_FILE_NAME = "sdk.info";
- private static final String REGISTRY_FILE_PATH = PathUtil.get(
+ public static final String REGISTRY_FILE_PATH = PathUtil.get(
Config.INSTALL_MANAGER_CONFIG, REGISTRY_FILE_NAME);
private static final String OLD_REGISTRY_FILE_PATH = PathUtil.get(
Config.getConfigHome(), REGISTRY_FILE_NAME);
- private static final String MULTI_SDK_FILE_PATH = PathUtil.get(
+ public static final String MULTI_SDK_FILE_PATH = PathUtil.get(
Config.INSTALL_MANAGER_CONFIG, MULTI_SDK_FILE_NAME);
private static final String INSTALLED_PATH_KEY = "TIZEN_SDK_INSTALLED_PATH";
private static final String SDK_DATA_PATH_KEY = "TIZEN_SDK_DATA_PATH";
}
File installedPathFile = new File(MULTI_SDK_FILE_PATH);
- if (!installedPathFile.exists()) {
+ if (!installedPathFile.exists() || Options.doInstallNoUI || Options.doRemoveNoUI) {
try {
installedPathFile = PathUtil.makeNewFile(MULTI_SDK_FILE_PATH);
} catch (IOException e) {
String sdkInfoPath = "";
if (current != null) {
- sdkInfoPath = PathUtil.get(current.getParent(), SDK_INFORMATION_FILE_NAME);
+ sdkInfoPath = PathUtil.get(current.getParent(), InstallManagerConstants.SDK_INFORMATION_FILE_NAME);
}
File sdkInfoFile = new File(sdkInfoPath);
return currentInstalledSDKPath;
}
+ /**
+ * When installmanager updates SDK, installmanager have to know sdk information from sdk.info file.
+ * @param sdkPath
+ */
+ public static void setSDKinfoBySDKPath(String sdkPath) {
+ File sdkInfoFile = new File(PathUtil.get(sdkPath, InstallManagerConstants.SDK_INFORMATION_FILE_NAME));
+ if (sdkInfoFile.exists()) {
+ sdkWorkSpacePath = getPathFromRegistryKey(sdkInfoFile.getAbsolutePath(), SDK_DATA_PATH_KEY);
+ Log.log("sdk.info file exists. => " + sdkPath);
+ Log.log("InstallManager can set sdk environment.");
+ } else {
+ Log.log("sdk.info file does not exist. => " + sdkPath);
+ }
+ }
+
public static String getInstalledPathForUpdate() {
return getPathFromRegistryKey(REGISTRY_FILE_PATH, INSTALLED_PATH_KEY);
}
-
+
private static String getPathFromRegistryKey(String path, String registryKey) {
File file = new File(path);
throw new IMFatalException(ErrorCode.INVALID_INSTALL_PATH);
}
- String sdkInfoPath = PathUtil.get(installPath, SDK_INFORMATION_FILE_NAME);
+ String sdkInfoPath = PathUtil.get(installPath, InstallManagerConstants.SDK_INFORMATION_FILE_NAME);
String target = INSTALLED_PATH_KEY + REGISTRY_SEPERATOR + installPath;
String workSpace = SDK_DATA_PATH_KEY + REGISTRY_SEPERATOR + sdkWorkSpacePath;
} catch (IMShellCommandFail e) {
return ERROR;
}
+
+ if (monitor != null) {
+ monitor.workedSubTitle("");
+ }
return SUCCESS;
}
}
int exitValue = ShellUtil.execute(command, null, null, parser);
+
return exitValue;
}
private void setMonitorFile() {
if (mMonitor != null) {
- mMonitor.setFileName(fileName);
- mMonitor.workedFileName();
+ mMonitor.workedSubTitle(fileName);
}
}
if (mMonitor != null) {
String name = PathUtil.getFileName(line);
- mMonitor.setFileName(name);
- mMonitor.workedFileName();
+ mMonitor.workedSubTitle(name);
}
}
while (zipEntry != null) {
if (monitor != null) {
String fileName = PathUtil.getFileName(zipEntry.getName());
- monitor.setFileName(fileName);
- monitor.workedFileName();
+ monitor.workedSubTitle(fileName);
}
String targetPath = targetDir.getAbsolutePath() + File.separator + zipEntry.getName();
import org.tizen.installmanager.core.IMFatalException;
import org.tizen.installmanager.core.InstallManager;
import org.tizen.installmanager.core.Options;
-import org.tizen.installmanager.lib.Documents;
import org.tizen.installmanager.lib.ErrorController;
import org.tizen.installmanager.lib.IMError;
import org.tizen.installmanager.lib.Log;
"Are you sure to quit Install Manager?\n\nIf you click \"Yes\", the uninstallation is stopped.",
DialogType.WARNING, false);
} else if (sl_composite.topControl == compositeCompletePage) {
- btnClose.setText("close");
- if (Documents.isChecked()) {
- Documents.showChangeLog(); // show the change log(history)
+ controller.showChangeLog();
+
+ if (!Options.doResumeDownloading) {
+ controller.cleanUpTargetDirectory();
}
+
result = MessageBoxDlg.YES;
} else {
result = MessageBoxDlg.showDlg(e.display.getActiveShell(),
Config.USER_CONFIG_HOME_PATH = compositeSetInstallDirectoryPage.getSDKWorkSpacePath();
Registry.sdkWorkSpacePath = controller.getSDKWorkSpacePath();
Registry.targetPath = controller.getInstallPath();
+ Registry.saveSDKInfo(Registry.targetPath);
InstallManager.getInstance().initPackageList();
Log.err("Unexpected error occurred");
Log.ExceptionLog(e);
+ if (Options.doInstallNoUI || Options.doRemoveNoUI) {
+ PathUtil.remove(Registry.REGISTRY_FILE_PATH);
+ PathUtil.remove(Registry.MULTI_SDK_FILE_PATH);
+ System.out.println("Fatal error occurred.");
+ System.exit(0);
+ }
+
// show error message
if (window != null) {
window.open();
package org.tizen.installmanager.ui.page;
import java.awt.Desktop;
-import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.tizen.installmanager.core.Config;
-import org.tizen.installmanager.core.IMFatalException;
-import org.tizen.installmanager.lib.Log;
import org.tizen.installmanager.lib.Platform;
-import org.tizen.installmanager.lib.ErrorController.ErrorCode;
import org.tizen.installmanager.ui.InstallManagerWindow;
import org.tizen.installmanager.ui.dialog.MessageBoxDlg;
import org.tizen.installmanager.ui.dialog.MessageBoxDlg.DialogType;
import org.tizen.installmanager.ui.InstallManagerWindow;
import org.tizen.installmanager.ui.dialog.MessageBoxDlg;
import org.tizen.installmanager.ui.dialog.MessageBoxDlg.DialogType;
-import org.tizen.installmanager.ui.page.WelcomePage.RADIO_ACTION;
/**
* @author Taeyoung Son <taeyoung2.son@samsung.com>
// Do nothing.
}
- @Override
- public void setProgressTitle(String name) {
- mProgressTitle = name;
- }
-
- @Override
- public void setFileName(String name) {
- if (name.length() > MAX_LENGTH) {
- mSubTitle = name.substring(0, MAX_LENGTH - 2);
- mSubTitle = mSubTitle + STRING_ETC;
- } else {
- mSubTitle = name;
- }
- }
-
/**
* set working package name to show during installing
*/
}
});
}
+
+ /**
+ * set working file name to show during installing
+ */
+ @Override
+ public void workedTitle(String title) {
+ mProgressTitle = title;
+
+ if (display == null || display.isDisposed()) {
+ setCanceled(true);
+ return;
+ }
+
+ display.syncExec(new Runnable() {
+ @Override
+ public void run() {
+ statusLabel.setText(mProgressTitle);
+ }
+ });
+ }
/**
* set working file name to show during installing
*/
@Override
- public void workedFileName() {
+ public void workedSubTitle(String subTitle) {
+ if (subTitle.length() > MAX_LENGTH) {
+ mSubTitle = subTitle.substring(0, MAX_LENGTH - 2);
+ mSubTitle = mSubTitle + STRING_ETC;
+ } else {
+ mSubTitle = subTitle;
+ }
+
if (display == null || display.isDisposed()) {
setCanceled(true);
return;
}
+
display.syncExec(new Runnable() {
@Override
public void run() {
}
});
}
+
+ @Override
+ public void workedProcess(String title) {
+ if (title == null || title.isEmpty()) {
+ return;
+ }
+
+ String processTitle = "Processing : package \"" + title + "\"";
+ workedTitle(processTitle);
+ }
+
+ @Override
+ public void workedDownload(String title) {
+ if (title == null || title.isEmpty()) {
+ return;
+ }
+
+ String processTitle = "Downloading : " + title;
+ workedTitle(processTitle);
+ }
+
+ @Override
+ public void workedChecksum(String title) {
+ if (title == null || title.isEmpty()) {
+ return;
+ }
+
+ String processTitle = "File checking : " + title;
+ workedTitle(processTitle);
+ }
/**
* check validation of download
import org.eclipse.swt.widgets.Text;
import org.tizen.installmanager.core.Config;
import org.tizen.installmanager.core.IMFatalException;
+import org.tizen.installmanager.core.InstallManagerConstants;
import org.tizen.installmanager.lib.IFileSystemInformation;
import org.tizen.installmanager.lib.Log;
import org.tizen.installmanager.lib.Platform;
private static final String RSC_PATH_IMAGE = RESOURCE_PATH + "/install_manager_graphicmotif_002.png";
private static final String STRING_TITLE = "Location";
private static final String STRING_SUBTITLE = "Select the installation location.";
- private static final String WINDOWS_DEFAULT_TARGET_PATH = "C:\\tizen-sdk";
- private static final String WINDOWS_DEFAULT_DATA_PATH = "C:\\tizen-sdk-data";
private Text installDirectoryText;
private Label installDirectoryLabel;
boolean availableInstallPath = false;
boolean availableWorkSpacePath = false;
boolean isWorkSpaceDuplicate = false;
+
+ private enum SDKLABEL {
+ TARGET,
+ DATAPATH
+ }
/**
* @param parent
if (Platform.isLinux() || Platform.isMacOS()) {
installDirectoryText.setText(System.getProperty("user.home") + File.separator + Config.SDK_DIRECTORY);
} else if (Platform.isWindows()) {
- installDirectoryText.setText(WINDOWS_DEFAULT_TARGET_PATH);
+ installDirectoryText.setText(InstallManagerConstants.WINDOWS_DEFAULT_TARGET_PATH);
} else {
throw new IMFatalException(ErrorCode.UNSUPPORTED_PLATFORM);
}
private void setConfigDirectory() {
if (Platform.isLinux() || Platform.isMacOS()) {
sdkWorkSpaceText.setText(Config.getConfigHome());
- } else {
+ } else if (Platform.isWindows()){
if (Config.isNewPackageServer) {
- sdkWorkSpaceText.setText(WINDOWS_DEFAULT_DATA_PATH);
+ sdkWorkSpaceText.setText(InstallManagerConstants.WINDOWS_DEFAULT_DATA_PATH);
} else {
sdkWorkSpaceText.setText(Config.getConfigHome());
}
installDirectoryText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent arg0) {
- if (checkPattern() && checkDuplicatePath(installDirectoryText.getText(), true)) {
+ if (checkPattern(SDKLABEL.TARGET) &&
+ checkDuplicatePath(installDirectoryText.getText(), SDKLABEL.TARGET)) {
availableInstallPath = true;
} else {
availableInstallPath = false;
sdkWorkSpaceText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent arg0) {
- if (checkPattern()) {
+ if (checkPattern(SDKLABEL.DATAPATH)) {
availableWorkSpacePath = true;
} else {
availableWorkSpacePath = false;
}
- if (checkDuplicatePath(sdkWorkSpaceText.getText(), false)) {
+ if (checkDuplicatePath(sdkWorkSpaceText.getText(), SDKLABEL.DATAPATH)) {
isWorkSpaceDuplicate = true;
} else {
isWorkSpaceDuplicate = false;
}
+
+ if (checkDuplicatePath(installDirectoryText.getText(), SDKLABEL.TARGET)) {
+ availableInstallPath = true;
+ } else {
+ availableInstallPath = false;
+ }
InstallManagerWindow.setNextBtnEnabled(availableInstallPath && availableWorkSpacePath);
}
private void setErrLabel() {
installErrLabel = new Label(customComposite, SWT.WRAP);
- installErrLabel.setBounds(20, 170, 400, 50);
+ installErrLabel.setBounds(20, 190, 400, 50);
installErrLabel.setBackground(InstallManagerWindow.getBackgroundColor());
installErrLabel.setForeground(new Color(null, 255, 0, 0));
}
spaceAvailableLabel.setBackground(InstallManagerWindow.getBackgroundColor());
}
- private boolean checkDuplicatePath(String path, boolean isTargetDir) {
- File duplicate = new File(path);
+ private boolean checkDuplicatePath(String path, SDKLABEL sdkLabel) {
+ File installedPackageListFile = new File(
+ PathUtil.get(path, InstallManagerConstants.SDK_INSTALLED_PACKAGE_LIST_PATH));
- if (isTargetDir) {
- if (duplicate.exists()) {
- installErrLabel.setText("Input path is used already. you must input another path.");
+ if (sdkLabel == SDKLABEL.TARGET) {
+ if (installedPackageListFile.exists()) {
+ installErrLabel.setText("The input SDK install path is used already. you must input another path.");
return false;
} else {
- installErrLabel.setText("");
return true;
}
- } else {
- if (duplicate.exists()) {
+ } else if (sdkLabel == SDKLABEL.DATAPATH) {
+ if (installedPackageListFile.exists()) {
return false;
} else {
return true;
}
+ } else {
+ Log.err("Unknown label in set install path page.");
+ return false;
}
}
- private boolean checkPattern() {
+ private boolean checkPattern(SDKLABEL sdkLabel) {
+ String text = "";
+ if (sdkLabel == SDKLABEL.TARGET) {
+ text = installDirectoryText.getText();
+ } else if (sdkLabel == SDKLABEL.DATAPATH) {
+ text = sdkWorkSpaceText.getText();
+ } else {
+ Log.err("Unknown label in set install path page.");
+ return false;
+ }
+
try {
if (Platform.isUbuntu() || Platform.isMacOS()) {
- if (!sdkWorkSpaceText.getText().matches("[^= ]+")) {
+ if (!text.matches("[^= ]+")) {
installErrLabel.setText("Value cannot contain the '=' character or spaces.");
return false;
} else {
- if (!sdkWorkSpaceText.getText().startsWith(System.getProperty("user.home"))) {
- installErrLabel.setText("Set the installation path to the home directory.");
+ if (!text.startsWith(System.getProperty("user.home"))) {
+ installErrLabel.setText("Set the input path to the home directory.");
return false;
}
}
} else if (Platform.isWindows()) {
- if (!sdkWorkSpaceText.getText().matches("[^`~!@#$%^&*=? ]+")) {
+ if (!text.matches("[^`~!@#$%^&*=? ]+")) {
installErrLabel.setText("Value cannot contain special characters or spaces.");
return false;
}
return true;
}
- private boolean checkAvailablePath() {
+ private boolean checkAvailablePath(SDKLABEL sdkLabel) {
if (installDirectoryText.getText().equals("")) {
installErrLabel.setText("Set the installation path.");
spaceAvailableLabel.setText("Space available : ");
return false;
}
+ String text = "";
+ if (sdkLabel == SDKLABEL.TARGET) {
+ text = installDirectoryText.getText();
+ } else if (sdkLabel == SDKLABEL.DATAPATH) {
+ text = sdkWorkSpaceText.getText();
+ } else {
+ Log.err("Unknown label in set install path page.");
+ return false;
+ }
+
try {
if (Platform.isUbuntu() || Platform.isMacOS()) {
- if (!installDirectoryText.getText().matches("[^= ]+")) {
+ if (!text.matches("[^= ]+")) {
installErrLabel.setText("Value cannot contain the '=' character or spaces.");
return false;
} else {
- if (!installDirectoryText.getText().startsWith(System.getProperty("user.home"))) {
+ if (!text.startsWith(System.getProperty("user.home"))) {
installErrLabel.setText("Set the installation path to the home directory.");
return false;
}
}
} else if (Platform.isWindows()) {
- if (!installDirectoryText.getText().matches("[^`~!@#$%^&*=? ]+")) {
+ if (!text.matches("[^`~!@#$%^&*=? ]+")) {
installErrLabel.setText("Value cannot contain special characters or spaces.");
return false;
}
sdkWorkSpaceText.setEnabled(Config.isNewPackageServer);
selectDataPathBtn.setEnabled(Config.isNewPackageServer);
- InstallManagerWindow.setNextBtnEnabled(checkAvailablePath() && checkDuplicatePath(installDirectoryText.getText(), true));
+ InstallManagerWindow.setNextBtnEnabled(checkAvailablePath(SDKLABEL.TARGET) &&
+ checkDuplicatePath(installDirectoryText.getText(), SDKLABEL.TARGET));
setAvailableSpace(installDirectoryText.getText());
spaceRequiredLabel.setText("Download size : " + convertToVolumeSize(requiredSize));
// Do nothing.
}
- @Override
- public void setProgressTitle(String name) {
- mProgressTitle = name;
- }
-
- @Override
- public void setFileName(String name) {
- if (name.length() > MAX_LENGTH) {
- mSubTitle = name.substring(0, MAX_LENGTH - 2);
- mSubTitle = mSubTitle + STRING_ETC;
- } else {
- mSubTitle = name;
- }
- }
-
/**
* set working package name to show during uninstalling
*/
}
});
}
+
+ /**
+ * set working file name to show during installing
+ */
+ @Override
+ public void workedTitle(String title) {
+ mProgressTitle = title;
+
+ if (display == null || display.isDisposed()) {
+ setCanceled(true);
+ return;
+ }
+
+ display.syncExec(new Runnable() {
+ @Override
+ public void run() {
+ statusLabel.setText(mProgressTitle);
+ }
+ });
+ }
/**
* set working file name to show during uninstalling
*/
@Override
- public void workedFileName() {
+ public void workedSubTitle(String subTitle) {
+ if (subTitle.length() > MAX_LENGTH) {
+ mSubTitle = subTitle.substring(0, MAX_LENGTH - 2);
+ mSubTitle = mSubTitle + STRING_ETC;
+ } else {
+ mSubTitle = subTitle;
+ }
+
+ if (display == null || display.isDisposed()) {
+ setCanceled(true);
+ return;
+ }
+
display.asyncExec(new Runnable() {
@Override
public void run() {
}
});
}
+
+ @Override
+ public void workedProcess(String title) {
+ if (title == null || title.isEmpty()) {
+ return;
+ }
+
+ String processTitle = "Processing : package \"" + mProgressTitle + "\"";
+ workedTitle(processTitle);
+ }
@Override
public void workedDownload(long size) {
- // TODO Auto-generated method stub
-
+ //Do nothing
}
@Override
public void setDownloadStartTime(long startTime) {
- // TODO Auto-generated method stub
-
+ //Do nothing
}
@Override
public void workedChecksum(long size) {
- // TODO Auto-generated method stub
-
+ //Do nothing
}
@Override
@Override
public void setError(int errorCode) {
- // TODO Auto-generated method stub
+ //Do nothing
+
+ }
+
+ @Override
+ public void workedDownload(String title) {
+ //Do nothing
+ }
+
+ @Override
+ public void workedChecksum(String title) {
+ //Do nothing
}
}
package org.tizen.installmanager.ui.page;
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileLock;
+import java.nio.channels.OverlappingFileLockException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.tizen.installmanager.core.Options;
import org.tizen.installmanager.core.SDKExtensionInfo;
import org.tizen.installmanager.core.Config.ServerType;
+import org.tizen.installmanager.lib.Documents;
import org.tizen.installmanager.lib.Downloader;
import org.tizen.installmanager.lib.ErrorController;
import org.tizen.installmanager.lib.IIMProgressMonitor;
private InstallManager installManager;
private PackageManager packageManager;
private SDKExtensionInfo sdkExtensionInfo;
+
+ private FileLock lock = null;
+ private FileChannel channel = null;
/**
* Initialize objects which need to install.
installablePackages = getInstallablePackages(installList);
}
+ Registry.setSDKinfoBySDKPath(targetPath);
+ Registry.saveSDKInfo(targetPath);
+
boolean bResult = false;
while(true) {
try {
break;
} catch (IMNetworkException e) {
Log.ExceptionLog(e);
+ showRetryDialog(e.getMessage());
- //retry dialog.
- String errorMsg = e.getMessage() + "\nWould you like to retry?";
- int ret = MessageBoxDlg.showDlg(
- InstallManagerWindow.getInstallManagerWindow().getShell(),
- "Warning",
- errorMsg,
- DialogType.WARNING, false);
-
- if (ret == SWT.NO) {//cancel
- throw new IMFatalException(e.getMessage());
- } else {//retry
- continue;
- }
+ continue;
+ } catch (Exception e) {
+ Log.ExceptionLog(e);
+ throw new IMFatalException(e.getMessage());
}
}
+ if (bResult) {
+ PathUtil.remove(Config.getInstance().getDownloadDirPath());
+ }
+
return bResult;
}
+ public void showRetryDialog(String msg) {
+ //retry dialog.
+ String errorMsg = msg + "\nWould you like to retry?";
+ int ret = MessageBoxDlg.showDlg(
+ InstallManagerWindow.getInstallManagerWindow().getShell(),
+ "Warning",
+ errorMsg,
+ DialogType.WARNING, false);
+
+ if (ret == SWT.NO) { //cancel
+ throw new IMFatalException(msg);
+ }
+ }
+
/**
* Get installable packages.
* @param installList package name list from UI.
return causePackages;
}
+ public void showChangeLog() {
+ if (Documents.isChecked()) {
+ Documents.showChangeLog(); // show the change log(history)
+ }
+ }
+
+ public void cleanUpTargetDirectory() {
+ Log.log("Clean up the target directory => " + Registry.getInstalledPath());
+ if (packageManager == null || packageManager.getInstalledPackages().isEmpty()) {
+ String targetPath = Config.getInstance().getTargetDir();
+
+ if (targetPath.isEmpty()) {
+ return;
+ } else {
+ removeTargetPath(targetPath);
+ }
+ }
+ }
+
public boolean canInstallManagerUpdate() {
Package pkg = packageManager.getPackageByName(InstallManagerConstants.INSTALLMANAGER_PACKAGE_NAME);
public static File makeNewFile(String filePath) throws IOException{
File file = new File(filePath);
-// if (Config.getInstance().isSupportMultiSDK()) {
-// return file;
-// } else {
- if (file.exists()) {
- if (!file.delete()) {
- return null;
- }
- }
-// }
+ if (file.exists()) {
+ Log.log("<" + file + "> exists already. it will be removed.");
+ if (!file.delete()) {
+ Log.err("Fail to delete file. => " + file);
+ return null;
+ } else {
+ Log.log("Success to delete file. => " + file);
+ }
+ }
File parentDir = file.getParentFile();
if (!parentDir.exists()) {
}
if (!file.createNewFile()) {
+ Log.err("Fail to create file. => " + file);
return null;
+ } else {
+ Log.log("Success to create file. => " + file);
}
return file;
-#!/bin/bash
+#!/bin/bash -x
while getopts "m:h" opt ; do
case $opt in
m)
- message="-m \"$OPTARG\""
+ message="$OPTARG"
;;
h)
echo "SUDO Wrapper"
case $INSTALLMANAGER_UI in
"GUI")
if [ "`which gksudo`" ] ; then
- gksudo "$message" $cmd
+ if [ "$message" ] ; then
+ gksudo -m "$message" -- $cmd
+ else
+ gksudo -- $cmd
+ fi
elif [ "`which beesu`" ] ; then
beesu $cmd
elif [ "`which pkexec`" ] ; then
if [ "$INTERACTIVE" = "true" ] ; then
sudo $cmd
else
- expect -c "spawn sudo ls" \
- -c "expect -re \"assword\"" \
- -c "send \"$SUPASS\n\"" \
- -c "interact"
+
+ cat > tsudo_cmd << EOF
+#!/usr/bin/expect --
+set timeout 10
+spawn sh -c "sudo -S ${cmd};echo \$? > exit_status"
+expect {
+ "password for" {
+ send "${SUPASS}\r"
+ exp_continue
+ } eof {
+ return
+ }
+}
+interact
+EOF
+ chmod +x ./tsudo_cmd
+ ./tsudo_cmd
+ EXIT_CODE=`cat exit_status`
+ if [ "x${EXIT_CODE}" != "x0" ]; then
+ rm exit_status
+ exit 1;
+ else
+ rm exit_status
+ exit 0;
+ fi
fi
;;
*)
echo "fail: $INSTALLMANAGER_UI $INTERACTIVE"
+ exit 1;
;;
esac
-
+++ /dev/null
-#/bin/bash
-current_path=`pwd`
-InstallManager_path="$current_path/InstallManager.app/Contents/Resources/Java/"
-
-echo ${InstallManager_path}
-cd ${InstallManager_path}
-
-if [ -e ${InstallManager_path}/InstallManager.jar ]
-then
- java -jar -XstartOnFirstThread ${InstallManager_path}/InstallManager.jar $@
-elif [ -e $HOME/tizen-sdk-data/tizensdkpath ]
-then
- tizenpath=`grep TIZEN_SDK_INSTALLED_PATH $HOME/tizen-sdk-data/tizensdkpath`
- SDK_PATH=`echo $tizenpath | cut -f2 -d"="`
- if [ "x$SDK_PATH" != "x" ]
- then
- cd $SDK_PATH/install-manager
- if [ -e ${InstallManager_path}/InstallManager.jar ]
- then
- java -jar -XstartOnFirstThread ${InstallManager_path}/InstallManager.jar $@
- fi
- fi
-fi
-
-exit 0
-
+++ /dev/null
-#/bin/bash
-current_path=`pwd`
-InstallManager_path="$current_path/Tizen_SDK_Install.app/Contents/Resources/Java/"
-
-echo ${InstallManager_path}
-cd ${InstallManager_path}
-
-if [ -e ${InstallManager_path}/InstallManager.jar ]
-then
- java -jar -XstartOnFirstThread ${InstallManager_path}/InstallManager.jar $@
-elif [ -e $HOME/tizen-sdk-data/tizensdkpath ]
-then
- tizenpath=`grep TIZEN_SDK_INSTALLED_PATH $HOME/tizen-sdk-data/tizensdkpath`
- SDK_PATH=`echo $tizenpath | cut -f2 -d"="`
- if [ "x$SDK_PATH" != "x" ]
- then
- cd $SDK_PATH/install-manager
- if [ -e ${InstallManager_path}/InstallManager.jar ]
- then
- java -jar -XstartOnFirstThread ${InstallManager_path}/InstallManager.jar $@
- fi
- fi
-fi
-
-exit 0
-
+++ /dev/null
-<project name="InstallManager" default="make_installmanager" basedir=".">\r
- <description> \r
- Install Manager for MacOS\r
- </description>\r
-\r
- <!--\r
- set taskdef for jarbundler \r
- You must :\r
- - get this library at sourceforge.net/projects/jarbundler\r
- - copy jarbundler-2.2.0.jar to /usr/share/ant/lib of your Mac\r
- -->\r
- <taskdef name="jarbundler" classname="net.sourceforge.jarbundler.JarBundler" />\r
- \r
- <!--<property name="INSTALL_NAME" value="tizen-sdk-installer-v2.0"/>-->\r
- <property name="IM_NAME" value="Tizen_SDK_Install"/>\r
- <property name="MAC_ICON" value="mac_installer_icon.icns"/>\r
- <property name="MAC_BACKGROUND" value="dmg_background_01.png"/>\r
- <property name="IMAGE_PATH" value="../../InstallManager_java/src/res/icons"/>\r
- <condition property="ISFILE">\r
- <and>\r
- <available file="java/installmanager.conf"/>\r
- <available file="java/InstallManager"/>\r
- </and>\r
- </condition>\r
-\r
- <target name="clean">\r
- <delete dir="${APP_NAME}.app"/>\r
- <delete file="${INSTALL_NAME}.dmg"/>\r
- </target>\r
-\r
- <target name="make_bundle">\r
- <!--\r
- Important option\r
- - startOnMainThread must be 'true'\r
- - workingdirectory must be set. Default must be '$APP_PACKAGE/Contents/Resources/Java' for installmanager.conf\r
- - installmanager.conf must be located at workingdirectory. \r
- -->\r
- <!-- to do later\r
- Add dmg ICON\r
- <copy file="${IMAGE_PATH}/${MAC_BACKGROUND}" todir="${basedir}" />\r
- -->\r
- <copy file="${IMAGE_PATH}/${MAC_ICON}" todir="${basedir}" />\r
- <jarbundler dir="." name="${APP_NAME}" mainclass="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader" jar="InstallManager.jar"\r
- verbose="true" startOnMainThread="true"\r
- workingdirectory="$APP_PACKAGE/Contents/Resources/Java" icon ="${MAC_ICON}"\r
- arguments="${ARGUMENT}"\r
- >\r
- <resourcefileset dir="." includes="java/*.conf"/>\r
- <resourcefileset dir="." includes="java/InstallManager"/>\r
- </jarbundler>\r
- </target>\r
-\r
- <target name="make_dmg">\r
- <exec executable="hdiutil">\r
- <arg line="create ./${DMG_NAME}.dmg -srcfolder ./"${APP_NAME}.app" -ov"/>\r
- </exec>\r
- </target>\r
-\r
- <target name="make_public">\r
- <property name="ARGUMENT" value=""/>\r
- <property name="APP_NAME" value="${IM_NAME}"/>\r
- <property name="DMG_NAME" value="${INSTALL_NAME}"/>\r
- <antcall target="clean"/>\r
- <antcall target="make_bundle"/>\r
- <antcall target="make_dmg"/>\r
- </target>\r
-\r
- <target name="make_partner">\r
- <property name="ARGUMENT" value="-partner"/>\r
- <property name="APP_NAME" value="${IM_NAME} for Partner"/>\r
- <property name="DMG_NAME" value="${INSTALL_NAME}_partner"/>\r
- <antcall target="clean"/>\r
- <antcall target="make_bundle"/>\r
- <antcall target="make_dmg"/>\r
- </target>\r
-\r
- <target name="make_installmanager">\r
- <antcall target="make_partner"/>\r
- <antcall target="make_public"/>\r
- </target>\r
-\r
-</project>\r
-\r
+++ /dev/null
-#!/bin/bash
-
-ORI_FILE_sum=$$$$__CHKSUM_REPLACE__$$$$
-ORI_FILE_LEN=$$$$__FILE_LENGTH_REPLACE__$$$$
-
-TPUT="`which tput`"
-if test -t 0 -a -t 1 -a -n "$TPUT"; then
- CI="`$TPUT setf 6 || true`"; CE="`$TPUT setf 4 || true`"
- CX="`$TPUT setf 2 || true`"; CN="`$TPUT sgr0 || true`"
-else CI=''; CE=''; CX=''; CN=''
-fi
-
-#### Init Environment Variables ####
-CUR_DIR=`pwd`
-OUT_PATH="${HOME}/tizen-sdk-data/install-manager"
-
-mkdir -p ${OUT_PATH}
-cd ${CUR_DIR}
-tail -n +"${ORI_FILE_LEN}" "$0" | tee >(md5>${OUT_PATH}/checksum) | tar xmz -C ${OUT_PATH}/
-
-OUT_FILE_sum=`cat "$OUT_PATH/checksum" | awk '{ print $1 }'`
-if [ "${OUT_FILE_sum}" != "${ORI_FILE_sum}" ]; then
- echo "$CE The download file appears to be corrupted. "
- echo " Please do not attempt to install this archive file. $CN"
- #rm -rf ${OUT_PATH}
- exit 1
-fi
-
-##Excute InstallManager
-cd $OUT_PATH
-./InstallManager $*
-
-##source bashrc
-source ${HOME}/.bashrc
-
-exit 0
+++ /dev/null
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+++ /dev/null
-<project name="jarbundler" default="jar" basedir=".">
-
- <property name="version" value="2.2.0"/>
- <property name="description" value="ANT task for creating Mac OS X application bundles"/>
-
-
- <!-- File names -->
- <property name="jarbundler.jar" value="${ant.project.name}-${version}.jar" />
- <property name="release.zip" value="${ant.project.name}.zip" />
- <property name="release.tar" value="${ant.project.name}.tar" />
-
-
- <!-- Needs to reference this in order to compile -->
- <!-- This path works only for OS X, Windows, and Linux must redefine -->
- <property name="ant.jar" value="/Developer/Java/Ant/lib/ant.jar" />
-
-
- <target name="compile" description="Compile the classes">
-
- <mkdir dir="classes"/>
-
- <javac srcdir="src" destdir="classes" source="1.4" classpath="${ant.jar}"/>
- </target>
-
-
- <target name="jar" depends="compile" description="Create JAR file">
-
- <mkdir dir="build"/>
-
- <tstamp/>
-
- <jar jarfile="build/${jarbundler.jar}" basedir="classes">
- <manifest>
- <attribute name="Version" value="${version}"/>
- <attribute name="Description" value="${description}"/>
- <attribute name="Build-Date" value="${TODAY}"/>
- <attribute name="Built-By" value="${user.name}"/>
- </manifest>
- </jar>
- </target>
-
-
-
- <target name="javadocs" depends="compile" description="Create JarBundler API">
-
- <mkdir dir="javadoc"/>
-
- <javadoc destdir="javadoc" classpath="${ant.jar}">
- <package name="net.sourceforge.jarbundler.*"/>
- <sourcepath location="src"/>
- </javadoc>
- </target>
-
-
-
- <target name="release" depends="jar" description="Create zip and tar.gz files">
-
- <ant dir="./example" target="clean" inheritAll="false"/>
-
- <mkdir dir="release"/>
- <mkdir dir="release/dist"/>
-
- <copy todir="release">
- <fileset dir="dox"/>
- </copy>
-
-
- <!-- Make this file easy to find in the distribution -->
- <move file="build/${jarbundler.jar}" tofile="${jarbundler.jar}"/>
-
- <zip destfile="release/dist/${release.zip}">
- <zipfileset prefix="${ant.project.name}-${version}/" dir="${basedir}" excludes="CVS">
- <include name="LICENSE.TXT"/>
- <include name="dox/**"/>
- <include name="build.xml"/>
- <include name="src/**"/>
- <include name="example/**"/>
- <include name="${jarbundler.jar}"/>
- </zipfileset>
- </zip>
-
- <tar destfile="release/dist/${release.tar}">
- <tarfileset prefix="${ant.project.name}-${version}/" dir="${basedir}" excludes="CVS">
- <include name="LICENSE.TXT"/>
- <include name="dox/**"/>
- <include name="build.xml"/>
- <include name="src/**"/>
- <include name="example/**"/>
- <include name="${jarbundler.jar}"/>
- </tarfileset>
- </tar>
-
- <!-- Compress the tar -->
- <gzip src="release/dist/${release.tar}" zipfile="release/dist/${release.tar}.gz"/>
-
- <!-- Remove the intermediate tar -->
- <delete quiet="true" file="release/dist/${release.tar}" />
-
- <!-- Move the product back -->
- <move file="${jarbundler.jar}" tofile="build/${jarbundler.jar}"/>
-
-
- </target>
-
-
- <target name="simple" depends="jar" description="Build an example application">
- <ant dir="./example" target="simple" inheritAll="false">
- <property name="jarbundler.jar" value="${basedir}/build/${jarbundler.jar}" />
- </ant>
- </target>
-
-
- <target name="complex" depends="jar" description="Build an example application">
- <ant dir="./example" target="complex" inheritAll="false">
- <property name="jarbundler.jar" value="${basedir}/build/${jarbundler.jar}" />
- </ant>
- </target>
-
-
- <target name="clean" description="Clean up">
- <delete dir="classes"/>
- <delete dir="build"/>
- <delete dir="javadoc"/>
- <delete dir="release"/>
- <ant dir="example" target="clean" inheritAll="false"/>
- </target>
-
-</project>
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
- <title>Creating a Disk Image</title>
- <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
- <meta http-equiv="Content-Language" content="en-us" />
- <meta name="ROBOTS" content="ALL" />
- <link href="styles.css" rel="stylesheet" media="all" type="text/css" />
-</head>
-
-<body>
-
-
-<h2>JarBundler - Creating a Disk Image</h2>
-
-
-<p>I'm writing to
-contribute a shell script which creates a disk image via terminal commands.
-I wrote it a few years ago so I can't quite explain how it works and likely
-needs some cleanup - but it basically does the job. It doesn't support a
-background image yet nor icon positioning.</p>
-
-<p>Thanks,<br>
-Philip Weaver
-</p>
-
-<pre>
-
-<exec dir="." os="Mac OS X" executable="/bin/sh">
- <arg value="-c"/>
- <arg value="./scripts/mkdmg.sh /Users/Me/Development/ ./mac/ ./mac-image/ Project"/>
-</exec>
-<gzip zipfile="${dist}/mac-image/MyTool .dmg.gz" src="${dist}/mac-image/MyTool.dmg"/>
-
-</pre>
-
-<h3>mkdmg.sh</h3>
-<pre>
-#!/bin/sh
-
-BASE="$1"
-SRC="$2"
-DEST="$3"
-VOLUME="$4"
-
-echo Base Directory $1
-echo Source $2
-echo Destination $3
-echo Volume $4
-
-TEMP="TEMPORARY"
-
-cd BASE
-
-hdiutil create -megabytes 5 $DEST$TEMP.dmg -layout NONE
-MY_DISK=`hdid -nomount $DEST$TEMP.dmg`
-newfs_hfs -v $VOLUME $MY_DISK
-hdiutil eject $MY_DISK
-hdid $DEST$TEMP.dmg
-chflags -R nouchg,noschg "$SRC"
-ditto -rsrcFork -v "$SRC" "/Volumes/$VOLUME"
-#ditto -rsrcFork -v "./background/" "/Volumes/$VOLUME"
-hdiutil eject $MY_DISK
-hdiutil convert -format UDCO $DEST$TEMP.dmg -o $DEST$VOLUME.dmg
-hdiutil internet-enable -yes $DEST$VOLUME.dmg
-</pre>
-
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
- <title>Mac OS X JarBundler ANT Task - DocumentType Nested Task</title>
- <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
- <meta http-equiv="Content-Language" content="en-us" />
- <meta name="ROBOTS" content="ALL" />
- <link href="styles.css" rel="stylesheet" media="all" type="text/css" />
-</head>
-
-<body>
-
-<h2>JarBundler - Associating Files with your Application</h2>
-
-
-<p>The nested <tt><documenttype></tt> task adds the appropriate elements to the <tt>Info.plist</tt>
-file to associate a set of document file types with the application. This association means
-that this application:
-
-<ul>
- <li>will be included in the documents control-click "Open with.." list
- <li>will be selected if this document is dragged over it
- <li>can be selected as the default application for opening this document type
-</ul>
-
-<p>It is important to note that these association are done by the operation system, your
-application must supply to proper code to handle the open document requires.
-
-<p> Also see Apple Developer Documentation on the
-<a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html#//apple_ref/doc/uid/20001431-101685">CFBundleDocumentTypes</a>
-key.
-
-<p><strong>NB: </strong> You must use at least one of the attributes "<tt>extensions</tt>",
-<tt>mimetypes</tt> or "<tt>ostypes</tt>". Any combination of these three may, of course, be used.
-
-
-<h3><tt>DocumentType</tt> Task Attributes</h3>
-<div align="center">
-<table border="1" cellpadding="4" cellspacing="0" width="90%" style="font-size: 10pt;">
-
- <tr>
- <th>Attribute</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td class="attribute">name</td>
- <td class="description">
- An application's unique name for this document type. For example, "<tt>Text Document</tt>" or
- "<tt>Raw Data Document</tt>"
-
- <div><strong>NB: </strong>Required attribute</div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">extensions</td>
- <td class="description">
- A comma or space delimited string of filename extensions.
- Do not specify the leading period. To open documents with
- any extension, specify an extension with a single asterisk "<tt>*</tt>". </td>
- </tr>
-
- <tr>
- <td class="attribute">ostypes</td>
- <td class="description">
- A comma or space delimited string of Mac OS types. Each value contains a four-letter type.
- To open documents of any type,
- include four asterisk characters "<tt>****</tt>" as the type code. These codes are equivalent
- to the legacy type codes used by Mac OS 9. Currently, OS Types with leading or trailing
- spaces or commas cannot be processed.
- </td>
- </tr>
-
- <tr>
- <td class="attribute">mimetypes</td>
- <td class="description">
- A comma or space delimited string of mime-types.
- </td>
- </tr>
-
- <tr>
- <td class="attribute">UTI</td>
- <td class="description">
- A comma or space delimited string of Uniform Type Identifier (UTI) strings for the document.
- UTIs are strings that uniquely identify abstract types. They can be used to
- describe a file format or data type but can also be used to describe type
- information for other sorts of entities, such as directories, volumes, or
- packages. For more information on UTIs, see the header file UTType.h,
- available as part of LaunchServices.framework in Mac OS X v10.3 and later.
-Also see the Apple Developer Connection document
- <a href="http://developer.apple.com/macosx/uniformtypeidentifiers.html">
- "Simplifying Data Handling with Uniform type Identifiers"</a>.
-
- </td>
- </tr>
-
-
-
-
-
- <tr>
- <td class="attribute">iconfile</td>
- <td class="description">
- Specifies the name of an icon file used to associate with this document type. This icon
- file is copied into the application bundle. These icons will be used for the document
- look if this application is associated as the default application for this document type
- use the Finder "Get info" command with the document.
- </td>
- </tr>
-
- <tr>
- <td class="attribute">role</td>
- <td class="description">
- This key specifies the application's role with respect to the type. The value can be
- <tt>Editor</tt>, <tt>Viewer</tt>, <tt>Shell</tt>, or <tt>None</tt>. See
- <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html#//apple_ref/doc/uid/20002094-98566">
- "Document Configuration"</a>
- for descriptions of these values.
-
- <div><strong>NB: </strong>Required attribute</div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">bundle</td>
- <td class="description">
- Used with extention and iconfile attributes to specify to Finder that a directory tree be
- treated and displayed as a single document. See
- <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html">
- "Property List Key Reference"</a>,
- look for the document type key <tt>LSTypeIsPackage</tt>.
-
- <div><strong>NB: </strong>Boolean attribute, takes "true" or "false", default is "false"</div>
- </td>
- </tr>
-
-
-
-
-
-</table>
-</div>
-
-
-
-
-<!--Example ================================================================================-->
-
-<h3>Example</h3>
-
-
-
-<p>The following example shows four document types being associated with a JarBundler built
-Mac OS X application. The first document type associates HTML files using the file extensions
-<tt>html</tt> and <tt>htm</tt>. The application also provides a custom icon file which can be
-used by Finder to render files with these two extensions, if this application is chosen as the
-default application.
-
-<p>The second document type creates an association with files with the extension
-<tt>rtf</tt>. In this case these files will be rendered by the Finder using a system default
-icon or an icon set from another application. The application is also telling the Finder that
-<tt>rtf</tt> files can be viewed but not edited.
-
-<p>The third document type associates a <tt>mime-type</tt> for JPEG and PNG images. Again, the
-application is declaring that it can only view files of this <tt>mime-type</tt>.
-
-<p>The last document type is a bit interesting using the <tt>bundle</tt> attribute to
-designate a directory, which has an extension, as a document. The application has an
-icon set which will be used by the Finder to render this directory. The directory will
-not be seen from the Finder as a folder and can be copied and renamed as a single unit. This
-structure can be very useful or creating complex associations of files which should be treated
-as a unit. The content of the document bundle can be viewed using a control-click and
-choosing "Show Package Contents...".
-
-<p>A document bundle has proven very useful in my own development work bring UNIX applications
-onto to Mac OS X platform where the application would require several input file and create a
-myriad of small output files.
-
-
-<pre style="padding-left:2em; margin-bottom:0em;">
-
-
- <jarbundler dir="release"...>
-
- <documenttype name="Hello World HTML document"
- extensions="html htm"
- iconFile="icons/html.icns"
- role="Editor"/>
-
- <documenttype name="Hello World RTF document"
- extensions="rtf"
- role="Viewer"/>
-
- <documenttype name="Hello World images"
- mimetypes="image/jpeg image/png"
- role="Viewer"/>
-
- <documenttype name="Hello Project document"
- extensions="hello"
- iconFile="icons/Hello Document.icns"
- bundle="true"
- role="Editor"/>
-
- </jarbundler>
-
-</pre>
-
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<title>Mac OS X JarBundler - Advanced Examples</title>
-<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
-<meta http-equiv="Content-Language" content="en-us" />
-<meta name="ROBOTS" content="ALL" />
-<link href="styles.css" rel="stylesheet" media="all" type="text/css" />
-</head>
-<body>
-
-
-<h2>JarBundler - Advanced Example</h2>
-
-
-<!--Examples ================================================================================-->
-
-
-<ul>
-<li>Native Mac OS X look and feel
-<li>Custom application icon file
-<li>Long application name, short name used in the menu
-<li>Requires minimum JVM of 1.4
-<li>Three strings to specify Finder version, Get Info copyright, and build number
-<li>Default Help Book folder and Help Book name
-<li>Five different document types
-<li>Bundle license agreement
-<li>Help Book JNI library
-<li>Two language Help Book support
-</ul>
-
-<pre style="padding-left:2em; margin-bottom:0em;">
-
-<target name="complex" depends="jar, jni" description="Build an example application">
-
- <taskdef name="release/jarbundler"
- classname="net.sourceforge.jarbundler.JarBundler"/>
-
- <jarbundler dir="release"
- name="Hello World"
- shortname="Hello"
- signature="Helo"
- mainclass="net.sourceforge.jarbundler.example.HelloWorld"
- jar="build/Hello World.jar"
- icon="icons/Hello World.icns"
- jvmversion="1.4+"
- version="1.2"
- infostring="Hello World, copyright 2006"
- build="213"
- bundleid="net.sourceforge.jarbundler.example.HelloWorld"
- helpbookfolder="HelpBook"
- helpbookname="Hello World Help" >
-
- <!-- Adjust the look, feel and behavior -->
-
- <javaproperty name="apple.laf.useScreenMenuBar" value="true"/>
- <javaproperty name="apple.awt.brushMetal" value="true"/>
- <javaproperty name="apple.awt.showGrowBox" value="false"/>
-
- <!-- Associate document types with this application -->
-
- <documenttype name="Hello World text document"
- extensions="txt text"
- ostypes="TEXT sEXT ttro"
- iconFile="icons/txt.icns"
- role="Editor"/>
-
- <documenttype name="Hello World HTML document"
- extensions="html htm"
- iconFile="icons/html.icns"
- role="Editor"/>
-
- <documenttype name="Hello World RTF document"
- extensions="rtf"
- role="Viewer"/>
-
- <documenttype name="Hello World images"
- mimetypes="image/jpeg image/png"
- role="Viewer"/>
-
- <documenttype name="Hello World Document"
- extensions="hello"
- iconFile="icons/Hello Document.icns"
- bundle="true"
- role="Editor"/>
-
- <!-- Just proving we can include a file. Might use it in the About box -->
-
- <resourcefilelist dir=".." files="LICENSE.TXT"/>
-
- <!-- Copy the HelpBook JNI library into the Java directory -->
-
- <javafilelist dir="./build" files="libHelpBookJNI.jnilib"/>
-
- <!-- Copy the HelpBooks to the language specific folders -->
- <!-- English will use the foldername and book name from the Bundle -->
- <!-- German or 'de' will use the custom folder name and book name -->
-
- <helpbook locale="English">
- <fileset dir="HelpBook/English" />
- <fileset dir="HelpBook/common" />
- </helpbook>
-
- <helpbook foldername="Hilfebuch" name="Hallo Welt Hilfe" locale="German">
- <fileset dir="HelpBook/German" />
- <fileset dir="HelpBook/common" />
- </helpbook>
-
-
- </jarbundler>
-
-</target>
-
-</pre>
-
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<title>Mac OS X JarBundler ANT Task - HelpBook Nested Task</title>
-<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
-<meta http-equiv="Content-Language" content="en-us" />
-<link href="styles.css" rel="stylesheet" media="all" type="text/css" />
-<meta name="ROBOTS" content="ALL" />
-</head>
-
-<body>
-
-
-<h2>JarBundler - Including an Apple Help Book</h2>
-
-<p>Documentation for creating Apple Help Book support can be found <a
-href="http://developer.apple.com/qa/qa2001/qa1022.html">here</a>. Basically, one needs to
-specify both the Help Book directory (folder) name and the Help Book name (AppleTitle meta
-tag). The application <strong>must</strong> also have a unique Bundle ID so that the Help
-Viewer can reference the application.
-
-The Help Book consists of pure HTML files, images, and optional CSS styling. It is easy to
-create and develop a Help Book outside of the application. The "Hello, World" Help Book HTML
-can be used as a starter or checkout any application's exiting Help Book folder now that you
-know where to find it.
-
-<p>The Help Book viewer does <strong>not</strong> automatcially open the file named
-<tt>index.html</tt> as does a web server. The root file <strong>must</strong> contain a META
-tag specifing the name <tt>AppleTitle</tt>. The content of this tag must match the value
-specified in the <tt>helpbookname</tt> attributer of the <tt>jarbundler</tt> task. This META
-tag is used to both designate the root HTML file and its content is used by the Help Viewer in
-its "Library" listing.</p>
-
-<pre>
-<html>
- <head>
- .
- .
- <meta name="AppleTitle" content="Hello World Help"/>
- .
- .
- </head>
-
-</pre>
-
-<p>Finally, the developer needs to create a JNI library in order to communicate between the
-"Help" menu item and the "Help Book Viewer" or whichever application is being used to render
-Help Book help. This is a very simple file and usage is demonstrated in the "Hello, World"
-example. Windows and Linux users will not be able to generate the JNI library on their
-platforms. In order to generate a univeral binary JNI you can use Xcode and the tutorial found
-<a href="http://developer.apple.com/java/jniuniversal.html">here</a>. This process can only
-be done under Mac OS X with the "Apple Developer Tools" installed. Windows and Linux
-developer will have to obtain the JNI library from a Mac OS X system.
-
-<p>The <tt>example/build.xml</tt> file shows how to create a JNI library from source with
-ANT using command lines.
-
-
-<h3>Help Book Example</h3>
-
-<p>The application created in this example will have a single Help Book located at
-<tt>Contents/Resources/HelpBook</tt>. The next example shows how to support multiple Help Books
-for different languages.
-
-<pre style="padding-left:3em; margin-bottom:0em;">
-<jarbundler dir="${basedir}"
- .
- .
- .
- helpbookfolder="HelpBook"
- helpbookname="Hello World Help" >
-
- <!-- Copy the HelpBook JNI library -->
- <javafilelist dir="${basedir}/build" files="libHelpBookJNI.jnilib"/>
-
- <!-- Specify the HelpBook contents -->
- <helpbook>
- <fileset dir="${basedir}/HelpBook"/>
- <helpbook/>
-
-</jarbundler>
-
-</pre>
-
-
-<h3>Internationalized Help Book Example</h3>
-<p>The following example shows the use of Help Books to support English, German and Swedish.
-The default Help Book folder name and Help Book name are set in the JarBundler tag. The
-English Help Book uses these defaults.
-
-<p>The German Help Book specifes both the Help Book folder name and Help Book name, effectivly
-overriding the JarBundler defaults.
-
-<p>The Swedish Help Book uses the default Help Book foldername but specifies it's own Help
-Book name. The Swedish locale is specfied using it's ISO country code, <tt>sv</tt>. The ISO
-codes of <tt>en</tt> and <tt>de</tt> could have been used in place of <tt>English</tt> and
-<tt>German</tt>.
-
-<p>The directory <tt>HelpBook/commom</tt> could contain images and CSS stylesheets common to
-all Help Books. During help book development use a symbolic link to move the <tt>common</tt>
-directory into the HTML tree.
-
-
-<pre style="padding-left:3em; margin-bottom:0em;">
-<jarbundler dir="${basedir}"
- .
- .
- .
- helpbookfolder="HelpBook"
- helpbookname="Hello World Help" >
- .
- .
- .
- <helpbook locale="English">
- <fileset dir="HelpBook/English" />
- <fileset dir="HelpBook/common" />
- </helpbook>
-
- <helpbook foldername="Hilfebuch" name="Hallo Welt Hilfe" locale="German">
- <fileset dir="HelpBook/German" />
- <fileset dir="HelpBook/common" />
- </helpbook>
-
- <helpbook name="Hjälp" locale="sv">
- <fileset dir="HelpBook/Swedish" />
- <fileset dir="HelpBook/common" />
- </helpbook>
-
-</jarbundler>
-</pre>
-
-
-
-<h3>Troubleshooting the Help Viewer cache.</h3>
-<p>During development the Help Viewer sometimes
-refuses to update the contents of a Help Book which changed. The Apple Developer Docs
-<a href="http://developer.apple.com/qa/qa2005/qa1409.html">suggest</a> to delete or
-edit the file <tt>~/Library/Preferences/com.apple.help.plist</tt>. This file
-contains the list of known Help Books. If you double-click on this file the XML Property Editor
-applicaiton will be launched and re can 'delete' your bundle ID entry and "save" this file. Deleting
-this file does no harm but is a less elegant way to deal with the problem.
-
-<p>This document also suggests deleting the
-folder <tt>~/Library/Caches/com.apple.helpui</tt> to help with refresh problem during development.
-
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<title>Mac OS X JarBundler ANT Task - Services Properties</title>
-<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
-<meta http-equiv="Content-Language" content="en-us" />
-<link href="styles.css" rel="stylesheet" media="all" type="text/css" />
-<meta name="ROBOTS" content="ALL" />
-</head>
-
-<body>
-
-
-<h2>JarBundler - Apple System Services Properties</h2>
-
-<p>Documentation for creating Apple System Services Properties can be found <a
-href="http://developer.apple.com/documentation/Cocoa/Conceptual/SysServices/Concepts/properties.html#//apple_ref/doc/uid/20000852-97503">here</a>.
-
-
-
-<h3>Services Task Example</h3>
-
-
-<pre style="padding-left:3em; margin-bottom:0em;">
-<jarbundler dir="${basedir}" ... >
-
- <service portname="jarBundler"
- message="processRequest"
- menuitem="JarBundler/Process Request"
- sendtypes="NSStringPboardType,NSFilenamesPboardType"
- returntypes="NSStringPboardType"
- keyequivalent="p"
- userdata="a string passed to the method"
- timeout="5000" />
-
- <service menuItem="jEdit/Open Files"
- message="openFile"
- sendTypes="NSStringPboardType,NSFilenamesPboardType"/>
-
- <service menuItem="jEdit/Insert Text"
- message="insertSelection"
- sendTypes="NSStringPboardType"/>
-
- <service menuItem="jEdit/New Buffer with Text"
- message="openSelection"
- sendTypes="NSStringPboardType"/>
-
-</jarbundler>
-
-</pre>
-
-
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
- <title>Java Application Stub</title>
- <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
- <meta http-equiv="Content-Language" content="en-us" />
- <meta name="ROBOTS" content="ALL" />
- <link href="styles.css" rel="stylesheet" media="all" type="text/css" />
-</head>
-
-<body>
-
-
-<h2>JarBundler - Java Application Stub</h2>
-
-
-<p>The Java Launching stub file is located inside of your application bundle in the
-subdirectory "<tt>Contents/MacOS/</tt>". The default name for this file is "<tt>JavaApplicationStub</tt>".
-It is used by the Mac OS X system read the
-applications plist and then launch the Java VM with the appropriate properties such as the
-classpath and main class name.
-
-
-<p>When run on OS X system, the JarBundler ANT task uses the current copy of the <tt>JavaApplicationStub</tt>
-from the developer's disk. Starting with JarBundler 1.8 the attribute <tt>stubfile</tt> can be used to
-set the name of the <tt>JavaApplicationStub</tt> file copied from the system framework. If the
-stub file referenced by the <tt>stubfile</tt> attribute exists, that file will be used along with
-it's filename.
-
-<p>When the JarBundler ANT task is used under Windows or Linux, a copy of the <tt>JavaApplicationStub</tt>
-must be supplied by the developer. This cannot be built from source but must be obtained from
-a Mac OS X system.
-
-
-<h3>Java Launching Stub as a Symbolic Link</h3>
-
-<p>Creating a bundle with the your current copy of Java Launching Stub
-could lead to a future situation where the <tt>JavaApplicationStub</tt> file
-could become incompatible with a future OS X update.
-
-<p>Under Mac OS X one
-could replace the "<tt>JavaApplicationStub</tt>" file with a symbolic link to the user's current
-copy. This <em>should</em> guarentee that
-the end user would always be using a current copy of the stub file. I have used this technique on
-several versions of OS X and have not have had any reported problems with its use.
-
-
-<p>Obviously, if you have used a stub file name which is different than the one shown in the
-example below you will have to make changes to both the delete and the symbolic link commands.
-
-<p>This is not yet an option of the JarBundler task but can be accomplished with the following lines
-of ANT code after building the bundle. <strong>NB:</strong> This will not work when building under
-Windows and is untested under Linux.
-
-
-<pre style="padding-left:3em;">
- .
- .
- .
- </jarbundler>
-
- <!-- Delete the JavaApplicationStub and replace it with a symbolic link -->
- <!-- which should work on older and future versions of OS X -->
-
- <delete file="${release}/${name}.app/Contents/MacOS/JavaApplicationStub"/>
- <exec executable="ln">
- <arg line="-s /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub"/>
- <arg value="${release}/${name}.app/Contents/MacOS/JavaApplicationStub"/>
- </exec>
-
-</target>
-
-</pre>
-
-<h3>A Known problem with Java launching stub</h3>
-
-<p>In early 2006 an Apple upgrade to Quicktime (7.0.4) caused
-older versions of "<tt>JavaApplicationStub</tt>" to fail to start up. These old copies came from developers
-who first created the application bundle as a directory and then created new applications by
-replacing the JAR files within the bundle and not replacing "<tt>JavaApplicationStub</tt>" with a more current
-copy.
-
-
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<title>Mac OS X JarBundler ANT Task</title>
-<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
-<meta http-equiv="Content-Language" content="en-us" />
-<meta name="ROBOTS" content="ALL" />
-<link href="styles.css" rel="stylesheet" media="all" type="text/css" />
-</head>
-<body>
-
-
-<h1>Mac OS X JarBundler ANT Task</h1>
-<h1>Version 2.2.0</h1>
-
-<p>How many times has this happened to you? You've written a little
-Java utility, or maybe even a more complex application, and you want to
-create Mac OS X application bundle for easy distribution.
-
-<p>You'd like to be able to do it automatically from your build process,
-but you're forced to go run the Apple Jar Bundler and tweak all the
-settings manually every time you build.</p>
-
-<p>Well no more! JarBundler is a feature-rich Ant task which will
-create a Mac OS X application bundle from a list of Jar files and a
-main class name. You can add an Icon resource, set various Mac OS X
-native look-and-feel bells and whistles, and maintain your application
-bundles as part of your normal build and release cycle. It is free
-software licensed under the GNU General Public License.</p>
-
-<p>This release is based on the earlier work of
-<a href="http://loomcom.com/jarbundler/">Seth Morabito</a>.
-
-
-
-<h2>What's New</h2>
-<!-- Released: Dec 2010 -->
-<ul>
-<li>Added the optional '<tt>jvmarchs</tt>' space delimited string attribute to JarBundler task.<br>
-Thanks to Tobias Bley and his team</li>
-
-<li>Added the optional '<tt>lsArchitecturePriority</tt>' space delimited string attribute to JarBundler task.<br>
-Thanks to Tobias Bley and his team</li>
-
-<li>Added the optional '<tt>suFeedURL</tt>' string attribute to JarBundler task.<br>
-Thanks to Tobias Bley and his team</li>
-
-</ul>
-
-
-<h2>Download</h2>
-
-<div style="margin-left:5em;">
-<table cellpadding="6" border="0" cellspacing="0">
-<tr><td>Source and binary, all platforms (ZIP):</td>
-<td><a href="dist/jarbundler.zip">jarbundler.zip</a></td></tr>
-<tr><td>Source and binary, all platforms (TAR):</td>
-<td><a href="dist/jarbundler.tar.gz">jarbundler.tar.gz</a></td></tr>
-</table>
-</div>
-
-
-
-<h2>Installation</h2>
-
-<p>Move the file <tt>jarbundler-2.2.0.jar</tt>
-into <tt>/usr/share/ant/lib</tt> or
-into your local ANT lib directory. Remove any older versions at this time.
-<strong>NB:</strong> This location used to be <tt>/Developer/Java/Ant/lib</tt>. You
-may have to try both to get things to work.
-
-
-<h2>Using in the Build file</h2>
-
-<p>To use the Jar Bundler Ant Task, create a task definition in your
-ANT <tt>build.xml</tt> file like this:</p>
-
-<pre style="padding-left:2em;">
-<taskdef name="jarbundler"
- classname="net.sourceforge.jarbundler.JarBundler" />
-</pre>
-
-
-
-<p>Now, from a target, you can add the "jarbundler" task.</p>
-
-<pre style="padding-left:2em;">
-<jarbundler dir="release"
- name="MyApp"
- mainclass="org.foo.myapp.Main"
- jar="myapp.jar" />
-</pre>
-
-<!-- Task Attributes, required =============================================================-->
-
-
-<h2>Task Attributes, required</h2>
-<div align="center">
-<table border="1" cellpadding="4" cellspacing="0" width="90%" style="font-size: 10pt;">
-
- <tr>
- <th>Attribute</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td class="attribute">dir</td>
- <td class="description">The directory in which your application bundle will be created.</td>
- </tr>
-
- <tr>
- <td class="attribute">name</td>
- <td class="description">The name of your application bundle (minus the ".app" extension).</td>
- </tr>
-
- <tr>
- <td class="attribute">mainclass</td>
- <td class="description">The name of the main class to run when the application bundle is launched.
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/Articles/JavaDictionaryInfo.plistKeys.html">
- MainClass</a>
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">jar</td>
- <td class="description">A single jar file to be used in your application.
- <div><strong>Not Required</strong> if there are nested <tt><jarfileset></tt> or
- <tt><jarfilelist></tt> nested tasks.
- </div>
- <div>
- Can be used with nested <tt><jarfileset></tt> and/or <tt><jarfilelist></tt>
- tasks i.e. all jar files will be added to the class path.
- </div>
- </td>
- </tr>
-
-</table>
-</div>
-
-<!-- Task Attributes, optional =============================================================-->
-
-
-<h2>Task Attributes, optional</h2>
-<div align="center">
-<table border="1" cellpadding="4" cellspacing="0" width="90%" style="font-size: 10pt;">
-
- <tr>
- <th>Attribute</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td class="attribute">arguments</td>
- <td class="description">Extra command-line arguments for the Java application.
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/Articles/JavaDictionaryInfo.plistKeys.html">
- Arguments</a>
- </div>
- </td>
- </tr>
-
-
- <tr>
- <td class="attribute">build</td>
- <td class="description">Application build number. This string is used in the default
- "About..." box along with the 'version' number. This default About Box format is "version (build)" i.e.
- "4.3.1 (231)". Also see <tt>version</tt> and <tt>infostring</tt> attributes.
-
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html#//apple_ref/doc/uid/20001431-102364">
- CFBundleVersion</a>
- </div>
-
- <div>
- Default: the value of the <tt>version</tt> attribute
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">bundleid</td>
- <td class="description">Unique identifier string for the bundle. This string should be in
- the form of a java package name, for example com.apple.myapp.
-
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html#//apple_ref/doc/uid/20001431-102364">
- CFBundleIdentifier</a>
- </div>
-
-
- </td>
- </tr>
-
- <tr>
- <td class="attribute">developmentregion</td>
- <td class="description">The development region of the bundle.
-
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html">
- CFBundleDevelopmentRegion</a>
- </div>
-
- <div>
- Default: <tt>English</tt>
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">extraclasspath</td>
- <td class="description">A list of files or patternsets (space or comma seperated) to
- add to the bundle's classpath. The files referenced by this property will
- <i>not</i> be copied into the bundle, so the resulting .app may only work
- on systems that have these external resources available.
- </tr>
-
-
- <tr>
- <td class="attribute">helpbookfolder</td>
- <td class="description">Specify the directory name of the Help Book in the "resources"
- directory. When this name <strong>must</strong> match the directory name when using
- the <tt><resourcefileset></tt> task to copy the Help Book HTML files into the bundle.
-
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html#//apple_ref/doc/uid/20001431-102364">
- CFBundleHelpBookFolder</a>
- </div>
-
- </td>
- </tr>
-
- <tr>
- <td class="attribute">helpbookname</td>
- <td class="description">Specify the name of the Help Book. This is string is also used
- as the META tag to designate the initial HTML file to be loaded into the Help Viewer application.
- <div style="margin-left:3em;">
- <tt style="font-size:1em;"><meta name="AppleTitle" content="Hello World Help"/></tt>
- </div>
-
- <div>
- <strong>NB:</strong> The Apple Help Book system does not open the file <tt>index.html</tt> by default. Although
- it is a good practice to use this filename with the embedded META tag shown above.
- </div>
-
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html#//apple_ref/doc/uid/20001431-102364">
- CFBundleHelpBookName</a>
- </div>
-
- </td>
- </tr>
-
- <tr>
- <td class="attribute">icon</td>
- <td class="description">File reference to a Mac OS X icon file. This file is created with
- the Mac OS application located at "<tt>/Developer/Applications/Utilites/Icon Composer</tt>"
- </tr>
-
-
- <tr>
- <td class="attribute">infostring</td>
- <td class="description">A string for display in the Finder's Get Info panel. Also see <tt>version</tt> and <tt>build</tt> attributes.
-
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html">
- CFBundleGetInfoString</a>
- </div>
-
- <div>
- Default: the value of the <tt>version</tt> attribute
- </div>
- </td>
- </tr>
-
-
- <tr>
- <td class="attribute">jvmarchs</td>
- <td class="description">A space delimited string. Used to take advantage of 64-bit computing.
-
- <div>
- Example: <tt>jvmarchs="i386 x64_86 ppc"</tt>
- </div>
- </td>
- </tr>
-
-
- <tr>
- <td class="attribute">lsArchitecturePriority</td>
- <td class="description">A space delimited string. Contains an array of strings identifying the supported code architectures and their preferred execution priority.
-
- <div>
- Example: <tt>jvmarchs="i386 x64_86 ppc"</tt>
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">jvmversion</td>
- <td class="description">The version of the JVM required to run the application.
- Typically a string in the form "1.3", "1.3+", "1.4", "1.4+", etc.
-
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/Articles/JavaDictionaryInfo.plistKeys.html">
- JVMVersion</a>
- </div>
-
-
- <div style="margin-top:1em;">ADC:
- <a href="http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/Articles/JavaDictionaryInfo.plistKeys.html">
- Specifing the Java Version
- </a>
- </div>
-
-
- <div>ADC:
- <a href="http://developer.apple.com/ReleaseNotes/Java/Java50RN/1_NewFeatures/chapter_2_section_4.html#//apple_ref/doc/uid/TP40001881-202-BCIBFCJB">
- Specifing the Java Version after installing J2SE 5.0
- </a>
- </div>
-
- <div>
- Default: <tt>1.3+</tt>
- </div>
- </td>
-
- </tr>
-
-
- <tr>
- <td class="attribute">shortname</td>
- <td class="description">The string used in the application menu.
- <div>
- This string is often shorter than
- the application's name. For example, "<tt>Microsoft Word</tt>" displays "<tt>Word</tt>"..
- Apple recommends that this string be limited to 16 characters. JarBuilder enforces this
- limit silently by truncating <tt>shortname</tt>. If the <tt>shortname</tt> is not specified then
- the application's name will be used with no truncation.
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">showplist</td>
- <td class="description">If true, display the contents of the <tt>Info.plist</tt> file
- <div>
- Default: <tt>false</tt>
- </div>
- </td>
- </tr>
-
-
-
- <tr>
- <td class="attribute">signature</td>
- <td class="description">The four-letter code identifying the bundle.
-
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html">
- CFBundleSignature</a>
- </div>
- <div>
- Default: <tt>????</tt>
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">splashfile</td>
- <td class="description">**Needs link to Apple Technical Document**
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">stubfile</td>
- <td class="description">If set, the location of a Mac OS X Java Application Stub file
- to use for this application bundle. See the section "<em>Specifying the Java Launching
- Stub File</em>" below. <div><strong>Required</strong> for Windows or Linux</div>
- <div>
- Under MacOS, if the referenced file does <strong>not</strong> exist, then the file
- name will be used in the bundle to reference a copy of the <tt>JavaApplicationStub</tt>.
- This usage provides a way for each Java application to have a uniquely named executable
- file name. This is useful when using the UNIX 'top' command to distinguish applications.
- </div>
- </td>
- </tr>
-
-
- <tr>
- <td class="attribute">suFeedURL</td>
- <td class="description">Used to check for new version of the applications.
- </td>
- </tr>
-
-
-
- <tr>
- <td class="attribute">verbose</td>
- <td class="description">If true, output more verbose information to Ant while the task is
- running.
- <div>
- Default: <tt>false</tt>
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">version</td>
- <td class="description">Version number displayed in Finder, this version number can be though of
- as the "Marketing" version without distracting build information. The marketing version
- is a string that usually displays the major and minor version of the bundle. This string
- is usually of the form n.n.n where n is a number. Also see <tt>build</tt> and
- <tt>infostring</tt> attributes.
-
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html">
- CFBundleShortVersionString</a>
- </div>
-
-
- <div>
- Default: <tt>1.0</tt></div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">vmoptions</td>
- <td class="description">Command line options to pass the JVM at startup.
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/Articles/JavaDictionaryInfo.plistKeys.html">
- VMOptions</a>
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">workingdirectory</td>
- <td class="description">The working directory for the Java application.
- <div>
- The corresponding bundle variable is <a href="http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/Articles/JavaDictionaryInfo.plistKeys.html">
- WorkingDirectory</a>
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">startOnMainThread</td>
- <td class="description">
- <div>
- Valid values 'true' or 'false'.
- </div>
- </td>
- </tr>
-
-</table>
-
-</div>
-
-<!-- Deprecated attributes ================================================================-->
-
-<h2>Task Attributes, deprecated</h2>
-
-<!-- <p>These attributes will be removed in version 2.0 of JarBundler. -->
-
-<div align="center">
-<table border="1" cellpadding="4" cellspacing="0" width="90%" style="font-size: 10pt;">
- <tr>
- <th class="attribute">Attribute</th>
- <th class="description">Description</th>
- </tr>
-
-
- <tr>
- <td class="attribute">aboutmenuname</td>
- <td class="description">The string to display in the "About" menu of the
- running application. <i>(Deprecated under JVM 1.4.1)</i>
- <div>
- Use JarBunler attribute <tt>shortname</tt> instead
- </div>
- </td>
- </tr>
-
-
- <tr>
- <td class="attribute">antialiasedgraphics</td>
- <td class="description">If set to true, use anti-aliasing when rendering graphics.
- <div>
- Use <tt><javaproperty name="apple.awt.antialiasing" .../></tt>
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">antialiasedtext</td>
- <td class="description">If set to true, use anti-aliasing when rendering text.
- <div>
- Use <tt><javaproperty name="apple.awt.textantialiasing" .../></tt>
- </div>
- </td>
- </tr>
-
-
- <tr>
- <td class="attribute">chmod</td>
- <td class="description">The full path to the BSD 'chmod' command.
- <div>
- Using the ANT task "Chmod" internally.
- </div>
- </td>
- </tr>
-
-
- <tr>
- <td class="attribute">execs</td>
- <td class="description">A list of files or patternsets (space or comma seperated) to
- place into the "Resources/MacOS" directory and set executable.
-
- <div>
- <strong>Usage Warning:</strong> Filenames and directory paths can sometimes contain spaces and
- commas. If these characters are present the build will fail mysteriously when using this
- attribute.
- </div>
- <div>
- Use <tt><execfileset/></tt> or <tt><execfilelist/></tt> nested tasks instead.
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">growbox</td>
- <td class="description">Show the Aqua resize (grow) box.
- <div>
- Use <tt><javaproperty name="apple.awt.showGrowBox" .../></tt>
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">growboxintrudes</td>
- <td class="description">Resizable window's growbox (resize control) intrudes
- into AWT content. If turned off, the bottom of the window is
- pushed down 15 pixels. <i>(Deprecated under JVM 1.4.1)</i></td>
- </tr>
-
- <tr>
- <td class="attribute">jars</td>
- <td class="description">
- A list of jar files or patternsets (space or comma seperated) to be used in your application.
-
- <div>
- <strong>Usage Warning:</strong> Filenames and directory paths can sometimes contain spaces and
- commas. If these characters are present the build will fail mysteriously when using this
- attribute.
- </div>
-
- <div>
- Use <tt><jarfileset></tt> and/or <tt><jarfilelist></tt> nested tasks instead.
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">type</td>
- <td class="description">The Mac OS type of the bundle.
- <div>
- This attribute is redundant with the implied behavior this ANT task i.e. <tt>CFBundlePackageType</tt>
- should always be set to <tt>APPL</tt> for applications.
- </div>
- </td>
- </tr>
-
- <tr>
- <td class="attribute">shortinfostring</td>
- <td class="description">Use <tt>infostring</tt> attribute instead.
- </td>
- </tr>
-
-
- <tr>
- <td class="attribute">smalltabs</td>
- <td class="description">If set to true, tab controls in Swing applications more
- closely resemble the Metal look and feel. If set to false, the tabs
- assume a larger size more similar to the default Aqua controls.
- <i>(Deprecated under JVM 1.4.1)</i></td>
- </tr>
-
- <tr>
- <td class="attribute">liveresize</td>
- <td class="description">If set to true, enable live-resizing of windows.
- <i>(Deprecated under JVM 1.4.1)</i></td>
- </tr>
-
- <tr>
- <td class="attribute">screenmenu</td>
- <td class="description">If set to true, puts Swing menus
- in the Mac OS X menu bar if using the Aqua look and feel.
- <div>Set the <code>apple.laf.useScreenMenuBar</code> property instead:
- <code><javaproperty name="apple.laf.useScreenMenuBar" value="true"/></code></div></td>
- <!-- This advice is correct as of 2006 May, though Apple have
- changed the property name in the past. See
- http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/Articles/JavaSystemProperties.html
- -->
- </tr>
-
-
-</table>
-</div>
-
-
-<!-- Nested Tasks =========================================================================-->
-
-<h2>Nested DataType Task</h2>
-
-<h3 class="datatype"><jarfileset></h3>
-<p>The nested <tt>jarfileset</tt> element specifies a
-<a href="http://ant.apache.org/manual/CoreTypes/fileset.html">FileSet</a>.
-All
-files included in this fileset will be included in the application
-bundle and added to the app bundle classpath. Only required if the
-<tt>jars</tt> attribute is not set.</p>
-
-<h3 class="datatype"><jarfilelist></h3>
-<p>The nested <tt>jarfilelist</tt> element specifies a
-<a href="http://ant.apache.org/manual/CoreTypes/filelist.html">FileList</a>. All
-files included in this filelist will be included in the application
-bundle and added to the app bundle classpath. Only required if the
-<tt>jars</tt> attribute is not set.</p>
-
-
-<h3 class="datatype"><javaproperty ...></h3>
-<p>This ANT DataType element allows developers to specify java properties
-for the info.plist. This DataType repalces many <tt>jarbundler</tt> tag attributes. However, if
-a deprecated attribute is used it will take precedent over a <tt>javaproperty</tt>. This was done
-to maintain backward compatibility with earlier versions of <tt>jarbundler</tt>.
-
-<p>This task takes name/value pairs:
-<pre style="padding-left:5em; margin-bottom:0em;">
-<javaproperty name="apple.awt.showGrowBox" value="true"/>
-</pre>
-
-<p>Additional Java Properites can be found in the Apple Developer Connection document:
-<a href="http://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/Articles/JavaSystemProperties.html">
-Apple Java Properties for JDK 1.4+</a>
-
-<h3 class="datatype"><execfileset></h3>
-<p>The nested <tt>execfileset</tt> element specifies a
-<a href="http://ant.apache.org/manual/CoreTypes/fileset.html">FileSet</a>. All
-files included in this fileset will be added to the application
-bundle's "Contents/MacOS" directory and set executable. Optional.</p>
-
-<h3 class="datatype"><execfilelist></h3>
-<p>The nested <tt>execfilelist</tt> element specifies a
-<a href="http://ant.apache.org/manual/CoreTypes/filelist.html">FileList</a>. All
-files included in this filelist will be added to the application
-bundle's "Contents/MacOS" directory and set executable. Optional.</p>
-
-
-<h3 class="datatype"><resourcefileset></h3>
-<p>The nested <tt>resourcefileset</tt> element specifies a
-<a href="http://ant.apache.org/manual/CoreTypes/fileset.html">FileSet</a>. All
-files included in this fileset will be added to the application
-bundle's "Contents/Resources" directory. Optional.</p>
-
-<h3 class="datatype"><resourcefilelist></h3>
-<p>The nested <tt>resourcefilelist</tt> element specifies a
-<a href="http://ant.apache.org/manual/CoreTypes/filelist.html">FileList</a>. All
-files included in this filelist will be added to the application
-bundle's "Contents/Resources" directory. Optional.</p>
-
-
-<h3 class="datatype"><javafileset></h3>
-<p>The nested <tt>javafileset</tt> element specifies a
-<a href="http://ant.apache.org/manual/CoreTypes/fileset.html">FileSet</a>. All
-files included in this fileset will be added to the application
-bundle's "Contents/Resources/Java" directory. Optional.</p>
-
-<h3 class="datatype"><javafilelist></h3>
-<p>The nested <tt>javafilelist</tt> element specifies a
-<a href="http://ant.apache.org/manual/CoreTypes/filelist.html">FileList</a>. All
-files included in this filelist will be added to the application
-bundle's "Contents/Resources/Java" directory. Optional.</p>
-
-<h3 class="datatype"><extraclasspathfileset></h3>
-<p>The nested <tt>extraclasspathfileset</tt> element specifies
-a <a href="http://ant.apache.org/manual/CoreTypes/fileset.html">FileSet</a>.
-All files included in this fileset will be added to the
-application bundle's classpath, but the files <b>will not</b> be
-copied into the bundle itself. This allows you to specify external
-system classpath dependencies without bundling the resources. Resources
-can be files or directories. Optional.</p>
-
-<h3 class="datatype"><extraclasspathfilelist></h3>
-<p>The nested <tt>extraclasspathfilelist</tt> element specifies
-a <a href="http://ant.apache.org/manual/CoreTypes/filelist.html">FileList</a>.
-All files included in this filelist will be added to the
-application bundle's classpath, but the files <b>will not</b> be
-copied into the bundle itself. This allows you to specify external
-system classpath dependencies without bundling the resources. Resources
-can be files or directories. Optional.</p>
-
-
-<h3>Note on FileList and FileSet target locations</h3>
-<p>Note that in fact the files are installed in locations which have the same relation
-to either <tt>Contents/MacOS</tt> or <tt>Contents/Resources</tt> directories as the
-files in the FileSet or FileList have to the '<tt>dir</tt>' attribute. Thus in the case:
-
-<pre style="padding-left:3em; margin-bottom:0em;">
- <resourcefileset dir="builddir/architectures" includes="ppc/*.jnilib"/>
-</pre>
-
-<p>the <tt>*.jnilib</tt> files will be installed in <tt>Contents/Resources/ppc</tt>
-
-
-
-
-<!--Examples ================================================================================-->
-
-
-<h2>Examples</h2>
-
-<p>A minimal example might look like this</p>
-
-<pre style="padding-left:3em; margin-bottom:0em;">
- <jarbundler dir="release"
- name="MyApp"
- mainclass="org.foo.myapp.Main"
- jar="build/myapp.jar" />
-</pre>
-
-<p>This will create a Mac OS X application bundle called "MyApp.app" in
-the directory "release" using a JAR file which was created in the "build" directory.</p>
-
-<p>You can use FileSets or FileLists for more complex builds. For example:</p>
-
-<pre style="padding-left:3em; margin-bottom:0em;">
-<jarbundler dir="release"
- name="MyApp 1.0"
- mainclass="org.foo.myapp.Main" >
-
- <jarfileset dir="build">
- <include name="**/*.jar" />
- <exclude name="**/CVS" />
- </jarfileset>
-
- <jarfilelist dir="lib" file="GUI.jar, Utils.jar" />
-
-</jarbundler>
-</pre>
-
-
-<!-- Advanced JarBundler Tasks and Examples =================================================-->
-
-<h2>Advanced JarBundler Tasks</h2>
-
-<p><a href="./DocumentType.html">Associating Documents with your Application</a></p>
-
-<p><a href="./HelpBook.html">Including an Apple Help Book</a></p>
-
-<p><a href="./Service.html">Apple System Service Property</a></p>
-
-<p><a href="./StubFile.html">Java Launching Stub File</a></p>
-
-<p><a href="./Examples.html">Advanced Example</a></p>
-
-<p><a href="./DiskImage.html">Creating a Disk Image</a></p>
-
-
-
-<!-- History =============================================================================-->
-
-
-<h2>History</h2>
-
-<h3> Released: Oct 2008</h3>
-<ul>
-<li>Added the optional 'startOnMainThread' boolean attribute to JarBundler task.<br>
-Thanks to Mitch Coopet for his patch and the many other feature requesters.</li>
-</ul>
-
-
-<h3> Released: Jan 2007 (version 2.0.0)</h3>
-<ul>
-<li>Added the optional 'splashfile' attribute to JarBundler task.<br>
-Thanks to Angelo van der Sijpt for this addition.</li>
-<li>When run under any Window OS, the file separator for included libraries is written
-with a backslash, '\', instead of a forward slash, '/'.<br>
-Thanks to Anthony Goubard for this fix.</li>
-<li>Version 2.0.0 isn't a major release, but the license as changed to the more flexible
-Apache Software License v2.0 (ASLv2). This allows the JarBundler ANT task to be bundled
-into other packages whose licensing does not conform with the GPL.</li>
-<li>Removed the dependency on the Xerxes API when writing the info.plist file.
-We lost the indenting but can look into this later.<br>
-Thanks to Christian Menz for providing this modification to the source code.
-</li>
-<li>ANT commands and shell script for creating a Disk Image. (Mac OS X only)<br>
-Thanks to Philip Weaver for providing these. See "<a href="./DiskImage.html">Creating a Disk Image</a>"
-</li>
-</ul>
-
-
-<h3>June 19, 2006 (version 1.9)</h3>
-
-<ul>
-<li>Deprecated <tt>chmod</tt> attribute. Using the ANT task "Chmod" internally.</li>
-<li>Using the ANT task "Delete" internally to delete any pre-existing ".app" file</li>
-<li>Added the <service> nested task. This matches a task used in the JEdit
-branch of JarBundler.
-Thanks to Björn "Vampire" Kautler for providing source code.</li>
-<li>Add UTI specifier to document types. Thanks to Deerwood McCord Jr. for
-the implementation.</li>
-</ul>
-
-
-
-<h3>April 12, 2006 (version 1.8.1)</h3>
-
-
-<p>Fix bug when using localized Help Books, the menu application would appears as <tt>(null)</tt>
-
-<p>Corrected the encoding for the <tt>Info.plist</tt> XML file so that the copyright character,
-amongst others, are processed correctly. Thanks to Christian Roth for both pointing out
-the encoding problem and providing a one line solution!
-
-
-<h3>April 11, 2006 (version 1.8)</h3>
-
-<p>Added <tt>bundle</tt> attribute to <tt>documenttype</tt> task in order to specify
-documents which are in reality directory trees, yet treated as a single entity by the Finder.
-Thanks to Deerwood McCord Jr. for the implementation.
-
-<p>Added <tt>mimetypes</tt> attribute to <tt>documenttype</tt> task in order to specify
-Multipurpose Internet Mail Extensions (MIME) types for the document.
-Thanks to Deerwood McCord Jr. for the implementation.
-
-<p>No longer required to delete the existing application bundle, i.e. <tt>.app</tt> directory,
-before invoking the <tt>jarbundler</tt> task. This is now done by the task itself.
-
-<p>The filename of the <tt>stubfile</tt> attribute will be used as the Java Application Stub filename
-within the bundle and for the value of the <tt>CFBundleExecutable</tt> key in the <tt>Info.plist</tt>.
-This usage provides a way for each Java application to have a uniquely named executable
-filename. This is useful when using the UNIX 'top' command to distinguish applications.
-Thanks to Deerwood McCord Jr. for the this idea.
-
-<p><tt>Info.plist</tt> is built internally as a DOM tree instead of concatenating strings. This
-resulting DOM tree is serialized into the file using two space indentation and one tag per line.
-
-<p>Improved readablity of the verbose output. The contents of the <tt>Info.plist</tt> file
-is controlled by the <tt>showPlist</tt> attribute.
-
-<p>Reorganize JarBundler documentation by splitting out advanced features
-
-
-<h3>March 22, 2006 (version 1.7)</h3>
-
-<p>Added <tt><documenttype></tt> nested task so that file associations can be set up
-for the application. Thanks to Dan Stowell a sample "<tt>Info.plist</tt>" file containing
-document type entries.</p>
-
-<p>Added <tt><javafileset></tt> and <tt><javafilelist></tt> nested tasks,
-which mirror <tt><resourcefileset></tt> and <tt><resourcefilelist></tt>, in
-order to add files to the <tt>Contents/Resources/Java</tt> directory</p>
-
-<p>Added Apple Help Book support by...
-
- <ul>
- <li>Adding <tt>helpbookfolder</tt> attribute to the <tt>jarbundler</tt> task</li>
- <li>Adding <tt>helpbookname</tt> attribute to the <tt>jarbundler</tt> task</li>
- <li>Adding <tt>javafilelist</tt> nested task to assist in moving the Help Book JNI
- library to the correct location. (see above)
- </ul>
-
-<p>Thanks to Will Lowe for an example Help Book project with JNI code.
-
-
-<p>Split the "Hello, World" example into a complex build which associates
-document types and uses a Help Book, and a simple minimal build
-
-<p>Reorganize 'example' source directory to include Objective-C JNI code and use
-package structure for "Hello, World" application rather than putting everything
-
-
-
-
-
-<h3>March 2, 2006 (version 1.6)</h3>
-
-<p>Added <tt><resourcefileset></tt> and <tt><resourcefilelist></tt> nested elements,
-which mirror <tt><execfileset></tt> and <tt><execfilelist></tt>, and add files to
-the <tt>Contents/Resources</tt> directory.
-
-<p>Added <tt>build</tt> attribute to <tt>jarbundler</tt> task. See also <tt>version</tt>
-and <tt>infostring</tt> for usage.
-<p>Added <tt>jar</tt> attribute to <tt>jarbundler</tt> task.
-<p>Added <tt>shortname</tt> attribute to <tt>jarbundler</tt> task. See also <tt>name</tt>
-for usage.
-<p>JarBundler is now a SourceForge <a href="http://sourceforge.net/projects/jarbundler">project</a>!
-<p>Changed task package to <tt>net.sourceforge.jarbundler</tt>
-
-
-
-
-<h3>February 2006 (version 1.5)</h3>
-
-<p>Changed the package from 'com.loomcom.ant.tasks.jarbundler' to
- 'com.informagen.ant.tasks.jarbundler' so that version 1.4 can remain installed without
- conflict
-
-<p>Added a nested DataType called "javaproperty" so that new properties can be added
- by end users and deprecated properties can be removed. Former jarbundler
- tag atributes are still available but have been deprecated in favor of their
- 'javaproperty' equivalents.
-
-<p>Currently, a jarbundler tag attribute overrides a javaproperty tag. This was
- done to maintain backward compatibility with version 1.4
-
-
-<h3>13 November 2004 (version 1.4):</h3>
- <p> Fixed a bug that was causing application arguments not to be set.</p>
-
-<h3>23 October 2004 (version 1.3):</h3>
- <p> Added "extraclasspath" attribute, and "extraclasspathfileset" and
- "extraclasspathfilelist" nested elements, allowing users to
- optionally add external resources to the runtime classpath which will
- not be copied into the application bundle at build time. Removed
- some Java 1.4 requirements to allow building the sources under Java
- 1.3. Clarified the documentation.</p>
-
-<h3>26 July 2004 (version 1.2):</h3>
- <p> Added Ant property setters for "bundleid" and "developmentregion".
- Bundleid has no default, and is optional. Developmentregion defaults
- to "English", and is also optional. Fixed documentation on the
- website.</p>
-
-<h3>26 July 2004 (version 1.1):</h3>
- <p> Fixed several minor bugs, and improved BuildException messages.
- Jarfilesets and execfilesets now preserve directory structure
- when copying. Thanks to Trevor Harmon for pointing out bugs and
- enhancements.</p>
-
-
-<h3>25 July 2004 (version 1.0):</h3>
-<p> "execs" and "jars" can now be set using embedded FileSets or
- FileLists. Added a "verbose" flag, which currently sees limited use.
- Added "chmod" attribute, which can be used to point to a non-standard
- 'chmod' command (not normally needed!) Increased error checking.
- Hopefully, the code is now robust enough for widespread production
- use!</p>
-
-<h3>28 Dec 2003 (version 0.5):</h3>
-<p>Added setter for "execs" attribute. Added setter for "workingdirectory"
- attribute. Fixed missing setter for "arguments" attribute. Added
- alternate Java runtime parameter names for Mac OS X Java VM version
- 1.4.1. Included change submitted by Pierre-Luc Paour.
- Thanks also to Dante Briones and Graham Perks
- for pointing out bugs and enhancements.</p>
-
-<h3>12 October 2003 (Version 0.2:)</h3>
-<p>Added setter to properly support the "vmoptions" parameter.
-(Change submitted by Alok Saldanha)</p>
-
-<h2>Contact</h2>
-
-<p>Please contact Will Gilbert if you have bugs to report, patches to the code,
-ideas for enhancements, or any other suggestions! I can be reached
-at <a href="mailto:gilbert@informagen.com">gilbert@informagen.com</a></p>
-
-
-<h2>Acknowledgments</h2>
-
-<p>Thanks to Dan Stowell for suggesting the "<tt>documenttype</tt>" task and supplying
-and example <tt>Info.plist</tt> file.
-
-<p>Thanks to Will Lowe for providing an example project which implemented "Apple
-Help Book" support for Java.
-
-
-
-<h2>License</h2>
-
-<p>The Jar Bundler Ant Task is Copyright © 2002 - 2006, Seth J. Morabito. All rights reserved.
-
-<p>This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.</p>
-
-<p>This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
-<a href="http://www.gnu.org/licenses/gpl.html">the
-GNU General Public License</a> for more details.</p>
-
-<p>You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</p>
-
-
-<div style="margin-top:2em;">
-<a href="http://sourceforge.net/projects/jarbundler">
- <img src="http://sflogo.sourceforge.net/sflogo.php?group_id=160743&type=2"
- width="125" height="37" border="0" alt="SourceForge.net Logo" />
-</a>
-</div>
-
-
-</body>
-</html>
+++ /dev/null
-body { margin:1.5em;
- margin-right:3em;
- }
-
-h1 {text-align:center;}
-
-h2 {margin-top:2em;}
-
-h3.datatype {margin-top:2em;
- margin-bottom:0.5em;
- font-family:monospace;}
-
-tt {font-family:monospace;
- font-size:1.15em;
- font-weight:bold;}
-
-td tt {font-family:monospace;
- font-size:1em;
- font-weight:normal;}
-
-li {margin-top:1em;}
-
-pre {margin-bottom:3em;
- background-color:#eee;
- padding:5px;
- border:1px solid black;}
-
-td div {margin-top:0.5em;}
-
-
-.attribute {vertical-align:top;
- text-align:left;
- font-family:monospace;
- width:200px;}
-
-.description {vertical-align:top;
- text-align:left;}
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-
- <head>
- <title>Hello World Help</title>
- <meta name="AppleTitle" content="Hello World Help"/>
- <meta name="AppleIcon" content="images/HelloWorld-16x16.png"/>
- <link href="styles/styles.css" rel="stylesheet" media="all" type="text/css" />
- </head>
-
- <body>
- <div id="frame">
- <div id="contentleft">
- <center>
- <img src="images/HelloWorld.png" alt="Application Icon" border="0" />
-
- <h1>Hello World Help</h1>
-
- <h4><a href="http://www.informagen.com/JarBundler">Hello World</a></h4>
- </center>
- </div>
-
- <div id="contentcenter"></div>
-
- <div id="contentright">
- <h2>Help Topics</h2>
-
- <p><a href="topics.html">Topics</a></p>
- </div>
- </div>
- </body>
-</html>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Topics</title>
-
- <link href="styles/styles.css" rel="stylesheet" media="all" type="text/css" />
- </head>
-
- <body>
-
- <h1>Topics</h1>
-
- <ul>
- <li>The long and rich history of "Hello, World"</li>
- <li>The "Hello, World" example in the modern world</li>
- <li>"Hello, World" -- Pros and cons</li>
- <li>The future of "Hello, World"</li>
- </ul>
- </body>
-</html>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-
- <head>
- <title>Hallo Welt Hilfe</title>
- <meta name="AppleTitle" content="Hallo Welt Hilfe"/>
- <meta name="AppleIcon" content="images/HelloWorld-16x16.png"/>
- <link href="styles/styles.css" rel="stylesheet" media="all" type="text/css" />
- </head>
-
- <body>
- <div id="frame">
- <div id="contentleft">
- <center>
- <img src="images/HelloWorld.png" alt="Application Icon" border="0" />
-
- <h1>Hallo Welt Hilfe</h1>
-
- <h4><a href="http://www.informagen.com/JarBundler">Hallo Welt</a></h4>
- </center>
- </div>
-
- <div id="contentcenter"></div>
-
- <div id="contentright">
- <h2>Hilfe Themas</h2>
- <p><a href="topics.html">Themas</a></p>
- </div>
- </div>
- </body>
-</html>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-
- <head>
- <title>Themas</title>
- <link href="styles/styles.css" rel="stylesheet" media="all" type="text/css" />
- </head>
-
- <body>
- <h1>Themas</h1>
-
- <ul>
- <li>Die lange und reiche Geschichte von "Hello, World"</li>
- <li>Das "Hello, World" Beispiel in der modernen Welt</li>
- <li>"Hello, World" -- Pro und Kontra</li>
- <li>Die Zunkunft des Programms "Hello, World"</li>
- </ul>
- </body>
-</html>
+++ /dev/null
-body {
- color: #000;
- background-color: #fff;
- margin: 0
-}
-a {
- color: #00f;
- font-family: Lucida Grande, Arial, sans-serif;
- text-decoration: none
-}
-h1 {
- color: #000;
- font-size: 18pt;
- font-family: Lucida Grande, Arial, sans-serif;
- font-weight: 500;
- letter-spacing: -1pt;
- padding-top: 12px
-}
-h2 {
- color: #000;
- font-size: 11pt;
- font-family: "Lucida Grande", Arial, sans-serif;
- font-weight: 300;
- margin-top: 16px
-}
-h4 {
- color: #000;
- font-size: 8pt;
- font-family: "Lucida Grande", Arial, sans-serif;
- font-weight: 300;
- margin-top: 21px
-}
-p {
- font-size: 9pt;
- font-family: Lucida Grande, Arial, sans-serif;
- margin-top: -10px;
- margin-left: 0
-}
-a:hover {
- text-decoration: underline
-}
-#contentleft {
- margin-top: 38px;
- width: 235px;
- float: left
-}
-#contentcenter {
- margin-top: 2px;
- padding: 0;
- width: 18px;
- float: left
-}
-#contentright {
- margin-top: 18px;
- padding-left: 30px;
- width: 210px;
- height: 300px;
- float: left;
- border-left: 1px solid #808080
-}
-#frame {
- text-align: left;
- margin-top: 12px;
- margin-right: auto;
- margin-left: auto;
- width: 500px
-}
-.space17 {
- padding-top: 17px
-}
-.smlapp {
- height: 275px
-}
-.utility {
- margin-top: 6px;
- margin-bottom: 24px
-}
-.icon {
- margin-bottom: -2px
-}
+++ /dev/null
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<!-- ===========================================================================================
-Use this sample build in your own projects. After putting the JarBundler-X.X.jar file in
-your ANT library remove the 'classpath' attribute from the "taskdef" element.
-============================================================================================ -->
-
-<project name="Hello World" default="simple" basedir=".">
-
- <property name="version" value="4.3.1"/>
- <property name="buildnumber" value="213"/>
- <property name="copyright" value="Copyright © 2006 Informagen, Inc."/>
-
-
- <target name="compile" description="Compile the classes">
- <mkdir dir="classes"/>
- <javac srcdir="src/java" destdir="classes" deprecation="on" source="1.4"/>
- </target>
-
-
- <target name="jar" depends="compile" description="Create JAR file">
- <mkdir dir="build"/>
- <jar jarfile="build/${ant.project.name}.jar" basedir="classes"/>
- </target>
-
-
- <!-- Create a JNI library for launching the Help Viewer -->
- <target name="jni" description="Create HelpBook JNI Library">
- <mkdir dir="build"/>
- <exec executable="cc">
- <arg line="-c"/>
- <arg line="-I/System/Library/Frameworks/JavaVM.framework/Headers"/>
- <arg line="-o build/HelpBookJNI.o"/>
- <arg value="src/obj-c/HelpBookJNI.m"/>
- </exec>
-
- <exec executable="cc">
- <arg line="-dynamiclib"/>
- <arg line="-framework JavaVM"/>
- <arg line="-framework Cocoa"/>
- <arg line="-o build/libHelpBookJNI.jnilib"/>
- <arg value="build/HelpBookJNI.o"/>
- </exec>
-
- <delete file="build/HelpBookJNI.o" quiet="true"/>
- </target>
-
-
-
- <!-- Create a simple application to see if all the bits came together properly -->
-
- <target name="simple" depends="jar" description="Build an example application">
-
- <taskdef name="jarbundler"
- classpath="${jarbundler.jar}"
- classname="net.sourceforge.jarbundler.JarBundler"/>
-
- <jarbundler dir="${basedir}" verbose="true" showPlist="true"
- name="${ant.project.name}"
- mainclass="net.sourceforge.jarbundler.example.HelloWorld"
- jar="build/${ant.project.name}.jar"
- icon="icons/${ant.project.name}.icns"
- version="${version}"/>
-
- </target>
-
-
-
- <!--
- Create a complex application which:
- - Recognizes text and html document types
- - Has a bundle document type, extension '.hello'
- - Includes a Help Book
- -->
-
- <target name="complex" depends="jar, jni" description="Build an example application">
-
- <taskdef name="jarbundler"
- classpath="${jarbundler.jar}"
- classname="net.sourceforge.jarbundler.JarBundler"/>
-
- <jarbundler dir="${basedir}" verbose="true" showPlist="false"
- name="${ant.project.name}"
- shortname="Hello"
- signature="Helo"
- stubfile="Hello World"
- mainclass="net.sourceforge.jarbundler.example.HelloWorld"
- jar="build/${ant.project.name}.jar"
- icon="icons/${ant.project.name}.icns"
- jvmversion="1.4+"
- version="${version}"
- infostring="${ant.project.name}, ${copyright}"
- build="${buildnumber}"
- bundleid="net.sourceforge.jarbundler.example.HelloWorld"
- helpbookfolder="HelpBook"
- helpbookname="Hello World Help" >
-
-
- <!-- Adjust the look, feel and behavior -->
- <javaproperty name="apple.laf.useScreenMenuBar" value="true"/>
- <javaproperty name="apple.awt.brushMetal" value="true"/>
- <javaproperty name="apple.awt.showGrowBox" value="false"/>
-
- <!-- Associate document types with this application -->
- <documenttype name="Hello World text document"
- extensions="txt text"
- ostypes="TEXT sEXT ttro"
- iconFile="icons/txt.icns"
- role="Editor"/>
-
- <documenttype name="Hello World HTML document"
- extensions="html htm"
- iconFile="icons/html.icns"
- role="Editor"/>
-
- <documenttype name="Hello World RTF document"
- extensions="rtf"
- role="Viewer"/>
-
- <documenttype name="Hello World images"
- mimetypes="image/jpeg image/png"
- role="Viewer"/>
-
- <documenttype name="Hello project document"
- extensions="hello"
- iconFile="icons/Hello Document.icns"
- bundle="true"
- role="Editor"/>
-
- <!-- Just proving we can included these files. Might use them in About boxes -->
- <resourcefilelist dir=".." files="LICENSE.TXT"/>
-
- <!-- Copy the HelpBook JNI library -->
- <javafilelist dir="${basedir}/build" files="libHelpBookJNI.jnilib"/>
-
-
- <!-- Copy the HelpBooks to the language specific folders -->
- <!-- English will use the foldername and book name from the Bundle -->
- <!-- German or 'de' will use the custom folder name and book name -->
-
- <HelpBook locale="English">
- <fileset dir="HelpBook/English" />
- <fileset dir="HelpBook/common" />
- </HelpBook>
-
- <helpbook foldername="Hilfebuch" name="Hallo Welt Hilfe" locale="German">
- <fileset dir="HelpBook/German" />
- <fileset dir="HelpBook/common" />
- </helpbook>
-<!--
- <helpbook name="Hjälp" locale="sv">
- <fileset dir="HelpBook/Swedish" />
- <fileset dir="HelpBook/common" />
- </helpbook>
--->
-
-
- </jarbundler>
-
- </target>
-
-
-
- <target name="clean" description="Clean up anything we can't rebuild">
- <delete dir="${ant.project.name}.app" quiet="true"/>
- <delete dir="build" quiet="true"/>
- <delete dir="classes" quiet="true"/>
- </target>
-
-</project>
-
-<!--
-cc -c -I/System/Library/Frameworks/JavaVM.framework/Headers src/obj-c/HelpBookJNI.m
-cc -dynamiclib -o libHelpBookJNI.jnilib HelpBookJNI.o -framework JavaVM -framework Cocoa
--->
-
-
+++ /dev/null
-package net.sourceforge.jarbundler.example;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.Point;
-import java.awt.Toolkit;
-import java.awt.Window;
-
-import java.awt.event.KeyEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.KeyStroke;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JMenuBar;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.SwingConstants;
-
-public class HelloWorld {
-
- public static void main(String[] args) {
- JFrame frame = new JFrame("JarBuilder Test Application");
-
- JMenuBar menubar = new JMenuBar();
-
- menubar.add(new JMenu("File"));
- menubar.add(new JMenu("Edit"));
-
- JMenu helpMenu = new JMenu("Help");
- JMenuItem helpItem = new JMenuItem("Hello World Help");
- helpMenu.add(helpItem);
- helpItem
- .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_SLASH,
- KeyEvent.SHIFT_MASK
- | Toolkit.getDefaultToolkit()
- .getMenuShortcutKeyMask()));
-
- // Attach simple anonymous listener
- helpItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- HelpBook.launchHelpViewer();
- }
- });
-
- menubar.add(helpMenu);
- frame.setJMenuBar(menubar);
-
- JLabel label = new JLabel("Hello, World!", SwingConstants.CENTER);
- frame.getContentPane().add(label, BorderLayout.CENTER);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
- placeWindow(frame, 400, 300);
- frame.setVisible(true);
- }
-
- public static void placeWindow(Window window, int width, int height) {
-
- // New size for this window
- Dimension windowSize = new Dimension(width, height);
- window.setSize(windowSize);
-
- // Place in the 'dialog' position, centered aligned 1/3 from top
- Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-
- Point windowLocation = new Point(0, 0);
- windowLocation.x = (screenSize.width - windowSize.width) / 2;
- windowLocation.y = (screenSize.height / 3) - (windowSize.height / 2);
-
- // Set final size and location
- window.setLocation(windowLocation);
- }
-
-}
\ No newline at end of file
+++ /dev/null
-/*
-** Java-JNI bridge for involking Apple Help Viewer
-**
-** The library name is the name of the JNI Library file which must be created and
-** placed in the Contents/Java folder of the application bundle.
-**
-** This filename is created by prepending 'lib' and append '.jnilib' as a file extension.
-**
-** Thus, the target of loadLibrary("HelpBookJNI") will the file named:
-**
-** Content/Java/libHelpBookJNI.jnilib
-*/
-
-
-package net.sourceforge.jarbundler.example;
-
-public class HelpBook {
- static {
- System.loadLibrary("HelpBookJNI");
- }
-
- public static native void launchHelpViewer();
-}
+++ /dev/null
-/*
-** JNI hook for involking "NSApplication showHelp:"
-**
-** Notice that the function name is created using the string "Java_" and the package name
-** using an underscore instead of a period, then the class name of bridge file. Finally the
-** name of the 'public static native' method is appended.
-*/
-
-#import <JavaVM/jni.h>
-#import <Cocoa/Cocoa.h>
-
-JNIEXPORT void JNICALL Java_net_sourceforge_jarbundler_example_HelpBook_launchHelpViewer (JNIEnv *env, jclass clazz) {
- [[NSApplication sharedApplication] performSelectorOnMainThread:@selector(showHelp:) withObject:NULL waitUntilDone:NO];
-}
+++ /dev/null
-/*
- * A Mac OS X Jar Bundler Ant Task.
- *
- * Copyright (c) 2003, Seth J. Morabito <sethm@loomcom.com> All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-
-package net.sourceforge.jarbundler;
-
-// Java Utility
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.LinkedList;
-// import java.util.Scanner;
-
-// Java language imports
-import java.lang.String;
-
-public class AppBundleProperties {
-
- // Required
- private String mApplicationName;
- private String mMainClass;
-
- // Application short name
- private String mCFBundleName = null;
-
- // Finder version, with default
- private String mCFBundleShortVersionString = "1.0";
-
- // Get Info string, optional
- private String mCFBundleGetInfoString = null;
-
- // Build number, optional
- private String mCFBundleVersion = null;
-
- // Help Book folder, optional
- private String mCFHelpBookFolder = null;
-
- // Help Book name, optional
- private String mCFHelpBookName = null;
-
- // StartOnMainThread, optional
- private Boolean mStartOnMainThread = null;
-
- // Explicit default: false
- private boolean mCFBundleAllowMixedLocalizations = false;
-
- // Explicit default: JavaApplicationStub
- private String mCFBundleExecutable = "JavaApplicationStub";
-
- // Explicit default: English
- private String mCFBundleDevelopmentRegion = "English";
-
- // Explicit default: APPL
- private final String mCFBundlePackageType = "APPL";
-
- // Explicit default: ????
- private String mCFBundleSignature = "????";
-
- // Explicit default: 1.3+
- private String mJVMVersion = "1.3+";
-
- // Explicit default: 6.0
- private final String mCFBundleInfoDictionaryVersion = "6.0";
-
- // Optional keys, with no defaults.
-
- private String mCFBundleIconFile = null;
- private String mSplashFile = null;
- private String mCFBundleIdentifier = null;
- private String mVMOptions = null; // Java VM options
- private String mWorkingDirectory = null; // Java Working Dir
- private String mArguments = null; // Java command line arguments
-
- // Class path and extra class path elements
- private List mClassPath = new ArrayList();
- private List mExtraClassPath = new ArrayList();
-
- // New in JarBundler 2.2.0; Tobias Bley ----------------
- private List mJVMArchs = new ArrayList();
- private List mLSArchitecturePriority = new ArrayList();
- private String mSUFeedURL = null;
- // -----------------------------------------------------
-
- // Java properties
- private Hashtable mJavaProperties = new Hashtable();
-
- // Document types
- private List mDocumentTypes = new LinkedList();
-
- // Services
- private List mServices = new LinkedList();
-
- // ================================================================================
-
- /**
- * Add a Java runtime property to the properties hashtable.
- */
-
- public void addJavaProperty(String prop, String val) {
- mJavaProperties.put(prop, val);
- }
-
- public Hashtable getJavaProperties() {
- return mJavaProperties;
- }
-
- // New in JarBundler 2.2.0; Tobias Bley ----------------
-
- public void addToJVMArchs(String s) {
- mJVMArchs.add(s);
- }
-
- public List getJVMArchs() {
- return mJVMArchs;
- }
-
- //------------------------------------------------------
-
- public void addToClassPath(String s)
- {
- mClassPath.add("$JAVAROOT/" + s);
- }
-
- public void addToExtraClassPath(String s) {
- mExtraClassPath.add(s);
- }
-
- public List getExtraClassPath() {
- return mExtraClassPath;
- }
-
- public DocumentType createDocumentType() {
- return new DocumentType();
- }
-
- public List getDocumentTypes() {
- return mDocumentTypes;
- }
-
- /**
- * Add a document type to the document type list.
- */
- public void addDocumentType(DocumentType documentType) {
- mDocumentTypes.add(documentType);
- }
-
- public Service createService() {
- return new Service();
- }
-
- public List getServices() {
- return mServices;
- }
-
- /**
- * Add a service to the services list.
- */
- public void addService(Service service) {
- mServices.add(service);
- }
-
- // ================================================================================
-
- public void setApplicationName(String s) {
- mApplicationName = s;
- }
-
- public String getApplicationName() {
- return mApplicationName;
- }
-
- // ================================================================================
- //
- // Bundle setters and getters
- //
-
- public void setCFBundleName(String s) {
-
- if (s.length() > 16)
- System.err
- .println("WARNING: 'shortname' is recommeded to be no more than 16 "
- + "charaters long. See usage notes.");
- mCFBundleName = s;
- }
-
- public String getCFBundleName() {
- if (mCFBundleName == null)
- return getApplicationName();
-
- return mCFBundleName;
- }
-
- public void setCFBundleVersion(String s) {
- mCFBundleVersion = s;
- }
-
- public String getCFBundleVersion() {
- return mCFBundleVersion;
- }
-
- public void setCFBundleInfoDictionaryVersion(String s) {
- // mCFBundleInfoDictionaryVersion = s;
- }
-
- public String getCFBundleInfoDictionaryVersion() {
- return mCFBundleInfoDictionaryVersion;
- }
-
- public void setCFBundleIdentifier(String s) {
- mCFBundleIdentifier = s;
- }
-
- public String getCFBundleIdentifier() {
- return mCFBundleIdentifier;
- }
-
- public void setCFBundleGetInfoString(String s) {
- mCFBundleGetInfoString = s;
- }
-
- public String getCFBundleGetInfoString() {
- if (mCFBundleGetInfoString == null)
- return getCFBundleShortVersionString();
-
- return mCFBundleGetInfoString;
- }
-
- public void setCFBundleShortVersionString(String s) {
- mCFBundleShortVersionString = s;
- }
-
- public String getCFBundleShortVersionString() {
- return mCFBundleShortVersionString;
- }
-
- public void setCFBundleIconFile(String s) {
- mCFBundleIconFile = s;
- }
-
- public String getCFBundleIconFile() {
- return mCFBundleIconFile;
- }
-
- public void setSplashFile(String s) {
- mSplashFile = s;
- }
-
- public String getSplashFile() {
- return mSplashFile;
- }
-
- public void setCFBundleAllowMixedLocalizations(boolean b) {
- mCFBundleAllowMixedLocalizations = b;
- }
-
- public boolean getCFBundleAllowMixedLocalizations() {
- return mCFBundleAllowMixedLocalizations;
- }
-
- public void setCFBundleExecutable(String s) {
- mCFBundleExecutable = s;
- }
-
- public String getCFBundleExecutable() {
- return mCFBundleExecutable;
- }
-
- public void setCFBundleDevelopmentRegion(String s) {
- mCFBundleDevelopmentRegion = s;
- }
-
- public String getCFBundleDevelopmentRegion() {
- return mCFBundleDevelopmentRegion;
- }
-
- public void setCFBundlePackageType(String s) {
- // mCFBundlePackageType = s;
- }
-
- public String getCFBundlePackageType() {
- return mCFBundlePackageType;
- }
-
- public void setCFBundleSignature(String s) {
- mCFBundleSignature = s;
- }
-
- public String getCFBundleSignature() {
- return mCFBundleSignature;
- }
-
- public void setCFBundleHelpBookFolder(String s) {
- mCFHelpBookFolder = s;
- }
-
- public String getCFBundleHelpBookFolder() {
- return mCFHelpBookFolder;
- }
-
- public void setCFBundleHelpBookName(String s) {
- mCFHelpBookName = s;
- }
-
- public String getCFBundleHelpBookName() {
- return mCFHelpBookName;
- }
-
-
- public void setStartOnMainThread(Boolean b) {
- mStartOnMainThread = b;
- }
-
- public Boolean getStartOnMainThread() {
- return mStartOnMainThread;
- }
-
- public void setMainClass(String s) {
- mMainClass = s;
- }
-
- public String getMainClass() {
- return mMainClass;
- }
-
- public void setJVMVersion(String s) {
- mJVMVersion = s;
- }
-
- public String getJVMVersion() {
- return mJVMVersion;
- }
-
- public void setVMOptions(String s) {
- mVMOptions = s;
- }
-
- public String getVMOptions() {
- return mVMOptions;
- }
-
- public void setWorkingDirectory(String s) {
- mWorkingDirectory = s;
- }
-
- public String getWorkingDirectory() {
- return mWorkingDirectory;
- }
-
- public void setArguments(String s) {
- mArguments = s;
- }
-
- public String getArguments() {
- return mArguments;
- }
-
- public List getClassPath() {
- return mClassPath;
- }
-
- // New in JarBundler 2.2.0; Tobias Bley ----------------------------------------------------
-
- /**
- * @param archs space separated archs, e.g. i386 x64_64 ppc
- */
-
- public void setJVMArchs(String archs) {
-
- // Use for 1.4 backwards compatability
- String[] tokens = archs.split("\\s+");
- for (int i=0; i<tokens.length; i++)
- mJVMArchs.add(tokens[i]);
-
- // 'java.util.Scanner' is available in JDK 1.5
- // Scanner s = new Scanner(archs);
- // s = s.useDelimiter("\\s+");
- // while (s.hasNext())
- // mJVMArchs.add(s.next());
- }
-
- public List getLSArchitecturePriority() {
- return mLSArchitecturePriority;
-
- }
-
- /**
- * @param lsArchitecturePriority space separated LSArchitecturePriority, e.g. i386 x64_64 ppc
- */
- public void setLSArchitecturePriority(String lsArchitecturePriority) {
-
- // Use for 1.4 backwards compatability
- String[] tokens = lsArchitecturePriority.split("\\s+");
- for (int i=0; i<tokens.length; i++)
- mLSArchitecturePriority.add(tokens[i]);
-
- // 'java.util.Scanner' is available in JDK 1.5
- // Scanner s = new Scanner(lsArchitecturePriority);
- // s = s.useDelimiter("\\s+");
- // while (s.hasNext())
- // mLSArchitecturePriority.add(s.next());
- }
-
- public String getSUFeedURL() {
- return mSUFeedURL;
- }
-
- public void setSUFeedURL(String suFeedURL) {
- this.mSUFeedURL = suFeedURL;
- }
-
- //------------------------------------------------------------------------------------------
-}
+++ /dev/null
-/*
- * Copyright (c) 2003, Seth J. Morabito <sethm@loomcom.com> All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.sourceforge.jarbundler;
-
-import java.lang.String;
-
-import java.io.File;
-
-import java.util.List;
-import java.util.Arrays;
-import java.util.ArrayList;
-
-/**
- * Represents an Info.plist DocumentType used for associating a document with
- * the application
- *
- * The Document Types allows you to specify which documents your finished
- * product can handle. You should list the application's primary document type
- * first because the document controller uses that type by default when the user
- * requests a new document.
- *
- * Name - The name of the document type.
- *
- * UTI - A list of Uniform Type Identifier (UTI) strings for the document. UTIs
- * are strings that uniquely identify abstract types. They can be used to
- * describe a file format or data type but can also be used to describe type
- * information for other sorts of entities, such as directories, volumes, or
- * packages. For more information on UTIs, see the header file UTType.h,
- * available as part of LaunchServices.framework in Mac OS X v10.3 and later.
- *
- *
- * Extensions - A list of the filename extensions for this document type. Don't
- * include the period in the extension.
- *
- *
- * OS Types - A list of four-letter codes for the document. These codes are
- * stored in the document's resources or information property list files.
- *
- *
- * MIME Types - A list of the Multipurpose Internet Mail Extensions (MIME) types
- * for the document. MIME types identify content types for Internet
- * applications.
- *
- *
- * Icon File - The name of the file that contains the document type's icon.
- *
- *
- * Role - A description of how the application uses the documents of this type.
- *
- * Editor - The application can display, edit, and save documents of this type.
- *
- * Viewer - The application can display, but not edit, documents of this type.
- *
- * Shell - The application provides runtime services for other processes for
- * example, a Java applet viewer.
- *
- * None - The application can neither display nor edit documents of this type
- * but instead uses them in some other way. For example, Sketch uses this role
- * to declare types it can export but not read.
- *
- *
- * Bundle - Specifies whether the document is a single file or a file bundle,
- * that is, a directory that is treated as a single document by certain
- * applications, such as the Finder.
- *
- *
- * <documenttype> name="Scan Project" extensions="scansort scanproj"
- * ostypes="fold disk fdrp" iconfile="document.icns" mimetypes="text/html
- * image/jpeg" role="editor" bundle="true" />
- *
- */
-
-
-public class DocumentType {
-
- private static final List EMPTYLIST = new ArrayList(0);
-
- /** Name. The name of the document type. */
- public String name = null;
-
- /**
- * Extensions. A list of the filename extensions for this document type.
- * Don't include the period in the extension.
- */
-
- public String[] extensions = null;
- /**
- * OS Types. A list of four-letter codes for the document. These codes are
- * stored in the document's resources or information property list files.
- */
-
- public String[] osTypes = null;
- /**
- * MIME Types. A list of the Multipurpose Internet Mail Extensions (MIME)
- * types for the document. MIME types identify content types for Internet
- * applications.
- */
-
- public String[] mimeTypes = null;
-
- /**
- * UTI. A list of Uniform Type Identifier (UTI) strings for the document.
- * UTIs are strings that uniquely identify abstract types. They can be used
- * to describe a file format or data type but can also be used to describe
- * type information for other sorts of entities, such as directories,
- * volumes, or packages. For more information on UTIs, see the header file
- * UTType.h, available as part of LaunchServices.framework in Mac OS X v10.3
- * and later.
- */
- public String[] UTIs = null;
-
- /**
- * Icon File. The name of the file that contains the document types icon.
- */
-
- public File iconFile = null;
- /**
- * Role. A description of how the application uses the documents of this
- * type. You can choose from four values:
- * <p>
- * Editor. The application can display, edit, and save documents of this
- * type.
- * <p>
- * Viewer. The application can display, but not edit, documents of this
- * type.
- * <p>
- * Shell. The application provides runtime services for other processesfor
- * example, a Java applet viewer.
- * <p>
- * None. The application can neither display nor edit documents of this type
- * but instead uses them in some other way. For example, Sketch uses this
- * role to declare types it can export but not read.
- */
-
- public String role = null;
-
- /**
- * Bundle. Specifies whether the document is a single file document or a
- * document bundle, that is, a directory that is treated as a single
- * document by certain applications, such as the Finder.
- */
-
- public boolean isBundle = false;
-
- // Document type name
- public void setName(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- // Extensions
- public void setExtensions(String extensions) {
- this.extensions = extensions.split("[\\s,]");
- }
-
- public List getExtensions() {
- return (extensions == null) ? EMPTYLIST : Arrays.asList(extensions);
- }
-
- // OS Types
- public void setOSTypes(String osTypes) {
- this.osTypes = osTypes.split("[\\s,]");
- }
-
- public List getOSTypes() {
- return (osTypes == null) ? EMPTYLIST : Arrays.asList(osTypes);
- }
-
- // mime-types
- public void setMimeTypes(String mimeTypes) {
- this.mimeTypes = mimeTypes.split("[\\s,]");
- }
-
- public List getMimeTypes() {
- return (mimeTypes == null) ? EMPTYLIST : Arrays.asList(this.mimeTypes);
- }
-
- // Uniform Type Identifiers
- public void setUTIs(String UTIs) {
- this.UTIs = UTIs.split("[\\s,]");
- }
-
- public List getUTIs() {
- return this.UTIs == null ? EMPTYLIST : Arrays.asList(this.UTIs);
- }
-
- // Document icon file
- public void setIconFile(File iconFile) {
- this.iconFile = iconFile;
- }
-
- public File getIconFile() {
- return iconFile;
- }
-
- // Document role
- public void setRole(String role) {
- this.role = role;
- }
-
- public String getRole() {
- return role;
- }
-
- // Is this document represented as a bundle
- public void setBundle(boolean isBundle) {
- this.isBundle = isBundle;
- }
-
- public boolean isBundle() {
- return isBundle;
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2003, Seth J. Morabito <sethm@loomcom.com> All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.sourceforge.jarbundler;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.FileList;
-import org.apache.tools.ant.types.FileSet;
-
-import java.lang.String;
-
-
-
-public class HelpBook extends MatchingTask {
-
- private String folderName = null;
- private String name = null;
- private String locale = null;
-
- private final List fileLists = new ArrayList();
- private final List fileSets = new ArrayList();
-
-
- // Help Book name
- public void setName(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
-
- // Help Book folder name
- public void setFolderName(String folderName) {
- this.folderName = folderName;
- }
-
- public String getFolderName() {
- return folderName;
- }
-
-
- // Help Book locale
- public void setLocale(String locale) {
- this.locale = locale;
- }
-
- public String getLocale() {
- return locale;
- }
-
- // Help Book files as a ANT FileList
- public void addFileList(FileList fileList) {
- fileLists.add(fileList);
- }
-
- public List getFileLists() {
- return fileLists;
- }
-
- // Help Book files as a ANT FileSet
- public void addFileSet(FileSet fileSet) {
- fileSets.add(fileSet);
- }
-
- public List getFileSets() {
- return fileSets;
- }
-
-}
+++ /dev/null
-/*
- * A Mac OS X Jar Bundler Ant Task.
- *
- *
- * Copyright (c) 2003, Seth J. Morabito <sethm@loomcom.com> All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.sourceforge.jarbundler;
-
-// This package's imports
-import net.sourceforge.jarbundler.AppBundleProperties;
-import net.sourceforge.jarbundler.DocumentType;
-import net.sourceforge.jarbundler.JavaProperty;
-import net.sourceforge.jarbundler.PropertyListWriter;
-
-// Java I/O
-import java.io.BufferedWriter;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-
-// Java Utility
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-// Apache Jakarta
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.FileScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-import org.apache.tools.ant.types.FileList;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.PatternSet;
-
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.taskdefs.Chmod;
-import org.apache.tools.ant.taskdefs.Delete;
-
-import org.apache.tools.ant.util.FileUtils;
-
-
-// Java language imports
-import java.lang.Boolean;
-import java.lang.Process;
-import java.lang.Runtime;
-import java.lang.String;
-import java.lang.System;
-
-/**
- * <p>
- * An ant task which creates a Mac OS X Application Bundle for a Java
- * application.
- * </p>
- *
- * <dl>
- * <dt>dir</dt>
- * <dd>The directory into which to put the new application bundle.</dd>
- * <dt>name</dt>
- * <dd>The name of the application bundle. Note that the maximum length of this
- * name is 16 characters, and it will be silently cropped if it is longer than
- * this.</dd>
- * <dt>mainclass</dt>
- * <dd>The main Java class to call when running the application.</dd>
- * </dl>
- *
- * <p>
- * One of the following three MUST be used:
- *
- * <ol>
- * <li>jars Space or comma-separated list of JAR files to include.; OR</li>
- * <li>One or more nested <jarfileset>s. These are normal ANT FileSets;
- * OR </li>
- * <li>One or more nested <jarfilelist>s. These are standard ANT
- * FileLists. </li>
- * </ol>
- *
- * <p>
- * Optional attributes:
- *
- * <p>
- * The following attributes are not required, but you can use them to override
- * default behavior.
- *
- * <dl>
- * <dt>verbose
- * <dd>If true, show more verbose output while running the task
- *
- * <dt>version
- * <dd>Version information about your application (e.g., "1.0")
- *
- * <dt>infostring
- * <dd>String to show in the "Get Info" dialog
- * </dl>
- *
- * These attributes control the fine-tuning of the "Mac OS X" look and feel.
- *
- * <dl>
- * <dt>arguments
- * <dd>Command line arguments. (no default)
- *
- * <dt>smalltabs
- * <dd>Use small tabs. (default "false") Deprecated under JVM 1.4.1
- *
- * <dt>antialiasedgraphics
- * <dd>Use anti-aliased graphics (default "false")
- *
- * <dt>antialiasedtext
- * <dd>Use anti-aliased text (default "false")
- *
- * <dt>bundleid
- * <dd>Unique identifier for this bundle, in the form of a Java package. No
- * default.
- *
- * <dt>buildnumber
- * <dd>Unique identifier for this build
- *
- * <dt>developmentregion
- * <dd>Development Region. Default "English".
- *
- * <dt>execs
- * <dd>Files to be copied into "Resources/MacOS" and made executable
- *
- * <dt>liveresize
- * <dd>Use "Live resizing" (default "false") Deprecated under JVM 1.4.1
- *
- *
- * <dt>growbox
- * <dd>Show growbox (default "true")
- *
- * <dt>growboxintrudes
- * <dd>Intruding growbox (default "false") Deprecated under JVM 1.4.1
- *
- * <dt>screenmenu
- * <dd>Put swing menu into Mac OS X menu bar.
- *
- * <dt>type
- * <dd>Bundle type (default "APPL")
- *
- * <dt>signature
- * <dd>Bundle Signature (default "????")
- *
- * <dt>stubfile
- * <dd>The Java Application Stub file to copy for your application (default
- * MacOS system stub file)
- * </dl>
- *
- * <p>
- * Rarely used optional attributes.
- * <dl>
- * <dt>chmod
- * <dd>Full path to the chmod command. This almost certainly does NOT need to
- * be set.
- * </dl>
- *
- * <p>
- * The task also supports nested <execfileset> and/or <execfilelist>
- * elements, and <resourcefileset> and/or <resourcefilelist>
- * elements, which are standard Ant FileSet and FileList elements. In the first
- * case, the referenced files are copied to the <code>Contents/MacOS</code>
- * directory and made executable, and in the second they are copied to the
- * <code>Contents/Resources</code> directory and not made executable. If you
- * winrces, note that in fact the files are installed in locations which have
- * the same relation to the <code>Contents/Resources</code> directory as the
- * files in the FileSet or FileList have to the 'dir' attribute. Thus in the
- * case:
- *
- * <pre>
- * <resourcefileset dir="builddir/architectures"
- * includes="ppc/*.jnilib"/>
- * </pre>
- *
- * <p>
- * the <code>*.jnilib</code> files will be installed in
- * <code>Contents/Resources/ppc</code>.
- *
- * <p>
- * The task supports a nested <javaproperty> element, which allows you to
- * specify further properties which are set for the JVM when the application is
- * launched. This takes a required <code>key</code> attribute, giving the
- * property key, plus an attribute giving the property value, which may be one
- * of <code>value</code>, giving the string value of the property,
- * <code>file</code>, setting the value of the property to be the absolute
- * path of the given file, or <code>path</code>, which sets the value to the
- * given path. If you are setting paths here, recall that, within the bundle,
- * <code>$APP_PACKAGE</code> is set to the root directory of the bundle (ie,
- * the path to the <code>foo.app</code> directory), and <code>$JAVAROOT</code>
- * to the directory <code>Contents/Resources/Java</code>.
- *
- * <p>
- * Minimum example:
- *
- * <pre>
- *
- * <jarbundler dir="release" name="Bar Project" mainclass="org.bar.Main"
- * jars="bin/Bar.jar" />
- * </pre>
- *
- * <p>
- * Using Filesets
- *
- * <pre>
- * <jarbundler dir="release" name="Bar Project" mainclass="org.bar.Main">
- * <jarfileset dir="bin">
- * <include name="*.jar" />
- * <exclude name="test.jar" />
- * </jarfileset>
- * <execfileset dir="execs">
- * <include name="**" />
- * </execfileset>
- * </jarbundler>
- * </pre>
- *
- * <p>
- * Much Longer example:
- * </p>
- *
- * <pre>
- * <jarbundler dir="release"
- * name="Foo Project"
- * mainclass="org.bar.Main"
- * version="1.0 b 1"
- * infostring="Foo Project (c) 2002"
- * type="APPL"
- * jars="bin/foo.jar bin/bar.jar"
- * execs="exec/foobar"
- * signature="????"
- * workingdirectory="temp"
- * icon="resources/foo.icns"
- * jvmversion="1.4.1+"
- * vmoptions="-Xmx256m"/>
- * </pre>
- *
- * http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/
- */
-public class JarBundler extends MatchingTask {
-
- private static final String DEFAULT_STUB = "/System/Library/Frameworks/JavaVM.framework/Versions/Current/Resources/MacOS/JavaApplicationStub";
-
- private static final String ABOUTMENU_KEY = "com.apple.mrj.application.apple.menu.about.name";
- private static final Set menuItems = new HashSet();
- private File mAppIcon;
-
- private File mRootDir;
-
- private final List mJavaFileLists = new ArrayList();
- private final List mJarFileSets = new ArrayList();
-
- private final List mExecFileLists = new ArrayList();
- private final List mExecFileSets = new ArrayList();
-
- private final List mResourceFileLists = new ArrayList();
- private final List mResourceFileSets = new ArrayList();
-
- private final List mJarFileLists = new ArrayList();
- private final List mJavaFileSets = new ArrayList();
-
- private final List mExtraClassPathFileLists = new ArrayList();
- private final List mExtraClassPathFileSets = new ArrayList();
-
- private final List mJarAttrs = new ArrayList();
-
- private final List mExecAttrs = new ArrayList();
-
- private final List mExtraClassPathAttrs = new ArrayList();
-
- private final List mHelpBooks = new ArrayList();
-
- private boolean mVerbose = false;
- private boolean mShowPlist = false;
-
- // Java properties used by Mac OS X Java applications
-
- private File mStubFile = new File(DEFAULT_STUB);
-
- private Boolean mAntiAliasedGraphics = null;
-
- private Boolean mAntiAliasedText = null;
-
- private Boolean mLiveResize = null;
-
- private Boolean mScreenMenuBar = null;
-
- private Boolean mGrowbox = null;
-
- private Boolean mGrowboxIntrudes = null;
-
- // The root of the application bundle
- private File bundleDir;
-
- // "Contents" directory
- private File mContentsDir;
-
- // "Contents/MacOS" directory
- private File mMacOsDir;
-
- // "Contents/Resources" directory
- private File mResourcesDir;
-
- // "Contents/Resources/Java" directory
- private File mJavaDir;
-
- // Full path to the 'chmod' command. Can be overridden
- // with the 'chmod' attribute. Won't cause any harm if
- // not set, or if this executable doesn't exist.
-
-
- private AppBundleProperties bundleProperties = new AppBundleProperties();
-
- // Ant file utilities
-
- private FileUtils mFileUtils = FileUtils.getFileUtils();
-
- /***************************************************************************
- * Retreive task attributes
- **************************************************************************/
-
- /**
- * Arguments to the
- *
- * @param s
- * The arguments to pass to the application being launched.
- */
- public void setArguments(String s) {
- bundleProperties.setArguments(s);
- }
-
- /**
- * Override the stub file path to build on non-MacOS platforms
- *
- * @param file
- * the path to the stub file
- */
- public void setStubFile(File file) {
- mStubFile = (file.exists()) ? file : new File(DEFAULT_STUB);
- bundleProperties.setCFBundleExecutable(file.getName());
- }
-
- /**
- * Setter for the "dir" attribute (required)
- */
- public void setDir(File f) {
- mRootDir = f;
- }
-
- /**
- * Setter for the "name" attribute (required) This attribute names the
- * output application bundle and asks as the CFBundleName if 'bundlename' is
- * not specified
- */
- public void setName(String s) {
- bundleProperties.setApplicationName(s);
- }
-
- /**
- * Setter for the "shortname" attribute (optional) This key identifies the
- * short name of the bundle. This name should be less than 16 characters
- * long and be suitable for displaying in the menu and the About box. The
- * name is (silently) cropped to this if necessary.
- */
- public void setShortName(String s) {
- bundleProperties.setCFBundleName(s);
- }
-
- /**
- * Setter for the "mainclass" attribute (required)
- */
- public void setMainClass(String s) {
- bundleProperties.setMainClass(s);
- }
-
- /**
- * Setter for the "WorkingDirectory" attribute (optional)
- */
- public void setWorkingDirectory(String s) {
- bundleProperties.setWorkingDirectory(s);
- }
-
- /**
- * Setter for the "icon" attribute (optional)
- */
-
- public void setIcon(File f) {
- mAppIcon = f;
- bundleProperties.setCFBundleIconFile(f.getName());
- }
-
- /**
- * Setter for the "splashfile" attribute (optional). If it is somewhere
- * in a jar file, which contains a Splash-Screen manifest entry,
- * use "$JAVAROOT/myjar.jar"
- */
-
- public void setSplashFile(String s) {
- bundleProperties.setSplashFile(s);
- }
-
- /**
- * Setter for the "bundleid" attribute (optional) This key specifies a
- * unique identifier string for the bundle. This identifier should be in the
- * form of a Java-style package name, for example com.mycompany.myapp. The
- * bundle identifier can be used to locate the bundle at runtime. The
- * preferences system uses this string to identify applications uniquely.
- *
- * No default.
- */
- public void setBundleid(String s) {
- bundleProperties.setCFBundleIdentifier(s);
- }
-
- /**
- * Setter for the "developmentregion" attribute(optional) Default "English".
- */
- public void setDevelopmentregion(String s) {
- bundleProperties.setCFBundleDevelopmentRegion(s);
- }
-
- /**
- * Setter for the "aboutmenuname" attribute (optional)
- */
- public void setAboutmenuname(String s) {
- bundleProperties.setCFBundleName(s);
- }
-
- /**
- * Setter for the "smalltabs" attribute (optional)
- */
- public void setSmallTabs(boolean b) {
- bundleProperties.addJavaProperty("com.apple.smallTabs", new Boolean(b)
- .toString());
- }
-
- /**
- * Setter for the "vmoptions" attribute (optional)
- */
- public void setVmoptions(String s) {
- bundleProperties.setVMOptions(s);
- }
-
- /**
- * Setter for the "antialiasedgraphics" attribute (optional)
- */
- public void setAntialiasedgraphics(boolean b) {
- mAntiAliasedGraphics = new Boolean(b);
- }
-
- /**
- * Setter for the "antialiasedtext" attribute (optional)
- */
- public void setAntialiasedtext(boolean b) {
- mAntiAliasedText = new Boolean(b);
- }
-
- /**
- * Setter for the "screenmenu" attribute (optional)
- */
- public void setScreenmenu(boolean b) {
- mScreenMenuBar = new Boolean(b);
- }
-
- /**
- * Setter for the "growbox" attribute (optional)
- */
- public void setGrowbox(boolean b) {
- mGrowbox = new Boolean(b);
- }
-
- /**
- * Setter for the "growboxintrudes" attribute (optional)
- */
- public void setGrowboxintrudes(boolean b) {
- mGrowboxIntrudes = new Boolean(b);
- }
-
- /**
- * Setter for the "liveresize" attribute (optional)
- */
- public void setLiveresize(boolean b) {
- mLiveResize = new Boolean(b);
- }
-
- /**
- * Setter for the "type" attribute (optional)
- */
- public void setType(String s) {
- bundleProperties.setCFBundlePackageType(s);
- }
-
- /**
- * Setter for the "signature" attribute (optional)
- */
- public void setSignature(String s) {
- bundleProperties.setCFBundleSignature(s);
- }
-
- /**
- * Setter for the "jvmversion" attribute (optional)
- */
- public void setJvmversion(String s) {
- bundleProperties.setJVMVersion(s);
- }
-
- // New in JarBundler 2.2.0; Tobias Bley ----------------
-
- /**
- * Setter for the "JVMArchs" attribute (optional)
- */
- public void setJvmArchs(String s) {
- bundleProperties.setJVMArchs(s);
- }
-
- /**
- * Setter for the "LSArchitecturePriority" attribute (optional)
- */
- public void setLSArchitecturePriority(String s) {
- bundleProperties.setLSArchitecturePriority(s);
- }
-
- //-------------------------------------------------------
-
- /**
- * Setter for the "startonmainthread" attribute (optional)
- */
- public void setStartonmainthread(boolean b) {
- bundleProperties.setStartOnMainThread(new Boolean(b));
- }
-
- /**
- * Setter for the "infostring" attribute (optional) This key identifies a
- * human-readable plain text string displaying the copyright information for
- * the bundle. The Finder displays this information in the Info window of
- * the bundle. (This string was also known as the long version string in Mac
- * OS 9). The format of the key should be of the following format: "©
- * Great Software, Inc, 1999". You can localize this string by including it
- * in the InfoPlist.strings file of the appropriate .lproj directory.
- */
-
- public void setInfoString(String s) {
- bundleProperties.setCFBundleGetInfoString(s);
- }
-
- /**
- * Setter for the "shortinfostring" attribute (optional) This key identifies
- * the marketing version of the bundle. The marketing version is a string
- * that usually displays the major and minor version of the bundle. This
- * string is usually of the form n.n.n where n is a number. The first number
- * is the major version number of the bundle. The second and third numbers
- * are minor revision numbers. You may omit minor revision numbers as
- * appropriate. The value of this key is displayed in the default About box
- * for Cocoa applications.
- *
- * The value for this key differs from the value for "CFBundleVersion",
- * which identifies a specific build number. The CFBundleShortVersionString
- * value represents a more formal version that does not change with every
- * build.
- */
- public void setShortInfoString(String s) {
- setVersion(s);
- }
-
- /**
- * Setter for the "verbose" attribute (optional)
- */
- public void setVerbose(boolean verbose) {
- this.mVerbose = verbose;
- }
- public void setShowPlist(boolean showPlist) {
- this.mShowPlist = showPlist;
- }
-
-
-
-
- /**
- * Setter for the "buildnumber" attribute (optional) This key specifies the
- * exact build version of the bundle. This string is usually of the form
- * nn.n.nxnnn where n is a digit and x is a character from the set [abdf].
- * The first number is the major version number of the bundle and can
- * contain one or two digits to represent a number in the range 0-99. The
- * second and third numbers are minor revision numbers and must be a single
- * numeric digit. The fourth set of digits is the specific build number for
- * the release.
- *
- * You may omit minor revision and build number information as appropriate.
- * You may also omit major and minor revision information and specify only a
- * build number. For example, valid version numbers include: 1.0.1,
- * 1.2.1b10, 1.2d200, d125, 101, and 1.0.
- *
- * The value of this key typically changes between builds and is displayed
- * in the Cocoa About panel in parenthesis. To specify the version
- * information of a released bundle, use the CFBundleShortVersionString key.
- */
- public void setBuild(String s) {
- bundleProperties.setCFBundleVersion(s);
- }
-
- /**
- * Setter for the version attribute (optional). It is this property, not
- * CFBundleVersion, which should receive the `short' version string. See for
- * example
- * <http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/>
- */
- public void setVersion(String s) {
- bundleProperties.setCFBundleShortVersionString(s);
- }
-
- public void setHelpBookFolder(String s) {
- bundleProperties.setCFBundleHelpBookFolder(s);
- }
-
- public void setHelpBookName(String s) {
- bundleProperties.setCFBundleHelpBookName(s);
- }
-
-
- /**
- * Setter for the "jars" attribute (required if no "jarfileset" is present)
- */
- public void setJars(String s) {
- PatternSet patset = new PatternSet();
- patset.setIncludes(s);
-
- String[] jarNames = patset.getIncludePatterns(getProject());
-
- for (int i = 0; i < jarNames.length; i++)
- mJarAttrs.add(getProject().resolveFile(jarNames[i]));
- }
-
- /**
- * Setter for the "jar" attribute (required if no "jarfileset" is present)
- */
- public void setJar(File s) {
- mJarAttrs.add(s);
- }
-
- /**
- * Setter for the "execs" attribute (optional)
- */
- public void setExecs(String s) {
- PatternSet patset = new PatternSet();
- patset.setIncludes(s);
-
- String[] execNames = patset.getIncludePatterns(getProject());
-
- for (int i = 0; i < execNames.length; i++) {
- File f = new File(execNames[i]);
- mExecAttrs.add(f);
- }
- }
-
- /**
- * Setter for the "extraclasspath" attribute (optional)
- */
- public void setExtraclasspath(String s) {
- if (s == null || s.trim().equals("")) return;
- PatternSet patset = new PatternSet();
- patset.setIncludes(s);
-
- String[] cpNames = patset.getIncludePatterns(getProject());
-
- for (int i = 0; i < cpNames.length; i++) {
- File f = new File(cpNames[i]);
- mExtraClassPathAttrs.add(f);
- }
- }
-
- /**
- * Set the 'chmod' executable.
- */
- public void setChmod(String s) {
- log("The \"chmod\" attribute has deprecaited, using the ANT Chmod task internally");
- }
-
- /***************************************************************************
- * Nested tasks - derived from FileList and FileSet
- **************************************************************************/
-
- public void addJarfileset(FileSet fs) {
- mJarFileSets.add(fs);
- }
-
- public void addJarfilelist(FileList fl) {
- mJarFileLists.add(fl);
- }
-
- public void addExecfileset(FileSet fs) {
- mExecFileSets.add(fs);
- }
-
- public void addExecfilelist(FileList fl) {
- mExecFileLists.add(fl);
- }
-
- public void addResourcefileset(FileSet fs) {
- mResourceFileSets.add(fs);
- }
-
- public void addResourcefilelist(FileList fl) {
- mResourceFileLists.add(fl);
- }
-
- public void addJavafileset(FileSet fs) {
- mJavaFileSets.add(fs);
- }
-
- public void addJavafilelist(FileList fl) {
- mJavaFileLists.add(fl);
- }
-
- public void addExtraclasspathfileset(FileSet fs) {
- mExtraClassPathFileSets.add(fs);
- }
-
- public void addExtraclasspathfilelist(FileList fl) {
- mExtraClassPathFileLists.add(fl);
- }
-
-
- /***************************************************************************
- * Nested tasks - new tasks with custom attributes
- **************************************************************************/
-
-
- public void addConfiguredJavaProperty(JavaProperty javaProperty)
- throws BuildException {
-
- String name = javaProperty.getName();
- String value = javaProperty.getValue();
-
- if ((name == null) || (value == null))
- throw new BuildException(
- "'<javaproperty>' must have both 'name' and 'value' attibutes");
-
- bundleProperties.addJavaProperty(name, value);
- }
-
- public void addConfiguredDocumentType(DocumentType documentType) throws BuildException {
-
- String name = documentType.getName();
- String role = documentType.getRole();
- List osTypes = documentType.getOSTypes();
- List extensions = documentType.getExtensions();
- List mimeTypes = documentType.getMimeTypes();
-
- if ((name == null) || (role == null))
- throw new BuildException(
- "'<documenttype>' must have both a 'name' and a 'role' attibute");
-
- if ((osTypes.isEmpty()) && (extensions.isEmpty()) && (mimeTypes.isEmpty()))
- throw new BuildException(
- "'<documenttype>' of \""
- + name
- + "\" must have 'osTypes' or 'extensions' or 'mimeTypes'");
-
- bundleProperties.addDocumentType(documentType);
- }
-
- public void addConfiguredService(Service service) {
-
- //if (service.getPortName() == null)
- // throw new BuildException("\"<service>\" must have a \"portName\" attribute");
-
- if (service.getMessage() == null)
- throw new BuildException("\"<service>\" must have a \"message\" attribute");
-
- String menuItem = service.getMenuItem();
- if (menuItem == null)
- throw new BuildException("\"<service>\" must have a \"menuItem\" attribute");
- if (!menuItems.add(menuItem))
- throw new BuildException("\"<service>\" \"menuItem\" value must be unique");
-
- if (service.getSendTypes().isEmpty() && service.getReturnTypes().isEmpty())
- throw new BuildException("\"<service>\" must have either a \"sendTypes\" attribute, a \"returnTypes\" attribute or both");
-
- String keyEquivalent = service.getKeyEquivalent();
- if ((keyEquivalent != null) && (1 != keyEquivalent.length()))
- throw new BuildException("\"<service>\" \"keyEquivalent\" must be one character if present");
-
- String timeoutString = service.getTimeout();
- if (timeoutString != null) {
- long timeout = -1;
- try {
- timeout = Long.parseLong(timeoutString);
- } catch (NumberFormatException nfe) {
- throw new BuildException("\"<service>\" \"timeout\" must be a positive integral number");
- }
- if (timeout < 0)
- throw new BuildException("\"<service>\" \"timeout\" must not be negative");
- }
-
- bundleProperties.addService(service);
- }
-
- public void addConfiguredHelpBook(HelpBook helpBook) {
-
- // Validity check on 'foldername'
- if (helpBook.getFolderName() == null) {
- if (bundleProperties.getCFBundleHelpBookFolder() == null)
- throw new BuildException("Either the '<helpbook>' attribute 'foldername' or the '<jarbundler>' attribute 'helpbookfolder' must be defined");
- helpBook.setFolderName(bundleProperties.getCFBundleHelpBookFolder());
- }
-
- // Validity check on 'title'
- if (helpBook.getName() == null) {
- if (bundleProperties.getCFBundleHelpBookName() == null)
- throw new BuildException("Either the '<helpbook>' attribute 'name' or the '<jarbundler>' attribute 'helpbookname' must be defined");
- helpBook.setName(bundleProperties.getCFBundleHelpBookName());
- }
-
- // Make sure some file were selected...
- List fileLists = helpBook.getFileLists();
- List fileSets = helpBook.getFileSets();
-
- if ( fileLists.isEmpty() && fileSets.isEmpty() )
- throw new BuildException("The '<helpbook>' task must have either " +
- "'<fileset>' or '<filelist>' nested tags");
-
-
- mHelpBooks.add(helpBook);
- }
-
-
-
- /***************************************************************************
- * Execute the task
- **************************************************************************/
-
- /**
- * The method executing the task
- */
-
- public void execute() throws BuildException {
-
- // Delete any existing Application bundle directory structure
-
- bundleDir = new File(mRootDir, bundleProperties.getApplicationName() + ".app");
-
- if (bundleDir.exists()) {
- Delete deleteTask = new Delete();
- deleteTask.setProject(getProject());
- deleteTask.setDir(bundleDir);
- deleteTask.execute();
- }
-
- // Validate - look for required attributes
- // ///////////////////////////////////////////
-
- if (mRootDir == null)
- throw new BuildException("Required attribute \"dir\" is not set.");
-
- if (mJarAttrs.isEmpty() && mJarFileSets.isEmpty()
- && mJarFileLists.isEmpty())
- throw new BuildException("Either the attribute \"jar\" must "
- + "be set, or one or more jarfilelists or "
- + "jarfilesets must be added.");
-
- if (!mJarAttrs.isEmpty()
- && (!mJarFileSets.isEmpty() || !mJarFileLists.isEmpty()))
- throw new BuildException(
- "Cannot set both the attribute "
- + "\"jars\" and use jar filesets/filelists. Use only one or the other.");
-
- if (bundleProperties.getApplicationName() == null)
- throw new BuildException("Required attribute \"name\" is not set.");
-
- if (bundleProperties.getMainClass() == null)
- throw new BuildException(
- "Required attribute \"mainclass\" is not set.");
-
- // /////////////////////////////////////////////////////////////////////////////////////
-
- // Set up some Java properties
-
- // About Menu, deprecated under 1.4+
- if (useOldPropertyNames())
- bundleProperties.addJavaProperty(ABOUTMENU_KEY, bundleProperties
- .getCFBundleName());
-
- // Anti Aliased Graphics, renamed in 1.4+
- String antiAliasedProperty = useOldPropertyNames()
- ? "com.apple.macosx.AntiAliasedGraphicsOn"
- : "apple.awt.antialiasing";
-
- if (mAntiAliasedGraphics != null)
- bundleProperties.addJavaProperty(antiAliasedProperty,
- mAntiAliasedGraphics.toString());
-
- // Anti Aliased Text, renamed in 1.4+
- String antiAliasedTextProperty = useOldPropertyNames()
- ? "com.apple.macosx.AntiAliasedTextOn"
- : "apple.awt.textantialiasing";
-
- if (mAntiAliasedText != null)
- bundleProperties.addJavaProperty(antiAliasedTextProperty,
- mAntiAliasedText.toString());
-
- // Live Resize, deprecated under 1.4+
- if (useOldPropertyNames() && (mLiveResize != null))
- bundleProperties.addJavaProperty(
- "com.apple.mrj.application.live-resize", mLiveResize
- .toString());
-
- // Screen Menu Bar, renamed in 1.4+
- String screenMenuBarProperty = useOldPropertyNames()
- ? "com.apple.macos.useScreenMenuBar"
- : "apple.laf.useScreenMenuBar";
-
- if (mScreenMenuBar != null)
- bundleProperties.addJavaProperty(screenMenuBarProperty,
- mScreenMenuBar.toString());
-
- // Growbox, added with 1.4+
- if ((useOldPropertyNames() == false) && (mGrowbox != null))
- bundleProperties.addJavaProperty("apple.awt.showGrowBox", mGrowbox
- .toString());
-
- // Growbox Intrudes, deprecated under 1.4+
- if (useOldPropertyNames() && (mGrowboxIntrudes != null))
- bundleProperties.addJavaProperty(
- "com.apple.mrj.application.growbox.intrudes",
- mGrowboxIntrudes.toString());
-
- if (!mRootDir.exists()
- || (mRootDir.exists() && !mRootDir.isDirectory()))
- throw new BuildException(
- "Destination directory specified by \"dir\" "
- + "attribute must already exist.");
-
- if (bundleDir.exists())
- throw new BuildException("The directory/bundle \""
- + bundleDir.getName()
- + "\" already exists, cannot continue.");
-
- // Status message
- log("Creating application bundle: " + bundleDir);
-
- if (!bundleDir.mkdir())
- throw new BuildException("Unable to create bundle: " + bundleDir);
-
- // Make the Contents directory
- mContentsDir = new File(bundleDir, "Contents");
-
- if (!mContentsDir.mkdir())
- throw new BuildException("Unable to create directory "
- + mContentsDir);
-
- // Make the "MacOS" directory
- mMacOsDir = new File(mContentsDir, "MacOS");
-
- if (!mMacOsDir.mkdir())
- throw new BuildException("Unable to create directory " + mMacOsDir);
-
- // Make the Resources directory
- mResourcesDir = new File(mContentsDir, "Resources");
-
- if (!mResourcesDir.mkdir())
- throw new BuildException("Unable to create directory "
- + mResourcesDir);
-
- // Make the Resources/Java directory
- mJavaDir = new File(mResourcesDir, "Java");
-
- if (!mJavaDir.mkdir())
- throw new BuildException("Unable to create directory " + mJavaDir);
-
- // Copy icon file to resource dir. If no icon parameter
- // is supplied, the default icon will be used.
-
- if (mAppIcon != null) {
-
-
- try {
- File dest = new File(mResourcesDir, mAppIcon.getName());
-
- if(mVerbose)
- log("Copying application icon file to \"" + bundlePath(dest) + "\"");
-
- mFileUtils.copyFile(mAppIcon, dest);
- } catch (IOException ex) {
- throw new BuildException("Cannot copy icon file: " + ex);
- }
- }
-
- // Copy document type icons, if any, to the resource dir
- try {
- Iterator itor = bundleProperties.getDocumentTypes().iterator();
-
- while (itor.hasNext()) {
- DocumentType documentType = (DocumentType) itor.next();
- File iconFile = documentType.getIconFile();
- if (iconFile != null) {
- File dest = new File(mResourcesDir, iconFile.getName());
- if(mVerbose)
- log("Copying document icon file to \"" + bundlePath(dest) + "\"");
- mFileUtils.copyFile(iconFile, dest);
- }
- }
- } catch (IOException ex) {
- throw new BuildException("Cannot copy document icon file: " + ex);
- }
-
- // Copy application jar(s) from the "jars" attribute (if any)
- processJarAttrs();
-
- // Copy application jar(s) from the nested jarfileset element(s)
- processJarFileSets();
-
- // Copy application jar(s) from the nested jarfilelist element(s)
- processJarFileLists();
-
- // Copy executable(s) from the "execs" attribute (if any)
- processExecAttrs();
-
- // Copy executable(s) from the nested execfileset element(s)
- processExecFileSets();
-
- // Copy executable(s) from the nested execfilelist element(s)
- processExecFileLists();
-
- // Copy resource(s) from the nested resourcefileset element(s)
- processResourceFileSets();
-
- // Copy resource(s) from the nested javafileset element(s)
- processJavaFileSets();
-
- // Copy resource(s) from the nested resourcefilelist element(s)
- processResourceFileLists();
-
- // Copy resource(s) from the nested javafilelist element(s)
- processJavaFileLists();
-
- // Add external classpath references from the extraclasspath attributes
- processExtraClassPathAttrs();
-
- // Add external classpath references from the nested
- // extraclasspathfileset element(s)
- processExtraClassPathFileSets();
-
- // Add external classpath references from the nested
- // extraclasspathfilelist attributes
- processExtraClassPathFileLists();
-
- // Copy HelpBooks into place
- copyHelpBooks();
-
- // Copy the JavaApplicationStub file from the Java system directory to
- // the MacOS directory
- copyApplicationStub();
-
- // Create the Info.plist file
- writeInfoPlist();
-
- // Create the PkgInfo file
- writePkgInfo();
-
- // Done!
- }
-
- /***************************************************************************
- * Private utility methods.
- **************************************************************************/
-
- private void setExecutable(File f) {
-
- Chmod chmodTask = new Chmod();
- chmodTask.setProject(getProject());
- chmodTask.setFile(f);
- chmodTask.setPerm("ugo+rx");
-
- if (mVerbose)
- log("Setting \"" + bundlePath(f) + "\" to executable");
-
- chmodTask.execute();
-
- }
-
- /**
- * Utility method to determine whether this app bundle is targeting a 1.3 or
- * 1.4 VM. The Mac OS X 1.3 VM uses different Java property names from the
- * 1.4 VM to hint at native Mac OS X look and feel options. For example, on
- * 1.3 the Java property to tell the VM to display Swing menu bars as screen
- * menus is "com.apple.macos.useScreenMenuBar". Under 1.4, it becomes
- * "apple.laf.useScreenMenuBar". Such is the price of progress, I suppose.
- *
- * Obviously, this logic may need refactoring in the future.
- */
-
- private boolean useOldPropertyNames() {
- return (bundleProperties.getJVMVersion().startsWith("1.3"));
- }
-
- private void processJarAttrs() throws BuildException {
-
- try {
-
- for (Iterator jarIter = mJarAttrs.iterator(); jarIter.hasNext();) {
- File src = (File) jarIter.next();
- File dest = new File(mJavaDir, src.getName());
-
- if (mVerbose)
- log("Copying JAR file to \"" + bundlePath(dest) + "\"");
-
-
- mFileUtils.copyFile(src, dest);
- bundleProperties.addToClassPath(dest.getName());
- }
- } catch (IOException ex) {
- throw new BuildException("Cannot copy jar file: " + ex);
- }
- }
-
- private void processJarFileSets() throws BuildException {
-
- for (Iterator jarIter = mJarFileSets.iterator(); jarIter.hasNext();) {
-
- FileSet fs = (FileSet) jarIter.next();
-
- Project p = fs.getProject();
- File srcDir = fs.getDir(p);
- FileScanner ds = fs.getDirectoryScanner(p);
- fs.setupDirectoryScanner(ds, p);
- ds.scan();
-
- String[] files = ds.getIncludedFiles();
-
- try {
-
- for (int i = 0; i < files.length; i++) {
- String fileName = files[i];
- File src = new File(srcDir, fileName);
- File dest = new File(mJavaDir, fileName);
-
- if (mVerbose)
- log("Copying JAR file to \"" + bundlePath(dest) + "\"");
-
- mFileUtils.copyFile(src, dest);
- bundleProperties.addToClassPath(fileName);
- }
-
- } catch (IOException ex) {
- throw new BuildException("Cannot copy jar file: " + ex);
- }
- }
- }
-
- private void processJarFileLists() throws BuildException {
-
- for (Iterator jarIter = mJarFileLists.iterator(); jarIter.hasNext();) {
- FileList fl = (FileList) jarIter.next();
- Project p = fl.getProject();
- File srcDir = fl.getDir(p);
- String[] files = fl.getFiles(p);
-
- try {
-
- for (int i = 0; i < files.length; i++) {
- String fileName = files[i];
- File src = new File(srcDir, fileName);
- File dest = new File(mJavaDir, fileName);
-
- if (mVerbose)
- log("Copying JAR file to \"" + bundlePath(dest) + "\"");
-
-
- mFileUtils.copyFile(src, dest);
- bundleProperties.addToClassPath(fileName);
- }
- } catch (IOException ex) {
- throw new BuildException("Cannot copy jar file: " + ex);
- }
- }
- }
-
- private void processExtraClassPathAttrs() throws BuildException {
-
- for (Iterator jarIter = mExtraClassPathAttrs.iterator(); jarIter
- .hasNext();) {
- File src = (File) jarIter.next();
- String path = src.getPath().replace(File.separatorChar, '/');
- bundleProperties.addToExtraClassPath(path);
- }
- }
-
- private void processExtraClassPathFileSets() throws BuildException {
-
- for (Iterator jarIter = mExtraClassPathFileSets.iterator(); jarIter
- .hasNext();) {
- FileSet fs = (FileSet) jarIter.next();
- Project p = fs.getProject();
- File srcDir = fs.getDir(p);
- FileScanner ds = fs.getDirectoryScanner(p);
- fs.setupDirectoryScanner(ds, p);
- ds.scan();
-
- String[] files = ds.getIncludedFiles();
-
- for (int i = 0; i < files.length; i++) {
- File f = new File(srcDir, files[i]);
- String path = f.getPath().replace(File.separatorChar, '/');
- bundleProperties.addToExtraClassPath(path);
- }
- }
- }
-
- private void processExtraClassPathFileLists() throws BuildException {
-
- for (Iterator jarIter = mExtraClassPathFileLists.iterator(); jarIter
- .hasNext();) {
- FileList fl = (FileList) jarIter.next();
- Project p = fl.getProject();
- File srcDir = fl.getDir(p);
- String[] files = fl.getFiles(p);
-
- for (int i = 0; i < files.length; i++) {
- File f = new File(srcDir, files[i]);
- String path = f.getPath().replace(File.separatorChar, '/');
- bundleProperties.addToExtraClassPath(path);
- }
- }
- }
-
- private void processExecAttrs() throws BuildException {
-
- try {
-
- for (Iterator execIter = mExecAttrs.iterator(); execIter.hasNext();) {
- File src = (File) execIter.next();
- File dest = new File(mMacOsDir, src.getName());
-
- if (mVerbose)
- log("Copying exec file to \"" + bundlePath(dest) + "\"");
-
-
- mFileUtils.copyFile(src, dest);
- setExecutable(dest);
- }
- } catch (IOException ex) {
- throw new BuildException("Cannot copy exec file: " + ex);
- }
- }
-
- // Methods for copying FileSets into the application bundle ///////////////////////////////
-
- // Files for the Contents/MacOS directory
- private void processExecFileSets() {
- processCopyingFileSets(mExecFileSets, mMacOsDir, true);
- }
-
- // Files for the Contents/Resources directory
- private void processResourceFileSets() {
- processCopyingFileSets(mResourceFileSets, mResourcesDir, false);
- }
-
- // Files for the Contents/Resources/Java directory
- private void processJavaFileSets() {
- processCopyingFileSets(mJavaFileSets, mJavaDir, false);
- }
-
- private void processCopyingFileSets(List fileSets, File targetdir, boolean setExec) {
-
- for (Iterator execIter = fileSets.iterator(); execIter.hasNext();) {
- FileSet fs = (FileSet) execIter.next();
- Project p = fs.getProject();
- File srcDir = fs.getDir(p);
- FileScanner ds = fs.getDirectoryScanner(p);
- fs.setupDirectoryScanner(ds, p);
- ds.scan();
-
- String[] files = ds.getIncludedFiles();
-
- if (files.length == 0) {
- // this is probably an error -- warn about it
- System.err
- .println("WARNING: fileset for copying from directory "
- + srcDir + ": no files found");
- } else {
- try {
- for (int i = 0; i < files.length; i++) {
- String fileName = files[i];
- File src = new File(srcDir, fileName);
- File dest = new File(targetdir, fileName);
-
- if (mVerbose)
- log("Copying "
- + (setExec ? "exec" : "resource")
- + " file to \"" + bundlePath(dest) +"\"");
-
- mFileUtils.copyFile(src, dest);
- if (setExec)
- setExecutable(dest);
- }
- } catch (IOException ex) {
- throw new BuildException("Cannot copy file: " + ex);
- }
- }
- }
- }
-
- // Methods for copying FileLists into the application bundle /////////////////////////////
-
- // Files for the Contents/MacOS directory
- private void processExecFileLists() throws BuildException {
- processCopyingFileLists(mExecFileLists, mMacOsDir, true);
- }
-
- // Files for the Contents/Resources directory
- private void processResourceFileLists() throws BuildException {
- processCopyingFileLists(mResourceFileLists, mResourcesDir, false);
- }
-
- // Files for the Contents/Resources/Java directory
- private void processJavaFileLists() throws BuildException {
- processCopyingFileLists(mJavaFileLists, mJavaDir, false);
- }
-
- private void processCopyingFileLists(List fileLists, File targetDir, boolean setExec) throws BuildException {
-
- for (Iterator execIter = fileLists.iterator(); execIter.hasNext();) {
-
- FileList fl = (FileList) execIter.next();
- Project p = fl.getProject();
- File srcDir = fl.getDir(p);
- String[] files = fl.getFiles(p);
-
- if (files.length == 0) {
- // this is probably an error -- warn about it
- System.err.println("WARNING: filelist for copying from directory "
- + srcDir + ": no files found");
- } else {
- try {
- for (int i = 0; i < files.length; i++) {
- String fileName = files[i];
- File src = new File(srcDir, fileName);
- File dest = new File(targetDir, fileName);
-
- if (mVerbose)
- log("Copying "
- + (setExec ? "exec" : "resource")
- + " file to \"" + bundlePath(dest) +"\"");
-
- mFileUtils.copyFile(src, dest);
- if (setExec)
- setExecutable(dest);
- }
- } catch (IOException ex) {
- throw new BuildException("Cannot copy jar file: " + ex);
- }
- }
- }
- }
-
-
-
- private void copyHelpBooks() {
-
- for (Iterator itor = mHelpBooks.iterator(); itor.hasNext();) {
-
- HelpBook helpBook = (HelpBook)itor.next();
-
- String folderName = helpBook.getFolderName();
- String name = helpBook.getName();
- String locale = helpBook.getLocale();
-
- List fileLists = helpBook.getFileLists();
- List fileSets = helpBook.getFileSets();
-
-
- File helpBookDir = null;
-
- if (locale == null) {
-
- // Set the Bundle entries for a nonlocalized Help Book
- if (folderName != null)
- bundleProperties.setCFBundleHelpBookFolder(folderName);
-
- if (name != null)
- bundleProperties.setCFBundleHelpBookName(name);
-
- // The non-localized Help Book is top level "/Resources"
- helpBookDir = new File(mResourcesDir, folderName);
- helpBookDir.mkdir();
-
- if(mVerbose)
- log("Creating Help Book at \"" +
- bundlePath(helpBookDir) + "\"");
-
-
- } else {
-
- // The localized Help Book is "/Resources/locale.lproj"
-
- File lproj = new File(mResourcesDir, locale + ".lproj");
- lproj.mkdir();
- helpBookDir = new File(lproj, folderName);
- helpBookDir.mkdir();
-
- if(mVerbose)
- log("Creating Help Book for \"" + locale +
- "\" at \"" + bundlePath(helpBookDir) + "\"");
-
- // Create a local file to override the Bundle settings
- File infoPList = new File(lproj, "InfoPlist.strings");
- PrintWriter writer = null;
- try {
- writer = new PrintWriter(new FileWriter(infoPList));
- writer.println("CFBundleHelpBookFolder = \"" + folderName + "\";");
- writer.println("CFBundleHelpBookName = \"" + name + "\";");
- writer.println("CFBundleName = \"" + bundleProperties.getCFBundleName() + "\";");
- } catch (IOException ioe) {
- throw new BuildException("IOException in writing Help Book locale: " + locale);
- } finally {
- mFileUtils.close(writer);
- }
- }
-
- // Write the Help Book source files into the bundle
-
- processCopyingFileSets(fileSets, helpBookDir, false);
- processCopyingFileLists(fileLists, helpBookDir, false);
-
- }
- }
-
-
-
-
- // Copy the application stub into the bundle
- // /////////////////////////////////////////////
-
- private void copyApplicationStub() throws BuildException {
-
- File newStubFile = new File(mMacOsDir, bundleProperties.getCFBundleExecutable());
-
- if (mVerbose)
- log("Copying Java application stub to \"" + bundlePath(newStubFile) + "\"");
-
- try {
- mFileUtils.copyFile(mStubFile, newStubFile);
- } catch (IOException ex) {
- throw new BuildException("Cannot copy Java Application Stub: " + ex);
- }
-
- // Set the permissions on the stub file to executable
-
- setExecutable(newStubFile);
- }
-
- private void writeInfoPlist() throws BuildException {
- PropertyListWriter listWriter = new PropertyListWriter(bundleProperties);
- File infoPlist = new File(mContentsDir, "Info.plist");
-
- listWriter.writeFile(infoPlist);
-
- if (mVerbose)
- log("Creating \"" + bundlePath(infoPlist) + "\" file");
-
-
- if (mShowPlist) {
- try {
- BufferedReader in = new BufferedReader(new FileReader(infoPlist));
- String str;
- while ((str = in.readLine()) != null)
- log(str);
- in.close();
- } catch (IOException e) {
- throw new BuildException(e);
- }
- }
- }
-
-
- //
- // Write the PkgInfo file into the application bundle
- //
-
- private void writePkgInfo() throws BuildException {
- File pkgInfo = new File(mContentsDir, "PkgInfo");
- PrintWriter writer = null;
-
- try {
- writer = new PrintWriter(new BufferedWriter(new FileWriter(pkgInfo)));
- writer.print(bundleProperties.getCFBundlePackageType());
- writer.println(bundleProperties.getCFBundleSignature());
- writer.flush();
- } catch (IOException ex) {
- throw new BuildException("Cannot create PkgInfo file: " + ex);
- } finally {
- mFileUtils.close(writer);
- }
- }
-
- private String bundlePath(File bundleFile) {
-
- String rootPath = bundleDir.getAbsolutePath();
- String thisPath = bundleFile.getAbsolutePath();
-
- return thisPath.substring(rootPath.length());
-
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2003, Seth J. Morabito <sethm@loomcom.com> All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.sourceforge.jarbundler;
-
-public class JavaProperty {
-
- /** The JavaProperties' name and value */
-
- private String name = null;
- private String value = null;
-
- /**
- * Construct an empty JavaProperty
- */
-
- public JavaProperty() {
- }
-
- /**
- * Set the JavaProperties's name; required
- *
- * @param name
- * the JavaProperties' name
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Get the JavaProperties' name
- *
- * @return the JavaProperties' name.
- */
- public String getName() {
-
- if (this.name == null)
- return null;
-
- return this.name.trim();
- }
-
- /**
- * Set the JavaProperties' value; required
- *
- * @param value
- * the JavaProperties' value
- */
-
- public void setValue(String value) {
- this.value = value;
- }
-
- /**
- * Get the JavaProperties' value.
- *
- * @return the JavaProperties' value.
- */
- public String getValue() {
-
- if (this.value == null)
- return null;
-
- return this.value.trim();
- }
-
-}
+++ /dev/null
-/*
- * Write the application bundle file: Info.plist
- *
- *
- * Copyright (c) 2003, Seth J. Morabito <sethm@loomcom.com> All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.sourceforge.jarbundler;
-
-// This package's imports
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import net.sourceforge.jarbundler.AppBundleProperties;
-
-// Java I/O
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-// Java Utility
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-
-// Java language imports
-import java.lang.Boolean;
-import java.lang.ClassCastException;
-import java.lang.Double;
-import java.lang.String;
-import java.lang.System;
-
-// Apache Ant
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.FileUtils;
-
-// Java XML DOM creation
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
-
-// W3C DOM
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.Attr;
-
-
-
-/**
- * Write out a Java application bundle property list file. For descriptions of
- * the property list keys, see <a
- * href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html"
- * >Apple docs</a>.
- */
-
-
-public class PropertyListWriter {
-
-
- // Our application bundle properties
- private AppBundleProperties bundleProperties;
-
- private double version = 1.3;
-
- // DOM version of Info.plist file
- private Document document = null;
-
-
- private FileUtils fileUtils = FileUtils.getFileUtils();
-
- /**
- * Create a new Property List writer.
- */
- public PropertyListWriter(AppBundleProperties bundleProperties) {
- this.bundleProperties = bundleProperties;
- setJavaVersion(bundleProperties.getJVMVersion());
- }
-
- private void setJavaVersion(String version) {
-
- if (version == null)
- return;
-
- this.version = Double.valueOf(version.substring(0, 3)).doubleValue();
- }
-
-
- public void writeFile(File fileName) throws BuildException {
-
- Writer writer = null;
-
- try {
-
- this.document = createDOM();
- buildDOM();
-
- TransformerFactory transFactory = TransformerFactory.newInstance();
- Transformer trans = transFactory.newTransformer();
- trans.setOutputProperty(OutputKeys.INDENT, "yes");
- trans.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","2" );
- writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8"));
- trans.transform(new DOMSource(document), new StreamResult(writer));
- } catch (TransformerConfigurationException tce) {
- throw new BuildException(tce);
- } catch (TransformerException te) {
- throw new BuildException(te);
- } catch (ParserConfigurationException pce) {
- throw new BuildException(pce);
- } catch (IOException ex) {
- throw new BuildException("Unable to write \"" + fileName + "\"");
- } finally {
- fileUtils.close(writer);
- }
- }
-
- private Document createDOM() throws ParserConfigurationException {
-
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder documentBuilder = factory.newDocumentBuilder();
- DOMImplementation domImpl = documentBuilder.getDOMImplementation();
-
- // We needed to reference using the full class name here because we already have
- // a class named "DocumentType"
-
- org.w3c.dom.DocumentType doctype = domImpl.createDocumentType(
- "plist",
- "-//Apple Computer//DTD PLIST 1.0//EN",
- "http://www.apple.com/DTDs/PropertyList-1.0.dtd");
-
- return domImpl.createDocument(null, "plist", doctype);
- }
-
-
- private void buildDOM() {
-
- Element plist = this.document.getDocumentElement();
- plist.setAttribute("version","1.0");
-
- // Open the top level dictionary, <dict>
-
- Node dict = createNode("dict", plist);
-
- // Application short name i.e. About menu name
- writeKeyStringPair("CFBundleName", bundleProperties.getCFBundleName(), dict);
-
- // Finder 'Version' label, defaults to "1.0"
- writeKeyStringPair("CFBundleShortVersionString", bundleProperties.getCFBundleShortVersionString(), dict);
-
- // Finder 'Get Info'
- writeKeyStringPair("CFBundleGetInfoString", bundleProperties.getCFBundleGetInfoString(), dict);
-
- // Mac OS X required key, defaults to "false"
- writeKeyStringPair("CFBundleAllowMixedLocalizations",
- (bundleProperties.getCFBundleAllowMixedLocalizations() ? "true" : "false"), dict);
-
- // Mac OS X required, defaults to "6.0"
- writeKeyStringPair("CFBundleInfoDictionaryVersion",
- bundleProperties.getCFBundleInfoDictionaryVersion(), dict);
-
- // Bundle Executable name, required, defaults to "JavaApplicationStub"
- writeKeyStringPair("CFBundleExecutable", bundleProperties.getCFBundleExecutable(), dict);
-
- // Bundle Development Region, required, defaults to "English"
- writeKeyStringPair("CFBundleDevelopmentRegion", bundleProperties.getCFBundleDevelopmentRegion(), dict);
-
- // Bundle Package Type, required, defaults tp "APPL"
- writeKeyStringPair("CFBundlePackageType", bundleProperties.getCFBundlePackageType(), dict);
-
- // Bundle Signature, required, defaults tp "????"
- writeKeyStringPair("CFBundleSignature", bundleProperties.getCFBundleSignature(), dict);
-
- // Application build number, optional
- if (bundleProperties.getCFBundleVersion() != null)
- writeKeyStringPair("CFBundleVersion", bundleProperties.getCFBundleVersion(), dict);
-
- // Application Icon file, optional
- if (bundleProperties.getCFBundleIconFile() != null)
- writeKeyStringPair("CFBundleIconFile", bundleProperties.getCFBundleIconFile(), dict);
-
- // Bundle Identifier, optional
- if (bundleProperties.getCFBundleIdentifier() != null)
- writeKeyStringPair("CFBundleIdentifier", bundleProperties.getCFBundleIdentifier(), dict);
-
- // Help Book Folder, optional
- if (bundleProperties.getCFBundleHelpBookFolder() != null)
- writeKeyStringPair("CFBundleHelpBookFolder", bundleProperties.getCFBundleHelpBookFolder(), dict);
-
- // Help Book Name, optional
- if (bundleProperties.getCFBundleHelpBookName() != null)
- writeKeyStringPair("CFBundleHelpBookName", bundleProperties.getCFBundleHelpBookName(), dict);
-
- // Document Types, optional
- List documentTypes = bundleProperties.getDocumentTypes();
-
- if (documentTypes.size() > 0)
- writeDocumentTypes(documentTypes, dict);
-
- // Java entry in the plist dictionary
- writeKey("Java", dict);
- Node javaDict = createNode("dict", dict);
-
- // Main class, required
- writeKeyStringPair("MainClass", bundleProperties.getMainClass(), javaDict);
-
- // Target JVM version, optional but recommended
- if (bundleProperties.getJVMVersion() != null)
- writeKeyStringPair("JVMVersion", bundleProperties.getJVMVersion(), javaDict);
-
- // New in JarBundler 2.2.0; Tobias Bley ---------------------------------
-
- // JVMArchs, optional
- List jvmArchs = bundleProperties.getJVMArchs();
-
- if (jvmArchs != null && !jvmArchs.isEmpty())
- writeJVMArchs(jvmArchs, javaDict);
-
- // lsArchitecturePriority, optional
- List lsArchitecturePriority = bundleProperties.getLSArchitecturePriority();
-
- if (lsArchitecturePriority != null && !lsArchitecturePriority.isEmpty())
- writeLSArchitecturePriority(lsArchitecturePriority, javaDict);
-
- //-----------------------------------------------------------------------
-
-
- // Classpath is composed of two types, required
- // 1: Jars bundled into the JAVA_ROOT of the application
- // 2: External directories or files with an absolute path
-
- List classPath = bundleProperties.getClassPath();
- List extraClassPath = bundleProperties.getExtraClassPath();
-
- if ((classPath.size() > 0) || (extraClassPath.size() > 0))
- writeClasspath(classPath, extraClassPath, javaDict);
-
-
- // JVM options, optional
- if (bundleProperties.getVMOptions() != null)
- writeKeyStringPair("VMOptions", bundleProperties.getVMOptions(), javaDict);
-
- // Working directory, optional
- if (bundleProperties.getWorkingDirectory() != null)
- writeKeyStringPair("WorkingDirectory", bundleProperties.getWorkingDirectory(), javaDict);
-
- // StartOnMainThread, optional
- if (bundleProperties.getStartOnMainThread() != null) {
- writeKey("StartOnMainThread", javaDict);
- createNode(bundleProperties.getStartOnMainThread().toString(), javaDict);
- }
-
- // SplashFile, optional
- if (bundleProperties.getSplashFile() != null)
- writeKeyStringPair("SplashFile", bundleProperties.getSplashFile(), javaDict);
-
- // Main class arguments, optional
- if (bundleProperties.getArguments() != null)
- writeKeyStringPair("Arguments", bundleProperties.getArguments(), javaDict);
-
- // Java properties, optional
- Hashtable javaProperties = bundleProperties.getJavaProperties();
-
- if (javaProperties.isEmpty() == false)
- writeJavaProperties(javaProperties, javaDict);
-
-
- // Services, optional
- List services = bundleProperties.getServices();
- if (services.size() > 0)
- writeServices(services,dict);
-
- }
-
-
- private void writeDocumentTypes(List documentTypes, Node appendTo) {
-
- writeKey("CFBundleDocumentTypes", appendTo);
-
- Node array = createNode("array", appendTo);
-
- Iterator itor = documentTypes.iterator();
-
- while (itor.hasNext()) {
-
- DocumentType documentType = (DocumentType) itor.next();
-
- Node documentDict = createNode("dict", array);
-
- writeKeyStringPair("CFBundleTypeName", documentType.getName(), documentDict);
- writeKeyStringPair("CFBundleTypeRole", documentType.getRole(), documentDict);
-
- File iconFile = documentType.getIconFile();
-
- if (iconFile != null)
- writeKeyStringPair("CFBundleTypeIconFile", iconFile.getName(), documentDict);
-
-
- List extensions = documentType.getExtensions();
-
- if (extensions.isEmpty() == false) {
- writeKey("CFBundleTypeExtensions", documentDict);
- writeArray(extensions, documentDict);
- }
-
- List osTypes = documentType.getOSTypes();
-
- if (osTypes.isEmpty() == false) {
- writeKey("CFBundleTypeOSTypes", documentDict);
- writeArray(osTypes, documentDict);
- }
-
-
- List mimeTypes = documentType.getMimeTypes();
-
- if (mimeTypes.isEmpty() == false) {
- writeKey("CFBundleTypeMIMETypes", documentDict);
- writeArray(mimeTypes, documentDict);
- }
-
- List UTIs = documentType.getUTIs();
-
- if (UTIs.isEmpty() == false) {
- writeKey("LSItemContentTypes", documentDict);
- writeArray(UTIs, documentDict);
- }
-
- // Only write this key if true
- if (documentType.isBundle())
- writeKeyStringPair("LSTypeIsPackage", "true", documentDict);
- }
- }
-
- private void writeServices(List services, Node appendTo) {
-
- writeKey("NSServices",appendTo);
- Node array = createNode("array",appendTo);
- Iterator itor = services.iterator();
-
- while (itor.hasNext()) {
- Service service = (Service)itor.next();
- Node serviceDict = createNode("dict",array);
-
- String portName = service.getPortName();
- if (portName == null)
- portName = bundleProperties.getCFBundleName();
-
- writeKeyStringPair("NSPortName", portName, serviceDict);
- writeKeyStringPair("NSMessage",service.getMessage(),serviceDict);
-
- List sendTypes = service.getSendTypes();
- if (!sendTypes.isEmpty()) {
- writeKey("NSSendTypes",serviceDict);
- writeArray(sendTypes,serviceDict);
- }
-
- List returnTypes = service.getReturnTypes();
- if (!returnTypes.isEmpty()) {
- writeKey("NSReturnTypes",serviceDict);
- writeArray(returnTypes,serviceDict);
- }
-
- writeKey("NSMenuItem",serviceDict);
- Node menuItemDict = createNode("dict",serviceDict);
- writeKeyStringPair("default",service.getMenuItem(),menuItemDict);
-
- String keyEquivalent = service.getKeyEquivalent();
- if (null != keyEquivalent) {
- writeKey("NSKeyEquivalent",serviceDict);
- Node keyEquivalentDict = createNode("dict",serviceDict);
- writeKeyStringPair("default",keyEquivalent,keyEquivalentDict);
- }
-
- String userData = service.getUserData();
- if (null != userData)
- writeKeyStringPair("NSUserData", userData, serviceDict);
-
- String timeout = service.getTimeout();
- if (null != timeout)
- writeKeyStringPair("NSTimeout",timeout,serviceDict);
- }
- }
-
- private void writeClasspath(List classpath, List extraClasspath, Node appendTo) {
- writeKey("ClassPath", appendTo);
- classpath.addAll(extraClasspath);
- writeArray(classpath, appendTo);
- }
-
-
- private void writeJavaProperties(Hashtable javaProperties, Node appendTo) {
-
- writeKey("Properties", appendTo);
-
- Node propertiesDict = createNode("dict", appendTo);
-
- for (Iterator i = javaProperties.keySet().iterator(); i.hasNext();) {
- String key = (String) i.next();
-
- if (key.startsWith("com.apple.") && (version >= 1.4)) {
- System.out.println("Deprecated as of 1.4: " + key);
- continue;
- }
-
- writeKeyStringPair(key, (String)javaProperties.get(key), propertiesDict);
- }
- }
-
- // New in JarBundler 2.2.0; Tobias Bley ---------------------------------
-
- private void writeJVMArchs(List jvmArchs, Node appendTo)
- {
- writeKey("JVMArchs", appendTo);
- writeArray(jvmArchs, appendTo);
- }
-
- private void writeLSArchitecturePriority(List lsArchitecturePriority, Node appendTo)
- {
- writeKey("LSArchitecturePriority", appendTo);
- writeArray(lsArchitecturePriority, appendTo);
- }
-
- //----------------------------------------------------------------------
-
- private Node createNode(String tag, Node appendTo)
- {
- Node node = this.document.createElement(tag);
- appendTo.appendChild(node);
- return node;
- }
-
-
- private void writeKeyStringPair(String key, String string, Node appendTo) {
-
- if (string == null)
- return;
-
- writeKey(key, appendTo);
- writeString(string, appendTo);
- }
-
-
- private void writeKey(String key, Node appendTo) {
- Element keyNode = this.document.createElement("key");
- appendTo.appendChild(keyNode);
- keyNode.appendChild(this.document.createTextNode(key));
- }
-
-
- private void writeString(String string, Node appendTo) {
- Element stringNode = this.document.createElement("string");
- stringNode.appendChild(this.document.createTextNode(string));
- appendTo.appendChild(stringNode);
- }
-
- private void writeArray(List stringList, Node appendTo) {
-
- Node arrayNode = createNode("array", appendTo);
-
- for (Iterator it = stringList.iterator(); it.hasNext();)
- writeString((String)it.next(), arrayNode);
-
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2003, Seth J. Morabito <sethm@loomcom.com> All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.sourceforge.jarbundler;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-
-
-/**
- * Represents an Info.plist Service specifying a service provided by the application.
- *
- * Port Name - The name of the port the application monitors for incoming service requests.
- *
-
- * Message - The name of the instance method to invoke for the service.
- * In Objective-C, the instance method must be of the form messageName:userData:error:.
- * In Java, the instance method must be of the form messageName(NSPasteBoard,String).
- *
- *
- * Menu Item - The text to add to the Services menu. The value must be unique.
- * You can use a slash character "/" to specify a submenu. For example, Mail/Send
- * would appear in the Services Menu as a menu named Mail with an item named Send.
- *
- *
- * Send Types - A list of the data type names that can be read by the service.
- * The NSPasteboard class description lists several common data types.
- *
- *
- * Return Types - A list of the data type names that can be returned by the service.
- * The NSPasteboard class description lists several common data types.
- * You must specify either Return Types, Send Types or both.
- *
- * You must specify either Send Types, Return Types or both.
- *
- *
- * Key Equivalent - This attribute is optional. The keyboard equivalent used to invoke
- * the service menu command. The value has to be a single character. Users invoke this
- * keyboard equivalent by pressing the Command and Shift key modifiers along with the character.
- *
- *
- * User Data - This attribute is optional. The value is free choosable and is passed
- * to the method as second parameter.
- *
- *
- * Timeout - This attribute is optional. It indicates the number of milliseconds
- * Services should wait for a response from the application providing
- * a service when a respond is required.
- *
- *
- * <service portname="jarBundler"
- * message="processRequest"
- * menuitem="JarBundler/Process Request"
- * sendtypes="NSStringPboardType,NSFilenamesPboardType"
- * returntypes="NSStringPboardType"
- * keyequivalent="p"
- * userdata="a string passed to the method"
- * timeout="5000" />
- */
-public class Service {
- private static final List EMPTYLIST = new ArrayList(0);
-
-
- /** The name of the port the application monitors for incoming service requests. */
- private String portName = null;
-
-
- /**
-
- * The name of the instance method to invoke for the service.
- * In Objective-C, the instance method must be of the form messageName:userData:error:.
-
- * In Java, the instance method must be of the form messageName(NSPasteBoard,String).
- */
- private String message = null;
-
-
- /**
-
- * The text to add to the Services menu. The value must be unique.
-
- * You can use a slash character "/" to specify a submenu. For example, Mail/Send
-
- * would appear in the Services Menu as a menu named Mail with an item named Send.
- */
- private String menuItem = null;
-
- /**
- * A list of the data type names that can be read by the service.
-
- * The NSPasteboard class description lists several common data types.
-
- * You must specify either Send Types, Return Types or both.
- */
- private String[] sendTypes = null;
-
-
- /**
- * A list of the data type names that can be returned by the service.
-
- * The NSPasteboard class description lists several common data types.
-
- * You must specify either Return Types, Send Types or both.
- */
- private String[] returnTypes = null;
-
-
- /**
- * This attribute is optional. The keyboard equivalent used to invoke
-
- * the service menu command. The value has to be a single character. Users invoke this
-
- * keyboard equivalent by pressing the Command and Shift key modifiers along with the character.
-
- */
- private String keyEquivalent = null;
-
-
- /**
-
- * This attribute is optional. The value is free choosable and is passed
-
- * to the method as second parameter.
-
- */
- private String userData = null;
-
-
- /**
-
- * This attribute is optional. It indicates the number of milliseconds
-
- * Services should wait for a response from the application providing
-
- * a service when a respond is required.
-
- */
- private String timeout = null;
-
-
- public void setPortName(String portName) {
- this.portName = portName;
- }
-
- public String getPortName() {
- return portName;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMenuItem(String menuItem) {
- this.menuItem = menuItem;
-
- }
-
- public String getMenuItem() {
- return menuItem;
- }
-
- public void setSendTypes(String sendTypes) {
- this.sendTypes = sendTypes.split("[\\s,]");
- }
-
- public List getSendTypes() {
- return (sendTypes == null) ? EMPTYLIST : Arrays.asList(sendTypes);
- }
-
- public void setReturnTypes(String returnTypes) {
- this.returnTypes = returnTypes.split("[\\s,]");
- }
-
- public List getReturnTypes() {
- return (returnTypes == null) ? EMPTYLIST : Arrays.asList(returnTypes);
- }
-
- public void setKeyEquivalent(String keyEquivalent) {
- this.keyEquivalent = keyEquivalent;
- }
-
- public String getKeyEquivalent() {
- return keyEquivalent;
- }
-
- public void setUserData(String userData) {
- this.userData = userData;
- }
-
- public String getUserData() {
- return userData;
- }
-
- public void setTimeout(String timeout) {
- this.timeout = timeout;
- }
-
- public String getTimeout() {
- return timeout;
- }
-}
+++ /dev/null
-#!/bin/sh
-###### Make Zip ######
-appDir="Tizen_SDK_Install.app"
-
-##zip files
-tarGzFile=InstallManager-Network.tar.gz
-
-tar cvfz ${tarGzFile} InstallManagerC ${appDir}
-
-## make binary
-currentDate=`date '+%Y%m%d%H%M'`
-binFile=$1_${currentDate}.bin
-
-###### Make Bin ######
-CUR_DIR=`pwd`
-cp installer_stub installerstub_cp
-INSTALLSTUB="installerstub_cp"
-
-echo "checking"
-ORI_MD5SUM=`md5 "${tarGzFile}" | awk '{ print $4 }'`
-ORI_LEN=`wc -l "$INSTALLSTUB" | awk '{ print $1 }'`
-ORI_LEN=`expr $ORI_LEN + 1`
-
-echo "making"
-sed -e "s|\$\$\$\$__CHKSUM_REPLACE__\$\$\$\$$|\"$ORI_MD5SUM\"|g" $INSTALLSTUB > _temp_1
-sed -e "s|\$\$\$\$__FILE_LENGTH_REPLACE__\$\$\$\$$|\"$ORI_LEN\"|g" _temp_1 > _temp_2
-
-cp _temp_2 ${binFile}
-cat ${tarGzFile} >> ${binFile}
-
-rm _temp_1 _temp_2 ${tarGzFile}
+++ /dev/null
-#!/bin/sh -x
-
-## make binary
-currentDate=`date '+%Y%m%d%H%M'`
-binFile=$1-${currentDate}
-
-ant -DINSTALL_NAME=${binFile}
+++ /dev/null
-installerStub for windows.
- -- jonghwan2.park@samsung.com
# list for pre installation check. Write including 'space'
if [ "ubuntu" = "${OS_NAME}" ] ; then
- INSTALLATION_CHECK="procps gettext libdbus-1-3 libcurl3 expect grep zip make libudev-dev"
+ INSTALLATION_CHECK="procps gettext libdbus-1-3 libcurl3 expect grep zip make libgnome2-0 libudev-dev libpng12-0"
elif [ "fedora" = "${OS_NAME}" ]; then
- INSTALLATION_CHECK="procps-ng gettext dbus-libs libcurl expect gtk2 grep zip make qemu-user webkitgtk"
+ INSTALLATION_CHECK="procps-ng gettext dbus-libs libcurl expect gtk2 grep zip make libgnome qemu-user webkitgtk libpng12"
elif [ "tizen" = "${OS_NAME}" ] ; then
- INSTALLATION_CHECK="procps-ng gettext-tools libdbus libcurl expect libgtk2 grep zip make qemu-linux-user libwebkitgtk2"
+ INSTALLATION_CHECK="procps-ng gettext-tools libdbus libcurl expect libgtk2 grep zip make libgnome2 qemu-linux-user libwebkitgtk2"
fi
pkg_list=""
!include LogicLib.nsh\r
!insertmacro GetParameters\r
!insertmacro GetOptions\r
-!define /date MYTIMESTAMP "%Y%m%d%H%M%S"\r
+\r
+### TimeStamp\r
+!ifndef TimeStamp\r
+ !define TimeStamp "!insertmacro _TimeStamp" \r
+ !macro _TimeStamp FormatedString\r
+ !ifdef __UNINSTALL__\r
+ Call un.__TimeStamp\r
+ !else\r
+ Call __TimeStamp\r
+ !endif\r
+ Pop ${FormatedString}\r
+ !macroend\r
+\r
+!macro __TimeStamp UN\r
+Function ${UN}__TimeStamp\r
+ ClearErrors\r
+ ## Store the needed Registers on the stack\r
+ Push $0 ; Stack $0\r
+ Push $1 ; Stack $1 $0\r
+ Push $2 ; Stack $2 $1 $0\r
+ Push $3 ; Stack $3 $2 $1 $0\r
+ Push $4 ; Stack $4 $3 $2 $1 $0\r
+ Push $5 ; Stack $5 $4 $3 $2 $1 $0\r
+ Push $6 ; Stack $6 $5 $4 $3 $2 $1 $0\r
+\r
+ ## Call System API to get the current system Time\r
+ System::Alloc 16\r
+ Pop $0\r
+ System::Call 'kernel32::GetLocalTime(i) i(r0)'\r
+ System::Call '*$0(&i2, &i2, &i2, &i2, &i2, &i2, &i2, &i2)i (.r1, .r2, n, .r3, .r4, .r5, .r6)'\r
+ System::Free $0\r
+\r
+ IntFmt $2 "%02i" $2\r
+ IntFmt $3 "%02i" $3\r
+ IntFmt $4 "%02i" $4\r
+ IntFmt $5 "%02i" $5\r
+ IntFmt $6 "%02i" $6\r
+\r
+ ## Generate Timestamp\r
+ StrCpy $0 "$1$2$3$4$5$6" \r
+\r
+ ## Restore the Registers and add Timestamp to the Stack\r
+ Pop $6 ; Stack $5 $4 $3 $2 $1 $0\r
+ Pop $5 ; Stack $4 $3 $2 $1 $0\r
+ Pop $4 ; Stack $3 $2 $1 $0\r
+ Pop $3 ; Stack $2 $1 $0\r
+ Pop $2 ; Stack $1 $0\r
+ Pop $1 ; Stack $0\r
+ Exch $0 ; Stack ${TimeStamp}\r
+\r
+FunctionEnd\r
+!macroend\r
+!insertmacro __TimeStamp "" \r
+!insertmacro __TimeStamp "un." \r
+!endif\r
+###########\r
\r
section\r
${GetParameters} $R0\r
${GetExePath} $R1\r
+ ${TimeStamp} $0\r
SetRegView 64\r
\r
StrCpy $1 "SOFTWARE\JavaSoft\Java Runtime Environment"\r
\r
done:\r
StrCpy $2 '-path "$R1"'\r
- StrCpy $INSTDIR "$TEMP\tizensdk_${MYTIMESTAMP}"\r
+ StrCpy $INSTDIR "$TEMP\tizensdk_$0"\r
RMDir /r $INSTDIR\r
SetOutPath $INSTDIR\r
SetOverwrite on\r
!include LogicLib.nsh\r
!insertmacro GetParameters\r
!insertmacro GetOptions\r
-!define /date MYTIMESTAMP "%Y%m%d%H%M%S"\r
+\r
+### TimeStamp\r
+!ifndef TimeStamp\r
+ !define TimeStamp "!insertmacro _TimeStamp" \r
+ !macro _TimeStamp FormatedString\r
+ !ifdef __UNINSTALL__\r
+ Call un.__TimeStamp\r
+ !else\r
+ Call __TimeStamp\r
+ !endif\r
+ Pop ${FormatedString}\r
+ !macroend\r
+\r
+!macro __TimeStamp UN\r
+Function ${UN}__TimeStamp\r
+ ClearErrors\r
+ ## Store the needed Registers on the stack\r
+ Push $0 ; Stack $0\r
+ Push $1 ; Stack $1 $0\r
+ Push $2 ; Stack $2 $1 $0\r
+ Push $3 ; Stack $3 $2 $1 $0\r
+ Push $4 ; Stack $4 $3 $2 $1 $0\r
+ Push $5 ; Stack $5 $4 $3 $2 $1 $0\r
+ Push $6 ; Stack $6 $5 $4 $3 $2 $1 $0\r
+\r
+ ## Call System API to get the current system Time\r
+ System::Alloc 16\r
+ Pop $0\r
+ System::Call 'kernel32::GetLocalTime(i) i(r0)'\r
+ System::Call '*$0(&i2, &i2, &i2, &i2, &i2, &i2, &i2, &i2)i (.r1, .r2, n, .r3, .r4, .r5, .r6)'\r
+ System::Free $0\r
+\r
+ IntFmt $2 "%02i" $2\r
+ IntFmt $3 "%02i" $3\r
+ IntFmt $4 "%02i" $4\r
+ IntFmt $5 "%02i" $5\r
+ IntFmt $6 "%02i" $6\r
+\r
+ ## Generate Timestamp\r
+ StrCpy $0 "$1$2$3$4$5$6" \r
+\r
+ ## Restore the Registers and add Timestamp to the Stack\r
+ Pop $6 ; Stack $5 $4 $3 $2 $1 $0\r
+ Pop $5 ; Stack $4 $3 $2 $1 $0\r
+ Pop $4 ; Stack $3 $2 $1 $0\r
+ Pop $3 ; Stack $2 $1 $0\r
+ Pop $2 ; Stack $1 $0\r
+ Pop $1 ; Stack $0\r
+ Exch $0 ; Stack ${TimeStamp}\r
+\r
+FunctionEnd\r
+!macroend\r
+!insertmacro __TimeStamp "" \r
+!insertmacro __TimeStamp "un." \r
+!endif\r
+###########\r
\r
section\r
${GetParameters} $R0\r
${GetExePath} $R1\r
+ ${TimeStamp} $0\r
\r
StrCpy $1 "SOFTWARE\JavaSoft\Java Runtime Environment"\r
StrCpy $2 0\r
\r
done:\r
StrCpy $2 '-path "$R1"'\r
- StrCpy $INSTDIR "$TEMP\tizensdk_${MYTIMESTAMP}"\r
+ StrCpy $INSTDIR "$TEMP\tizensdk_$0"\r
RMDir /r $INSTDIR\r
SetOutPath $INSTDIR\r
SetOverwrite on\r
then
if [ "$SIGNPASSWORD" != "" ]
then
- "$SIGNTOOL_PATH" "sign" "//f" "$SIGNFILE_PATH" "//p" "${SIGNPASSWORD}" "//t" "http://timestamp.verisign.com/scripts/timestamp.dll" "$SRCDIR/build/inst-manager.exe"
+ "$SIGNTOOL_PATH" "sign" "//f" "$SIGNFILE_PATH" "//p" "${SIGNPASSWORD}" "$SRCDIR/build/inst-manager.exe"
else
echo "Skip signing... Signing password is not defined!"
fi
##make config file
buildConfigFile() {
configFile="${buildDir}/installmanager.conf"
- packageServer="http://download.tizen.org/sdk/packages-2.2b/"
+ packageServer="http://download.tizen.org/sdk/packages/"
distribution="official"
releaseNoteUrl="https://developer.tizen.org/downloads/sdk/2.0-release-notes"
##make config file
buildConfigFile() {
configFile="${buildDir}/installmanager.conf"
- packageServer="http://download.tizen.org/sdk/packages-2.2b/"
+ packageServer="http://download.tizen.org/sdk/packages/"
distribution="official"
releaseNoteUrl="https://developer.tizen.org/downloads/sdk/2.0-release-notes"
##make config file
buildConfigFile() {
configFile="${buildDir}/img/installmanager.conf"
- packageServer="http://download.tizen.org/sdk/packages-2.2b/"
+ packageServer="http://download.tizen.org/sdk/packages/"
distribution="official"
releaseNoteUrl="https://developer.tizen.org/downloads/sdk/2.0-release-notes"
+*2.2.29
+- Modify tsudo.sh script for working well.
+- InstallManager works well by cli mode.
+== Yongsung Kim <yongsung1.kim@samsung.com> 2013-07-12
+*2.2.28
+- Modify tsudo.sh script for working well.
+== Yongsung Kim <yongsung1.kim@samsung.com> 2013-07-11
+*2.2.27
+- Modify InstallManager-64.nsi script because of useless character
+== Yongsung Kim <yongsung1.kim@samsung.com> 2013-07-10
+*2.2.26
+- Add libpng package to pre-requisites for ubuntu and fedora.
+- Progress bar works better than before.
+- When installmanager makes temporary directory for installation on windows, it can get current time correctly.
+== Yongsung Kim <yongsung1.kim@samsung.com> 2013-07-10
+*2.2.25
+- InstallManager can support 'tsudo' command as ${TSUDO} for install and remove script of package.
+- InstallManager can support non-interactive cli mode.
+- Modify wrong character in install script of installmanager.
+- InstallManager works well by cli mode.
+- change the directory location to download packages.(to target directory/.info/download)
+== Yongsung Kim <yongsung1.kim@samsung.com> 2013-07-09
+*2.2.23
+- InstallManager can support 'tsudo' command as ${TSUDO} for install and remove script of package.
+== Yongsung Kim <yongsung1.kim@samsung.com> 2013-07-08
+*2.2.21
+- InstallManager can show remove target directory dialog end of uninstallation.
+- Fix bug that installmanager cannot update SDK.
+- InstallManager can support SDK_DATA_PATH environment variable when SDK updates.
+- InstallManager can check that input paths are duplicated and has wrong pattern both SDK install path and SDK data path same time.
+- Error message more detail than before in set install path page.
+== Yongsung Kim <yongsung1.kim@samsung.com> 2013-07-04
+*2.2.20
+- When installmanager cancels to download packages, remove the target directory.
+- Add libgnome to prerequistes
+== Yongsung Kim <yongsung1.kim@samsung.com> 2013-07-04
+*2.2.19
+- For 2.2 beta. InstallManage heads for http://download.tizen.org/sdk/packages/
+== Yongsung Kim <yongsung1.kim@samsung.com> 2013-07-04
*2.2.18
- For 2.2 beta. InstallManage heads for http://download.tizen.org/sdk/packages-2.2b/
== Shihyun Kim <shihyun.kim@samsung.com> 2013-06-29
echo ${CONFIG_FILE} exists.
else
echo "TIZEN_SDK_INSTALLED_PATH="${INSTALLED_PATH} >> ${CONFIG_FILE}
- echo "TIZNE_SDK_DATA_PATH="${HOME}"/tizen-sdk-data" >> ${CONFIG_FILE}
+ echo "TIZEN_SDK_DATA_PATH="${HOME}"/tizen-sdk-data" >> ${CONFIG_FILE}
fi
echo ${CONFIG_FILE} exists.
else
echo "TIZEN_SDK_INSTALLED_PATH="${INSTALLED_PATH} >> ${CONFIG_FILE}
- echo "TIZNE_SDK_DATA_PATH="${HOME}"/tizen-sdk-data" >> ${CONFIG_FILE}
+ echo "TIZEN_SDK_DATA_PATH="${HOME}"/tizen-sdk-data" >> ${CONFIG_FILE}
fi
Source: install-manager
-Version: 2.2.18
+Version: 2.2.29
Maintainer: Shihyun Kim<shihyun.kim@samsung.com>, Yongsung Kim<yongsung1.kim@samsung.com>
Package: install-manager
+++ /dev/null
-#!/bin/bash
-# check arguments
-SDK_PKG_FILE=$2
-DMG_NAME=$1
-
-#check tools
-REQUIRE_BINARY="hdiutil"
-echo "Checking Prerequisite..."
-for bin in $REQUIRE_BINARY
-do
- if [ "`which $bin 2>/dev/null`" ] ; then
- echo "checking $bin... OK"
- else
- echo "checking $bin... is not installed"
- exit 1
- fi
-done
-
-# extract
-rm -rf ./data
-unzip $SDK_PKG_FILE -d ./
-
-# make dmg
-hdiutil create ./${DMG_NAME}.dmg -srcfolder ./data/install-manager/*.app -ov
-
-# remove extracted files
-rm -rf ./data
+++ /dev/null
-#!/bin/sh
-
-if [ ! -f installmanager.conf ]
-then
- echo "installmanager.conf file do not exist."
- exit 1
-fi
-
-if [ $# -ne 1 ]
-then
- echo "Check your parameter. This script need 1 parameter(binary file name) "
- echo "ex)./makeImageLinux ImageForUbuntu"
- exit 1
-fi
-
-##download packages to './binary/*'
-./InstallManager -onlyDownload all linux
-
-mv installmanager.conf installmanager.conf.temp
-echo ${version} >> installmanager.conf
-
-currentDate=`date '+%Y%m%d%H%M'`
-
-zip -r $1_${currentDate} binary/ pkg_list_linux
-
-echo "exitcode="$?
-
-rm installmanager.conf pkg_list_linux
-
-if [ $? -eq 0 ]
-then
- rm -rf binary
-fi
-
-mv installmanager.conf.temp installmanager.conf
-
+++ /dev/null
-#!/bin/sh
-
-if [ ! -f installmanager.conf ]
-then
- echo "installmanager.conf file do not exist."
- exit 1
-fi
-
-if [ $# -ne 1 ]
-then
- echo "Check your parameter. This script need 1 parameter(binary file name) "
- echo "ex)./makeImageWindows ImageForWindows"
- exit 1
-fi
-
-##download packages to './binary/*'
-./InstallManager -onlyDownload all windows
-
-mv installmanager.conf installmanager.conf.temp
-echo ${version} >> installmanager.conf
-
-currentDate=`date '+%Y%m%d%H%M'`
-
-zip -r $1_${currentDate} binary/ pkg_list_windows
-
-echo "exitcode="$?
-
-rm installmanager.conf pkg_list_windows
-
-if [ $? -eq 0 ]
-then
- rm -rf binary
-fi
-
-mv installmanager.conf.temp installmanager.conf
-
+++ /dev/null
-#!/bin/sh
-
-if [ ! -f installmanager.conf ]
-then
- echo "installmanager.conf file do not exist."
- exit 1
-fi
-
-if [ $# -ne 1 ]
-then
- echo "Check your parameter. This script need 1 parameter(binary file name) "
- echo "ex)./makeLocal tizen_sdk_local"
- exit 1
-fi
-
-##download packages to './binary/*'
-./InstallManager -onlyDownload all
-
-##create local config file
-version=`grep "Version" installmanager.conf`
-
-mv installmanager.conf installmanager.conf.temp
-echo ${version} >> installmanager.conf
-
-tar cvfz InstallManager-Local.tar.gz binary/ InstallManager InstallManager.jar installmanager.conf pkg_list_linux
-
-echo "exitcode="$?
-
-rm installmanager.conf pkg_list_linux
-
-if [ $? -eq 0 ]
-then
- rm -rf binary
-fi
-
-currentDate=`date '+%Y%m%d%H%M'`
-binFile=$1_${currentDate}.bin
-
-./makeInstaller InstallManager-Local.tar.gz ${binFile}
-
-rm -rf InstallManager-Local.tar.gz
-mv installmanager.conf.temp installmanager.conf
-