Rob Ross wrote:
Hi there everyone.
This will officially be my first email to the OpenJDK project.
Welcome. I actually appreciate the email, some comments below.
I got to attend a couple of sessions/BOFs at JavaOne2008 about OpenJDK
and my interest was piqued. I've been playing with the build for the
last week. (A more accurate description would be, "yanking my hair out
and cursing my computer quite often", but I supposed it's part of the
learning curve.)
You did pick the most difficult platform you know. ;^)
These are the notes and action items I see from your comments:
1. assembling the prerequisite software
- VS .Net 2003 - Will be changing soon to a newer VC compiler, and if
at all possible the free one.
- Ant is a requirement, I'll fix the Build README, findbugs is not strictly
a requirement, it's under discussion, I had hoped to use it as part of the
build.
I may be removing the sanity check on findbugs.
- Cygwin is a bit of a challenge, it changes/updates rather often, I'll
try and correct the references to the packages you mention, but
it's like the different Linux packages, sometimes all I can give is hints.
- The Build README should have some references to the older cygwin 'make'
now, but I'll double check. I kind of hoped it would fix itself someday. :^(
- Freetype is new to many of us, I use a freetype that someone else built
so I have never experienced building it myself.
I will try and look into this and see if I can document it better.
2. Mercurial
- CVS/Subversion users seem to have trouble understanding the distributed
nature of Mercurial. I'd recommend looking at the first few chapters
of the Mercurial book: http://hgbook.red-bean.com/hgbook.html
3. Setting up the ALT_* environment variables
- If I didn't document this I should have, my apologies, but I encourage
all ALT_* variables to use the C:/ style of paths, not C:\ and definitely
not the /cygdrive/ style paths.
The makefiles try and turn the C:\ paths into C:/, but using the cygwin
paths are more difficult to deal with.
The problem is that some of the exe's we use understand these paths and
some don't, almost everything understands C:/, and avoiding the use of
\ characters in shell scripts and Makefiles is a very sane thing to do.
Making matters worse, the cygwin 'make' that stopped working with C:
paths for a while, hopefully this gets fixed someday.
Of course cygwin PATH must use ':' characters to separate paths, so
you have to use /cygdrive/ paths in PATH.
The LIB and INCLUDE env variables belong to the VS2003 compiler and
they use a ';' separator and need the C:/ paths.
See my blog:
http://blogs.sun.com/kto/entry/windows_cygwin_mks_java_and
I suspect that your experience with MacOS X will not be the same as Windows.
Thanks for taking the time to make the comments.
-kto
I was finally able to get "make sanity" to pass this evening, and I felt
quite pleased with myself. However, I have no expectations that this
will actually build now - but I still consider this a milestone victory.
Some of the difficulties I encountered were
1. Just assembling the prerequisite software
The jdk7/README-builds.html actually does a fairly good job of listing
everything needed. But I'm not a Windows developer, so finding a copy of
VS .Net 2003 was a little challenging. Luckily that install process was
pretty simple. The build generates a warning if Ant and FindBugs aren't
locatable; those were easy to install but perhaps you should add these
programs to the list of requirements in the README. Cygwin was also
pretty easy to install after spending a little time reading up on it.
Finding an earlier version of make (gmake) was a little hard, but I see
now there are links in the mailing list archive so that would be useful
to add a link to the README as well. Some of the Categories/package
names you gave for the particular cygwin utilities needed may be out of
date. Zip and Unzip are found in the Archive category, not Utils as
described in the README. "Free" is listed as being in Utils but it's
actually part of the "procps" package, under the System category. And
there isn't an "awk" implementation, but there is a gawk. Freetype was
the bane of my existence for 3 days. I never could get the "stock" build
scripts to work with the version you stated was needed (2.3.0), and what
was available to be downloaded (2.3.5). I could not figure out how to
build it from source either via DOS/windows or cygwin. So I ended up
downloading the binary setup executable, which contained freetype.lib,
freetype6.dll, and zlib1.dll, and a freetype.dll.a that was a red
herring. I modified the Makefile for the freetypecheck tool to change
the name of the expected dll from "freetype.dll" to "freetype6.dll", and
added its dependent "zlib1.dll" to the copy command. Not a very portable
solution I know, but I just wanted to get this thing to work! How is
everyone else getting this to compile?
2. Mercurial - well, it's new, and a little more complicated than
CVS/SVN, but I think I'll get the hang of it. I fcloned from the jdk7
master forest, (using the forest extension) yesterday, so I have the
latest code (baring any changes in the last day). It will be a while
before I even have to worry about wanting to submit anything back
upstream, so I should be more comfortable with how it all works by then.
3. Setting up the ALT_* environment variables
The hardest part, and mostly trial-and-error, was determining what
variables needed to use the cygwin path syntax, and what needed to use
the normal Windows path syntax, and what needed to be "shortcutted" by
using the cygpath utility. This was mind numbingly frustrating!!!! I
found an email from Tim Bell that included his sample script that was
quite helpful in getting the right directories from the VS .Net 2003
install into the PATH, LIB, and INCLUDE variables, with the right
syntax. As I was writing this email my initial "gmake all" build failed,
due to javac not being able to find the binary plugins I had specified
in ALT_BINARY_PLUGINS_PATH. It seems THAT one needs to be a java IO file
path! So now there are THREE different path syntaxes in use in this
script file :)
Anyway, I just wanted to share my experiences building the OpenJDK 7 on
Windows.
Ironically, I'm only doing this to get some practice on the existing
build process. My ultimate goal is to port the OpenJDK 7 to Mac OS X, as
a full native app. I'm doing some preliminary analysis on the existing
code base to determine all calls to native methods, to get a sense of
the scope. For example, there are currently about 421 native method
calls in the jdk/src/share classes. The Windows implementation classes
make 210 native calls, and the Solaris implementation makes 299. But the
first task would be to integrate Mac OS build targets into the OpenJDK 7
project, so it can be built on that platform. (Of course, it won't
actually run without any native implementation - that's step #2.) But
I'll be making a more formal presentation/declaration/request for
sponsorship/ at a later time.
Rob Ross