build: change/simplify optical disc device detection

So this had a long list of OS specific device files for CD and DVD
physical devices. If we ever migrate to a new build system, this will be
a PITA for rather questionable usefulness. For example, Linux does
provide /dev/sr0, but it also creates /dev/cdrom and /dev/dvd symlinks.
For Windows, it's sort of ridiculous to hardcode D: (well, might still
work).

Get rid of this stuff, hardcode a single device name on Unix, keep D: on
Windows. In general, this probably requires runtime detection in theory,
so it's not much of a sin to move these from the build system to the
code, even if we don't make use of determining the device at runtime
yet.

This should not invite to add new ifdeffery to add device files for
other Unix variants. Rather, if anyone wants to extend this, I'd argue
they should add proper runtime detection of the device. Or, even better,
create an appropriate symlink on their systems.
This commit is contained in:
wm4 2020-06-10 11:15:48 +02:00
parent d5de79d10f
commit f386463840
3 changed files with 12 additions and 34 deletions

View File

@ -292,12 +292,16 @@ static int open_cdda(stream_t *st)
&global_device);
talloc_steal(st, global_device);
#if defined(_WIN32)
p->device = "D:";
#else
p->device = "/dev/cdrom";
#endif
if (st->path[0]) {
p->device = st->path;
} else if (global_device && global_device[0]) {
p->device = global_device;
} else {
p->device = DEFAULT_CDROM_DEVICE;
}
#if defined(__NetBSD__)

View File

@ -562,10 +562,15 @@ static int open_s_internal(stream_t *stream)
{
struct priv *priv, *p;
priv = p = stream->priv;
char *filename;
p->opts = mp_get_config_group(stream, stream->global, &dvd_conf);
char *filename = "/dev/dvd";
#if defined(_WIN32)
filename = "D:";
#endif
if (p->device && p->device[0])
filename = p->device;
else if (p->opts->device && p->opts->device[0])

View File

@ -1,31 +0,0 @@
__cdrom_devices_map__ = {
'win32': 'D:',
'cygwin': 'D:',
'darwin': '/dev/disk1',
'freebsd': '/dev/cd0',
'openbsd': '/dev/rcd0c',
'linux': '/dev/sr0',
'default': '/dev/cdrom'
}
__dvd_devices_map__ = {
'win32': 'D:',
'cygwin': 'D:',
'darwin': '/dev/rdiskN',
'freebsd': '/dev/cd0',
'openbsd': '/dev/rcd0c',
'linux': '/dev/sr0',
'default': '/dev/dvd'
}
def __default_cdrom_device__(ctx):
default = __cdrom_devices_map__['default']
return __cdrom_devices_map__.get(ctx.env.DEST_OS, default)
def __default_dvd_device__(ctx):
default = __dvd_devices_map__['default']
return __dvd_devices_map__.get(ctx.env.DEST_OS, default)
def configure(ctx):
ctx.define('DEFAULT_DVD_DEVICE', __default_dvd_device__(ctx))
ctx.define('DEFAULT_CDROM_DEVICE', __default_cdrom_device__(ctx))