Added edi_build command line application for headless operation

This commit is contained in:
Andy Williams 2014-04-27 18:31:08 +01:00
parent 5eff36e8e8
commit 75d5ac790c
6 changed files with 130 additions and 1 deletions

1
.gitignore vendored
View File

@ -10,6 +10,7 @@
*.gcda
/src/bin/edi
/src/bin/edi_build
/src/tests/edi_tests
/data/desktop/edi.desktop
/doc/edi.1

View File

@ -1,6 +1,7 @@
2014-04-27 ajwillia.ms (Andy Williams)
* Add simple build functions
* Create an edi_build binary for command line building
2014-03-31 ajwillia.ms (Andy Williams)

3
NEWS
View File

@ -1,6 +1,9 @@
Changes since Edi project started:
----------------------------------
pre-1.0 phase 2 "Code aware editor"
- Simple build functions
- Added a command line builder application
pre-1.0 phase 1 "Basic text editing"

View File

@ -1,6 +1,6 @@
MAINTAINERCLEANFILES = Makefile.in
bin_PROGRAMS = edi
bin_PROGRAMS = edi edi_build
AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
-I$(top_builddir)/src/bin/ \
@ -18,6 +18,11 @@ edi_main.c
edi_LDADD = @EFL_LIBS@ $(top_builddir)/src/lib/libedi.la
edi_build_SOURCES = \
edi_build_main.c
edi_build_LDADD = @EFL_LIBS@ $(top_builddir)/src/lib/libedi.la
localedir = $(datadir)/locale
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@

117
src/bin/edi_build_main.c Normal file
View File

@ -0,0 +1,117 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
/* NOTE: Respecting header order is important for portability.
* Always put system first, then EFL, then your public header,
* and finally your private one. */
#include <Ecore_Getopt.h>
#include <Eio.h>
#include "gettext.h"
#include "Edi.h"
#include "edi_private.h"
#define COPYRIGHT "Copyright © 2014 Andy Williams <andy@andyilliams.me> and various contributors (see AUTHORS)."
static Eina_Bool
exe_data(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Exe_Event_Data *ev)
{
Ecore_Exe_Event_Data_Line *el;
for (el = ev->lines; el && el->line; el++)
fprintf(stdout, "%s\n", el->line);
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
exe_del(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Exe_Event_Data *ev)
{
ecore_main_loop_quit();
return ECORE_CALLBACK_DONE;
}
static const Ecore_Getopt optdesc = {
"edi_build",
"%prog [options]",
PACKAGE_VERSION,
COPYRIGHT,
"BSD with advertisement clause",
"The EFL IDE builder",
EINA_TRUE,
{
ECORE_GETOPT_LICENSE('L', "license"),
ECORE_GETOPT_COPYRIGHT('C', "copyright"),
ECORE_GETOPT_VERSION('V', "version"),
ECORE_GETOPT_HELP('h', "help"),
ECORE_GETOPT_SENTINEL
}
};
EAPI_MAIN int
main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
int args;
char path[PATH_MAX];
Eina_Bool quit_option = EINA_FALSE;
Ecore_Getopt_Value values[] = {
ECORE_GETOPT_VALUE_BOOL(quit_option),
ECORE_GETOPT_VALUE_BOOL(quit_option),
ECORE_GETOPT_VALUE_BOOL(quit_option),
ECORE_GETOPT_VALUE_BOOL(quit_option),
};
#if ENABLE_NLS
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
bind_textdomain_codeset(PACKAGE, "UTF-8");
textdomain(PACKAGE);
#endif
if (!ecore_init())
goto exit;
edi_init();
args = ecore_getopt_parse(&optdesc, values, argc, argv);
if (args < 0)
{
EINA_LOG_CRIT("Could not parse arguments.");
goto end;
}
else if (quit_option)
{
goto end;
}
getcwd(path, PATH_MAX);
edi_project_set(path);
if (!edi_builder_can_build())
{
fprintf(stderr, "Cowardly refusing to build unknown project type.\n");
ecore_shutdown();
goto exit;
}
ecore_event_handler_add(ECORE_EXE_EVENT_DATA, exe_data, NULL);
ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, exe_data, NULL);
ecore_event_handler_add(ECORE_EXE_EVENT_DEL, exe_del, NULL);
edi_builder_build();
ecore_main_loop_begin();
end:
edi_shutdown();
ecore_shutdown();
return EXIT_SUCCESS;
exit:
return EXIT_FAILURE;
}

View File

@ -33,6 +33,8 @@
extern "C" {
#endif
#include <edi_builder.h>
/**
* @file
* @brief These routines are used for Edi library interaction.