davemds pushed a commit to branch master.

http://git.enlightenment.org/enlightenment/modules/edgar.git/commit/?id=53bdf254bdb5d960b3aed1a2ea66c3b38b3853b8

commit 53bdf254bdb5d960b3aed1a2ea66c3b38b3853b8
Author: Dave Andreoli <d...@gurumeditation.it>
Date:   Tue Apr 21 11:49:02 2020 +0200

    Edgar: switch to meson
    
    ...still not working with recent e, that changed the way modules are loaded
---
 .gitignore                                         |  60 +-
 COPYING.LESSER                                     | 165 ----
 GADGETS/audio/Makefile                             |  36 -
 GADGETS/calculator/Makefile                        |  36 -
 GADGETS/cpu/Makefile                               |  36 -
 GADGETS/dropbox/Makefile                           |  36 -
 GADGETS/led_clock/Makefile                         |  36 -
 GADGETS/mem/Makefile                               |  36 -
 GADGETS/netspeed/Makefile                          |  36 -
 INSTALL                                            | 246 +-----
 Makefile.am                                        |  25 -
 README                                             |  24 +-
 autogen.sh                                         |  16 -
 configure.ac                                       |  84 --
 {GADGETS => gadgets}/audio/__init__.py             |   0
 {GADGETS => gadgets}/audio/audio.edc               |   0
 {GADGETS => gadgets}/audio/images/cover.png        | Bin
 {GADGETS => gadgets}/audio/images/icon_mixer.png   | Bin
 {GADGETS => gadgets}/audio/images/icon_next.png    | Bin
 {GADGETS => gadgets}/audio/images/icon_pause.png   | Bin
 {GADGETS => gadgets}/audio/images/icon_play.png    | Bin
 {GADGETS => gadgets}/audio/images/icon_prev.png    | Bin
 .../audio/images/inset_round_hilight.png           | Bin
 .../audio/images/inset_round_shading.png           | Bin
 .../audio/images/inset_round_shadow.png            | Bin
 .../audio/images/led_dot_white.png                 | Bin
 {GADGETS => gadgets}/audio/images/speaker.png      | Bin
 gadgets/audio/meson.build                          |  30 +
 {GADGETS => gadgets}/calculator/__init__.py        |   0
 {GADGETS => gadgets}/calculator/calculator.edc     |   0
 {GADGETS => gadgets}/calculator/fonts/Vera.ttf     | Bin
 {GADGETS => gadgets}/calculator/images/0.png       | Bin
 {GADGETS => gadgets}/calculator/images/1.png       | Bin
 {GADGETS => gadgets}/calculator/images/2.png       | Bin
 {GADGETS => gadgets}/calculator/images/3.png       | Bin
 {GADGETS => gadgets}/calculator/images/4.png       | Bin
 {GADGETS => gadgets}/calculator/images/5.png       | Bin
 {GADGETS => gadgets}/calculator/images/6.png       | Bin
 {GADGETS => gadgets}/calculator/images/7.png       | Bin
 {GADGETS => gadgets}/calculator/images/8.png       | Bin
 {GADGETS => gadgets}/calculator/images/9.png       | Bin
 {GADGETS => gadgets}/calculator/images/bg.png      | Bin
 {GADGETS => gadgets}/calculator/images/canc.png    | Bin
 {GADGETS => gadgets}/calculator/images/divide.png  | Bin
 {GADGETS => gadgets}/calculator/images/m-c.png     | Bin
 {GADGETS => gadgets}/calculator/images/m-minus.png | Bin
 {GADGETS => gadgets}/calculator/images/m-plus.png  | Bin
 {GADGETS => gadgets}/calculator/images/m-r.png     | Bin
 {GADGETS => gadgets}/calculator/images/minus.png   | Bin
 .../calculator/images/multiply.png                 | Bin
 {GADGETS => gadgets}/calculator/images/plus.png    | Bin
 {GADGETS => gadgets}/calculator/images/point.png   | Bin
 {GADGETS => gadgets}/calculator/images/result.png  | Bin
 gadgets/calculator/meson.build                     |  21 +
 {GADGETS => gadgets}/cpu/__init__.py               |   0
 {GADGETS => gadgets}/cpu/cpu.edc                   |   0
 {GADGETS => gadgets}/cpu/images/bar_bg.png         | Bin
 {GADGETS => gadgets}/cpu/images/cpu.png            | Bin
 {GADGETS => gadgets}/cpu/images/green_on.png       | Bin
 {GADGETS => gadgets}/cpu/images/mockup.xcf         | Bin
 {GADGETS => gadgets}/cpu/images/red_on.png         | Bin
 {GADGETS => gadgets}/cpu/images/yellow_on.png      | Bin
 gadgets/cpu/meson.build                            |  21 +
 {GADGETS => gadgets}/dropbox/__init__.py           |   0
 .../dropbox/docs/dropboxd-protocol                 |   0
 {GADGETS => gadgets}/dropbox/dropbox.edc           |   0
 {GADGETS => gadgets}/dropbox/images/dropbox.png    | Bin
 .../dropbox/images/dropbox_gray.png                | Bin
 .../dropbox/images/emblem-syncing.png              | Bin
 .../dropbox/images/emblem-unsyncable.png           | Bin
 .../dropbox/images/emblem-uptodate.png             | Bin
 gadgets/dropbox/meson.build                        |  21 +
 {GADGETS => gadgets}/led_clock/__init__.py         |   0
 {GADGETS => gadgets}/led_clock/images/bg.png       | Bin
 {GADGETS => gadgets}/led_clock/images/bg_orig.png  | Bin
 {GADGETS => gadgets}/led_clock/images/icon.png     | Bin
 {GADGETS => gadgets}/led_clock/images/led_blu.png  | Bin
 .../led_clock/images/led_green.png                 | Bin
 {GADGETS => gadgets}/led_clock/images/led_off.png  | Bin
 {GADGETS => gadgets}/led_clock/images/led_red.png  | Bin
 {GADGETS => gadgets}/led_clock/images/template.png | Bin
 {GADGETS => gadgets}/led_clock/led_clock.edc       |   0
 gadgets/led_clock/meson.build                      |  21 +
 {GADGETS => gadgets}/mem/__init__.py               |   0
 {GADGETS => gadgets}/mem/images/bar_bg.png         | Bin
 {GADGETS => gadgets}/mem/images/blu_on.png         | Bin
 {GADGETS => gadgets}/mem/images/mem.png            | Bin
 {GADGETS => gadgets}/mem/mem.edc                   |   0
 gadgets/mem/meson.build                            |  21 +
 {GADGETS => gadgets}/netspeed/__init__.py          |   0
 {GADGETS => gadgets}/netspeed/images/base.png      | Bin
 {GADGETS => gadgets}/netspeed/images/over.png      | Bin
 {GADGETS => gadgets}/netspeed/images/rx.png        | Bin
 {GADGETS => gadgets}/netspeed/images/tx.png        | Bin
 gadgets/netspeed/meson.build                       |  21 +
 {GADGETS => gadgets}/netspeed/netspeed.edc         |   0
 m4/ac_attribute.m4                                 |  14 -
 m4/ax_python_devel.m4                              | 324 --------
 m4/ax_python_module.m4                             |  50 --
 meson.build                                        |  72 ++
 module.desktop.in => module.desktop                |   0
 python/Makefile.am                                 |   6 -
 src/Makefile.am                                    |  22 -
 src/OLD_e_mod_config.c                             | 361 ---------
 src/OLD_e_mod_edgar.c                              | 869 ---------------------
 src/OLD_e_mod_edgar.h                              |  25 -
 src/OLD_e_mod_guardian.c                           | 217 -----
 src/OLD_e_mod_guardian.h                           |  24 -
 src/e_mod_edgar.c                                  |   8 +-
 src/efl.eo_api.h                                   |  44 +-
 src/meson.build                                    |  12 +
 111 files changed, 286 insertions(+), 2790 deletions(-)

