mail-notification

Fork of Jean-Yves Lefort's mail-notification, a tray icon to notify of new mail
git clone https://code.djc.id.au/git/mail-notification/

jbsrc/lib/src/extras/jb-openssl.c (2969B) - raw

      1 /*
      2  * JB, the Jean-Yves Lefort's Build System
      3  * Copyright (C) 2008 Jean-Yves Lefort <jylefort@brutele.be>
      4  *
      5  * This program is free software; you can redistribute it and/or modify
      6  * it under the terms of the GNU General Public License as published by
      7  * the Free Software Foundation; either version 3 of the License, or
      8  * (at your option) any later version.
      9  *
     10  * This program is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  * GNU General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU General Public License along
     16  * with this program; if not, write to the Free Software Foundation, Inc.,
     17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     18  */
     19 
     20 #include <stdio.h>
     21 #include "jb-tests.h"
     22 #include "jb-variable.h"
     23 #include "jb-util.h"
     24 
     25 #define JB_OPENSSL_CFLAGS	NULL
     26 #define JB_OPENSSL_CPPFLAGS	NULL
     27 #define JB_OPENSSL_LDFLAGS	NULL
     28 #define JB_OPENSSL_LIBS		"-lssl -lcrypto"
     29 
     30 gboolean
     31 jb_openssl_check (const char *minversion)
     32 {
     33   gboolean result;
     34   char *cppflags;
     35   int major;
     36   int minor;
     37   int fix;
     38   int patch = 0;
     39   char cpatch;
     40 
     41   if (! minversion)
     42     /* the OPENSSL_VERSION_NUMBER format we use appeared in 0.9.5b */
     43     minversion = "0.9.5b";
     44 
     45   jb_message_checking("for OpenSSL >= %s", minversion);
     46 
     47   if (sscanf(minversion, "%d.%d.%d%c", &major, &minor, &fix, &cpatch) < 3)
     48     g_error("invalid version string `%s'", minversion);
     49   if (cpatch)
     50     patch = cpatch - 96; /* letter -> number */
     51 
     52   cppflags = g_strdup_printf("-DJB_OPENSSL_MAJOR=%i -DJB_OPENSSL_MINOR=%i -DJB_OPENSSL_FIX=%i -DJB_OPENSSL_PATCH=%i",
     53 			     major, minor, fix, patch);
     54 
     55   result = jb_test_run_string("#include <openssl/opensslv.h>\n"
     56 			      "int main () {\n"
     57 			      "  if (OPENSSL_VERSION_NUMBER <\n"
     58 			      "      (JB_OPENSSL_MAJOR << 28)\n"
     59 			      "      + (JB_OPENSSL_MINOR << 20)\n"
     60 			      "      + (JB_OPENSSL_FIX << 12)\n"
     61 			      "      + (JB_OPENSSL_PATCH << 4))\n"
     62 			      "    exit(1); /* version too old */\n"
     63 			      "  exit(0); /* ok */\n"
     64 			      "}\n",
     65 			      JB_OPENSSL_CFLAGS,
     66 			      cppflags,
     67 			      JB_OPENSSL_LDFLAGS,
     68 			      JB_OPENSSL_LIBS);
     69 
     70   g_free(cppflags);
     71 
     72   jb_message_result_bool(result);
     73 
     74   if (result)
     75     jb_variable_set_package_flags("openssl",
     76 				  JB_OPENSSL_CFLAGS,
     77 				  JB_OPENSSL_CPPFLAGS,
     78 				  JB_OPENSSL_LDFLAGS,
     79 				  JB_OPENSSL_LIBS);
     80 
     81   return result;
     82 }
     83 
     84 gboolean
     85 jb_openssl_check_mt (void)
     86 {
     87   gboolean result;
     88 
     89   jb_message_checking("whether OpenSSL supports multi-threading");
     90 
     91   result = jb_test_compile_string("#define OPENSSL_THREAD_DEFINES\n"
     92 				  "#include <openssl/opensslconf.h>\n"
     93 				  "int main () {\n"
     94 				  "#ifndef OPENSSL_THREADS\n"
     95 				  "#error \"no thread support\"\n"
     96 				  "#endif\n"
     97 				  "}\n",
     98 				  JB_OPENSSL_CFLAGS,
     99 				  JB_OPENSSL_CPPFLAGS);
    100 
    101   jb_message_result_bool(result);
    102 
    103   return result;
    104 }