[Groonga-commit] groonga/groonga [master] [win32] use relative path of libgroonga.dll instead of the current process.

Back to archive index

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




Groonga-commit メーリングリストの案内
Back to archive index