# HG changeset patch # User Herman Bloggs # Date 1063393492 0 # Node ID 5aeba37b303cc4e18868a592cd50c7a2d8e627ae # Parent 1c6a4cba84f3d57bf497566f49cbe4426e2dc428 [gaim-migrate @ 7356] Perl plugins for Win Gaim. committer: Tailor Script diff -r 1c6a4cba84f3 -r 5aeba37b303c Makefile.mingw --- a/Makefile.mingw Fri Sep 12 05:36:50 2003 +0000 +++ b/Makefile.mingw Fri Sep 12 19:04:52 2003 +0000 @@ -11,7 +11,6 @@ GAIM_PIXMAPS = ./pixmaps GAIM_SOUNDS = ./sounds GAIM_INSTALL_DIR = ./win32-install-dir -PERL_TOP = ../win32-dev/perl56 GTKSPELL_TOP = ../win32-dev/gtkspell-2.0.4/gtkspell NSS_TOP = ../win32-dev/nss-3.8 NSPR_TOP = ../win32-dev/nspr-4.3 @@ -30,8 +29,7 @@ VERSION := $(shell cat ./VERSION) -NEEDED_DLLS = $(PERL_TOP)/perl56.dll \ - $(GTKSPELL_TOP)/libgtkspell.dll \ +NEEDED_DLLS = $(GTKSPELL_TOP)/libgtkspell.dll \ $(IDLETRACK_TOP)/idletrack.dll \ $(NSS_TOP)/lib/nss3.dll \ $(NSS_TOP)/lib/nssckbi.dll \ diff -r 1c6a4cba84f3 -r 5aeba37b303c gaim-installer.nsi --- a/gaim-installer.nsi Fri Sep 12 05:36:50 2003 +0000 +++ b/gaim-installer.nsi Fri Sep 12 19:04:52 2003 +0000 @@ -49,6 +49,8 @@ !define GTK_VERSION "2.2.2" !define GTK_REG_KEY "SOFTWARE\GTK\2.0" +!define PERL_REG_KEY "SOFTWARE\Perl" +!define PERL_DLL "perl58.dll" !define GTK_DEFAULT_INSTALL_PATH "$PROGRAMFILES\Common Files\GTK\2.0" !define GTK_RUNTIME_INSTALLER "..\gtk_installer\gtk-runtime*.exe" !define GTK_THEME_DIR "..\gtk_installer\gtk_themes" @@ -313,6 +315,7 @@ gaim_hklm: ReadRegStr $R1 HKLM ${GTK_REG_KEY} "Path" + WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "" "$INSTDIR\gaim.exe" WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "Path" "$R1\bin" WriteRegStr HKLM ${GAIM_REG_KEY} "" "$INSTDIR" WriteRegStr HKLM ${GAIM_REG_KEY} "Version" "${GAIM_VERSION}" @@ -345,6 +348,25 @@ File ..\win32-dev\drmingw\exchndl.dll !endif + ; Check if Perl is installed, If not remove perl plugin + ReadRegStr $R2 HKLM ${PERL_REG_KEY} "" + StrCmp $R2 "" 0 perl_exists + ReadRegStr $R2 HKCU ${PERL_REG_KEY} "" + StrCmp $R2 "" perl_remove perl_exists + + perl_remove: + Delete "$INSTDIR\plugins\perl.dll" + RMDir /r "$INSTDIR\perlmod" + Goto perl_done + + perl_exists: + IfFileExists "$R2\bin\${PERL_DLL}" 0 perl_remove + StrCmp $R0 "HKLM" 0 perl_done + ReadRegStr $R3 HKLM "${HKLM_APP_PATHS_KEY}" "Path" + WriteRegStr HKLM "${HKLM_APP_PATHS_KEY}" "Path" "$R3;$R2\bin" + + perl_done: + ; If we don't have install rights and no hklm GTK install.. then Start in lnk property should ; remain gaim dir.. otherwise it should be set to the GTK bin dir. (to avoid dll hell) StrCmp $R0 "NONE" 0 startin_gtk diff -r 1c6a4cba84f3 -r 5aeba37b303c plugins/perl/.cvsignore --- a/plugins/perl/.cvsignore Fri Sep 12 05:36:50 2003 +0000 +++ b/plugins/perl/.cvsignore Fri Sep 12 19:04:52 2003 +0000 @@ -3,6 +3,7 @@ .deps .libs *.dll +*.lib *.la *.lo *.a diff -r 1c6a4cba84f3 -r 5aeba37b303c plugins/perl/Makefile.mingw --- a/plugins/perl/Makefile.mingw Fri Sep 12 05:36:50 2003 +0000 +++ b/plugins/perl/Makefile.mingw Fri Sep 12 19:04:52 2003 +0000 @@ -10,7 +10,7 @@ GTK_TOP := ../../../win32-dev/gtk_2_0 GAIM_TOP := ../.. -PERL_LIB_DIR := ../../../win32-dev/perl56 +PERL_LIB_DIR := ../../../win32-dev/perl58 PERL_INCLUDE := $(PERL_LIB_DIR)/CORE GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir DLL_INSTALL_DIR := $(GAIM_INSTALL_DIR)/plugins @@ -84,7 +84,7 @@ -lws2_32 \ -lintl \ -lgaim \ - -lperl56 + -lperl58 ## @@ -103,10 +103,11 @@ .PHONY: all clean all: $(TARGET).dll + $(MAKE) -C ./common -f Makefile.mingw install: cp $(TARGET).dll $(DLL_INSTALL_DIR) - + $(MAKE) -C ./common -f Makefile.mingw install ## ## BUILD Dependencies @@ -120,7 +121,7 @@ ## $(TARGET).dll: $(OBJECTS) $(GAIM_TOP)/src/gaim.lib - $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--export-all-symbols -Wl,--out-implib,$(TARGET).lib -o $(TARGET).dll ## @@ -129,4 +130,5 @@ clean: rm -rf *.o - rm -rf $(TARGET).dll + rm -rf $(TARGET).dll $(TARGET).lib + $(MAKE) -C ./common -f Makefile.mingw clean diff -r 1c6a4cba84f3 -r 5aeba37b303c plugins/perl/common/.cvsignore --- a/plugins/perl/common/.cvsignore Fri Sep 12 05:36:50 2003 +0000 +++ b/plugins/perl/common/.cvsignore Fri Sep 12 19:04:52 2003 +0000 @@ -7,3 +7,4 @@ const-xs.inc pm_to_blib *.c +*.dll diff -r 1c6a4cba84f3 -r 5aeba37b303c plugins/perl/common/Makefile.mingw --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/perl/common/Makefile.mingw Fri Sep 12 19:04:52 2003 +0000 @@ -0,0 +1,77 @@ +# +# Makefile.mingw +# +# Description: Makefile for Gaim perl module. +# + +TARGET = Gaim + +CC := gcc +PERL := /cygdrive/c/perl/bin/perl + +EXTUTILS := C:/perl/lib/ExtUtils +GAIM_TOP := ../../.. +GTK_TOP := ../../../../win32-dev/gtk_2_0 +PERL_TOP := ../../../../win32-dev/perl58 +PERL_PLUGIN_TOP := .. +GAIM_INSTALL_DIR := $(GAIM_TOP)/win32-install-dir +PERLMOD_INSTALL_DIR := $(GAIM_INSTALL_DIR)/perlmod + +INCLUDE_PATHS = -I. \ + -I$(GAIM_TOP) \ + -I$(GAIM_TOP)/src \ + -I$(GTK_TOP)/include/glib-2.0 \ + -I$(GTK_TOP)/lib/glib-2.0/include \ + -I$(PERL_TOP)/CORE + +LIB_PATHS = -L$(PERL_TOP) \ + -L$(PERL_PLUGIN_TOP) \ + -L$(GAIM_TOP)/src \ + -L$(GTK_TOP)/lib + + +XS_FILES = Account.xs \ + BuddyList.xs \ + BuddyList_Buddy.xs \ + BuddyList_Chat.xs \ + BuddyList_Group.xs \ + Connection.xs \ + ConvWindow.xs \ + Conversation.xs \ + Conversation_Chat.xs \ + Conversation_IM.xs \ + Gaim.xs + +FALLBACKS = const-c.inc const-xs.inc + +C_FILES = $(XS_FILES:%.xs=%.c) + +OBJECTS = $(C_FILES:%.c=%.o) + +LIBS = -lperl58 \ + -lperl \ + -lgaim \ + -lglib-2.0 + +# How to make a C file +%.o: %.c + $(CC) $(CFLAGS) $(INCLUDE_PATHS) $(DEFINES) -c $< -o $@ + +# How to make a XS file +%.c: %.xs + $(PERL) $(EXTUTILS)/xsubpp -typemap $(EXTUTILS)/typemap -typemap typemap $< > $@ + +%.inc: + cp fallback/$@ ./ + +all: $(TARGET).dll + +install: + mkdir -p $(PERLMOD_INSTALL_DIR) + cp $(TARGET).dll Gaim.pm $(PERLMOD_INSTALL_DIR) + +$(TARGET).dll: $(FALLBACKS) $(OBJECTS) + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) -o $(TARGET).dll + +clean: + rm -rf *.o $(TARGET).dll $(FALLBACKS) diff -r 1c6a4cba84f3 -r 5aeba37b303c plugins/perl/common/module.h --- a/plugins/perl/common/module.h Fri Sep 12 05:36:50 2003 +0000 +++ b/plugins/perl/common/module.h Fri Sep 12 19:04:52 2003 +0000 @@ -2,10 +2,13 @@ #define group perl_group +#include +#ifdef _WIN32 +#undef pipe +#endif #include #include #include -#include #undef group diff -r 1c6a4cba84f3 -r 5aeba37b303c plugins/perl/perl-common.h --- a/plugins/perl/perl-common.h Fri Sep 12 05:36:50 2003 +0000 +++ b/plugins/perl/perl-common.h Fri Sep 12 19:04:52 2003 +0000 @@ -1,10 +1,13 @@ #ifndef _GAIM_PERL_COMMON_H_ #define _GAIM_PERL_COMMON_H_ +#include +#ifdef _WIN32 +#undef pipe +#endif #include #include #include -#include #include "value.h" diff -r 1c6a4cba84f3 -r 5aeba37b303c src/main.c --- a/src/main.c Fri Sep 12 05:36:50 2003 +0000 +++ b/src/main.c Fri Sep 12 19:04:52 2003 +0000 @@ -805,6 +805,10 @@ abort(); } +#ifdef _WIN32 + wgaim_pre_plugin_init(); +#endif + plugin_search_paths[0] = LIBDIR; plugin_search_paths[1] = gaim_user_dir(); plugin_search_paths[2] = g_strdup_printf("%s/plugins", gaim_user_dir()); diff -r 1c6a4cba84f3 -r 5aeba37b303c src/win32/win32dep.c --- a/src/win32/win32dep.c Fri Sep 12 05:36:50 2003 +0000 +++ b/src/win32/win32dep.c Fri Sep 12 19:04:52 2003 +0000 @@ -412,19 +412,28 @@ /* Windows Initializations */ +void wgaim_pre_plugin_init(void) { + char *perlenv, *newenv; + + /* Tell perl where to find Gaim's perl modules */ + perlenv = (char*)g_getenv("PERL5LIB"); + newenv = g_strdup_printf("PERL5LIB=%s%s%s%s", + perlenv ? perlenv : "", + perlenv ? ";" : "", + wgaim_install_dir(), + "\\perlmod;"); + if(putenv(newenv)<0) + gaim_debug(GAIM_DEBUG_WARNING, "wgaim", "putenv failed\n"); + g_free(newenv); +} + void wgaim_init(void) { WORD wVersionRequested; WSADATA wsaData; char newenv[128]; - char* drmingw; gaim_debug(GAIM_DEBUG_INFO, "wgaim", "wgaim_init\n"); - /* Load exception handler if we have it */ - drmingw = g_build_filename(wgaim_install_dir(), "exchndl.dll", NULL); - LoadLibrary(drmingw); - g_free(drmingw); - load_winver_specific_procs(); /* diff -r 1c6a4cba84f3 -r 5aeba37b303c src/win32/win32dep.h --- a/src/win32/win32dep.h Fri Sep 12 05:36:50 2003 +0000 +++ b/src/win32/win32dep.h Fri Sep 12 19:04:52 2003 +0000 @@ -56,6 +56,7 @@ extern void wgaim_systray_minimize( GtkWidget* ); extern void wgaim_systray_maximize( GtkWidget* ); /* init / cleanup */ +extern void wgaim_pre_plugin_init(void); extern void wgaim_init(void); extern void wgaim_cleanup(void); diff -r 1c6a4cba84f3 -r 5aeba37b303c src/win_gaim.c --- a/src/win_gaim.c Fri Sep 12 05:36:50 2003 +0000 +++ b/src/win_gaim.c Fri Sep 12 19:04:52 2003 +0000 @@ -8,6 +8,7 @@ */ #include #include +#include /* * GLOBALS @@ -22,7 +23,7 @@ * PROTOTYPES */ extern int gaim_main( int, char** ); - +extern char* wgaim_install_dir(); #ifdef __GNUC__ # ifndef _stdcall @@ -36,7 +37,14 @@ char *lpszCmdLine, int nCmdShow) { + char* drmingw; gaimexe_hInstance = hInstance; + + /* Load exception handler if we have it */ + drmingw = g_build_filename(wgaim_install_dir(), "exchndl.dll", NULL); + LoadLibrary(drmingw); + g_free(drmingw); + return gaim_main (__argc, __argv); }