diff --git a/.gitignore b/.gitignore
index e50db78..567609b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,59 +1 @@
-# Object files
-*.o
-*.ko
-*.obj
-*.elf
-
-# Libraries
-*.lib
-*.a
-
-# Shared objects (inc. Windows DLLs)
-*.dll
-*.so
-*.so.*
-*.dylib
-
-# Executables
-*.exe
-*.out
-*.app
-*.i*86
-*.x86_64
-*.hex
-
-*~
-*.edj
-*.pyc
-/Makefile
-/src/Makefile
-/python/Makefile
-Makefile.in
-*.lo
-config.h
-config.h.in
-configure
-/compile
-/config.cache
-/config.guess
-/config.log
-/config.rpath
-/config.status
-/config.sub
-aclocal.m4
-autom4te.cache/
-depcomp
-install-sh
-libtool
-ltmain.sh
-m4/libtool.m4
-m4/ltoptions.m4
-m4/ltsugar.m4
-m4/ltversion.m4
-m4/lt~obsolete.m4
-missing
-module.desktop
-src/.deps/
-src/.libs/
-src/module.la
-stamp-h1
+build/
diff --git a/COPYING.LESSER b/COPYING.LESSER
deleted file mode 100644
index 1604322..0000000
--- a/COPYING.LESSER
+++ /dev/null
@@ -1,165 +0,0 @@
-                   GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions. 
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version. 
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
diff --git a/GADGETS/audio/Makefile b/GADGETS/audio/Makefile
deleted file mode 100644
index c6e7b10..0000000
--- a/GADGETS/audio/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-# Simple Makefile for Enlightenment (edgar) gadgets
-
-# gadget specific config
-GADGET_NAME = audio
-EXTRA_FILES = 
-
-
-# nothing  should be changed below this point
-GADGET_FILES = __init__.pyc $(GADGET_NAME).edj
-prefix = $(shell pkg-config --variable=libdir enlightenment)
-gadget_folder = ${prefix}/enlightenment/gadgets/$(GADGET_NAME)
-
-.PHONY: all install clean
-
-all: $(GADGET_FILES) $(EXTRA_FILES)
-
-install: all
-       @mkdir -p -v ${gadget_folder}
-       @cp --preserve=mode -v $(GADGET_FILES) $(EXTRA_FILES) $(gadget_folder)
-
-uninstall: all
-       @rm -rfv ${gadget_folder}
-
-clean:
-       @rm -fv *.edj *.pyc
-
-
-EDJE_CC = edje_cc
-EDJE_FLAGS = -v -id images/ -fd fonts/
-
-%.edj: %.edc images/*
-       $(EDJE_CC) $(EDJE_FLAGS) $<
-       @chmod -v og+r $@
-
-%.pyc: %.py
-       python3 -c "from py_compile import compile; compile('$<', '$@')"
diff --git a/GADGETS/calculator/Makefile b/GADGETS/calculator/Makefile
deleted file mode 100644
index 3a38ebb..0000000
--- a/GADGETS/calculator/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-# Simple Makefile for Enlightenment (edgar) gadgets
-
-# gadget specific config
-GADGET_NAME = calculator
-EXTRA_FILES = 
-
-
-# nothing  should be changed below this point
-GADGET_FILES = __init__.pyc $(GADGET_NAME).edj
-prefix = $(shell pkg-config --variable=libdir enlightenment)
-gadget_folder = ${prefix}/enlightenment/gadgets/$(GADGET_NAME)
-
-.PHONY: all install clean
-
-all: $(GADGET_FILES) $(EXTRA_FILES)
-
-install: all
-       @mkdir -p -v ${gadget_folder}
-       @cp --preserve=mode -v $(GADGET_FILES) $(EXTRA_FILES) $(gadget_folder)
-
-uninstall: all
-       @rm -rfv ${gadget_folder}
-
-clean:
-       @rm -fv *.edj *.pyc
-
-
-EDJE_CC = edje_cc
-EDJE_FLAGS = -v -id images/ -fd fonts/
-
-%.edj: %.edc images/*
-       $(EDJE_CC) $(EDJE_FLAGS) $<
-       @chmod -v og+r $@
-
-%.pyc: %.py
-       python3 -c "from py_compile import compile; compile('$<', '$@')"
diff --git a/GADGETS/cpu/Makefile b/GADGETS/cpu/Makefile
deleted file mode 100644
index 26d1f77..0000000
--- a/GADGETS/cpu/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-# Simple Makefile for Enlightenment (edgar) gadgets
-
-# gadget specific config
-GADGET_NAME = cpu
-EXTRA_FILES = 
-
-
-# nothing  should be changed below this point
-GADGET_FILES = __init__.pyc $(GADGET_NAME).edj
-prefix = $(shell pkg-config --variable=libdir enlightenment)
-gadget_folder = ${prefix}/enlightenment/gadgets/$(GADGET_NAME)
-
-.PHONY: all install clean
-
-all: $(GADGET_FILES) $(EXTRA_FILES)
-
-install: all
-       @mkdir -p -v ${gadget_folder}
-       @cp --preserve=mode -v $(GADGET_FILES) $(EXTRA_FILES) $(gadget_folder)
-
-uninstall: all
-       @rm -rfv ${gadget_folder}
-
-clean:
-       @rm -fv *.edj *.pyc
-
-
-EDJE_CC = edje_cc
-EDJE_FLAGS = -v -id images/ -fd fonts/
-
-%.edj: %.edc images/*
-       $(EDJE_CC) $(EDJE_FLAGS) $<
-       @chmod -v og+r $@
-
-%.pyc: %.py
-       python3 -c "from py_compile import compile; compile('$<', '$@')"
diff --git a/GADGETS/dropbox/Makefile b/GADGETS/dropbox/Makefile
deleted file mode 100644
index 50b1f27..0000000
--- a/GADGETS/dropbox/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-# Simple Makefile for Enlightenment (edgar) gadgets
-
-# gadget specific config
-GADGET_NAME = dropbox
-EXTRA_FILES = 
-
-
-# nothing  should be changed below this point
-GADGET_FILES = __init__.pyc $(GADGET_NAME).edj
-prefix = $(shell pkg-config --variable=libdir enlightenment)
-gadget_folder = ${prefix}/enlightenment/gadgets/$(GADGET_NAME)
-
-.PHONY: all install clean
-
-all: $(GADGET_FILES) $(EXTRA_FILES)
-
-install: all
-       @mkdir -p -v ${gadget_folder}
-       @cp --preserve=mode -v $(GADGET_FILES) $(EXTRA_FILES) $(gadget_folder)
-
-uninstall: all
-       @rm -rfv ${gadget_folder}
-
-clean:
-       @rm -fv *.edj *.pyc
-
-
-EDJE_CC = edje_cc
-EDJE_FLAGS = -v -id images/ -fd fonts/
-
-%.edj: %.edc images/*
-       $(EDJE_CC) $(EDJE_FLAGS) $<
-       @chmod -v og+r $@
-
-%.pyc: %.py
-       python3 -c "from py_compile import compile; compile('$<', '$@')"
diff --git a/GADGETS/led_clock/Makefile b/GADGETS/led_clock/Makefile
deleted file mode 100644
index 1001ca0..0000000
--- a/GADGETS/led_clock/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-# Simple Makefile for Enlightenment (edgar) gadgets
-
-# gadget specific config
-GADGET_NAME = led_clock
-EXTRA_FILES = 
-
-
-# nothing  should be changed below this point
-GADGET_FILES = __init__.pyc $(GADGET_NAME).edj
-prefix = $(shell pkg-config --variable=libdir enlightenment)
-gadget_folder = ${prefix}/enlightenment/gadgets/$(GADGET_NAME)
-
-.PHONY: all install clean
-
-all: $(GADGET_FILES) $(EXTRA_FILES)
-
-install: all
-       @mkdir -p -v ${gadget_folder}
-       @cp --preserve=mode -v $(GADGET_FILES) $(EXTRA_FILES) $(gadget_folder)
-
-uninstall: all
-       @rm -rfv ${gadget_folder}
-
-clean:
-       @rm -fv *.edj *.pyc
-
-
-EDJE_CC = edje_cc
-EDJE_FLAGS = -v -id images/ -fd fonts/
-
-%.edj: %.edc images/*
-       $(EDJE_CC) $(EDJE_FLAGS) $<
-       @chmod -v og+r $@
-
-%.pyc: %.py
-       python3 -c "from py_compile import compile; compile('$<', '$@')"
diff --git a/GADGETS/mem/Makefile b/GADGETS/mem/Makefile
deleted file mode 100644
index 1d3957d..0000000
--- a/GADGETS/mem/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-# Simple Makefile for Enlightenment (edgar) gadgets
-
-# gadget specific config
-GADGET_NAME = mem
-EXTRA_FILES = 
-
-
-# nothing  should be changed below this point
-GADGET_FILES = __init__.pyc $(GADGET_NAME).edj
-prefix = $(shell pkg-config --variable=libdir enlightenment)
-gadget_folder = ${prefix}/enlightenment/gadgets/$(GADGET_NAME)
-
-.PHONY: all install clean
-
-all: $(GADGET_FILES) $(EXTRA_FILES)
-
-install: all
-       @mkdir -p -v ${gadget_folder}
-       @cp --preserve=mode -v $(GADGET_FILES) $(EXTRA_FILES) $(gadget_folder)
-
-uninstall: all
-       @rm -rfv ${gadget_folder}
-
-clean:
-       @rm -fv *.edj *.pyc
-
-
-EDJE_CC = edje_cc
-EDJE_FLAGS = -v -id images/ -fd fonts/
-
-%.edj: %.edc images/*
-       $(EDJE_CC) $(EDJE_FLAGS) $<
-       @chmod -v og+r $@
-
-%.pyc: %.py
-       python3 -c "from py_compile import compile; compile('$<', '$@')"
diff --git a/GADGETS/netspeed/Makefile b/GADGETS/netspeed/Makefile
deleted file mode 100644
index 026eaea..0000000
--- a/GADGETS/netspeed/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-# Simple Makefile for Enlightenment (edgar) gadgets
-
-# gadget specific config
-GADGET_NAME = netspeed
-EXTRA_FILES = 
-
-
-# nothing  should be changed below this point
-GADGET_FILES = __init__.pyc $(GADGET_NAME).edj
-prefix = $(shell pkg-config --variable=libdir enlightenment)
-gadget_folder = ${prefix}/enlightenment/gadgets/$(GADGET_NAME)
-
-.PHONY: all install clean
-
-all: $(GADGET_FILES) $(EXTRA_FILES)
-
-install: all
-       @mkdir -p -v ${gadget_folder}
-       @cp --preserve=mode -v $(GADGET_FILES) $(EXTRA_FILES) $(gadget_folder)
-
-uninstall: all
-       @rm -rfv ${gadget_folder}
-
-clean:
-       @rm -fv *.edj *.pyc
-
-
-EDJE_CC = edje_cc
-EDJE_FLAGS = -v -id images/ -fd fonts/
-
-%.edj: %.edc images/*
-       $(EDJE_CC) $(EDJE_FLAGS) $<
-       @chmod -v og+r $@
-
-%.pyc: %.py
-       python3 -c "from py_compile import compile; compile('$<', '$@')"
diff --git a/INSTALL b/INSTALL
index d3c5b40..fc64386 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,237 +1,23 @@
-Installation Instructions
-*************************
+To build using meson
+====================
+meson build
+cd build
+ninja
+ninja install
 
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007 Free Software Foundation, Inc.
 
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
-Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package.  The following
-more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
-
-     Running `configure' might take a while.  While running, it prints
-     some messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-  6. Often, you can also type `make uninstall' to remove the installed
-     files again.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you can use GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   With a non-GNU `make', it is safer to compile the package for one
-architecture at a time in the source code directory.  After you have
-installed the package for one architecture, use `make distclean' before
-reconfiguring for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
+Or without chdir
 ================
+meson build
+ninja -C build
+ninja -C build install
 
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
-
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
-     Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
 
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
+Uninstall
+=========
+ninja -C build uninstall
 
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
 
+Clean build
+===========
+rm -rf build/
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644
index c7f07c4..0000000
--- a/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-ACLOCAL_AMFLAGS = -I m4
-MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \
-                       config.sub configure depcomp install-sh ltmain.sh \
-                       missing module.desktop config.rpath mkinstalldirs
-
-SUBDIRS = src python
-
-EDJE_FLAGS = -v \
-             -id $(top_srcdir)
-
-filesdir =  $(datadir)
-files_DATA = module.desktop e-module-edgar.edj
-
-EXTRA_DIST = module.desktop.in \
-             module_icon.png \
-             e-module-edgar.edc
-
-%.edj:  %.edc
-       $(EDJE_CC) $(EDJE_FLAGS) $< $@
-
-clean-local:
-       rm -rf e-module-edgar.edj module.desktop *~
-
-uninstall:
-       rm -rf $(DESTDIR)$(datadir)
diff --git a/README b/README
index 9cf476d..7073db6 100644
--- a/README
+++ b/README
@@ -6,8 +6,8 @@ This module load python gadgets in Enlightenment.
 Requirements
 ============
 
-* Enlightenment >= 0.17
-* Python >= 3.2 (also the -dev package if your disto need them)
+* Enlightenment >= 0.24
+* Python >= 3.5 (also the -dev package if your disto need them)
 * Python-EFL >= 1.11 (built for python3)
 * python3-dbus
 
@@ -15,20 +15,11 @@ Requirements
 Install
 =======
 
-To install the edgar module use the standard:
+To install the edgar and all the incluede gadgets just use:
 
-  ./autogen.sh
-  make
-  (sudo) make install
-
-If py3 is not the default on your system you need to specify the version:
-
-  PYTHON_VERSION=3.x ./autogen.sh
-
-
-Gadgets are in the GADGETS/ folder, to install them just use:
-
-  (sudo) make install
+  meson build
+  ninja -C build
+  ninja -C build install
 
 
 The Audio gadget
@@ -65,11 +56,10 @@ Usage tips:
 How to write your own gadget
 ============================
 
-I suggest to start from the ruler gadget, just copy it's folder and
+I suggest to start from an existing gadget, just copy it's folder and
 start hacking, a minimal gadget require:
 
 base_folder/   (need to have the same name as the gadget)
-  Makefile     (the provided makefile should work for you)
   __init__.py  (the gadget python script)
   gadget.edc   (the gadget edje file)
   images/
diff --git a/autogen.sh b/autogen.sh
deleted file mode 100755
index 31ccda0..0000000
--- a/autogen.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-rm -rf autom4te.cache
-rm -f aclocal.m4 ltmain.sh
-
-touch README
-
-echo "Running aclocal..." ; aclocal -I m4 $ACLOCAL_FLAGS || exit 1
-echo "Running autoheader..." ; autoheader || exit 1
-echo "Running autoconf..." ; autoconf || exit 1
-echo "Running libtoolize..." ; (libtoolize --copy --automake || glibtoolize 
--automake) || exit 1
-echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1
-
-if [ -z "$NOCONFIGURE" ]; then
-       ./configure "$@"
-fi
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index 458a053..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,84 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-
-# get rid of that stupid cache mechanism
-rm -f config.cache
-
-AC_INIT(edgar, 0.2.0, d...@gurumeditation.it)
-AC_PREREQ(2.52)
-AC_CONFIG_SRCDIR(configure.ac)
-AC_CANONICAL_BUILD
-AC_CANONICAL_HOST
-AC_ISC_POSIX
-
-AM_INIT_AUTOMAKE(1.8)
-AM_CONFIG_HEADER(config.h)
-
-AC_PROG_CC
-AM_PROG_CC_STDC
-AC_HEADER_STDC
-AC_C_CONST
-AC_C___ATTRIBUTE__
-
-define([AC_LIBTOOL_LANG_CXX_CONFIG], [:])dnl
-define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl
-AC_PROG_LIBTOOL
-
-#AM_GNU_GETTEXT([external])
-#AM_GNU_GETTEXT_VERSION(0.14)
-
-release=$(pkg-config --variable=release enlightenment)
-MODULE_ARCH="$host_os-$host_cpu-$release"
-AC_SUBST(MODULE_ARCH)
-AC_DEFINE_UNQUOTED(MODULE_ARCH, "$MODULE_ARCH", "Module architecture")
-
-# Find edje_cc
-PKG_CHECK_MODULES(EDJE, [edje >= 0.5.0])
-AC_ARG_WITH(edje-cc,
-  AC_HELP_STRING([--with-edje-cc=PATH], [specify a specific path to edje_cc]),
-  [
-    v=$withval;
-    EDJE_CC=$v
-  ],[
-    EDJE_CC=$(pkg-config --variable=prefix edje)/bin/edje_cc
-  ]
-)
-AC_SUBST(EDJE_CC)
-AC_MSG_CHECKING([Which edje_cc to use])
-AC_MSG_RESULT(${EDJE_CC})
-
-# Check enlightenment version >=0.18
-# (for e18 we manually define E_VERSION_MAJOR)
-PKG_CHECK_MODULES(E,
-    [enlightenment >= 0.18 enlightenment < 0.19],
-    [AC_DEFINE([E_VERSION_MAJOR], [18], [Have exactly E18])],
-    [PKG_CHECK_MODULES(E, [enlightenment >= 0.19])]
-)
-
-# Explicit link to Eo
-PKG_CHECK_MODULES(EO, [eo])
-
-# Check for python3 and required modules
-# PKG_CHECK_MODULES(PYTHON3, [python3 >= 3.2])
-AX_PYTHON_DEVEL([>= '3.2'])
-AC_SUBST([PYTHON])
-
-AX_PYTHON3_MODULE(efl, "required")
-AX_PYTHON3_MODULE(dbus, "required")
-
-
-
-datadir=$(pkg-config --variable=modules enlightenment)/${PACKAGE}
-
-AC_ARG_ENABLE(homedir-install,
-  AS_HELP_STRING([--enable-homedir-install], [Install module in homedir]),
-  [ datadir="${HOME}/.e/e/modules/${PACKAGE}" ]
-)
-
-
-AC_OUTPUT([
-Makefile
-src/Makefile
-python/Makefile
-module.desktop
-], [
-])
diff --git a/GADGETS/audio/__init__.py b/gadgets/audio/__init__.py
similarity index 100%
rename from GADGETS/audio/__init__.py
rename to gadgets/audio/__init__.py
diff --git a/GADGETS/audio/audio.edc b/gadgets/audio/audio.edc
similarity index 100%
rename from GADGETS/audio/audio.edc
rename to gadgets/audio/audio.edc
diff --git a/GADGETS/audio/images/cover.png b/gadgets/audio/images/cover.png
similarity index 100%
rename from GADGETS/audio/images/cover.png
rename to gadgets/audio/images/cover.png
diff --git a/GADGETS/audio/images/icon_mixer.png 
b/gadgets/audio/images/icon_mixer.png
similarity index 100%
rename from GADGETS/audio/images/icon_mixer.png
rename to gadgets/audio/images/icon_mixer.png
diff --git a/GADGETS/audio/images/icon_next.png 
b/gadgets/audio/images/icon_next.png
similarity index 100%
rename from GADGETS/audio/images/icon_next.png
rename to gadgets/audio/images/icon_next.png
diff --git a/GADGETS/audio/images/icon_pause.png 
b/gadgets/audio/images/icon_pause.png
similarity index 100%
rename from GADGETS/audio/images/icon_pause.png
rename to gadgets/audio/images/icon_pause.png
diff --git a/GADGETS/audio/images/icon_play.png 
b/gadgets/audio/images/icon_play.png
similarity index 100%
rename from GADGETS/audio/images/icon_play.png
rename to gadgets/audio/images/icon_play.png
diff --git a/GADGETS/audio/images/icon_prev.png 
b/gadgets/audio/images/icon_prev.png
similarity index 100%
rename from GADGETS/audio/images/icon_prev.png
rename to gadgets/audio/images/icon_prev.png
diff --git a/GADGETS/audio/images/inset_round_hilight.png 
b/gadgets/audio/images/inset_round_hilight.png
similarity index 100%
rename from GADGETS/audio/images/inset_round_hilight.png
rename to gadgets/audio/images/inset_round_hilight.png
diff --git a/GADGETS/audio/images/inset_round_shading.png 
b/gadgets/audio/images/inset_round_shading.png
similarity index 100%
rename from GADGETS/audio/images/inset_round_shading.png
rename to gadgets/audio/images/inset_round_shading.png
diff --git a/GADGETS/audio/images/inset_round_shadow.png 
b/gadgets/audio/images/inset_round_shadow.png
similarity index 100%
rename from GADGETS/audio/images/inset_round_shadow.png
rename to gadgets/audio/images/inset_round_shadow.png
diff --git a/GADGETS/audio/images/led_dot_white.png 
b/gadgets/audio/images/led_dot_white.png
similarity index 100%
rename from GADGETS/audio/images/led_dot_white.png
rename to gadgets/audio/images/led_dot_white.png
diff --git a/GADGETS/audio/images/speaker.png b/gadgets/audio/images/speaker.png
similarity index 100%
rename from GADGETS/audio/images/speaker.png
rename to gadgets/audio/images/speaker.png
diff --git a/gadgets/audio/meson.build b/gadgets/audio/meson.build
new file mode 100644
index 0000000..ee95860
--- /dev/null
+++ b/gadgets/audio/meson.build
@@ -0,0 +1,30 @@
+
+gadget_name = 'audio'
+
+
+install_dir = join_paths(gadgets_install_dir, gadget_name)
+
+
+# build gadget_name.edj
+custom_target(gadget_name + '.edj',
+              input      : gadget_name + '.edc',
+              output     : gadget_name + '.edj',
+              command    : [edje_cc,
+                            '-id', meson.current_source_dir() / 'images',
+                            '-fd', meson.current_source_dir() / 'fonts',
+                            '@INPUT@', '@OUTPUT@'],
+              install_dir: install_dir,
+              install    : true
+             )
+
+# TODO: bytecompile gadget __init__.py
+# py3_bytecompile = [py3, '-c', 'from py_compile import compile; 
compile("@INPUT@", "@OUTPUT@")']
+#custom_target('__init__.pyc',
+#              input      : '__init__.py',
+#              output     : '__init__.pyc',
+#              command    : py3_bytecompile,
+#              install_dir: gadget_install_dir,
+#              install    : true
+#             )
+
+install_data('__init__.py', install_dir: install_dir)
diff --git a/GADGETS/calculator/__init__.py b/gadgets/calculator/__init__.py
similarity index 100%
rename from GADGETS/calculator/__init__.py
rename to gadgets/calculator/__init__.py
diff --git a/GADGETS/calculator/calculator.edc 
b/gadgets/calculator/calculator.edc
similarity index 100%
rename from GADGETS/calculator/calculator.edc
rename to gadgets/calculator/calculator.edc
diff --git a/GADGETS/calculator/fonts/Vera.ttf 
b/gadgets/calculator/fonts/Vera.ttf
similarity index 100%
rename from GADGETS/calculator/fonts/Vera.ttf
rename to gadgets/calculator/fonts/Vera.ttf
diff --git a/GADGETS/calculator/images/0.png b/gadgets/calculator/images/0.png
similarity index 100%
rename from GADGETS/calculator/images/0.png
rename to gadgets/calculator/images/0.png
diff --git a/GADGETS/calculator/images/1.png b/gadgets/calculator/images/1.png
similarity index 100%
rename from GADGETS/calculator/images/1.png
rename to gadgets/calculator/images/1.png
diff --git a/GADGETS/calculator/images/2.png b/gadgets/calculator/images/2.png
similarity index 100%
rename from GADGETS/calculator/images/2.png
rename to gadgets/calculator/images/2.png
diff --git a/GADGETS/calculator/images/3.png b/gadgets/calculator/images/3.png
similarity index 100%
rename from GADGETS/calculator/images/3.png
rename to gadgets/calculator/images/3.png
diff --git a/GADGETS/calculator/images/4.png b/gadgets/calculator/images/4.png
similarity index 100%
rename from GADGETS/calculator/images/4.png
rename to gadgets/calculator/images/4.png
diff --git a/GADGETS/calculator/images/5.png b/gadgets/calculator/images/5.png
similarity index 100%
rename from GADGETS/calculator/images/5.png
rename to gadgets/calculator/images/5.png
diff --git a/GADGETS/calculator/images/6.png b/gadgets/calculator/images/6.png
similarity index 100%
rename from GADGETS/calculator/images/6.png
rename to gadgets/calculator/images/6.png
diff --git a/GADGETS/calculator/images/7.png b/gadgets/calculator/images/7.png
similarity index 100%
rename from GADGETS/calculator/images/7.png
rename to gadgets/calculator/images/7.png
diff --git a/GADGETS/calculator/images/8.png b/gadgets/calculator/images/8.png
similarity index 100%
rename from GADGETS/calculator/images/8.png
rename to gadgets/calculator/images/8.png
diff --git a/GADGETS/calculator/images/9.png b/gadgets/calculator/images/9.png
similarity index 100%
rename from GADGETS/calculator/images/9.png
rename to gadgets/calculator/images/9.png
diff --git a/GADGETS/calculator/images/bg.png b/gadgets/calculator/images/bg.png
similarity index 100%
rename from GADGETS/calculator/images/bg.png
rename to gadgets/calculator/images/bg.png
diff --git a/GADGETS/calculator/images/canc.png 
b/gadgets/calculator/images/canc.png
similarity index 100%
rename from GADGETS/calculator/images/canc.png
rename to gadgets/calculator/images/canc.png
diff --git a/GADGETS/calculator/images/divide.png 
b/gadgets/calculator/images/divide.png
similarity index 100%
rename from GADGETS/calculator/images/divide.png
rename to gadgets/calculator/images/divide.png
diff --git a/GADGETS/calculator/images/m-c.png 
b/gadgets/calculator/images/m-c.png
similarity index 100%
rename from GADGETS/calculator/images/m-c.png
rename to gadgets/calculator/images/m-c.png
diff --git a/GADGETS/calculator/images/m-minus.png 
b/gadgets/calculator/images/m-minus.png
similarity index 100%
rename from GADGETS/calculator/images/m-minus.png
rename to gadgets/calculator/images/m-minus.png
diff --git a/GADGETS/calculator/images/m-plus.png 
b/gadgets/calculator/images/m-plus.png
similarity index 100%
rename from GADGETS/calculator/images/m-plus.png
rename to gadgets/calculator/images/m-plus.png
diff --git a/GADGETS/calculator/images/m-r.png 
b/gadgets/calculator/images/m-r.png
similarity index 100%
rename from GADGETS/calculator/images/m-r.png
rename to gadgets/calculator/images/m-r.png
diff --git a/GADGETS/calculator/images/minus.png 
b/gadgets/calculator/images/minus.png
similarity index 100%
rename from GADGETS/calculator/images/minus.png
rename to gadgets/calculator/images/minus.png
diff --git a/GADGETS/calculator/images/multiply.png 
b/gadgets/calculator/images/multiply.png
similarity index 100%
rename from GADGETS/calculator/images/multiply.png
rename to gadgets/calculator/images/multiply.png
diff --git a/GADGETS/calculator/images/plus.png 
b/gadgets/calculator/images/plus.png
similarity index 100%
rename from GADGETS/calculator/images/plus.png
rename to gadgets/calculator/images/plus.png
diff --git a/GADGETS/calculator/images/point.png 
b/gadgets/calculator/images/point.png
similarity index 100%
rename from GADGETS/calculator/images/point.png
rename to gadgets/calculator/images/point.png
diff --git a/GADGETS/calculator/images/result.png 
b/gadgets/calculator/images/result.png
similarity index 100%
rename from GADGETS/calculator/images/result.png
rename to gadgets/calculator/images/result.png
diff --git a/gadgets/calculator/meson.build b/gadgets/calculator/meson.build
new file mode 100644
index 0000000..5369a26
--- /dev/null
+++ b/gadgets/calculator/meson.build
@@ -0,0 +1,21 @@
+
+gadget_name = 'calculator'
+
+
+install_dir = join_paths(gadgets_install_dir, gadget_name)
+
+
+# build gadget_name.edj
+custom_target(gadget_name + '.edj',
+              input      : gadget_name + '.edc',
+              output     : gadget_name + '.edj',
+              command    : [edje_cc,
+                            '-id', meson.current_source_dir() / 'images',
+                            '-fd', meson.current_source_dir() / 'fonts',
+                            '@INPUT@', '@OUTPUT@'],
+              install_dir: install_dir,
+              install    : true
+             )
+
+# TODO: bytecompile gadget __init__.py
+install_data('__init__.py', install_dir: install_dir)
diff --git a/GADGETS/cpu/__init__.py b/gadgets/cpu/__init__.py
similarity index 100%
rename from GADGETS/cpu/__init__.py
rename to gadgets/cpu/__init__.py
diff --git a/GADGETS/cpu/cpu.edc b/gadgets/cpu/cpu.edc
similarity index 100%
rename from GADGETS/cpu/cpu.edc
rename to gadgets/cpu/cpu.edc
diff --git a/GADGETS/cpu/images/bar_bg.png b/gadgets/cpu/images/bar_bg.png
similarity index 100%
rename from GADGETS/cpu/images/bar_bg.png
rename to gadgets/cpu/images/bar_bg.png
diff --git a/GADGETS/cpu/images/cpu.png b/gadgets/cpu/images/cpu.png
similarity index 100%
rename from GADGETS/cpu/images/cpu.png
rename to gadgets/cpu/images/cpu.png
diff --git a/GADGETS/cpu/images/green_on.png b/gadgets/cpu/images/green_on.png
similarity index 100%
rename from GADGETS/cpu/images/green_on.png
rename to gadgets/cpu/images/green_on.png
diff --git a/GADGETS/cpu/images/mockup.xcf b/gadgets/cpu/images/mockup.xcf
similarity index 100%
rename from GADGETS/cpu/images/mockup.xcf
rename to gadgets/cpu/images/mockup.xcf
diff --git a/GADGETS/cpu/images/red_on.png b/gadgets/cpu/images/red_on.png
similarity index 100%
rename from GADGETS/cpu/images/red_on.png
rename to gadgets/cpu/images/red_on.png
diff --git a/GADGETS/cpu/images/yellow_on.png b/gadgets/cpu/images/yellow_on.png
similarity index 100%
rename from GADGETS/cpu/images/yellow_on.png
rename to gadgets/cpu/images/yellow_on.png
diff --git a/gadgets/cpu/meson.build b/gadgets/cpu/meson.build
new file mode 100644
index 0000000..4fb0b2a
--- /dev/null
+++ b/gadgets/cpu/meson.build
@@ -0,0 +1,21 @@
+
+gadget_name = 'cpu'
+
+
+install_dir = join_paths(gadgets_install_dir, gadget_name)
+
+
+# build gadget_name.edj
+custom_target(gadget_name + '.edj',
+              input      : gadget_name + '.edc',
+              output     : gadget_name + '.edj',
+              command    : [edje_cc,
+                            '-id', meson.current_source_dir() / 'images',
+                            '-fd', meson.current_source_dir() / 'fonts',
+                            '@INPUT@', '@OUTPUT@'],
+              install_dir: install_dir,
+              install    : true
+             )
+
+# TODO: bytecompile gadget __init__.py
+install_data('__init__.py', install_dir: install_dir)
diff --git a/GADGETS/dropbox/__init__.py b/gadgets/dropbox/__init__.py
similarity index 100%
rename from GADGETS/dropbox/__init__.py
rename to gadgets/dropbox/__init__.py
diff --git a/GADGETS/dropbox/docs/dropboxd-protocol 
b/gadgets/dropbox/docs/dropboxd-protocol
similarity index 100%
rename from GADGETS/dropbox/docs/dropboxd-protocol
rename to gadgets/dropbox/docs/dropboxd-protocol
diff --git a/GADGETS/dropbox/dropbox.edc b/gadgets/dropbox/dropbox.edc
similarity index 100%
rename from GADGETS/dropbox/dropbox.edc
rename to gadgets/dropbox/dropbox.edc
diff --git a/GADGETS/dropbox/images/dropbox.png 
b/gadgets/dropbox/images/dropbox.png
similarity index 100%
rename from GADGETS/dropbox/images/dropbox.png
rename to gadgets/dropbox/images/dropbox.png
diff --git a/GADGETS/dropbox/images/dropbox_gray.png 
b/gadgets/dropbox/images/dropbox_gray.png
similarity index 100%
rename from GADGETS/dropbox/images/dropbox_gray.png
rename to gadgets/dropbox/images/dropbox_gray.png
diff --git a/GADGETS/dropbox/images/emblem-syncing.png 
b/gadgets/dropbox/images/emblem-syncing.png
similarity index 100%
rename from GADGETS/dropbox/images/emblem-syncing.png
rename to gadgets/dropbox/images/emblem-syncing.png
diff --git a/GADGETS/dropbox/images/emblem-unsyncable.png 
b/gadgets/dropbox/images/emblem-unsyncable.png
similarity index 100%
rename from GADGETS/dropbox/images/emblem-unsyncable.png
rename to gadgets/dropbox/images/emblem-unsyncable.png
diff --git a/GADGETS/dropbox/images/emblem-uptodate.png 
b/gadgets/dropbox/images/emblem-uptodate.png
similarity index 100%
rename from GADGETS/dropbox/images/emblem-uptodate.png
rename to gadgets/dropbox/images/emblem-uptodate.png
diff --git a/gadgets/dropbox/meson.build b/gadgets/dropbox/meson.build
new file mode 100644
index 0000000..d8087e3
--- /dev/null
+++ b/gadgets/dropbox/meson.build
@@ -0,0 +1,21 @@
+
+gadget_name = 'dropbox'
+
+
+install_dir = join_paths(gadgets_install_dir, gadget_name)
+
+
+# build gadget_name.edj
+custom_target(gadget_name + '.edj',
+              input      : gadget_name + '.edc',
+              output     : gadget_name + '.edj',
+              command    : [edje_cc,
+                            '-id', meson.current_source_dir() / 'images',
+                            '-fd', meson.current_source_dir() / 'fonts',
+                            '@INPUT@', '@OUTPUT@'],
+              install_dir: install_dir,
+              install    : true
+             )
+
+# TODO: bytecompile gadget __init__.py
+install_data('__init__.py', install_dir: install_dir)
diff --git a/GADGETS/led_clock/__init__.py b/gadgets/led_clock/__init__.py
similarity index 100%
rename from GADGETS/led_clock/__init__.py
rename to gadgets/led_clock/__init__.py
diff --git a/GADGETS/led_clock/images/bg.png b/gadgets/led_clock/images/bg.png
similarity index 100%
rename from GADGETS/led_clock/images/bg.png
rename to gadgets/led_clock/images/bg.png
diff --git a/GADGETS/led_clock/images/bg_orig.png 
b/gadgets/led_clock/images/bg_orig.png
similarity index 100%
rename from GADGETS/led_clock/images/bg_orig.png
rename to gadgets/led_clock/images/bg_orig.png
diff --git a/GADGETS/led_clock/images/icon.png 
b/gadgets/led_clock/images/icon.png
similarity index 100%
rename from GADGETS/led_clock/images/icon.png
rename to gadgets/led_clock/images/icon.png
diff --git a/GADGETS/led_clock/images/led_blu.png 
b/gadgets/led_clock/images/led_blu.png
similarity index 100%
rename from GADGETS/led_clock/images/led_blu.png
rename to gadgets/led_clock/images/led_blu.png
diff --git a/GADGETS/led_clock/images/led_green.png 
b/gadgets/led_clock/images/led_green.png
similarity index 100%
rename from GADGETS/led_clock/images/led_green.png
rename to gadgets/led_clock/images/led_green.png
diff --git a/GADGETS/led_clock/images/led_off.png 
b/gadgets/led_clock/images/led_off.png
similarity index 100%
rename from GADGETS/led_clock/images/led_off.png
rename to gadgets/led_clock/images/led_off.png
diff --git a/GADGETS/led_clock/images/led_red.png 
b/gadgets/led_clock/images/led_red.png
similarity index 100%
rename from GADGETS/led_clock/images/led_red.png
rename to gadgets/led_clock/images/led_red.png
diff --git a/GADGETS/led_clock/images/template.png 
b/gadgets/led_clock/images/template.png
similarity index 100%
rename from GADGETS/led_clock/images/template.png
rename to gadgets/led_clock/images/template.png
diff --git a/GADGETS/led_clock/led_clock.edc b/gadgets/led_clock/led_clock.edc
similarity index 100%
rename from GADGETS/led_clock/led_clock.edc
rename to gadgets/led_clock/led_clock.edc
diff --git a/gadgets/led_clock/meson.build b/gadgets/led_clock/meson.build
new file mode 100644
index 0000000..92aa4fb
--- /dev/null
+++ b/gadgets/led_clock/meson.build
@@ -0,0 +1,21 @@
+
+gadget_name = 'led_clock'
+
+
+install_dir = join_paths(gadgets_install_dir, gadget_name)
+
+
+# build gadget_name.edj
+custom_target(gadget_name + '.edj',
+              input      : gadget_name + '.edc',
+              output     : gadget_name + '.edj',
+              command    : [edje_cc,
+                            '-id', meson.current_source_dir() / 'images',
+                            '-fd', meson.current_source_dir() / 'fonts',
+                            '@INPUT@', '@OUTPUT@'],
+              install_dir: install_dir,
+              install    : true
+             )
+
+# TODO: bytecompile gadget __init__.py
+install_data('__init__.py', install_dir: install_dir)
diff --git a/GADGETS/mem/__init__.py b/gadgets/mem/__init__.py
similarity index 100%
rename from GADGETS/mem/__init__.py
rename to gadgets/mem/__init__.py
diff --git a/GADGETS/mem/images/bar_bg.png b/gadgets/mem/images/bar_bg.png
similarity index 100%
rename from GADGETS/mem/images/bar_bg.png
rename to gadgets/mem/images/bar_bg.png
diff --git a/GADGETS/mem/images/blu_on.png b/gadgets/mem/images/blu_on.png
similarity index 100%
rename from GADGETS/mem/images/blu_on.png
rename to gadgets/mem/images/blu_on.png
diff --git a/GADGETS/mem/images/mem.png b/gadgets/mem/images/mem.png
similarity index 100%
rename from GADGETS/mem/images/mem.png
rename to gadgets/mem/images/mem.png
diff --git a/GADGETS/mem/mem.edc b/gadgets/mem/mem.edc
similarity index 100%
rename from GADGETS/mem/mem.edc
rename to gadgets/mem/mem.edc
diff --git a/gadgets/mem/meson.build b/gadgets/mem/meson.build
new file mode 100644
index 0000000..fb876cf
--- /dev/null
+++ b/gadgets/mem/meson.build
@@ -0,0 +1,21 @@
+
+gadget_name = 'mem'
+
+
+install_dir = join_paths(gadgets_install_dir, gadget_name)
+
+
+# build gadget_name.edj
+custom_target(gadget_name + '.edj',
+              input      : gadget_name + '.edc',
+              output     : gadget_name + '.edj',
+              command    : [edje_cc,
+                            '-id', meson.current_source_dir() / 'images',
+                            '-fd', meson.current_source_dir() / 'fonts',
+                            '@INPUT@', '@OUTPUT@'],
+              install_dir: install_dir,
+              install    : true
+             )
+
+# TODO: bytecompile gadget __init__.py
+install_data('__init__.py', install_dir: install_dir)
diff --git a/GADGETS/netspeed/__init__.py b/gadgets/netspeed/__init__.py
similarity index 100%
rename from GADGETS/netspeed/__init__.py
rename to gadgets/netspeed/__init__.py
diff --git a/GADGETS/netspeed/images/base.png b/gadgets/netspeed/images/base.png
similarity index 100%
rename from GADGETS/netspeed/images/base.png
rename to gadgets/netspeed/images/base.png
diff --git a/GADGETS/netspeed/images/over.png b/gadgets/netspeed/images/over.png
similarity index 100%
rename from GADGETS/netspeed/images/over.png
rename to gadgets/netspeed/images/over.png
diff --git a/GADGETS/netspeed/images/rx.png b/gadgets/netspeed/images/rx.png
similarity index 100%
rename from GADGETS/netspeed/images/rx.png
rename to gadgets/netspeed/images/rx.png
diff --git a/GADGETS/netspeed/images/tx.png b/gadgets/netspeed/images/tx.png
similarity index 100%
rename from GADGETS/netspeed/images/tx.png
rename to gadgets/netspeed/images/tx.png
diff --git a/gadgets/netspeed/meson.build b/gadgets/netspeed/meson.build
new file mode 100644
index 0000000..a6483da
--- /dev/null
+++ b/gadgets/netspeed/meson.build
@@ -0,0 +1,21 @@
+
+gadget_name = 'netspeed'
+
+
+install_dir = join_paths(gadgets_install_dir, gadget_name)
+
+
+# build gadget_name.edj
+custom_target(gadget_name + '.edj',
+              input      : gadget_name + '.edc',
+              output     : gadget_name + '.edj',
+              command    : [edje_cc,
+                            '-id', meson.current_source_dir() / 'images',
+                            '-fd', meson.current_source_dir() / 'fonts',
+                            '@INPUT@', '@OUTPUT@'],
+              install_dir: install_dir,
+              install    : true
+             )
+
+# TODO: bytecompile gadget __init__.py
+install_data('__init__.py', install_dir: install_dir)
diff --git a/GADGETS/netspeed/netspeed.edc b/gadgets/netspeed/netspeed.edc
similarity index 100%
rename from GADGETS/netspeed/netspeed.edc
rename to gadgets/netspeed/netspeed.edc
diff --git a/m4/ac_attribute.m4 b/m4/ac_attribute.m4
deleted file mode 100644
index 46c1a42..0000000
--- a/m4/ac_attribute.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-
-AC_DEFUN([AC_C___ATTRIBUTE__],
-[
-  AC_MSG_CHECKING(for __attribute__)
-  AC_CACHE_VAL(ac_cv___attribute__, [
-  AC_TRY_COMPILE([#include <stdlib.h>],
-  [int func(int x); int foo(int x __attribute__ ((unused))) { exit(1); }],
-  ac_cv___attribute__=yes, ac_cv___attribute__=no)])
-  if test "$ac_cv___attribute__" = "yes"; then
-    AC_DEFINE(HAVE___ATTRIBUTE__, 1, [Define to 1 if your compiler has 
__attribute__])
-  fi
-  AC_MSG_RESULT($ac_cv___attribute__)
-])
-
diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4
deleted file mode 100644
index 59a2ff0..0000000
--- a/m4/ax_python_devel.m4
+++ /dev/null
@@ -1,324 +0,0 @@
-# ===========================================================================
-#      http://www.gnu.org/software/autoconf-archive/ax_python_devel.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AX_PYTHON_DEVEL([version])
-#
-# DESCRIPTION
-#
-#   Note: Defines as a precious variable "PYTHON_VERSION". Don't override it
-#   in your configure.ac.
-#
-#   This macro checks for Python and tries to get the include path to
-#   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
-#   output variables. It also exports $(PYTHON_EXTRA_LIBS) and
-#   $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
-#
-#   You can search for some particular version of Python by passing a
-#   parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
-#   note that you *have* to pass also an operator along with the version to
-#   match, and pay special attention to the single quotes surrounding the
-#   version number. Don't use "PYTHON_VERSION" for this: that environment
-#   variable is declared as precious and thus reserved for the end-user.
-#
-#   This macro should work for all versions of Python >= 2.1.0. As an end
-#   user, you can disable the check for the python version by setting the
-#   PYTHON_NOVERSIONCHECK environment variable to something else than the
-#   empty string.
-#
-#   If you need to use this macro for an older Python version, please
-#   contact the authors. We're always open for feedback.
-#
-# LICENSE
-#
-#   Copyright (c) 2009 Sebastian Huber <sebastian-hu...@web.de>
-#   Copyright (c) 2009 Alan W. Irwin
-#   Copyright (c) 2009 Rafael Laboissiere <raf...@laboissiere.net>
-#   Copyright (c) 2009 Andrew Collier
-#   Copyright (c) 2009 Matteo Settenvini <mat...@member.fsf.org>
-#   Copyright (c) 2009 Horst Knorr <hk_clas...@knoda.org>
-#   Copyright (c) 2013 Daniel Mullner <muell...@math.stanford.edu>
-#
-#   This program is free software: you can redistribute it and/or modify it
-#   under the terms of the GNU General Public License as published by the
-#   Free Software Foundation, either version 3 of the License, or (at your
-#   option) any later version.
-#
-#   This program is distributed in the hope that it will be useful, but
-#   WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-#   Public License for more details.
-#
-#   You should have received a copy of the GNU General Public License along
-#   with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-#   As a special exception, the respective Autoconf Macro's copyright owner
-#   gives unlimited permission to copy, distribute and modify the configure
-#   scripts that are the output of Autoconf when processing the Macro. You
-#   need not follow the terms of the GNU General Public License when using
-#   or distributing such scripts, even though portions of the text of the
-#   Macro appear in them. The GNU General Public License (GPL) does govern
-#   all other use of the material that constitutes the Autoconf Macro.
-#
-#   This special exception to the GPL applies to versions of the Autoconf
-#   Macro released by the Autoconf Archive. When you make and distribute a
-#   modified version of the Autoconf Macro, you may extend this special
-#   exception to the GPL to apply to your modified version as well.
-
-#serial 17
-
-AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
-AC_DEFUN([AX_PYTHON_DEVEL],[
-       #
-       # Allow the use of a (user set) custom python version
-       #
-       AC_ARG_VAR([PYTHON_VERSION],[The installed Python
-               version to use, for example '2.3'. This string
-               will be appended to the Python interpreter
-               canonical name.])
-
-       AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
-       if test -z "$PYTHON"; then
-          AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
-          PYTHON_VERSION=""
-       fi
-
-       #
-       # Check for a version of Python >= 2.1.0
-       #
-       AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
-       ac_supports_python_ver=`$PYTHON -c "import sys; \
-               ver = sys.version.split ()[[0]]; \
-               print (ver >= '2.1.0')"`
-       if test "$ac_supports_python_ver" != "True"; then
-               if test -z "$PYTHON_NOVERSIONCHECK"; then
-                       AC_MSG_RESULT([no])
-                       AC_MSG_FAILURE([
-This version of the AC@&t@_PYTHON_DEVEL macro
-doesn't work properly with versions of Python before
-2.1.0. You may need to re-run configure, setting the
-variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
-PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
-Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
-to something else than an empty string.
-])
-               else
-                       AC_MSG_RESULT([skip at user request])
-               fi
-       else
-               AC_MSG_RESULT([yes])
-       fi
-
-       #
-       # if the macro parameter ``version'' is set, honour it
-       #
-       if test -n "$1"; then
-               AC_MSG_CHECKING([for a version of Python $1])
-               ac_supports_python_ver=`$PYTHON -c "import sys; \
-                       ver = sys.version.split ()[[0]]; \
-                       print (ver $1)"`
-               if test "$ac_supports_python_ver" = "True"; then
-                  AC_MSG_RESULT([yes])
-               else
-                       AC_MSG_RESULT([no])
-                       AC_MSG_ERROR([this package requires Python $1.
-If you have it installed, but it isn't the default Python
-interpreter in your system path, please pass the PYTHON_VERSION
-variable to configure. See ``configure --help'' for reference.
-])
-                       PYTHON_VERSION=""
-               fi
-       fi
-
-       #
-       # Check if you have distutils, else fail
-       #
-       AC_MSG_CHECKING([for the distutils Python package])
-       ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
-       if test -z "$ac_distutils_result"; then
-               AC_MSG_RESULT([yes])
-       else
-               AC_MSG_RESULT([no])
-               AC_MSG_ERROR([cannot import Python module "distutils".
-Please check your Python installation. The error was:
-$ac_distutils_result])
-               PYTHON_VERSION=""
-       fi
-
-       #
-       # Check for Python include path
-       #
-       AC_MSG_CHECKING([for Python include path])
-       if test -z "$PYTHON_CPPFLAGS"; then
-               python_path=`$PYTHON -c "import distutils.sysconfig; \
-                       print (distutils.sysconfig.get_python_inc ());"`
-               plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
-                       print (distutils.sysconfig.get_python_inc 
(plat_specific=1));"`
-               if test -n "${python_path}"; then
-                       if test "${plat_python_path}" != "${python_path}"; then
-                               python_path="-I$python_path -I$plat_python_path"
-                       else
-                               python_path="-I$python_path"
-                       fi
-               fi
-               PYTHON_CPPFLAGS=$python_path
-       fi
-       AC_MSG_RESULT([$PYTHON_CPPFLAGS])
-       AC_SUBST([PYTHON_CPPFLAGS])
-
-       #
-       # Check for Python library path
-       #
-       AC_MSG_CHECKING([for Python library path])
-       if test -z "$PYTHON_LDFLAGS"; then
-               # (makes two attempts to ensure we've got a version number
-               # from the interpreter)
-               ac_python_version=`cat<<EOD | $PYTHON -
-
-# join all versioning strings, on some systems
-# major/minor numbers could be in different list elements
-from distutils.sysconfig import *
-e = get_config_var('VERSION')
-if e is not None:
-       print(e)
-EOD`
-
-               if test -z "$ac_python_version"; then
-                       if test -n "$PYTHON_VERSION"; then
-                               ac_python_version=$PYTHON_VERSION
-                       else
-                               ac_python_version=`$PYTHON -c "import sys; \
-                                       print (sys.version[[:3]])"`
-                       fi
-               fi
-
-               # Make the versioning information available to the compiler
-               AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"],
-                                   [If available, contains the Python version 
number currently in use.])
-
-               # First, the library directory:
-               ac_python_libdir=`cat<<EOD | $PYTHON -
-
-# There should be only one
-import distutils.sysconfig
-e = distutils.sysconfig.get_config_var('LIBDIR')
-if e is not None:
-       print (e)
-EOD`
-
-               # Now, for the library:
-               ac_python_library=`cat<<EOD | $PYTHON -
-
-import distutils.sysconfig
-c = distutils.sysconfig.get_config_vars()
-if 'LDVERSION' in c:
-       print ('python'+c[['LDVERSION']])
-else:
-       print ('python'+c[['VERSION']])
-EOD`
-
-               # This small piece shamelessly adapted from PostgreSQL python 
macro;
-               # credits goes to momjian, I think. I'd like to put the right 
name
-               # in the credits, if someone can point me in the right 
direction... ?
-               #
-               if test -n "$ac_python_libdir" -a -n "$ac_python_library"
-               then
-                       # use the official shared library
-                       ac_python_library=`echo "$ac_python_library" | sed 
"s/^lib//"`
-                       PYTHON_LDFLAGS="-L$ac_python_libdir 
-l$ac_python_library"
-               else
-                       # old way: use libpython from python_configdir
-                       ac_python_libdir=`$PYTHON -c \
-                         "from distutils.sysconfig import get_python_lib as f; 
\
-                         import os; \
-                         print (os.path.join(f(plat_specific=1, 
standard_lib=1), 'config'));"`
-                       PYTHON_LDFLAGS="-L$ac_python_libdir 
-lpython$ac_python_version"
-               fi
-
-               if test -z "PYTHON_LDFLAGS"; then
-                       AC_MSG_ERROR([
-  Cannot determine location of your Python DSO. Please check it was installed 
with
-  dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
-                       ])
-               fi
-       fi
-       AC_MSG_RESULT([$PYTHON_LDFLAGS])
-       AC_SUBST([PYTHON_LDFLAGS])
-
-       #
-       # Check for site packages
-       #
-       AC_MSG_CHECKING([for Python site-packages path])
-       if test -z "$PYTHON_SITE_PKG"; then
-               PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
-                       print (distutils.sysconfig.get_python_lib(0,0));"`
-       fi
-       AC_MSG_RESULT([$PYTHON_SITE_PKG])
-       AC_SUBST([PYTHON_SITE_PKG])
-
-       #
-       # libraries which must be linked in when embedding
-       #
-       AC_MSG_CHECKING(python extra libraries)
-       if test -z "$PYTHON_EXTRA_LIBS"; then
-          PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
-                conf = distutils.sysconfig.get_config_var; \
-                print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
-       fi
-       AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
-       AC_SUBST(PYTHON_EXTRA_LIBS)
-
-       #
-       # linking flags needed when embedding
-       #
-       AC_MSG_CHECKING(python extra linking flags)
-       if test -z "$PYTHON_EXTRA_LDFLAGS"; then
-               PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
-                       conf = distutils.sysconfig.get_config_var; \
-                       print (conf('LINKFORSHARED'))"`
-       fi
-       AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
-       AC_SUBST(PYTHON_EXTRA_LDFLAGS)
-
-       #
-       # final check to see if everything compiles alright
-       #
-       AC_MSG_CHECKING([consistency of all components of python development 
environment])
-       # save current global flags
-       ac_save_LIBS="$LIBS"
-       ac_save_CPPFLAGS="$CPPFLAGS"
-       LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS 
$PYTHON_EXTRA_LIBS"
-       CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
-       AC_LANG_PUSH([C])
-       AC_LINK_IFELSE([
-               AC_LANG_PROGRAM([[#include <Python.h>]],
-                               [[Py_Initialize();]])
-               ],[pythonexists=yes],[pythonexists=no])
-       AC_LANG_POP([C])
-       # turn back to default flags
-       CPPFLAGS="$ac_save_CPPFLAGS"
-       LIBS="$ac_save_LIBS"
-
-       AC_MSG_RESULT([$pythonexists])
-
-        if test ! "x$pythonexists" = "xyes"; then
-          AC_MSG_FAILURE([
-  Could not link test program to Python. Maybe the main Python library has been
-  installed in some non-standard library path. If so, pass it to configure,
-  via the LDFLAGS environment variable.
-  Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
-  ============================================================================
-   ERROR!
-   You probably have to install the development version of the Python package
-   for your distribution.  The exact name of this package varies among them.
-  ============================================================================
-          ])
-         PYTHON_VERSION=""
-       fi
-
-       #
-       # all done!
-       #
-])
diff --git a/m4/ax_python_module.m4 b/m4/ax_python_module.m4
deleted file mode 100644
index 559b569..0000000
--- a/m4/ax_python_module.m4
+++ /dev/null
@@ -1,50 +0,0 @@
-# ===========================================================================
-#     http://www.gnu.org/software/autoconf-archive/ax_python_module.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AX_PYTHON3_MODULE(modname[, fatal])
-#
-# DESCRIPTION
-#
-#   Checks for Python3 module.
-#
-#   If fatal is non-empty then absence of a module will trigger an error.
-#
-# LICENSE
-#
-#   Copyright (c) 2008 Andrew Collier
-#
-#   Copying and distribution of this file, with or without modification, are
-#   permitted in any medium without royalty provided the copyright notice
-#   and this notice are preserved. This file is offered as-is, without any
-#   warranty.
-
-#serial 6
-
-AU_ALIAS([AC_PYTHON3_MODULE], [AX_PYTHON3_MODULE])
-AC_DEFUN([AX_PYTHON3_MODULE],[
-    # if test -z $PYTHON;
-    # then
-        # PYTHON="python"
-    # fi
-    PYTHON="python3"
-    PYTHON_NAME=`basename $PYTHON`
-    AC_MSG_CHECKING($PYTHON_NAME module: $1)
-       $PYTHON -c "import $1" 2>/dev/null
-       if test $? -eq 0;
-       then
-               AC_MSG_RESULT(yes)
-               eval AS_TR_CPP(HAVE_PYMOD_$1)=yes
-       else
-               AC_MSG_RESULT(no)
-               eval AS_TR_CPP(HAVE_PYMOD_$1)=no
-               #
-               if test -n "$2"
-               then
-                       AC_MSG_ERROR(failed to find required python3 module $1)
-                       exit 1
-               fi
-       fi
-])
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..3e361a3
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,72 @@
+
+#### Project ####
+project('edgar', 'c',
+        version: '0.4.0',
+        license: 'GPL v3',
+        meson_version: '>= 0.53.0')
+
+# NOTE: meson 51 needed for the 'modules' param of pymod.find_installation()
+# NOTE: meson 53 needed for the 'embed' param of py3.dependency()
+
+
+#### Enlightenemnt ####
+dep_e = dependency('enlightenment', version: '>= 0.23.99')
+e_modules_dir = dep_e.get_pkgconfig_variable('modules')
+e_lib_dir = dep_e.get_pkgconfig_variable('libdir')
+e_release = dep_e.get_pkgconfig_variable('release')
+e_module_arch = dep_e.get_pkgconfig_variable('module_arch')
+
+
+#### Python3 ####
+py3 = import('python').find_installation('python3', modules: ['efl', 'dbus'])
+dep_py3 = py3.dependency(embed: true)
+
+
+#### Install dirs ####
+mod_install_dir = join_paths(e_modules_dir, meson.project_name())
+lib_install_dir = join_paths(mod_install_dir, e_module_arch)
+gadgets_install_dir = join_paths(e_lib_dir, 'enlightenment', 'edgar_gadgets')
+
+
+#### Config.h ####
+config_h = configuration_data()
+config_h.set_quoted('PACKAGE', meson.project_name())
+config_dir = include_directories('.')
+
+
+#### Edje cc ####
+edje_cc = find_program('edje_cc')
+
+
+#### Edgar sources ####
+subdir('src')
+
+
+#### Gadgets ####
+subdir('gadgets/audio')
+subdir('gadgets/calculator')
+subdir('gadgets/cpu')
+subdir('gadgets/dropbox')
+subdir('gadgets/led_clock')
+subdir('gadgets/mem')
+subdir('gadgets/netspeed')
+
+
+#### Write config.h ####
+configure_file(output: 'edgar_config.h', configuration: config_h)
+
+
+#### Data files ####
+install_data('python/e.py', install_dir: gadgets_install_dir)
+install_data('module.desktop', install_dir: mod_install_dir)
+
+cmd = [edje_cc,
+       '-id', meson.source_root(),
+       '@INPUT@', '@OUTPUT@']
+custom_target('e-module-edgar.edj',
+              input      : 'e-module-edgar.edc',
+              output     : 'e-module-edgar.edj',
+              command    : cmd,
+              install_dir: mod_install_dir,
+              install    : true
+             )
diff --git a/module.desktop.in b/module.desktop
similarity index 100%
rename from module.desktop.in
rename to module.desktop
diff --git a/python/Makefile.am b/python/Makefile.am
deleted file mode 100644
index 9087c14..0000000
--- a/python/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-MAINTAINERCLEANFILES = Makefile.in
-
-edgarpy_base    = e.py
-edgarpydir      = $(shell pkg-config --variable=libdir 
enlightenment)/enlightenment/gadgets
-edgarpy_DATA    = $(edgarpy_base)
-EXTRA_DIST      = $(edgarpy_base)
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index 1dc0fd7..0000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-MAINTAINERCLEANFILES = Makefile.in
-
-INCLUDES = -I. -Wall \
-           -I$(top_srcdir) \
-           -I$(includedir) \
-           @EO_CFLAGS@ @E_CFLAGS@ @PYTHON_CPPFLAGS@
-
-pkgdir = $(datadir)/$(MODULE_ARCH)
-pkg_LTLIBRARIES = module.la
-module_la_SOURCES = e_mod_main.h \
-                    e_mod_main.c \
-                    e_mod_edgar.c \
-                    e_mod_edgar.h
-
-module_la_CPPFLAGS = -DEFL_BETA_API_SUPPORT -DEFL_EO_API_SUPPORT
-module_la_LIBADD = @EO_LIBS@ @E_LIBS@ @PYTHON_LDFLAGS@ \
-                   @PYTHON_EXTRA_LIBS@ @PYTHON_EXTRA_LDFLAGS@
-module_la_LDFLAGS = -module -avoid-version
-module_la_DEPENDENCIES = $(top_builddir)/config.h
-
-clean-local:
-       rm -rf *~
diff --git a/src/OLD_e_mod_config.c b/src/OLD_e_mod_config.c
deleted file mode 100644
index 220630a..0000000
--- a/src/OLD_e_mod_config.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/*  Copyright (C) 2008-2014 Davide Andreoli (see AUTHORS)
- *
- *  This file is part of edgar.
- *  edgar is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  edgar is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with edgar.  If not, see <http://www.gnu.org/licenses/>.
- */
- 
-#include <e.h>
-#include "e_mod_main.h"
-
-struct _E_Config_Dialog_Data 
-{
-   Eina_List *key_list;
-   Evas_Object *ilist;
-   Evas_Object *allow_btn, *deny_btn, *ask_btn;
-};
-
-/* Local Function Prototypes */
-static void *_create_data(E_Config_Dialog *cfd);
-static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
-static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
-static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
-extern Config *edgar_conf;
-
-
-/* External Functions */
-#ifdef HAVE_E19
-EAPI E_Config_Dialog *
-e_int_config_edgar_module(E_Comp *con, const char *params)
-#else
-EAPI E_Config_Dialog *
-e_int_config_edgar_module(E_Container *con, const char *params)
-#endif
-{
-   E_Config_Dialog_View *v = NULL;
-   char buf[PATH_MAX];
-
-   /* is this config dialog already visible ? */
-   if (edgar_conf->cfd)
-     {
-        e_win_raise(edgar_conf->cfd->dia->win);
-#ifndef HAVE_E19
-        e_border_focus_set(edgar_conf->cfd->dia->win->border, 1, 1);
-#endif
-        return NULL;
-     }
-
-   v = E_NEW(E_Config_Dialog_View, 1);
-   if (!v) return NULL;
-
-   v->create_cfdata = _create_data;
-   v->free_cfdata = _free_data;
-   v->basic.create_widgets = _basic_create;
-   v->basic.apply_cfdata = _basic_apply;
-
-   /* Icon in the theme */
-   //snprintf(buf, sizeof(buf), "%s/e-module-edgar.edj", 
edgar_conf->module->dir);
-
-   /* create new config dialog */
-   snprintf(buf, sizeof(buf), "%s/e-module-edgar.edj", 
edgar_conf->module->dir);
-   edgar_conf->cfd = e_config_dialog_new(con, "Edgar Gadgets Loader",  // TODO 
i18n
-                                         "E", "extensions/edgar",
-                                         buf, 0, v, NULL);
-
-   e_dialog_resizable_set(edgar_conf->cfd->dia, 1);
-
-   return edgar_conf->cfd;
-}
-
-/* Local Functions */
-static int
-_cmp_func(const void *a, const void *b)
-{
-   const char *_a = a;
-   const char *_b = b;
-   if (_a[0] == ':' && _a[1] == ':') _a = _a + 2;
-   if (_b[0] == ':' && _b[1] == ':') _b = _b + 2;
-   return strcmp(_a, _b);
-}
-
-static void *
-_create_data(E_Config_Dialog *cfd) 
-{
-   E_Config_Dialog_Data *cfdata;
-   Eina_Iterator *it;
-   const char *key;
-
-   cfdata = E_NEW(E_Config_Dialog_Data, 1);
-   if (!cfdata) return NULL;
-
-   // build a sorted list (with headers on top) of all the hash keys
-   it = eina_hash_iterator_key_new(edgar_conf->conf_guardian_hash);
-   while (eina_iterator_next(it, (void *)&key))
-     cfdata->key_list = eina_list_sorted_insert(cfdata->key_list, _cmp_func,
-                                                eina_stringshare_add(key));
-   eina_iterator_free(it);
-
-   return cfdata;
-}
-
-static void 
-_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) 
-{
-   const char *key;
-
-   edgar_conf->cfd = NULL;
-   EINA_LIST_FREE(cfdata->key_list, key)
-     eina_stringshare_del(key);
-   E_FREE(cfdata);
-}
-
-static void
-_list_selected_cb(void *data)
-{
-   E_Config_Dialog_Data *cfdata = data;
-   Guardian_Item *allow;
-   const char *key;
-
-   key = e_widget_ilist_selected_value_get(cfdata->ilist);
-   allow = eina_hash_find(edgar_conf->conf_guardian_hash, key);
-
-   if (!allow || allow->allow == EDGAR_GUARDIAN_ASK)
-     {
-        e_widget_disabled_set(cfdata->allow_btn, 0);
-        e_widget_disabled_set(cfdata->deny_btn, 0);
-        e_widget_disabled_set(cfdata->ask_btn, 1);
-        return;
-     }
-
-   e_widget_disabled_set(cfdata->ask_btn, 0);
-   e_widget_disabled_set(cfdata->allow_btn,
-         (allow->allow == EDGAR_GUARDIAN_ALLOW) ||
-         (allow->allow == EDGAR_GUARDIAN_ALLOW_ALL) ? 1 : 0);
-   e_widget_disabled_set(cfdata->deny_btn,
-         (allow->allow == EDGAR_GUARDIAN_ALLOW) ||
-         (allow->allow == EDGAR_GUARDIAN_ALLOW_ALL) ? 0 : 1);
-}
-
-static void
-_allow_btn_cb(void *data, void *data2)
-{
-   E_Config_Dialog_Data *cfdata = data;
-   Guardian_Item *allow;
-   Evas_Object *end;
-   const char *key;
-
-   key = e_widget_ilist_selected_value_get(cfdata->ilist);
-   allow = eina_hash_find(edgar_conf->conf_guardian_hash, key);
-   allow->allow = ((key[0] == ':') && (key[1] == ':')) ?
-                     EDGAR_GUARDIAN_ALLOW_ALL : EDGAR_GUARDIAN_ALLOW;
-
-   e_widget_disabled_set(cfdata->allow_btn, 1);
-   e_widget_disabled_set(cfdata->deny_btn, 0);
-   e_widget_disabled_set(cfdata->ask_btn, 0);
-
-   end = e_widget_ilist_selected_end_get(cfdata->ilist);
-   edje_object_signal_emit(end, "e,state,checked", "e");
-}
-
-static void
-_deny_btn_cb(void *data, void *data2)
-{
-   E_Config_Dialog_Data *cfdata = data;
-   Guardian_Item *allow;
-   Evas_Object *end;
-   const char *key;
-
-   key = e_widget_ilist_selected_value_get(cfdata->ilist);
-   allow = eina_hash_find(edgar_conf->conf_guardian_hash, key);
-   allow->allow = ((key[0] == ':') && (key[1] == ':')) ?
-                     EDGAR_GUARDIAN_DENY_ALL : EDGAR_GUARDIAN_DENY;
-
-   e_widget_disabled_set(cfdata->allow_btn, 0);
-   e_widget_disabled_set(cfdata->deny_btn, 1);
-   e_widget_disabled_set(cfdata->ask_btn, 0);
-
-   end = e_widget_ilist_selected_end_get(cfdata->ilist);
-   edje_object_signal_emit(end, "e,state,alert", "e");
-}
-
-static void
-_ask_btn_cb(void *data, void *data2)
-{
-   E_Config_Dialog_Data *cfdata = data;
-   Guardian_Item *allow;
-   Evas_Object *end;
-   const char *key;
-
-   key = e_widget_ilist_selected_value_get(cfdata->ilist);
-   allow = eina_hash_find(edgar_conf->conf_guardian_hash, key);
-   allow->allow = EDGAR_GUARDIAN_ASK;
-
-   e_widget_disabled_set(cfdata->allow_btn, 0);
-   e_widget_disabled_set(cfdata->deny_btn, 0);
-   e_widget_disabled_set(cfdata->ask_btn, 1);
-
-   end = e_widget_ilist_selected_end_get(cfdata->ilist);
-   edje_object_signal_emit(end, "e,state,unchecked", "e");
-}
-
-static void
-_basic_populate_list(E_Config_Dialog_Data *cfdata)
-{
-   Evas_Object *icon, *end;
-   Evas *evas;
-   Eina_List *l;
-   Guardian_Item *allow;
-   const char *key;
-   char gadget[1024];
-   char action[4096];
-
-   evas = evas_object_evas_get(cfdata->ilist);
-
-   // populate the ilist with items and headers
-   EINA_LIST_FOREACH(cfdata->key_list, l, key)
-     {
-        DBG("KEY: '%s'", key);
-        if ((key[0] == ':') && (key[1] == ':'))
-          {
-             // extract the gadget name   '::gadget_name::'
-             if (sscanf(key, "::%[^:]::", gadget) != 1) return;
-             DBG("'%s'", gadget);
-
-             // append the header
-             icon = e_icon_add(evas);
-             if (!e_icon_file_edje_set(icon, gadget, "e/gadget/icon"))
-               {
-                  evas_object_del(icon);
-                  icon = NULL;
-               }  
-             e_widget_ilist_header_append(cfdata->ilist, icon, gadget);
-
-             // append the 'trust all' item
-             end = edje_object_add(evas);
-             if (!e_theme_edje_object_set(end, "base/theme/widgets",
-                                            "e/widgets/ilist/toggle_end"))
-               {
-                  evas_object_del(end);
-                  end = NULL;
-               }
-             else
-               {
-                  edje_object_signal_emit(end, "e,state,unchecked", "e");
-                  allow = eina_hash_find(edgar_conf->conf_guardian_hash, key);
-                  if (allow && allow->allow == EDGAR_GUARDIAN_ALLOW_ALL)
-                    edje_object_signal_emit(end, "e,state,checked", "e");
-                  else if (allow && allow->allow == EDGAR_GUARDIAN_DENY_ALL)
-                    edje_object_signal_emit(end, "e,state,alert", "e");
-               }
-             e_widget_ilist_append_full(cfdata->ilist, NULL, end,
-                                        "Trust or Deny ALL from this gadget",
-                                        _list_selected_cb, cfdata, key);
-          }
-        else
-          {
-             // extract the gadget name and the action  'gadget_name::action'
-             // this is not really correct, will truncate action with the char 
':'
-             if (sscanf(key, "%[^:]::%[^:]", gadget, action) != 2) return;
-             DBG("'%s'  '%s'", gadget, action);
-
-             // append the action
-             allow = eina_hash_find(edgar_conf->conf_guardian_hash, key);
-             end = edje_object_add(evas);
-             if (!e_theme_edje_object_set(end, "base/theme/widgets",
-                                     "e/widgets/ilist/toggle_end"))
-               {
-                  evas_object_del(end);
-                  end = NULL;
-               }
-             else
-               {
-                  edje_object_signal_emit(end, "e,state,unchecked", "e");
-                  if (allow && allow->allow == EDGAR_GUARDIAN_ALLOW)
-                    edje_object_signal_emit(end, "e,state,checked", "e");
-                  else if (allow && allow->allow == EDGAR_GUARDIAN_DENY)
-                    edje_object_signal_emit(end, "e,state,alert", "e");
-               }
-             e_widget_ilist_append_full(cfdata->ilist, NULL, end, action,
-                                        _list_selected_cb, cfdata, key);
-          }
-     }
-}
-
-static Evas_Object *
-_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) 
-{
-   Evas_Object *hbox, *frame, *icon;
-
-   frame = e_widget_framelist_add(evas, "The Gadget Guardian", 0);
-
-   // ilist
-   cfdata->ilist = e_widget_ilist_add(evas, 24, 24, NULL);
-   e_widget_size_min_set(cfdata->ilist, 180, 100);
-   e_widget_ilist_go(cfdata->ilist);
-   e_widget_framelist_object_append(frame, cfdata->ilist);
-
-   // button box
-   hbox = e_widget_list_add(evas, 1, 1);
-
-   // allow btn
-   cfdata->allow_btn = e_widget_button_add(evas, "Allow", NULL,
-                                    _allow_btn_cb, cfdata, NULL);
-   e_widget_disabled_set(cfdata->allow_btn, 1);
-   icon = edje_object_add(evas);
-   if (e_theme_edje_object_set(icon, "base/theme/widgets",
-                                "e/widgets/ilist/toggle_end"))
-     {
-        edje_object_signal_emit(icon, "e,state,checked", "e");
-        e_widget_button_icon_set(cfdata->allow_btn, icon);
-     }
-   e_widget_list_object_append(hbox, cfdata->allow_btn, 1, 1, 0.5);
-
-   // deny btn
-   cfdata->deny_btn = e_widget_button_add(evas, "Deny", NULL,
-                                   _deny_btn_cb, cfdata, NULL);
-   e_widget_disabled_set(cfdata->deny_btn, 1);
-   icon = edje_object_add(evas);
-   if (e_theme_edje_object_set(icon, "base/theme/widgets",
-                                "e/widgets/ilist/toggle_end"))
-     {
-        edje_object_signal_emit(icon, "e,state,alert", "e");
-        e_widget_button_icon_set(cfdata->deny_btn, icon);
-     }
-   e_widget_list_object_append(hbox, cfdata->deny_btn, 1, 0, 0.5);
-
-   // ask btn
-   cfdata->ask_btn = e_widget_button_add(evas, "Ask", NULL,
-                                     _ask_btn_cb, cfdata, NULL);
-   e_widget_disabled_set(cfdata->ask_btn, 1);
-   icon = edje_object_add(evas);
-   if (e_theme_edje_object_set(icon, "base/theme/widgets",
-                                "e/widgets/ilist/toggle_end"))
-     {
-        edje_object_signal_emit(icon, "e,state,unchecked", "e");
-        e_widget_button_icon_set(cfdata->ask_btn, icon);
-     }
-   e_widget_list_object_append(hbox, cfdata->ask_btn, 1, 0, 0.5);
-   
-   e_widget_framelist_object_append_full(frame, hbox,
-                                    1, 0, 1, 0, 0.5, 0.5, 25, 25, 999, 999);
-
-   _basic_populate_list(cfdata);
-   return frame;
-}
-
-static int 
-_basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) 
-{
-   e_config_save_queue();
-   return 1;
-}
diff --git a/src/OLD_e_mod_edgar.c b/src/OLD_e_mod_edgar.c
deleted file mode 100644
index ec8c4b7..0000000
--- a/src/OLD_e_mod_edgar.c
+++ /dev/null
@@ -1,869 +0,0 @@
-/*  Copyright (C) 2008-2014 Davide Andreoli (see AUTHORS)
- *
- *  This file is part of edgar.
- *  edgar is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  edgar is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with edgar.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdarg.h>
-#include <e.h>
-#include "config.h"
-#include "e_mod_main.h"
-#include "e_mod_edgar.h"
-#include "e_mod_guardian.h"
-
-
-/* Local Prototypes */
-static unsigned char edgar_load_class(const char *path);
-static unsigned char edgar_unload_class(E_Gadcon_Client_Class *cclass);
-static void _edgar_file_monitor_cb(void *data, Ecore_File_Monitor *em, 
Ecore_File_Event event, const char *path);
-static void _edgar_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void 
*event_info);
-static void _edgar_edje_messagge_cb(void *data, Evas_Object *obj, 
Edje_Message_Type type, int id, void *message);
-static void _edgar_message_send(Instance *inst, int id, const char *args, ...);
-static Eina_Bool _edgar_exec_pipe_data(void *data, int ev_type, void *ev);
-static Eina_Bool _edgar_exec_pipe_exit(void *data, int ev_type, void *ev);
-
-/* Gadcon Prototypes */
-static E_Gadcon_Client *_edgar_gc_init(E_Gadcon *gc, const char *name, const 
char *id, const char *style);
-static void _edgar_gc_shutdown(E_Gadcon_Client *gcc);
-static void _edgar_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
-static const char *_edgar_gc_label(const E_Gadcon_Client_Class *client_class);
-static const char *_edgar_gc_id_new(const E_Gadcon_Client_Class *client_class);
-static void _edgar_gc_id_del(const E_Gadcon_Client_Class *client_class, const 
char *id);
-static Evas_Object *_edgar_gc_icon(const E_Gadcon_Client_Class *client_class, 
Evas *evas);
-
-/* Gadgets API Prototypes */
-static void _edgar_api_dbg      (Instance *inst, int id, 
Edje_Message_String_Set *msg);
-static void _edgar_api_conf_set (Instance *inst, int id, 
Edje_Message_String_Set *msg);
-static void _edgar_api_conf_get (Instance *inst, int id, 
Edje_Message_String_Set *msg);
-static void _edgar_api_id_get   (Instance *inst, int id, 
Edje_Message_String_Set *msg);
-static void _edgar_api_min_set  (Instance *inst, int id, 
Edje_Message_String_Set *msg);
-static void _edgar_api_exec     (Instance *inst, int id, 
Edje_Message_String_Set *msg);
-static void _edgar_api_action   (Instance *inst, int id, 
Edje_Message_String_Set *msg);
-
-/* Local Variables */
-static const char *gadgets_user_dir;
-static const char *gadgets_system_dir;
-
-static Eina_List *classes;
-static Eina_List *instances;
-static Ecore_File_Monitor *mon1, *mon2;
-
-extern Config *edgar_conf;
-extern E_Config_DD *conf_edd;
-extern E_Config_DD *conf_item_edd;
-
-Ecore_Event_Handler *eeh1, *eeh2, *eeh3;
-
-/* Implementation */
-void
-edgar_init(void)
-{
-   char buf[PATH_MAX];
-   Eina_List *files;
-   char *filename;
-
-   classes = NULL;
-
-   INF("EDGAR: ================================");
-   INF("EDGAR: Init");
-
-   snprintf(buf, sizeof(buf), "%s/.e/e/gadgets", e_user_homedir_get());
-   gadgets_user_dir = eina_stringshare_add(buf);
-
-   snprintf(buf, sizeof(buf), "%s/data/gadgets", e_prefix_data_get());
-   gadgets_system_dir = eina_stringshare_add(buf);
-
-   //Create user dir if not exists
-   if (!ecore_file_exists(gadgets_user_dir))
-      ecore_file_mkpath(gadgets_user_dir);
-   
-   /* search in user dir */
-   DBG("EDGAR: Search in %s", gadgets_user_dir);
-   files = ecore_file_ls(gadgets_user_dir);
-   EINA_LIST_FREE(files, filename)
-   {
-      snprintf(buf, sizeof(buf), "%s/%s", gadgets_user_dir, filename);
-      edgar_load_class(buf);
-      free(filename);
-   }
-   eina_list_free(files);
-   
-   /* search in system dir */
-   DBG("EDGAR: Search in %s", gadgets_system_dir);
-   files = ecore_file_ls(gadgets_system_dir);
-   EINA_LIST_FREE(files, filename)
-   {
-      snprintf(buf, PATH_MAX, "%s/%s", gadgets_system_dir, filename);
-      edgar_load_class(buf);
-      free(filename);
-   }
-   eina_list_free(files);
-   
-   /* Monitor the directories */
-   mon1 = ecore_file_monitor_add(gadgets_user_dir, _edgar_file_monitor_cb, 
NULL);
-   mon2 = ecore_file_monitor_add(gadgets_system_dir, _edgar_file_monitor_cb, 
NULL);
-   
-   /* Pipe Handler */
-   eeh1 = ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
-                                        _edgar_exec_pipe_exit, NULL);
-   eeh2 = ecore_event_handler_add(ECORE_EXE_EVENT_DATA,
-                                        _edgar_exec_pipe_data, NULL);
-   eeh3 = ecore_event_handler_add(ECORE_EXE_EVENT_ERROR,
-                                        _edgar_exec_pipe_data, NULL);
-}
-
-void
-edgar_shutdown(void)
-{
-   INF("EDGAR Shutdown (%d)", eina_list_count(classes));
-
-   if (eeh1) ecore_event_handler_del(eeh1);
-   if (eeh2) ecore_event_handler_del(eeh2);
-   if (eeh3) ecore_event_handler_del(eeh3);
-   eeh1 = eeh2 = eeh3 = NULL;
-   
-   if (mon1) ecore_file_monitor_del(mon1);
-   if (mon2) ecore_file_monitor_del(mon2);
-   mon1 = mon2 = NULL;
-
-   while (classes)
-   {
-      edgar_unload_class(classes->data);
-      classes = eina_list_remove_list(classes, classes);
-   }
-   eina_stringshare_del(gadgets_user_dir);
-   eina_stringshare_del(gadgets_system_dir);
-}
-
-/* Internals */
-static Eina_Bool
-_edgar_monitor_dalayed(void *data)
-{
-   edgar_shutdown();
-   edgar_init();
-   return 0;
-}
-
-static void
-_edgar_file_monitor_cb(void *data, Ecore_File_Monitor *em, Ecore_File_Event 
event, const char *path)
-{
-   static Ecore_Timer *monitor_timer = NULL;
-
-   switch (event)
-   {
-      case ECORE_FILE_EVENT_CREATED_FILE:
-      case ECORE_FILE_EVENT_DELETED_FILE:
-      case ECORE_FILE_EVENT_MODIFIED:
-         DBG("EDGAR: FILE EVENT [%s]", path);
-         //TODO check if is an edje file
-         if (monitor_timer) ecore_timer_del(monitor_timer);
-         monitor_timer = ecore_timer_add(1.5, _edgar_monitor_dalayed, NULL);
-         break;
-      case ECORE_FILE_EVENT_DELETED_SELF:
-         //TODO handle this catasastrofic case...
-         break;
-      case ECORE_FILE_EVENT_CREATED_DIRECTORY:
-      case ECORE_FILE_EVENT_DELETED_DIRECTORY:
-      default:
-         break;
-   }
-   
-}
-
-static unsigned char
-edgar_load_class(const char *path)
-{
-   E_Gadcon_Client_Class *cclass;
-   Eina_List *l;
-   char *style;
-
-   if (!path || !ecore_file_exists(path))
-      return 0;
-
-   //TODO check better if is an edje file
-   if (!eina_str_has_suffix(path, ".edj"))
-      return 0;
-
-   DBG("EDGAR: Load Gadget %s", path);
-
-   //Do not load twice
-   EINA_LIST_FOREACH(classes, l, cclass)
-     {
-        //DBG("EDGAR: SEARCH: %s", cclass->name);
-        if (!strcmp(ecore_file_file_get(path),
-                    ecore_file_file_get(cclass->name)))
-           return 0;
-     }
-
-   //Alloc & populate the gc_class
-   cclass = E_NEW(E_Gadcon_Client_Class, 1);
-   if (!cclass) return 0;
-   cclass->version = GADCON_CLIENT_CLASS_VERSION;
-   cclass->name = eina_stringshare_add(path);
-   cclass->func.init = _edgar_gc_init;
-   cclass->func.shutdown = _edgar_gc_shutdown;
-   cclass->func.orient = _edgar_gc_orient;
-   cclass->func.label = _edgar_gc_label;
-   cclass->func.icon = _edgar_gc_icon;
-   cclass->func.id_new = _edgar_gc_id_new;
-   cclass->func.id_del = _edgar_gc_id_del;
-   
-   style = edje_file_data_get(path, "e/gadget/apparence");
-   if (!style) style = E_GADCON_CLIENT_STYLE_PLAIN;
-   cclass->default_style = (char*)eina_stringshare_add(style);
-
-   //Register the new class
-   e_gadcon_provider_register(cclass);
-
-   classes = eina_list_append(classes, cclass);
-   return 1;
-}
-
-static unsigned char
-edgar_unload_class(E_Gadcon_Client_Class *cclass)
-{
-   DBG("EDGAR: UnLoad Gadgets %s", cclass->name);
-
-   /* Free the cclass */
-   e_gadcon_provider_unregister(cclass);
-   eina_stringshare_del(cclass->name);
-   eina_stringshare_del(cclass->default_style);
-   free(cclass);
-   
-   return 1;
-}
-
-/********************
- *   Gadcon IFace   *
- ********************/
-
-// static void
-// _edgar_focus_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-// {
-   // Instance *inst = data;
-  // ERR("FOCUSIN on %s!!!", inst->gcc->cf->id);
-   // evas_object_focus_set(inst->obj, 1);
-// }
-
-static E_Gadcon_Client *
-_edgar_gc_init(E_Gadcon *gc, const char *name, const char *id, const char 
*style)
-{
-   //E_Gadcon_Client *gcc;
-   Instance *inst;
-   Config_Item *ci = NULL;
-
-   DBG("EDGAR: Gadcon Init name: %s id: %s", name, id);
-
-   /* Search for a config for this id */
-   ci = eina_hash_find(edgar_conf->conf_items_hash, id);
-   if (!ci)
-   {
-      ci = E_NEW(Config_Item, 1);
-      ci->id = eina_stringshare_add(id); //TODO freeme
-      ci->data_hash = NULL;
-      eina_hash_direct_add(edgar_conf->conf_items_hash, ci->id, ci);
-   }
-
-   /* Create the gadget instance */
-   inst = E_NEW(Instance, 1);
-   if (!inst) return 0;
-   inst->ci = ci;
-
-   /* Create the edje object */
-   inst->obj = edje_object_add(gc->evas);
-   edje_object_file_set(inst->obj, name, "e/gadget/main");//TODO Here search 
different group names...or load the first one
-   evas_object_data_set(inst->obj, "EDGAR:instance", inst);
-   //evas_object_repeat_events_set(inst->obj, 0);
-   //evas_object_pass_events_set(inst->obj, 0);
-   
-
-   /* setup callbacks on the edje object */
-   edje_object_message_handler_set(inst->obj, _edgar_edje_messagge_cb, NULL);
-   //TODO MOUSE_DOWN?? I prefer MOUSE_IN!!
-   //evas_object_event_callback_add(inst->obj, EVAS_CALLBACK_MOUSE_IN,
-   //                               _edgar_mouse_down_cb, inst);
-   
-   // evas_object_event_callback_add(inst->obj, EVAS_CALLBACK_FOCUS_IN,
-                                  // _edgar_focus_cb, inst);
-   evas_object_event_callback_add(inst->obj, EVAS_CALLBACK_MOUSE_DOWN,
-                                  _edgar_mouse_down_cb, inst);
-
-   /* Create the Gadcon_Client*/
-   inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->obj);
-   inst->gcc->data = inst;
-
-   instances = eina_list_append(instances, inst);
-   return inst->gcc;
-}
-
-static void
-_edgar_gc_shutdown(E_Gadcon_Client *gcc)
-{
-   Instance *inst = gcc->data;
-
-   DBG("EDGAR: Shutdown");
-   instances = eina_list_remove(instances, inst);
-   evas_object_del(inst->obj);
-   E_FREE(inst);
-}
-
-static void
-_edgar_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient)
-{
-   Instance *inst = gcc->data;
-
-   DBG("EDGAR: Gadcon Orient: %d", orient);
-   switch (orient)
-   {
-      case E_GADCON_ORIENT_FLOAT:
-         _edgar_message_send(inst, 0, "EDGAR_ORIENT", "FLOAT", NULL);
-         break;
-      case E_GADCON_ORIENT_HORIZ:
-      case E_GADCON_ORIENT_TOP:
-      case E_GADCON_ORIENT_BOTTOM:
-      case E_GADCON_ORIENT_CORNER_TL:
-      case E_GADCON_ORIENT_CORNER_TR:
-      case E_GADCON_ORIENT_CORNER_BL:
-      case E_GADCON_ORIENT_CORNER_BR:
-         _edgar_message_send(inst, 0, "EDGAR_ORIENT", "HORIZ", NULL);
-         break;
-      case E_GADCON_ORIENT_VERT:
-      case E_GADCON_ORIENT_LEFT:
-      case E_GADCON_ORIENT_RIGHT:
-      case E_GADCON_ORIENT_CORNER_LT:
-      case E_GADCON_ORIENT_CORNER_RT:
-      case E_GADCON_ORIENT_CORNER_LB:
-      case E_GADCON_ORIENT_CORNER_RB:
-         _edgar_message_send(inst, 0, "EDGAR_ORIENT", "VERT", NULL);
-         break;
-      default:
-         break;
-   }
-
-   if (!inst->min_w && !inst->min_h)
-      edje_object_size_min_get(inst->obj, &inst->min_w, &inst->min_h);
-   
-   //edje_object_size_min_calc(inst->obj, &inst->min_w, &inst->min_h);
-   // DBG("EDGAR: w:%d h:%d", inst->min_w, inst->min_h);
-
-   e_gadcon_client_min_size_set(gcc, inst->min_w, inst->min_h);
-   // DBG("EDGAR: DOPO");
-}
-
-static const char*
-_edgar_gc_label(const E_Gadcon_Client_Class *client_class)
-{
-   char *label;
-   DBG("EDGAR: Gadcon Label for class: %s", client_class->name);
-
-   //Search the label in the edje file or use the filename as label
-   label = edje_file_data_get(client_class->name, "e/gadget/name");
-   if (!label)
-     label = (char*)ecore_file_file_get(client_class->name);
-
-   return label;
-}
-
-static const char*
-_edgar_gc_id_new(const E_Gadcon_Client_Class *client_class)
-{
-   Config_Item *ci = NULL;
-   char buf[128];
-
-   snprintf(buf, sizeof(buf), "ED.%s.%.0f",
-            ecore_file_file_get(client_class->name), ecore_time_get() * 
1000000);
-
-   DBG("EDGAR: Gadcon ID New [%s]", buf);
-
-   ci = E_NEW(Config_Item, 1);
-   ci->id = eina_stringshare_add(buf);
-   ci->data_hash = eina_hash_string_superfast_new(NULL);
-   eina_hash_direct_add(edgar_conf->conf_items_hash, ci->id, ci);
-
-   return ci->id;
-}
-
-static void 
-_edgar_gc_id_del(const E_Gadcon_Client_Class *client_class, const char *id)
-{
-   //DBG("EDGAR: Gadcon ID Del [%s]", id);
-   //~ Config_Item *ci = NULL;
-
-   //~ if (!(ci = _skel_conf_item_get(id))) return;
-
-   //~ /* cleanup !! */
-   //~ if (ci->id) eina_stringshare_del(ci->id);
-
-   //~ skel_conf->conf_items = eina_list_remove(skel_conf->conf_items, ci);
-   //~ E_FREE(ci);
-}
-
-static Evas_Object*
-_edgar_gc_icon(const E_Gadcon_Client_Class *client_class, Evas *evas)
-{
-   Evas_Object *icon;
-
-   DBG("EDGAR: Gadcon Icon for class: %s", client_class->name);
-
-   icon = edje_object_add(evas);
-   if (edje_object_file_set(icon, client_class->name, "e/gadget/icon"))
-      return icon;
-
-   evas_object_del(icon);
-   return NULL;
-}
-
-/************************
- *   Gadgets Callbacks  *
- ************************/
-static void
-_edgar_menu_post_cb(void *data, E_Menu *m)
-{
-   E_Gadcon_Client *gcc;
-
-   if (!(gcc = data)) return;
-   if (gcc->gadcon) e_gadcon_locked_set(gcc->gadcon, 0);
-   if (!gcc->menu) return;
-   if (gcc->gadcon && gcc->gadcon->shelf && (gcc->menu == 
gcc->gadcon->shelf->menu))
-     gcc->gadcon->shelf->menu = NULL;
-   e_object_del(E_OBJECT(gcc->menu));
-   gcc->menu = NULL;
-}
-
-static void
-_edgar_menu_configure_cb(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-#ifdef HAVE_E19
-   e_int_config_edgar_module(m->zone->comp, NULL);
-#else
-   e_int_config_edgar_module(m->zone->container, NULL);
-#endif
-}
-
-static void
-_edgar_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-   Instance *inst = data;
-   Evas_Event_Mouse_Down *ev = event_info;
-   
-   // DBG("EDGAR: DONW on %s!!!", inst->gcc->cf->id);
-   // evas_object_focus_set(inst->obj, 1);
-
-   if (inst->gcc->menu) return;
-   if (ev->button == 3)
-     {
-        E_Menu_Item *mi;
-        E_Zone *zone;
-        int cx, cy, cw, ch;
-
-        e_gadcon_locked_set(inst->gcc->gadcon, 1);
-        inst->gcc->menu = e_menu_new();
-
-        mi = e_menu_item_new(inst->gcc->menu);
-        e_menu_item_label_set(mi, "Gadgets settings"); // TODO i18n
-        e_util_menu_item_theme_icon_set(mi, "configure");
-        e_menu_item_callback_set(mi, _edgar_menu_configure_cb, NULL);
-
-        inst->gcc->menu = e_gadcon_client_util_menu_items_append(inst->gcc, 
inst->gcc->menu, 0);
-        e_menu_post_deactivate_callback_set(inst->gcc->menu, 
_edgar_menu_post_cb, inst->gcc);
-        
-        if (inst->gcc->gadcon->shelf) inst->gcc->gadcon->shelf->menu = 
inst->gcc->menu;
-
-        e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy, &cw, 
&ch);
-        zone = inst->gcc->gadcon->zone;
-        if (!zone) zone = e_util_zone_current_get(e_manager_current_get());
-        e_menu_activate_mouse(inst->gcc->menu, zone,
-                              cx + ev->output.x,
-                              cy + ev->output.y, 1, 1,
-                              E_MENU_POP_DIRECTION_AUTO, ev->timestamp);
-     }
-}
-
-static void
-_edgar_edje_messagge_cb(void *data, Evas_Object *obj, Edje_Message_Type type, 
int id, void *message)
-{
-   Edje_Message_String_Set *msg;
-   Instance *inst;
-   char *cmd;
-
-   if (type != EDJE_MESSAGE_STRING_SET)
-      return;
-
-   msg = message;
-   if (msg->count < 1)
-      return;
-   cmd = msg->str[0];
-   
-   inst = evas_object_data_get(obj, "EDGAR:instance");
-   if (!inst) return;
-
-   // int i;
-   // printf("CMD [%s](%d) ", cmd, msg->count);
-   // for(i = 1; i < msg->count; i++) printf("[%s]", msg->str[i]);
-   // printf("");
-   
-   //command must start with EDGAR_ and must have at least 1 char after it
-   if (strlen(cmd) < 7 || strncmp(cmd, "EDGAR_", 6))
-      return;
-   cmd += 6;
-
-   if      (!strcmp(cmd, "DBG"))      _edgar_api_dbg      (inst, id, msg);
-   else if (!strcmp(cmd, "MIN_SET"))  _edgar_api_min_set  (inst, id, msg);
-   else if (!strcmp(cmd, "EXEC"))     _edgar_api_exec     (inst, id, msg);
-   else if (!strcmp(cmd, "ACTION"))   _edgar_api_action   (inst, id, msg);
-   else if (!strcmp(cmd, "CONF_SET")) _edgar_api_conf_set (inst, id, msg);
-   else if (!strcmp(cmd, "CONF_GET")) _edgar_api_conf_get (inst, id, msg);
-   else if (!strcmp(cmd, "ID_GET"))   _edgar_api_id_get   (inst, id, msg);
-   else WRN("Warning: unknow command '%s'", cmd);
-}
-
-static void
-_edgar_message_send(Instance *inst, int id, const char *args, ...)
-{
-   Edje_Message_String_Set *rmsg;
-   va_list ap;
-   const char *param;
-   int n = 0;
-   int i;
-
-   //DBG("MSG");
-   
-   //Count the args
-   va_start(ap, args);
-   param = args;
-   while (param != 0)
-   {
-      param = va_arg(ap, const char *);
-      n++;
-   }
-   if (n < 1) return;
-   
-   //Alloc messagge
-   rmsg = alloca(sizeof(Edje_Message_String_Set) + ((n - 1) * sizeof(char 
*))); //TODO FREE???
-   rmsg->count = n;
-
-   //Populate messagge
-   va_start(ap, args);
-   param = args;
-   for (i = 0; i < n; i++)
-   {
-      rmsg->str[i] = (char*)eina_stringshare_add(param);  //NEED TO FREE???
-      param = va_arg(ap, const char *);
-   }
-   va_end(ap);
-   
-   //Send the messagge
-   edje_object_message_send(inst->obj, EDJE_MESSAGE_STRING_SET, id, rmsg);
-}
-
-/*******************
- *   Gadgets API   *
- *******************/
-
-/**  EDGAR_DBG "string to print" "another one" ... "as many as you wish"
- *
- */
-static void
-_edgar_api_dbg(Instance *inst, int id, Edje_Message_String_Set *msg)
-{
-   int i;
-
-   printf("\033[31;1m[GADGET %s] ",
-          ecore_file_file_get(inst->gcc->client_class->name));
-   for (i = 1; i < msg->count; i++)
-      printf("%s ", msg->str[i]);
-   printf("\033[0m");
-   printf("\n");
-}
-
-/**  EDGAR_ID_GET no_params
- * 
- * replay with EDGAR_ID_GET_REPLAY "id"
- */
-static void
-_edgar_api_id_get(Instance *inst, int id, Edje_Message_String_Set *msg)
-{
-   DBG("EDGAR: ID_GET");
-   _edgar_message_send(inst, id, "EDGAR_ID_GET_REPLY", (char*)inst->ci->id);
-}
-
-/**  EDGAR_MIN_SET "min_w min_h"
- * 
- */
-static void
-_edgar_api_min_set(Instance *inst, int id, Edje_Message_String_Set *msg)
-{
-   char *value;
-   int min_w, min_h;
-   //~ char *value;
-   //~ Data_Item *data;
-
-   if (msg->count < 2)
-      return;
-   
-   value = msg->str[1];
-   //~ value = msg->str[2];
-   
-   DBG("EDGAR: MIN_SET '%s'", value);
-   
-   sscanf(value, "%d %d", &min_w, &min_h);
-   DBG("EDGAR: MIN_SET '%d' '%d'", min_w, min_h);
-   inst->gcc->min.w = min_w;
-   inst->gcc->min.h = min_h;
-   
-   //e_gadcon_client_min_size_set(inst->gcc, min_w, min_h);
-   
-   //~ e_config_save_queue();
-}
-
-static Eina_Bool
-_edgar_exec_pipe_data(void *data, int ev_type, void *ev)
-{
-   Ecore_Exe_Event_Data *e = (Ecore_Exe_Event_Data *)ev;
-   Edgar_Exe_Data *exe_data;
-
-   if (!e->exe) return 1;
-   if (!ecore_exe_tag_get(e->exe) )return 1;
-   if (strcmp(ecore_exe_tag_get(e->exe), "EdG")) return 1;
-   
-   exe_data = ecore_exe_data_get(e->exe);
-   if (!exe_data) return 1;
-
-   //DBG("EDGAR: data received.");
-   if (e->lines)
-   {
-      int i;
-      for (i = 0; e->lines[i].line != NULL; i++)
-      {
-          _edgar_message_send(exe_data->inst, exe_data->id_msg,
-                              "EDGAR_EXEC_DATA", e->lines[i].line, NULL);
-
-         if (exe_data->last_line) eina_stringshare_del(exe_data->last_line);
-         exe_data->last_line = eina_stringshare_add(e->lines[i].line);
-      }
-   }
-   return 1;
-}
-
-static Eina_Bool
-_edgar_exec_pipe_exit(void *data, int ev_type, void *ev)
-{
-   Ecore_Exe_Event_Del *e = (Ecore_Exe_Event_Del *)ev;
-   Edgar_Exe_Data *exe_data;
-
-   if (!e->exe) return 1;
-   if (!ecore_exe_tag_get(e->exe) )return 1;
-   if (strcmp(ecore_exe_tag_get(e->exe), "EdG")) return 1;
-
-   exe_data = ecore_exe_data_get(e->exe);
-   if (!exe_data) return 1;
-
-   if (e->exit_code)
-   {
-      //~ DBG("EDGAR: Error in EXEC, exit code: %d", e->exit_code);
-       _edgar_message_send(exe_data->inst, exe_data->id_msg,
-                           "EDGAR_EXEC_REPLY", "ERR", exe_data->last_line, 
NULL);
-   }
-   else
-   {
-      //~ DBG("EDGAR: Operation completed");
-      _edgar_message_send(exe_data->inst, exe_data->id_msg,
-                          "EDGAR_EXEC_REPLY", "OK", exe_data->last_line, NULL);
-   }
-
-   if (exe_data->last_line) eina_stringshare_del(exe_data->last_line);
-   E_FREE(exe_data);
-   
-   return 0;
-}
-
-/**  EDGAR_EXEC "command"
- *   
- * replay with EDGAR_EXEC_REPLY "status" "last_line" when the command end.
- * status can be 'OK' 'ERR'.
- * You can also listen for EDGAR_EXEC_DATA "line" to catch every line of the 
- * output.
- */
-static void
-_edgar_api_exec(Instance *inst, int id, Edje_Message_String_Set *msg)
-{
-   char *exe;
-   Edgar_Exe_Data *exe_data;
-   Ecore_Exe *ee;
-   
-   if (msg->count < 2)
-      return;
-
-   if (!edgar_guardian_is_allowed(inst, EDGAR_GUARDIAN_TYPE_COMMAND, 
msg->str[1]))
-      return;
-   
-   exe = msg->str[1];
-   // DBG("EDGAR: EXEC '%s'", exe);
-   
-   // if (inst->eeh1)
-   // {
-      // WRN("There is another EXEC running...skipping.");
-      // return;
-   // }
-   
-   exe_data = E_NEW(Edgar_Exe_Data, 1);
-   exe_data->id_msg = id;
-   exe_data->inst = inst;
-   exe_data->last_line = NULL;
-   
-   ee = ecore_exe_pipe_run(exe,
-      ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED |
-      ECORE_EXE_PIPE_ERROR | ECORE_EXE_PIPE_ERROR_LINE_BUFFERED,
-      exe_data);
-   ecore_exe_tag_set(ee, "EdG");
-}
-
-/**  EDGAR_ACTION "action"
- *
- * replay with EDGAR_ACTION_REPLY "status".
- * status can be 'OK' 'ERR'.
- */
-static void
-_edgar_api_action(Instance *inst, int id, Edje_Message_String_Set *msg)
-{
-   E_Action *ac;
-   char *action;
-   char *params;
-
-   if (msg->count != 2)
-   {
-      ERR("Wrong args count: %d", msg->count);
-      return;
-   }
-
-   if (!edgar_guardian_is_allowed(inst, EDGAR_GUARDIAN_TYPE_EACTION, 
msg->str[1]))
-     return;
-   
-   action = strdup(msg->str[1]);
-   params = strchr(action, ' ');
-   if (params)
-   {
-      *params = '\0';
-      params++;
-   }
-   else
-   {
-      params = "";
-   }
-
-   ac = e_action_find(action);
-   if (!ac)
-   {
-      ERR("Cannot find action: %s", action);
-      _edgar_message_send(inst, id, "EDGAR_ACTION_REPLY", "ERR", NULL);
-      free(action);
-      return;
-   }
-
-   if (!ac->func.go)
-   {
-      ERR("Cannot find go() func in action: %s", action);
-      _edgar_message_send(inst, id, "EDGAR_ACTION_REPLY", "ERR", NULL);
-      free(action);
-      return;
-   }
-
-   DBG("EDGAR: GO! action:'%s' params:'%s'", action, params);
-   ac->func.go(NULL, params);
-   _edgar_message_send(inst, id, "EDGAR_ACTION_REPLY", "OK", NULL);
-
-   free(action);
-
-   /*** print the list of available actions
-   {
-   Eina_List *l, *l2;
-
-   E_Action_Group *actg;
-   E_Action_Description *actd;
-   int g, a;
-   for (l = e_action_groups_get(), g = 0; l; l = l->next, g++)
-     {
-        actg = l->data;
-
-        if (!actg->acts) continue;
-         printf("*** %s\n", actg->act_grp);
-
-        for (l2 = actg->acts, a = 0; l2; l2 = l2->next, a++)
-          {
-            actd = l2->data;
-            printf(" - %s [%s]\n", actd->act_name, actd->act_cmd);
-            printf("    params:'%s' '%s'\n", actd->act_params, 
actd->param_example);
-          }
-     }
-   }
-   */
-   
-}
-
-/**  EDGAR_CONF_SET "key" "value"
- * 
- */
-static void
-_edgar_api_conf_set(Instance *inst, int id, Edje_Message_String_Set *msg)
-{
-   char *key;
-   char *value;
-   Data_Item *data;
-
-   if (msg->count < 3)
-      return;
-   
-   key = msg->str[1];
-   value = msg->str[2];
-   
-   DBG("EDGAR: CONF_SET key '%s' val: '%s'", key, value);
-   
-   data = eina_hash_find(inst->ci->data_hash, key);
-   if (!data)
-   {
-      DBG("EDGAR: DATA NOT EXIST. Create new");
-      data = E_NEW(Data_Item, 1);
-      data->val_str = NULL;
-      data->val_int = 0;
-      eina_hash_add(inst->ci->data_hash, key, data);
-   }
-
-   if (data->val_str) eina_stringshare_del(data->val_str);
-   data->val_str = eina_stringshare_add(value);
-
-   e_config_save_queue();
-}
-
-/**  EDGAR_CONF_GET "key"
- * 
- * replay with EDGAR_CONF_GET_REPLAY "key" "value"
- * note: if no conf with that key exists, than no REPLAY msg is sent.
- */
-static void
-_edgar_api_conf_get(Instance *inst, int id, Edje_Message_String_Set *msg)
-{
-   Data_Item *data;
-   char *key;
-   
-   DBG("EDGAR: CONF_GET");
-   
-   if (msg->count < 2)
-      return;
-   
-   key = msg->str[1];
-   data = eina_hash_find(inst->ci->data_hash, key);
-   if (!data) return;
-   
-    _edgar_message_send(inst, id, "EDGAR_CONF_GET_REPLY",  key, data->val_str);
-}
diff --git a/src/OLD_e_mod_edgar.h b/src/OLD_e_mod_edgar.h
deleted file mode 100644
index 76c2e61..0000000
--- a/src/OLD_e_mod_edgar.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*  Copyright (C) 2008 Davide Andreoli (see AUTHORS)
- *
- *  This file is part of edgar.
- *  edgar is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  edgar is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with edgar.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef E_MOD_EDGAR_H
-#define E_MOD_EDGAR_H
-
-void edgar_init(void);
-void edgar_shutdown(void);
-
-
-#endif
diff --git a/src/OLD_e_mod_guardian.c b/src/OLD_e_mod_guardian.c
deleted file mode 100644
index a29a239..0000000
--- a/src/OLD_e_mod_guardian.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/*  Copyright (C) 2008-2014 Davide Andreoli (see AUTHORS)
- *
- *  This file is part of edgar.
- *  edgar is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  edgar is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with edgar.  If not, see <http://www.gnu.org/licenses/>.
- */
- 
-#include <e.h>
-#include "e_mod_main.h"
-#include "e_mod_guardian.h"
-
-typedef struct {
-   const char *action;
-   int action_type;
-   int check_state;
-   Guardian_Item *inwait_item;
-}Guardian_Dialog_Data;
-
-extern Config *edgar_conf;
-
-static Guardian_Item *
-_edgar_guardian_allow_set(const char *gadget, const char *action, int allow)
-{
-   Guardian_Item *item;
-   char key[4096];
-
-   if (allow >= EDGAR_GUARDIAN_DENY_LAST)
-     return NULL;
-
-   snprintf(key, sizeof(key), "::%s::", gadget);
-   if ((allow != EDGAR_GUARDIAN_DENY_ALL) && (allow != 
EDGAR_GUARDIAN_ALLOW_ALL))
-     {
-        // we always want an 'header' item (simplify the config list)
-        if (!eina_hash_find(edgar_conf->conf_guardian_hash, &key))
-          {
-             item = E_NEW(Guardian_Item, 1);
-             item->allow = EDGAR_GUARDIAN_ASK;
-             eina_hash_add(edgar_conf->conf_guardian_hash, key, item);
-          }
-        snprintf(key, sizeof(key), "%s::%s", gadget, action);
-     }
-
-   item = eina_hash_find(edgar_conf->conf_guardian_hash, &key);
-   if (!item)
-   {
-      item = E_NEW(Guardian_Item, 1);
-      eina_hash_add(edgar_conf->conf_guardian_hash, key, item);
-   }
-   item->allow = allow;
-
-   return item;
-}
-
-static void
-_edgar_guardian_dialog_allow_cb(void *data, E_Dialog *dia)
-{
-   Instance *inst = data;
-   Guardian_Dialog_Data *gdd;
-
-   gdd = e_object_data_get((E_Object *)dia);
-   _edgar_guardian_allow_set(inst->gcc->client_class->name, gdd->action,
-            gdd->check_state ? EDGAR_GUARDIAN_ALLOW_ALL : 
EDGAR_GUARDIAN_ALLOW);
-
-   e_object_del((E_Object *)dia);
-}
-
-static void
-_edgar_guardian_dialog_deny_cb(void *data, E_Dialog *dia)
-{
-   Instance *inst = data;
-   Guardian_Dialog_Data *gdd;
-
-   gdd = e_object_data_get((E_Object *)dia);
-   _edgar_guardian_allow_set(inst->gcc->client_class->name, gdd->action,
-              gdd->check_state ? EDGAR_GUARDIAN_DENY_ALL : 
EDGAR_GUARDIAN_DENY);
-   e_object_del((E_Object *)dia);
-}
-
-static void
-_edgar_guardian_dialog_free_cb(void *dia)
-{
-   Guardian_Dialog_Data *gdd;
-
-   gdd = e_object_data_get(dia);
-   if (!gdd) return;
-
-   if (gdd->inwait_item && gdd->inwait_item->allow == EDGAR_GUARDIAN_IN_WAIT)
-     gdd->inwait_item->allow = EDGAR_GUARDIAN_ASK;
-
-   if (gdd->action) eina_stringshare_del(gdd->action);
-   E_FREE(gdd);
-}
-
-EAPI Eina_Bool
-edgar_guardian_is_allowed(Instance *inst, int type, const char *action)
-{
-   Guardian_Item *allow;
-   Guardian_Dialog_Data *gdd;
-   E_Dialog *dia;
-   char buf[4096];
-   int w, h;
-
-   // just to be safe, in case something goes wrong loading from config
-   if (!edgar_conf->conf_guardian_hash)
-      edgar_conf->conf_guardian_hash = eina_hash_string_superfast_new(NULL);
-
-   // check in the guardian hash
-   if (action && inst && inst->gcc && inst->gcc->client_class &&
-       inst->gcc->client_class->name)
-   {
-      snprintf(buf, sizeof(buf), "::%s::", inst->gcc->client_class->name);
-      allow = eina_hash_find(edgar_conf->conf_guardian_hash, &buf);
-      if (!allow || allow->allow == EDGAR_GUARDIAN_ASK)
-      {
-         snprintf(buf, sizeof(buf), "%s::%s", inst->gcc->client_class->name, 
action);
-         allow = eina_hash_find(edgar_conf->conf_guardian_hash, &buf);
-      }
-      DBG("Guardian, can exec this? '%s'", buf);
-
-      if (allow && allow->allow != EDGAR_GUARDIAN_ASK)
-      {
-         switch (allow->allow)
-         {
-            case EDGAR_GUARDIAN_ALLOW:
-            case EDGAR_GUARDIAN_ALLOW_ALL:
-               DBG("Yes, you can! go on.");
-               return EINA_TRUE;
-
-            case EDGAR_GUARDIAN_DENY:
-            case EDGAR_GUARDIAN_DENY_ALL:
-            case EDGAR_GUARDIAN_IN_WAIT:
-            default:
-               DBG("NO! permission denied. (reason: %d)", allow->allow);
-               return EINA_FALSE;
-         }
-      }
-   }
-
-   // or ask the user what to do
-   gdd = E_NEW(Guardian_Dialog_Data, 1);
-   if (!gdd) return EINA_FALSE;
-   gdd->action = eina_stringshare_add(action);
-   gdd->action_type = type;
-
-   if (type == EDGAR_GUARDIAN_TYPE_EACTION)
-      snprintf(buf, sizeof(buf),
-         "The gadget \"%s\"<br>"
-         "want to execute the enlightenment action:<br>"
-         "<br><b>%s</b><br><br>"
-         "Do I have to allow the execution?", inst->ci->id ,action);
-   else if (type == EDGAR_GUARDIAN_TYPE_COMMAND)
-      snprintf(buf, sizeof(buf),
-         "The gadget \"%s\"<br>"
-         "want to execute the shell command:<br>"
-         "<br><b>%s</b><br><br>"
-         "Do I have to allow the execution?", inst->ci->id ,action);
-
-   else if (type == EDGAR_GUARDIAN_TYPE_GETURL)
-      snprintf(buf, sizeof(buf),
-         "The gadget \"%s\"<br>"
-         "want to access the net at the url:<br>"
-         "<br><b>%s</b><br><br>"
-         "Do I have to allow the access?", inst->ci->id ,action);
-
-
-   // dialog
-#ifdef HAVE_E19
-   E_Comp *con;
-   con = e_manager_current_get()->comp;
-#else
-   E_Container *con;
-   con = e_container_current_get(e_manager_current_get());
-#endif
-   dia = e_dialog_new(con, "can exec", "class");
-   e_dialog_resizable_set(dia, EINA_TRUE);
-   e_dialog_title_set(dia, "The gadget guardian");
-   e_dialog_button_add(dia, "Allow", NULL, _edgar_guardian_dialog_allow_cb, 
inst);
-   e_dialog_button_add(dia, "Deny", NULL, _edgar_guardian_dialog_deny_cb, 
inst);
-   e_object_data_set((E_Object*)dia, gdd);
-   e_object_free_attach_func_set((E_Object*)dia, 
_edgar_guardian_dialog_free_cb);
-
-   // vbox
-   Evas_Object *vbox;
-   vbox = e_widget_list_add(dia->win->evas, 0, 0);
-
-   // label
-   Evas_Object *text;
-   text = e_widget_textblock_add(dia->win->evas);
-   e_widget_textblock_markup_set(text, buf);
-   e_widget_size_min_set(text, 260 * e_scale, 90 * e_scale); // hmmm, :/
-   e_widget_list_object_append(vbox, text, 1, 1, 0.0);
-   
-   // check
-   Evas_Object *chk;
-   chk = e_widget_check_add(dia->win->evas, "Allow or deny all the actions 
from this gadget", &gdd->check_state); //TODO i18n
-   e_widget_list_object_append(vbox, chk, 1, 1, 0.0);
-
-   // resize & show the dialog
-   e_widget_size_min_get(vbox, &w, &h);
-   e_dialog_content_set(dia, vbox, w, h);
-   e_dialog_show(dia);
-
-   // set to deny (in_wait), until the user choose or the dialog will be closed
-   gdd->inwait_item = _edgar_guardian_allow_set(inst->gcc->client_class->name,
-                                                action, 
EDGAR_GUARDIAN_IN_WAIT);
-   return EINA_FALSE;
-}
diff --git a/src/OLD_e_mod_guardian.h b/src/OLD_e_mod_guardian.h
deleted file mode 100644
index bd0a81c..0000000
--- a/src/OLD_e_mod_guardian.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*  Copyright (C) 2008 Davide Andreoli (see AUTHORS)
- *
- *  This file is part of edgar.
- *  edgar is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  edgar is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with edgar.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef E_MOD_EDGAR_GUARDIAN_H
-#define E_MOD_EDGAR_GUARDIAN_H
-
-
-EAPI Eina_Bool edgar_guardian_is_allowed(Instance *inst, int type, const char 
*action);
-
-#endif
diff --git a/src/e_mod_edgar.c b/src/e_mod_edgar.c
index 70152f1..329fc95 100644
--- a/src/e_mod_edgar.c
+++ b/src/e_mod_edgar.c
@@ -18,10 +18,12 @@
 
 #include <Python.h>
 #include <e.h>
+#include <Efl_Ui.h>
+
 #include "e_mod_main.h"
 #include "e_mod_edgar.h"
 #include "efl.eo_api.h"
-#include "Efl_Ui.h"
+
 
 
 #ifdef EFL_VERSION_1_21
@@ -147,7 +149,7 @@ edgar_init()
    int ret;
 
    // prepare the local scope
-   snprintf(buf, sizeof(buf), "%s/enlightenment/gadgets", e_prefix_lib_get());
+   snprintf(buf, sizeof(buf), "%s/enlightenment/edgar_gadgets", 
e_prefix_lib_get());
    edgar_gadgets_system_dir = eina_stringshare_add(buf);
    edgar_gadgets = 
eina_hash_string_superfast_new(edgar_gadgets_hash_free_func);
 
@@ -165,6 +167,8 @@ edgar_init()
    if (import_efl__eo() != 0)
    {
       DBG("EDGAR: Cannot import python-efl");
+      if (PyErr_Occurred())
+        PyErr_Print();
       e_util_dialog_internal("Edgar Error",
                      "<font align=left><b>Python-efl not found.</b><br>"
                      "Your python gadgets will not work.<br><br>"
diff --git a/src/efl.eo_api.h b/src/efl.eo_api.h
index 25419b8..20bdd3a 100644
--- a/src/efl.eo_api.h
+++ b/src/efl.eo_api.h
@@ -1,11 +1,16 @@
+/* Generated by Cython 0.29.14 */
+
 #ifndef __PYX_HAVE_API__efl__eo
 #define __PYX_HAVE_API__efl__eo
+#ifdef __MINGW64__
+#define MS_WIN64
+#endif
 #include "Python.h"
 
-static PyObject *(*__pyx_f_3efl_2eo_object_from_instance)(Eo *) = 0;
-#define object_from_instance __pyx_f_3efl_2eo_object_from_instance
-static Eo *(*__pyx_f_3efl_2eo_instance_from_object)(PyObject *) = 0;
-#define instance_from_object __pyx_f_3efl_2eo_instance_from_object
+static PyObject *(*__pyx_api_f_3efl_2eo_object_from_instance)(Eo *) = 0;
+#define object_from_instance __pyx_api_f_3efl_2eo_object_from_instance
+static Eo *(*__pyx_api_f_3efl_2eo_instance_from_object)(PyObject *) = 0;
+#define instance_from_object __pyx_api_f_3efl_2eo_instance_from_object
 #if !defined(__Pyx_PyIdentifier_FromString)
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
@@ -14,23 +19,6 @@ static Eo *(*__pyx_f_3efl_2eo_instance_from_object)(PyObject 
*) = 0;
 #endif
 #endif
 
-#ifndef __PYX_HAVE_RT_ImportModule
-#define __PYX_HAVE_RT_ImportModule
-static PyObject *__Pyx_ImportModule(const char *name) {
-    PyObject *py_name = 0;
-    PyObject *py_module = 0;
-    py_name = __Pyx_PyIdentifier_FromString(name);
-    if (!py_name)
-        goto bad;
-    py_module = PyImport_Import(py_name);
-    Py_DECREF(py_name);
-    return py_module;
-bad:
-    Py_XDECREF(py_name);
-    return 0;
-}
-#endif
-
 #ifndef __PYX_HAVE_RT_ImportFunction
 #define __PYX_HAVE_RT_ImportFunction
 static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void 
(**f)(void), const char *sig) {
@@ -46,14 +34,14 @@ static int __Pyx_ImportFunction(PyObject *module, const 
char *funcname, void (**
     cobj = PyDict_GetItemString(d, funcname);
     if (!cobj) {
         PyErr_Format(PyExc_ImportError,
-            "%s does not export expected C function %s",
+            "%.200s does not export expected C function %.200s",
                 PyModule_GetName(module), funcname);
         goto bad;
     }
-#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3 && 
PY_MINOR_VERSION==0)
+#if PY_VERSION_HEX >= 0x02070000
     if (!PyCapsule_IsValid(cobj, sig)) {
         PyErr_Format(PyExc_TypeError,
-            "C function %s.%s has wrong signature (expected %s, got %s)",
+            "C function %.200s.%.200s has wrong signature (expected %.500s, 
got %.500s)",
              PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj));
         goto bad;
     }
@@ -67,7 +55,7 @@ static int __Pyx_ImportFunction(PyObject *module, const char 
*funcname, void (**
     while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
     if (*s1 != *s2) {
         PyErr_Format(PyExc_TypeError,
-            "C function %s.%s has wrong signature (expected %s, got %s)",
+            "C function %.200s.%.200s has wrong signature (expected %.500s, 
got %.500s)",
              PyModule_GetName(module), funcname, sig, desc);
         goto bad;
     }
@@ -87,10 +75,10 @@ bad:
 
 static int import_efl__eo(void) {
   PyObject *module = 0;
-  module = __Pyx_ImportModule("efl.eo");
+  module = PyImport_ImportModule("efl.eo");
   if (!module) goto bad;
-  if (__Pyx_ImportFunction(module, "object_from_instance", (void 
(**)(void))&__pyx_f_3efl_2eo_object_from_instance, "PyObject *(Eo *)") < 0) 
goto bad;
-  if (__Pyx_ImportFunction(module, "instance_from_object", (void 
(**)(void))&__pyx_f_3efl_2eo_instance_from_object, "Eo *(PyObject *)") < 0) 
goto bad;
+  if (__Pyx_ImportFunction(module, "object_from_instance", (void 
(**)(void))&__pyx_api_f_3efl_2eo_object_from_instance, "PyObject *(Eo *)") < 0) 
goto bad;
+  if (__Pyx_ImportFunction(module, "instance_from_object", (void 
(**)(void))&__pyx_api_f_3efl_2eo_instance_from_object, "Eo *(PyObject *)") < 0) 
goto bad;
   Py_DECREF(module); module = 0;
   return 0;
   bad:
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..a6740eb
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,12 @@
+
+module = shared_module(
+   'module',
+   'e_mod_main.c',
+   'e_mod_edgar.c',
+
+   dependencies : [dep_e, dep_py3],
+   install_dir: lib_install_dir,
+   include_directories: config_dir,
+   install: true,
+   name_prefix: '',
+)

-- 


Reply via email to