Win32 build and installer, and application work

This commit is contained in:
Yevgen Muntyan 2006-08-04 06:57:15 -05:00
parent 5636bc81aa
commit 6c98d10248
20 changed files with 402 additions and 153 deletions

View File

@ -16,14 +16,22 @@ MOO_DEFINE_VERSIONS
MOO_AC_I18N([ru])
# Check operating system
MOO_AC_CHECK_OS
if test x$MOO_OS_UNIX != xyes; then
AM_CONDITIONAL(MOO_INSTALL_LIB, true)
AM_CONDITIONAL(MOO_BUILD_PYTHON_MODULE, true)
AC_DEFINE(MOO_BUILD_PYTHON_MODULE, 1, MOO_BUILD_PYTHON_MODULE)
AC_DISABLE_STATIC
else
AM_CONDITIONAL(MOO_INSTALL_LIB, false)
AM_CONDITIONAL(MOO_BUILD_PYTHON_MODULE, false)
fi
AC_PROG_CC
AC_PROG_CC_STDC
AC_HEADER_STDC
AC_DISABLE_STATIC
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
AC_PROG_INSTALL
@ -37,9 +45,6 @@ MOO_AC_FUNCS
# Check debug options
MOO_AC_DEBUG
# Check operating system
MOO_AC_CHECK_OS
# GTK libraries
MOO_PKG_CHECK_GTK_VERSIONS

View File

