[MacPorts] #44413: Use a compiler wrapper script
MacPorts
noreply at macports.org
Wed Jul 23 18:12:28 PDT 2014
#44413: Use a compiler wrapper script
--------------------------+--------------------------------
Reporter: ryandesign@… | Owner: macports-tickets@…
Type: enhancement | Status: new
Priority: Normal | Milestone:
Component: base | Version:
Keywords: | Port:
--------------------------+--------------------------------
I want to try to create a branch of MacPorts to use a compiler wrapper.
This was [https://bugreports.qt-
project.org/browse/QTBUG-34902?focusedCommentId=222528&page=com.atlassian.jira.plugin.system.issuetabpanels
:comment-tabpanel#comment-222528 suggested by a Qt developer] and has also
been mentioned within the MacPorts community before, e.g.
[https://lists.macosforge.org/pipermail/macports-dev/2011-June/014911.html
in 2011] and [https://lists.macosforge.org/pipermail/macports-
dev/2012-October/020653.html in 2012].
Such a wrapper script would itself call the compiler, and add flags like
`-isystem${prefix}/include` and `-L${prefix}/lib` to the end of the
invocation. This would eliminate the need to manually do so in many
portfiles that do not use standard build systems.
The wrapper script could remove any existing `-L${prefix}/lib` from
earlier in the line, thus preventing problems resulting from
`-L${prefix}/lib` appearing before local directories in the linker
invocation (such as problems building a port when another particular port
is installed), thus eliminating the need to laboriously fix each port's
build system or use the `conflicts_build` workaround.
There should be no similar problem with a too-early `-I${prefix}/include`
since the addition of `-isystem${prefix}/include` anywhere in the line
should cancel that out.
The wrapper script could employ `ccache` and/or `distcc` if requested via
the user's selections in macports.conf, eliminating the problem we have
had to patch in some ports which didn't expect `$CC` to contain a space
(see #15772), and allowing ports that currently have to be manually told
how to [UsingTheRightCompiler use the right compiler] to automatically use
ccache and/or distcc without further work by the maintainer.
To automatically handle build systems that call "`gcc`" or "`g++`" (or
"`cc`" or "`c++`", or "`clang`" or "`clang++`") directly, without using
the `$CC` or `$CXX` variables—or even those that call `$CC` and `$CXX` but
have a deficient or missing configure phase and currently have to be told
how to [UsingTheRightCompiler use the right compiler]—we could add the
compiler's symlink directory to the `$PATH`.
Some build systems look at the compiler executable name to decide what to
do, so I propose the filename of the wrapper script (or symlink thereto)
be "`clang`" and "`clang++`" for clang, and "`gcc`" and "`g++`" for gcc.
Additionally, "`cc`" and "`c++`" symlinks should be added for all
compilers.
As an example, I propose a separate wrapper script (or separate symlinks
to a single wrapper script) in a layout like the following layout:
{{{
${prefix}/libexec/macports/compiler-wrappers/clang/bin/cc
${prefix}/libexec/macports/compiler-wrappers/clang/bin/c++
${prefix}/libexec/macports/compiler-wrappers/clang/bin/clang
${prefix}/libexec/macports/compiler-wrappers/clang/bin/clang++
${prefix}/libexec/macports/compiler-wrappers/macports-clang-3.3/bin/cc
${prefix}/libexec/macports/compiler-wrappers/macports-clang-3.3/bin/c++
${prefix}/libexec/macports/compiler-wrappers/macports-clang-3.3/bin/clang
${prefix}/libexec/macports/compiler-wrappers/macports-
clang-3.3/bin/clang++
${prefix}/libexec/macports/compiler-wrappers/macports-gcc-4.8/bin/cc
${prefix}/libexec/macports/compiler-wrappers/macports-gcc-4.8/bin/c++
${prefix}/libexec/macports/compiler-wrappers/macports-gcc-4.8/bin/gcc
${prefix}/libexec/macports/compiler-wrappers/macports-gcc-4.8/bin/g++
}}}
Initially I will make a separate macports-compiler-wrappers port to
install these symlinks, but later each compiler port might provide them
directly.
I am hoping that the number of new problems such a wrapper script might
cause will be far fewer than the number of old problems it magically
fixes.
--
Ticket URL: <https://trac.macports.org/ticket/44413>
MacPorts <http://www.macports.org/>
Ports system for OS X
More information about the macports-tickets
mailing list