diff --git a/autogen.sh b/autogen.sh index 0265b368aac8945bef556539de6c383ec3d0278e..b4aa34cc1c08c434ff5c7f31df654d8643d15bd7 100755 --- a/autogen.sh +++ b/autogen.sh @@ -2,10 +2,11 @@ touch NEWS if [[ $(uname) == "Darwin" ]]; then - glibtoolize -else - libtoolize + glibtoolize +elif [[ $(uname) != "MINGW"* ]]; then + libtoolize fi + aclocal autoconf automake --add-missing diff --git a/configure.ac b/configure.ac index 08ff4b7f1dc8b75b38f6b59aac0919b5636a634e..08d16aa1b59559a493084fb5e147f61f09395c37 100644 --- a/configure.ac +++ b/configure.ac @@ -1,8 +1,6 @@ -AC_INIT([radtel], [0.1], [armin.luntzer@univie.ac.at], []) +AC_INIT([radtel], [0.0.1], [armin.luntzer@univie.ac.at], []) AM_INIT_AUTOMAKE([subdir-objects foreign dist-xz]) -LT_INIT([dlopen]) - AC_PROG_CC AC_CONFIG_MACRO_DIRS([m4]) @@ -23,9 +21,18 @@ case "${host_os}" in ;; esac +dnl libootl sucks on windows (for our purpose), so we'll build +dnl plugin dlls ourselves +test x$IS_WINDOWS != xtrue && LT_INIT([dlopen]) +test x$IS_WINDOWS = xtrue && AC_PROG_RANLIB + + AM_CONDITIONAL([OS_WINDOWS], [test x$IS_WINDOWS = xtrue]) AM_CONDITIONAL([OS_DARWIN], [test x$IS_DARWIN = xtrue]) + + + AC_PATH_PROG(GLIB_COMPILE_RESOURCES, glib-compile-resources) GLIB_GSETTINGS diff --git a/src/server/Makefile.am b/src/server/Makefile.am index 8c3399af92766e7cc09ff7b6045b0f492024d345..a0f45d7dd918ce0c2cf4f707bc5e937bf4c0e39a 100644 --- a/src/server/Makefile.am +++ b/src/server/Makefile.am @@ -30,11 +30,10 @@ radtelsrv_LDADD += -L$(top_builddir)/src/server/api -lbackend radtelsrv_LDFLAGS := $(radtel_LIBS) radtelsrv_LDFLAGS += -lm -# do we need this? -#if OS_WINDOWS -#radtelsrv_LDFLAGS += -Wl,--out-implib,libhost.a -#radtelsrv_LDFLAGS += -Wl,--export-all-symbols -#endif +if OS_WINDOWS +radtelsrv_LDFLAGS += -Wl,--out-implib,libhost.a +radtelsrv_LDFLAGS += -Wl,--export-all-symbols +endif diff --git a/src/server/backend.c b/src/server/backend.c index 3f1deff2139da4dbf2603cd91aafec444e5bebe9..112c1f472aa24298f850de0cd5452bd44e6d72d0 100644 --- a/src/server/backend.c +++ b/src/server/backend.c @@ -66,11 +66,11 @@ static int backend_load_module_from_prefix(const gchar *plugin_path) void (*mod_init)(void); - + g_message("Will try to load plugin from %s", plugin_path); mod = g_module_open(plugin_path, G_MODULE_BIND_LAZY); if(!mod) { - g_debug("Unable to load plugin %s: %s", plugin_path, + g_warning("Unable to load plugin %s: %s", plugin_path, g_module_error()); return -1; } @@ -117,6 +117,15 @@ static int backend_load_module(const gchar *plugin_path) return 0; + /* try again in lib/plugdir */ + plug = g_strconcat("lib/", PLUGDIR, "/", plugin_path, NULL); + ret = backend_load_module_from_prefix(plug); + g_free(plug); + + if (!ret) + return 0; + + /* try again in system lib dir/plugdir */ plug = g_strconcat(LIBDIR, "/", PLUGDIR, "/", plugin_path, NULL); ret = backend_load_module_from_prefix(plug); diff --git a/src/server/backends/SIM/Makefile.am b/src/server/backends/SIM/Makefile.am index 72e7478bce3e56863178e30f84d6759e137c6a9e..195b5fb08073c65feead0b62ee75f195e9d0f5d4 100644 --- a/src/server/backends/SIM/Makefile.am +++ b/src/server/backends/SIM/Makefile.am @@ -8,8 +8,8 @@ pluginconfdir = $(sysconfdir)/$(confdir)/backends pluginconf_DATA = $(top_builddir)/src/server/config/backends/rt_sim.cfg -AM_CPPFLAGS := \-DCONFDIR=\"$(confdir)\" \ - \-DSYSCONFDIR=\"$(sysconfdir)\" +AM_CPPFLAGS := -DCONFDIR=\"$(confdir)\" \ + -DSYSCONFDIR=\"$(sysconfdir)\" AM_CFLAGS := $(GMODULE_CFLAGS) @@ -25,22 +25,54 @@ if !OS_DARWIN AM_CFLAGS += -fopenmp endif +if !OS_WINDOWS +#plugin_LTLIBRARIES = rt_sim.la +#rt_sim_la_LDFLAGS := -avoid-version +#rt_sim_la_LDFLAGS += -module +#rt_sim_la_LDFLAGS += -shared +#rt_sim_la_LDFLAGS += -export-dynamic +# +#rt_sim_la_LIBADD := -L$(top_builddir)/src/net/ -lproto +#rt_sim_la_LIBADD += -L$(top_builddir)/src/util/ -lutil +#rt_sim_la_LIBADD += $(GMODULE_LIBS) +#rt_sim_la_LIBADD += $(GTHREAD_LIBS) +#rt_sim_la_LIBADD += $(GLIB_LIBS) +#rt_sim_la_LIBADD += $(GTK3_LIBS) +#rt_sim_la_LIBADD += $(GIO_LIBS) +# +#rt_sim_la_SOURCES = rt_sim.c -plugin_LTLIBRARIES = rt_sim.la +else -rt_sim_la_LDFLAGS := -avoid-version -rt_sim_la_LDFLAGS += -module -rt_sim_la_LDFLAGS += -shared -rt_sim_la_LDFLAGS += -export-dynamic +# libtool stinks on windows. Rather, windows dlls stink +# I'll build my own! With Black Jack! And hookers! -rt_sim_la_LIBADD := -L$(top_builddir)/src/net/ -lproto -rt_sim_la_LIBADD += -L$(top_builddir)/src/util/ -lutil -rt_sim_la_LIBADD += $(GMODULE_LIBS) -rt_sim_la_LIBADD += $(GTHREAD_LIBS) -rt_sim_la_LIBADD += $(GLIB_LIBS) -rt_sim_la_LIBADD += $(GTK3_LIBS) -rt_sim_la_LIBADD += $(GIO_LIBS) +all: rt_sim.dll + +SUFFIXES = .dll +CLEANFILES = *.dll + +AM_CFLAGS += -Wl,-no-undefined +AM_CFLAGS += -Wl,--unresolved-symbols=ignore-all +AM_CFLAGS += -Wl,--enable-runtime-pseudo-reloc +AM_CFLAGS += -shared +AM_CFLAGS += -fPIC + +AM_LDFLAGS := -L$(top_builddir)/src/net/ -lproto +AM_LDFLAGS += -L$(top_builddir)/src/util/ -lutil +AM_LDFLAGS += $(GMODULE_LIBS) +AM_LDFLAGS += $(GTHREAD_LIBS) +AM_LDFLAGS += $(GLIB_LIBS) +AM_LDFLAGS += $(GTK3_LIBS) +AM_LDFLAGS += $(GIO_LIBS) +AM_LDFLAGS += -L$(top_builddir)/src/server -lhost + + +plugin_DATA = $(top_builddir)/src/server/backends/SIM/rt_sim.dll + +%.dll: %.c + $(CC) $(AM_CPPFLAGS) $(AM_CFLAGS) -I $(top_srcdir)/include -o $@ $< $(AM_LDFLAGS) +endif -rt_sim_la_SOURCES = rt_sim.c diff --git a/src/server/cfg.c b/src/server/cfg.c index 9743ecdc28da2a0370ab77fc35221920da82eaf7..c457a83cd6edff89de1c7c9a22db3e9eb292c883 100644 --- a/src/server/cfg.c +++ b/src/server/cfg.c @@ -187,10 +187,14 @@ static int server_load_config_from_prefix(const gchar *prefix, GError **err) gchar *cfg; + kf = g_key_file_new(); flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS; cfg = g_strconcat(prefix, "server.cfg", NULL); + + g_message("Will try to load config from %s", cfg); + ret = g_key_file_load_from_file(kf, cfg, flags, err); @@ -240,6 +244,14 @@ int server_cfg_load(void) g_free(prefix); } + if (ret) { + g_clear_error(&error); + /* try again in confdir */ + prefix = g_strconcat("etc/", CONFDIR, "/", NULL); + ret = server_load_config_from_prefix(prefix, &error); + g_free(prefix); + } + if (ret) { g_clear_error(&error); /* try again in sysconfdir */