Commit graph

71 commits

Author SHA1 Message Date
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
287ae72163 Replaced ${_PKG_SILENT}${_PKG_DEBUG} with a simple ${RUN} to save some
space.
2007-06-06 13:20:34 +00:00
tnn
89d0487fe0 fix typo 2007-04-21 14:53:19 +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
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
ea5e7c8c6d Documented WRAPPER_REORDER_CMDS. 2007-02-18 23:49:44 +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
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
dfc54f4c6a Bugfix: Only regular files can be unwrapped. 2007-01-04 00:57:29 +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
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
2e410b3409 Added a transformation file for gcc to check for unknown options. 2006-11-26 09:56:46 +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
2d8b4b8afb Removed some code duplication, which results in 120 lines less code. 2006-11-02 23:25:00 +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
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
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
jlam
bb74d3bb13 Teach the tools framework about the following new tools:
itools, intltool, diff3, sdiff, msgmerge

* Adding USE_TOOLS+=itools to a package Makefile will cause the
  tool-directory versions of imake, makedepend, mkdirhier and xmkmf
  to point to the ones from the devel/nbitools package.

  This change will remove the need for nbitools/buildlink3.mk, which
  currently does a bit of hackery to force the "right" imake tools to
  be used by packages that need it.

* Adding USE_TOOLS+=intltool to a package Makefile will cause the
  local versions of intltool-* inside ${WRKSRC} to be replaced by
  copies from the textproc/intltool package.  If "intltool" is not
  specified as a tool, then we create "broken" intltool-* tools in
  the tools directory to help highlight hidden dependencies on the
  intltool package.

  In addition, modify the tools framework so that if "perl" is not
  specified as a tool, then we create a "broken" perl tool in the
  tools directory for the same reason as for "intltool".

  These two changes together will remove the need for
  intltools/buildlink3.mk and should also catch all cases where the
  sources' intltools may have been silently used because perl was
  found on the system.

* Adding USE_TOOLS+=diff3, USE_TOOLS+=sdiff, or USE_TOOLS+=msgmerge
  to a package Makefile will cause the corresponding tool to be pulled
  into the tools directory.

  These are convenience tools to help simplify dependencies for some
  packages.
2006-07-05 04:32:10 +00:00
rillig
66e0bd88f8 Fixed an obvious typo: .if !target$(${_WRAP_EMPTY_FILE}) contains a
dollar character before the opening parenthesis. This should really have
been detected by bmake, but somehow the parser seems to be tolerant with
respect to syntax errors.
2006-07-02 09:45:23 +00:00
wiz
921b38d138 Remove superfluous quotes around SUBST_MESSAGE. 2006-01-16 23:35:29 +00:00
rillig
999f8b6e04 Applied all quoting fixes found by "pkglint --autofix". 2005-12-05 22:07:07 +00:00
schwarz
7e79f31cbf added support for the SGI IDO (IRIX Development Option) cc used by IRIX 5.3.
changes approved by jschauma and recht.
2005-10-16 19:44:44 +00:00
grant
7bdc3361fc strip leading "-Qoption ld" from -R args for sunpro C++ compiler, to
avoid duplicate "-Qoption ld" args when the -R args is later stripped.

thanks to jlam@ for the hint.
2005-08-20 14:37:53 +00:00
grant
b1f57c9784 icc 9.0 wants the same options as 8.1. 2005-07-26 07:36:54 +00:00
grant
a457387735 ensure gcc options are always passed to imake when using gcc on
Solaris.

fixes PR pkg/29608.
2005-07-23 04:45:30 +00:00
grant
597263b97a update copyright year 2005-07-06 03:35:28 +00:00
grant
ec6f7fe9a7 add cmd-sink for sunpro C++ which links shared libraries with the
standard C++ runtime libraries.

we need to explicitly do this because ${CXX} only links against the
C++ runtime libraries when building an executable, not a shared
object. this results in executables linked against libraries linked by
${CXX} unable to resolve C++ symbols at runtime.

fixes packages which link shared libraries using ${CXX}, including
graphics/glu, databases/db4, and packages which use shared libraries
provided by these packages.
2005-07-06 03:31:24 +00:00
rillig
50085b3e47 Made sure the :sh operator does not result in an empty string. Rewrote the
variable substitution for the find(1) command to be more readable.
2005-05-20 22:40:36 +00:00
jlam
262ed77f43 Change instances where we stored shell command in a make variable into
variables that use the :sh modifier.  This still causes expansion to only
happen when referenced, and has the advantage of being :Q-safe.

