summaryrefslogtreecommitdiff
path: root/setup/Linux/confgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'setup/Linux/confgen.c')
-rw-r--r--setup/Linux/confgen.c188
1 files changed, 188 insertions, 0 deletions
diff --git a/setup/Linux/confgen.c b/setup/Linux/confgen.c
new file mode 100644
index 0000000..53662f2
--- /dev/null
+++ b/setup/Linux/confgen.c
@@ -0,0 +1,188 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <libgen.h>
+#include <sys/stat.h>
+
+char *targetdir = "";
+char *confpath = "";
+
+static int
+copy_parms (FILE * f, FILE * conf)
+{
+ char line[1024], *s;
+ char var[256] = "", comment[64 * 1024] = "";
+ int i;
+ int ok = 0;
+
+ while (fgets (line, sizeof (line), f) != NULL)
+ {
+ for (i = 0; i < strlen (line); i++)
+ if (line[i] == '\n')
+ line[i] = 0;
+
+ s = line;
+
+ while (*s == ' ' || *s == '\t')
+ s++;
+ if (strncmp (s, "int ", 4) == 0)
+ {
+ if (*var != 0)
+ {
+ fprintf (conf, "%s\n", comment);
+ if (*var != 0)
+ fprintf (conf, "#%s\n#\n", var);
+ *var = 0;
+ *comment = 0;
+ }
+ s += 4;
+
+ for (i = 0; i < strlen (line); i++)
+ if (line[i] == ';')
+ line[i] = 0;
+ ok = 1;
+ strcpy (var, s);
+ continue;
+ }
+
+
+ s = line;
+
+ while (*s == ' ' || *s == '\t' || *s == '/' || *s == '*')
+ s++;
+
+ if (*comment != 0)
+ strcat (comment, "\n");
+ strcat (comment, "# ");
+ strcat (comment, s);
+ }
+
+ if (*var != 0)
+ {
+ fprintf (conf, "%s\n", comment);
+ fprintf (conf, "#%s\n", var);
+ }
+
+ return ok;
+}
+
+static void
+scan_dir (const char *srcdir, const char *modnam)
+{
+ char confname[256], tmp[256], line[1024];
+ char module[256], *p;
+ FILE *conf;
+ FILE *f;
+ int i;
+ struct stat st;
+
+ int check_platform = 0;
+ int platform_ok = 0;
+ int ok = 0;
+
+ strcpy (module, modnam);
+ p = module;
+ while (*p)
+ {
+ if (*p == '.')
+ *p = 0;
+ else
+ p++;
+ }
+
+ if (stat (srcdir, &st) == -1)
+ return;
+
+ if (!S_ISDIR (st.st_mode)) /* Not a directory? */
+ return;
+
+ sprintf (tmp, "%s/.nomake", srcdir);
+ if (stat (tmp, &st) != -1) /* File exists */
+ return; /* Skip this one */
+
+ sprintf (tmp, "%s/.config", srcdir);
+ if ((f = fopen (tmp, "r")) != NULL)
+ {
+ while (fgets (line, sizeof (line), f) != NULL)
+ {
+ char *s;
+ for (i = 0; i < strlen (line); i++)
+ if (line[i] == '\n')
+ line[i] = 0;
+
+ s = line;
+ while (*s && *s != '=')
+ s++;
+ if (*s == '=')
+ *s++ = 0;
+
+ if (strcmp (line, "OS") == 0 || strcmp (line, "targetos") == 0)
+ {
+ check_platform = 1;
+ if (strcmp (s, "Linux") == 0)
+ platform_ok = 1;
+ continue;
+ }
+ }
+ fclose (f);
+ }
+
+ if (check_platform && !platform_ok && strcmp (modnam, "osscore"))
+ {
+ return;
+ }
+#if 0
+ /* copy the man pages */
+ sprintf (syscmd, "sed 's:CONFIGFILEPATH:%s:g' < %s/%s.man > /tmp/ossman.man",
+ confpath, srcdir, module);
+ printf ("%s\n", syscmd);
+ unlink ("/tmp/ossman.man");
+ system (syscmd);
+
+ sprintf (syscmd,
+ "./origdir/setup/txt2man -t \"%s\" -v \"Devices\" -s 7 /tmp/ossman.man > prototype/usr/man/man7/%s.7",
+ module, module);
+ printf ("%s\n", syscmd);
+ system (syscmd);
+#endif
+
+ sprintf (confname, "%s/%s.conf", targetdir, module);
+ sprintf (tmp, "%s/.params", srcdir);
+ if ((f = fopen (tmp, "r")) != NULL)
+ {
+ if ((conf = fopen (confname, "w")) == NULL)
+ {
+ perror (confname);
+ exit (-1);
+ }
+ fprintf (conf, "# Open Sound System configuration file\n");
+ fprintf (conf,
+ "# Remove the '#' in front of the option(s) you like to set.\n#\n");
+ ok = copy_parms (f, conf);
+ fclose (f);
+// fprintf(conf, "#\n");
+ fclose (conf);
+ if (!ok)
+ unlink (confname);
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ int i;
+
+ if (argc < 3)
+ exit (-1);
+
+ targetdir = argv[1];
+ confpath = argv[2];
+
+ for (i = 3; i < argc; i++)
+ {
+ scan_dir (argv[i], basename (argv[i]));
+ }
+
+ exit (0);
+}