You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2014/09/24 20:16:54 UTC
svn commit: r1627384 - in /qpid/dispatch/trunk: ./ include/qpid/dispatch/
python/ python/qpid_dispatch/ python/qpid_dispatch/qpid_dispatch/
python/qpid_dispatch_internal/ python/qpid_dispatch_internal/management/
router/src/ src/ tests/
Author: aconway
Date: Wed Sep 24 18:16:53 2014
New Revision: 1627384
URL: http://svn.apache.org/r1627384
Log:
NO-JIRA: Clean up how dispatch python code locates resources.
This removes nasty qpid_dispatch_lib hacker from C code that was there simply to
get the libqpiddispatch library location to python code.
An overview of what I have done here
The problem: Python code needs to find resources (the qpid_python_internal
package and libqpidpython) that we do not install on the standard python search
path.
Some requirements:
1. 'make install' to a standard location (e.g. /usr) must Just Work with no
environment settings, fiddling with config files or anything like that.
2. 'make install' to a non-standard location (e.g. /usr/local, $HOME/dispatch)
must Just Work after setting only the required standard environment variables.
(PATH, PYTHONPATH)
3. When running tests in a development build: if python barfs it must barf with
the filename of the *original source file*, not a cmake substituted file or a
file that's been copied to an install directory. This is *really important*
for deveoper sanity.
4. All information about installed locations must come from CMAKE configuration.
No guessing: "but surely it's just $prefix/lib, no wait, is that lib64 arrgh!!!"
The solution:
Two python modules:
- site.py: Sets python vars QPID_DISPATCH_HOME and QPID_DISPATCH_LIB.
It checks for same-named environment vars first, then looks in site_data module.
- site_data.py.in: cmake substituted, defines install locations using cmake variables.
For an installation: make install installs site_data.py in the normal
python path with the proper CMAKE derived install locations.
For a developer build: The run.py script that runs tests sets the required
environment variables for site.py to pick up.
Either way our scripts (qdstat etc.) just import site.py and do their thing.
Added:
qpid/dispatch/trunk/python/qpid_dispatch/qpid_dispatch/
qpid/dispatch/trunk/python/qpid_dispatch/qpid_dispatch/site_data.py
- copied, changed from r1627383, qpid/dispatch/trunk/python/CMakeLists.txt
qpid/dispatch/trunk/python/qpid_dispatch/site_data.py.in
- copied, changed from r1627383, qpid/dispatch/trunk/python/CMakeLists.txt
Modified:
qpid/dispatch/trunk/CMakeLists.txt
qpid/dispatch/trunk/include/qpid/dispatch/dispatch.h
qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h
qpid/dispatch/trunk/python/CMakeLists.txt
qpid/dispatch/trunk/python/qpid_dispatch/site.py
qpid/dispatch/trunk/python/qpid_dispatch_internal/dispatch_c.py
qpid/dispatch/trunk/python/qpid_dispatch_internal/management/agent.py
qpid/dispatch/trunk/python/setup.py.in
qpid/dispatch/trunk/router/src/config.h.in
qpid/dispatch/trunk/router/src/main.c
qpid/dispatch/trunk/src/CMakeLists.txt
qpid/dispatch/trunk/src/dispatch.c
qpid/dispatch/trunk/src/python_embedded.c
qpid/dispatch/trunk/tests/run.py.in
qpid/dispatch/trunk/tests/run_unit_tests.c
Modified: qpid/dispatch/trunk/CMakeLists.txt
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/CMakeLists.txt?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/CMakeLists.txt (original)
+++ qpid/dispatch/trunk/CMakeLists.txt Wed Sep 24 18:16:53 2014
@@ -131,9 +131,8 @@ install(FILES
DESTINATION ${DOC_INSTALL_DIR}/qpid-dispatch)
-# Build Tests first as other subdirs use tests/run.py
+add_subdirectory(src) # Build src first so other subdirs can use QPID_DISPATCH_LIB
add_subdirectory(tests)
add_subdirectory(python)
-add_subdirectory(src)
add_subdirectory(doc)
add_subdirectory(router)
Modified: qpid/dispatch/trunk/include/qpid/dispatch/dispatch.h
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/include/qpid/dispatch/dispatch.h?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/include/qpid/dispatch/dispatch.h (original)
+++ qpid/dispatch/trunk/include/qpid/dispatch/dispatch.h Wed Sep 24 18:16:53 2014
@@ -38,7 +38,7 @@ typedef struct qd_dispatch_t qd_dispatch
* @param python_pkgdir The path to the Python files.
* @return A handle to be used in API calls for this instance.
*/
-qd_dispatch_t *qd_dispatch(const char *python_pkgdir, const char *qpid_dispatch_lib);
+qd_dispatch_t *qd_dispatch(const char *python_pkgdir);
/**
Modified: qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h (original)
+++ qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h Wed Sep 24 18:16:53 2014
@@ -30,9 +30,7 @@
* Initialize the embedded-python subsystem. This must be called before
* any other call into this module is invoked.
*/
-void qd_python_initialize(qd_dispatch_t *qd,
- const char *python_pkgdir,
- const char *qpid_dispatch_lib);
+void qd_python_initialize(qd_dispatch_t *qd, const char *python_pkgdir);
/**
* Finalize the embedded-python subsystem. After this is called, there
Modified: qpid/dispatch/trunk/python/CMakeLists.txt
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/python/CMakeLists.txt?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/python/CMakeLists.txt (original)
+++ qpid/dispatch/trunk/python/CMakeLists.txt Wed Sep 24 18:16:53 2014
@@ -23,5 +23,8 @@ install(DIRECTORY qpid_dispatch_internal
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in
${CMAKE_CURRENT_BINARY_DIR}/setup.py)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/qpid_dispatch/site_data.py.in
+ ${CMAKE_CURRENT_BINARY_DIR}/qpid_dispatch/site_data.py)
+
# Install script for public python modules
install(SCRIPT install_python.cmake)
Copied: qpid/dispatch/trunk/python/qpid_dispatch/qpid_dispatch/site_data.py (from r1627383, qpid/dispatch/trunk/python/CMakeLists.txt)
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/python/qpid_dispatch/qpid_dispatch/site_data.py?p2=qpid/dispatch/trunk/python/qpid_dispatch/qpid_dispatch/site_data.py&p1=qpid/dispatch/trunk/python/CMakeLists.txt&r1=1627383&r2=1627384&rev=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/python/CMakeLists.txt (original)
+++ qpid/dispatch/trunk/python/qpid_dispatch/qpid_dispatch/site_data.py Wed Sep 24 18:16:53 2014
@@ -17,11 +17,15 @@
# under the License.
#
-# Private python modules, not in standard python site dir.
-install(DIRECTORY qpid_dispatch_internal DESTINATION ${QPID_DISPATCH_HOME}/python)
+"""
+INTERNAL USE ONLY - Installed locations for qpid dispatch.
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in
- ${CMAKE_CURRENT_BINARY_DIR}/setup.py)
+Do not import directly, import site.py which also checks for override by
+environment variables. This file will not be available for uninstalled builds,
+site.py will use env variables instead.
+"""
-# Install script for public python modules
-install(SCRIPT install_python.cmake)
+from os.path import join
+
+QPID_DISPATCH_HOME = ""
+QPID_DISPATCH_LIB = ""
Modified: qpid/dispatch/trunk/python/qpid_dispatch/site.py
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/python/qpid_dispatch/site.py?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/python/qpid_dispatch/site.py (original)
+++ qpid/dispatch/trunk/python/qpid_dispatch/site.py Wed Sep 24 18:16:53 2014
@@ -17,16 +17,23 @@
# under the License
#
-"""Qpid Dispatch site configuration - INTERNAL USE ONLY"""
+"""
+INTERNAL USE ONLY - Qpid Dispatch site configuration.
+"""
import os, sys
-HOME = os.environ.get('QPID_DISPATCH_HOME')
-
-if not HOME:
+def get_variable(name):
+ """Get variable value by first checking os.environ, then site_data"""
+ value = os.environ.get(name)
+ if value: return value
try:
- from .site_data import HOME
+ site_data = __import__('qpid_dispatch.site_data', globals(), locals(), [name])
+ return getattr(site_data, name)
except ImportError, e:
- raise ImportError("%s: Set QPID_DISPATCH_HOME environment variable." % e)
+ raise ImportError("%s: Set %s environment variable." % (e, env))
+
+for var in ['QPID_DISPATCH_HOME', 'QPID_DISPATCH_LIB']:
+ globals()[var] = get_variable(var)
-sys.path.insert(0, os.path.join(HOME, 'python'))
+sys.path.insert(0, os.path.join(QPID_DISPATCH_HOME, 'python'))
Copied: qpid/dispatch/trunk/python/qpid_dispatch/site_data.py.in (from r1627383, qpid/dispatch/trunk/python/CMakeLists.txt)
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/python/qpid_dispatch/site_data.py.in?p2=qpid/dispatch/trunk/python/qpid_dispatch/site_data.py.in&p1=qpid/dispatch/trunk/python/CMakeLists.txt&r1=1627383&r2=1627384&rev=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/python/CMakeLists.txt (original)
+++ qpid/dispatch/trunk/python/qpid_dispatch/site_data.py.in Wed Sep 24 18:16:53 2014
@@ -17,11 +17,15 @@
# under the License.
#
-# Private python modules, not in standard python site dir.
-install(DIRECTORY qpid_dispatch_internal DESTINATION ${QPID_DISPATCH_HOME}/python)
+"""
+INTERNAL USE ONLY - Installed locations for qpid dispatch.
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in
- ${CMAKE_CURRENT_BINARY_DIR}/setup.py)
+Do not import directly, import site.py which also checks for override by
+environment variables. This file will not be available for uninstalled builds,
+site.py will use env variables instead.
+"""
-# Install script for public python modules
-install(SCRIPT install_python.cmake)
+from os.path import join
+
+QPID_DISPATCH_HOME = "${QPID_DISPATCH_HOME_INSTALLED}"
+QPID_DISPATCH_LIB = join("${CMAKE_INSTALL_PREFIX}", "${LIB_INSTALL_DIR}", "${QPID_DISPATCH_LIB}")
Modified: qpid/dispatch/trunk/python/qpid_dispatch_internal/dispatch_c.py
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/python/qpid_dispatch_internal/dispatch_c.py?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/python/qpid_dispatch_internal/dispatch_c.py (original)
+++ qpid/dispatch/trunk/python/qpid_dispatch_internal/dispatch_c.py Wed Sep 24 18:16:53 2014
@@ -21,10 +21,7 @@
import ctypes, os
from ctypes import c_char_p, c_long, py_object
-try:
- from dispatch import QPID_DISPATCH_LIB
-except:
- QPID_DISPATCH_LIB = None
+from qpid_dispatch.site import QPID_DISPATCH_LIB
class CError(Exception):
"""Exception raised if there is an error in a C call"""
@@ -45,7 +42,7 @@ class QdDll(ctypes.PyDLL):
return cls._instance
def __init__(self):
- lib = QPID_DISPATCH_LIB or os.environ.get('QPID_DISPATCH_LIB')
+ lib = QPID_DISPATCH_LIB
assert lib
super(QdDll, self).__init__(lib)
Modified: qpid/dispatch/trunk/python/qpid_dispatch_internal/management/agent.py
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/python/qpid_dispatch_internal/management/agent.py?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/python/qpid_dispatch_internal/management/agent.py (original)
+++ qpid/dispatch/trunk/python/qpid_dispatch_internal/management/agent.py Wed Sep 24 18:16:53 2014
@@ -41,7 +41,7 @@ def dictstr(d):
def required_property(prop, request):
"""Raise exception if required property is missing"""
- if prop not in request.properties:
+ if not request.properties or prop not in request.properties:
raise BadRequestStatus("No '%s' property: %s"%(prop, request))
return request.properties[prop]
Modified: qpid/dispatch/trunk/python/setup.py.in
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/python/setup.py.in?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/python/setup.py.in (original)
+++ qpid/dispatch/trunk/python/setup.py.in Wed Sep 24 18:16:53 2014
@@ -20,22 +20,23 @@
from distutils.core import setup
from distutils.command.build_py import build_py
-from distutils.file_util import write_file
-import os
+from distutils.file_util import copy_file
+from os.path import join
"""Install public packages and scripts for Qpid Dispatch."""
class BuildPy(build_py):
"""Extend standard build command, add generated site_data.py file."""
- def site_data_py(self): return os.path.join(self.build_lib, 'qpid_dispatch', 'site_data.py')
+ SITE_DATA_PY = join('qpid_dispatch', 'site_data.py')
def run(self):
- build_py.run(self) # Run the standard build
- write_file(self.site_data_py(), ['HOME = "${QPID_DISPATCH_HOME_INSTALLED}"'])
+ build_py.run(self) # Run the standard build, copies source .py files into builddir
+ copy_file(join('${CMAKE_CURRENT_BINARY_DIR}', self.SITE_DATA_PY),
+ join(self.build_lib, self.SITE_DATA_PY))
def get_outputs(self, **kwargs):
- return build_py.get_outputs(self, **kwargs) +[self.site_data_py()]
+ return build_py.get_outputs(self, **kwargs) +[join(self.build_lib, self.SITE_DATA_PY)]
# Install public python modules in standard python locations.
setup(
Modified: qpid/dispatch/trunk/router/src/config.h.in
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/router/src/config.h.in?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/router/src/config.h.in (original)
+++ qpid/dispatch/trunk/router/src/config.h.in Wed Sep 24 18:16:53 2014
@@ -20,5 +20,3 @@
#cmakedefine DEFAULT_CONFIG_PATH "${DEFAULT_CONFIG_PATH}"
#cmakedefine QPID_DISPATCH_HOME_INSTALLED "${QPID_DISPATCH_HOME_INSTALLED}"
-// Use #define, not #cmakedefine because SO_VERSION_MAJOR may be 0 which #cmakedefine considers unset.
-#define QPID_DISPATCH_LIB "libqpid-dispatch.so.${SO_VERSION_MAJOR}"
Modified: qpid/dispatch/trunk/router/src/main.c
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/router/src/main.c?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/router/src/main.c (original)
+++ qpid/dispatch/trunk/router/src/main.c Wed Sep 24 18:16:53 2014
@@ -89,10 +89,10 @@ static void check(int fd) {
}
-static void main_process(const char *config_path, const char *python_pkgdir, const char *qpid_dispatch_lib, int fd)
+static void main_process(const char *config_path, const char *python_pkgdir, int fd)
{
qd_error_clear();
- dispatch = qd_dispatch(python_pkgdir, qpid_dispatch_lib);
+ dispatch = qd_dispatch(python_pkgdir);
check(fd);
log_source = qd_log_source("MAIN"); /* Logging is initialized by qd_dispatch. */
qd_dispatch_load_config(dispatch, config_path);
@@ -122,7 +122,7 @@ static void main_process(const char *con
}
-static void daemon_process(const char *config_path, const char *python_pkgdir, const char *qpid_dispatch_lib,
+static void daemon_process(const char *config_path, const char *python_pkgdir,
const char *pidfile, const char *user)
{
int pipefd[2];
@@ -234,7 +234,7 @@ static void daemon_process(const char *c
}
}
- main_process(config_path, python_pkgdir, qpid_dispatch_lib, pipefd[1]);
+ main_process(config_path, python_pkgdir, pipefd[1]);
} else
//
// Exit first child
@@ -266,7 +266,6 @@ int main(int argc, char **argv)
#define DEFAULT_DISPATCH_PYTHON_DIR QPID_DISPATCH_HOME_INSTALLED "/python"
const char *config_path = DEFAULT_CONFIG_PATH;
const char *python_pkgdir = DEFAULT_DISPATCH_PYTHON_DIR;
- const char *qpid_dispatch_lib = QPID_DISPATCH_LIB;
const char *pidfile = 0;
const char *user = 0;
bool daemon_mode = false;
@@ -325,9 +324,9 @@ int main(int argc, char **argv)
}
if (daemon_mode)
- daemon_process(config_path, python_pkgdir, qpid_dispatch_lib, pidfile, user);
+ daemon_process(config_path, python_pkgdir, pidfile, user);
else
- main_process(config_path, python_pkgdir, qpid_dispatch_lib, -1);
+ main_process(config_path, python_pkgdir, -1);
return 0;
}
Modified: qpid/dispatch/trunk/src/CMakeLists.txt
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/CMakeLists.txt?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/CMakeLists.txt (original)
+++ qpid/dispatch/trunk/src/CMakeLists.txt Wed Sep 24 18:16:53 2014
@@ -80,3 +80,6 @@ set_target_properties(qpid-dispatch PROP
)
install(TARGETS qpid-dispatch
LIBRARY DESTINATION ${LIB_INSTALL_DIR})
+
+# TODO aconway 2014-09-24: won't work on windows, need portable way to get link name.
+set (QPID_DISPATCH_LIB "libqpid-dispatch.so.${SO_VERSION_MAJOR}" PARENT_SCOPE)
Modified: qpid/dispatch/trunk/src/dispatch.c
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/dispatch.c?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/dispatch.c (original)
+++ qpid/dispatch/trunk/src/dispatch.c Wed Sep 24 18:16:53 2014
@@ -47,7 +47,7 @@ qd_agent_t *qd_agent(qd_dispatch_t *
void qd_agent_free(qd_agent_t *agent);
void qd_error_initialize();
-qd_dispatch_t *qd_dispatch(const char *python_pkgdir, const char *qpid_dispatch_lib)
+qd_dispatch_t *qd_dispatch(const char *python_pkgdir)
{
qd_error_clear();
qd_dispatch_t *qd = NEW(qd_dispatch_t);
@@ -63,7 +63,7 @@ qd_dispatch_t *qd_dispatch(const char *p
qd->router_id = strdup("0");
qd->router_mode = QD_ROUTER_MODE_ENDPOINT;
- qd_python_initialize(qd, python_pkgdir, qpid_dispatch_lib);
+ qd_python_initialize(qd, python_pkgdir);
if (qd_error_code()) { qd_dispatch_free(qd); return 0; }
qd_message_initialize();
if (qd_error_code()) { qd_dispatch_free(qd); return 0; }
Modified: qpid/dispatch/trunk/src/python_embedded.c
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/python_embedded.c?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/python_embedded.c (original)
+++ qpid/dispatch/trunk/src/python_embedded.c Wed Sep 24 18:16:53 2014
@@ -37,24 +37,19 @@ static qd_log_source_t *log_source = 0;
static PyObject *dispatch_module = 0;
static PyObject *message_type = 0;
static PyObject *dispatch_python_pkgdir = 0;
-static PyObject *qpid_dispatch_lib = 0;
static qd_address_semantics_t py_semantics = QD_FANOUT_MULTIPLE | QD_BIAS_NONE | QD_CONGESTION_DROP | QD_DROP_FOR_SLOW_CONSUMERS;
static void qd_python_setup(void);
-void qd_python_initialize(qd_dispatch_t *qd,
- const char *python_pkgdir,
- const char *qpid_dispatch_lib_)
+void qd_python_initialize(qd_dispatch_t *qd, const char *python_pkgdir)
{
log_source = qd_log_source("PYTHON");
dispatch = qd;
ilock = sys_mutex();
if (python_pkgdir)
dispatch_python_pkgdir = PyString_FromString(python_pkgdir);
- if (qpid_dispatch_lib_)
- qpid_dispatch_lib = PyString_FromString(qpid_dispatch_lib_);
Py_Initialize();
qd_python_setup();
@@ -688,11 +683,6 @@ static void qd_python_setup(void)
PyList_Append(sys_path, dispatch_python_pkgdir);
}
- // Set the QPID_DISPATCH_LIB constant.
- if (qpid_dispatch_lib) {
- PyModule_AddObject(m, "QPID_DISPATCH_LIB", qpid_dispatch_lib);
- }
-
//
// Add LogAdapter
//
Modified: qpid/dispatch/trunk/tests/run.py.in
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/tests/run.py.in?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/tests/run.py.in (original)
+++ qpid/dispatch/trunk/tests/run.py.in Wed Sep 24 18:16:53 2014
@@ -64,7 +64,7 @@ env_vars = {
'SOURCE_DIR': "${CMAKE_SOURCE_DIR}",
'BUILD_DIR': "${CMAKE_BINARY_DIR}",
'QPID_DISPATCH_HOME': "${CMAKE_SOURCE_DIR}",
- 'QPID_DISPATCH_LIB': "${CMAKE_BINARY_DIR}/src/libqpid-dispatch.so.${SO_VERSION_MAJOR}"
+ 'QPID_DISPATCH_LIB': "${CMAKE_BINARY_DIR}/src/${QPID_DISPATCH_LIB}"
}
os.environ.update(env_vars)
Modified: qpid/dispatch/trunk/tests/run_unit_tests.c
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/tests/run_unit_tests.c?rev=1627384&r1=1627383&r2=1627384&view=diff
==============================================================================
--- qpid/dispatch/trunk/tests/run_unit_tests.c (original)
+++ qpid/dispatch/trunk/tests/run_unit_tests.c Wed Sep 24 18:16:53 2014
@@ -35,7 +35,7 @@ int main(int argc, char** argv)
exit(1);
}
- qd_dispatch_t *qd = qd_dispatch(0, 0);
+ qd_dispatch_t *qd = qd_dispatch(0);
qd_dispatch_load_config(qd, argv[1]);
int result = 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org