null+****@clear*****
null+****@clear*****
2011年 5月 14日 (土) 20:49:05 JST
Kouhei Sutou 2011-05-14 11:49:05 +0000 (Sat, 14 May 2011)
New Revision: 4fd81d360b8998330be661ecb4129f64e97d8a79
Log:
[win32] use relative path of libgroonga.dll instead of the current process.
We should compute plugins path relative from libgroonga.dll instead of
the current process. "The current process" way works well with groonga.exe
use but doesn't work with library use such as rroonga.
Modified files:
configure.ac
lib/Makefile.am
lib/util.c
mkmfwin32.vbs
Modified: configure.ac (+13 -0)
===================================================================
--- configure.ac 2011-05-14 10:23:01 +0000 (bb5440f)
+++ configure.ac 2011-05-14 11:49:05 +0000 (7646093)
@@ -95,6 +95,18 @@ AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
+LT_CURRENT=0
+LT_REVISION=0
+LT_AGE=0
+LT_VERSION_INFO="\$(LT_CURRENT):\$(LT_REVISION):\$(LT_AGE)"
+AC_SUBST(LT_CURRENT)
+AC_SUBST(LT_REVISION)
+AC_SUBST(LT_AGE)
+AC_SUBST(LT_VERSION_INFO)
+
+GRN_DLL_FILENAME="libgroonga-\$(LT_CURRENT).dll"
+AC_SUBST(GRN_DLL_FILENAME)
+
AC_CONFIG_FILES([Makefile
src/Makefile
src/suggest/Makefile
@@ -757,6 +769,7 @@ AC_SUBST(examples_dictionarydir)
GRN_CFLAGS=""
AC_SUBST(GRN_CFLAGS)
GRN_DEFS=""
+GRN_DEFS="$GRN_DEFS -DGRN_DLL_FILENAME=\\\"L\"\$(GRN_DLL_FILENAME)\"\\\""
GRN_DEFS="$GRN_DEFS -DGRN_PLUGINS_DIR=\\\"\"\$(pluginsdir)\"\\\""
GRN_DEFS="$GRN_DEFS -DGRN_RELATIVE_PLUGINS_DIR=\\\"\"lib/\$(relative_pluginsdir)\"\\\""
GRN_DEFS="$GRN_DEFS -DGRN_LOG_PATH=\\\"\"\$(grn_log_path)\"\\\""
Modified: lib/Makefile.am (+1 -1)
===================================================================
--- lib/Makefile.am 2011-05-14 10:23:01 +0000 (9f215fd)
+++ lib/Makefile.am 2011-05-14 11:49:05 +0000 (cb1d207)
@@ -8,7 +8,7 @@ DEFS += -D_REENTRANT -DGROONGA_VERSION=\"$(GROONGA_VERSION)\" $(GRN_DEFS)
libgroonga_la_SOURCES = io.c str.c nfkc.c snip.c query.c store.c com.c ql.c scm.c ctx.c hash.c db.c pat.c ii.c token.c proc.c expr.c util.c plugin.c output.c geo.c
libgroonga_la_LDFLAGS = \
- -version-info 0:0:0 \
+ -version-info $(LT_VERSION_INFO) \
-no-undefined \
$(WINDOWS_LDFLAGS)
Modified: lib/util.c (+13 -6)
===================================================================
--- lib/util.c 2011-05-14 10:23:01 +0000 (7190b69)
+++ lib/util.c 2011-05-14 11:49:05 +0000 (7834176)
@@ -698,22 +698,29 @@ const char *
grn_win32_base_dir(void)
{
if (!win32_base_dir) {
- wchar_t dll_filename[MAX_PATH];
- DWORD dll_filename_size;
- dll_filename_size = GetModuleFileNameW(NULL, dll_filename, MAX_PATH);
- if (dll_filename_size == 0) {
+ HMODULE dll;
+ const wchar_t *dll_filename = GRN_DLL_FILENAME;
+ wchar_t absolute_dll_filename[MAX_PATH];
+ DWORD absolute_dll_filename_size;
+ dll = GetModuleHandle(dll_filename);
+ absolute_dll_filename_size = GetModuleFileNameW(dll,
+ absolute_dll_filename,
+ MAX_PATH);
+ if (absolute_dll_filename_size == 0) {
win32_base_dir = ".";
} else {
DWORD ansi_dll_filename_size;
ansi_dll_filename_size =
- WideCharToMultiByte(CP_ACP, 0, dll_filename, dll_filename_size,
+ WideCharToMultiByte(CP_ACP, 0,
+ absolute_dll_filename, absolute_dll_filename_size,
NULL, 0, NULL, NULL);
if (ansi_dll_filename_size == 0) {
win32_base_dir = ".";
} else {
char *path;
win32_base_dir = malloc(ansi_dll_filename_size);
- WideCharToMultiByte(CP_ACP, 0, dll_filename, dll_filename_size,
+ WideCharToMultiByte(CP_ACP, 0,
+ absolute_dll_filename, absolute_dll_filename_size,
win32_base_dir, ansi_dll_filename_size,
NULL, NULL);
win32_base_dir[ansi_dll_filename_size] = '\0';
Modified: mkmfwin32.vbs (+1 -0)
===================================================================
--- mkmfwin32.vbs 2011-05-14 10:23:01 +0000 (25703b0)
+++ mkmfwin32.vbs 2011-05-14 11:49:05 +0000 (56ff669)
@@ -101,6 +101,7 @@ sub common_header()
ts.write " -DUSE_SELECT \" + vbLf
ts.write " -DGRN_DEFAULT_ENCODING=""\""utf-8\"""" \" + vbLf
ts.write " -DGRN_PLUGIN_SUFFIX=""\"".dll\"""" \" + vbLf
+ ts.write " -DGRN_DLL_FILENAME=""L\""libgroonga.dll\"""" \" + vbLf
ts.write " -DGRN_PLUGINS_DIR=""\"""
ts.write PLUGINS_DIR
ts.write "\"""" \" + vbLf