@ -27,25 +27,24 @@ AC_DEFUN([_MOO_AC_PYGTK_CODEGEN],[
#
AC_DEFUN([_MOO_AC_CHECK_PYGTK_MINGW],[
# _AC_CHECK_PYGTK_MINGW
no_dot_version=`echo $1 | sed "s/\.//"`
if test -z $PYTHON_PARENT_DIR; then
PYTHON_PARENT_DIR=/usr/local/win
if test -z "$PYTHON[]$1[]_PARENT_DIR"; then
PYTHON[]$1[]_PARENT_DIR=/usr/local/win
fi
if test -z $PYTHON_PREFIX; then
PYTHON_PREFIX=$PYTHON_PARENT_DIR/Python$no_dot_version
if test -z "$PYTHON[]$1[]_PREFIX"; then
PYTHON[]$1[]_PREFIX=$PYTHON[]$1[]_PARENT_DIR/Python$1
fi
if test -z $PYGTK_CFLAGS; then
PYGTK_CFLAGS="-I$PYTHON_PREFIX/include/pygtk-2.0 $GTK_CFLAGS"
if test -z "$PYGTK[]$1[]_CFLAGS"; then
PYGTK[]$1[]_CFLAGS="-I$PYTHON[]$1[]_PREFIX/include/pygtk-2.0 $PYTHON[]$1[]_CFLAGS $GTK_CFLAGS"
fi
dnl check whether pygtk.h exists
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $PYGTK_CFLAGS -I$PYTHON_PREFIX/include"
CPPFLAGS="$CPPFLAGS $PYGTK[]$1[]_CFLAGS"
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PYGTK_CFLAGS -I$PYTHON_PREFIX/include"
CFLAGS="$CFLAGS $PYGTK[]$1[]_CFLAGS"
AC_MSG_CHECKING([for pygtk headers])
AC_MSG_CHECKING([for pygtk$1 headers])
# start AC_COMPILE_IFELSE in _AC_CHECK_PYGTK_MINGW
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <pygtk/pygtk.h>
@ -54,13 +53,17 @@ AC_DEFUN([_MOO_AC_CHECK_PYGTK_MINGW],[
init_pygtk();
return 0;
}]])],[
AC_MSG_RESULT([$PYGTK_CFLAGS])
AC_SUBST(PYGTK_CFLAGS)
PYGTK_DEFS_DIR=$PYTHON_PREFIX/share/pygtk/2.0/defs
AC_MSG_RESULT([$PYGTK[]$1[]_CFLAGS])
AC_SUBST(PYGTK[]$1[]_CFLAGS)
PYGTK[]$1[]_DEFS_DIR=$PYTHON[]$1[]_PREFIX/share/pygtk/2.0/defs
AC_SUBST(PYGTK[]$1[]_DEFS_DIR)
PYGTK_DEFS_DIR=$PYTHON[]$1[]_PREFIX/share/pygtk/2.0/defs
AC_SUBST(PYGTK_DEFS_DIR)
PYGTK_CODEGEN_DIR=$PYTHON_PREFIX/share/pygtk/2.0/codegen
PYGTK[]$1[]_CODEGEN_DIR=$PYTHON[]$1[]_PREFIX/share/pygtk/2.0/codegen
AC_SUBST(PYGTK[]$1[]_CODEGEN_DIR)
PYGTK_CODEGEN_DIR=$PYTHON[]$1[]_PREFIX/share/pygtk/2.0/codegen
AC_SUBST(PYGTK_CODEGEN_DIR)
AC_MSG_NOTICE([pygtk defs dir: $PYGTK_DEFS_DIR])
AC_MSG_NOTICE([pygtk defs dir: $PYGTK[]$1[]_DEFS_DIR])
$2
_MOO_AC_PYGTK_CODEGEN
],[
@ -130,7 +133,8 @@ AC_DEFUN([MOO_AC_CHECK_PYGTK],[
if test x$MOO_OS_CYGWIN != xyes; then
if test x$MOO_OS_MINGW = xyes; then
_MOO_AC_CHECK_PYGTK_MINGW([$1],[$2],[$3])
_MOO_AC_CHECK_PYGTK_MINGW([23],[$2],[$3])
_MOO_AC_CHECK_PYGTK_MINGW([24],[$2],[$3])
else
_MOO_AC_CHECK_PYGTK_UNIX([$1],[$2],[$3])
fi

View File

@ -3,34 +3,36 @@
# checks python stuff when building for mingw. it's broken
#
AC_DEFUN([_MOO_AC_CHECK_PYTHON_MINGW],[
no_dot_version=`echo $1 | sed "s/\.//"`
if test -z "$PYTHON[]$1[]_PARENT_DIR"; then
PYTHON[]$1[]_PARENT_DIR=/usr/local/win
fi
if test -z "$PYTHON[]$1[]_PREFIX"; then
PYTHON[]$1[]_PREFIX=$PYTHON[]$1[]_PARENT_DIR/Python$1
fi
if test -z "$PYTHON[]$1[]_CFLAGS"; then
PYTHON[]$1[]_CFLAGS="-I$PYTHON[]$1[]_PREFIX/include -mno-cygwin"
fi
if test -z "$PYTHON[]$1[]_LIBS"; then
PYTHON[]$1[]_LIBS="-L$PYTHON[]$1[]_PREFIX/libs -lpython$1 -mno-cygwin"
fi
if test -z "$PYTHON[]$1"; then
PYTHON[]$1="python"
fi
if test -z "$PYTHON_PARENT_DIR"; then
PYTHON_PARENT_DIR=/usr/local/win
fi
if test -z "$PYTHON_PREFIX"; then
PYTHON_PREFIX=$PYTHON_PARENT_DIR/Python$no_dot_version
fi
if test -z "$PYTHON_CFLAGS"; then
PYTHON_CFLAGS="-I$PYTHON_PREFIX/include -mno-cygwin"
fi
if test -z "$PYTHON_LIBS"; then
PYTHON_LIBS="-L$PYTHON_PREFIX/libs -lpython$no_dot_version -mno-cygwin"
fi
if test -z "$PYTHON"; then
PYTHON="python"
fi
PYTHON_PARENT_DIR="$PYTHON[]$1[]_PARENT_DIR"
PYTHON_PREFIX="$PYTHON[]$1[]_PREFIX"
PYTHON="$PYTHON[]$1[]"
# check whether Python.h and library exists
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
CPPFLAGS="$CPPFLAGS $PYTHON[]$1[]_CFLAGS"
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PYTHON_CFLAGS"
CFLAGS="$CFLAGS $PYTHON[]$1[]_CFLAGS"
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS $PYTHON_LIBS"
LDFLAGS="$LDFLAGS $PYTHON[]$1[]_LIBS"
AC_MSG_CHECKING([PYTHON_CFLAGS])
AC_MSG_CHECKING([PYTHON[]$1[]_CFLAGS])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <Python.h>
int main ()
@ -41,19 +43,19 @@ AC_DEFUN([_MOO_AC_CHECK_PYTHON_MINGW],[
Py_Finalize();
return 0;
}]])],[
AC_MSG_RESULT([$PYTHON_CFLAGS])
AC_MSG_CHECKING([PYTHON_LIBS])
AC_MSG_RESULT([$PYTHON_LIBS])
AC_MSG_RESULT([$PYTHON[]$1[]_CFLAGS])
AC_MSG_CHECKING([PYTHON[]$1[]_LIBS])
AC_MSG_RESULT([$PYTHON[]$1[]_LIBS])
AC_MSG_NOTICE([Did not do real linking])
AC_SUBST(PYTHON_CFLAGS)
AC_SUBST(PYTHON_LIBS)
pyexecdir=$PYTHON_PREFIX/Lib/site-packages
AC_SUBST(PYTHON[]$1[]_CFLAGS)
AC_SUBST(PYTHON[]$1[]_LIBS)
pyexecdir=$PYTHON[]$1[]_PREFIX/Lib/site-packages
$2
],[
AC_MSG_RESULT([Not found])
PYTHON_CFLAGS=""
PYTHON_LIBS=""
PYTHON_EXTRA_LIBS=""
PYTHON[]$1[]_CFLAGS=""
PYTHON[]$1[]_LIBS=""
PYTHON[]$1[]_EXTRA_LIBS=""
$3
])
@ -195,7 +197,8 @@ AC_MSG_NOTICE([checking for headers and libs required to compile python extensio
AC_REQUIRE([MOO_AC_CHECK_OS])
if test x$MOO_OS_CYGWIN != xyes; then
if test x$MOO_OS_MINGW = xyes; then
_MOO_AC_CHECK_PYTHON_MINGW([$1],[$2],[$3])
_MOO_AC_CHECK_PYTHON_MINGW([23],[$2],[$3])
_MOO_AC_CHECK_PYTHON_MINGW([24],[$2],[$3])
else
_MOO_AC_CHECK_PYTHON_UNIX([$1],[$2],[$3])
fi

56
makewin
View File

@ -5,22 +5,31 @@ import sys
import getopt
dir = os.getcwd()
builddir = "/home/muntyan/projects/moo/build"
builddir = dir
moo_windir = "/usr/local/win/medit"
strip = "i586-mingw32msvc-strip"
do_strip = True
installer = None
def usage():
print "Usage:", sys.argv[0], "[build_dir]"
print "Usage:", sys.argv[0], "[--no-strip] [build_dir]"
sys.exit(2)
if sys.argv[1:]:
if sys.argv[2:]: usage()
moo_builddir = os.path.abspath(sys.argv[1])
else:
moo_builddir = builddir + "/mingw"
try:
opts, args = getopt.getopt(sys.argv[1:], "", ["no-strip"])
except getopt.GetoptError:
usage()
config = os.path.basename(moo_builddir)
installdir = "%s/%s-inst" % (dir, config)
for o, a in opts:
if o == "--no-strip":
do_strip = False
if args:
if args[1:]: usage()
moo_builddir = os.path.abspath(args[0])
else:
moo_builddir = builddir
installdir = dir + "/inst_"
issdir = "Z:%s/wininstaller" % (moo_builddir,)
iss = issdir + "/medit.iss"
@ -38,11 +47,20 @@ def do_cmd(cmd):
raise Error(status)
def copy_files():
files = ["bin/medit.exe", "share/moo/syntax",
"share/moo/tools.cfg", "share/moo/menu.cfg", "share/moo/as.cfg",
"share/moo/completion", "lib/moo/plugins"]
files = ["bin/medit.exe", "bin/libmoo.dll",
"share/moo/*", "lib/moo/plugins", "lib/moo/projects"]
for f in files:
do_cmd("cp -r %s/usr/local/%s %s/" % (installdir, f, moo_windir))
do_cmd("mkdir -p %s/plugins/pymoo23 %s/plugins/pymoo24" % (moo_windir, moo_windir))
do_cmd("cp %s/usr/local/lib/pymoo23.dll %s/plugins/pymoo23/pymoo.dll" % (installdir, moo_windir))
do_cmd("cp %s/usr/local/lib/moo23.dll %s/plugins/pymoo23/moo.pyd" % (installdir, moo_windir))
do_cmd("cp %s/usr/local/lib/pymoo24.dll %s/plugins/pymoo24/pymoo.dll" % (installdir, moo_windir))
do_cmd("cp %s/usr/local/lib/moo24.dll %s/plugins/pymoo24/moo.pyd" % (installdir, moo_windir))
do_cmd("cp libxml2-2.dll %s/" % (moo_windir,))
if do_strip:
do_cmd("%s %s/plugins/*/*.dll" % (strip, moo_windir))
do_cmd("%s %s/*.exe %s/*.dll" % (strip, moo_windir, moo_windir))
config_template = """
version = @MOO_VERSION@
@ -59,13 +77,20 @@ def get_version():
return config.version
def build():
global installer
do_cmd("mkdir " + moo_windir)
do_cmd("mkdir " + installdir)
os.chdir(moo_builddir)
do_cmd("make install-strip DESTDIR=" + installdir)
do_cmd("make install DESTDIR=" + installdir)
copy_files()
do_cmd("wine /usr/local/win/InnoSetup5/ISCC.exe " + iss)
installer = "meditsetup-" + get_version() + config.replace("mingw", "") + ".exe"
if do_strip:
installer = "meditsetup-" + get_version() + ".exe"
else:
installer = "meditsetup-dbg-" + get_version() + ".exe"
do_cmd("mv %s/wininstaller/Output/setup.exe %s/%s" % (moo_builddir, dir, installer))
def clean():
@ -80,3 +105,4 @@ except Error, e:
clean()
print "*** Success ***"
print "Installer: ", installer

View File

@ -26,10 +26,10 @@ fi
export GTK_PREFIX=${GTK_PREFIX:-/usr/local/win/gtk}
if [ "x$1" = "x--with-python=2.3" -o "x$2" = "x--with-python=2.3" ]; then
export PYTHON_PREFIX=${PYTHON_PREFIX:-/usr/local/win/Python23}
elif [ "x$1" = "x--with-python=2.4" -o "x$2" = "x--with-python=2.4" ]; then
if [ "x$1" = "x--with-python=2.4" -o "x$2" = "x--with-python=2.4" ]; then
export PYTHON_PREFIX=${PYTHON_PREFIX:-/usr/local/win/Python24}
else
export PYTHON_PREFIX=${PYTHON_PREFIX:-/usr/local/win/Python23}
fi
export PKG_CONFIG_LIBDIR=$GTK_PREFIX/lib/pkgconfig:$PYTHON_PREFIX/Lib/pkgconfig

View File

@ -43,32 +43,32 @@ endif
SUBDIRS = $(subdirs) .
DIST_SUBDIRS = mooutils mooterm mooedit mooapp moopython mooscript moofileview
lib_LTLIBRARIES =
noinst_LTLIBRARIES =
if MOO_INSTALL_LIB
lib_LTLIBRARIES = libmoo.la
lib_LTLIBRARIES += libmoo.la
else
noinst_LTLIBRARIES = libmoo.la
noinst_LTLIBRARIES += libmoo.la
endif
libmoo_la_LIBADD = $(libs) $(MOO_LIBS)
# libmoo_la_LDFLAGS = -no-undefined -export-symbols-regex "^(moo_|ms_|m_|egg_regex_).*"
libmoo_la_LDFLAGS = -no-undefined -export-symbols-regex ".*"
# libmoo_la_LDFLAGS = $(PYTHON_EXTRA_LDFLAGS) -no-undefined -avoid-version -export-symbols-regex "^(moo_|ms_|m_|egg_regex_).*"
libmoo_la_LDFLAGS = $(PYTHON_EXTRA_LDFLAGS) -no-undefined -avoid-version -export-symbols-regex ".*"
libmoo_la_SOURCES = $(moo_include_headers)
moo_la_ldflags = -no-undefined -module -avoid-version -export-symbols-regex initmoo
pymoo_la_ldflags = -no-undefined -module -avoid-version -export-symbols-regex moo_module_init
if MOO_OS_UNIX
if MOO_INSTALL_LIB
if MOO_USE_PYGTK
pyexec_LTLIBRARIES = moo.la
moo_la_SOURCES = moo.h
moo_la_LDFLAGS = -module -no-undefined -export-symbols-regex "initmoo"
moo_la_LIBADD = moopython/libmoomod.la libmoo.la $(PYTHON_LIBS)
moo_la_CFLAGS = \
-I.. \
-I$(top_builddir) \
$(MOO_CFLAGS) \
$(MOO_DEBUG_CFLAGS) \
$(PYTHON_CFLAGS) \
$(PYGTK_CFLAGS) \
-DMOO_PYTHON_MODULE
moo_la_LDFLAGS = $(moo_la_ldflags)
moo_la_LIBADD = moopython/libmoomod.la libmoo.la $(MOO_LIBS) $(PYTHON_LIBS)
endif MOO_USE_PYGTK
if MOO_BUILD_PYTHON_MODULE
@ -76,7 +76,32 @@ plugindir = $(MOO_LIB_DIR)/plugins
plugin_LTLIBRARIES = pymoo.la
plugin_DATA = moopython/pymoo.ini
pymoo_la_SOURCES = moo.h
pymoo_la_LDFLAGS = -module -no-undefined -export-symbols-regex "moo_module_init"
pymoo_la_LIBADD = moopython/libpymoo.la libmoo.la $(PYTHON_LIBS) $(PYTHON_EXTRA_LIBS)
pymoo_la_LDFLAGS = $(pymoo_la_ldflags) $(PYTHON_EXTRA_LDFLAGS)
pymoo_la_LIBADD = moopython/libpymoo.la libmoo.la $(MOO_LIBS) $(PYTHON_LIBS) $(PYTHON_EXTRA_LIBS)
endif MOO_BUILD_PYTHON_MODULE
endif MOO_INSTALL_LIB
else !MOO_OS_UNIX
if MOO_USE_PYGTK
lib_LTLIBRARIES += pymoo23.la moo23.la pymoo24.la moo24.la
plugindir = $(MOO_LIB_DIR)/plugins
plugin_DATA = moopython/pymoo23.ini moopython/pymoo24.ini
pymoo23_la_SOURCES = moo.h
pymoo23_la_LDFLAGS = $(pymoo_la_ldflags) $(PYTHON23_EXTRA_LDFLAGS)
pymoo23_la_LIBADD = moopython/libpymoo23.la libmoo.la $(MOO_LIBS) $(PYTHON23_LIBS) $(PYTHON23_EXTRA_LIBS)
moo23_la_SOURCES = moo.h
moo23_la_LDFLAGS = $(moo_la_ldflags)
moo23_la_LIBADD = moopython/libmoomod23.la libmoo.la $(MOO_LIBS) $(PYTHON23_LIBS)
pymoo24_la_SOURCES = moo.h
pymoo24_la_LDFLAGS = $(pymoo_la_ldflags) $(PYTHON24_EXTRA_LDFLAGS)
pymoo24_la_LIBADD = moopython/libpymoo23.la libmoo.la $(MOO_LIBS) $(PYTHON24_LIBS) $(PYTHON24_EXTRA_LIBS)
moo24_la_SOURCES = moo.h
moo24_la_LDFLAGS = $(moo_la_ldflags)
moo24_la_LIBADD = moopython/libmoomod24.la libmoo.la $(MOO_LIBS) $(PYTHON24_LIBS)
endif MOO_USE_PYGTK
endif !MOO_OS_UNIX

View File

@ -13,4 +13,4 @@ Description: A text editor and terminal emulator library
Requires: gtk+-2.0 @MOO_XML_PKG_NAME@
Version: @MOO_VERSION_UNQUOTED@
Cflags: -I@moo_includedir@
Libs: -L${libdir} -lmoo @PYTHON_LDFLAGS@
Libs: -L${libdir} -lmoo @PYTHON_LIBS@ @PYTHON_EXTRA_LIBS@

View File

@ -19,7 +19,7 @@
#include "mooedit/mooplugin-loader.h"
#include "mooedit/moopluginprefs-glade.h"
#include "mooedit/plugins/mooeditplugins.h"
#include "moopython/moopython.h"
#include "moopython/moopython-builtin.h"
#include "mooutils/mooprefsdialog.h"
#include "mooutils/moostock.h"
#include "mooutils/mooutils-misc.h"

View File

@ -450,7 +450,7 @@ create_folder (G_GNUC_UNUSED MooFileSystem *fs,
#ifndef __WIN32__
if (mkdir (path, S_IRWXU | S_IRWXG | S_IRWXO))
#else
if (m_mkdir (path))
if (_m_mkdir (path))
#endif
{
int saved_errno = errno;

View File

@ -1,7 +1,36 @@
SUBDIRS = plugins pygtk .
libmoomod_la_sources = \
moo-mod.c \
moopython-api.h \
moopython-loader.h \
moopython-loader.c \
moopython-utils.h \
moopython-utils.c
libpymoo_la_sources = \
moopython-mod.c \
moopython-api.h \
moopython-loader.h \
moopython-loader.c \
moopython-utils.h \
moopython-utils.c
libmoopython_la_sources = \
moopython-builtin.h \
moopython-builtin.c \
moopython-api.h \
moopython-loader.h \
moopython-loader.c \
moopython-utils.h \
moopython-utils.c
libmoopython_la_libadd = \
pygtk/libmoopygtk.la
noinst_LTLIBRARIES =
if MOO_OS_UNIX
if MOO_INSTALL_LIB
noinst_LTLIBRARIES += libmoomod.la
if MOO_BUILD_PYTHON_MODULE
@ -13,34 +42,12 @@ else
noinst_LTLIBRARIES += libmoopython.la
endif
libmoomod_la_SOURCES = \
moo-mod.c \
moopython-api.h \
moopython-loader.h \
moopython-loader.c \
moopython-utils.h \
moopython-utils.c
libmoomod_la_LIBADD = \
pygtk/libmoopygtk.la
else !MOO_OS_UNIX
libpymoo_la_SOURCES = \
moopython-mod.c \
moopython-api.h \
moopython-loader.h \
moopython-loader.c \
moopython-utils.h \
moopython-utils.c
noinst_LTLIBRARIES += libmoomod23.la libmoomod24.la
noinst_LTLIBRARIES += libpymoo23.la libpymoo24.la
libmoopython_la_SOURCES = \
moopython.h \
moopython.c \
moopython-api.h \
moopython-loader.h \
moopython-loader.c \
moopython-utils.h \
moopython-utils.c
libmoopython_la_LIBADD = \
pygtk/libmoopygtk.la
endif !MOO_OS_UNIX
AM_CFLAGS = \
-I.. \
@ -48,14 +55,49 @@ AM_CFLAGS = \
$(MOO_CFLAGS) \
$(MOO_DEBUG_CFLAGS) \
$(PYTHON_CFLAGS) \
$(PYGTK_CFLAGS) \
$(lib_define)
$(PYGTK_CFLAGS)
py23_cflags = \
-I.. \
-I$(top_builddir) \
$(MOO_CFLAGS) \
$(MOO_DEBUG_CFLAGS) \
$(PYTHON23_CFLAGS) \
$(PYGTK23_CFLAGS) \
-DMOO_PYTHON_MODULE_DLL_NAME=\"pymoo.dll\"
py24_cflags = \
-I.. \
-I$(top_builddir) \
$(MOO_CFLAGS) \
$(MOO_DEBUG_CFLAGS) \
$(PYTHON24_CFLAGS) \
$(PYGTK23_CFLAGS) \
-DMOO_PYTHON_MODULE_DLL_NAME=\"pymoo.dll\"
libmoomod_la_SOURCES = $(libmoomod_la_sources)
libmoomod_la_LIBADD = pygtk/libmoopygtk.la
libmoomod23_la_SOURCES = $(libmoomod_la_sources)
libmoomod23_la_LIBADD = pygtk/libmoopygtk23.la
libmoomod23_la_CFLAGS = $(py23_cflags)
libmoomod24_la_SOURCES = $(libmoomod_la_sources)
libmoomod24_la_LIBADD = pygtk/libmoopygtk24.la
libmoomod24_la_CFLAGS = $(py24_cflags)
libpymoo_la_SOURCES = $(libpymoo_la_sources)
libpymoo23_la_SOURCES = $(libpymoo_la_sources)
libpymoo23_la_CFLAGS = $(py23_cflags)
libpymoo24_la_SOURCES = $(libpymoo_la_sources)
libpymoo24_la_CFLAGS = $(py24_cflags)
libmoopython_la_SOURCES = $(libmoopython_la_sources)
libmoopython_la_LIBADD = $(libmoopython_la_libadd)
EXTRA_DIST = \
moo-mod.c \
moopython-mod.c \
moopython.h \
moopython.c \
moopython-builtin.h \
moopython-builtin.c \
moopython-api.h \
moopython-loader.h \
moopython-loader.c \

View File

@ -16,16 +16,19 @@
#define NO_IMPORT_PYGOBJECT
#include <pygobject.h>
#include "mooedit/mooplugin-loader.h"
#include "moopython/moopython.h"
#include "moopython/moopython-builtin.h"
#include "moopython/moopython-api.h"
#include "moopython/moopython-loader.h"
#include "moopython/pygtk/moo-pygtk.h"
#include "mooutils/moopython.h"
#include "mooutils/mooutils-misc.h"
gboolean
_moo_python_init (void)
{
if (!moo_python_running ())
{
if (!_moo_python_api_init ())
if (!moo_python_api_init ())
{
g_warning ("%s: oops", G_STRLOC);
return FALSE;
@ -35,7 +38,7 @@ _moo_python_init (void)
{
g_warning ("%s: could not initialize moo module", G_STRLOC);
PyErr_Print ();
_moo_python_api_deinit ();
moo_python_api_deinit ();
return FALSE;
}

View File

@ -1,5 +1,5 @@
/*
* moopython.h
* moopython-builtin.h
*
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
*
@ -11,8 +11,8 @@
* See COPYING file that comes with this distribution.
*/
#ifndef __MOO_PYTHON_H__
#define __MOO_PYTHON_H__
#ifndef __MOO_PYTHON_BUILTIN_H__
#define __MOO_PYTHON_BUILTIN_H__
#include <glib.h>
@ -24,4 +24,4 @@ gboolean _moo_python_init (void);
G_END_DECLS
#endif /* __MOO_PYTHON_H__ */
#endif /* __MOO_PYTHON_BUILTIN_H__ */

View File

@ -22,10 +22,82 @@
#include "mooutils/mooutils-misc.h"
static PyObject *sys_module = NULL;
static gboolean
sys_path_add_dir (const char *dir)
{
PyObject *path;
PyObject *s;
if (!sys_module)
sys_module = PyImport_ImportModule ((char*) "sys");
if (!sys_module)
{
PyErr_Print ();
return FALSE;
}
path = PyObject_GetAttrString (sys_module, (char*) "path");
if (!path)
{
PyErr_Print ();
return FALSE;
}
if (!PyList_Check (path))
{
g_critical ("sys.path is not a list");
Py_DECREF (path);
return FALSE;
}
s = PyString_FromString (dir);
PyList_Append (path, s);
Py_DECREF (s);
Py_DECREF (path);
return TRUE;
}
static void
sys_path_remove_dir (const char *dir)
{
PyObject *path;
int i;
if (!sys_module)
return;
path = PyObject_GetAttrString (sys_module, (char*) "path");
if (!path || !PyList_Check (path))
return;
for (i = PyList_GET_SIZE (path) - 1; i >= 0; --i)
{
PyObject *item = PyList_GET_ITEM (path, i);
if (PyString_CheckExact (item) &&
!strcmp (PyString_AsString (item), dir))
{
if (PySequence_DelItem (path, i) != 0)
PyErr_Print ();
break;
}
}
Py_DECREF (path);
}
MOO_MODULE_INIT_FUNC_DECL;
MOO_MODULE_INIT_FUNC_DECL
{
PyObject *moo_mod;
char *dlldir = NULL;
if (moo_python_running ())
return FALSE;
@ -36,8 +108,24 @@ MOO_MODULE_INIT_FUNC_DECL
return FALSE;
}
#ifdef __WIN32__
dlldir = moo_get_dll_dir (MOO_PYTHON_MODULE_DLL_NAME);
#endif
if (dlldir && !sys_path_add_dir (dlldir))
{
g_free (dlldir);
dlldir = NULL;
}
moo_mod = PyImport_ImportModule ((char*) "moo");
if (dlldir)
{
sys_path_remove_dir (dlldir);
g_free (dlldir);
}
if (!moo_mod)
{
PyErr_Print ();

View File

@ -137,9 +137,18 @@ mooterm-mod.h: mooterm-mod.py $(PY2H)
sh $(PY2H) MOO_TERM_PY $(srcdir)/mooterm-mod.py > mooterm-mod.h
if MOO_OS_UNIX
noinst_LTLIBRARIES = libmoopygtk.la
else
noinst_LTLIBRARIES = libmoopygtk23.la libmoopygtk24.la
endif
libmoopygtk_la_SOURCES = $(moopygtk_sources)
libmoopygtk23_la_SOURCES = $(moopygtk_sources)
libmoopygtk24_la_SOURCES = $(moopygtk_sources)
nodist_libmoopygtk_la_SOURCES = $(nodist_moopygtk_sources)
nodist_libmoopygtk23_la_SOURCES = $(nodist_moopygtk_sources)
nodist_libmoopygtk24_la_SOURCES = $(nodist_moopygtk_sources)
AM_CFLAGS = \
-I../.. \
@ -148,3 +157,19 @@ AM_CFLAGS = \
$(MOO_DEBUG_CFLAGS) \
$(PYTHON_CFLAGS) \
$(PYGTK_CFLAGS)
libmoopygtk23_la_CFLAGS = \
-I../.. \
-I$(top_builddir) \
$(MOO_CFLAGS) \
$(MOO_DEBUG_CFLAGS) \
$(PYTHON23_CFLAGS) \
$(PYGTK23_CFLAGS)
libmoopygtk24_la_CFLAGS = \
-I../.. \
-I$(top_builddir) \
$(MOO_CFLAGS) \
$(MOO_DEBUG_CFLAGS) \
$(PYTHON24_CFLAGS) \
$(PYGTK24_CFLAGS)

View File

@ -0,0 +1,4 @@
[module]
type=C
file=pymoo23/pymoo
version=0.7

View File

@ -0,0 +1,4 @@
[module]
type=C
file=pymoo24/pymoo
version=0.7

View File

@ -1144,43 +1144,62 @@ moo_get_app_dir (void)
static char *appdir;
if (!appdir)
{
char *appname = NULL;
if (G_WIN32_HAVE_WIDECHAR_API ())
{
wchar_t buf[MAX_PATH+1];
if (GetModuleFileNameW (GetModuleHandle (NULL), buf, G_N_ELEMENTS (buf)) > 0)
appname = g_utf16_to_utf8 (buf, -1, NULL, NULL, NULL);
}
else
{
gchar buf[MAX_PATH+1];
if (GetModuleFileNameA (GetModuleHandle (NULL), buf, G_N_ELEMENTS (buf)) > 0)
appname = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
}
if (appname)
{
appdir = g_path_get_dirname (appname);
g_free (appname);
}
else
{
appdir = g_strdup (".");
}
}
appdir = moo_get_dll_dir (NULL);
return g_strdup (appdir);
}
char *
moo_get_dll_dir (const char *dll)
{
char *dir;
char *dllname = NULL;
HMODULE handle;
handle = GetModuleHandle (dll);
g_return_val_if_fail (handle != NULL, g_strdup ("."));
if (G_WIN32_HAVE_WIDECHAR_API ())
{
wchar_t buf[MAX_PATH+1];
if (GetModuleFileNameW (handle, buf, G_N_ELEMENTS (buf)) > 0)
dllname = g_utf16_to_utf8 (buf, -1, NULL, NULL, NULL);
}
else
{
gchar buf[MAX_PATH+1];
if (GetModuleFileNameA (handle, buf, G_N_ELEMENTS (buf)) > 0)
dllname = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
}
if (dllname)
{
dir = g_path_get_dirname (dllname);
g_free (dllname);
}
else
{
dir = g_strdup (".");
}
return dir;
}
#else
char *
moo_get_app_dir (void)
{
g_return_val_if_reached (g_strdup ("."));
}
char *
moo_get_dll_dir (G_GNUC_UNUSED const char *dll)
{
g_return_val_if_reached (g_strdup ("."));
}
#endif

View File

@ -67,6 +67,7 @@ GType moo_data_dir_type_get_type (void) G_GNUC_CONST;
/* application directory on win32 */
char *moo_get_app_dir (void);
char *moo_get_dll_dir (const char *dll);
/* ~/.appname */
gboolean moo_make_user_data_dir (void);

View File

@ -22,7 +22,7 @@ moopcre_sources = \
ucpinternal.h
EXTRA_DIST = \
AUTHORS \
AUTHORS.pcre \
ChangeLog \
COPYING.pcre \
NEWS \