Commit graph

244 commits

Author SHA1 Message Date
rillig
1bd0ba21be gcc knows -fpic. 2007-09-08 13:37:51 +00:00
joerg
005620851f Add core of the infrastructure support for cross-compilation.
- USE_CROSS_COMPILATION activates it, CROSS_DESTDIR specifies root of
  the target filesystem
- derive _CROSS_DESTDIR from CROSS_DESTDIR or MAKEOBJDIR
- buildlink3.mk prefixes the files to symlink with _CROSS_DESTDIR
- compiler/gcc.mk knows about the target prefix (e.g. i386--netbsdelf)
- PKG_DBDIR is prefixed with _CROSS_DESTDIR
- package-install and bin-install are not called with su
- install and strip are redirected to the tool version
- links for the target specific ar, as, ld, nm, objdump, ranlib and
  strip are added
- compiler wrapper detect if linking is requested or not
- special command sinks for CPP and CC/CXX add the cross-compile magic:
  - modify include dirs to get the target /usr/include
  - modify linker dirs and runpath to use target /usr/lib at link time,
    but keep correct rpath entries

Supported-by: Google SoC 2007
Basic tests by he@ on Sparc. Review from jlam@.
2007-08-02 18:19:31 +00:00
rillig
a43d0cbe68 Changed the plain "mkdir" into ${MKDIR}, like in all the other cases.
Apparently, the tools directory isn't in the PATH at the point where
this code is executed.

Fixes PR 35487.
2007-06-18 07:33:34 +00:00
rillig
3c335872b8 Added transformations for -R, -fPIC, -kPIC, -KPIC and -g3. 2007-06-15 15:34:31 +00:00
rillig
4a8946c97e Added a slight variation of the patch provided in PR 36187 by Naoto
Morishima.
2007-06-09 11:27:33 +00:00
rillig
287ae72163 Replaced ${_PKG_SILENT}${_PKG_DEBUG} with a simple ${RUN} to save some
space.
2007-06-06 13:20:34 +00:00
martti
5867247b54 Remove trailing spaces. 2007-05-28 11:07:00 +00:00
rillig
a5f2e60928 When a wrapped compiler or linker command fails, the transformed command
line is no longer printed by default. To get that behavior back, you can
set the variable WRAPPER_DEBUG to "yes".

This avoids some noise during the build. The old behavior was mostly
useful on Solaris and IRIX, where a -std=c99 or -c99 option had been
added to the compiler's arguments by the wrapper. This caused
diagnostics that were hard to understand, since the user did not specify
these flags and there was no sign that they had been added.
2007-05-19 17:25:56 +00:00
tnn
c7d09b8f3c Back out previous. The packages that incorrectly assume that ld
--version-script works are few enough to warrant fixing each one of them
instead. Silenty dropping the flag makes it impossible to detect whether or
not --version-script is supported. Pointed out by joerg@
2007-05-06 10:05:38 +00:00
tnn
417f311e41 --version-script is GNU ld specific, remove from command line. 2007-04-29 13:16:48 +00:00
tnn
305f2d4288 Correct comment about -g3 flag. 2007-04-28 21:32:30 +00:00
tnn
5246b02f93 Handle linker optimization flag. 2007-04-22 18:56:22 +00:00
tnn
89d0487fe0 fix typo 2007-04-21 14:53:19 +00:00
tnn
cf0d723c6f add workaround for ld(1) run path problems and document those 2007-04-21 01:29:25 +00:00
tnn
146da1286c Teach pkgsrc about HP-UX. 2007-04-14 14:17:49 +00:00
tnn
2df0aa35f6 Add OSF1 wrapper quirks to always enable posix sockets and iso C++ iostreams.
Fixes PR 31444. Fixes PR 31447. Both problems reported by Rumi Szabolcs.
2007-04-12 14:51:10 +00:00
rillig
f98d016454 + -march=* 2007-04-10 03:44:34 +00:00
tron
aef83eee53 Remove special treatment of "DynaLoader.a" completely. It's not necessary
with current libtool version and breaks the build under Darwin 8.x and
NetBSD 4.0_BETA2.
2007-04-09 22:33:26 +00:00
rillig
b422be0f7a wrapper_type can be IMAKE, too. 2007-03-15 22:09:29 +00:00
rillig
1ceda05973 Added the flags to control diagnostics. 2007-03-07 22:02:34 +00:00
rillig
ca73e90164 Fixed the documentation of the opt:*:* transformation. 2007-03-07 12:40:54 +00:00
rillig
215797f36f The compiler option -Wl,foo,bar,baz is split into -Wl,foo -Wl,bar
-Wl,baz before processing the resulting options again.

