[Esbox-commits] r1971 - in branches/work_Raul: org.maemo.esbox.help/html/tasks org.maemo.esbox.launch.analysis org.maemo.esbox.product org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin org.maemo.esbox.tests/src/org/maemo/esbox/tests/common org.maemo.esbox.tests/src/org/maemo/esbox/tests/cpp org.maemo.esbox.tests/src/org/maemo/esbox/tests/python org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core org.maemo.esbox.vm/src/org/maemo/esbox/vm/core org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware
raul at garage.maemo.org
raul at garage.maemo.org
Wed Aug 19 14:53:19 EEST 2009
Author: raul
Date: 2009-08-19 14:53:15 +0300 (Wed, 19 Aug 2009)
New Revision: 1971
Modified:
branches/work_Raul/org.maemo.esbox.help/html/tasks/UsingFlasherWizard.html
branches/work_Raul/org.maemo.esbox.launch.analysis/plugin.xml
branches/work_Raul/org.maemo.esbox.product/about.mappings
branches/work_Raul/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/FremantleLicenseAgreementPage.java
branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/common/TestOProfileValgrindSupport.java
branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/cpp/TestCppBuildConfigProjectCreator.java
branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/python/ManualTestPyDevInterpreterConfigurator.java
branches/work_Raul/org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu/QemuPreferenceConstants.java
branches/work_Raul/org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox/VirtualBoxPreferenceConstants.java
branches/work_Raul/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/VMwarePreferenceConstants.java
branches/work_Raul/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualBuildMachine.java
branches/work_Raul/org.maemo.esbox.vm/src/org/maemo/esbox/vm/core/VirtualMachinePreferenceConstants.java
Log:
merged with trunk 1970
Modified: branches/work_Raul/org.maemo.esbox.help/html/tasks/UsingFlasherWizard.html
===================================================================
--- branches/work_Raul/org.maemo.esbox.help/html/tasks/UsingFlasherWizard.html 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.help/html/tasks/UsingFlasherWizard.html 2009-08-19 11:53:15 UTC (rev 1971)
@@ -65,18 +65,10 @@
</p>
<p>
- Note that the flasher binary is currently only available on a Linux host.
- If you are using Eclipse outside Linux, the current Build Machine will run the
- flasher, and the USB connection to the device will need to be "attached"
- to the virtual machine. (The device will show up as "Nokia N8x0 Update Mode".)
+ <b>NOTE:</b> If you are using <b>build machine</b> to flash the device then the USB connection to
+ the device will need to be "attached" to the virtual machine. VirtualBox and VMWare support USB,
+ but QEMU 0.9.x does not support USB at all.
</p>
-
- <p>
- <b>NOTE:</b> QEMU 0.9.x does not (currently) support USB at all, so you cannot use
- it with the flasher wizard. Also, VirtualBox seems to have problems connecting
- to the Internet Tablet in the Update Mode. Your best bet is running the flasher
- natively from Linux or using VMware.
- </p>
</li>
@@ -113,7 +105,7 @@
</p>
<p>
See
- <a href="http://pc-connectivity.garage.maemo.org/beta1/documentation_usbnet.html#Setup_USB_Network_on_Windows">
+ <a href="http://pc-connectivity.garage.maemo.org/documentation_usbnet.html#Setup_USB_Network_on_Windows">
the PC Connectivity page
</a>
for information about setting up Windows networking after using the
@@ -171,7 +163,7 @@
Click <strong>Next</strong>. The wizard will now download the flasher binary (once)
and also install any driver software required for communicating with
the device in flashing mode. This may install additional software,
- such as the <a href="pc-connectivity.garage.maemo.org">Host PC Connectivity software</a>.
+ such as the <a href="http://pc-connectivity.garage.maemo.org/">Host PC Connectivity software</a>.
<p/>
<img src="../images/flash/dialog-flash-get-flasher.png" />
</li>
@@ -204,8 +196,7 @@
<li>
<p>
- Once you hit <strong>F
- model = new FlasherToolModel();inish</strong>, the wizard will download the
+ Once you hit <strong>Finish</strong>, the wizard will download the
image(s) and invoke the flasher.
<p/>
Modified: branches/work_Raul/org.maemo.esbox.launch.analysis/plugin.xml
===================================================================
--- branches/work_Raul/org.maemo.esbox.launch.analysis/plugin.xml 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.launch.analysis/plugin.xml 2009-08-19 11:53:15 UTC (rev 1971)
@@ -186,7 +186,7 @@
<shortcut
class="org.maemo.esbox.internal.analysis.launch.ESboxCppLtraceLocalLaunchShortcut"
icon="icons/full/obj16/ltrace.gif"
- id="maemoLtraceShortcut"
+ id="maemoLtraceLocalShortcut"
label="Local Ltrace Profiler"
modes="profile">
<contextualLaunch>
@@ -205,6 +205,9 @@
<test
forcePluginActivation="true"
property="org.maemo.mica.maemosdk.isEmulatorTarget"/>
+ <test
+ forcePluginActivation="true"
+ property="org.maemo.mica.maemosdk.isX86Target"/>
<test
forcePluginActivation="true"
property="org.maemo.mica.cpp.isCppLaunchable"/>
@@ -224,7 +227,7 @@
<shortcut
class="org.maemo.esbox.internal.analysis.launch.ESboxCppLtraceRemoteLaunchShortcut"
icon="icons/full/obj16/ltrace.gif"
- id="maemoLtraceShortcut"
+ id="maemoLtraceRemoteShortcut"
label="Remote Ltrace Profiler"
modes="profile">
<contextualLaunch>
@@ -474,6 +477,9 @@
<test
forcePluginActivation="true"
property="org.maemo.mica.maemosdk.isEmulatorTarget"/>
+ <test
+ forcePluginActivation="true"
+ property="org.maemo.mica.maemosdk.isX86Target"/>
<test
forcePluginActivation="true"
property="org.maemo.mica.python.isPythonLaunchable"/>
Modified: branches/work_Raul/org.maemo.esbox.product/about.mappings
===================================================================
--- branches/work_Raul/org.maemo.esbox.product/about.mappings 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.product/about.mappings 2009-08-19 11:53:15 UTC (rev 1971)
@@ -7,4 +7,4 @@
# e.g. "0=20020612"
# This value will be added automatically via the build scripts
0=20090211-1700
-1=I20090806
\ No newline at end of file
+1=I20090819
Modified: branches/work_Raul/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/FremantleLicenseAgreementPage.java
===================================================================
--- branches/work_Raul/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/FremantleLicenseAgreementPage.java 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/FremantleLicenseAgreementPage.java 2009-08-19 11:53:15 UTC (rev 1971)
@@ -112,7 +112,7 @@
GridDataFactory.fillDefaults().span(2,0).applyTo(fRepository);
Label lb= new Label(composite, SWT.WRAP);
- lb.setText("The the wizard will automatically add the url to your /etc/apt/sources.list in scratchbox.");
+ lb.setText("The wizard will automatically add the entry to your /etc/apt/sources.list in scratchbox.");
data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
data.horizontalSpan = 2;
data.widthHint = 150;
Modified: branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/common/TestOProfileValgrindSupport.java
===================================================================
--- branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/common/TestOProfileValgrindSupport.java 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/common/TestOProfileValgrindSupport.java 2009-08-19 11:53:15 UTC (rev 1971)
@@ -17,11 +17,14 @@
import org.junit.Test;
import org.maemo.esbox.scratchbox.core.sdk.IScratchboxSDKTarget;
import org.maemo.esbox.scratchbox.core.sdk.ScratchboxSDKFacade;
+import org.maemo.mica.common.analysis.adapters.ILtraceSupportAdapter;
import org.maemo.mica.common.analysis.adapters.IOProfileSupportAdapter;
import org.maemo.mica.common.analysis.adapters.IValgrindSupportAdapter;
import org.maemo.mica.common.core.machine.IMachine;
import org.maemo.mica.common.core.sdk.ISDKTarget;
import org.maemo.mica.common.core.tests.TestUtils;
+import org.maemo.mica.internal.api.common.core.sdk.MachineSDK;
+import org.maemo.mica.internal.api.common.core.sdk.MachineSDKTarget;
import org.maemo.mica.internal.api.protocol.ssh.DeviceSSHLinuxMachine;
import org.maemo.mica.protocol.ssh.SSHConfiguration;
@@ -40,18 +43,21 @@
for (ISDKTarget sdkTarget : ScratchboxSDKFacade.getInstance().getScratchboxSDKTargets()) {
IOProfileSupportAdapter oprofileSupport = (IOProfileSupportAdapter) sdkTarget.getAdapter(IOProfileSupportAdapter.class);
IValgrindSupportAdapter valgrindSupportAdapter = (IValgrindSupportAdapter) sdkTarget.getAdapter(IValgrindSupportAdapter.class);
+ ILtraceSupportAdapter ltraceAdapter = (ILtraceSupportAdapter) sdkTarget.getAdapter(ILtraceSupportAdapter.class);
if (TestUtils.isSupportedSDKTarget(sdkTarget)) {
assertNotNull(sdkTarget.getName(), oprofileSupport);
assertNotNull(sdkTarget.getName(), valgrindSupportAdapter);
+ assertNotNull(sdkTarget.getName(), ltraceAdapter);
- IMachine machine = sdkTarget.getMachine();
if (sdkTarget.getArchitecture().equals(IScratchboxSDKTarget.ARCHITECTURE_ARMEL)) {
armelTarget = sdkTarget;
- assertNotNull(oprofileSupport.validateSupport(machine)); // not a device
- assertNotNull(valgrindSupportAdapter.validateSupport(machine)); // no ARMEL port of valgrind known
+ assertNotNull(oprofileSupport.validateSupport(armelTarget)); // not a device
+ assertNotNull(valgrindSupportAdapter.validateSupport(armelTarget)); // no ARMEL port of valgrind known
+ assertNotNull(ltraceAdapter.validateSupport(armelTarget)); // no ARMEL support on emulator
} else if (sdkTarget.getArchitecture().equals(IScratchboxSDKTarget.ARCHITECTURE_X86)) {
- assertNotNull(oprofileSupport.validateSupport(machine)); // not a device
- assertNull(valgrindSupportAdapter.validateSupport(machine));
+ assertNotNull(oprofileSupport.validateSupport(sdkTarget)); // not a device
+ assertNull(valgrindSupportAdapter.validateSupport(sdkTarget)); // only supported on emulator
+ assertNull(ltraceAdapter.validateSupport(sdkTarget)); // works here
}
}
}
@@ -59,16 +65,28 @@
if (armelTarget != null) {
SSHConfiguration sshConfig = new SSHConfiguration();
IMachine machine = new DeviceSSHLinuxMachine("foo", sshConfig, null);
-
+ ISDKTarget machineTarget = new MachineSDKTarget(new MachineSDK(
+ machine, "0.0", "foo"));
+
IOProfileSupportAdapter oprofileSupport = (IOProfileSupportAdapter) armelTarget.getAdapter(IOProfileSupportAdapter.class);
IValgrindSupportAdapter valgrindSupportAdapter = (IValgrindSupportAdapter) armelTarget.getAdapter(IValgrindSupportAdapter.class);
+ ILtraceSupportAdapter ltraceSupportAdapter = (ILtraceSupportAdapter) armelTarget.getAdapter(ILtraceSupportAdapter.class);
assertNotNull(oprofileSupport);
assertNotNull(valgrindSupportAdapter);
+ assertNotNull(ltraceSupportAdapter);
- assertNotNull(valgrindSupportAdapter.validateSupport(machine)); // no ARMEL port of valgrind known
- assertNull(oprofileSupport.validateSupport(machine)); // device launch
+ assertNotNull(valgrindSupportAdapter.validateSupport(armelTarget)); // no ARMEL port of valgrind known
+ assertNotNull(oprofileSupport.validateSupport(armelTarget)); // emulator launch
+ assertNotNull(ltraceSupportAdapter.validateSupport(armelTarget)); // emulator launch
+
+ assertNotNull(valgrindSupportAdapter.validateSupport(machineTarget)); // machine does not support it
+ assertNull(oprofileSupport.validateSupport(machineTarget)); // machine should support it
+ assertNull(ltraceSupportAdapter.validateSupport(machineTarget)); // machine should support it
}
+
+
+
}
}
Modified: branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/cpp/TestCppBuildConfigProjectCreator.java
===================================================================
--- branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/cpp/TestCppBuildConfigProjectCreator.java 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/cpp/TestCppBuildConfigProjectCreator.java 2009-08-19 11:53:15 UTC (rev 1971)
@@ -56,9 +56,8 @@
// the default location will be outside scratchbox for this SDK
IProject project = getNonExistingProject("test");
- projCreator = configHandler.createProjectCreatorConverter(project);
try {
- createProject(null);
+ createProject(project, null);
fail("Expected invalid location error");
} catch (CoreException e) {
assertTrue(e.toString(), e.toString().contains("is not visible"));
Modified: branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/python/ManualTestPyDevInterpreterConfigurator.java
===================================================================
--- branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/python/ManualTestPyDevInterpreterConfigurator.java 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.tests/src/org/maemo/esbox/tests/python/ManualTestPyDevInterpreterConfigurator.java 2009-08-19 11:53:15 UTC (rev 1971)
@@ -57,11 +57,9 @@
// the default location will be outside scratchbox for this SDK
IPath projectPath = TestUtils.getKnownSBVisibleWorkspacePath(theSB1SDKTarget).append("__unittest");
IProject project = getNonExistingProject("testOnSB1", projectPath);
+
+ assertTrue(super.createProject(project, projectPath));
- projCreator = configHandler.createProjectCreatorConverter(project);
-
- assertTrue(super.createProject(projectPath));
-
IProject pyHelloProject = projCreator.getProject();
assertTrue(pyHelloProject.exists());
Modified: branches/work_Raul/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualBuildMachine.java
===================================================================
--- branches/work_Raul/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualBuildMachine.java 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/core/BaseVirtualBuildMachine.java 2009-08-19 11:53:15 UTC (rev 1971)
@@ -28,6 +28,9 @@
*
*/
public abstract class BaseVirtualBuildMachine extends BaseVirtualMachine implements IBuildMachineImpl {
+ private Job validateSharesJob;
+
+
public BaseVirtualBuildMachine(String id, String name, String os, String arch,
IMachineController controller, SSHConfiguration sshConfiguration,
ISharedFilesystemProvider sharedFilesystemProvider) {
@@ -48,26 +51,34 @@
// Contrary to the comment below, we re-validate shares before a
// build, and the flags below should prevent double dialogs.
//
- Job job = new Job("Checking shared folders...") {
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- boolean shouldValidate;
- synchronized (BaseVirtualBuildMachine.this) {
- shouldValidate = !validatedShares && !isValidatingShares;
+ if (validateSharesJob == null) {
+ validateSharesJob = new Job("Checking shared folders...") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ boolean shouldValidate;
+ synchronized (BaseVirtualBuildMachine.this) {
+ shouldValidate = !validatedShares && !isValidatingShares;
+ }
+ if (shouldValidate && !monitor.isCanceled()) {
+ // now, verify shared folders
+ ensureSharesMounted(monitor);
+
+ // maybe the user cancelled or there were errors... but don't keep asking
+ validatedShares = true;
+ }
+ return Status.OK_STATUS;
}
- if (shouldValidate && !monitor.isCanceled()) {
- // now, verify shared folders
- ensureSharesMounted(monitor);
-
- // maybe the user cancelled or there were errors... but don't keep asking
- validatedShares = true;
- }
- return Status.OK_STATUS;
+
+ };
+ validateSharesJob.schedule();
+ try {
+ validateSharesJob.join();
+ } catch (InterruptedException e) {
+ validateSharesJob.cancel();
}
-
- };
- job.schedule();
+ validateSharesJob = null;
+ }
/*
// for this kind of machine, check more proactively,
Modified: branches/work_Raul/org.maemo.esbox.vm/src/org/maemo/esbox/vm/core/VirtualMachinePreferenceConstants.java
===================================================================
--- branches/work_Raul/org.maemo.esbox.vm/src/org/maemo/esbox/vm/core/VirtualMachinePreferenceConstants.java 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.vm/src/org/maemo/esbox/vm/core/VirtualMachinePreferenceConstants.java 2009-08-19 11:53:15 UTC (rev 1971)
@@ -11,6 +11,7 @@
package org.maemo.esbox.vm.core;
+import org.eclipse.jface.preference.IPreferenceStore;
import org.maemo.mica.internal.api.common.core.filesystem.SharedFolderPreferenceConverter;
/**
@@ -44,4 +45,11 @@
public static final String VM_SHARED_FOLDERS = "VM_SHARED_FOLDERS";
static final Class<?> privateKeysClass = VirtualMachinePreferenceConstantsPrivate.class;
+
+ /**
+ * Return <code>null</code>. We store preferences in {@link IVirtualMachine#getConfiguration()}
+ * and provide this method to make CorePreferenceManager happy.
+ * @return null
+ */
+ public static IPreferenceStore getPreferenceStore() { return null; }
}
Modified: branches/work_Raul/org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu/QemuPreferenceConstants.java
===================================================================
--- branches/work_Raul/org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu/QemuPreferenceConstants.java 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.vm.qemu/src/org/maemo/esbox/internal/vm/qemu/QemuPreferenceConstants.java 2009-08-19 11:53:15 UTC (rev 1971)
@@ -11,6 +11,7 @@
package org.maemo.esbox.internal.vm.qemu;
+import org.eclipse.jface.preference.IPreferenceStore;
import org.maemo.esbox.vm.core.IVirtualMachine;
/**
@@ -35,4 +36,11 @@
public static final String QEMU_DISK_IMAGE_PATHS = "QEMU_DISK_IMAGE_PATHS";
static final Class<?> privateKeysClass = QemuPreferenceConstantsPrivate.class;
+
+ /**
+ * Return <code>null</code>. We store preferences in {@link IVirtualMachine#getConfiguration()}
+ * and provide this method to make CorePreferenceManager happy.
+ * @return null
+ */
+ public static IPreferenceStore getPreferenceStore() { return null; }
}
Modified: branches/work_Raul/org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox/VirtualBoxPreferenceConstants.java
===================================================================
--- branches/work_Raul/org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox/VirtualBoxPreferenceConstants.java 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.vm.virtualbox/src/org/maemo/esbox/internal/vm/virtualbox/VirtualBoxPreferenceConstants.java 2009-08-19 11:53:15 UTC (rev 1971)
@@ -27,14 +27,17 @@
public static final int VERSION_MAJOR = 1;
public static final int VERSION_MINOR = 0;
- /** Get the preference store that contains these preferences */
- public static IPreferenceStore getPreferenceStore() {
- return Activator.getDefault().getPreferenceStore();
- }
-
public static final String VIRTUALBOX_EXE_NAME = "VIRTUALBOX_EXE_NAME";
public static final String VIRTUALBOX_LAUNCH_PATTERN = "VIRTUALBOX_LAUNCH_PATTERN";
public static final String VIRTUALBOX_MACHINE_NAME = "VIRTUALBOX_MACHINE_NAME";
static final Class<?> privateKeysClass = VirtualBoxPreferenceConstantsPrivate.class;
+
+ /**
+ * Return <code>null</code>. We store preferences in {@link IVirtualMachine#getConfiguration()}
+ * and provide this method to make CorePreferenceManager happy.
+ * @return null
+ */
+ public static IPreferenceStore getPreferenceStore() { return null; }
+
}
Modified: branches/work_Raul/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/VMwarePreferenceConstants.java
===================================================================
--- branches/work_Raul/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/VMwarePreferenceConstants.java 2009-08-19 09:56:10 UTC (rev 1970)
+++ branches/work_Raul/org.maemo.esbox.vm.vmware/src/org/maemo/esbox/internal/vm/vmware/VMwarePreferenceConstants.java 2009-08-19 11:53:15 UTC (rev 1971)
@@ -11,6 +11,7 @@
package org.maemo.esbox.internal.vm.vmware;
+import org.eclipse.jface.preference.IPreferenceStore;
import org.maemo.esbox.vm.core.IVirtualMachine;
/**
@@ -34,4 +35,11 @@
public static final String VMWARE_PRODUCT = "VMWARE_PRODUCT";
static final Class<?> privateKeysClass = VMwarePreferenceConstantsPrivate.class;
+
+ /**
+ * Return <code>null</code>. We store preferences in {@link IVirtualMachine#getConfiguration()}
+ * and provide this method to make CorePreferenceManager happy.
+ * @return null
+ */
+ public static IPreferenceStore getPreferenceStore() { return null; }
}
More information about the Esbox-commits
mailing list