diff options
author | Thomas White <taw@physics.org> | 2010-03-03 17:50:15 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2010-03-03 17:50:15 +0100 |
commit | 46a7ae42f1261a4aa0882af958ec93cc2e8d9610 (patch) | |
tree | 2976d88d9acce410575c32588be3bb1a8d4a91d7 | |
parent | 82792fbe72e2de4fa74f6bfc465159d86e59df43 (diff) |
Stabilise DirAx stuff, and remove GLib dependency
-rw-r--r-- | config.h.in | 3 | ||||
-rwxr-xr-x | configure | 32 | ||||
-rw-r--r-- | configure.ac | 10 | ||||
-rw-r--r-- | src/Makefile.am | 9 | ||||
-rw-r--r-- | src/Makefile.in | 22 | ||||
-rw-r--r-- | src/dirax.c | 58 | ||||
-rw-r--r-- | src/dirax.h | 9 | ||||
-rw-r--r-- | src/hdfsee.c | 1 | ||||
-rw-r--r-- | src/image.h | 5 |
9 files changed, 51 insertions, 98 deletions
diff --git a/config.h.in b/config.h.in index cf537d9b..e58d569f 100644 --- a/config.h.in +++ b/config.h.in @@ -3,9 +3,6 @@ /* Define to 1 if you have the <fcntl.h> header file. */ #undef HAVE_FCNTL_H -/* Define to 1 if GLib is available */ -#undef HAVE_GLIB - /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H @@ -641,8 +641,6 @@ am__EXEEXT_TRUE LTLIBOBJS HAVE_OPENCL_FALSE HAVE_OPENCL_TRUE -HAVE_GLIB_FALSE -HAVE_GLIB_TRUE HAVE_GTK_FALSE HAVE_GTK_TRUE GTK_LIBS @@ -5139,10 +5137,9 @@ if test "${enable_gtk+set}" = set; then enableval=$enable_gtk; fi -haveglib=false havegtk=false -{ $as_echo "$as_me:$LINENO: checking whether to use GTK/GLib" >&5 -$as_echo_n "checking whether to use GTK/GLib... " >&6; } +{ $as_echo "$as_me:$LINENO: checking whether to use GTK" >&5 +$as_echo_n "checking whether to use GTK... " >&6; } if test "x$enable_gtk" != "xno"; then { $as_echo "$as_me:$LINENO: result: yes" >&5 @@ -5381,13 +5378,7 @@ fi $as_echo "yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&6; } havegtk=true - haveglib=true - -cat >>confdefs.h <<\_ACEOF -#define HAVE_GLIB 1 -_ACEOF - - GTK_LIBS="$GTK_LIBS -lgthread-2.0 -lutil" + GTK_LIBS="$GTK_LIBS" else { $as_echo "$as_me:$LINENO: result: no" >&5 @@ -5495,14 +5486,6 @@ else HAVE_GTK_FALSE= fi - if test x$haveglib = xtrue; then - HAVE_GLIB_TRUE= - HAVE_GLIB_FALSE='#' -else - HAVE_GLIB_TRUE='#' - HAVE_GLIB_FALSE= -fi - if test x$have_opencl = xtrue; then HAVE_OPENCL_TRUE= HAVE_OPENCL_FALSE='#' @@ -5513,7 +5496,7 @@ fi CFLAGS="$CFLAGS $HDF5_CFLAGS $GTK_CFLAGS $GSL_CFLAGS $OPENCL_CFLAGS" -LIBS="$LIBS $HDF5_LIBS -lm -lz $GSL_LIBS $GTK_LIBS $OPENCL_LIBS" +LIBS="$LIBS $HDF5_LIBS -lm -lz $GSL_LIBS $GTK_LIBS $OPENCL_LIBS -lutil" ac_config_files="$ac_config_files Makefile src/Makefile data/Makefile" @@ -5643,13 +5626,6 @@ $as_echo "$as_me: error: conditional \"HAVE_GTK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi -if test -z "${HAVE_GLIB_TRUE}" && test -z "${HAVE_GLIB_FALSE}"; then - { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_GLIB\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -$as_echo "$as_me: error: conditional \"HAVE_GLIB\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi if test -z "${HAVE_OPENCL_TRUE}" && test -z "${HAVE_OPENCL_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_OPENCL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 diff --git a/configure.ac b/configure.ac index e8365f03..1911f67d 100644 --- a/configure.ac +++ b/configure.ac @@ -54,18 +54,15 @@ AS_IF([test "x$enable_opencl" == "xyes"], AC_ARG_ENABLE(gtk, AS_HELP_STRING([--disable-gtk], [Disable GTK+/GLib])) -haveglib=false havegtk=false -AC_MSG_CHECKING([whether to use GTK/GLib]) +AC_MSG_CHECKING([whether to use GTK]) AS_IF([test "x$enable_gtk" != "xno"], [ AC_MSG_RESULT([yes]) AM_PATH_GTK_2_0(2.0.0, [ havegtk=true - haveglib=true - AC_DEFINE([HAVE_GLIB], [1], [Define to 1 if GLib is available]) - GTK_LIBS="$GTK_LIBS -lgthread-2.0 -lutil" + GTK_LIBS="$GTK_LIBS" ], [ AC_MSG_WARN([GTK not found. hdfsee will not be built.]) @@ -76,10 +73,9 @@ AS_IF([test "x$enable_gtk" != "xno"], ]) AM_CONDITIONAL([HAVE_GTK], test x$havegtk = xtrue) -AM_CONDITIONAL([HAVE_GLIB], test x$haveglib = xtrue) AM_CONDITIONAL([HAVE_OPENCL], test x$have_opencl = xtrue) CFLAGS="$CFLAGS $HDF5_CFLAGS $GTK_CFLAGS $GSL_CFLAGS $OPENCL_CFLAGS" -LIBS="$LIBS $HDF5_LIBS -lm -lz $GSL_LIBS $GTK_LIBS $OPENCL_LIBS" +LIBS="$LIBS $HDF5_LIBS -lm -lz $GSL_LIBS $GTK_LIBS $OPENCL_LIBS -lutil" AC_OUTPUT(Makefile src/Makefile data/Makefile) diff --git a/src/Makefile.am b/src/Makefile.am index 3240290a..e696fcbf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -23,15 +23,12 @@ process_hkl_LDADD = @LIBS@ indexamajig_SOURCES = indexamajig.c hdf5-file.c utils.c cell.c image.c \ intensities.c peaks.c index.c filters.c \ - diffraction.c detector.c sfac.c + diffraction.c detector.c sfac.c dirax.c indexamajig_LDADD = @LIBS@ if HAVE_OPENCL indexamajig_SOURCES += diffraction-gpu.c cl-utils.c endif -if HAVE_GLIB -indexamajig_SOURCES += dirax.c -endif if HAVE_GTK hdfsee_SOURCES = hdfsee.c displaywindow.c render.c hdf5-file.c utils.c image.c \ @@ -49,8 +46,4 @@ powder_plot_SOURCES = powder_plot.c cell.c utils.c image.c hdf5-file.c \ detector.c powder_plot_LDADD = @LIBS@ -if HAVE_GLIB -powder_plot_SOURCES += dirax.c -endif - INCLUDES = "-I$(top_srcdir)/data" diff --git a/src/Makefile.in b/src/Makefile.in index 0eccb84c..5e775b44 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -38,8 +38,6 @@ bin_PROGRAMS = pattern_sim$(EXEEXT) process_hkl$(EXEEXT) \ @HAVE_GTK_TRUE@am__append_1 = hdfsee @HAVE_OPENCL_TRUE@am__append_2 = diffraction-gpu.c cl-utils.c @HAVE_OPENCL_TRUE@am__append_3 = diffraction-gpu.c cl-utils.c -@HAVE_GLIB_TRUE@am__append_4 = dirax.c -@HAVE_GLIB_TRUE@am__append_5 = dirax.c subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -71,16 +69,15 @@ hdfsee_OBJECTS = $(am_hdfsee_OBJECTS) hdfsee_DEPENDENCIES = am__indexamajig_SOURCES_DIST = indexamajig.c hdf5-file.c utils.c \ cell.c image.c intensities.c peaks.c index.c filters.c \ - diffraction.c detector.c sfac.c diffraction-gpu.c cl-utils.c \ - dirax.c + diffraction.c detector.c sfac.c dirax.c diffraction-gpu.c \ + cl-utils.c @HAVE_OPENCL_TRUE@am__objects_1 = diffraction-gpu.$(OBJEXT) \ @HAVE_OPENCL_TRUE@ cl-utils.$(OBJEXT) -@HAVE_GLIB_TRUE@am__objects_2 = dirax.$(OBJEXT) am_indexamajig_OBJECTS = indexamajig.$(OBJEXT) hdf5-file.$(OBJEXT) \ utils.$(OBJEXT) cell.$(OBJEXT) image.$(OBJEXT) \ intensities.$(OBJEXT) peaks.$(OBJEXT) index.$(OBJEXT) \ filters.$(OBJEXT) diffraction.$(OBJEXT) detector.$(OBJEXT) \ - sfac.$(OBJEXT) $(am__objects_1) $(am__objects_2) + sfac.$(OBJEXT) dirax.$(OBJEXT) $(am__objects_1) indexamajig_OBJECTS = $(am_indexamajig_OBJECTS) indexamajig_DEPENDENCIES = am__pattern_sim_SOURCES_DIST = pattern_sim.c diffraction.c utils.c \ @@ -92,11 +89,9 @@ am_pattern_sim_OBJECTS = pattern_sim.$(OBJEXT) diffraction.$(OBJEXT) \ intensities.$(OBJEXT) reflections.$(OBJEXT) $(am__objects_1) pattern_sim_OBJECTS = $(am_pattern_sim_OBJECTS) pattern_sim_DEPENDENCIES = -am__powder_plot_SOURCES_DIST = powder_plot.c cell.c utils.c image.c \ - hdf5-file.c detector.c dirax.c am_powder_plot_OBJECTS = powder_plot.$(OBJEXT) cell.$(OBJEXT) \ utils.$(OBJEXT) image.$(OBJEXT) hdf5-file.$(OBJEXT) \ - detector.$(OBJEXT) $(am__objects_2) + detector.$(OBJEXT) powder_plot_OBJECTS = $(am_powder_plot_OBJECTS) powder_plot_DEPENDENCIES = am_process_hkl_OBJECTS = process_hkl.$(OBJEXT) sfac.$(OBJEXT) \ @@ -117,8 +112,8 @@ SOURCES = $(compare_hkl_SOURCES) $(get_hkl_SOURCES) $(hdfsee_SOURCES) \ $(powder_plot_SOURCES) $(process_hkl_SOURCES) DIST_SOURCES = $(compare_hkl_SOURCES) $(get_hkl_SOURCES) \ $(am__hdfsee_SOURCES_DIST) $(am__indexamajig_SOURCES_DIST) \ - $(am__pattern_sim_SOURCES_DIST) \ - $(am__powder_plot_SOURCES_DIST) $(process_hkl_SOURCES) + $(am__pattern_sim_SOURCES_DIST) $(powder_plot_SOURCES) \ + $(process_hkl_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -223,7 +218,7 @@ process_hkl_SOURCES = process_hkl.c sfac.c statistics.c cell.c utils.c \ process_hkl_LDADD = @LIBS@ indexamajig_SOURCES = indexamajig.c hdf5-file.c utils.c cell.c image.c \ intensities.c peaks.c index.c filters.c diffraction.c \ - detector.c sfac.c $(am__append_3) $(am__append_4) + detector.c sfac.c dirax.c $(am__append_3) indexamajig_LDADD = @LIBS@ @HAVE_GTK_TRUE@hdfsee_SOURCES = hdfsee.c displaywindow.c render.c hdf5-file.c utils.c image.c \ @HAVE_GTK_TRUE@ filters.c @@ -234,7 +229,8 @@ get_hkl_LDADD = @LIBS@ compare_hkl_SOURCES = compare_hkl.c sfac.c cell.c utils.c reflections.c compare_hkl_LDADD = @LIBS@ powder_plot_SOURCES = powder_plot.c cell.c utils.c image.c hdf5-file.c \ - detector.c $(am__append_5) + detector.c + powder_plot_LDADD = @LIBS@ INCLUDES = "-I$(top_srcdir)/data" all: all-am diff --git a/src/dirax.c b/src/dirax.c index 78f2f2b3..8a6f05fd 100644 --- a/src/dirax.c +++ b/src/dirax.c @@ -15,7 +15,6 @@ #endif -#include <glib.h> #include <stdlib.h> #include <stdio.h> #include <math.h> @@ -165,8 +164,7 @@ static void dirax_send_next(struct image *image) break; default: - image->dirax_step = 0; - g_main_loop_quit(image->dirax_ml); + dirax_sendline("exit\n", image); return; } @@ -175,24 +173,15 @@ static void dirax_send_next(struct image *image) } -static gboolean dirax_readable(GIOChannel *dirax, GIOCondition condition, - struct image *image) +static int dirax_readable(struct image *image) { int rval; int no_string = 0; rval = read(image->dirax_pty, image->dirax_rbuffer+image->dirax_rbufpos, - image->dirax_rbuflen-image->dirax_rbufpos); + image->dirax_rbuflen-image->dirax_rbufpos); - if ( (rval == -1) || (rval == 0) ) { - - ERROR("Lost connection to DirAx (rval=%i)\n", rval); - waitpid(image->dirax_pid, NULL, 0); - g_io_channel_shutdown(image->dirax, FALSE, NULL); - image->dirax = NULL; - return FALSE; - - } + if ( (rval == -1) || (rval == 0) ) return 1; image->dirax_rbufpos += rval; assert(image->dirax_rbufpos <= image->dirax_rbuflen); @@ -264,10 +253,7 @@ static gboolean dirax_readable(GIOChannel *dirax, GIOCondition condition, /* Obviously, this never happens :) */ ERROR("Unrecognised DirAx input mode! " "I don't know how to understand DirAx\n"); - waitpid(image->dirax_pid, NULL, 0); - g_io_channel_shutdown(image->dirax, FALSE, NULL); - image->dirax = NULL; - return FALSE; + return 1; } @@ -306,7 +292,7 @@ static gboolean dirax_readable(GIOChannel *dirax, GIOCondition condition, } - return TRUE; + return 0; } @@ -315,6 +301,7 @@ void run_dirax(struct image *image) unsigned int opts; int saved_stderr; int status; + int rval; saved_stderr = dup(STDERR_FILENO); image->dirax_pid = forkpty(&image->dirax_pty, NULL, NULL, NULL); @@ -352,13 +339,34 @@ void run_dirax(struct image *image) image->dirax_step = 1; /* This starts the "initialisation" procedure */ image->dirax_read_cell = 0; - image->dirax = g_io_channel_unix_new(image->dirax_pty); - g_io_add_watch(image->dirax, G_IO_IN | G_IO_HUP, - (GIOFunc)dirax_readable, image); + do { + + fd_set fds; + struct timeval tv; + int sval; + + FD_ZERO(&fds); + FD_SET(image->dirax_pty, &fds); + + tv.tv_sec = 1; + tv.tv_usec = 0; + + sval = select(image->dirax_pty+1, &fds, NULL, NULL, &tv); + + if ( sval == -1 ) { + ERROR("select() failed.\n"); + rval = 1; + } else if ( sval != 0 ) { + rval = dirax_readable(image); + } else { + ERROR("No response from DirAx..\n"); + rval = 1; + } + + } while ( !rval ); - image->dirax_ml = g_main_loop_new(NULL, FALSE); - g_main_loop_run(image->dirax_ml); close(image->dirax_pty); + close(saved_stderr); wait(&status); return; diff --git a/src/dirax.h b/src/dirax.h index 530d2696..8c429710 100644 --- a/src/dirax.h +++ b/src/dirax.h @@ -19,17 +19,8 @@ #include "utils.h" -#if HAVE_GLIB extern void run_dirax(struct image *image); -#else - -static void run_dirax(struct image *image) -{ - ERROR("Can't run DirAx without GLib.\n"); -} - -#endif #endif /* DIRAX_H */ diff --git a/src/hdfsee.c b/src/hdfsee.c index 5306059b..a1d16b56 100644 --- a/src/hdfsee.c +++ b/src/hdfsee.c @@ -91,7 +91,6 @@ int main(int argc, char *argv[]) {0, 0, NULL, 0} }; - g_thread_init(NULL); gtk_init(&argc, &argv); /* Short options */ diff --git a/src/image.h b/src/image.h index 349e680c..413f633b 100644 --- a/src/image.h +++ b/src/image.h @@ -87,19 +87,16 @@ struct image { ImageFeatureList *rflist; /* "Predicted" features */ /* DirAx auto-indexing low-level stuff */ -#if HAVE_GLIB - GIOChannel *dirax; int dirax_pty; pid_t dirax_pid; char *dirax_rbuffer; int dirax_rbufpos; int dirax_rbuflen; - GMainLoop *dirax_ml; /* DirAx auto-indexing high-level stuff */ int dirax_step; int dirax_read_cell; -#endif + }; /* An opaque type representing a list of images */ |