Closed ianfixes closed 5 years ago
Thank you very much indeed for this!
A little historical context, in case it’s not already clear. There are:
ShapeShifter (1995–2001) is a Classic Mac OS (680x0) emulator for AmigaOS. This explains the presence of Amiga.
Basilisk II (1997–«2006») is a Classic Mac OS (680x0) cross-platform emulator. For many years this was the Classic Mac OS 680x0 emulator.
SheepShaver (1998–«2006») is a Classic Mac OS (PowerPC) emulator, originally for BeOS but became rapidly cross-platform. This explains the presence of BeOS. In this emulator it is possible to include the functionalities of Basilisk II, in order to be able to emulate Classic Mac OS on both 680x0 and PowerPC architectures.
I do personally use as well Mini vMac for 680x0 and QEMU for PowerPC, mainly for preservation of computer art. And to me, to be honest, QEMU is the better emulator, even if I did actually use more SheepShaver.
In my opinion, SheepShaver is a solid emulator and we should focus our work on it. The information you posted here goes exactly in that direction. I suggest to skip the support for AmigaOS, BeOS et al., and to focus our work on supporting macOS, Linux and Windows. Still in my opinion, once we have a solid new release, we should then focus on improving the code for modern x86_64 architectures, because currently it runs much slower than on PowerPC architectures.
I hope this is useful.
I'm going to pose this question to a few more folks, but what should the shared library be called? libBasiliskII
?
I would suggest to avoid capital letters.
I'm looking for best practices on how to split a project into a library and frontend. Found these:
I've used cmake before on several occasions, one was in normal C++ development and another time was replacing a very convoluted set of Makefiles for an ancient Fortran project (like, Makefiles that generated other Makefiles and then ran them). I'm inclined to use it here as well, unless there are objections.
After some initial testing and some side-band conversations, I'm questioning whether splitting these 2 (with our without a shared library) is still the best path forward. It might be best to move forward by rebooting my own effort (splitting cxmon
out, but leaving BasiliskII
and SheepShaver
joined) and re-applying all the work from both repos into that.
To save some effort on my part, I would be renaming the BasiliskII
github repo to macemu
, migrating all issues from this repo to the other one, and then removing his repo. I'm going to sleep on it, but that's the plan at present.
Long story short, I can't think of a way to "safely" accomplish the split -- in other words, to get working CI before, during, and after a major refactor of components that didn't have CI to begin with. It might make sense to split later, but my entire reason for splitting was based on the faulty assumption that it would only be as hard as #3 .
To me it makes sense to split Basilisk II
(emulator of Classic Mac OS on 680x0 architectures) and SheepShaver
(emulator of Classic Mac OS on PowerPC architectures).
cxmon
is a tool used for programming and testing assembler for Basilisk, if I remember carefully.
I agree with the principle of that (as you saw, it was my first action upon working with this repo), but both emulators share a large chunk of codebase -- which includes portions of the OS-specific codebases. Is there a simple way to factor out the common files that I'm overlooking?
No, sorry, I’m afraid, I don’t see a simple way, but in my opinion this separation would be a big step and simplify the future maintenance.
After some experimentation and consideration, I'm going to archive this project unless/until splitting it looks more feasible. This morning I was able to apply all the work we've done on the split (Basilisk & SheepShaver) repositories to a single "macemu-minus-cxmon" repo. I will force-push that to the BasiliskII repo and rename that repo macemu
(to be more compatible with the original project). Renaming that repo also keeps all the existing issues I've created there as well as any discussion.
I will copy issues #8 and #10 to the other repo.
I'm not ruling out a split of these 2 projects in the future, but as of this writing I've been unable to find a path forward that begins with the hard split -- too many unknowns all at once, particularly in refactoring the build system. It's far from impossible, but absolutely impractical.
Creating a shared library seems to be the best path forward for deduplicating the 226 files in BasiliskII that are used directly by Sheepshaver.
Encoded paths
These files contain references to BasiliskII files, found using
Makefile
src/MacOSX/SheepShaver.xcodeproj/project.pbxproj
src/MacOSX/SheepShaver_Xcode8.xcodeproj/project.pbxproj
Symlinked files
To generate this list of symlinks that need to be deduplicated, it's 3 steps:
SheepShaver/src/SDL
->../../BasiliskII/src/SDL
SheepShaver/src/adb.cpp
->../../BasiliskII/src/adb.cpp
SheepShaver/src/audio.cpp
->../../BasiliskII/src/audio.cpp
SheepShaver/src/cdrom.cpp
->../../BasiliskII/src/cdrom.cpp
SheepShaver/src/disk.cpp
->../../BasiliskII/src/disk.cpp
SheepShaver/src/extfs.cpp
->../../BasiliskII/src/extfs.cpp
SheepShaver/src/pict.c
->../../BasiliskII/src/pict.c
SheepShaver/src/prefs.cpp
->../../BasiliskII/src/prefs.cpp
SheepShaver/src/scsi.cpp
->../../BasiliskII/src/scsi.cpp
SheepShaver/src/slirp
->../../BasiliskII/src/slirp
SheepShaver/src/sony.cpp
->../../BasiliskII/src/sony.cpp
SheepShaver/src/xpram.cpp
->../../BasiliskII/src/xpram.cpp
SheepDriver
->../../../BasiliskII/src/BeOS/SheepDriver
SheepNet
->../../../BasiliskII/src/BeOS/SheepNet
audio_beos.cpp
->../../../BasiliskII/src/BeOS/audio_beos.cpp
extfs_beos.cpp
->../../../BasiliskII/src/BeOS/extfs_beos.cpp
scsi_beos.cpp
->../../../BasiliskII/src/BeOS/scsi_beos.cpp
serial_beos.cpp
->../../../BasiliskII/src/BeOS/serial_beos.cpp
sys_beos.cpp
->../../../BasiliskII/src/BeOS/sys_beos.cpp
timer_beos.cpp
->../../../BasiliskII/src/BeOS/timer_beos.cpp
xpram_beos.cpp
->../../../BasiliskII/src/BeOS/xpram_beos.cpp
sigsegv.h
->../../../BasiliskII/src/CrossPlatform/sigsegv.h
video_blit.cpp
->../../../BasiliskII/src/CrossPlatform/video_blit.cpp
video_blit.h
->../../../BasiliskII/src/CrossPlatform/video_blit.h
video_vosf.h
->../../../BasiliskII/src/CrossPlatform/video_vosf.h
vm_alloc.cpp
->../../../BasiliskII/src/CrossPlatform/vm_alloc.cpp
vm_alloc.h
->../../../BasiliskII/src/CrossPlatform/vm_alloc.h
AudioBackEnd.cpp
->../../../BasiliskII/src/MacOSX/AudioBackEnd.cpp
AudioBackEnd.h
->../../../BasiliskII/src/MacOSX/AudioBackEnd.h
AudioDevice.cpp
->../../../BasiliskII/src/MacOSX/AudioDevice.cpp
AudioDevice.h
->../../../BasiliskII/src/MacOSX/AudioDevice.h
MacOSX_sound_if.cpp
->../../../BasiliskII/src/MacOSX/MacOSX_sound_if.cpp
MacOSX_sound_if.h
->../../../BasiliskII/src/MacOSX/MacOSX_sound_if.h
audio_macosx.cpp
->../../../BasiliskII/src/MacOSX/audio_macosx.cpp
autorelease.h
->../../../BasiliskII/src/MacOSX/autorelease.h
clip_macosx.cpp
->../../../BasiliskII/src/MacOSX/clip_macosx.cpp
clip_macosx64.mm
->../../../BasiliskII/src/MacOSX/clip_macosx64.mm
extfs_macosx.cpp
->../../../BasiliskII/src/MacOSX/extfs_macosx.cpp
macos_util_macosx.h
->../../../BasiliskII/src/MacOSX/macos_util_macosx.h
sys_darwin.cpp
->../../../BasiliskII/src/MacOSX/sys_darwin.cpp
utils_macosx.h
->../../../BasiliskII/src/MacOSX/utils_macosx.h
utils_macosx.mm
->../../../BasiliskII/src/MacOSX/utils_macosx.mm
audio_oss_esd.cpp
->../../../BasiliskII/src/Unix/audio_oss_esd.cpp
bincue_unix.cpp
->../../../BasiliskII/src/Unix/bincue_unix.cpp
bincue_unix.h
->../../../BasiliskII/src/Unix/bincue_unix.h
clip_unix.cpp
->../../../BasiliskII/src/Unix/clip_unix.cpp
config.guess
->../../../BasiliskII/src/Unix/config.guess
config.sub
->../../../BasiliskII/src/Unix/config.sub
cpr.sh
->../../../BasiliskII/src/Unix/cpr.sh
disk_sparsebundle.cpp
->../../../BasiliskII/src/Unix/disk_sparsebundle.cpp
disk_unix.h
->../../../BasiliskII/src/Unix/disk_unix.h
ether_unix.cpp
->../../../BasiliskII/src/Unix/ether_unix.cpp
extfs_unix.cpp
->../../../BasiliskII/src/Unix/extfs_unix.cpp
keycodes
->../../../BasiliskII/src/Unix/keycodes
ldscripts
->../../../BasiliskII/src/Unix/ldscripts
m4
->../../../BasiliskII/src/Unix/m4
posix_sem.cpp
->../../../BasiliskII/src/Unix/posix_sem.cpp
rpc.h
->../../../BasiliskII/src/Unix/rpc.h
rpc_unix.cpp
->../../../BasiliskII/src/Unix/rpc_unix.cpp
semaphore.h
->../../../BasiliskII/src/Unix/semaphore.h
serial_unix.cpp
->../../../BasiliskII/src/Unix/serial_unix.cpp
sshpty.c
->../../../BasiliskII/src/Unix/sshpty.c
sshpty.h
->../../../BasiliskII/src/Unix/sshpty.h
strlcpy.c
->../../../BasiliskII/src/Unix/strlcpy.c
strlcpy.h
->../../../BasiliskII/src/Unix/strlcpy.h
sys_unix.cpp
->../../../BasiliskII/src/Unix/sys_unix.cpp
tinyxml2.cpp
->../../../BasiliskII/src/Unix/tinyxml2.cpp
tinyxml2.h
->../../../BasiliskII/src/Unix/tinyxml2.h
tunconfig
->../../../BasiliskII/src/Unix/tunconfig
vhd_unix.cpp
->../../../BasiliskII/src/Unix/vhd_unix.cpp
xpram_unix.cpp
->../../../BasiliskII/src/Unix/xpram_unix.cpp
b2ether
->../../../BasiliskII/src/Windows/b2ether
cd_defs.h
->../../../BasiliskII/src/Windows/cd_defs.h
cdenable
->../../../BasiliskII/src/Windows/cdenable
clip_windows.cpp
->../../../BasiliskII/src/Windows/clip_windows.cpp
ether_windows.cpp
->../../../BasiliskII/src/Windows/ether_windows.cpp
ether_windows.h
->../../../BasiliskII/src/Windows/ether_windows.h
extfs_windows.cpp
->../../../BasiliskII/src/Windows/extfs_windows.cpp
posix_emu.cpp
->../../../BasiliskII/src/Windows/posix_emu.cpp
posix_emu.h
->../../../BasiliskII/src/Windows/posix_emu.h
prefs_editor_gtk.cpp
->../../../BasiliskII/src/Windows/prefs_editor_gtk.cpp
router
->../../../BasiliskII/src/Windows/router
serial_windows.cpp
->../../../BasiliskII/src/Windows/serial_windows.cpp
sys_windows.cpp
->../../../BasiliskII/src/Windows/sys_windows.cpp
timer_windows.cpp
->../../../BasiliskII/src/Windows/timer_windows.cpp
util_windows.cpp
->../../../BasiliskII/src/Windows/util_windows.cpp
util_windows.h
->../../../BasiliskII/src/Windows/util_windows.h
xpram_windows.cpp
->../../../BasiliskII/src/Windows/xpram_windows.cpp
audio_dummy.cpp
->../../../BasiliskII/src/dummy/audio_dummy.cpp
clip_dummy.cpp
->../../../BasiliskII/src/dummy/clip_dummy.cpp
prefs_editor_dummy.cpp
->../../../BasiliskII/src/dummy/prefs_editor_dummy.cpp
scsi_dummy.cpp
->../../../BasiliskII/src/dummy/scsi_dummy.cpp
serial_dummy.cpp
->../../../BasiliskII/src/dummy/serial_dummy.cpp
adb.h
->../../../BasiliskII/src/include/adb.h
audio.h
->../../../BasiliskII/src/include/audio.h
audio_defs.h
->../../../BasiliskII/src/include/audio_defs.h
cdrom.h
->../../../BasiliskII/src/include/cdrom.h
clip.h
->../../../BasiliskII/src/include/clip.h
debug.h
->../../../BasiliskII/src/include/debug.h
disk.h
->../../../BasiliskII/src/include/disk.h
extfs.h
->../../../BasiliskII/src/include/extfs.h
extfs_defs.h
->../../../BasiliskII/src/include/extfs_defs.h
pict.h
->../../../BasiliskII/src/include/pict.h
prefs.h
->../../../BasiliskII/src/include/prefs.h
scsi.h
->../../../BasiliskII/src/include/scsi.h
serial.h
->../../../BasiliskII/src/include/serial.h
serial_defs.h
->../../../BasiliskII/src/include/serial_defs.h
sony.h
->../../../BasiliskII/src/include/sony.h
sys.h
->../../../BasiliskII/src/include/sys.h
timer.h
->../../../BasiliskII/src/include/timer.h
xpram.h
->../../../BasiliskII/src/include/xpram.h
SheepShaver/src/BeOS/SheepDriver
->../../../BasiliskII/src/BeOS/SheepDriver
SheepShaver/src/BeOS/SheepNet
->../../../BasiliskII/src/BeOS/SheepNet
SheepShaver/src/BeOS/audio_beos.cpp
->../../../BasiliskII/src/BeOS/audio_beos.cpp
SheepShaver/src/BeOS/extfs_beos.cpp
->../../../BasiliskII/src/BeOS/extfs_beos.cpp
SheepShaver/src/BeOS/scsi_beos.cpp
->../../../BasiliskII/src/BeOS/scsi_beos.cpp
SheepShaver/src/BeOS/serial_beos.cpp
->../../../BasiliskII/src/BeOS/serial_beos.cpp
SheepShaver/src/BeOS/sys_beos.cpp
->../../../BasiliskII/src/BeOS/sys_beos.cpp
SheepShaver/src/BeOS/timer_beos.cpp
->../../../BasiliskII/src/BeOS/timer_beos.cpp
SheepShaver/src/BeOS/xpram_beos.cpp
->../../../BasiliskII/src/BeOS/xpram_beos.cpp
SheepShaver/src/CrossPlatform/sigsegv.h
->../../../BasiliskII/src/CrossPlatform/sigsegv.h
SheepShaver/src/CrossPlatform/video_blit.cpp
->../../../BasiliskII/src/CrossPlatform/video_blit.cpp
SheepShaver/src/CrossPlatform/video_blit.h
->../../../BasiliskII/src/CrossPlatform/video_blit.h
SheepShaver/src/CrossPlatform/video_vosf.h
->../../../BasiliskII/src/CrossPlatform/video_vosf.h
SheepShaver/src/CrossPlatform/vm_alloc.cpp
->../../../BasiliskII/src/CrossPlatform/vm_alloc.cpp
SheepShaver/src/CrossPlatform/vm_alloc.h
->../../../BasiliskII/src/CrossPlatform/vm_alloc.h
SheepShaver/src/MacOSX/AudioBackEnd.cpp
->../../../BasiliskII/src/MacOSX/AudioBackEnd.cpp
SheepShaver/src/MacOSX/AudioBackEnd.h
->../../../BasiliskII/src/MacOSX/AudioBackEnd.h
SheepShaver/src/MacOSX/AudioDevice.cpp
->../../../BasiliskII/src/MacOSX/AudioDevice.cpp
SheepShaver/src/MacOSX/AudioDevice.h
->../../../BasiliskII/src/MacOSX/AudioDevice.h
SheepShaver/src/MacOSX/MacOSX_sound_if.cpp
->../../../BasiliskII/src/MacOSX/MacOSX_sound_if.cpp
SheepShaver/src/MacOSX/MacOSX_sound_if.h
->../../../BasiliskII/src/MacOSX/MacOSX_sound_if.h
SheepShaver/src/MacOSX/audio_macosx.cpp
->../../../BasiliskII/src/MacOSX/audio_macosx.cpp
SheepShaver/src/MacOSX/autorelease.h
->../../../BasiliskII/src/MacOSX/autorelease.h
SheepShaver/src/MacOSX/clip_macosx.cpp
->../../../BasiliskII/src/MacOSX/clip_macosx.cpp
SheepShaver/src/MacOSX/clip_macosx64.mm
->../../../BasiliskII/src/MacOSX/clip_macosx64.mm
SheepShaver/src/MacOSX/extfs_macosx.cpp
->../../../BasiliskII/src/MacOSX/extfs_macosx.cpp
SheepShaver/src/MacOSX/macos_util_macosx.h
->../../../BasiliskII/src/MacOSX/macos_util_macosx.h
SheepShaver/src/MacOSX/sys_darwin.cpp
->../../../BasiliskII/src/MacOSX/sys_darwin.cpp
SheepShaver/src/MacOSX/utils_macosx.h
->../../../BasiliskII/src/MacOSX/utils_macosx.h
SheepShaver/src/MacOSX/utils_macosx.mm
->../../../BasiliskII/src/MacOSX/utils_macosx.mm
SheepShaver/src/Unix/audio_oss_esd.cpp
->../../../BasiliskII/src/Unix/audio_oss_esd.cpp
SheepShaver/src/Unix/bincue_unix.cpp
->../../../BasiliskII/src/Unix/bincue_unix.cpp
SheepShaver/src/Unix/bincue_unix.h
->../../../BasiliskII/src/Unix/bincue_unix.h
SheepShaver/src/Unix/clip_unix.cpp
->../../../BasiliskII/src/Unix/clip_unix.cpp
SheepShaver/src/Unix/config.guess
->../../../BasiliskII/src/Unix/config.guess
SheepShaver/src/Unix/config.sub
->../../../BasiliskII/src/Unix/config.sub
SheepShaver/src/Unix/cpr.sh
->../../../BasiliskII/src/Unix/cpr.sh
SheepShaver/src/Unix/disk_sparsebundle.cpp
->../../../BasiliskII/src/Unix/disk_sparsebundle.cpp
SheepShaver/src/Unix/disk_unix.h
->../../../BasiliskII/src/Unix/disk_unix.h
SheepShaver/src/Unix/ether_unix.cpp
->../../../BasiliskII/src/Unix/ether_unix.cpp
SheepShaver/src/Unix/extfs_unix.cpp
->../../../BasiliskII/src/Unix/extfs_unix.cpp
SheepShaver/src/Unix/keycodes
->../../../BasiliskII/src/Unix/keycodes
SheepShaver/src/Unix/ldscripts
->../../../BasiliskII/src/Unix/ldscripts
SheepShaver/src/Unix/m4
->../../../BasiliskII/src/Unix/m4
SheepShaver/src/Unix/posix_sem.cpp
->../../../BasiliskII/src/Unix/posix_sem.cpp
SheepShaver/src/Unix/rpc.h
->../../../BasiliskII/src/Unix/rpc.h
SheepShaver/src/Unix/rpc_unix.cpp
->../../../BasiliskII/src/Unix/rpc_unix.cpp
SheepShaver/src/Unix/semaphore.h
->../../../BasiliskII/src/Unix/semaphore.h
SheepShaver/src/Unix/serial_unix.cpp
->../../../BasiliskII/src/Unix/serial_unix.cpp
SheepShaver/src/Unix/sshpty.c
->../../../BasiliskII/src/Unix/sshpty.c
SheepShaver/src/Unix/sshpty.h
->../../../BasiliskII/src/Unix/sshpty.h
SheepShaver/src/Unix/strlcpy.c
->../../../BasiliskII/src/Unix/strlcpy.c
SheepShaver/src/Unix/strlcpy.h
->../../../BasiliskII/src/Unix/strlcpy.h
SheepShaver/src/Unix/sys_unix.cpp
->../../../BasiliskII/src/Unix/sys_unix.cpp
SheepShaver/src/Unix/tinyxml2.cpp
->../../../BasiliskII/src/Unix/tinyxml2.cpp
SheepShaver/src/Unix/tinyxml2.h
->../../../BasiliskII/src/Unix/tinyxml2.h
SheepShaver/src/Unix/tunconfig
->../../../BasiliskII/src/Unix/tunconfig
SheepShaver/src/Unix/vhd_unix.cpp
->../../../BasiliskII/src/Unix/vhd_unix.cpp
SheepShaver/src/Unix/xpram_unix.cpp
->../../../BasiliskII/src/Unix/xpram_unix.cpp
mkstandalone
->../../../../BasiliskII/src/Unix/Darwin/mkstandalone
pagezero.c
->../../../../BasiliskII/src/Unix/Darwin/pagezero.c
testlmem.sh
->../../../../BasiliskII/src/Unix/Darwin/testlmem.sh
audio_irix.cpp
->../../../../BasiliskII/src/Unix/Irix/audio_irix.cpp
NetDriver
->../../../../BasiliskII/src/Unix/Linux/NetDriver
scsi_linux.cpp
->../../../../BasiliskII/src/Unix/Linux/scsi_linux.cpp
SheepShaver/src/Unix/Darwin/mkstandalone
->../../../../BasiliskII/src/Unix/Darwin/mkstandalone
SheepShaver/src/Unix/Darwin/pagezero.c
->../../../../BasiliskII/src/Unix/Darwin/pagezero.c
SheepShaver/src/Unix/Darwin/testlmem.sh
->../../../../BasiliskII/src/Unix/Darwin/testlmem.sh
SheepShaver/src/Unix/Irix/audio_irix.cpp
->../../../../BasiliskII/src/Unix/Irix/audio_irix.cpp
SheepShaver/src/Unix/Linux/NetDriver
->../../../../BasiliskII/src/Unix/Linux/NetDriver
SheepShaver/src/Unix/Linux/scsi_linux.cpp
->../../../../BasiliskII/src/Unix/Linux/scsi_linux.cpp
SheepShaver/src/Windows/b2ether
->../../../BasiliskII/src/Windows/b2ether
SheepShaver/src/Windows/cd_defs.h
->../../../BasiliskII/src/Windows/cd_defs.h
SheepShaver/src/Windows/cdenable
->../../../BasiliskII/src/Windows/cdenable
SheepShaver/src/Windows/clip_windows.cpp
->../../../BasiliskII/src/Windows/clip_windows.cpp
SheepShaver/src/Windows/ether_windows.cpp
->../../../BasiliskII/src/Windows/ether_windows.cpp
SheepShaver/src/Windows/ether_windows.h
->../../../BasiliskII/src/Windows/ether_windows.h
SheepShaver/src/Windows/extfs_windows.cpp
->../../../BasiliskII/src/Windows/extfs_windows.cpp
SheepShaver/src/Windows/posix_emu.cpp
->../../../BasiliskII/src/Windows/posix_emu.cpp
SheepShaver/src/Windows/posix_emu.h
->../../../BasiliskII/src/Windows/posix_emu.h
SheepShaver/src/Windows/prefs_editor_gtk.cpp
->../../../BasiliskII/src/Windows/prefs_editor_gtk.cpp
SheepShaver/src/Windows/router
->../../../BasiliskII/src/Windows/router
SheepShaver/src/Windows/serial_windows.cpp
->../../../BasiliskII/src/Windows/serial_windows.cpp
SheepShaver/src/Windows/sys_windows.cpp
->../../../BasiliskII/src/Windows/sys_windows.cpp
SheepShaver/src/Windows/timer_windows.cpp
->../../../BasiliskII/src/Windows/timer_windows.cpp
SheepShaver/src/Windows/util_windows.cpp
->../../../BasiliskII/src/Windows/util_windows.cpp
SheepShaver/src/Windows/util_windows.h
->../../../BasiliskII/src/Windows/util_windows.h
SheepShaver/src/Windows/xpram_windows.cpp
->../../../BasiliskII/src/Windows/xpram_windows.cpp
SheepShaver/src/dummy/audio_dummy.cpp
->../../../BasiliskII/src/dummy/audio_dummy.cpp
SheepShaver/src/dummy/clip_dummy.cpp
->../../../BasiliskII/src/dummy/clip_dummy.cpp
SheepShaver/src/dummy/prefs_editor_dummy.cpp
->../../../BasiliskII/src/dummy/prefs_editor_dummy.cpp
SheepShaver/src/dummy/scsi_dummy.cpp
->../../../BasiliskII/src/dummy/scsi_dummy.cpp
SheepShaver/src/dummy/serial_dummy.cpp
->../../../BasiliskII/src/dummy/serial_dummy.cpp
SheepShaver/src/include/adb.h
->../../../BasiliskII/src/include/adb.h
SheepShaver/src/include/audio.h
->../../../BasiliskII/src/include/audio.h
SheepShaver/src/include/audio_defs.h
->../../../BasiliskII/src/include/audio_defs.h
SheepShaver/src/include/cdrom.h
->../../../BasiliskII/src/include/cdrom.h
SheepShaver/src/include/clip.h
->../../../BasiliskII/src/include/clip.h
SheepShaver/src/include/debug.h
->../../../BasiliskII/src/include/debug.h
SheepShaver/src/include/disk.h
->../../../BasiliskII/src/include/disk.h
SheepShaver/src/include/extfs.h
->../../../BasiliskII/src/include/extfs.h
SheepShaver/src/include/extfs_defs.h
->../../../BasiliskII/src/include/extfs_defs.h
SheepShaver/src/include/pict.h
->../../../BasiliskII/src/include/pict.h
SheepShaver/src/include/prefs.h
->../../../BasiliskII/src/include/prefs.h
SheepShaver/src/include/scsi.h
->../../../BasiliskII/src/include/scsi.h
SheepShaver/src/include/serial.h
->../../../BasiliskII/src/include/serial.h
SheepShaver/src/include/serial_defs.h
->../../../BasiliskII/src/include/serial_defs.h
SheepShaver/src/include/sony.h
->../../../BasiliskII/src/include/sony.h
SheepShaver/src/include/sys.h
->../../../BasiliskII/src/include/sys.h
SheepShaver/src/include/timer.h
->../../../BasiliskII/src/include/timer.h
SheepShaver/src/include/xpram.h
->../../../BasiliskII/src/include/xpram.h
SheepShaver/src/kpx_cpu/src/cpu/jit/x86/codegen_x86.h
->../../../../../../../BasiliskII/src/uae_cpu/compiler/codegen_x86.h
Symlinked directories
To generate this list of symlinks that need to be deduplicated, it's 3 steps:
SheepShaver/src/BeOS/SheepDriver/sheep_driver.h
->../../../BasiliskII/src/BeOS/SheepDriver/sheep_driver.h
SheepShaver/src/BeOS/SheepDriver/Makefile
->../../../BasiliskII/src/BeOS/SheepDriver/Makefile
SheepShaver/src/BeOS/SheepDriver/sheep_driver.c
->../../../BasiliskII/src/BeOS/SheepDriver/sheep_driver.c
SheepShaver/src/BeOS/SheepNet/sheep_net.h
->../../../BasiliskII/src/BeOS/SheepNet/sheep_net.h
SheepShaver/src/BeOS/SheepNet/Makefile
->../../../BasiliskII/src/BeOS/SheepNet/Makefile
SheepShaver/src/BeOS/SheepNet/sheep_net.cpp
->../../../BasiliskII/src/BeOS/SheepNet/sheep_net.cpp
SheepShaver/src/SDL/xpram_sdl.cpp
->../../BasiliskII/src/SDL/xpram_sdl.cpp
SheepShaver/src/SDL/keycodes
->../../BasiliskII/src/SDL/keycodes
SheepShaver/src/SDL/video_sdl2.cpp
->../../BasiliskII/src/SDL/video_sdl2.cpp
SheepShaver/src/SDL/SDLMain.h
->../../BasiliskII/src/SDL/SDLMain.h
SheepShaver/src/SDL/audio_sdl.cpp
->../../BasiliskII/src/SDL/audio_sdl.cpp
SheepShaver/src/SDL/prefs_sdl.cpp
->../../BasiliskII/src/SDL/prefs_sdl.cpp
SheepShaver/src/SDL/SDLMain.m
->../../BasiliskII/src/SDL/SDLMain.m
SheepShaver/src/SDL/video_sdl.cpp
->../../BasiliskII/src/SDL/video_sdl.cpp
SheepShaver/src/Unix/Linux/NetDriver/Makefile
->../../../../BasiliskII/src/Unix/Linux/NetDriver/Makefile
SheepShaver/src/Unix/Linux/NetDriver/README.md
->../../../../BasiliskII/src/Unix/Linux/NetDriver/README.md
SheepShaver/src/Unix/Linux/NetDriver/sheep_net.c
->../../../../BasiliskII/src/Unix/Linux/NetDriver/sheep_net.c
SheepShaver/src/Unix/ldscripts/linux-x86_64.ld
->../../../BasiliskII/src/Unix/ldscripts/linux-x86_64.ld
SheepShaver/src/Unix/ldscripts/linux-i386.ld
->../../../BasiliskII/src/Unix/ldscripts/linux-i386.ld
SheepShaver/src/Unix/ldscripts/linux-ppc.ld
->../../../BasiliskII/src/Unix/ldscripts/linux-ppc.ld
SheepShaver/src/Unix/ldscripts/freebsd-i386.ld
->../../../BasiliskII/src/Unix/ldscripts/freebsd-i386.ld
SheepShaver/src/Unix/m4/esd.m4
->../../../BasiliskII/src/Unix/m4/esd.m4
SheepShaver/src/Unix/m4/egrep.m4
->../../../BasiliskII/src/Unix/m4/egrep.m4
SheepShaver/src/Unix/m4/gtk.m4
->../../../BasiliskII/src/Unix/m4/gtk.m4
SheepShaver/src/Unix/m4/gettext.m4
->../../../BasiliskII/src/Unix/m4/gettext.m4
SheepShaver/src/Unix/m4/gtk-2.0.m4
->../../../BasiliskII/src/Unix/m4/gtk-2.0.m4
SheepShaver/src/Windows/b2ether/inc/ntddpack.h
->../../../BasiliskII/src/Windows/b2ether/inc/ntddpack.h
SheepShaver/src/Windows/b2ether/inc/b2ether_hl.h
->../../../BasiliskII/src/Windows/b2ether/inc/b2ether_hl.h
SheepShaver/src/Windows/b2ether/driver/b2ether.h
->../../../BasiliskII/src/Windows/b2ether/driver/b2ether.h
SheepShaver/src/Windows/b2ether/driver/b2ether_read.c
->../../../BasiliskII/src/Windows/b2ether/driver/b2ether_read.c
SheepShaver/src/Windows/b2ether/driver/DEBUG.H
->../../../BasiliskII/src/Windows/b2ether/driver/DEBUG.H
SheepShaver/src/Windows/b2ether/driver/b2ether_write.c
->../../../BasiliskII/src/Windows/b2ether/driver/b2ether_write.c
SheepShaver/src/Windows/b2ether/driver/MAKEFILE
->../../../BasiliskII/src/Windows/b2ether/driver/MAKEFILE
SheepShaver/src/Windows/b2ether/driver/OEMSETUP.INF
->../../../BasiliskII/src/Windows/b2ether/driver/OEMSETUP.INF
SheepShaver/src/Windows/b2ether/driver/b2ether.c
->../../../BasiliskII/src/Windows/b2ether/driver/b2ether.c
SheepShaver/src/Windows/b2ether/driver/SOURCES
->../../../BasiliskII/src/Windows/b2ether/driver/SOURCES
SheepShaver/src/Windows/b2ether/driver/b2ether_openclose.c
->../../../BasiliskII/src/Windows/b2ether/driver/b2ether_openclose.c
SheepShaver/src/Windows/b2ether/nt5/b2ether.h
->../../../BasiliskII/src/Windows/b2ether/nt5/b2ether.h
SheepShaver/src/Windows/b2ether/nt5/b2ether_read.c
->../../../BasiliskII/src/Windows/b2ether/nt5/b2ether_read.c
SheepShaver/src/Windows/b2ether/nt5/b2ether64.sln
->../../../BasiliskII/src/Windows/b2ether/nt5/b2ether64.sln
SheepShaver/src/Windows/b2ether/nt5/b2ether_write.c
->../../../BasiliskII/src/Windows/b2ether/nt5/b2ether_write.c
SheepShaver/src/Windows/b2ether/nt5/B2Win2k.inf
->../../../BasiliskII/src/Windows/b2ether/nt5/B2Win2k.inf
SheepShaver/src/Windows/b2ether/nt5/B2Win7Vista-x64.inf
->../../../BasiliskII/src/Windows/b2ether/nt5/B2Win7Vista-x64.inf
SheepShaver/src/Windows/b2ether/nt5/MAKEFILE
->../../../BasiliskII/src/Windows/b2ether/nt5/MAKEFILE
SheepShaver/src/Windows/b2ether/nt5/b2ether.rc
->../../../BasiliskII/src/Windows/b2ether/nt5/b2ether.rc
SheepShaver/src/Windows/b2ether/nt5/NTDDPACK.H
->../../../BasiliskII/src/Windows/b2ether/nt5/NTDDPACK.H
SheepShaver/src/Windows/b2ether/nt5/b2ether.c
->../../../BasiliskII/src/Windows/b2ether/nt5/b2ether.c
SheepShaver/src/Windows/b2ether/nt5/b2ether64.vcxproj
->../../../BasiliskII/src/Windows/b2ether/nt5/b2ether64.vcxproj
SheepShaver/src/Windows/b2ether/nt5/SOURCES
->../../../BasiliskII/src/Windows/b2ether/nt5/SOURCES
SheepShaver/src/Windows/b2ether/nt5/b2ether_openclose.c
->../../../BasiliskII/src/Windows/b2ether/nt5/b2ether_openclose.c
SheepShaver/src/Windows/b2ether/multiopt.h
->../../../BasiliskII/src/Windows/b2ether/multiopt.h
SheepShaver/src/Windows/b2ether/packet32.cpp
->../../../BasiliskII/src/Windows/b2ether/packet32.cpp
SheepShaver/src/Windows/cdenable/eject_nt.h
->../../../BasiliskII/src/Windows/cdenable/eject_nt.h
SheepShaver/src/Windows/cdenable/ntcd.cpp
->../../../BasiliskII/src/Windows/cdenable/ntcd.cpp
SheepShaver/src/Windows/cdenable/cache.h
->../../../BasiliskII/src/Windows/cdenable/cache.h
SheepShaver/src/Windows/cdenable/cdenable.h
->../../../BasiliskII/src/Windows/cdenable/cdenable.h
SheepShaver/src/Windows/cdenable/eject_nt.cpp
->../../../BasiliskII/src/Windows/cdenable/eject_nt.cpp
SheepShaver/src/Windows/cdenable/cache.cpp
->../../../BasiliskII/src/Windows/cdenable/cache.cpp
SheepShaver/src/Windows/cdenable/ntcd.h
->../../../BasiliskII/src/Windows/cdenable/ntcd.h
SheepShaver/src/Windows/router/tcp.h
->../../../BasiliskII/src/Windows/router/tcp.h
SheepShaver/src/Windows/router/dump.h
->../../../BasiliskII/src/Windows/router/dump.h
SheepShaver/src/Windows/router/ftp.cpp
->../../../BasiliskII/src/Windows/router/ftp.cpp
SheepShaver/src/Windows/router/dynsockets.cpp
->../../../BasiliskII/src/Windows/router/dynsockets.cpp
SheepShaver/src/Windows/router/icmp.h
->../../../BasiliskII/src/Windows/router/icmp.h
SheepShaver/src/Windows/router/router_types.h
->../../../BasiliskII/src/Windows/router/router_types.h
SheepShaver/src/Windows/router/arp.cpp
->../../../BasiliskII/src/Windows/router/arp.cpp
SheepShaver/src/Windows/router/tcp.cpp
->../../../BasiliskII/src/Windows/router/tcp.cpp
SheepShaver/src/Windows/router/iphelp.cpp
->../../../BasiliskII/src/Windows/router/iphelp.cpp
SheepShaver/src/Windows/router/ftp.h
->../../../BasiliskII/src/Windows/router/ftp.h
SheepShaver/src/Windows/router/ipsocket.cpp
->../../../BasiliskII/src/Windows/router/ipsocket.cpp
SheepShaver/src/Windows/router/router.cpp
->../../../BasiliskII/src/Windows/router/router.cpp
SheepShaver/src/Windows/router/dynsockets.h
->../../../BasiliskII/src/Windows/router/dynsockets.h
SheepShaver/src/Windows/router/mib/interfaces.cpp
->../../../BasiliskII/src/Windows/router/mib/interfaces.cpp
SheepShaver/src/Windows/router/mib/interfaces.h
->../../../BasiliskII/src/Windows/router/mib/interfaces.h
SheepShaver/src/Windows/router/mib/mibaccess.h
->../../../BasiliskII/src/Windows/router/mib/mibaccess.h
SheepShaver/src/Windows/router/mib/mibaccess.cpp
->../../../BasiliskII/src/Windows/router/mib/mibaccess.cpp
SheepShaver/src/Windows/router/udp.cpp
->../../../BasiliskII/src/Windows/router/udp.cpp
SheepShaver/src/Windows/router/arp.h
->../../../BasiliskII/src/Windows/router/arp.h
SheepShaver/src/Windows/router/iphelp.h
->../../../BasiliskII/src/Windows/router/iphelp.h
SheepShaver/src/Windows/router/icmp.cpp
->../../../BasiliskII/src/Windows/router/icmp.cpp
SheepShaver/src/Windows/router/router.h
->../../../BasiliskII/src/Windows/router/router.h
SheepShaver/src/Windows/router/ipsocket.h
->../../../BasiliskII/src/Windows/router/ipsocket.h
SheepShaver/src/Windows/router/dump.cpp
->../../../BasiliskII/src/Windows/router/dump.cpp
SheepShaver/src/Windows/router/udp.h
->../../../BasiliskII/src/Windows/router/udp.h
SheepShaver/src/slirp/main.h
->../../BasiliskII/src/slirp/main.h
SheepShaver/src/slirp/tcp.h
->../../BasiliskII/src/slirp/tcp.h
SheepShaver/src/slirp/cksum.c
->../../BasiliskII/src/slirp/cksum.c
SheepShaver/src/slirp/ip_icmp.h
->../../BasiliskII/src/slirp/ip_icmp.h
SheepShaver/src/slirp/slirp.c
->../../BasiliskII/src/slirp/slirp.c
SheepShaver/src/slirp/tcp_timer.c
->../../BasiliskII/src/slirp/tcp_timer.c
SheepShaver/src/slirp/debug.h
->../../BasiliskII/src/slirp/debug.h
SheepShaver/src/slirp/mbuf.c
->../../BasiliskII/src/slirp/mbuf.c
SheepShaver/src/slirp/tcpip.h
->../../BasiliskII/src/slirp/tcpip.h
SheepShaver/src/slirp/tcp_output.c
->../../BasiliskII/src/slirp/tcp_output.c
SheepShaver/src/slirp/icmp_var.h
->../../BasiliskII/src/slirp/icmp_var.h
SheepShaver/src/slirp/tftp.c
->../../BasiliskII/src/slirp/tftp.c
SheepShaver/src/slirp/misc.h
->../../BasiliskII/src/slirp/misc.h
SheepShaver/src/slirp/bootp.h
->../../BasiliskII/src/slirp/bootp.h
SheepShaver/src/slirp/ctl.h
->../../BasiliskII/src/slirp/ctl.h
SheepShaver/src/slirp/tcp_var.h
->../../BasiliskII/src/slirp/tcp_var.h
SheepShaver/src/slirp/tcp_subr.c
->../../BasiliskII/src/slirp/tcp_subr.c
SheepShaver/src/slirp/udp.c
->../../BasiliskII/src/slirp/udp.c
SheepShaver/src/slirp/ip_input.c
->../../BasiliskII/src/slirp/ip_input.c
SheepShaver/src/slirp/sbuf.c
->../../BasiliskII/src/slirp/sbuf.c
SheepShaver/src/slirp/socket.c
->../../BasiliskII/src/slirp/socket.c
SheepShaver/src/slirp/if.c
->../../BasiliskII/src/slirp/if.c
SheepShaver/src/slirp/tcp_timer.h
->../../BasiliskII/src/slirp/tcp_timer.h
SheepShaver/src/slirp/debug.c
->../../BasiliskII/src/slirp/debug.c
SheepShaver/src/slirp/mbuf.h
->../../BasiliskII/src/slirp/mbuf.h
SheepShaver/src/slirp/tcp_input.c
->../../BasiliskII/src/slirp/tcp_input.c
SheepShaver/src/slirp/ip_icmp.c
->../../BasiliskII/src/slirp/ip_icmp.c
SheepShaver/src/slirp/slirp.h
->../../BasiliskII/src/slirp/slirp.h
SheepShaver/src/slirp/VERSION
->../../BasiliskII/src/slirp/VERSION
SheepShaver/src/slirp/tftp.h
->../../BasiliskII/src/slirp/tftp.h
SheepShaver/src/slirp/COPYRIGHT
->../../BasiliskII/src/slirp/COPYRIGHT
SheepShaver/src/slirp/libslirp.h
->../../BasiliskII/src/slirp/libslirp.h
SheepShaver/src/slirp/ip.h
->../../BasiliskII/src/slirp/ip.h
SheepShaver/src/slirp/misc.c
->../../BasiliskII/src/slirp/misc.c
SheepShaver/src/slirp/bootp.c
->../../BasiliskII/src/slirp/bootp.c
SheepShaver/src/slirp/socket.h
->../../BasiliskII/src/slirp/socket.h
SheepShaver/src/slirp/if.h
->../../BasiliskII/src/slirp/if.h
SheepShaver/src/slirp/slirp_config.h
->../../BasiliskII/src/slirp/slirp_config.h
SheepShaver/src/slirp/sbuf.h
->../../BasiliskII/src/slirp/sbuf.h
SheepShaver/src/slirp/udp.h
->../../BasiliskII/src/slirp/udp.h
SheepShaver/src/slirp/ip_output.c
->../../BasiliskII/src/slirp/ip_output.c