Bring back the changes from revision 1.19 of mk/subst.mk now that the
problem noted above has been fixed.  This passes the buildlink-unwrap
regression test.
2005-05-20 21:36:05 +00:00
jlam
0dbd0c0762 Rename MAKE_VARS to MAKEVARS so that it more closely resembles
"MAKEFLAGS".  Both "MAKEVARS" and "MAKEFLAGS" affect the package-level
make process, not the software's own make process.
2005-05-11 22:08:18 +00:00
jlam
03e9337879 Teach bsd.pkg.mk to create a phase-specific "makevars.mk" file that
caches variable definitions that were computed by make.  These variables
are specified by listing them in MAKE_VARS, e.g.,

	.if !defined(FOO)
	FOO!=	very_time_consuming_command
	.endif
	MAKE_VARS+=	FOO

bsd.pkg.mk will include only the one generated during the most recent
phase.  A particular phase's makevars.mk file consists of variable
definitions that are a superset of all of the ones produced in previous
phases of the build.

The caching is useful because bsd.pkg.mk invokes make recursively,
which in the example above has the potential to run the very time-consuming
command each time unless we cause FOO to be defined for the sub-make
processes.  We don't cache via MAKE_FLAGS because MAKE_FLAGS isn't
consistently applied to every invocation of make, and also because
MAKE_FLAGS can overflow the maximum length of a make variable very
quickly if we add many values to it.

One important and desirable property of variables cached via MAKE_VARS
is that they only apply to the current package, and not to any
dependencies whose builds may have been triggered by the current
package.

The makevars.mk files are generated by new targets fetch-vars,
extract-vars, patch-vars, etc., and these targets are built during
the corresponding real-* target to ensure that they are being invoked
with PKG_PHASE set to the proper value.

Also, remove the variables cache file that bsd.wrapper.mk was generating
since the new makevars.mk files provide the same functionality at a
higher level.  Change all WRAPPER_VARS definitions that were used by
the old wrapper-phase cache file into MAKE_VARS definitions.
2005-05-09 05:06:55 +00:00
tv
91b28b7d9a In line with the unconditional inclusion in bsd.pkg.mk, bsd.buildlink3.mk
must always bee included too.
2005-04-07 16:56:00 +00:00
tv
fe3c1321bf USE_BUILDLINK3 is no longer optional (and cannot be turned off). Per mail
to tech-pkg:

=====

* USE_BUILDLINK3=YES will be unconditional.  (In fact, USE_BUILDLINK3 will
  be ignored altogether by mk/; but see below.)

* NO_BUILDLINK and NO_WRAPPER will be ignored by mk/.  If a build happens,
  these phases will happen.

* The existing NO_BUILD will imply the previous NO_BUILDLINK and NO_WRAPPER.
  If no build happens, those phases are not needed.

* NO_TOOLS will be ignored by mk/.  The tools phase, which provides much
  more than just the C compiler, will always happen regardless of package.
  This will make metapackage builds only slightly slower, in trade for far
  less user error.
2005-03-24 17:46:00 +00:00
grant
6f23238a15 fix previous to work with pkgsrc bmake, and add a comment explaining
why it must be done this way.
2005-03-08 00:52:31 +00:00
agc
8fb629087b Also echo the wrapper stages if PKG_VERBOSE is defined, not just when
PKG_DEBUG_LEVEL > 1.
2005-03-06 22:27:12 +00:00
grant
fab0a1b153 add wrappers to transform arguments for AIX's ld(1), notably, if we
are dynamically linking, the -brtl flag must be passed to the linker
so that the runtime linker is used.

tested on AIX 4.3 and 5.1 by garbled@.
2005-02-19 04:19:59 +00:00
grant
94c992087d properly detect icc 8.1, which needs a different argument to
statically link the Intel provided libraries.
2005-02-16 10:59:03 +00:00
grant
9fd9fe5331 add support for icc, the Intel C++ Compiler (Linux).
icc is a high performance compiler suite for Linux/i386 and ia64, and
is free for non-commercial use. see:

	http://www.intel.com/software/products/compilers/clin/

for more information.

tested with icc version 8.0 and 8.1 on Slackware 10/i386.
2005-02-15 07:43:43 +00:00