Fixes PR 32203.
2007-02-23 00:31:29 +00:00
rillig
7cdc72c444 Changed the default warning message to include the word "unknown", since
otherwise it doesn't sound like a warning.
2007-02-22 14:54:32 +00:00
rillig
6699eeb63a More documentation. 2007-02-22 07:15:54 +00:00
rillig
1b99f46aad gcc understands -Wno-unused-parameter. 2007-02-21 19:29:56 +00:00
rillig
4d2476efa1 Changed the failure into a warning when options such as "-I -L" appear
next to each other.
2007-02-21 12:27:36 +00:00
rillig
a0dd1a37e7 The options -I, -L and -R must not be followed directly by another
option. Instead of just merging them, the wrapper fails. Let's see which
packages get broken by that and then fix them.

I've also heard rumours that a plain -L is used as an alias to -nostdlib
in some compilers. This would have been handled wrong up to now, since
it definitely wasn't intended to be merged with the following argument.
2007-02-21 09:43:26 +00:00
rillig
f1bc7a1210 Mapping command line options to the ABI is not as simple as I thought:
-32 does _not_ belong to ABI 32. Instead, the mapping is:

	ABI	Options
	(undef)	-o32 -32
	32	-n32
	64	-64

While here, allowing -OPT:* to pass through to the compiler, since it
will understand it.

This should fix PR 35729.
2007-02-20 16:12:41 +00:00
rillig
5495a908a1 The ABI for which the code should be generated can be queried from the
wrapper_abi variable. This is used in the MIPSpro wrapper to reject any
package that tries to compile a file for the wrong ABI. This is not just
a warning because such a package most likely has more severe problems.

The gcc -Wall option seems to be similar to the MIPSpro -fullwarn
option, so map them.
2007-02-19 14:50:33 +00:00
rillig
b157602e03 The argument -64 means to use the 64-bit ABI for Sun C and MIPSpro. 2007-02-19 14:43:05 +00:00
rillig
ecb69be79f The mipspro compiler knows -32, -n32 and -64, of course. 2007-02-18 23:59:57 +00:00
rillig
ea5e7c8c6d Documented WRAPPER_REORDER_CMDS. 2007-02-18 23:49:44 +00:00
rillig
96a2636f64 Added option handlers for all of -fPIC, -fpic, -KPIC, -kPIC,
-xcode=pic13 and -xcode=pic32, as suggested in PR 35555.

This also fixes and old bug where -fPIC (32 bit) had been translated to
-kpic (13 bit), but apparently that doesn't make a big difference in
practice.
2007-02-07 18:25:29 +00:00
rillig
fdd5258a69 Added a new variable wrapper_type to the wrappers, so that the
transformations can decide whether they happen in a C or a C++ compiler.
Now the wrappers don't depend on the basename of the executed compiler
wrapper anymore.

Fixes PR 35555.
2007-02-06 20:33:50 +00:00
rillig
f705bc4de8 Some more gcc options I've found on Solaris. 2007-02-06 20:26:51 +00:00
rillig
8bae16fa25 More gcc options. 2007-02-06 19:35:41 +00:00
rillig
6cd528c1df The sunpro C++ compiler needs its own cache, since cc and CC transform
-Wall to different arguments.
2007-01-17 13:20:56 +00:00
rillig
a440d183a7 The sunpro wrapper needs to distinguish whether cc or CC is called in
some cases.

