- Add descentX-freedata-1.ebuild to manage the freely downloadable
music, German briefings, and (for Descent 1 only) higher resolution
textures. These can be added/removed without rebuilding the game, so
they get a separate ebuild. This prevents reinstalling these
resources on game upgrades, and permits using these resources with
live ebuilds.
- Fix $LICENSE to reflect Rebirth 2014 license change.
- Add USE=+joystick. When unset, SDL joystick support is unnecessary
and Rebirth is built without joystick support. This reduces
code size, which may be important on constrained targets. When
USE=joystick is set, SDL joystick support is now required.
- Add blockers for co-installation with <d1x-rebirth-0.59.100,
<d2x-rebirth-0.59.100, as these install files of the same name and
would otherwise collide with this package. Compiling while the older
version is installed is safe, so this is only an RDEPEND blocker.
- Add USE flags for the various descentX-freedata features, and depend
on a descentX-freedata with those flags enabled. When all such flags
are clear, there is no dependency, since descentX-freedata with USE=-*
installs no files.
- Add commented out IUSE_RUNTIME to record which USE flags are
runtime-only. When Portage implements IUSE_RUNTIME, this definition
should be uncommented.
- Mirror xdg integration from main Gentoo Portage ebuild for Rebirth.
Also match layout with that ebuild where possible, to simplify sharing
changes. Notable differences remaining:
- Gentoo Portage ebuild handles freedata assets inline.
- Gentoo Portage ebuild disallows enabling both music pack USE flags,
even though the files install to separate names. Rebirth freedata
ebuild permits both to be enabled.
- Gentoo Portage ebuild hard-enables joystick support and
hard-requires SDL joystick support. Rebirth ebuild makes it
optional via USE=joystick.
- Gentoo Portage ebuild is less strict about SDL_mixer features.
- Gentoo Portage ebuild has USE=+data to control whether game data is
a required dependency. Rebirth ebuild hard-depends on game data
(but still provides a choice of demo data or retail data).
- Gentoo Portage ebuild hard-blocks _all_ d1x-rebirth, d2x-rebirth
package versions. Rebirth ebuild hard-blocks only such packages
that would cause a file collision, so that the transition
meta-packages can be installed.
- Gentoo Portage ebuild carries two useless patches.
- $P-flags.patch removes default CXXFLAGS flags, even though
SConstruct adds them to the left of the user's CXXFLAGS, so that
user CXXFLAGS override default flags.
- $P-sharepath.patch changes the sharepath by patching SConstruct.
Rebirth ebuild changes the sharepath by passing an appropriate
`sharepath=` argument to the `scons` call.
- Gentoo Portage ebuild lacks USE=editor and associated build of Descent
editor mode.
- Gentoo Portage ebuild does not export PKG_CONFIG.
Visual Studio 2013 support was experimental and never worked due to
missing C++11 support in the compiler and various compiler bugs that
caused it to crash on some of the more complicated files. Microsoft
never issued sufficient patches to get Visual Studio 2013 to compile
Rebirth successfully.
Remove the Visual Studio 2013 files and add files to build Rebirth with
Visual Studio 2017. Visual Studio 2017 support is also experimental and
is also currently broken. Among the known problems:
- Visual Studio 2017's C99 preprocessor support, like those of predecessor versions, is deficient regarding variadic macros, causing it to reject valid constructs with confusing error messages.
common\include\window.h(170): error C2672: 'con_puts_literal': no matching overloaded function found
common\include\window.h(170): error C2780: 'void con_puts_literal(const con_priority,const char (&)[len])': expects 2 arguments - 1 provided
common\include\console.h(44): note: see declaration of 'con_puts_literal'
common\include\window.h(170): error C2664: 'void con_printf(con_priority,const char *,...)': cannot convert argument 1 from 'const char [54]' to 'con_priority'
Visual Studio 2017's preprocessor expanded this line to:
( ((void)(("%s:%u: sending event %s to window of dimensions %dx%d"))), (sizeof("file, line, e, c.cv_bitmap.bm_w, c.cv_bitmap.bm_h") == 1) ? (con_puts_literal(("%s:%u: sending event %s to window of dimensions %dx%d"))) : (con_printf(("%s:%u: sending event %s to window of dimensions %dx%d") ,file, line, e, c.cv_bitmap.bm_w, c.cv_bitmap.bm_h)) );
gcc-5.4.0's preprocessor expanded this line to:
( ((void)(("%s:%u: sending event %s to window of dimensions %dx%d"))), (sizeof("file, line, e, c.cv_bitmap.bm_w, c.cv_bitmap.bm_h") == 1) ? (con_puts_literal(CON_DEBUG ,("%s:%u: sending event %s to window of dimensions %dx%d"))) : (con_printf(CON_DEBUG ,("%s:%u: sending event %s to window of dimensions %dx%d") , file, line, e, c.cv_bitmap.bm_w, c.cv_bitmap.bm_h)) );
Note the absence of the leading "CON_DEBUG," in the Visual Studio
version.
- Visual Studio 2017 sometimes disallows inner classes access to private typedef symbols in the containing class. Both gcc and clang permit this and the standard says this should work. This is shown mixed in as part of the next error.
- Visual Studio 2017's cl.exe crashes processing some files. Including "segment.h" is sufficient to crash cl.exe. Before crashing it prints:
common\include\fwd-valptridx.h(200): error C2833: 'operator integral_type' is not a recognized operator or type
common\include\fwd-valptridx.h(201): note: see reference to class template instantiation 'valptridx<managed_type>::magic_constant<constant>' being compiled
common\include\fwd-valptridx.h(202): note: see reference to class template instantiation 'valptridx<managed_type>' being compiled
common\main\fwd-segment.h(19): note: see reference to class template instantiation 'std::integral_constant<::size_t,9000>' being compiled
common\include\fwd-valptridx.h(200): error C2059: syntax error: 'newline'
common\include\fwd-valptridx.h(200): error C2334: unexpected token(s) preceding '{'; skipping apparent function body
common\main\fwd-segment.h(48): error C2248: 'valptridx<d2x::segment>::specialized_types': cannot access private typedef declared in class 'valptridx<d2x::segment>'
common\include\fwd-valptridx.h(87): note: see declaration of 'valptridx<d2x::segment>::specialized_types'
common\main\fwd-segment.h(46): note: see declaration of 'valptridx<d2x::segment>'
common\main\fwd-segment.h(48): note: see reference to class template instantiation 'valptridx<d2x::segment>::magic_constant<65534>' being compiled
common\main\fwd-segment.h(48): fatal error C1903: unable to recover from previous error(s); stopping compilation
This list is not exhaustive. The project was abandoned upon
encountering a compiler crash suspiciously similar to the one seen when
using Visual Studio 2013 to compile this code. No one should expect
Visual Studio 2017 version 15.0.0+26228.9 to successfully compile
Rebirth, but these files are published in the hope that future patches
fix the problems in Visual Studio 2017.
Add -O0 flags for the Debug and Editor builds in Xcode, setting optimisation to None so the Xcode debugger reports on all variables, steps through code correctly and otherwise can debug properly.
Various functions use the non-macro form, so support for =delete is
already mandatory. Remove the remnants of support for compilers which
lack =delete and replace it with a hard stop when the compiler rejects
declaring explicitly deleted functions.
This does not compile yet, but commit the files to save others the work
of creating the framework.
Known issues:
- Some editor-specific files do not find their headers due to missing
AdditionalIncludeDirectories
- VS2013.2 picks incorrect variadic template overloads. VS2013.3 might
do better.
- VS2013.2 C preprocessor mishandles C99 __VA_ARGS__ usage