void linkBaseExecutable() { char *cout = out; #if !defined(HOST_OS_WINDOWS) /* bit of a hack ... */ if ( embed_shared ) { linkSharedObject(); return; } #endif #if defined(HOST_TOOLCHAIN_MSC) { char tmp[MAXPATHLEN]; sprintf(tmp, "/out:%s", cout); prependArgList(&ldoptions, tmp); } concatArgList(&ldoptions, "", &ofiles); /* object files */ exportlibdirs(); if ( !nolibswipl ) { appendArgList(&ldoptions, pllib); /* -lswipl */ addOptionString(pllibs); } concatArgList(&ldoptions, "", &libs); /* libraries */ concatArgList(&ldoptions, "", &lastlibs); /* libraries */ #else /* !defined(HOST_TOOLCHAIN_MSC) */ prependArgList(&ldoptions, cout); prependArgList(&ldoptions, "-o"); /* -o ctmp */ concatArgList(&ldoptions, "", &ofiles); /* object files */ concatArgList(&ldoptions, "-L", &libdirs); /* library directories */ if ( !nolibswipl ) { appendArgList(&ldoptions, pllib); /* -lswipl */ addOptionString(pllibs); } concatArgList(&ldoptions, "", &libs); /* libraries */ concatArgList(&ldoptions, "", &lastlibs); /* libraries */ #endif /* !defined(HOST_TOOLCHAIN_MSC) */ if ( !nostate ) { #if defined(HOST_TOOLCHAIN_MSC) if ( !embed_shared ) { char buf[MAXPATHLEN]; appendArgList(&tmpfiles, replaceExtension(cout, "exp", buf)); appendArgList(&tmpfiles, replaceExtension(cout, "lib", buf)); } #endif } callprog(ld, &ldoptions); }
ServiceDaemon::ServiceDaemon(int argc, char** argv, const std::string& daemonName) : ServiceOptions(argc, argv, daemonName) { addOptionFlag('h', "help", "Display help information."); addOptionFlag('D', "daemonize", "Run as system daemon."); addOptionString('p', "pid-file", "PID file when running as daemon."); }
int main(int argc, char **argv) { int special; plld = argv[0]; argc--; argv++; catchSignals(); if ( argc == 0 ) { fprintf(stderr, "No input files. Use %s -help.\n", plld); exit(0); } putenv("PLLD=true"); /* for subprograms */ verbose = FALSE; if ( argc > 2 && streq(argv[0], "-pl") ) special = 2; else special = 0; /* swipl-ld [-pl x] -v: verbose */ if ( argc-special == 1 && streq(argv[special], "-v") ) { arglist coptions; int i; memset(&coptions, 0, sizeof(coptions)); for(i=special; i < argc; i++) appendArgList(&coptions, argv[i]); callprog(PROG_CC, &coptions); return 0; } parseOptions(argc, argv); defaultProgram(&pl, PROG_PL); if ( build_defaults ) { nostate = TRUE; /* not needed and Prolog won't run */ defaultProgram(&cc, C_CC); #ifdef PLBASE defaultPath(&plbase, PLBASE); #else defaultPath(&plbase, PLHOME); #endif defaultPath(&plarch, PLARCH); defaultProgram(&pllib, C_PLLIB); addOptionString(C_LIBS); appendArgList(&ldoptions, C_LDFLAGS); appendArgList(&coptions, C_CFLAGS); appendArgList(&cppoptions, C_CFLAGS); #ifdef SO_EXT soext = strdup(SO_EXT); #endif #ifdef O_PLMT ensureOption(&coptions, "-D_REENTRANT"); ensureOption(&cppoptions, "-D_REENTRANT"); #ifdef _THREAD_SAFE /* FreeBSD */ ensureOption(&coptions, "-D_THREAD_SAFE"); ensureOption(&cppoptions, "-D_THREAD_SAFE"); #endif #endif } else { getPrologOptions(); } fillDefaultOptions(); if ( show_version ) { callprog(cc, &coptions); exit(0); } compileObjectFiles(); if ( !nolink ) { if ( shared ) linkSharedObject(); else { linkBaseExecutable(); if ( !nostate ) { createSavedState(); createOutput(); } } } removeTempFiles(); return 0; }
void linkSharedObject() { char soname[MAXPATHLEN]; char *soout; if ( !soext ) soext = SO_EXT; if ( file_name_extension(out) ) { soout = out; } else { soout = replaceExtension(out, soext, soname); } #if defined(HOST_TOOLCHAIN_MSC) prependArgList(&ldoptions, "/dll"); { char tmp[MAXPATHLEN]; sprintf(tmp, "/out:%s", soout); prependArgList(&ldoptions, tmp); } concatArgList(&ldoptions, "", &ofiles); /* object files */ exportlibdirs(); if ( !nolibswipl ) { appendArgList(&ldoptions, pllib); /* swipl.lib */ addOptionString(pllibs); } concatArgList(&ldoptions, "", &libs); /* libraries */ concatArgList(&ldoptions, "", &lastlibs); /* libraries */ #else /* !defined(HOST_TOOLCHAIN_MSC) */ #ifdef __CYGWIN__ prependArgList(&ldoptions, SO_LDFLAGS); prependArgList(&ldoptions, soout); prependArgList(&ldoptions, "-o"); /* -o ctmp */ concatArgList(&ldoptions, "", &ofiles); /* object files */ if ( !nolibswipl ) { appendArgList(&ldoptions, pllib); /* -lswipl */ addOptionString(pllibs); } concatArgList(&ldoptions, "-L", &libdirs); /* library directories */ concatArgList(&ldoptions, "", &libs); /* libraries */ concatArgList(&ldoptions, "", &lastlibs); /* libraries */ #else /*__CYGWIN__*/ #ifdef SO_FORMAT_LDFLAGS /* must specify output too */ { char tmp[MAXPATHLEN]; tmp[0] = UNQUOTED; sprintf(&tmp[1], SO_FORMAT_LDFLAGS); prependArgList(&ldoptions, tmp); } #else prependArgList(&ldoptions, SO_LDFLAGS); prependArgList(&ldoptions, soout); prependArgList(&ldoptions, "-o"); /* -o ctmp */ #endif /*SO_FORMAT_LDFLAGS*/ concatArgList(&ldoptions, "", &ofiles); /* object files */ concatArgList(&ldoptions, "-L", &libdirs); /* library directories */ concatArgList(&ldoptions, "", &libs); /* libraries */ #ifdef O_SHARED_KERNEL if ( !nolibswipl ) #endif { appendArgList(&ldoptions, pllib); /* -lswipl */ } concatArgList(&ldoptions, "", &lastlibs); /* libraries */ #ifdef __BEOS__ appendArgList(&ldoptions, plexe); /* last is executable */ #endif #endif /*__CYGWIN__*/ #endif /* !defined(HOST_TOOLCHAIN_MSC) */ callprog(ld, &ldoptions); }
/******************************* * PROLOG OPTIONS * *******************************/ static void getPrologOptions() { FILE *fd; char cmd[512]; sprintf(cmd, "%s --dump-runtime-variables", pl); if ( verbose ) printf("\teval `%s`\n", cmd); if ( (fd = popen(cmd, "r")) ) { char buf[256]; while( fgets(buf, sizeof(buf), fd) ) { char name[100]; char value[256]; char *v; if ( sscanf(buf, "%[^=]=%[^;\n]", name, value) == 2 ) { v = value; if ( *v == '"' ) { char *e = ++v; while(*e && *e != '"') e++; while(e>v && isspace(CTOI(e[-1]))) e--; *e = '\0'; } if ( streq(name, "CC") ) defaultProgram(&cc, v); else if ( streq(name, "PLBASE") ) defaultPath(&plbase, v); else if ( streq(name, "PLARCH") ) defaultPath(&plarch, v); #ifdef __CYGWIN__ else if ( streq(name, "PLLIBS") ) /* Always required. */ #else else if ( streq(name, "PLLIBS") && !shared ) #endif addOptionString(v); else if ( streq(name, "PLLIB") ) defaultProgram(&pllib, v); else if ( streq(name, "PLLDFLAGS") ) appendArgList(&ldoptions, v); else if ( streq(name, "PLCFLAGS") ) { appendArgList(&coptions, v); appendArgList(&cppoptions, v); } else if ( streq(name, "PLSOEXT") ) soext = strdup(v); else if ( streq(name, "PLTHREADS") && streq(v, "yes") ) { ensureOption(&coptions, "-D_REENTRANT"); ensureOption(&cppoptions, "-D_REENTRANT"); #ifdef _THREAD_SAFE /* FreeBSD */ ensureOption(&coptions, "-D_THREAD_SAFE"); ensureOption(&cppoptions, "-D_THREAD_SAFE"); #endif } else continue; if ( verbose ) fprintf(stderr, "\t\t%s=\"%s\"\n", name, v); } else { fprintf(stderr, "Unparsed Prolog option: %s\n", buf);