XXX: There should be more support in the infrastructure for this case.
2007-01-17 13:19:47 +00:00
rillig
faba91bc57 Options to subprocesses like the assember must pass the transformations.
They are _not_ GCC warnings, although they start with -W.
2007-01-14 18:56:25 +00:00
rillig
78860dce69 Fixed a syntax error. 2007-01-08 14:01:41 +00:00
rillig
91f388696d MIPSpro knows the -c99, -M and -MDupdate options. 2007-01-08 12:09:47 +00:00
rillig
65c174f9e0 Added some more flags that gcc definitely knows, to reduce the number of
warnings.
2007-01-06 02:20:10 +00:00
rillig
dfc54f4c6a Bugfix: Only regular files can be unwrapped. 2007-01-04 00:57:29 +00:00
rillig
37ab58e7c0 Added an "eval" to make the <*> line look like the [*] line, in terms of
the quoting level. It had contained too many backslashes before, which
has led to confusion, at least for me.
2007-01-02 17:13:59 +00:00
rillig
5aceb423df Some of the SunPro compilers (cc, c89) cannot handle the -O0 and -O1
options. Some others (c99, CC) can. To avoid linker errors about
"illegal option -- 1", these options are converted to -xO0 and -xO1,
which work.

Committed during the freeze to avoid breakage of packages. The code that
passed the -O0 and -O1 options through is relatively new, so there may
not have shown packages that break because of this.
2006-12-18 00:21:31 +00:00
martti
e2610fb8c8 Remove trailing tabs. 2006-12-15 13:15:06 +00:00
martti
2cc4216d5e Remove trailing spaces. 2006-12-15 12:46:23 +00:00
dmcmahill
725c4c50a3 Add a --wrappee-name command line option to simply return the name of
the wrapped command and exit.  This will be used by libtool which needs
to figure out the true command name.  Yeah, it is ugly behaviour from
libtool, but I'm not going to rewrite libtool.

Change ok-ed by jlam.
2006-12-14 22:25:19 +00:00
rillig
af345e7eb3 Converted to using the functions from wrapper-subr.sh. 2006-12-10 03:14:59 +00:00
rillig
7bd351d3ea + -M 2006-12-10 00:18:17 +00:00
rillig
c0db9bdc6f Added a small program to test a single transformation plug-in. 2006-12-09 12:42:43 +00:00
rillig
ec0abe202c Since the wrapper transformations are usually quite hard to follow and
may lead to failure for some packages, a note to the user is printed
when a wrapped command fails, including the "real" command line of the
wrapped command.

This change arose from the implicit addition of the -std=c99, -std=gnu99
or -c99 options, which made some packages fail with obscure error
messages. This change helps users get to the real cause more quickly.
2006-12-09 12:11:28 +00:00
rillig
7bf0660e71 + -fno-implicit-templates
+ -MM
2006-12-09 12:06:55 +00:00
rillig
697899fc00 The SunPro C++ compiler knows the -template=* option. 2006-12-08 05:35:55 +00:00
rillig
7a051744ac + -Wcast-align 2006-12-07 00:32:36 +00:00
rillig
fdc2194469 SunPro knows the -mt option for enabling multi-threaded options. 2006-12-05 22:29:27 +00:00
rillig
4304993eda Added -pipe and -Wno-implicit-int to the list of known gcc options. 2006-12-01 21:10:18 +00:00
rillig
1815e3e939 Converted the MIPSpro wrappers to use the transform_* functions. 2006-11-30 13:00:16 +00:00
rillig
aac372bd8c The function transform_pass_with_warning() also gets its debugging
output.
2006-11-30 12:59:56 +00:00
rillig
7ec0b5c018 Adjusted the indentation and the order of checks to match the other
files.
2006-11-30 12:49:57 +00:00
rillig
cb46105231 Made the code simpler by converting it to the new transform_* functions.
A warning is printed whenever unknown options are passed.
2006-11-30 12:34:30 +00:00
rillig
7034ce594b Added handlers for the standard options.
A warning is printed for all options that are not explicitly handled.

