ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=b5c061bc4d7a2da5bda0d2ed4de81116d7dbcfc5

commit b5c061bc4d7a2da5bda0d2ed4de81116d7dbcfc5
Author: Andy Williams <[email protected]>
Date:   Sat Feb 18 22:19:17 2017 +0000

    build: Split make from cmake so we can specialise better
---
 src/lib/Makefile.am                |  1 +
 src/lib/edi_build_provider.c       |  7 ++++
 src/lib/edi_build_provider_cmake.c | 77 ++++++++++++++++++++++++++++++++++++++
 src/lib/edi_build_provider_make.c  | 13 -------
 4 files changed, 85 insertions(+), 13 deletions(-)

diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index b1f2f37..b3e142a 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -22,6 +22,7 @@ includesdir = $(includedir)/edi-@VMAJ@
 libedi_la_SOURCES = \
 edi_private.h \
 edi_build_provider_make.c \
+edi_build_provider_cmake.c \
 edi_build_provider_python.c \
 edi_build_provider.c \
 edi_builder.c \
diff --git a/src/lib/edi_build_provider.c b/src/lib/edi_build_provider.c
index 5e92977..8757377 100644
--- a/src/lib/edi_build_provider.c
+++ b/src/lib/edi_build_provider.c
@@ -8,6 +8,7 @@
 #include "edi_private.h"
 
 extern Edi_Build_Provider _edi_build_provider_make;
+extern Edi_Build_Provider _edi_build_provider_cmake;
 extern Edi_Build_Provider _edi_build_provider_python;
 
 EAPI Edi_Build_Provider *edi_build_provider_for_project_get()
@@ -22,6 +23,8 @@ EAPI Edi_Build_Provider 
*edi_build_provider_for_project_path_get(const char *pat
 
    if (_edi_build_provider_make.path_supported_is(path))
      return &_edi_build_provider_make;
+   if (_edi_build_provider_cmake.path_supported_is(path))
+     return &_edi_build_provider_cmake;
 
    if (_edi_build_provider_python.path_supported_is(path))
      return &_edi_build_provider_python;
@@ -33,6 +36,10 @@ EAPI Edi_Build_Provider *edi_build_provider_for_id_get(const 
char *id)
 {
    if (!strcmp("make", id))
      return &_edi_build_provider_make;
+   if (!strcmp("cmake", id))
+     return &_edi_build_provider_cmake;
+   if (!strcmp("python", id))
+     return &_edi_build_provider_python;
 
    return NULL;
 }
diff --git a/src/lib/edi_build_provider_cmake.c 
b/src/lib/edi_build_provider_cmake.c
new file mode 100644
index 0000000..1c96dd4
--- /dev/null
+++ b/src/lib/edi_build_provider_cmake.c
@@ -0,0 +1,77 @@
+#ifdef HAVE_CONFIG
+# include "config.h"
+#endif
+
+#include <unistd.h>
+#include <Ecore.h>
+#include <Ecore_File.h>
+
+#include "Edi.h"
+
+#include "edi_private.h"
+
+static Eina_Bool
+_relative_path_exists(const char *base, const char *relative)
+{
+   char *path;
+   Eina_Bool ret;
+
+   path = edi_path_append(base, relative);
+   ret = ecore_file_exists(path);
+
+   free(path);
+   return ret;
+}
+
+static Eina_Bool
+_cmake_project_supported(const char *path)
+{
+   return _relative_path_exists(path, "CMakeLists.txt");
+}
+
+static Eina_Bool
+_cmake_file_hidden_is(const char *file)
+{
+   if (!file || strlen(file) == 0)
+     return EINA_FALSE;
+
+   if (eina_str_has_extension(file, ".o") || eina_str_has_extension(file, 
".so") ||
+       eina_str_has_extension(file, ".lo"))
+     return EINA_TRUE;
+   if (eina_str_has_extension(file, ".a") || eina_str_has_extension(file, 
".la"))
+     return EINA_TRUE;
+
+   return EINA_FALSE;
+}
+
+static void
+_cmake_build(void)
+{
+   chdir(edi_project_get());
+   ecore_exe_pipe_run("mkdir -p build && cd build && cmake 
-DCMAKE_EXPORT_COMPILE_COMMANDS=1 .. && make && cd ..",
+                              ECORE_EXE_PIPE_READ_LINE_BUFFERED | 
ECORE_EXE_PIPE_READ |
+                              ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | 
ECORE_EXE_PIPE_ERROR |
+                              ECORE_EXE_PIPE_WRITE | ECORE_EXE_USE_SH, NULL);
+}
+
+static void
+_cmake_test(void)
+{
+   chdir(edi_project_get());
+   ecore_exe_pipe_run("env CK_VERBOSITY=verbose make check", 
ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ |
+                              ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | 
ECORE_EXE_PIPE_ERROR |
+                              ECORE_EXE_PIPE_WRITE | ECORE_EXE_USE_SH, NULL);
+}
+
+static void
+_cmake_clean(void)
+{
+   chdir(edi_project_get());
+   ecore_exe_pipe_run("make clean", ECORE_EXE_PIPE_READ_LINE_BUFFERED | 
ECORE_EXE_PIPE_READ |
+                              ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | 
ECORE_EXE_PIPE_ERROR |
+                              ECORE_EXE_PIPE_WRITE | ECORE_EXE_USE_SH, NULL);
+}
+
+Edi_Build_Provider _edi_build_provider_cmake =
+   {"cmake", _cmake_project_supported, _cmake_file_hidden_is,
+     _cmake_build, _cmake_test, _cmake_clean};
diff --git a/src/lib/edi_build_provider_make.c 
b/src/lib/edi_build_provider_make.c
index e52eed1..fc0b279 100644
--- a/src/lib/edi_build_provider_make.c
+++ b/src/lib/edi_build_provider_make.c
@@ -28,7 +28,6 @@ _make_project_supported(const char *path)
 {
    return _relative_path_exists(path, "Makefile") ||
           _relative_path_exists(path, "configure") ||
-          _relative_path_exists(path, "CMakeLists.txt") || // TODO move this 
one to a cmake file
           _relative_path_exists(path, "autogen.sh");
 }
 
@@ -67,16 +66,6 @@ _make_build_configure(void)
 }
 
 static void
-_make_build_cmake(void)
-{
-   chdir(edi_project_get());
-   ecore_exe_pipe_run("mkdir -p build && cd build && cmake 
-DCMAKE_EXPORT_COMPILE_COMMANDS=1 .. && make && cd ..",
-                              ECORE_EXE_PIPE_READ_LINE_BUFFERED | 
ECORE_EXE_PIPE_READ |
-                              ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | 
ECORE_EXE_PIPE_ERROR |
-                              ECORE_EXE_PIPE_WRITE | ECORE_EXE_USE_SH, NULL);
-}
-
-static void
 _make_build_autogen(void)
 {
    chdir(edi_project_get());
@@ -93,8 +82,6 @@ _make_build(void)
      _make_build_make();
    else if (edi_project_file_exists("configure"))
      _make_build_configure();
-   else if (edi_project_file_exists("CMakeLists.txt"))
-     _make_build_cmake();
    else if (edi_project_file_exists("autogen.sh"))
      _make_build_autogen();
 }

-- 


Reply via email to