summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac68
-rw-r--r--plugins/Makefile.am14
-rw-r--r--plugins/arm/Makefile.am21
-rw-r--r--plugins/bhash/Makefile.am31
-rw-r--r--plugins/bootimg/Makefile.am21
-rw-r--r--plugins/dalvik/Makefile.am25
-rw-r--r--plugins/devdbg/Makefile.am11
-rw-r--r--plugins/dex/Makefile.am21
-rw-r--r--plugins/dexbnf/Makefile.am24
-rw-r--r--plugins/dwarf/Makefile.am13
-rw-r--r--plugins/elf/Makefile.am25
-rw-r--r--plugins/fmtp/Makefile.am11
-rw-r--r--plugins/itanium/Makefile.am21
-rw-r--r--plugins/javadesc/Makefile.am21
-rw-r--r--plugins/libcsem/Makefile.am16
-rw-r--r--plugins/lnxsyscalls/Makefile.am14
-rw-r--r--plugins/mobicore/Makefile.am11
-rw-r--r--plugins/pe/Makefile.am25
-rw-r--r--plugins/pychrysalide/Makefile.am13
-rw-r--r--plugins/pychrysalide/core.c30
-rw-r--r--plugins/readdex/Makefile.am15
-rw-r--r--plugins/readelf/Makefile.am15
-rw-r--r--plugins/readmc/Makefile.am15
-rw-r--r--plugins/ropgadgets/Makefile.am15
-rw-r--r--plugins/winordinals/Makefile.am29
-rw-r--r--plugins/yaml/Makefile.am24
-rw-r--r--src/Makefile.am6
-rw-r--r--src/core/logs.h12
-rw-r--r--src/core/paths.c117
-rw-r--r--src/core/paths.h10
-rw-r--r--src/plugins/pglist.c9
31 files changed, 589 insertions, 114 deletions
diff --git a/configure.ac b/configure.ac
index 291acca..5c383a7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -210,27 +210,50 @@ AC_DEFINE_UNQUOTED(LOCALE_DIR, "${basedir}/share/locale")
# Compilation options
############################################################
-AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [compile with debugging support [default=no]]),
+AC_ARG_ENABLE([debug],
+ AS_HELP_STRING([--enable-debug], [compile with debugging support [default=no]]),
[], [enable_debug=no])
-AC_ARG_WITH(gobject-leak-tracker,
+AC_ARG_ENABLE([python-bindings],
+ AS_HELP_STRING([--disable-python-bindings], [disable Python bindings [default=no]]),
+ [], [enable_python_bindings=yes])
+
+AC_ARG_ENABLE([python-package],
+ AS_HELP_STRING([--enable-python-package], [configure the compilation for building a Python binary distribution [default=no]]),
+ [build_python_package=$enableval], [build_python_package=no])
+
+AC_ARG_WITH([gobject-leak-tracker],
AS_HELP_STRING([--with-gobject-leak-tracker],
[track remaining GObject instances at exit (imply --enable-debug and GLib support) [default=no]]),
[], [with_gobject_leak_tracker=no])
-AC_ARG_WITH(desktop-dir,
+AC_ARG_WITH([desktop-dir],
AS_HELP_STRING([--with-desktop-dir=PATH],
[specify to destination of desktop files (default=PREFIX/share)]))
-AC_ARG_WITH(local-resources,
+AC_ARG_WITH([local-resources],
AS_HELP_STRING([--with-local-resources],
[define if built components located in the sources are used at runtime [default=no]]),
[with_local_resources=yes], [with_local_resources=no])
+
+AM_CONDITIONAL([BUILD_PYTHON_PACKAGE], [test "x$build_python_package" = "xyes"])
+
+AM_CONDITIONAL([BUILD_DISCARD_LOCAL], [test "x$with_local_resources" = "xno"])
+
+
+#-- Delete all kinds of runtime library paths?
+
+if test "x$enable_rpath" = "xno"; then
+ hardcode_into_libs=no
+fi
+
+
#--- Small enumerations
CFLAGS="$CFLAGS -fshort-enums -D_LARGEFILE64_SOURCE"
+
#--- Is debug mode needed ?
if test "x$with_gobject_leak_tracker" = "xyes"; then
@@ -252,20 +275,25 @@ if test "x$with_gobject_leak_tracker" = "xyes"; then
[Define to 1 to enable code for dumping remaining GObject instances at exit.])
fi
+
#--- Discard local sources when looking for resources ?
-if test "x$enable_rpath" = "xno"; then
- hardcode_libdir_flag_spec=
+if test "x$build_python_package" = "xyes"; then
+ CFLAGS="$CFLAGS -DPYTHON_PACKAGE"
fi
+AC_SUBST(CFLAGS)
+
+
+#--- Discard local sources when looking for resources ?
+
if test "x$with_local_resources" = "xno"; then
CFLAGS="$CFLAGS -DDISCARD_LOCAL"
fi
-AM_CONDITIONAL([BUILD_DISCARD_LOCAL], [test "x$with_local_resources" = "xno"])
-
AC_SUBST(CFLAGS)
+
#--- Custom destination for desktop resources ?
if test "x$with_desktop_dir" != x; then
@@ -369,10 +397,6 @@ AC_SUBST(LIBSSL_LIBS)
#--- Checks for Python
-AC_ARG_ENABLE([python-bindings],
- AS_HELP_STRING([--disable-python-bindings], [disable Python bindings [default=no]]),
- [], [enable_python_bindings=yes])
-
if test "x$enable_debug" = "xyes"; then
AC_CHECK_PROG(python3_cfg_binary, [python3-dbg-config] , yes)
else
@@ -613,9 +637,29 @@ echo
echo Found lexical analyzer generator............. : $LEX_INST
echo Found general-purpose parser generator....... : $YACC_INST
+if test "x$enable_python_bindings" = "xyes"; then
+ disable_python_bindings="no"
+else
+ disable_python_bindings="yes"
+fi
+
echo
echo Print debugging messages..................... : $enable_debug
echo Consider local resources..................... : $with_local_resources
+echo Disable Python bindings...................... : $disable_python_bindings
+echo Build a Python binary distribution........... : $build_python_package
+
+if test "$disable_python_bindings" = "yes" -a "x$build_python_package" = "xyes"; then
+
+ echo
+
+ m4_define([python_target_warning],[m4_joinall([m4_newline([])],
+ [Lack of consistency detected as a proper Python package can not get built without Python bindings.],
+ [Please fix the arguments provided to the configure script.])])
+
+ AC_MSG_WARN([python_target_warning])
+
+fi
if test -z "$LEX_INST" -o -z "$YACC_INST"; then
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 608c927..8d39c37 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -9,24 +9,24 @@ endif
SUBDIRS = \
$(PYTHON3_SUBDIRS) \
arm \
- bhash \
bootimg \
- dex \
- dalvik \
devdbg \
+ dex \
dexbnf \
dwarf \
elf \
fmtp \
itanium \
javadesc \
- libcsem \
- lnxsyscalls \
mobicore \
pe \
+ yaml \
+ bhash \
+ dalvik \
+ libcsem \
+ lnxsyscalls \
readdex \
readelf \
readmc \
ropgadgets \
- winordinals \
- yaml
+ winordinals
diff --git a/plugins/arm/Makefile.am b/plugins/arm/Makefile.am
index 66cff6f..a37cbbd 100644
--- a/plugins/arm/Makefile.am
+++ b/plugins/arm/Makefile.am
@@ -4,22 +4,32 @@ lib_LTLIBRARIES = libarm.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
PYTHON3_LIBADD = python/libarmpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -43,8 +53,9 @@ libarm_la_LIBADD = \
v7/libarmv7.la
libarm_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/bhash/Makefile.am b/plugins/bhash/Makefile.am
index 44d1c21..45c5ee0 100644
--- a/plugins/bhash/Makefile.am
+++ b/plugins/bhash/Makefile.am
@@ -4,23 +4,36 @@ lib_LTLIBRARIES = libbhash.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs:$$ORIGIN'
+
+else
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
-PYTHON3_LIBADD = \
- python/libbhashpython.la
+PYTHON3_LIBADD = python/libbhashpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -35,9 +48,11 @@ libbhash_la_SOURCES = \
libbhash_la_LIBADD = \
$(PYTHON3_LIBADD)
-libbhash_la_LDFLAGS = \
+libbhash_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+ -L$(top_srcdir)/plugins/pe/.libs -lpe \
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/bootimg/Makefile.am b/plugins/bootimg/Makefile.am
index 3f8efb7..ada1e4e 100644
--- a/plugins/bootimg/Makefile.am
+++ b/plugins/bootimg/Makefile.am
@@ -4,22 +4,32 @@ lib_LTLIBRARIES = libbootimg.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
PYTHON3_LIBADD = python/libbootimgpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -35,8 +45,9 @@ libbootimg_la_LIBADD = \
$(PYTHON3_LIBADD)
libbootimg_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/dalvik/Makefile.am b/plugins/dalvik/Makefile.am
index 0183cfb..644c38a 100644
--- a/plugins/dalvik/Makefile.am
+++ b/plugins/dalvik/Makefile.am
@@ -4,22 +4,36 @@ lib_LTLIBRARIES = libdalvik.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs:$$ORIGIN'
+
+else
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
PYTHON3_LIBADD = python/libdalvikpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -46,9 +60,10 @@ libdalvik_la_LIBADD = \
v35/libdalvik35.la
libdalvik_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
-L$(top_srcdir)/plugins/dex/.libs -ldex \
- $(PYTHON3_LDFLAGS)
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/devdbg/Makefile.am b/plugins/devdbg/Makefile.am
index e2dc7b8..a92744d 100644
--- a/plugins/devdbg/Makefile.am
+++ b/plugins/devdbg/Makefile.am
@@ -4,11 +4,20 @@ lib_LTLIBRARIES = libspeed.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
+
libspeed_la_SOURCES = \
speed.h speed.c
libspeed_la_LDFLAGS = \
- -L$(top_srcdir)/src/.libs -lchrysacore
+ -avoid-version \
+ -L$(top_srcdir)/src/.libs -lchrysacore \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/dex/Makefile.am b/plugins/dex/Makefile.am
index 45003f6..8eb7bde 100644
--- a/plugins/dex/Makefile.am
+++ b/plugins/dex/Makefile.am
@@ -4,22 +4,32 @@ lib_LTLIBRARIES = libdex.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
PYTHON3_LIBADD = python/libdexpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -41,8 +51,9 @@ libdex_la_LIBADD = \
$(PYTHON3_LIBADD)
libdex_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/dexbnf/Makefile.am b/plugins/dexbnf/Makefile.am
index 3340bc2..51598ce 100644
--- a/plugins/dexbnf/Makefile.am
+++ b/plugins/dexbnf/Makefile.am
@@ -4,22 +4,31 @@ lib_LTLIBRARIES = libdexbnf.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
PYTHON3_LIBADD = python/libdexbnfpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
PYTHON3_SUBDIRS = python
endif
@@ -36,9 +45,10 @@ libdexbnf_la_SOURCES = \
libdexbnf_la_LIBADD = \
$(PYTHON3_LIBADD)
-libdexbnf_la_LDFLAGS = \
- -L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+libdexbnf_la_LDFLAGS = \
+ -avoid-version \
+ -L$(top_srcdir)/src/.libs -lchrysacore \
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/dwarf/Makefile.am b/plugins/dwarf/Makefile.am
index 47387db..5a8c9c9 100644
--- a/plugins/dwarf/Makefile.am
+++ b/plugins/dwarf/Makefile.am
@@ -4,6 +4,13 @@ lib_LTLIBRARIES = libdwarf.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
+
libdwarf_la_SOURCES = \
abbrev.h abbrev.c \
checks.h checks.c \
@@ -31,8 +38,10 @@ libdwarf_la_LIBADD = \
v3/libdwarfv3.la \
v4/libdwarfv4.la
-libdwarf_la_LDFLAGS = \
- -L$(top_srcdir)/src/.libs -lchrysacore
+libdwarf_la_LDFLAGS = \
+ -avoid-version \
+ -L$(top_srcdir)/src/.libs -lchrysacore \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/elf/Makefile.am b/plugins/elf/Makefile.am
index 8a8ce5b..880ae78 100644
--- a/plugins/elf/Makefile.am
+++ b/plugins/elf/Makefile.am
@@ -6,22 +6,32 @@ lib_LTLIBRARIES = libelf.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
PYTHON3_LIBADD = python/libelfpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -44,9 +54,10 @@ libelf_la_SOURCES = \
libelf_la_LIBADD = \
$(PYTHON3_LIBADD)
-libelf_la_LDFLAGS = \
- -L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+libelf_la_LDFLAGS = \
+ -avoid-version \
+ -L$(top_srcdir)/src/.libs -lchrysacore \
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/fmtp/Makefile.am b/plugins/fmtp/Makefile.am
index 0180111..f365c03 100644
--- a/plugins/fmtp/Makefile.am
+++ b/plugins/fmtp/Makefile.am
@@ -4,12 +4,21 @@ lib_LTLIBRARIES = libfmtp.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
+
libfmtp_la_SOURCES = \
def.h \
parser.h parser.c
libfmtp_la_LDFLAGS = \
- -L$(top_srcdir)/src/.libs -lchrysacore
+ -avoid-version \
+ -L$(top_srcdir)/src/.libs -lchrysacore \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/itanium/Makefile.am b/plugins/itanium/Makefile.am
index ec2e93b..e1b2d9e 100644
--- a/plugins/itanium/Makefile.am
+++ b/plugins/itanium/Makefile.am
@@ -4,22 +4,32 @@ lib_LTLIBRARIES = libitanium.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
PYTHON3_LIBADD = python/libitaniumpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -37,8 +47,9 @@ libitanium_la_LIBADD = \
$(PYTHON3_LIBADD)
libitanium_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/javadesc/Makefile.am b/plugins/javadesc/Makefile.am
index e4da266..7a79b99 100644
--- a/plugins/javadesc/Makefile.am
+++ b/plugins/javadesc/Makefile.am
@@ -4,22 +4,32 @@ lib_LTLIBRARIES = libjavadesc.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
PYTHON3_LIBADD = python/libjavadescpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -36,8 +46,9 @@ libjavadesc_la_LIBADD = \
$(PYTHON3_LIBADD)
libjavadesc_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/libcsem/Makefile.am b/plugins/libcsem/Makefile.am
index e4d4cca..c55a2f8 100644
--- a/plugins/libcsem/Makefile.am
+++ b/plugins/libcsem/Makefile.am
@@ -4,12 +4,26 @@ lib_LTLIBRARIES = liblibcsem.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs:$$ORIGIN'
+
+else
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+
+endif
+
+
liblibcsem_la_SOURCES = \
exit.h exit.c \
semantic.h semantic.c
liblibcsem_la_LDFLAGS = \
- -L$(top_srcdir)/src/.libs -lchrysacore
+ -avoid-version \
+ -L$(top_srcdir)/src/.libs -lchrysacore \
+ -L$(top_srcdir)/plugins/elf/.libs -lelf \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/lnxsyscalls/Makefile.am b/plugins/lnxsyscalls/Makefile.am
index c12537c..9c5158f 100644
--- a/plugins/lnxsyscalls/Makefile.am
+++ b/plugins/lnxsyscalls/Makefile.am
@@ -4,6 +4,16 @@ lib_LTLIBRARIES = liblnxsyscalls.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs:$$ORIGIN'
+
+else
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+
+endif
+
liblnxsyscalls_la_SOURCES = \
collect.h collect.c \
core.h core.c \
@@ -17,8 +27,10 @@ liblnxsyscalls_la_SOURCES = \
liblnxsyscalls_la_LIBADD =
liblnxsyscalls_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- -L$(top_srcdir)/plugins/arm/.libs -larm
+ -L$(top_srcdir)/plugins/arm/.libs -larm \
+ $(RUN_PATH)
EXTRA_DIST = linux-syscalls.db
diff --git a/plugins/mobicore/Makefile.am b/plugins/mobicore/Makefile.am
index a1a3b08..761108e 100644
--- a/plugins/mobicore/Makefile.am
+++ b/plugins/mobicore/Makefile.am
@@ -4,6 +4,13 @@ lib_LTLIBRARIES = libmobicore.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
+
libmobicore_la_SOURCES = \
core.h core.c \
mclf-def.h \
@@ -12,7 +19,9 @@ libmobicore_la_SOURCES = \
symbols.h symbols.c
libmobicore_la_LDFLAGS = \
- -L$(top_srcdir)/src/.libs -lchrysacore
+ -avoid-version \
+ -L$(top_srcdir)/src/.libs -lchrysacore \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/pe/Makefile.am b/plugins/pe/Makefile.am
index 8e9bca6..038b8c5 100644
--- a/plugins/pe/Makefile.am
+++ b/plugins/pe/Makefile.am
@@ -6,22 +6,32 @@ lib_LTLIBRARIES = libpe.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
PYTHON3_LIBADD = python/libpepython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -40,9 +50,10 @@ libpe_la_SOURCES = \
libpe_la_LIBADD = \
$(PYTHON3_LIBADD)
-libpe_la_LDFLAGS = \
- -L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+libpe_la_LDFLAGS = \
+ -avoid-version \
+ -L$(top_srcdir)/src/.libs -lchrysacore \
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/pychrysalide/Makefile.am b/plugins/pychrysalide/Makefile.am
index b4b20ad..fb3986c 100644
--- a/plugins/pychrysalide/Makefile.am
+++ b/plugins/pychrysalide/Makefile.am
@@ -6,6 +6,13 @@ lib_LTLIBRARIES = pychrysalide.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/chrysalide-libs'
+
+endif
+
+
pychrysalide_la_SOURCES = \
access.h access.c \
core.h core.c \
@@ -28,10 +35,12 @@ pychrysalide_la_LIBADD = \
mangling/libpychrysamangling.la \
plugins/libpychrysaplugins.la
+# -ldl: dladdr(), dlerror()
pychrysalide_la_LDFLAGS = \
- -module -avoid-version \
+ -module -avoid-version -ldl \
$(LIBPYTHON_LIBS) $(LIBPYGOBJECT_LIBS) \
- -L$(top_srcdir)/src/.libs -lchrysacore
+ -L$(top_srcdir)/src/.libs -lchrysacore \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/pychrysalide/core.c b/plugins/pychrysalide/core.c
index 38e3c7c..98f94b6 100644
--- a/plugins/pychrysalide/core.c
+++ b/plugins/pychrysalide/core.c
@@ -42,6 +42,7 @@
#include <common/environment.h>
#include <common/extstr.h>
#include <core/core.h>
+#include <core/logs.h>
#include <core/paths.h>
#include <plugins/pglist.h>
#include <plugins/self.h>
@@ -399,6 +400,9 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)
PyObject *result; /* Module Python à retourner */
bool status; /* Bilan des inclusions */
int ret; /* Bilan de préparatifs */
+#ifdef PYTHON_PACKAGE
+ Dl_info info; /* Informations dynamiques */
+#endif
GPluginModule *self; /* Représentation interne */
PluginStatusFlags self_flags; /* Fanions à mettre à jour */
@@ -529,6 +533,32 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)
set_batch_mode();
+ /**
+ * Si cette extension pour Python est chargée depuis un dépôt Python,
+ * elle ne se trouve pas dans le répertoire classique des extensions et
+ * n'est donc pas chargée et enregistrée comme attendu.
+ *
+ * Cet enregistrement est donc forcé ici.
+ */
+
+#ifdef PYTHON_PACKAGE
+
+ ret = dladdr(__FUNCTION__, &info);
+ if (ret == 0)
+ {
+ LOG_ERROR_DL_N("dladdr");
+ Py_DECREF(result);
+ result = NULL;
+ goto exit;
+ }
+
+ self = g_plugin_module_new(info.dli_fname);
+ assert(self != NULL);
+
+ register_plugin(self);
+
+#endif
+
init_all_plugins(false);
lock_plugin_list_for_reading();
diff --git a/plugins/readdex/Makefile.am b/plugins/readdex/Makefile.am
index e4d961a..b21f855 100644
--- a/plugins/readdex/Makefile.am
+++ b/plugins/readdex/Makefile.am
@@ -4,6 +4,17 @@ lib_LTLIBRARIES = libreaddex.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs:$$ORIGIN'
+
+else
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+
+endif
+
+
libreaddex_la_SOURCES = \
class.h class.c \
code.h code.c \
@@ -12,9 +23,11 @@ libreaddex_la_SOURCES = \
reader.h reader.c
libreaddex_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
-L$(top_srcdir)/plugins/dex/.libs -ldex \
- -L$(top_srcdir)/plugins/fmtp/.libs -lfmtp
+ -L$(top_srcdir)/plugins/fmtp/.libs -lfmtp \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/readelf/Makefile.am b/plugins/readelf/Makefile.am
index 35c185d..0ca002b 100644
--- a/plugins/readelf/Makefile.am
+++ b/plugins/readelf/Makefile.am
@@ -4,6 +4,17 @@ lib_LTLIBRARIES = libreadelf.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs:$$ORIGIN'
+
+else
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+
+endif
+
+
libreadelf_la_SOURCES = \
header.h header.c \
program.h program.c \
@@ -12,9 +23,11 @@ libreadelf_la_SOURCES = \
strtab.h strtab.c
libreadelf_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
-L$(top_srcdir)/plugins/elf/.libs -lelf \
- -L$(top_srcdir)/plugins/fmtp/.libs -lfmtp
+ -L$(top_srcdir)/plugins/fmtp/.libs -lfmtp \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/readmc/Makefile.am b/plugins/readmc/Makefile.am
index 1c63ccd..fa13fb2 100644
--- a/plugins/readmc/Makefile.am
+++ b/plugins/readmc/Makefile.am
@@ -4,6 +4,17 @@ lib_LTLIBRARIES = libreadmc.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs:$$ORIGIN'
+
+else
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+
+endif
+
+
libreadmc_la_SOURCES = \
header.h header.c \
reader.h reader.c \
@@ -13,9 +24,11 @@ libreadmc_la_SOURCES = \
v24.h v24.c
libreadmc_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
-L$(top_srcdir)/plugins/mobicore/.libs -lmobicore \
- -L$(top_srcdir)/plugins/fmtp/.libs -lfmtp
+ -L$(top_srcdir)/plugins/fmtp/.libs -lfmtp \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/ropgadgets/Makefile.am b/plugins/ropgadgets/Makefile.am
index 3cb5e9a..f23e054 100644
--- a/plugins/ropgadgets/Makefile.am
+++ b/plugins/ropgadgets/Makefile.am
@@ -4,6 +4,17 @@ lib_LTLIBRARIES = libropgadgets.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs:$$ORIGIN'
+
+else
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+
+endif
+
+
libropgadgets_la_SOURCES = \
finder.h finder.c \
helper.h helper.c \
@@ -12,8 +23,10 @@ libropgadgets_la_SOURCES = \
select.h select.c
libropgadgets_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- -L$(top_srcdir)/plugins/arm/.libs -larm
+ -L$(top_srcdir)/plugins/arm/.libs -larm \
+ $(RUN_PATH)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/winordinals/Makefile.am b/plugins/winordinals/Makefile.am
index 91607f3..f9ff14f 100644
--- a/plugins/winordinals/Makefile.am
+++ b/plugins/winordinals/Makefile.am
@@ -4,23 +4,36 @@ lib_LTLIBRARIES = libwinordinals.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs:$$ORIGIN'
+
+else
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
-PYTHON3_LIBADD = \
- python/libwinordinalspython.la
+PYTHON3_LIBADD = python/libwinordinalspython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -38,8 +51,10 @@ libwinordinals_la_LIBADD = \
$(PYTHON3_LIBADD)
libwinordinals_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+ -L$(top_srcdir)/plugins/pe/.libs -lpe \
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/plugins/yaml/Makefile.am b/plugins/yaml/Makefile.am
index 13596e1..9eee4ab 100644
--- a/plugins/yaml/Makefile.am
+++ b/plugins/yaml/Makefile.am
@@ -4,23 +4,32 @@ lib_LTLIBRARIES = libyaml.la
libdir = $(pluginslibdir)
+if BUILD_PYTHON_PACKAGE
+
+RUN_PATH = -Wl,-rpath,'$$ORIGIN/../chrysalide-libs'
+
+endif
+
if BUILD_PYTHON3_BINDINGS
-PYTHON3_LIBADD = \
- python/libyamlpython.la
+PYTHON3_LIBADD = python/libyamlpython.la
if BUILD_DISCARD_LOCAL
-PYTHON3_LDFLAGS = -Wl,-rpath,$(pluginslibdir) \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+if BUILD_PYTHON_PACKAGE
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN/..'
+else
+PYTHON3_RUN_PATH = -Wl,-rpath,'$$ORIGIN'
+endif
else
-PYTHON3_LDFLAGS = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs \
- -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+PYTHON3_RUN_PATH = -Wl,-rpath,$(abs_top_srcdir)/plugins/pychrysalide/.libs
endif
+PYTHON3_LDFLAGS = $(PYTHON3_RUN_PATH) -L$(top_srcdir)/plugins/pychrysalide/.libs -l:pychrysalide.so
+
PYTHON3_SUBDIRS = python
endif
@@ -41,8 +50,9 @@ libyaml_la_LIBADD = \
$(PYTHON3_LIBADD)
libyaml_la_LDFLAGS = \
+ -avoid-version \
-L$(top_srcdir)/src/.libs -lchrysacore \
- $(PYTHON3_LDFLAGS)
+ $(RUN_PATH) $(PYTHON3_LDFLAGS)
devdir = $(includedir)/chrysalide/$(subdir)
diff --git a/src/Makefile.am b/src/Makefile.am
index 30a043e..d239a0d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -20,7 +20,11 @@ endif
libchrysacore_la_SOURCES = \
$(GOBJECT_LEAKS_SOURCES)
-libchrysacore_la_LDFLAGS = $(LIBGTK_LIBS) $(LIBXML_LIBS) $(LIBSQLITE_LIBS) $(LIBARCHIVE_LIBS)
+# -ldl: dladdr(), dlerror()
+libchrysacore_la_LDFLAGS = \
+ -avoid-version -ldl \
+ $(LIBGTK_LIBS) $(LIBXML_LIBS) \
+ $(LIBSQLITE_LIBS) $(LIBARCHIVE_LIBS)
libchrysacore_la_LIBADD = \
analysis/libanalysis.la \
diff --git a/src/core/logs.h b/src/core/logs.h
index d3a81b6..a58a5a8 100644
--- a/src/core/logs.h
+++ b/src/core/logs.h
@@ -25,6 +25,7 @@
#define _CORE_LOGS_H
+#include <dlfcn.h>
#include <errno.h>
#include <netdb.h>
#include <stdarg.h>
@@ -105,6 +106,17 @@ void log_variadic_message(LogMessageType, const char *, ...);
} \
while (0)
+#define LOG_ERROR_DL_N(func) \
+ do \
+ { \
+ const char *__msg_ptr; \
+ __msg_ptr = dlerror(); \
+ if (__msg_ptr == NULL) \
+ __msg_ptr = "???"; \
+ log_variadic_message(LMT_EXT_ERROR, "[%s:%u] %s: %s", __FUNCTION__, __LINE__, func, __msg_ptr); \
+ } \
+ while (0)
+
#define LOG_ERROR_GAI_N(func, errcode) \
do \
{ \
diff --git a/src/core/paths.c b/src/core/paths.c
index 7f4765e..0bb59e7 100644
--- a/src/core/paths.c
+++ b/src/core/paths.c
@@ -24,7 +24,10 @@
#include "paths.h"
+#include <assert.h>
+#include <dlfcn.h>
#include <glib.h>
+#include <libgen.h>
#include <malloc.h>
#include <stdio.h>
#include <string.h>
@@ -34,6 +37,7 @@
#include <config.h>
+#include "logs.h"
#include "../common/extstr.h"
@@ -108,6 +112,119 @@ char *get_effective_directory(const char *template)
/******************************************************************************
* *
+* Paramètres : type = type de répertoire de travail visé. *
+* *
+* Description : Fournit le répertoire réel correspondant à une cible. *
+* *
+* Retour : Répertoire de travail effectif. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+char *get_effective_directory_new(TargetDirectoryType type)
+{
+ char *result; /* Répertoire à retourner */
+#ifdef DISCARD_LOCAL
+ Dl_info info; /* Informations dynamiques */
+ int ret; /* Bilan d'une récupération */
+ char *dyn_path_tmp; /* Chemin d'accès modifiable */
+ const char *dyn_path; /* Chemin d'accès courant */
+# ifdef PYTHON_PACKAGE
+ size_t len; /* Taille de comparaison */
+ size_t pos; /* Position dans une chaîne */
+# endif
+#endif
+
+ /**
+ * Toutes les définitions traitées dans cette fonction doivent rester synchronisées
+ * avec celles du fichier configure.ac.
+ *
+ * Quand les ressources issues du code source ne sont pas utilisées, deux cas de
+ * figure sont pris en compte :
+ *
+ * - .../lib
+ * - .../lib/chrysalide-plugins
+ *
+ * - .../lib/python3.7/site-packages/chrysalide-libs
+ * - .../lib/python3.7/site-packages
+ *
+ * Le chemin courant pointe sur le premier élément et doit permettre de retrouver
+ * les autres sur demandes.
+ */
+
+ result = NULL;
+
+#ifdef DISCARD_LOCAL
+
+ ret = dladdr(__FUNCTION__, &info);
+ if (ret == 0)
+ {
+ LOG_ERROR_DL_N("dladdr");
+ goto exit;
+ }
+
+ dyn_path_tmp = strdup(info.dli_fname);
+ dyn_path = dirname(dyn_path_tmp);
+
+#endif
+
+ switch (type)
+ {
+ case TDT_PLUGINS_LIB:
+
+#ifndef DISCARD_LOCAL
+ result = strdup(PACKAGE_SOURCE_DIR G_DIR_SEPARATOR_S "plugins");
+#else
+# ifdef PYTHON_PACKAGE
+
+ len = strlen("chrysalide-libs");
+ pos = strlen(dyn_path);
+
+ if (pos <= len)
+ goto bad_sync;
+
+ pos -= len;
+
+ if (strcmp(&dyn_path[pos], "chrysalide-libs") != 0)
+ goto bad_sync;
+
+ result = strdup(dyn_path);
+ result[pos] = '\0';
+ result = stradd(result, "chrysalide-plugins");
+
+# else
+ result = strdup(dyn_path);
+ result = stradd(result, G_DIR_SEPARATOR_S "chrysalide-plugins");
+# endif
+#endif
+ break;
+
+ default:
+ result = NULL;
+ break;
+
+ }
+
+ bad_sync:
+
+#ifdef DISCARD_LOCAL
+
+ free(dyn_path_tmp);
+
+#endif
+
+ exit:
+
+ assert(result != NULL);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : dirname = répertoire de travail à fouiller. *
* filename = nom de fichier seul comme indice. *
* *
diff --git a/src/core/paths.h b/src/core/paths.h
index e6ce61f..f56beb0 100644
--- a/src/core/paths.h
+++ b/src/core/paths.h
@@ -32,6 +32,16 @@ void register_new_prefix(const char *);
/* Fournit le répertoire réel correspondant à une cible. */
char *get_effective_directory(const char *);
+/* Listes de répertoires d'installation */
+typedef enum _TargetDirectoryType
+{
+ TDT_PLUGINS_LIB, /* Répertoire des extensions */
+
+} TargetDirectoryType;
+
+/* Fournit le répertoire réel correspondant à une cible. */
+char *get_effective_directory_new(TargetDirectoryType);
+
/* Trouve le chemin d'accès complet à un fichier d'image. */
char *find_pixmap_file(const char *);
diff --git a/src/plugins/pglist.c b/src/plugins/pglist.c
index dd4e127..e7ca037 100644
--- a/src/plugins/pglist.c
+++ b/src/plugins/pglist.c
@@ -32,7 +32,6 @@
#include <string.h>
-#include <config.h>
#include <i18n.h>
@@ -75,22 +74,16 @@ static void on_plugin_ref_toggle(gpointer, GPluginModule *, gboolean);
bool init_all_plugins(bool load)
{
-#ifdef DISCARD_LOCAL
char *edir; /* Répertoire de base effectif */
-#endif
char *env; /* Contenu environnemental */
char *saveptr; /* Sauvegarde pour parcours */
char *udir; /* Répertoire supplémentaire ? */
g_rw_lock_init(&_pg_lock);
-#ifndef DISCARD_LOCAL
- browse_directory_for_plugins(PACKAGE_SOURCE_DIR "/plugins");
-#else
- edir = get_effective_directory(PLUGINS_LIB_DIR);
+ edir = get_effective_directory_new(TDT_PLUGINS_LIB);
browse_directory_for_plugins(edir);
free(edir);
-#endif
env = getenv("CHRYSALIDE_PLUGINS_PATH");