Reindentation to align with the other files.
2006-11-30 12:18:32 +00:00
rillig
210a609939 Removed the transform_to_nocache() function, since it is unused.
When discarding arguments, split_arg is set to yes, so that no empty
arguments are added to the resulting command line. A more informative
debugging message is also printed in that case.

Added a debugging message to transform_to(), for consistency with the
other functions.
2006-11-30 12:11:48 +00:00
rillig
d20919c301 Converted to use the new transform_* functions from wrapper-subr.sh. 2006-11-30 11:51:39 +00:00
rillig
d997c2fb01 Added transform_to_and_split(), which removes the need for the
compiler-specific transformations to access the split_arg variable
directly.
2006-11-30 11:40:24 +00:00
rillig
87d17f2abb Minor reformatting. I'm still not sure what the ideal indentation and
source code layout is. But at least, this file looks to me as if even
newbies could see where to change it to fit their needs.
2006-11-30 11:34:23 +00:00
rillig
91dbddf79f Reformatted the file to look more beautiful.
Reordered the compiler options to catch the standard ones first.
2006-11-30 10:01:29 +00:00
rillig
4b93d3ead2 The -E option should be passed to SunPro without a warning. 2006-11-29 17:36:15 +00:00
rillig
0d6ef4486f Removed the separate files for the cache header and footer. This makes
the code a lot more readable.
2006-11-26 14:42:17 +00:00
rillig
ba242d18aa Found some more known options for gcc. 2006-11-26 14:39:52 +00:00
rillig
1bffa7c999 Merged the transformations from the Solaris-specific gcc part into the
generic one. That way, the unknown options are reported properly on all
platforms.
2006-11-26 13:02:53 +00:00
rillig
6a7a034b39 Converted this file to use the shell functions provided in
wrapper-subr.sh.
2006-11-26 13:00:26 +00:00
rillig
9257944253 Oops, unknown options should be _passed_ to the real compiler, not
_discarded_.
2006-11-26 10:00:04 +00:00
rillig
2e410b3409 Added a transformation file for gcc to check for unknown options. 2006-11-26 09:56:46 +00:00
rillig
414d0506c0 Renamed transform_pass_unknown to transform_pass_with_warning and added
transform_discard_with_warning.
2006-11-26 09:55:52 +00:00
rillig
627712c574 transform_pass_unknown writes its warning into the wrapper log file,
instead of doing nothing at all. (Before, I had not known where to write
these warnings, so it had been commented out.)
2006-11-26 09:13:44 +00:00
rillig
2681aeb95a Moved the definition of append_extra_args a bit to make the code a
little more understandable.

Eliminated the otherwise unused variable original_cmd.
2006-11-26 08:42:42 +00:00
rillig
9ba5e8c4e3 Fixed indentation of the debugging messages and the missing newline at
the end of the file.
2006-11-14 13:40:20 +00:00
rillig
c9f593bcde Converted the SunPro wrapper to use the functions from wrapper-subr.sh.
Added some code to check for unknown options.

Reindented the file so that the compiler options are better visible.
They had been hidden by the massive block comments before. Also, every
option has got its own line so that one only needs to read the first
column to find the relevant code.
2006-11-11 07:50:28 +00:00
rillig
b11cdc1a44 Added wrapper-subr.sh, which provides shell functions that are useful to
make the wrapper code less frightening. For example, instead of

    arg="${arg#-Wl,}"
    $debug_log $wrapperlog "   (transform-sunpro-cc) to: $arg"
    addtocache=yes

one can simply write

    transform_to "${arg-Wl,}"

