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; }
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; }
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; }
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); }
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"); } }
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; }
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; }