diff options
author | Andrew Sun | 2018-11-11 08:59:46 -0500 |
---|---|---|
committer | Andrew Sun | 2018-11-11 08:59:46 -0500 |
commit | b4522c5669caee654479811e304a99b88fe7665e (patch) | |
tree | 3a5ed80fcf268f3ee6297b6cea0eedee3d743966 /relocatable.patch | |
parent | 38aa39896382db3fc6df86b6ba6662b9648807b5 (diff) | |
download | aur-b4522c5669caee654479811e304a99b88fe7665e.tar.gz |
mingw-w64-libthai: make relocatable
Diffstat (limited to 'relocatable.patch')
-rw-r--r-- | relocatable.patch | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/relocatable.patch b/relocatable.patch new file mode 100644 index 000000000000..e65b42d519c0 --- /dev/null +++ b/relocatable.patch @@ -0,0 +1,91 @@ +diff --git a/src/thbrk/Makefile.am b/src/thbrk/Makefile.am +index b528c34..476fbf1 100644 +--- a/src/thbrk/Makefile.am ++++ b/src/thbrk/Makefile.am +@@ -19,5 +19,5 @@ libthbrk_la_SOURCES = \ + brk-maximal.h \ + $(NULL) + +-libthbrk_la_LIBADD = $(DATRIE_LIBS) ++libthbrk_la_LIBADD = -lshlwapi $(DATRIE_LIBS) + +diff --git a/src/thbrk/brk-common.c b/src/thbrk/brk-common.c +index fedb1bf..4f80bca 100644 +--- a/src/thbrk/brk-common.c ++++ b/src/thbrk/brk-common.c +@@ -35,6 +35,49 @@ + + #define DICT_NAME "thbrk" + ++#ifdef _WIN32 ++#define WIN32_LEAN_AND_MEAN ++#include <windows.h> ++#include <shlwapi.h> ++static HMODULE libthai_dll; ++ ++BOOL WINAPI ++DllMain (HINSTANCE hinstDLL, ++ DWORD fdwReason, ++ LPVOID lpvReserved) ++{ ++ switch (fdwReason) { ++ case DLL_PROCESS_ATTACH: ++ libthai_dll = (HMODULE) hinstDLL; ++ break; ++ } ++ ++ return TRUE; ++} ++ ++static BOOL _getWinDictPath(wchar_t *out, int size) { ++ /* returns TRUE on success, FALSE on error */ ++ ++ BOOL status; ++ if (GetModuleFileNameW (libthai_dll, out, MAX_PATH) == 0) ++ return FALSE; ++ PathRemoveFileSpecW (out); ++ /* Assume the DLL is in /bin */ ++ PathRemoveFileSpecW (out); ++ status = PathAppendW (out, L"share"); ++ if (status != TRUE) ++ return FALSE; ++ status = PathAppendW (out, L"libthai"); ++ if (status != TRUE) ++ return FALSE; ++ status = PathAppendW (out, L"thbrk.tri"); ++ if (status != TRUE) ++ return FALSE; ++ ++ return TRUE; ++} ++#endif ++ + static char * + full_path (const char *path, const char *name, const char *ext) + { +@@ -58,10 +101,25 @@ brk_load_default_dict () + free (path); + } + ++#ifdef _WIN32 ++ if (!dict_trie) { ++ wchar_t dict_path[MAX_PATH]; ++ FILE *trie_file; ++ ++ if (_getWinDictPath (dict_path, MAX_PATH) == TRUE) { ++ trie_file = _wfopen (dict_path, L"rb"); ++ if (trie_file != NULL) { ++ dict_trie = trie_fread (trie_file); ++ fclose (trie_file); ++ } ++ } ++ } ++#else + /* Then, fall back to default DICT_DIR macro */ + if (!dict_trie) { + dict_trie = trie_new_from_file (DICT_DIR "/" DICT_NAME ".tri"); + } ++#endif + + return dict_trie; + } |