This repository contains the archived source code of the old Sun phoneME project, converted to git.
Additional links:
- Java ME on Wikipedia
- Archive of the java.net phoneME project
- Archive of the java.net phoneME wiki
- Archive of phoneme.dev.java.net
The original source was published as Subversion at https://svn.java.net/svn/phoneme~svn. This server is long defunct, since April 28, 2017, but the SVN sources were saved to Archive.org as a SVN dump at https://archive.org/details/phoneme-svn.dump. I have taken this dump and massaged it into a sort-of usable git repo. This was trickier than it sounds, due to the odd layout of the Subversion repo. For details on the repo layout, see PhoneMERepositoryStructure.
In short, I have imported each individual component (with tags and branches) as
separate roots in the git repo. I have also imported the legal
, builds
and
releases
sub-trees the same way. In general, the names of tags and branches
were unique enough to not collide, but there were a few exceptions. For these,
an arbitrary source tag/branch was chosen and the other(s) are lost. See
missing references below for a list of such tags and
branches that is not 100% correctly mapped from SVN.
Finally, to get a default view of the repo which makes the most sense, I have
created a master branch into which I have merged all the individual trunks from
the components (and legal
, and the top level trunk with www
). In some sense,
this is the most recent view of the original SVN repository.
I chose to put the individual components directly in the root directory (like
cdc
), and not in a components
directory (like components/cdc
). While the
latter had better matched the original layout, the method I choose makes it easy
to checkout a tag from builds
or releases
and get a similar layout.
Initially, I created a separate git repository for each component, using git svn
for trunk
, tags
and branches
, like this:
git svn clone file://.../phoneME-svn --no-metadata -bcomponents/$1/branches -tcomponents/$1/tags -Tcomponents/$1/trunk $1
Similarly, I created repositories for build
and release
, but for these, I
interpreted the subdirectories as git tags:
git svn clone file:///.../phoneME-svn --no-metadata -t$1 $1
Finally, I created legal
, and the main trunk (containing www
) using just the
trunk import argument:
git svn clone file:///.../phoneME-svn --no-metadata -T$1 $1
For some reason I could not fully understand, git svn
did not create proper
tags and branches, but instead only populated .git/info/refs
. I could not
figure out a proper git way of converting these to real branches and tags, so I
ran this script for each mini-repo:
addtag () {
git show-ref | grep refs/remotes/origin/tags/$1 | cut -d " " -f1 > .git/refs/tags/$1
}
addbranch () {
git show-ref | grep refs/remotes/origin/$1 | cut -d " " -f1 > .git/refs/heads/$1
}
git show-ref | grep refs/remotes/origin/ | grep -v refs/remotes/origin/tags/ | cut -d " " -f 2 | cut -d "/" -f 4- > BRANCHNAMES
git show-ref | grep refs/remotes/origin/tags/ | cut -d " " -f 2 | cut -d "/" -f 5- > TAGNAMES
while read p; do
addtag $p
done < TAGNAMES
while read p; do
addbranch $p
done < BRANCHNAMES
After this, I re-joined all these separate git repos into one. I did this by
starting out with the trunk
repo, and then importing commits, tags and
branches from each individual mini-repo. I also merged the master (trunk) of
each individual mini-repo into the master of the consolidated repository,
placing it in a suitable location using git read-tree
. In effect, this is what
I did per mini-repo:
git remote add $1 /.../$1
git fetch $1
git fetch $1 --tags
git merge -s ours --no-commit $1/master --allow-unrelated-histories
git read-tree --prefix=$1/ -u $1/master
git commit -m "Merge in $1/"
Duplicated tags, where only one were kept
Java_ME_SDK_Mac_CLDC-Darwin-158
midp-cdc-win32-gci-1
midp-mr2-promo-b05
phoneme_advanced-mr1-rel-b06
phoneme_feature-mr1-rc-b04
sdk-tt-cf1
sdk-tt-pr1
Duplicated branches, where only one were kept
abstractions-cr-6678413
cdc-112_02
cdc-cr-6520657
cdc-proto
cldc-cr-6779573-time
code-subm-davyp-20080812
javacall-cr-6769974
javacall-mr2-cr-6517470
jc_perm_fix
jmesdk-agui-oi
jsr120-cr-6551021
jsr211-cr-6662559
leto_r1
leto_r1_mr1
leto_r1_mr1_rotation3
leto_r1_mr1-rt_l10n
midp-cdc-win32-gci
midp-cr-6714912-asyn_network_commit_fix
midp-mr2-cr-6508174-TCK-OpenRecordStore1
midp-mr2-cr-6524911
midp-mr2-ixc-fix
pmea-mr2-ea1
protocol-permissions
push-refactoring
sdk-tt-cf1
ui_service
For compiling the components on a Linux AMD64 system, you need a GCC able to emit i686 code as well as a JDK capable of emitting Java 1.4 bytecode such as JDK6.
Additionally you need the equivalents of the following dependencies for your distribution (the packages here are listed for Fedora 35):
- glibc-static.i686
- libstdc++-static.i686
- binutils.i686
- musl-devel.i686
- glibc-devel.i686
- gcc-c++.i686
To build the CDC VM follow these steps:
- Change to cdc/build/linux-x86-suse.
- Ensure the correct javac is on the $PATH, see comment above.
- Run
make
.
You will find the cvm
VM executable in the bin/ subfolder.
To build the CLDC VM follow these steps:
- Change to cldc/build/linux_i386
- Set the JVMWorkSpace environment variable to the absolute path of the cldc directory.
- Set the JDK_DIR environment variable to your JDK distribution (see comment above).
- Run
make ENABLE_COMPILATION_WARNINGS=true ROMIZING=false ENABLE_JNI=false
.
You will find the cldc_vm
executable in the target/bin subfolder. Please note
that the system classpath needs to be passed into the VM together with your
application classpath. You can find it in cldc/build/classes. Currently it is
required to disable romizing and JNI due to build issues with these options
enabled. The ENABLE_COMPILATION_WARNINGS option disables the use of -Werror
which causes the build to fail with modern compilers.
Also see https://phonej2me.github.io/content/mr2/cldc_feature.html.