예제 #1
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;
}
예제 #2
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;
}
예제 #3
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;
}
예제 #4
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);
}
예제 #5
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");
    }
}
예제 #6
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;
}
예제 #7
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;
}