pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Building pkgsrc on Interix 6.1 x64



Greetings,

Interix 3.5 is listed as a supported pkgsrc platform, but the website claims
that nobody has tested pkgsrc on more recent versions of Interix. Since I
have found Interix and pkgsrc very helpful in the past, I wanted to try
building it on Interix 6.1 (the newest version, currently in release
candidate stage). I don't know if anybody else has attempted this yet. I
haven't succeeded yet, but have made some progress and was hoping somebody
else had suggestions for getting further.

BACKGROUND:
Interix is a Unix-like operating environment that runs on the Windows NT
kernel, somewhat like Cygwin but more tightly integrated with the system. It
executes in a POSIX-compliant NT subsystem, which on recent versions of
Windows is called Subsystem for Unix Applications (SUA). Interix includes a
gcc3-based build toolchain and a minimal set of binary utilities, but lacks
many "everyday" programs such as wget, ssh, subversion, or bash. However,
most programs build correctly from source and run on Interix.

Interix 3.5 (which run on Windows XP) to 6.1 (runs on Windows 7 and Server
2008 R2) includes many fixes and enhancements, but is generally
backward-compatible. However, there are a few prominent changes that affect
compilation, the most important of which is the support for 64-bit
applications (on a 64-bit version of NT). While 32-bit applications and
libraries are still supported, it is occasionally necessary to use an
architecture-specific binary.

BUILD SYSTEM:
Windows 7 RC (build 7100) x64, NT 6.1.
Interix 6.1 x64 (actually, the userspace tools are those used for 6.0; the
6.1 update isn't available yet. /bin/uname -r reports 6.1 however).
Clean install with correct options (enable setuid, enable case-sensitivity,
run as Administrator, GNU Utilities and SDK installed).

SUMMARY:
Bootstrap starts successfully.
Outdated build.config scripts don't recognize processor type string
"genuineintel" causing configure in libnbcompat to fail.
Binary version of /bin/ar for x64 does not come with Interix; use 32-bit
version at /opt/gcc.3.3/bin/ar (location is in PATH, but shadowed by
non-working /bin/ar).

QUESTIONS:
Has anybody else attempted anything like this?
Is there a way to pass a --build parameter to configure, or globally select
a config.guess file to use?

DETAILS:
Unpacking pkgsrc (2009 Q1) and executing bootstrap works. However, the
version of config.guess included in libnbcompat (and almost certainly other
packages) doesn't correctly recognize my processor (more correctly, doesn't
recognize the output of my uname -m), which is "genuineintel" (Centrino 2
family Core 2 Duo, same as "EM64T"). This value is recognized in the newest
versions of config.guess (since September last year, I think), available
from
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
;hb=HEAD. Note that this is not the repository mentioned in the outdated
versions of config.guess, which is a cvs repository located on the same
server but which hasn't been updated in over a year.

Each package appears to have its own copy of config.guess, which makes
replacing all them inconvenient. As a work-around, one can bypass
config.guess by passing configure scripts the parameter --build=<build
type>. For Interix 6.1, the correct value is 
x86_64-unknown-interix6.1
which appears to be an acceptable build type. However, I can't find any way
to make pkgsrc pass this parameter to each package's configure script. I
tried editing the bootstrap script to add this option to
$configure_quiet_flags (as that variable is passed to each call of
configure) which allowed the bootstrap version of libnbcompat to compile,
but building actual packages still fails during configuration. The relevant
output is attached in file pkgsrc_error.txt. If there is a better way to
ensure that this parameter gets passed to each package's configure script
(if it uses such) or to instruct pkgsrc to use a specific version of
config.guess, this would be great.

Additionally, building archives will fail on 64-bit Interix without some
additional build software installed (/bin/ar is in fact a shell script which
calls these other programs). The manpage says that there is a 32-bit binary
version of ar also included at /opt/gcc.3.3/bin/ar, which appears to work. I
moved the script version to /bin/ar.sh and symlinked /bin/ar to
/opt/gcc.3.3/bin/ar, which allows bootstrap to work once the build type
issue was worked around.


Wow, sorry, that was much longer than I'd intended. Does anybody have any
suggestions, or know anything more about this? My knowledge of the inner
working of pkgsrc is limited, but nothing I've seen so far suggests that
this can't be made to work. Actual 64-bit support isn't even needed; I'm not
planning on running Apache or something and needing  16GB of RAM, but it
would be very nice to get the tools I'm used to using every day working.

Thanks,
Chris Hacking



=> Registering installation for install-sh-20070712
===> running: (cd /dev/fs/D/Downloads/SUA/pkgsrc/devel/bmake && /dev/fs/D/Downlo
ads/SUA/pkgsrc/bootstrap/work/bin/bmake  -DPKG_PRESERVE MAKECONF=/dev/fs/D/Downl
oads/SUA/pkgsrc/bootstrap/work/mk.conf install)
===> Skipping vulnerability checks.
WARNING: No /var/db/pkgsrc/pkg-vulnerabilities file found.
WARNING: To fix run: `/dev/fs/D/Downloads/SUA/pkgsrc/bootstrap/work/sbin/pkg_adm
in -K /var/db/pkgsrc fetch-pkg-vulnerabilities'.
===> Installing dependencies for bmake-20081111
=> Full dependency bootstrap-mk-files-[0-9]*: found bootstrap-mk-files-20090226
===> Overriding tools for bmake-20081111
===> Extracting for bmake-20081111
/bin/cp -R /dev/fs/D/Downloads/SUA/pkgsrc/devel/bmake/files /dev/fs/D/Downloads/
SUA/pkgsrc/bootstrap/work/wrk/devel/bmake/work/bmake
===> Patching for bmake-20081111
===> Creating toolchain wrappers for bmake-20081111
===> Configuring for bmake-20081111
=> Configuring and building libnbcompat
configure: WARNING: If you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used.
checking build system type... ./config.guess: unable to guess system type

This script, last modified 2007-03-06, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from

  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
and
  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub

If the version you run (./config.guess) is already up to date, please
send the following data and any information you think might be
pertinent to <config-patches%gnu.org@localhost> in order to provide the needed
information to handle your system.

config.guess timestamp = 2007-03-06

uname -m = genuineintel
uname -r = 6.1
uname -s = Interix
uname -v = 10.0.6030.0


Home | Main Index | Thread Index | Old Index