Xref: news2.mv.net comp.os.msdos.djgpp:6527 From: fnunez AT cs DOT uct DOT ac DOT za (Fabian Nunez) Newsgroups: comp.os.msdos.djgpp Subject: gxx replacement Date: 29 Jul 1996 08:01:14 GMT Organization: University of Cape Town Lines: 113 Message-ID: <4thr4a$db0@groa.uct.ac.za> NNTP-Posting-Host: unagi.cs.uct.ac.za To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Yesterday I got sick and tired of remembering to add "-liostr -lm" to my makefiles for a non-GPL program I'm writing (I kept on forgetting 8) and so I decided to write a quick replacement for gxx. It adds all the libraries you can use in C++ and still keep your program GPL free. After doing this I thought other people would find it useful so I commented it (now it's newbie-friendly :) and here it is! Enjoy Fabian ---CUT-HERE--------------------------------------------------------- /* * gpp.c * * Quick wrapper for C++ compilation under DJGPP using only free C++ libs * (Use instead of gxx if you don't want your program to be GPL'd) * * NOTE: Some symbols in libgpp.a are not in libiostr.a or libstdcx.a * Use of those will give you linker errors if you try to compile * with gpp but not with gxx. (eg. the BitString or list classes). * In that case, you are using Gnu functions/classes and your * program does fall under the Gnu GPL. * Workaround - write the missing functions yourself! ;) * * NOTE2:You need the compiler distribution file lgp271b.zip dated * 22-Feb-96, earlier ones don't have libstdcx.a! * * Program by Fabian Nunez (fnunez AT cs DOT uct DOT ac DOT za) * * This program comes with NO GUARANTEE and is in the public domain */ #include #include #include #include #include #define GCCEXEC "gcc.exe" #define CPPLIBS " -liostr -lstdcx -lm" /* link streams, std C++, math */ typedef enum { false, true } bool; /* dummy functions for startup stuff we don't use (reduces exe size) */ void __crt0_load_environment_file(char *a) {} /* no environment file */ char **__crt0_glob_function(char *a) { return NULL; } /* pass args as-is */ int main(int argc,char *argv[]) { char *buffer; int i,length,retval; bool nofiles = true,partial = false,verbose = false; fnsplit(argv[0],NULL,NULL,argv[0],NULL); /* get rid of path from argv[0] */ length = strlen(GCCEXEC CPPLIBS) + 1; /* add 1 for terminating '\0' */ for (i = 1;i < argc;i++) { length += (strlen(argv[i]) + 1); /* add 1 for separating space */ if (*argv[i] != '-') /* have we specified any files? */ nofiles = false; /* yes! */ if ((strcmp(argv[i],"-c") == 0) || /* partial compilation? */ (strcmp(argv[i],"-S") == 0) || (strcmp(argv[i],"-E") == 0)) partial = true; if (strcmp(argv[i],"-v") == 0) /* verbose? */ verbose = true; } if (!(buffer = (char *)malloc(length))) { fprintf(stderr,"%s.exe: %s\n",argv[0],strerror(ENOMEM)); return 1; } /* build the command line to call gcc (assumes gcc.exe is in the PATH) */ strcpy(buffer,GCCEXEC); for (i = 1;i < argc;i++) { strcat(buffer," "); strcat(buffer,argv[i]); } if (!nofiles && !partial) strcat(buffer,CPPLIBS); if (verbose) fprintf(stderr," %s\n",buffer); retval = system(buffer); free(buffer); if (retval) { fprintf(stderr,"%s.exe: Error during compilation (return code %d)\n", argv[0],retval); return 1; } return 0; } ---CUT-HERE--------------------------------------------------------- -- Fabian Nunez, Bachelor of Computer Science, University of Cape Town email:fnunez AT cs DOT uct DOT ac DOT za web:http//www.cs.uct.ac.za/~fnunez ---------------------------------------------------------------- Any technology distinguishable from magic is insufficiently advanced