changeset 18604:1bfb1ca01cac

posix-modules: Add options for specific platforms. * posix-modules (func_usage): Document options --for-mingw, --for-msvc. (exclude_for_mingw, exclude_for_msvc, exclude): New variables. Invoke func_tmpdir. Filter out the excludes.
author Bruno Haible <bruno@clisp.org>
date Sat, 17 Dec 2016 11:50:06 +0100
parents 2a7f4c436fe2
children 33b898f9e587
files ChangeLog posix-modules
diffstat 2 files changed, 53 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun Dec 18 13:07:43 2016 +0100
+++ b/ChangeLog	Sat Dec 17 11:50:06 2016 +0100
@@ -1,3 +1,10 @@
+2016-12-18  Bruno Haible  <bruno@clisp.org>
+
+	posix-modules: Add options for specific platforms.
+	* posix-modules (func_usage): Document options --for-mingw, --for-msvc.
+	(exclude_for_mingw, exclude_for_msvc, exclude): New variables.
+	Invoke func_tmpdir. Filter out the excludes.
+
 2016-12-18  Bruno Haible  <bruno@clisp.org>
 
 	getopt: Fix link error for users of getopt() in <unistd.h>.
--- a/posix-modules	Sun Dec 18 13:07:43 2016 +0100
+++ b/posix-modules	Sat Dec 17 11:50:06 2016 +0100
@@ -24,10 +24,15 @@
 func_usage ()
 {
   echo "\
-Usage: posix-modules
+Usage: posix-modules [option]
 
 Lists the gnulib modules that implement POSIX interfaces.
 
+Options:
+
+      --for-mingw           list only modules that work on mingw
+      --for-msvc            list only modules that work on MSVC
+
 Report bugs to <bug-gnulib@gnu.org>."
 }
 
@@ -217,9 +222,27 @@
   }
 fi
 
+# Excludes for mingw.
+exclude_for_mingw=
+# <grp.h> does not exist.
+exclude_for_mingw="$exclude_for_mingw pt_chown grantpt posix_openpt-tests posix_openpt"
+# The functions getuid, getgid, geteuid, getegid don't exist.
+exclude_for_mingw="$exclude_for_mingw euidaccess faccessat"
+exclude_for_mingw="$exclude_for_mingw fchownat-tests fchownat"
+
+# Excludes for MSVC.
+exclude_for_msvc="$exclude_for_mingw"
+
 # Command-line option processing.
+exclude=
 while test $# -gt 0; do
   case "$1" in
+    --for-mingw | --for-ming | --for-min | --for-mi )
+      exclude="$exclude $exclude_for_mingw"
+      shift ;;
+    --for-msvc | --for-msv | --for-ms )
+      exclude="$exclude $exclude_for_msvc"
+      shift ;;
     --help | --hel | --he | --h )
       func_usage
       exit $? ;;
@@ -238,6 +261,18 @@
 done
 
 func_gnulib_dir
+func_tmpdir
+trap 'exit_status=$?
+      if test "$signal" != 0; then
+        echo "caught signal $signal" >&2
+      fi
+      rm -rf "$tmp"
+      exit $exit_status' 0
+for signal in 1 2 3 13 15; do
+  trap '{ signal='$signal'; func_exit 1; }' $signal
+done
+signal=0
+
 (
   # Get the header modules.
   LC_ALL=C grep -h '^Gnulib module: ' "$gnulib_dir"/doc/posix-headers/*.texi 2>/dev/null \
@@ -250,7 +285,16 @@
   | { # Then filter out the words "---", "and", "or" and remove *-gnu modules.
       tr ' ' '\012' | sed -e '/^---$/d' -e '/^and$/d' -e '/^or$/d' -e '/-gnu$/d'
     } \
-  | LC_ALL=C sort | LC_ALL=C uniq
+  | LC_ALL=C sort | LC_ALL=C uniq \
+  | { # Then filter out the excludes.
+      if test -n "$exclude"; then
+        for m in $exclude; do echo $m; done | LC_ALL=C sort -u > "$tmp"/excludes
+        LC_ALL=C join -v 1 - "$tmp"/excludes
+        rm -f "$tmp"/excludes
+      else
+        cat
+      fi
+    }
 
 # Local Variables:
 # indent-tabs-mode: nil