Hi all,
I'm looking for people to help with an experiment. I'm in pretty far
over my head, so insights would be greatly appreciated.
1. Cross-compiling C/C++ to a Win32 target on Linux with autoconf
and gcc is old hat [1].
2. Perl is cross-platform.
So, why can't I compile perl code for qdos from the comfort of Linux?
Oh wait, I can.
http://scratchcomputing.com/tmp/Makefile.cross.patch
This is just a hand-hacked makefile for Scalar-List-Utils (because that
seems like a good simple starting point.) The goal today was basically
just to illuminate the differences between a Linux Makefile and a Win32
Makefile.
I've been looking at wxPerl as well, but Alien::wxWidgets has all of the
same single-platform assumptions, so that's yet another thing to
tackle.
As for the "why?" -- Ultimately, I would love to have a wine-based
testing system for win32 perl on Linux as well. Essentially, a
completely open and scalable solution to all (well mostly all) of your
win32 build/test needs. (Sure, one person can buy and install windows
and vmware, but I shouldn't need to explain the benefits of
unencumbered redistribution here.) Even if that doesn't work, doesn't
the ability to host a par/ppm repository without maintaining a windows
box sound like a good thing?
Note that I'm not talking about compiling the perl interpreter. That's
an entirely different bag of worms. What I'm trying to tackle here is
simply the MakeMaker/CBuilder side of things in building modules.
Something along the lines of:
perl -MCrossTools Makefile.PL # (or Build.PL)
./Build
./Build pardist
./Build winetest
Also note, I'm not particularly targetting cpan(plus).pm-enabled usage
for this toolset (at least, there's no particular need for backwards
compatibility and cross-platform support (except possibly OSX/BSD and
other gcc-enabled *nixes.))
If you're unfamiliar with MakeMaker/CBuilder/etc, the typical scheme is
to have a subclass for each platform.
But if you look at autoconf, they've got the "host" and "build"
concepts. That is, how we copy and name a file is linux-like, but the
compiler options are windows-like (they're exactly the same as the
mingw options on windows -- except of course the -Ldirnames and
-Ipaths.)
So, what's the best path to get from Makefile.PL to either a workable
Makefile (nothing wrong with assuming make on linux) or an
ExtUtils::CBuilder - based solution?
I'm thinking there will be a few places where we have to hack Config.pm,
and some baldfaced lies via $^O="MSWin32". Is it a new MakeMaker
subclass that spits out a cross-enabled CBuilder file plus an
option/env var for CBuilder to enable the cross-compiling?
Has anybody looked at doing a general-purpose Makefile.PL to
Module::Build adaptor? I see Module::Build::Convert, but that wouldn't
get the Module::Install case. Of course, the cross-compiling need
doesn't demand a general-purpose unmaker, but there is overlap.
(Finally, sorry about the cc, just looking for as much insight as I can
get here.)
Thanks,
Eric
[1] http://www.wxwidgets.org/wiki/index.php/Cross-Compiling_Under_Linux
--
"It is a mistake to allow any mechanical object to realize that you are
in a hurry."
--Ralph's Observation
---------------------------------------------------
http://scratchcomputing.com
---------------------------------------------------