Beispiel #1
0
G_MODULE_EXPORT
gboolean on_menu_quit_activate(void)
{
  gint wx = 0, wy = 0, width = 0, height = 0;
  gchar buf[16];
  int i = 0;
  gint length = g_list_length(gummi->tabmanager->tabs);

  motion_pause_compile_thread(gummi->motion);
  for (i = 0; i < length; i++) {
    gtk_notebook_set_current_page(gui->tabmanagergui->notebook, i);
    tabmanager_set_active_tab(i);

    gint ret = check_for_save(g_active_editor);
    if (GTK_RESPONSE_YES == ret) {
      gui_save_file(g_active_tab, FALSE);
    }
    else if (GTK_RESPONSE_CANCEL == ret || GTK_RESPONSE_DELETE_EVENT == ret) {
      motion_resume_compile_thread(gummi->motion);
      return TRUE;
    }
  }

  /* Stop compile thread */
  if (length > 0) motion_stop_compile_thread(gummi->motion);

  gboolean is_maximized;
  g_object_get(gui->mainwindow, "is-maximized", &is_maximized, NULL);

  if (!is_maximized) {
    gtk_window_get_size(gui->mainwindow, &width, &height);
    gtk_window_get_position(gui->mainwindow, &wx, &wy);

    config_begin();
    config_set_value("mainwindow_x", g_ascii_dtostr(buf, 16, (double)wx));
    config_set_value("mainwindow_y", g_ascii_dtostr(buf, 16, (double)wy));
    config_set_value("mainwindow_w", g_ascii_dtostr(buf, 16, (double)width));
    config_set_value("mainwindow_h", g_ascii_dtostr(buf, 16, (double)height));
    config_commit();
  }

  gtk_main_quit();

  for (i = 0; i < length; i++)
    editor_destroy(GU_TAB_CONTEXT(g_list_nth_data
                                  (gummi->tabmanager->tabs, i))->editor);

  printf("   ___ \n"
         "  {o,o}    Thanks for using Gummi!\n"
         "  |)__)    I welcome your feedback at:\n"
         "  -\"-\"-    http://gummi.midnightcoding.org\n\n");
  return FALSE;
}
/* This is: php/Zend/configure.in

	This is going to be different from FLTK, mainly, since we have to be a tard bit different.
	Noamlly, Zend is configured within php's main configure.in. We are doing this independently, 
	so that we can do a components based build.
	
	Files that need to be generated:
		- php/zend/zend_config.h
		
	Notes:
		- Zend obviously has windows optimized files (.d/.dsp)!
		- It has some head-breaking checks. All added now, cDetect however might wants to adopt the dlsym check.
*/
int main(int argc, char** argv) {
	config_begin();
	ac_register();

	// We register some options here.
	// cachefile is very neccessary for our caching...
   	config_option_register_group("cDetect extra");
	config_option_register("cache",0,"cache.txt",0,"cDetect cache file to use.");
	config_option_register("out",0,"php/Zend/_zend_config.h",0,"Output config.h.");
	
	// Zend options
	config_option_register_group("Zend Engine");
	config_option_register(
		"with-zend-vm",0,"CALL",0,
		"Set virtual machine dispatch method. "
		"Type is one of \"CALL\", \"SWITCH\" or \"GOTO\""
	);
	config_option_register("enable-maintainer-zts",0,"no","yes","Enable thread safety - for code maintainers only!!");
	config_option_register("disable-inline-optimization",0,"no","yes","If building zend_execute.lo fails, try this switch");
	config_option_register("enable-debug",0,"no","yes","If building zend_execute.lo fails, try this switch");

	config_option_register("enable-zend-signals",0,"no","yes","Use zend signal handling");
	config_option_register("enable-debug",0,"no","yes","If building zend_execute.lo fails, try this switch");
	
	if(config_options(argc, argv)) {
	// Build stuff
	config_build_register("util/zend_config.h.in","php/Zend/zend_config.h");

		// The main logic happens here, just as always.
		zend_config_process();
		
		// Zend defines a top part, we define it too.
		// NOTE: It is obvious, that it wants to define this stuff if we are NOT on microsoft!
		// This check could be made simpler by FAR...
		config_tool_define(
			"ZEND_TOP",
			"#if defined(__GNUC__) && __GNUC__ >= 4\n"
			"# define ZEND_API __attribute__ ((visibility(\"default\")))\n"
			"# define ZEND_DLEXPORT __attribute__ ((visibility(\"default\")))\n"
			"#else\n"
			"# define ZEND_API\n"
			"# define ZEND_DLEXPORT\n"
			"#endif\n"
			"\n"
			"#define ZEND_DLIMPORT\n"
			"\n"
			"/* Define if you want to enable memory limit support */\n"
			"#define MEMORY_LIMIT 0\n"
		);
		
		// Aaaand of course, a bottom.
		// Again, this could be simplified.
		config_tool_define(
			"ZEND_BOTTOM",
			"#ifndef ZEND_ACCONFIG_H_NO_C_PROTOS\n"
			"\n"
			"#ifdef HAVE_STDLIB_H\n"
			"# include <stdlib.h>\n"
			"#endif\n"
			"\n"
			"#ifdef HAVE_SYS_TYPES_H\n"
			"# include <sys/types.h>\n"
			"#endif\n"
			"\n"
			"#ifdef HAVE_SYS_SELECT_H\n"
			"#include <sys/select.h>\n"
			"#endif\n"
			"\n"
			"#ifdef HAVE_IEEEFP_H\n"
			"# include <ieeefp.h>\n"
			"#endif\n"
			"\n"
			"#ifdef HAVE_STRING_H\n"
			"# include <string.h>\n"
			"#else\n"
			"# include <strings.h>\n"
			"#endif\n"
			"\n"
			"#if ZEND_BROKEN_SPRINTF\n"
			"int zend_sprintf(char *buffer, const char *format, ...);\n"
			"#else\n"
			"# define zend_sprintf sprintf\n"
			"#endif\n"
			"\n"
			"#include <math.h>\n"
			"\n"
			"/* To enable the is_nan, is_infinite and is_finite PHP functions */\n"
			"#ifdef NETWARE\n"
			"	#define HAVE_ISNAN 1\n"
			"	#define HAVE_ISINF 1\n"
			"	#define HAVE_ISFINITE 1\n"
			"#endif\n"
			"\n"
			"#ifndef zend_isnan\n"
			"#ifdef HAVE_ISNAN\n"
			"#define zend_isnan(a) isnan(a)\n"
			"#elif defined(HAVE_FPCLASS)\n"
			"#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))\n"
			"#else\n"
			"#define zend_isnan(a) 0\n"
			"#endif\n"
			"#endif\n"
			"\n"
			"#ifdef HAVE_ISINF\n"
			"#define zend_isinf(a) isinf(a)\n"
			"#elif defined(INFINITY)\n"
			"/* Might not work, but is required by ISO C99 */\n"
			"#define zend_isinf(a) (((a)==INFINITY)?1:0)\n"
			"#elif defined(HAVE_FPCLASS)\n"
			"#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))\n"
			"#else\n"
			"#define zend_isinf(a) 0\n"
			"#endif\n"
			"\n"
			"#ifdef HAVE_FINITE\n"
			"#define zend_finite(a) finite(a)\n"
			"#elif defined(HAVE_ISFINITE) || defined(isfinite)\n"
			"#define zend_finite(a) isfinite(a)\n"
			"#elif defined(fpclassify)\n"
			"#define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0)\n"
			"#else\n"
			"#define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1)\n"
			"#endif\n"
			"\n"
			"#endif /* ifndef ZEND_ACCONFIG_H_NO_C_PROTOS */\n"
			"\n"
			"#ifdef NETWARE\n"
			"#ifdef USE_WINSOCK\n"
			"#/*This detection against winsock is of no use*/ undef HAVE_SOCKLEN_T\n"
			"#/*This detection against winsock is of no use*/ undef HAVE_SYS_SOCKET_H\n"
			"#endif\n"
			"#endif\n"
		);
		
		// Do some checks
		ac_header_stdc();
		zend_mature_stdc();
		ac_type_size_t();
		zend_type_checks();
		ac_header_mmap_anonymous();
		ac_header_dirent();
		
		config_function_check_library("dlopen", "dl");
		config_function_check("vprintf");
		config_function_check("memcmp");
		config_function_check("alloca");
		config_function_check("memcpy");
		config_function_check("strdup");
		config_function_check("getpid");
		config_function_check("kill");
		config_function_check("strtod");
		config_function_check("strtol");
		config_function_check("finite");
		config_function_check("fpclass");
		config_function_check("sigsetjmp");
		config_function_check("finite");
		config_function_check("isfinite");
		config_function_check("isinf");
		config_function_check("isnan");
		config_function_check("sigaction");
		
		// An OS check.
		#if __APPLE__ || __DARWIN__
		config_macro_define("DARWIN","1");
		#endif
		
		// Complex checks
		zend_dlsym_check();
		zend_mm_test();
		zend_mmap_zero();
	}
	config_end();
}
// Cool. TSRM is uber-easy. Lets take advantage of this ~100 configure.in.
// Generate: php/TSRM/tsrm_config.h
int main(int argc, char** argv){
	config_begin();
	ac_register();
	
   	config_option_register_group("cDetect extra");
	config_option_register("cache",0,"cache.txt",0,"cDetect cache file to use.");
	config_option_register("out",0,"php/TSRM/_tsrm_config.h",0,"Output config.h.");
	
	// TSRM options
	config_option_register_group("TSRM: ThreadSafe Resource Management");
	config_option_register("with-tsrm-pth",0,"no",0,"Use GNU Pth (supply PATH or \"yes\")");
	config_option_register("with-tsrm-st",0,"no",0,"Use SGI's State Threads (supply PATH or \"yes\")");
	config_option_register("with-tsrm-pthreads",0,"no","yes","Use POSIX pthreads (Default)");
	config_option_register("with-tsrm-zts",0,"no","yes","Use POSIX pthreads (Default)");
	
	if(config_options(argc, argv)) {
		// And encore!
		config_cache_register( config_option_get("cache") );
		config_header_register( config_option_get("out") );
		
		// options.
		if( // If neither of these are set, use the default.
			config_equal( config_option_get("with-tsrm-pth"), "no" )
			|| config_equal( config_option_get("with-tsrm-st"), "no" )
		) {
			config_option_set("with-tsrm-pthreads","yes");
			config_macro_define("PTHREADS","1");
		}
		if(config_equal( config_option_get("with-tsrm-zts"), "yes" )) {
			config_macro_define("ZTS","1");
		}
		
		// Header
		ac_header_stdc();
		ac_header_dirent();
		config_header_check("utime.h");
		config_header_check("dirent.h");
		config_header_check("stdarg.h");
		config_header_check("alloca.h");
		config_header_check("unistd.h");
		config_header_check("limits.h");
		config_header_check("stdlib.h");
		config_header_check("stdarg.h");
		config_header_check("string.h");
		config_header_check("float.h");
		config_header_check("st.h");
		
		// Function
		config_function_check("sigprocmask");
		
		// Customs
		config_function_check_library("pthread_create","pthread")
			|| config_macro_define("PTHREADS","1");
		
		// Write a bit of extra chunk...
		char* tsrm_config_h = "php/TSRM/tsrm_config.h";
		config_report("Writing %s\n", tsrm_config_h);
		cdetect_string_t src = cdetect_string_format(
			"#include \"_tsrm_config.h\"\n"
			"#ifdef HAVE_STDLIB_H\n"
			"#include <stdlib.h>\n"
			"#endif\n"
		);
		cdetect_bool_t sc = cdetect_file_overwrite(tsrm_config_h, src);
		if(sc != CDETECT_TRUE) {
			config_report("!! Error: Could not write php/TSRM/tsrm_config.h!\n");
			config_abort();
		}
		cdetect_string_destroy(src);
	}
	config_end();
}