summary refs log tree commit diff
path: root/scripts/gen-libc-modules.awk
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/gen-libc-modules.awk')
-rw-r--r--scripts/gen-libc-modules.awk34
1 files changed, 34 insertions, 0 deletions
diff --git a/scripts/gen-libc-modules.awk b/scripts/gen-libc-modules.awk
new file mode 100644
index 0000000000..2f92cd41b2
--- /dev/null
+++ b/scripts/gen-libc-modules.awk
@@ -0,0 +1,34 @@
+# Generate a header file that defines the MODULE_* macros for each library and
+# module we build in glibc.  The library names are pulled in from soversions.i
+# and the additional modules are passed in the BUILDLIST variable.
+BEGIN {
+  # BUILDLIST is set from the build-list variable in Makeconfig and is a space
+  # separated list of non-library modules that we build in glibc.
+  num = split (buildlist, libs, " ")
+  # Separate the built modules from the libraries.
+  libs[++num] = "LIBS_BEGIN"
+}
+
+# Skip over comments.
+$1 == "#" {
+  next
+}
+
+# We have only one special case in soversions.i parsing, which is to replace ld
+# with rtld since that's what we call it throughout the sources.
+match (FILENAME, ".*soversions.i") {
+  name = $2
+  if (name == "ld")
+    name = "rtld"
+
+  # Library names are not duplicated in soversions.i.
+  libs[++num] = name
+}
+
+# Finally, print out the header file.
+END {
+  printf ("/* AUTOGENERATED BY gen-libc-modules.awk, DO NOT EDIT.  */\n\n")
+  for (l in libs) {
+    printf ("#define MODULE_%s %d\n", libs[l], l)
+  }
+}