示例#1
0
static void
gnome_help_check_dir (const char *name,
		      const char *description,
		      const char *scrollkeeper_config_arg)
{
  const char *dir;
  char *result;

  dir = jb_variable_get_string(name);
  if (strcmp(dir, "autodetect"))
    return;

  jb_require_program("scrollkeeper-config");

  jb_message_checking("for the %s", description);

  if (jb_exec_expand(&result, NULL, "$scrollkeeper-config $arg",
		     "arg", scrollkeeper_config_arg,
		     NULL))
    {
      jb_message_result_string(result);
      jb_variable_set_string(name, result);
    }
  else
    {
      jb_message_result_string("not found");
      jb_error("unable to autodetect the %s", description);
    }

  g_free(result);
}
gboolean
jb_evolution_plugin_check (const char *minversion)
{
  char *packages;
  gboolean result;

  if (! minversion)
    minversion = "2.12";

  packages = g_strdup_printf("evolution-plugin-3.0 >= %s evolution-shell-3.0 libemail-engine", minversion);
  result = jb_check_packages("Evolution", "evolution-plugin", packages);
  g_free(packages);

  if (! result)
    return FALSE;

  if (! strcmp(jb_variable_get_string("evolution-plugin-dir"), "autodetect"))
    {
      char *plugindir;

      jb_message_checking("for the Evolution plugin directory");
      plugindir = jb_get_package_variable("evolution-plugin-3.0", "plugindir");
      jb_message_result_string(plugindir ? plugindir : "not found");

      if (! plugindir)
	return FALSE;

      jb_variable_set_string("evolution-plugin-dir", plugindir);
      g_free(plugindir);
    }

  return jb_check_packages("Evolution", "camel", "camel-1.2");
}
示例#3
0
/* the program must have been registered with jb_register_program() */
gboolean
jb_check_program (const char *name)
{
  static GHashTable *checked_programs = NULL;
  JBVariable *variable;
  const char *program;
  gboolean result = FALSE;

  g_return_val_if_fail(name != NULL, FALSE);

  /* do not check for the same program twice */
  if (checked_programs != NULL)
    {
      gpointer checked_result;

      if (g_hash_table_lookup_extended(checked_programs, name, NULL, &checked_result))
	return GPOINTER_TO_INT(checked_result);
    }
  else
    checked_programs = g_hash_table_new(g_str_hash, g_str_equal);

  jb_message_checking("for %s", name);

  variable = jb_variable_get_variable_or_error(name);

  program = g_value_get_string(&variable->value);

  if (variable->user_set)
    {
      char *absolute_program;

      absolute_program = g_find_program_in_path(program);
      if (absolute_program != NULL)
	{
	  jb_message_result_string(absolute_program);
	  g_value_take_string(&variable->value, absolute_program);
	  result = TRUE;
	}
      else
	{
	  jb_message_result_string_format("not found (\"%s\" was specified but was not found, is a directory or is not executable)", program);
	  g_value_set_string(&variable->value, NULL);
	}
    }
  else
    {
      if (program != NULL)
	{
	  jb_message_result_string(program);
	  result = TRUE;
	}
      else
	jb_message_result_string("not found");
    }

  g_hash_table_insert(checked_programs, g_strdup(name), GINT_TO_POINTER(result));

  return result;
}
示例#4
0
gboolean
lm_glibc_check (void)
{
  gboolean result;

  jb_message_checking("for the GNU C library");
  result = jb_test_compile("jbsrc/lm-glibc-test.c", NULL, NULL);
  jb_message_result_bool(result);

  return result;
}
示例#5
0
gboolean
jb_openssl_check (const char *minversion)
{
  gboolean result;
  char *cppflags;
  int major;
  int minor;
  int fix;
  int patch = 0;
  char cpatch;

  if (! minversion)
    /* the OPENSSL_VERSION_NUMBER format we use appeared in 0.9.5b */
    minversion = "0.9.5b";

  jb_message_checking("for OpenSSL >= %s", minversion);

  if (sscanf(minversion, "%d.%d.%d%c", &major, &minor, &fix, &cpatch) < 3)
    g_error("invalid version string `%s'", minversion);
  if (cpatch)
    patch = cpatch - 96; /* letter -> number */

  cppflags = g_strdup_printf("-DJB_OPENSSL_MAJOR=%i -DJB_OPENSSL_MINOR=%i -DJB_OPENSSL_FIX=%i -DJB_OPENSSL_PATCH=%i",
			     major, minor, fix, patch);

  result = jb_test_run_string("#include <openssl/opensslv.h>\n"
			      "int main () {\n"
			      "  if (OPENSSL_VERSION_NUMBER <\n"
			      "      (JB_OPENSSL_MAJOR << 28)\n"
			      "      + (JB_OPENSSL_MINOR << 20)\n"
			      "      + (JB_OPENSSL_FIX << 12)\n"
			      "      + (JB_OPENSSL_PATCH << 4))\n"
			      "    exit(1); /* version too old */\n"
			      "  exit(0); /* ok */\n"
			      "}\n",
			      JB_OPENSSL_CFLAGS,
			      cppflags,
			      JB_OPENSSL_LDFLAGS,
			      JB_OPENSSL_LIBS);

  g_free(cppflags);

  jb_message_result_bool(result);

  if (result)
    jb_variable_set_package_flags("openssl",
				  JB_OPENSSL_CFLAGS,
				  JB_OPENSSL_CPPFLAGS,
				  JB_OPENSSL_LDFLAGS,
				  JB_OPENSSL_LIBS);

  return result;
}
示例#6
0
gboolean
jb_check_packages (const char *group_name,
		   const char *varprefix,
		   const char *packages)
{
  char *quoted_packages;
  char *cflags = NULL;
  char *libs = NULL;
  char *error = NULL;
  gboolean status;

  g_return_val_if_fail(group_name != NULL, FALSE);
  g_return_val_if_fail(varprefix != NULL, FALSE);
  g_return_val_if_fail(packages != NULL, FALSE);
  g_return_val_if_fail(jb_feature_is_enabled(&jb_pkg_config_feature), FALSE);

  jb_require_program("pkg-config");

  jb_message_checking("for %s", group_name);

  quoted_packages = g_shell_quote(packages);

  status = jb_exec_expand(&cflags, NULL, "$pkg-config --cflags $packages",
			  "packages", quoted_packages,
			  NULL)
    && jb_exec_expand(&libs, NULL, "$pkg-config --libs $packages",
		      "packages", quoted_packages,
		      NULL);

  if (status)
    jb_variable_set_package_flags(varprefix, cflags, NULL, NULL, libs);
  else
    jb_exec_expand(NULL, &error, "$pkg-config --print-errors $packages",
		   "packages", quoted_packages,
		   NULL);

  g_free(quoted_packages);
  g_free(cflags);
  g_free(libs);

  jb_message_result_bool(status);

  if (error != NULL)
    {
      jb_warning("%s", error);
      g_free(error);
    }

  return status;
}
示例#7
0
void
jb_check_host_system (void)
{
  char *output;
  gboolean status = FALSE;

  if (jb_variable_get_variable("host-cpu") != NULL)
    return;			/* already checked */

  jb_message_checking("the host system type");

  if (jb_exec(&output, NULL, "jbsrc/tools/config.sub `jbsrc/tools/config.guess`"))
    {
      char **fields;
      int len;

      fields = g_strsplit(output, "-", 0);
      len = g_strv_length(fields);

      if (len == 3)
	{
	  jb_variable_set_string("host-cpu", fields[0]);
	  jb_variable_set_string("host-manufacturer", fields[1]);
	  jb_variable_set_string("host-kernel", NULL);
	  jb_variable_set_string("host-os", fields[2]);
	  status = TRUE;
	}
      else if (len == 4)
	{
	  jb_variable_set_string("host-cpu", fields[0]);
	  jb_variable_set_string("host-manufacturer", fields[1]);
	  jb_variable_set_string("host-kernel", fields[2]);
	  jb_variable_set_string("host-os", fields[3]);
	  status = TRUE;
	}

      g_strfreev(fields);
    }

  if (status)
    jb_message_result_string(output);
  else
    jb_message_result_string("unknown");

  g_free(output);

  if (! status)
    jb_error("unable to determine host system type");
}
示例#8
0
static void
gob2_configure (void)
{
  const char *minversion_string;
  Version minversion;
  char *error = NULL;

  minversion_string = jb_variable_get_string("gob2-minversion");
  if (! parse_version(minversion_string, &minversion))
    g_error("invalid gob2-minversion \"%s\"", minversion_string);

  if (jb_check_program("gob2"))
    {
      char *output;
      gboolean result = FALSE;

      jb_message_checking("for gob2 >= %s", minversion_string);

      if (jb_exec_expand(NULL, &output, "$gob2 --version", NULL))
	{
	  char *version_string;
	  Version version;

	  if (parse_gob2_version_output(output, &version_string, &version))
	    {
	      if (version_to_int(&version) >= version_to_int(&minversion))
		result = TRUE;
	      else
		error = g_strdup_printf("One or more .gob source files were modified but the version of gob2 (%s) is too old. Please install gob2 >= %s and run configure again.",
					version_string,
					minversion_string);
	    }
	  else
	    error = get_gob2_not_found_error(minversion_string);
	}
      else
	error = get_gob2_not_found_error(minversion_string);

      g_free(output);

      jb_message_result_bool(result);
    }
  else
    error = get_gob2_not_found_error(minversion_string);

  jb_variable_set_string("gob2-error", error);
  g_free(error);
}
示例#9
0
static void
intltool_configure (void)
{
  jb_require_program("perl");

  if (jb_intltool_use_xml)
    {
      gboolean result;

      jb_message_checking("for XML::Parser");
      result = jb_exec_expand(NULL, NULL, "$perl -e 'require XML::Parser'", NULL);
      jb_message_result_bool(result);

      if (! result)
	jb_error("intltool requires the XML::Parser Perl module");
    }
}
示例#10
0
gboolean
jb_openssl_check_mt (void)
{
  gboolean result;

  jb_message_checking("whether OpenSSL supports multi-threading");

  result = jb_test_compile_string("#define OPENSSL_THREAD_DEFINES\n"
				  "#include <openssl/opensslconf.h>\n"
				  "int main () {\n"
				  "#ifndef OPENSSL_THREADS\n"
				  "#error \"no thread support\"\n"
				  "#endif\n"
				  "}\n",
				  JB_OPENSSL_CFLAGS,
				  JB_OPENSSL_CPPFLAGS);

  jb_message_result_bool(result);

  return result;
}
示例#11
0
gboolean
jb_check_functions (const char *functions, const char *libname)
{
  char **functions_array;
  int i;
  GString *checking_message;
  GString *program;
  char *libs = NULL;
  gboolean result;

  g_return_val_if_fail(functions != NULL, FALSE);

  functions_array = g_strsplit(functions, " ", 0);

  checking_message = g_string_new("for ");

  for (i = 0; functions_array[i] != NULL; i++)
    {
      if (i != 0)
	g_string_append_printf(checking_message, ", ");

      g_string_append_printf(checking_message, "%s()", functions_array[i]);
    }

  if (libname)
    g_string_append_printf(checking_message, " in -l%s", libname);
  else
    g_string_append(checking_message, " in libc");

  jb_message_checking("%s", checking_message->str);
  g_string_free(checking_message, TRUE);

  program = g_string_new(NULL);

  /*
   * Quoting c.m4 in autoconf: "Override any GCC internal prototype to
   * avoid an error. Use char because int might match the return type
   * of a GCC builtin and then its argument prototype would still
   * apply."
   */
  for (i = 0; functions_array[i] != NULL; i++)
    g_string_append_printf(program, "char %s ();\n", functions_array[i]);

  g_string_append(program, "int main () {");

  for (i = 0; functions_array[i] != NULL; i++)
    g_string_append_printf(program, " %s();", functions_array[i]);

  g_string_append(program, " }\n");

  if (libname)
    libs = g_strdup_printf("-l%s", libname);

  result = jb_test_link_string(program->str, NULL, NULL, NULL, libs);

  g_string_free(program, TRUE);
  g_free(libs);

  jb_message_result_bool(result);

  return result;
}