The functions that are currently implemented are: transform_to,
transform_discard, transform_to_nocache, transform_discard,
transform_pass and transform_pass_unknown.
2006-11-11 07:44:46 +00:00
rillig
46aab65a30 Made the SunPro compiler understand gcc's -MM option for generating
Makefile dependencies.
2006-11-11 07:00:57 +00:00
rillig
0f6d0af411 The Tru64 linker does not know -h ${soname}, only -soname ${soname}.
Patch provided by Hrvoje Habjanic in http://mail-index.netbsd.org/pkgsrc-users/2006/11/02/0003.html
2006-11-03 07:28:53 +00:00
rillig
2d8b4b8afb Removed some code duplication, which results in 120 lines less code. 2006-11-02 23:25:00 +00:00
rillig
f00e3cc513 -E is an alias for --export-dynamic, which the Solaris linker does not
understand, too.
2006-10-26 07:01:46 +00:00
rillig
e9bd6f8cff The "scan" program does not modify "$@". 2006-10-21 11:43:42 +00:00
rillig
69155cdc3e Fixed the "inconsistent update" problem when using the pkgsrc wrapper
cache together with MAKE_FLAGS=-j. The cache file is now regenerated
into a temporary file and then renamed (atomically) to the "real" cache
file.

Fixed some code that would fail when run in "set -e" mode. If you want to
test the "set -e" mode, just uncomment the line in wrapper.sh.
2006-10-21 11:42:25 +00:00
rillig
517fa1fce8 When CPP is defined as "cc -E" on Solaris with sunpro, the cc wrapper
had been overwritten with the cpp wrapper, and the latter didn't define
the necessary transformation rules. Fixed that.
2006-10-21 10:01:23 +00:00
rillig
a9df3d8786 When $debug_log is set to ":" and at the same time $IFS is ":", the
command line

    $debug_log $arguments

tries to execute the empty command. This results in error messages of
the form

    cc[50]: : cannot execute   (IRIX)
    bash: : command not found  (Bash)
    : permission denied        (NetBSD /bin/sh)

Setting IFS to the original value as soon as possible fixes these bugs.

Fixes PR 34135.
2006-09-17 22:52:45 +00:00
rillig
6dbf373945 Fixed the "unknown command" error messages for debug_log, which is a
variable, not a shell function.
2006-09-17 18:46:00 +00:00
jlam
5aa00032dc From the second point in Krister's mail to tech-pkg:
http://mail-index.netbsd.org/tech-pkg/2006/07/30/0005.html

   2. Too much is logged in the .wrapper.log

       The wrappers log quite a lot of detailed information by
       default, with the result that my .work.log file is 176236028
       bytes {for ghc}.

       The wrapper functionality is mature, so this detailed
       information is seldom needed, and you can in general determine
       what happened by looking at the input/output-lines (i.e.
       those lines marked as "[*]" and "<.>" in the .work.log).
       I would therefore like to change the default behavior to
       only log the input/output-lines.

Flip the switch for WRAPPER_DEBUG from "yes" to "no" by default so
that the detailed and rather verbose "push", "pop", "transform", etc.
messages are not printed.  While here, also make WRAPPER_DEBUG a
pkgsrc-private variable by prepending with an underscore.
2006-07-31 14:53:45 +00:00
jlam
50086541bd Use 'debug_log' instead of 'msg_log' so that these wrapper internals aren't
exposed unless WRAPPER_DEBUG is set to "yes".
2006-07-31 14:43:48 +00:00
jlam
6a569e5eb8 After auditing all the packages the ensure that they never invoke the
compiler toolchain until the configure stage, move the "wrapper" stage
back to between "patch" and "configure".

This makes "make extract NO_DEPENDS=" work again for all packages.
2006-07-27 13:47:29 +00:00
jlam
77b719dae8 Modify the barrier so that we always invoke the recursive make process
when passing through the barrier.  This ensures the PATH (passed via
PKGSRC_MAKE_ENV) is correctly set for all phases after the barrier.

