- if (lstat (sunpro_CC, &sb) == 0) {
- strncpy (cmd, sunpro_CC, PATH_MAX);
- strncat (cmd, " -V 2>&1", 8);
- if ((ccproc = popen (cmd, "r")) != NULL) {
- if (fgets (buf, PATH_MAX, ccproc) != NULL) {
- vptr = strrchr (buf, 'C');
- for (; !isdigit(*vptr); vptr++);
- ret = sscanf (vptr, "%d.%d", &cmajor, &cminor);
- fprintf (inFile,
- "#define DefaultSunProCplusplusCompilerMajorVersion %d\n",
- cmajor);
- fprintf (inFile,
- "#define DefaultSunProCplusplusCompilerMinorVersion %d\n",
- cminor);
- }
- while (fgets (buf, PATH_MAX, ccproc) != NULL) {};
- pclose (ccproc);
+
+ return 0;
+}
+
+static void
+get_sun_compiler_versions(FILE *inFile)
+{
+ static const char *compilers[][2] =
+ {{"SunProC", "/opt/solarisstudio/bin/cc"},
+ {"SunProCplusplus", "/opt/solarisstudio/bin/CC"},
+ {"GnuC", "gcc"},
+ {"GnuCplusplus", "g++"}};
+ int cmajor, cminor;
+ int i;
+ int ret;
+
+ for (i = 0; i < sizeof compilers / sizeof compilers[0]; i++) {
+ const char *product = compilers[i][0];
+ char *fspec = get_full_path (compilers[i][1]);
+
+ ret = get_sun_compiler_version (fspec, product, &cmajor, &cminor);
+ free (fspec);
+
+ if (ret == 0) {
+ fprintf (inFile,
+ "#define Default%sCompilerMajorVersion %d\n",
+ product,
+ cmajor);
+ fprintf (inFile,
+ "#define Default%sCompilerMinorVersion %d\n",
+ product,
+ cminor);
+ } else if (ret == EINVAL) {
+ printf ("Failed to detect version of compiler: %s\n", product);
+ exit (EINVAL);