Upgrading CM3 means building a complete new release of CM3 with an already installed system. Usually, this should be very easy, as you only have to use one or two of the existing build scripts, for example,
./scripts/do-cm3-core.sh buildship
./scripts/do-cm3-std.sh buildship
However, there is one situation when it's not as easy as this: when a new target platform has been added to the compiler, or the order or names of existing target platforms in certain files have changed. If you just use the scripts named above, you will run into problems in libm3, such as
new source -> compiling ProcessPosix.m3 new source -> compiling SocketPosix.m3 Fatal Error: bad version stamps: SocketPosix.m3 version stamp mismatch: Compiler.Platform <00df7acd080d2be7> => SocketPosix.m3=> Compiler.i3 version stamp mismatch: Compiler.ThisPlatform <4d31a453f94cbb46> => SocketPosix.m3 => Compiler.i3 *** execution of failed ***
This is because you can only compile some platform specific code in m3core and libm3 with a compiler that includes exactly the same list of target platforms in Target.i3, InfoModule.m3, and Compiler.i3; otherwise version stamps will get messed up. So you have to make all the changes, build and ship the compiler packages m3middle, m3front, m3quake, cm3, install the compiler, and then build the libraries m3core and libm3 and the compiler packages again (do-cm3-core.sh).
As of Sat Jul 19, 2003, there is a script that performs a safe update for you by compiling and shipping the right packages in the correct order:
./scripts/upgrade.sh
You can call it with the -n (no action) option to see what it would do.