The ports are done. Simple linear lines of development are critical. You can never lose track of the lines of development. The RCS labels are totally inadequate for this purpose, since there is no dependable pattern across a large set of files. In general, there is no general algorithm that can perform this merge for you.
Human insight is required.
Tools such as diff can help, but, in the end, there are lots of situations in which a human has to check the results regardless of the tools used. That makes the problem exponentially more complicated, and humans don't do well at things that get exponentially more complicated with N. So, merges should be done pairwise. One can not keep the main line of development locked for a very long period of time. Yet exclusive locking is necessary for ordinary development, and to protect the decisions made during a merge. Exclusive locking is necessary and sufficient to do parallel editing.