This fixes a bug in "interactive" pkgsrc use, where if you have no
work directory and type "make build && make install", then the "install"
step does not have a PATH set to include all the wrapper and tools
directories.
2006-07-22 16:31:35 +00:00
jlam
4011c5cff2 Rearrange sequence so that "wrapper" occurs between "tools" and
"extract".  This allows all user-definable targets (pre-*, do-*,
post-*) to have access to the wrapper scripts.
2006-07-21 14:21:28 +00:00
jlam
356f5e8af5 Rename <phase>_COOKIE variables to _COOKIE.<phase>. These are private
variables so there are no user-visible changes.  This change just makes
it a little easier to write for loops.
2006-07-07 21:24:27 +00:00
jlam
a8fcae3925 The cookie files are indirectly made using *-cookie targets, so verify
that they are never being created more than once by inserting a check
into the *-cookie targets.
2006-07-06 22:29:52 +00:00
jlam
7dd0cd6b98 Never skip the wrapper step, even if NO_BUILD is set. There are packages
that invoke the compiler in either the configure or install steps that
we still need to guard against.
2006-07-06 18:19:45 +00:00
jlam
b8d23232b8 Flatten out recursive makes into a single re-invocation of make by
introducing the concept of a "barrier".  We separate the user-invokable
targets into ones that must happen before the barrier, and ones that
must happen after the barrier.  The ones that happen after the barrier
are run in a sub-make process.  In this case, the targets that must
be run after the barrier are from the "wrapper" step and beyond.  We
rewrite the various "flow" targets, e.g. wrapper, configure, build,
etc., so that they of the right form to use the barrier target.

This now completely removes the concept of PKG_PHASE from pkgsrc.  It
is replaced with the concept of "before" and "after" the barrier, and
this state can be checked by testing for the existence of the barrier
cookie file.  Because we've removed most of the recursive makes, there
is now nowhere to hook the PKG_ERROR_HANDLER.* commands, so remove
them for now.

As part of this commit, put back the logic that conditionalized the
sources for the various cookie files.  Because the sources are all
"phony" targets, they were always run, regardless of whether or not
the cookie file already existed.  Now, if a cookie file exists, then
that entire phase associated with that cookie file is skipped.

Lastly, fix a thinko in configure/bsd.configure.mk where setting
NO_CONFIGURE in a package Makefile would manage to skip the "wrapper"
step altogether.  Fix this by correctly noting "wrapper" and not
"patch" as the preceding step to "configure".
2006-07-05 22:21:02 +00:00
jlam
990d0b5377 Make the check-vulnerable target more self-sufficient, by moving some
of the logic from fetch/fetch.mk into flavor/pkg/check.mk, so that
check-vulnerable can be used as a source target.

Make check-vulnerable a source target for every phase of the build
workflow, which ensures that it is always run if the user starts a
new phase from the command line.

Fix the cookie-generation targets so that they don't append, only
overwrite to the cookie file.  This works around potential problems
due to recursive makes.

Move the cookie checks so that they surround the corresponding phase
target.  The presence of the cookie should now inform the make process
to avoid doing any processing of phases that occur before the phase
corresponding to the cookie.
2006-07-05 09:08:35 +00:00
jlam
e31200b87c Refactor configure, build, test and wrapper phases out of bsd.pkg.mk
and into their own directories.  Also do some cleanups with build/_build
and pkginstall -- we get rid of _build and simply run pkginstall as
part of the "build" target.

Introduce a new mechanism to handle varying directory depths under
${WRKSRC} in which we find files to override, e.g. configure, config.*,
libtool, etc.  OVERRIDE_DIRDEPTH is a package-settable variable that
specifies how far under ${WRKSRC} the various targets should look,
and it defaults to "2".  We preserve the
meaning of the various *_OVERRIDE variables, so if they are defined,
then their values supersede the OVERRIDE_DIRDEPTH mechanism.

devel/tla will need to specially set OVERRIDE_DIRDEPTH to 3 (see log
for revision 1.1857 for bsd.pkg.mk -- to be done in a separate commit.
2006-07-05 06:09:15 +00:00