Fixed.  This needs an update both in buildtools and MonetDB5.

On 2007-10-14 12:10, Stefan Manegold wrote:
> Niels,
> 
> thanks for the fix --- unfortunately a compile from scratch fails as
> follows:
> ========
> make[5]: Entering directory 
> /net/corona.ins.cwi.nl/export/scratch0/manegold/Monet/Testing/Stable/build.--enable-strict_--disable-optimize_--enable-debug_--enable-assert/MonetDB5/src/tools'
> /bin/sh ../../libtool --tag=CC --mode=link gcc  -Wall -Wextra -std=c99 -g 
> -Werror-implicit-function-declaration -Werror -Wpointer-arith 
> -Wdeclaration-after-statement -Wundef -Wp,-D_FORTIFY_SOURCE=2  -D_REENTRANT   
> -o mserver5 -export-dynamic  mserver5.o ../mal/libmal.la  
> -L/ufs/manegold/_/scratch0/Monet/Testing/Stable/prefix.--enable-strict_--disable-optimize_--enable-debug_--enable-assert/lib64
>  -lbat -lmutils -lstream  -lz -lbz2  -lpthread -ldl -lpcre -lssl -lcrypto 
> -lcrypt 
> gcc -Wall -Wextra -std=c99 -g -Werror-implicit-function-declaration -Werror 
> -Wpointer-arith -Wdeclaration-after-statement -Wundef -Wp,-D_FORTIFY_SOURCE=2 
> -D_REENTRANT -o .libs/mserver5 mserver5.o -Wl,--export-dynamic  
> ../mal/.libs/libmal.so 
> -L/ufs/manegold/_/scratch0/Monet/Testing/Stable/prefix.--enable-strict_--disable-optimize_--enable-debug_--enable-assert/lib64
>  -lreadline -ltermcap 
> /ufs/manegold/_/scratch0/Monet/Testing/Stable/prefix.--enable-strict_--disable-optimize_--enable-debug_--enable-assert/lib64/libbat.so
>  
> /ufs/manegold/_/scratch0/Monet/Testing/Stable/prefix.--enable-strict_--disable-optimize_--enable-debug_--enable-assert/lib64/libstream.so
>  
> /ufs/manegold/_/scratch0/Monet/Testing/Stable/prefix.--enable-strict_--disable-optimize_--enable-debug_--enable-assert/lib64/libmutils.so
>  -lz -lbz2 -lpthread -ldl -lpcre -lssl -lcrypto -lcrypt  -Wl,--rpath 
> -Wl,/ufs/manegold/_/scratch0/Monet/Testing/Stable/prefix.--enable-strict_--disable-optimize_--enable-debug_--enable-asse
rt
>  /lib64
> mserver5.o: In function `main':
> /ufs/manegold/_/scratch0/Monet/Testing/Stable/source/MonetDB5/src/tools/mserver5.mx:452:
>  undefined reference to `monet_version'
> collect2: ld returned 1 exit status
> make[5]: *** [mserver5] Error 1
> ========
> 
> It seems that autogen does not handle .c.in files properly, at least not in
> "SOURCE =" lists ...
> 
> Stefan
> 
> On Sun, Oct 14, 2007 at 08:20:25AM +0000, Niels Nes wrote:
>> Update of /cvsroot/monetdb/MonetDB5/src/tools
>> In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv25912/src/tools
>>
>> Modified Files:
>>       Tag: MonetDB_5-2
>>      Makefile.ag 
>> Added Files:
>>       Tag: MonetDB_5-2
>>      monet_version.c.in monet_version.h mserver5.mx 
>> Removed Files:
>>       Tag: MonetDB_5-2
>>      mserver5.mx.in 
>> Log Message:
>> tablet fixed null pointer dereference 
>> split out the monet_version code as it needs configure to set variables.
>> (mx.in's are now not allowed anymore)
>>
>>
>> Index: Makefile.ag
>> ===================================================================
>> RCS file: /cvsroot/monetdb/MonetDB5/src/tools/Makefile.ag,v
>> retrieving revision 1.54.2.1
>> retrieving revision 1.54.2.2
>> diff -u -d -r1.54.2.1 -r1.54.2.2
>> --- Makefile.ag      3 Oct 2007 09:45:59 -0000       1.54.2.1
>> +++ Makefile.ag      14 Oct 2007 08:20:22 -0000      1.54.2.2
>> @@ -19,7 +19,7 @@
>>  INCLUDES = -I../mal $(CLIENTS_INCS) $(MONETDB_INCS) $(OPENSSL_INCS) 
>> $(PCRE_CFLAGS)
>>  
>>  bin_mserver5 = {
>> -    SOURCES = mserver5.mx.in
>> +    SOURCES = mserver5.mx monet_version.h monet_version.c.in
>>      LIBS = ../mal/libmal @SHARED_LIBS@ $(MONETDB_LIBS) \
>>                  -lbat -lmutils -lstream \
>>                  $(SOCKET_LIBS) $(Z_LIBS) $(BZ_LIBS) \
>>
>> --- NEW FILE: monet_version.h ---
>> #ifndef MONETDB_VERSION_H
>> #define MONETDB_VERSION_H
>>
>> extern void monet_version(void);
>>
>> #endif /* MONETDB_VERSION_H */
>>
>> --- NEW FILE: mserver5.mx ---
>> @' The contents of this file are subject to the MonetDB Public License
>> @' Version 1.1 (the "License"); you may not use this file except in
>> @' compliance with the License. You may obtain a copy of the License at
>> @' http://monetdb.cwi.nl/Legal/MonetDBLicense-1.1.html
>> @'
>> @' Software distributed under the License is distributed on an "AS IS"
>> @' basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
>> @' License for the specific language governing rights and limitations
>> @' under the License.
>> @'
>> @' The Original Code is the MonetDB Database System.
>> @'
>> @' The Initial Developer of the Original Code is CWI.
>> @' Portions created by CWI are Copyright (C) 1997-2007 CWI.
>> @' All Rights Reserved.
>>
>> @f mserver5
>> @a M.L. Kersten, P. Boncz, Niels Nes, Stefan Manegold, Sjoerd Mullender
>> @v 5.0
>> @* The Monet Server
>> The program @code{ mserver5} is the MonetDB server. It is started by the 
>> database
>> administrator.  The console is primarilly meant to further initialize
>> the server, such as starting internet listeners.
>>
>> @+ Manual Page
>> The server is a multithreaded program. There is one system thread, and for
>> each service, e.g. a client session or transaction service,
>> there is one worker thread.
>> As a default, the server also starts the internet listener thread,
>> on the port number specified in the parameter file.
>>
>> @- Usage
>> @verbatim
>> usage: mserver5 [options] [scripts]
>>     --dbname=<database_name>
>>     --dbfarm=<directory>
>>     --dbinit=<stmt>           Server prepare statement
>>     --config=<config_file>
>>     --debug=<number>          trace server actions[0]
>>     --daemon=yes|no           run in background [no]
>>     --set <option>=<value>    set environment value
>>     --help                    this list of options
>>     --version                 version and compile time info
>> @end verbatim
>>
>> The server options have the following meaning:
>> @table @code
>> @item --dbname <db-name>
>>      open the database <db-name>.
>> @item --config <config-file>
>>      where to find the environment settings
>> @item --dbinit <stmt>
>>         execute the statement first.
>> @end itemize
>>
>> @{
>> @+ Implementation
>> @h
>> #ifndef _MONET_GLOBAL_H_
>> #define _MONET_GLOBAL_H_
>> #include "mal_config.h"
>> #include "monet_options.h"
>> #include "mal.h"
>> #include "mal_session.h"
>> #include "mal_import.h"
>> #include "mal_client.h"
>> #include "mal_function.h"
>>
>> /* #define MONET_GLOBAL_DEBUG */
>> #endif /* _MONET_GLOBAL_H_ */
>> @c
>> #include "mal_config.h"
>> #include "mserver5.h"
>> #include "mal_authorize.h"
>> #include "mal_sabaoth.h"
>> #include <stdio.h>
>> #include <errno.h>
>> #include <string.h> /* strerror */
>> #include <locale.h>
>> #include "monet_version.h"
>>
>> #ifdef _CRTDBG_MAP_ALLOC
>> /* Windows only:
>>    our definition of new and delete clashes with the one if
>>    _CRTDBG_MAP_ALLOC is defined.
>> */
>> #undef _CRTDBG_MAP_ALLOC
>> #endif
>>
>> #if defined(_MSC_VER) && _MSC_VER >= 1400
>> #define getcwd _getcwd
>> #endif
>> @-
>> The architecture is setup to handle multiple streams of requests.
>> The first thread started represents the server. It reads from standard input
>> and writes to standard input. This is also a way to recognize the server
>> actions. 
>> To start the server in the background one should use the argument 
>> -background.
>> This closes standard input. Direct execution in the background may cause
>> the server to hang in stdio for input from the terminal.
>> @ 
>> The server thread started remains in existence until all other threads die.
>> The server is stopped by cntrl-D or receiving the quit command.
>> @
>>
>> @c
>> static int malloc_init = 1;
>> /* NEEDED? */
>> #if defined(_MSC_VER) && defined(__cplusplus)
>> #include <eh.h>
>> void
>> mserver_abort()
>> {
>>      fprintf(stderr, "\n! mserver_abort() was called by terminate(). !\n");
>>      fflush(stderr);
>>      MT_global_exit(0);
>> }
>> #endif
>>
>> void
>> usage(char *prog)
>> {
>>      fprintf(stderr, "Usage: %s [options] [scripts]\n", prog);
>>      fprintf(stderr, "    --dbname=<database_name> \n");
>>      fprintf(stderr, "    --dbfarm=<database_directory> \n");
>>     fprintf(stderr,"     --version                 \n");
>>     fprintf(stderr,"     --help        for more details\n");
>>      exit(0);
>> }
>> void
>> usage2(char *prog)
>> {
>>      fprintf(stderr, "Usage: %s [options] [scripts]\n", prog);
>>      fprintf(stderr, "    --dbname=<database_name> \n");
>>      fprintf(stderr, "    --dbfarm=<directory> \n");
>>      fprintf(stderr, "    --dbinit=<stmt>           Server prepare 
>> statement\n");
>>      fprintf(stderr, "    --config=<config_file> \n");
>>      fprintf(stderr, "    --daemon=yes|no           run in background 
>> [no]\n");
>>      fprintf(stderr, "    --set <option>=<value>    set environment 
>> value\n");
>>      fprintf(stderr, "    --help                    this list of options 
>> \n");
>>     fprintf(stderr, "    --version                 version and compile time 
>> info\n");
>>
>>      fprintf(stderr,"The debug options:\n");
>>      fprintf(stderr,"     --threads\n");
>>      fprintf(stderr,"     --memory\n");
>>      fprintf(stderr,"     --properties\n");
>>      fprintf(stderr,"     --io\n");
>>      fprintf(stderr,"     --transactions\n");
>>      fprintf(stderr,"     --modules\n");
>>      fprintf(stderr,"     --algorithms\n");
>>      fprintf(stderr,"     --xproperties\n");
>>      fprintf(stderr,"     --performance\n");
>>      fprintf(stderr,"     --debug=<bitmask>\n");
>>
>>      exit(0);
>> }
>>
>> @-
>> A welcoming message is displayed to inform the user about recent
>> changes. 
>> @c
>> void
>> monet_hello(opt *set, int setlen)
>> {
>> #ifdef STATIC
>>      char *linkinfo = "statically";
>> #else
>>      char *linkinfo = "dynamically";
>> #endif
>>      char *msg = mo_find_option(set, setlen, "monet_welcome");
>>
>>      if (msg && strcmp(msg, "yes") == 0) {
>>              printf("# MonetDB server v" VERSION ", based on kernel v%s\n",
>>                              GDKversion());
>>              printf("# Serving database '%s'\n", GDKgetenv("gdk_dbname"));
>>              printf("# Compiled for %s/" SZFMT "bit with " SZFMT "bit OIDs 
>> %s linked\n", HOST, (size_t) (sizeof(ptr) * 8), (size_t) (sizeof(oid) * 8), 
>> linkinfo);
>> #ifdef MONET_GLOBAL_DEBUG
>>              printf("# Configuration:%s\n", GDKgetenv("config"));
>>              printf("# Database farm:%s\n", GDKgetenv("gdk_dbfarm"));
>> #endif
>>              printf("# Copyright (c) 1993-2007 CWI, all rights reserved\n");
>>              printf("# Visit http://monetdb.cwi.nl/ for further 
>> information\n");
>>      }
>> }
>>
>> @-
>> Version information, and compile time options.
>> @c
>> #ifdef HAVE_LIBPCRE
>> #include <pcre.h>
>> #endif
>> #ifdef HAVE_OPENSSL
>> #include <openssl/opensslv.h>
>> #endif
>>
>> str
>> absolute_path(str s)
>> {
>>      if (!MT_path_absolute(s)) {
>>              str ret = (str) GDKmalloc(strlen(s) + strlen(monet_cwd) + 2);
>>
>>              sprintf(ret, "%s%c%s", monet_cwd, DIR_SEP, s);
>>              return ret;
>>      }
>>      return GDKstrdup(s);
>> }
>>
>> @-
>> The options obtained during initialization should be maintained as
>> a global structure for other components to extract information.
>> @c
>> #define BSIZE 8192
>>
>> int
>> monet_init(opt *set, int setlen)
>> {
>>      char *p;
>>      opt *n = (opt *) malloc(setlen * sizeof(opt));
>>      int i, j, nlen = 0;
>>
>>      char *dbname = mo_find_option(set, setlen, "gdk_dbname");
>>      char *dbfarm = mo_find_option(set, setlen, "gdk_dbfarm");
>>      char *alloc_map = mo_find_option(set, setlen, "gdk_alloc_map");
>>
>>      if (n == NULL || dbname == NULL || dbfarm == NULL || alloc_map == NULL) 
>> {
>>              fprintf(stderr, "Error, no database name or directory\n");
>>              if (n)
>>                      free(n);
>>              return 0;
>>      }
>>
>>      dbfarm = mo_substitute(set, setlen, dbfarm);
>>
>>      if ((p = mo_find_option(set, setlen, "gdk_debug")))
>>              GDKdebug = strtol(p, NULL, 10);
>>
>>      if ((p = mo_find_option(set, setlen, "gdk_mem_pagebits"))) 
>>              GDK_mem_pagebits = strtol(p, NULL, 10);
>>
>>      if ((p = mo_find_option(set, setlen, "gdk_vmtrim"))) 
>>              GDK_vm_trim = strcasecmp(p, "yes") == 0;
>>
>>      /* determine Monet's kernel settings */
>>      if (!GDKinit(dbname, dbfarm, strcasecmp(alloc_map, "yes") == 0) ) {
>>              free(dbfarm);
>>              free(n);
>>              return 0;
>>      }
>>      free(dbfarm);
>>
>> @-
>> Find duplicate entries in the property list and move
>> them to the front. Actually, this should be done in
>> monet_options.mx.in
>> @c
>>      for (i = 0; i < setlen; i++) {
>>              int done = 0;
>>
>>              for (j = 0; j < nlen; j++) {
>>                      if (strcmp(n[j].name, set[i].name) == 0) {
>>                              if (n[j].kind < set[i].kind) {
>>                                      n[j] = set[i];
>>                              }
>>                              done = 1;
>>                              break;
>>                      }
>>              }
>>              if (!done) {
>>                      n[nlen] = set[i];
>>                      nlen++;
>>              }
>>      }
>>      for (i = 0; i < nlen; i++) {
>>              char *value;
>>
>>              value = mo_substitute(n, nlen, n[i].value);
>>              GDKsetenv(n[i].name, value);
>>              free(value);
>>      }
>>      free(n);
>>
>>      if ((p = GDKgetenv("gdk_mem_bigsize"))) {
>>              /* when allocating >6% of all RAM; do so using vmalloc() iso 
>> malloc() */
>>              lng max_mem_bigsize = GDK_mem_maxsize/16;
>>
>>              /* sanity check to avoid memory fragmentation */
>>              GDK_mem_bigsize = (size_t) MIN(max_mem_bigsize, strtol(p, NULL, 
>> 10));
>>      }
>>      if (GDKgetenv_isyes("gdk_embedded") || GDKgetenv_isyes("embedded")) {
>>              GDKembedded = 1;
>>      }
>>
>>      if (GDKgetenv_isyes("monet_daemon") || GDKgetenv_isyes("daemon")) {
>>              monet_daemon = 1;
>> #ifdef HAVE_SETSID
>>              setsid();
>> #endif
>>      }
>>
>>      monet_hello(set, setlen);
>>      /* you don't need the commandline arguments anymore */
>>      mo_free_options(set, setlen);
>>      return 1;
>> }
>>
>> void emergencyBreakpoint(){
>>      /* just a handle to break after system initialization for GDB */
>> }
>>
>> static void
>> handler(int sig)
>> {
>>      (void)sig;
>>      mal_exit();
>> }
>>
>> int
>> main(int argc, char **av)
>> {
>>      char *prog = *av;
>>      opt *set = NULL;
>>      int idx = 0, debug = 0, setlen = 0, listing = 0, i = 0;
>>      str dbinit = NULL;
>>      str err = MAL_SUCCEED;
>>
>>      static struct option long_options[] = {
>>              {"config", 1, 0, 'c'},
>>              {"dbname", 1, 0, 0},
>>              {"dbfarm", 1, 0, 0},
>>              {"dbinit", 1, 0, 0},
>>              {"daemon", 1, 0, 0},
>>              {"debug", 2, 0, 'd'},
>>              {"help", 0, 0, 'h'},
>>              {"version", 0, 0, 0},
>>              {"set", 1, 0, 's'},
>>              {"trace", 0, 0, 't'},
>>              {"threads",0,0,0},
>>              {"memory",0,0,0},
>>              {"properties",0,0,0},
>>              {"io",0,0,0},
>>              {"transaction",0,0,0},
>>              {"modules",0,0,0},
>>              {"algorithms",0,0,0},
>>              {"performance",0,0,0},
>>              {"xproperties",0,0,0},
>>              {0, 0, 0, 0}
>>      };
>>
>> @-
>> We give malloc advice here. Main goal: prevent fragmentation.
>> We do this by declaring everything below 2K as 'small'. These
>> values will be drawn from a fixed pools of 400K.
>> A grain size of 128 bytes is used to keep overhead low.
>>
>> We do this by declaring everything below 2K as 'small'. These
>> values will be drawn from a fixed pools of 400K.
>> A grain size of 128 bytes is used to keep overhead low.
>> Trivial remark: for dynamically linked executables the mallopt
>> capabilities depend on the malloc implementation used at run time.
>>
>> Unlike V4 we ignore the alloc_map advice, which leads to a much
>> faster system start.
>> @= mallopt
>>      if (malloc_init) {
>> /* for (Red Hat) Linux (6.2) unused and ignored at least as of 
>> glibc-2.1.3-15 */
>> /* for (Red Hat) Linux (8) used at least as of glibc-2.2.93-5 */
>>             if (mallopt(M_MXFAST, 192)) {
>>                 fprintf(stderr, "!monet: mallopt(M_MXFAST,192) fails.\n");
>>             }
>> #ifdef M_BLKSZ
>>             if (mallopt(M_BLKSZ, 8*1024)) {
>>                 fprintf(stderr, "!monet: mallopt(M_BLKSZ,8*1024) fails.\n");
>>             }
>> #endif
>>         }
>>      malloc_init=0;
>> @c
>>
>> #if defined(_MSC_VER) && defined(__cplusplus)
>>      set_terminate(mserver_abort);
>> #endif
>>         if (setlocale(LC_CTYPE, "") == NULL) {
>>                 GDKfatal("cannot set locale\n");
>>         }
>>
>> #ifdef HAVE_MALLOPT
>>      @:mallopt@
>> #else
>>      (void) malloc_init;     /* still unused */
>> #endif
>>
>>      if (getcwd(monet_cwd, PATHLENGTH - 1) == NULL) {
>>              perror("pwd");
>>              GDKfatal("monet_init: could not determine current directory\n");
>>      }
>>
>>      if (!(setlen = mo_builtin_settings(&set)))
>>              usage(prog);
>>
>>      setlen = mo_add_option(&set, setlen, opt_config, "prefix", 
>> MONETDBPREFIX);
>>      setlen = mo_add_option(&set, setlen, opt_config, "config", 
>> MONETDBCONFIG);
>>
>>      for (;;) {
>>              int option_index = 0;
>>
>>              int c = getopt_long(argc, av, "c:d::t:r:h?s:m:i:a:e:x",
>>                                  long_options, &option_index);
>>
>>              if (c == -1)
>>                      break;
>>
>>              switch (c) {
>>              case 0:
>>                      if (strcmp(long_options[option_index].name, "dbname") 
>> == 0) {
>>                              setlen = mo_add_option(&set, setlen, 
>> opt_cmdline, "gdk_dbname", optarg);
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, "dbfarm") 
>> == 0) {
>>                              setlen = mo_add_option(&set, setlen, 
>> opt_cmdline, "gdk_dbfarm", optarg);
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, "dbinit") 
>> == 0) {
>>                              if (dbinit)
>>                                      fprintf(stderr, "#warning: ignoring 
>> multiple --dbinit argument\n");
>>                              else
>>                                      dbinit = optarg;
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, "daemon") 
>> == 0) {
>>                              setlen = mo_add_option(&set, setlen, 
>> opt_cmdline, "gdk_daemon", optarg);
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, "version") 
>> == 0) {
>>                              monet_version();
>>                              break;
>>                      }
>>                      /* debugging options */
>>                      if (strcmp(long_options[option_index].name, 
>> "properties") == 0) {
>>                              debug |=GRPproperties;
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, 
>> "algorithms") == 0) {
>>                              debug|= GRPalgorithms;
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, 
>> "xproperties") == 0) {
>>                              debug|= GRPxproperties;
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, 
>> "performance") == 0) {
>>                              debug|= GRPperformance;
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, "io") == 0) 
>> {
>>                              debug|= GRPio;
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, "memory") 
>> == 0) {
>>                              debug|= GRPmemory;
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, "modules") 
>> == 0) {
>>                              debug|= GRPmodules;
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, 
>> "transactions") == 0) {
>>                              debug|= GRPtransactions;
>>                              break;
>>                      }
>>                      if (strcmp(long_options[option_index].name, "threads") 
>> == 0) {
>>                              debug|= GRPthreads;
>>                              break;
>>                      }
>>                      usage(prog);
>>                      break;
>>              case 'c':
>>                      setlen = mo_add_option(&set, setlen, opt_cmdline, 
>> "config", optarg);
>>                      break;
>>              case 'd':
>>                      if (optarg) {
>>                              setlen = mo_add_option(&set, setlen, 
>> opt_cmdline, "gdk_debug", optarg);
>>                      } else {
>>                              debug = 1;
>>                      }
>>                      break;
>>              case 's':{
>>                      /* should add option to a list */
>>                      char *tmp = strchr(optarg, '=');
>>
>>                      if (tmp) {
>>                              *tmp = '\0';
>>                              setlen = mo_add_option(&set, setlen, 
>> opt_cmdline, optarg, tmp + 1);
>>                      } else {
>>                              fprintf(stderr, "ERROR: wrong format %s\n", 
>> optarg);
>>                      }
>>              }
>>                      break;
>>              case 't':       /* trace option, ignored to reduce testweb 
>> complaints
>>                      fprintf(stderr, "#warning: trace option not yet 
>> supported\n");
>>                      */
>>                      break;
>>              case 'h':
>>                      if(strcmp(long_options[option_index].name, "help") == 
>> 0) {
>>                              usage2(prog);
>>                              break;
>>                      }
>>              case '?':
>>                      usage(prog);
>>              default:
>>                      fprintf(stderr, "ERROR: getopt returned character "
>>                                                      "code '%c' 0%o\n",c, c);
>>                      usage(prog);
>>              }
>>      }
>>
>>      if (!(setlen = mo_system_config(&set, setlen)))
>>              usage(prog);
>>
>>      monet_script = (str *) GDKmalloc(sizeof(str) * (argc + 1));
>>      monet_script[idx] = NULL;
>>      while (optind < argc) {
>>              monet_script[idx] = absolute_path(av[optind]);
>>              monet_script[idx + 1] = NULL;
>>              optind++;
>>              idx++;
>>      }
>>
>>      if (debug)
>>              mo_print_options(set, setlen);
>>      if (monet_init(set, setlen) == 0 )
>>              return 0;
>>      /* propagate the debug flag to the environment table */
>>      if( debug){
>>              char buf[BUFSIZ];
>>              snprintf(buf,BUFSIZ,"%d",debug);
>>              GDKsetenv("gdk_debug", buf);
>>              GDKdebug=debug; /* overruled by command line */
>>      }
>>
>>      GDKsetenv("monet_version", VERSION);
>>
>>      /* configure sabaoth to use the right dbfarm and active database */
>>      SABAOTHinit(GDKgetenv("gdk_dbfarm"), GDKgetenv("gdk_dbname"));
>>      /* wipe out all cruft, if left over */
>>      if ((err = SABAOTHwildRetreat(&i)) != MAL_SUCCEED) {
>>              /* just swallow the error */
>>              GDKfree(err);
>>      }
>>      /* From this point, the server should exit cleanly.  Discussion:
>>       * even earlier?  Sabaoth here registers the server has started up. */
>>      if ((err = SABAOTHregisterStart(&i)) != MAL_SUCCEED) {
>>              /* throw the error at the user, but don't die */
>>              fprintf(stderr, "!%s\n", err);
>>              GDKfree(err);
>>      }
>>
>> #ifdef HAVE_SIGACTION
>>      {
>>              struct sigaction sa;
>>
>>              sigemptyset(&sa.sa_mask);
>>              sa.sa_flags = 0;
>>              sa.sa_handler = handler;
>>              if (
>>                              sigaction(SIGINT, &sa, NULL) == -1 ||
>>                              sigaction(SIGQUIT, &sa, NULL) == -1 ||
>>                              sigaction(SIGTERM, &sa, NULL) == -1)
>>              {
>>                      fprintf(stderr, "!unable to create signal handlers\n");
>>              }
>>      }
>> #else
>>      signal(SIGINT, handler);
>> #ifdef SIGQUIT
>>      signal(SIGQUIT, handler);
>> #endif
>>      signal(SIGTERM, handler);
>> #endif
>>
>>      {
>>              str lang = "mal";
>>              /* we inited mal before, so publish its existence */
>>              if ((err = SABAOTHmarchScenario(&i, &lang)) != MAL_SUCCEED) {
>>                      /* throw the error at the user, but don't die */
>>                      fprintf(stderr, "!%s\n", err);
>>                      GDKfree(err);
>>              }
>>      }
>>
>>      {
>>              /* unlock the vault, first see if we can find the file which
>>               * holds the secret */
>>              char* secret = alloca(sizeof(char) * 1024);
>>              FILE* secretf;
>>              size_t len;
>>              
>>              if (GDKgetenv("monet_vault_key") == NULL) {
>>                      /* use a default (hard coded, non safe) key */
>>                      secret = "Xas632jsi2whjds8";
>>                      fprintf(stderr, "#warning: please don't forget to set 
>> your "
>>                                      "vault key!\n#(see %s)\n", 
>> GDKgetenv("config"));
>>              } else {
>>                      if ((secretf = fopen(GDKgetenv("monet_vault_key"), 
>> "r")) == NULL) {
>>                              snprintf(secret, 1023, "unable to open 
>> vault_key_file %s: %s",
>>                                              GDKgetenv("monet_vault_key"), 
>> strerror(errno));
>>                              secret[1023] = '\0';
>>                              GDKfatal(secret);
>>                      }
>>                      len = fread(secret, 1, 1023, secretf);
>>                      secret[len] = '\0';
>>                      len = strlen(secret); /* secret can contain null-bytes 
>> */
>>                      if (len < 5) {
>>                              fprintf(stderr, "#warning: your vault key is 
>> too short "
>>                                              "(" SZFMT "), enlarge your 
>> vault key!\n",
>>                                              len); /* penis */
>>                      }
>>                      fclose(secretf);
>>              }
>>              if ((err = AUTHunlockVault(&secret)) != MAL_SUCCEED)
>>                      GDKfatal(err);
>>      }
>>      /* make sure the authorisation BATs are loaded */
>>      if ((err = AUTHinitTables()) != MAL_SUCCEED)
>>              GDKfatal(err);
>>      if (mal_init())
>>              return 0;
>>
>> @-
>> Time to execute the script files. 
>> Start with the init command[todo], which may be defined in
>> the configuration file.
>> @c
>>      MSinitClientPrg(mal_clients, "user","main");
>>      if (dbinit == NULL)
>>              dbinit = GDKgetenv("dbinit");
>>      if (dbinit) {
>>              str input = GDKstrdup(dbinit);
>>
>>              callString(mal_clients, input, listing);
>>              GDKfree(input);
>>      }
>>
>>      if (GDKgetenv("mal_listing"))
>>              sscanf(GDKgetenv("mal_listing"), "%d", &listing);
>>
>>      emergencyBreakpoint();
>>      for (i = 0; monet_script[i]; i++) {
>>              str msg=evalFile(mal_clients, monet_script[i], listing);
>>              /* check for internal exception message to terminate */
>>              if(msg  && strcmp(msg,"MALException:client.quit:Server 
>> stopped.")==0)
>>                      mal_exit();
>>              if( msg) GDKfree(msg);
>>              GDKfree(monet_script[i]);
>>              monet_script[i] = 0;
>>      }
>>      GDKfree(monet_script);
>>      if (monet_daemon) {
>>              while(1) 
>>                      MT_sleep_ms(5000);
>>      } else
>>              MSserveClient(mal_clients);
>>
>>      /* mal_exit calls MT_global_exit, so statements after this call will
>>       * never get reached */
>>      mal_exit();
>>
>>      return 0;
>> }
>> @}
>>
>> --- NEW FILE: monet_version.c.in ---
>>
>> #include "monet_version.h"
>>
>> void
>> monet_version()
>> {
>>      printf("MonetDB server v" VERSION " (" SZFMT "-bit), "
>>                      "based on kernel v%s (" SZFMT "-bit oids)\n",
>>                      (size_t) (sizeof(ptr) * 8), GDKversion(),
>>                      (size_t) (sizeof(oid) * 8));
>>      printf("Copyright (c) 1993-2007 CWI, all rights reserved\n");
>>      printf("Visit http://monetdb.cwi.nl/ for further information\n");
>>      printf("Configured for prefix: " MONETDBPREFIX "\n");
>>      printf("Libraries:\n");
>> #ifdef HAVE_LIBPCRE
>>      printf("  libpcre: %s (%s)\n", pcre_version(), "@pcreversion@");
>> #endif
>> #ifdef HAVE_OPENSSL
>>      printf("  openssl: %s (%s)\n", OPENSSL_VERSION_TEXT, 
>> "@opensslversion@");
>> #endif
>>      printf("Compiled by: %s\n", "@builtby@");
>>      printf("Compilation: %s\n", "@compilercall@");
>> #ifdef STATIC
>>      printf("Linking    : %s (static)\n", "@linkercall@");
>> #else
>>      printf("Linking    : %s\n", "@linkercall@");
>> #endif
>>      exit(0);
>> }
>>
>> --- mserver5.mx.in DELETED ---
> 


-- 
Sjoerd Mullender

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Monetdb-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-developers

Reply via email to