RE: Adding icl to compile wrapper script

"Peyton, Jonathan L" <[email protected]>
Newsgroups gmane.comp.sysutils.automake.patches
Message-ID <E721F964DFCE0143863414635137A1C71A4EF50F@CRSMSX101.amr.corp.intel.com>
Peter,

Thanks for all the suggestions!

> However, ideally I think you should plagiarize the test t/compile4.sh so that we also test the wrapping of the icl compiler when it is available. You will need to patch the require_tool function in t/ax/am-test-lib.sh to recognize this "new" icl tool for that to work.
The new patch adds t/compile7.sh which is a copy of t/compile4.sh, but with icl instead of cl.  If there is a better way to avoid the code duplication I'd be more than willing to do it that way.
Also, I've patched t/ax/am-test-lib.sh to recognize icl.

> You are also missing a changelog
* lib/compile: Have icl be treated similarly to cl
* t/ax/am-test-lib.sh: Allow icl in require_tool
* t/compile7.sh: Add new test file for icl
* t/list-of-tests.mk: Add t/compile7.sh

> and you need to update the scriptversion at the top of the compile script.
Done.

> You could also write the case match as...
Done.

> Since you send this from an intel account, why is it that -c -o isn't supported?
Icl is intended to be a drop in replacement for cl.  So it has the same interface as cl.

>And another question is if icl supports the -showIncludes option from MSVC?
It does and works how it is in depcomp.

-- Johnny

-----Original Message-----
From: Peter Rosin [mailto:[email protected]] 
Sent: Tuesday, November 17, 2015 8:07 AM
To: Peyton, Jonathan L; [email protected]
Subject: Re: Adding icl to compile wrapper script

Hi Jonathan,

On 2015-11-16 17:44, Peyton, Jonathan L wrote:
> Hello automake developers,
>
> I have this patch which adds icl (Windows Intel Compiler) to the lib/compile wrapper script.  Icl has a Visual Studio driver interface and supports all the flags that are translated inside the compile script.  It also doesn't support the '-o -c' idiom similar to the Visual Studio compiler so I think it is a good candidate for this wrapper script.
>
> -- Johnny

Yes, that sounds usable. However, ideally I think you should plagiarize the test t/compile4.sh so that we also test the wrapping of the icl compiler when it is available. You will need to patch the require_tool function in t/ax/am-test-lib.sh to recognize this "new" icl tool for that to work.

You are also missing a changelog and you need to update the scriptversion at the top of the compile script.

You could also write the case match as

  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe \
  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )

in order to not duplicate the code.

Since you send this from an intel account, why is it that -c -o isn't supported?

And another question is if icl supports the -showIncludes option from MSVC? Or does it have a way of its own to output dependencies? You might want to support a one-pass mode to find dependencies in the lib/depcomp script.

Cheers,
Peter
add-icl-to-compile-script-v2.patch (application/octet-stream, 3.8 KB)
diff --git a/lib/compile b/lib/compile
index 69fad9c..da22ec3 100755
--- a/lib/compile
+++ b/lib/compile
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2012-10-14.11; # UTC
+scriptversion=2015-11-18.14; # UTC
 
 # Copyright (C) 1999-2015 Free Software Foundation, Inc.
 # Written by Tom Tromey <[email protected]>.
@@ -255,7 +255,8 @@ EOF
     echo "compile $scriptversion"
     exit $?
     ;;
-  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
     func_cl_wrapper "$@"      # Doesn't return...
     ;;
 esac
diff --git a/t/ax/am-test-lib.sh b/t/ax/am-test-lib.sh
index 35541c3..529d93b 100644
--- a/t/ax/am-test-lib.sh
+++ b/t/ax/am-test-lib.sh
@@ -779,6 +779,17 @@ require_tool ()
       $CC -? </dev/null \
         || skip_all_ "Microsoft C compiler '$CC' not available"
       ;;
+    icl)
+      CC=icl
+      # Don't export CFLAGS, as that could have been initialized to only
+      # work with the C compiler detected at configure time.  If the user
+      # wants CFLAGS to also influence 'icl', he can still export CFLAGS
+      # in the environment "by hand" before calling the testsuite.
+      export CC CPPFLAGS
+      echo "$me: running $CC -?"
+      $CC -? >/dev/null \
+        || skip_all_ "Intel C compiler '$CC' not available"
+      ;;
     etags)
       # Exuberant Ctags will create a TAGS file even
       # when asked for --help or --version.  (Emacs's etags
diff --git a/t/compile7.sh b/t/compile7.sh
new file mode 100644
index 0000000..0dad8fb
--- /dev/null
+++ b/t/compile7.sh
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2010-2015 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Make sure 'compile' wraps the Intel C/C++ compiler (icl) correctly
+# with respect to absolute paths.
+
+required='icl'
+. test-init.sh
+
+get_shell_script compile
+
+mkdir sub
+
+cat >sub/foo.c <<'EOF'
+int foo (void)
+{
+  return 0;
+}
+EOF
+
+cat >main.c <<'EOF'
+extern int foo (void);
+int main (void)
+{
+  return foo ();
+}
+EOF
+
+cwd=$(pwd) || fatal_ "cannot get current directory"
+absfoodir=$cwd/sub
+absmainc=$cwd/main.c
+absmainobj=$cwd/main.obj
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_CONFIG_FILES([sub/Makefile])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = sub
+END
+
+cat > sub/Makefile.am << 'END'
+lib_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+./configure
+$MAKE
+
+./compile icl $CPPFLAGS $CFLAGS -c -o "$absmainobj" "$absmainc"
+
+# POSIX mandates that the compiler accepts a space between the -I,
+# -l and -L options and their respective arguments.  Traditionally,
+# this should work also without a space.  Try both usages.
+for sp in '' ' '; do
+  rm -f main
+  ./compile icl $CFLAGS $LDFLAGS -L${sp}"$absfoodir" "$absmainobj" \
+               -o main -l${sp}foo
+  ./main
+done
+
+:
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index cf6f415..f1c47bb 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -272,6 +272,7 @@ t/compile3.sh \
 t/compile4.sh \
 t/compile5.sh \
 t/compile6.sh \
+t/compile7.sh \
 t/compile_f90_c_cxx.sh \
 t/compile_f_c_cxx.sh \
 t/cond-basic.sh \
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.