bsd.obj.mk -> bsd.prog.mk in modules makefiles, as the
latter automatically includes ../Makefile.inc and adds
-I${DESTDIR}/usr/include to ${CFLAGS} needed for "make
world" which is built with -nostdinc.
Reviewed by: MAINTAINER timeout
1. To cross-build, one now needs to set TARGET_ARCH, and not the
MACHINE_ARCH. MACHINE_ARCH should never be changed manually!
2. Initialize DESTDIR= explicitly for bootstrap-tools, build-tools,
and cross-tools stages. This fixes broken header and library
dependencies problem. We build them in the host environment,
and obviously want them to depend on host headers and libraries.
The problem with broken header dependencies for bootstrap-tools
and cross-tools was already partially solved (see BOOTSTRAPPING
tests in bsd.prog.mk and bsd.lib.mk), but it was still there for
build-tools if the user ran "make world DESTDIR=/foo". Also,
for all of these stages, the library dependencies were broken
because of how bsd.libnames.mk define DPADD members.
We still provide a glue to install bootstrap- and cross-tools
under the ${WORLDTMP}.
Removed PATH overrides for bootstrap-, build-, and cross-tools
stages. There is just no reason why we would need to override
it, and the hacks to clean up the ${WORLDTMP} in the -DNOCLEAN
case are no longer needed with fixes from this step.
That is, we now never use ${WORLDTMP} headers and libraries,
and we don't use any ${WORLDTMP} installed binaries during
these stages. Again, these stages depend solely on the host
environment, including compiler, headers, and libraries.
3. Moved "miniperl" back from cross-tools (it has nothing to do
with a cross-compiler) to build-tools where it belongs. The
change from step 1 let to do this. Also, to make this work,
build-tools targets of "cc_tools" and "miniperl" were modified
to call "depend". Here follow the detailed explanations.
There are two categories of build tools, for now. In the first
category there are "cc_tools" and "miniperl". They occupy the
whole (sub)directory, and nothing needs to be done in this
subdirectory later during the "all" stage. They are also
constructed using system makefiles. We must build the .depend
early in the build-tools stage because:
1) They use (and depend on) the host environment.
2) If we don't do this in build-tools, the "depend" stage of
buildworld will do this for us; wrong library and header
dependencies will be recorded (DESTDIR=${WORLDTMP}) and,
what's worse, the "all" stage may then clobber the
build-architecture format tools (that we built in the
build-tools stage) with the target-architecture format
ones, breaking cross build.
In the second category there are all other build-tools. They
share their directory with the "main" module that needs them
in the "all" stage, and they don't show up themselves in the
.depend file. The portion of this fix was already committed
in gnu/usr.bin/cc/cc_tools/Makefile,v 1.52.
4. "libperl" is no longer a build tool, and "miniperl" is the
stand-alone application. I had to make this change because
build-tools and "all" stages share the same object directory.
Without this change, if we cross compile, libperl.a is first
built for the build architecture during the build-tools stage
(for the purposes of immediate linkage with "miniperl").
Later on, the "all" stage sees this library as up-to-date,
and doesn't rebuild it. The effect is that the wrong format
static libperl library is installed with installworld.
5. Fixed "includes" to install secure/lib/libtelnet headers if
required.
Reviewed by: bde
$ PERL_DL_NONLAZY=1 perl -MPOSIX -e ''
Can't load '/usr/libdata/perl/5.6.0/mach/auto/POSIX/POSIX.so' for module
POSIX: /usr/libdata/perl/5.6.0/mach/auto/POSIX/POSIX.so: Undefined
symbol "sv_setptrobj" at /usr/libdata/perl/5.6.0/XSLoader.pm line 73.
at /usr/libdata/perl/5.6.0/mach/POSIX.pm line 24
Compilation failed in require.
BEGIN failed--compilation aborted.
This problem only exists in -CURRENT. Most often it is reproduced when
compiling some perl extension manually. Make test uses PERL_DL_NONLAZY,
and if a tested module uses POSIX, boom!
Luckily, we don't see it very often, mostly because the vast majority of
p5 ports do not perform the `make test' step.
Submitted by: Anton Berezin <tobez@tobez.org>
Needs to be a committer already: Anton Berezin <tobez@tobez.org>
o Move building libperl and miniperl from build-tools to
cross-tools. libperl uses MACHINE_ARCH to determine the
right configuration, which doesn't match the build
machine when cross-building if they are built as build-
tools.
o Since miniperl needs to be built as a cross-tool, it
needs to be installed under /usr/obj so that it can be
used (cross-tools have a special object directory to
avoid build conflicts. As a downside, you can't easily
run cross-tools from their object directory). Remove
the install and distribute override targets. To avoid
having miniperl installed by installworld, remove it
from SUBDIR.
o We can't pickup miniperl from the object directory but
since it's installed, depend on PATH. This is save,
because the makefiles are run with a known path.
o Build libperl again as part of the library target. A
_libperl variable existed, but it was never defined.
o Add chmod to the list of saved tools, because perl
conditionally uses it during install.
The bootstrap-tools and cross-tools targets are modified to
avoid building profiled and shared libraries. While here,
have these targets build static binaries instead of shared
binaries.
Approved by: markm
1) (Biggest) I tried long-and-hard to keep the version number (5.006)
backwards compatible with FreeBSD; I have lost this battle, and
must defer to the Perl convention (5.6.0). Victims include suidperl.
this means that dirs with a name of 5.006 will be replaced with
dirs named 5.6.0 in both /usr/libdata/perl and /usr/local/lib/perl.
2) Errno module is added.
3) Alpha bits extensively tweeked after a Beast-build.
Other commits to follow.