Giter Club home page Giter Club logo

executor's Introduction

Executor 2000

This is a modernized (as of 2019) fork of Executor, the "original" version of which you can still find upstream at https://github.com/ctm/executor. The home of the "Executor 2000" fork is at https://github.com/autc04/executor.

Why "2000"? Because that's what we used to call the future.

Executor was a commercially available Mac emulator in the 90s - what makes it different from other Mac emulators is that it doesn't need a ROM file or any original Apple software to run; rather, it attempts to re-implement the classic Mac OS APIs, just as WINE does for Windows.

Executor 2000 feature highlights:

  • Builds and runs on modern 64-bit Linux and macOS (Windows support is planned).
  • Rootless - emulated windows are part of your desktop.
  • PowerPC support (well, not many Apps will run, but it's there)
  • 24-bit addressing support (compile-time option: -DTWENTYFOUR=YES)
  • Support for native Mac resource forks (Mac version)
  • Exchange files with Basilisk & SheepShaver
  • Lots of code cleanup, according to my own definition of "clean"
  • included debugger based on cxmon from Basilisk
  • started a test suite
  • Removed old, no longer functioning, DOS, NeXT and Windows ports. (Windows still works, though, via Qt and SDL ports.)
  • I probably broke lots of other things that used to work.

You can reach the maintainer of this fork at [email protected] or via the github issues page at https://github.com/autc4/executor/issues.

License

MIT-Style license, see COPYING.

The cxmon monitor, on which Executor's new built-in debugger is based, is released under GPL v2+, so you are essentially bound by the GPL's terms for all of Executor; however, cxmon is an optional component, which can easily be removed should a non-copyleft version of Executor be needed.

Credits

Executor was originally developped at Abacus Research and Development, Inc (ARDI) and initially released in 1990. In 2008, Clifford Matthews (https://github.com/ctm) open-sourced Executor under a MIT license. The original Credits read:

Bill Goldman - Browser, Testing
Mat Hostetter - Syn68k, Low Level Graphics, DOS port, more...
Joel Hunter - Low Level DOS Sound
Sam Lantinga - Win32 port
Patrick LoPresti - High Level Sound, Low Level Linux Sound
Cliff Matthews - this credit list (and most things not listed)
Cotton Seed - High Level Graphics, Apple Events, more...
Lauri Pesonen - Low Level Win32 CD-ROM access (Executor 2.1)
Samuel Vincent - Low Level DOS Serial Port Support
and all the engineers and testers who helped us build version 1.x

Windows Appearance:

The windows appearance option uses "Jim's CDEFs" copyright Jim Stout and the "Infinity Windoid" copyright Troy Gaul.

Primary Pre-Beta Testers:

Jon Abbott - Testing, Icon Design
Ziv Arazi - Testing
Edmund Ronald - Advice, Testing
K. Harrison Liang - Testing
Hugh Mclenaghan - Testing
Emilio Moreno - Testing, Spanish Translation + Keyboard, Icon Design
Ernst Oud - Documentation, Testing

After Executor's open-sourcing, C.W. Betts (https://github.com/MaddTheSane) picked it up and ported the whole thing from plain C to C++. And after that, yours truly, Wolfgang Thaller (https://github.com/autc04) took posession of it. Other contributors include:

Building and Running

Requirements:

  • a modern C++17 compiler
  • CMake 3.10 or later
  • Qt 5.12 or later
  • perl
  • ruby 2.0 or later
  • bison

Optional (for additional front-ends):

  • SDL 2
  • SDL 1.2
  • X11 libraries
  • waylandpp

Building:

git submodule init
git submodule update
mkdir build
cd build
cmake ..
cmake --build .

If you want to build executor with 24-bit addressing, use cmake .. -DTWENTYFOUR=YES instead of the regular cmake .. command. Note that this will limit you to about 4MB of emulated RAM and break PowerPC support.

When ./build/src/executor is first invoked, it will automatically install its fake Mac system file and the Browser finder replacement to ~/.executor/, so no further setup should be needed.

If you're using Wayland, avoid the Qt front-end and use the executor-wayland binary instead.

Executor 2000 should be able to use native Mac files on macOS, AppleDouble file pairs (foo and %foo) as used by older executor verions, as well as files written by Basilisk or SheepShaver (foo, .rsrc/foo and .finf/foo).

It should be possible to build Executor 2000 for Microsoft Windows; see here for some only slightly outdated instructions.

Build-time Options

You can specify some build-time options via cmake:

TWENTYFOUR - 24-bit addressing mode

cmake . -DTWENTYFOUR=TRUE

When this is active, Executor will use 24-bit addressing. This limits the amount of usable memory to about 4MB, and disables PowerPC support, but might allow some older applications to run.

EXECUTOR_ENABLE_LOGGING - Enable per-trap logging

cmake . -DEXECUTOR_ENABLE_LOGGING=TRUE

When this is active, you can start executor with the -logtraps option to get logging output for every MacOS function (trap) called by the running program.

Overview

Git Submodules

Executor 2000 includes several git submodules, some to include third-party libraries, and some which are maintained together with Executor.

Third party libraries:

  • LMDB/lmdb (database library used for filesystem implementation)
  • google/googletest
  • vector-of-bool/cmrc (the CMake resource compiler, for embedding binaries)

Third party library forked with minor fixes and changes:

  • autc04/cxmon (low-level debugger from the macemu project)
  • autc04/lmdbxx (C++ wrapper for lmdb)

Components maintained along with Executor 2000:

  • autc04/syn68k (68K emulator core)
  • autc04/PowerCore (PowerPC emulator core)
  • autc04/multiversal (classic MacOS API definitions plus generator scripts)

Directories

  • src/ - main source directory
  • docker/ - used for CI on azure-pipelines
  • res/ - files that are embedded into the executor binary (System, Browser, etc.)
  • tests/ - automated tests for regression testing and for figuring out how MacOS really works
  • packages/go/ - source code for the Browser application. Seems to not exactly match the compiled Browser binary, and I haven't been able to compile it yet.
  • packages/skel/ - System Folder and Freeware apps that used to be shipped with Executor.
  • docs/ - some extra documentation
  • docs/outdated/ - Outdated docs that might help understanding the past of Executor.
  • util/ - a collection of scripts and helper programs, all obsolete

The "Multiversal Interfaces"

On classic MacOS, compilers would ship with an Apple-supplied package called the "Universal Interfaces" that contained C header files for all APIs provided by MacOS.

The multiversal repository, included as a git submodule, contains the "Multiversal Interfaces", an open source reimplementation that is shared between Executor 2000 and the Retro68 cross-compiler suite.

The directory multiversal/defs contains YAML files that describe (a subset of) the MacOS API; the ruby scripts in multiversal, invoked from src/CMakeLists.txt, generate actual C++ header files for Executor from those descriptions. You can find the C++ headers in build/src/api once you've built Executor 2000, but you should of course only edit the YAML files they are generated from.

There is a JSON schema describing the format of those YAML files in multiversal/multiversal.schema.json. If you happen to be using Visual Studio Code as your text editor, you can install the YAML extension from Red Hat and add the following to your workspace settings (.vscode/settings.json), and you'll get some autocompletion and automatic error squiggles as you type:

    "yaml.schemas": {
        "multiversal/multiversal.schema.json": "multiversal/defs/*.yaml"
    }

Inside src/

The code in src/ is loosely organized into subdirectories. Each subdirectory can contain both headers and source files. Some of these headers might be intended for use from other files in the subdirectory only, while others might be public. This should be systematically cleaned up at some point. Source files that didn't fit into any subdirectory have been left at the top level. The header files corresponding to those .cpp files can for historical reasons be found in include/rsys/. I never found out what rsys stands for.

executor's People

Contributors

autc04 avatar ctm avatar davidludwig avatar maddthesane avatar r-lind avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

executor's Issues

Test case failure: FileTest.SetFInfo_CrDat

Creation dates are not currently emulated.

Standard UNIX does not track creation dates, but they are of course available on macOS, and AppleDouble stores them within the file.

Build failed on macOS (debugger.h/debugger.cpp/mon_debugger.cpp)

With commit 3171cb4 building on macOS failed with following errors:

In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/unordered_map:369:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:880:5: error:
      static_assert failed due to requirement '__check_hash_requirements<basic_string<char, char_traits<char>,
      allocator<char> >, hash<basic_string<char, char_traits<char>, allocator<char> > > >::value' "the specified hash
      does not meet the Hash requirements"
    static_assert(__check_hash_requirements<_Key, _Hash>::value,
    ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__hash_table:962:77: note:
      in instantiation of member function 'std::__1::__diagnose_hash_table_helper<std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> > >,
      std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> >, Executor::traps::Entrypoint *> > >::__trigger_diagnostics' requested here
    static_assert(__diagnose_hash_table_helper<_Tp, _Hash, _Equal, _Alloc>::__trigger_diagnostics(), "");
                                                                            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/unordered_map:769:13: note:
      in instantiation of template class
      'std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> >, Executor::traps::Entrypoint *>,
      std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> >, Executor::traps::Entrypoint *>, std::__1::hash<std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> > >, true>,
      std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> >, Executor::traps::Entrypoint *>, std::__1::equal_to<std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> > >, true>,
      std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> >, Executor::traps::Entrypoint *> > >' requested here
    __table __table_;
            ^
/Development/executor/src/base/debugger.cpp:29:23: note: in instantiation of template class
      'std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >,
      Executor::traps::Entrypoint *, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >, Executor::traps::Entrypoint *> > >' requested here
    traps::entrypoints["Debugger"]->breakpoint = true;
                      ^
/Development/executor/src/base/debugger.cpp:29:23: error: no viable overloaded operator[] for type
      'std::unordered_map<std::string, traps::Entrypoint *>' (aka 'unordered_map<basic_string<char, char_traits<char>,
      allocator<char> >, Executor::traps::Entrypoint *>')
    traps::entrypoints["Debugger"]->breakpoint = true;
    ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/unordered_map:1114:18: note:
      candidate function not viable: no known conversion from 'const char [9]' to 'const
      std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >,
      Executor::traps::Entrypoint *, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >, Executor::traps::Entrypoint *> > >::key_type' (aka
      'const std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >') for 1st argument
    mapped_type& operator[](const key_type& __k);
                 ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/unordered_map:1116:18: note:
      candidate function not viable: no known conversion from 'const char [9]' to
      'std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >,
      Executor::traps::Entrypoint *, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>,
      std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >, Executor::traps::Entrypoint *> > >::key_type' (aka
      'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >') for 1st argument
    mapped_type& operator[](key_type&& __k);
                 ^
2 errors generated.
make[2]: *** [src/CMakeFiles/romlib.dir/base/debugger.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/romlib.dir/all] Error 2
make: *** [all] Error 2

Something's rotten in the state of the Resource Manager

Strange things happen when resource files are written to disk. This affects both files created/modified by ResEdit and THINK C project files (which are a mostly resource-based file format)

  • ResEdit reports that "The resources in file ... are locked." when the file is opened again
  • Resources seem to randomly disappear

ClarisWorks 3 / Lotus 1-2-3: Problem with field checks (numeric)

If i open the preferences of both apps and want to make changes there are always an error on settings that depends on numeric values.
In the case of CW 3 it's for example "Starting Footnote #".
In the case of Lotus 1-2-3 it's "Column with".

It doesn't matter what is entered in this fields.

bildschirmfoto_2019-02-17_16-35-07
bildschirmfoto_2019-02-17_16-35-23
bildschirmfoto_2019-02-17_16-38-53

Trying to build on FreeBSD

Trying to build on FreeBSD, compilation stops at

[  5%] Built target resources
[  6%] Building C object CMakeFiles/lmdb.dir/lmdb/libraries/liblmdb/mdb.c.o
/tmp/executor/lmdb/libraries/liblmdb/mdb.c:5169:14: error: variable has incomplete
      type 'union semun'
        union semun semu;
                    ^
/tmp/executor/lmdb/libraries/liblmdb/mdb.c:5169:8: note: forward declaration of       
      'union semun'
        union semun semu;
              ^
1 error generated.                                                                    
gmake[2]: *** [CMakeFiles/lmdb.dir/build.make:82: CMakeFiles/lmdb.dir/lmdb/libraries/liblmdb/mdb.c.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:445: CMakeFiles/lmdb.dir/all] Error 2
gmake: *** [Makefile:182: all] Error 2

Boost not listed in README dependencies but required by cmake

When running the cmake .. step on a recently reinstalled Kubuntu 20.04 LTS system, I encountered this error message:

CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
  Could NOT find Boost (missing: Boost_INCLUDE_DIR filesystem system)
Call Stack (most recent call first):
  /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.16/Modules/FindBoost.cmake:2179 (find_package_handle_standard_args)
  src/CMakeLists.txt:16 (find_package)

Boost isn't in the list of dependencies in the README so one of them is wrong.

(sudo apt-get install libboost-filesystem-dev libboost-system-dev got me past it.)

Build error with Ubuntu 16.04

I'm trying to build in Ubuntu 16.04 and I'm got this error

It seems like this is some problem with Ubuntu, but I'm not very sure how to fix them

the error

/usr/include/c++/5/bits/stl_pair.h:141:38: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’

seems very similar to this one, but since I'm not a c++ developer, I don't know how to fix it.
cmu-db/peloton#651

[  3%] Building CXX object CMakeFiles/resources.dir/__cmrc_resources/lib.cpp.o
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::directory&}; _Tp = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >]’:
/usr/include/c++/5/bits/alloc_traits.h:530:4:   required from ‘static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::directory&}; _Tp = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> > >]’
/usr/include/c++/5/bits/stl_tree.h:529:32:   required from ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_construct_node(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type, _Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::directory&}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >*]’
/usr/include/c++/5/bits/stl_tree.h:546:21:   required from ‘std::_Rb_tree_node<_Val>* std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_create_node(_Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::directory&}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >*]’
/usr/include/c++/5/bits/stl_tree.h:2123:33:   required from ‘std::pair<std::_Rb_tree_iterator<_Val>, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_unique(_Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::directory&}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >]’
/usr/include/c++/5/bits/stl_map.h:559:64:   required from ‘std::pair<typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<std::pair<const _Key, _Tp> >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::emplace(_Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::directory&}; _Key = std::__cxx11::basic_string<char>; _Tp = cmrc::detail::file_or_directory; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<std::pair<const _Key, _Tp> >::other>::iterator = std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >]’
/home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:119:46:   required from here
/usr/include/c++/5/ext/new_allocator.h:120:4: error: no matching function for call to ‘std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>::pair(std::__cxx11::basic_string<char>&, cmrc::detail::directory&)’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:206:9: note: candidate: template<class ... _Args1, long unsigned int ..._Indexes1, class ... _Args2, long unsigned int ..._Indexes2> std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>)
         pair(tuple<_Args1...>&, tuple<_Args2...>&,
         ^
/usr/include/c++/5/bits/stl_pair.h:206:9: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   ‘std::__cxx11::basic_string<char>’ is not derived from ‘std::tuple<_Elements ...>’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:155:9: note: candidate: template<class ... _Args1, class ... _Args2> std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>)
         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
         ^
/usr/include/c++/5/bits/stl_pair.h:155:9: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   cannot convert ‘std::forward<std::__cxx11::basic_string<char>&>((* & __args#0))’ (type ‘std::__cxx11::basic_string<char>’) to type ‘std::piecewise_construct_t’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:150:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(std::pair<_U1, _U2>&&)
  constexpr pair(pair<_U1, _U2>&& __p)
            ^
/usr/include/c++/5/bits/stl_pair.h:150:12: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   ‘std::__cxx11::basic_string<char>’ is not derived from ‘std::pair<_T1, _T2>’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:144:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&)
  constexpr pair(_U1&& __x, _U2&& __y)
            ^
/usr/include/c++/5/bits/stl_pair.h:144:12: note:   template argument deduction/substitution failed:
/usr/include/c++/5/bits/stl_pair.h:141:38: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class _U2, class = typename
                                      ^
/usr/include/c++/5/bits/stl_pair.h:138:12: note: candidate: template<class _U2, class> constexpr std::pair<_T1, _T2>::pair(const _T1&, _U2&&)
  constexpr pair(const _T1& __x, _U2&& __y)
            ^
/usr/include/c++/5/bits/stl_pair.h:138:12: note:   template argument deduction/substitution failed:
/usr/include/c++/5/bits/stl_pair.h:136:27: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U2, class = typename
                           ^
/usr/include/c++/5/bits/stl_pair.h:133:12: note: candidate: template<class _U1, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, const _T2&)
  constexpr pair(_U1&& __x, const _T2& __y)
            ^
/usr/include/c++/5/bits/stl_pair.h:133:12: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   cannot convert ‘std::forward<cmrc::detail::directory&>((* & __args#1))’ (type ‘cmrc::detail::directory’) to type ‘const cmrc::detail::file_or_directory&’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:128:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(std::pair<_T1, _T2>&&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = cmrc::detail::file_or_directory]
       constexpr pair(pair&&) = default;
                 ^
/usr/include/c++/5/bits/stl_pair.h:128:17: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/5/bits/stl_pair.h:127:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = cmrc::detail::file_or_directory]
       constexpr pair(const pair&) = default;
                 ^
/usr/include/c++/5/bits/stl_pair.h:127:17: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/5/bits/stl_pair.h:124:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&)
  constexpr pair(const pair<_U1, _U2>& __p)
            ^
/usr/include/c++/5/bits/stl_pair.h:124:12: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   ‘std::__cxx11::basic_string<char>’ is not derived from ‘const std::pair<_T1, _T2>’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:112:26: note: candidate: constexpr std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = cmrc::detail::file_or_directory]
       _GLIBCXX_CONSTEXPR pair(const _T1& __a, const _T2& __b)
                          ^
/usr/include/c++/5/bits/stl_pair.h:112:26: note:   no known conversion for argument 2 from ‘cmrc::detail::directory’ to ‘const cmrc::detail::file_or_directory&’
/usr/include/c++/5/bits/stl_pair.h:108:26: note: candidate: constexpr std::pair<_T1, _T2>::pair() [with _T1 = const std::__cxx11::basic_string<char>; _T2 = cmrc::detail::file_or_directory]
       _GLIBCXX_CONSTEXPR pair()
                          ^
/usr/include/c++/5/bits/stl_pair.h:108:26: note:   candidate expects 0 arguments, 2 provided
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::file_data&}; _Tp = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >]’:
/usr/include/c++/5/bits/alloc_traits.h:530:4:   required from ‘static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::file_data&}; _Tp = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> > >]’
/usr/include/c++/5/bits/stl_tree.h:529:32:   required from ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_construct_node(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type, _Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::file_data&}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >*]’
/usr/include/c++/5/bits/stl_tree.h:546:21:   required from ‘std::_Rb_tree_node<_Val>* std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_create_node(_Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::file_data&}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >*]’
/usr/include/c++/5/bits/stl_tree.h:2123:33:   required from ‘std::pair<std::_Rb_tree_iterator<_Val>, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_unique(_Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::file_data&}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >]’
/usr/include/c++/5/bits/stl_map.h:559:64:   required from ‘std::pair<typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<std::pair<const _Key, _Tp> >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::emplace(_Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, cmrc::detail::file_data&}; _Key = std::__cxx11::basic_string<char>; _Tp = cmrc::detail::file_or_directory; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >; typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename __gnu_cxx::__alloc_traits<_Alloc>::rebind<std::pair<const _Key, _Tp> >::other>::iterator = std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory> >]’
/home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:126:51:   required from here
/usr/include/c++/5/ext/new_allocator.h:120:4: error: no matching function for call to ‘std::pair<const std::__cxx11::basic_string<char>, cmrc::detail::file_or_directory>::pair(std::__cxx11::basic_string<char>&, cmrc::detail::file_data&)’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:206:9: note: candidate: template<class ... _Args1, long unsigned int ..._Indexes1, class ... _Args2, long unsigned int ..._Indexes2> std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>)
         pair(tuple<_Args1...>&, tuple<_Args2...>&,
         ^
/usr/include/c++/5/bits/stl_pair.h:206:9: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   ‘std::__cxx11::basic_string<char>’ is not derived from ‘std::tuple<_Elements ...>’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:155:9: note: candidate: template<class ... _Args1, class ... _Args2> std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>)
         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
         ^
/usr/include/c++/5/bits/stl_pair.h:155:9: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   cannot convert ‘std::forward<std::__cxx11::basic_string<char>&>((* & __args#0))’ (type ‘std::__cxx11::basic_string<char>’) to type ‘std::piecewise_construct_t’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:150:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(std::pair<_U1, _U2>&&)
  constexpr pair(pair<_U1, _U2>&& __p)
            ^
/usr/include/c++/5/bits/stl_pair.h:150:12: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   ‘std::__cxx11::basic_string<char>’ is not derived from ‘std::pair<_T1, _T2>’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:144:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&)
  constexpr pair(_U1&& __x, _U2&& __y)
            ^
/usr/include/c++/5/bits/stl_pair.h:144:12: note:   template argument deduction/substitution failed:
/usr/include/c++/5/bits/stl_pair.h:141:38: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U1, class _U2, class = typename
                                      ^
/usr/include/c++/5/bits/stl_pair.h:138:12: note: candidate: template<class _U2, class> constexpr std::pair<_T1, _T2>::pair(const _T1&, _U2&&)
  constexpr pair(const _T1& __x, _U2&& __y)
            ^
/usr/include/c++/5/bits/stl_pair.h:138:12: note:   template argument deduction/substitution failed:
/usr/include/c++/5/bits/stl_pair.h:136:27: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
       template<class _U2, class = typename
                           ^
/usr/include/c++/5/bits/stl_pair.h:133:12: note: candidate: template<class _U1, class> constexpr std::pair<_T1, _T2>::pair(_U1&&, const _T2&)
  constexpr pair(_U1&& __x, const _T2& __y)
            ^
/usr/include/c++/5/bits/stl_pair.h:133:12: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   cannot convert ‘std::forward<cmrc::detail::file_data&>((* & __args#1))’ (type ‘cmrc::detail::file_data’) to type ‘const cmrc::detail::file_or_directory&’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:128:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(std::pair<_T1, _T2>&&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = cmrc::detail::file_or_directory]
       constexpr pair(pair&&) = default;
                 ^
/usr/include/c++/5/bits/stl_pair.h:128:17: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/5/bits/stl_pair.h:127:17: note: candidate: constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = cmrc::detail::file_or_directory]
       constexpr pair(const pair&) = default;
                 ^
/usr/include/c++/5/bits/stl_pair.h:127:17: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/5/bits/stl_pair.h:124:12: note: candidate: template<class _U1, class _U2, class> constexpr std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&)
  constexpr pair(const pair<_U1, _U2>& __p)
            ^
/usr/include/c++/5/bits/stl_pair.h:124:12: note:   template argument deduction/substitution failed:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,
                 from /usr/include/c++/5/bits/allocator.h:46,
                 from /usr/include/c++/5/string:41,
                 from /usr/include/c++/5/stdexcept:39,
                 from /usr/include/c++/5/array:38,
                 from /usr/include/c++/5/tuple:39,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/ext/new_allocator.h:120:4: note:   ‘std::__cxx11::basic_string<char>’ is not derived from ‘const std::pair<_T1, _T2>’
  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
    ^
In file included from /usr/include/c++/5/utility:70:0,
                 from /usr/include/c++/5/tuple:38,
                 from /usr/include/c++/5/functional:55,
                 from /home/andy/executor/build/_cmrc/include/cmrc/cmrc.hpp:5,
                 from /home/andy/executor/build/__cmrc_resources/lib.cpp:1:
/usr/include/c++/5/bits/stl_pair.h:112:26: note: candidate: constexpr std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = const std::__cxx11::basic_string<char>; _T2 = cmrc::detail::file_or_directory]
       _GLIBCXX_CONSTEXPR pair(const _T1& __a, const _T2& __b)
                          ^
/usr/include/c++/5/bits/stl_pair.h:112:26: note:   no known conversion for argument 2 from ‘cmrc::detail::file_data’ to ‘const cmrc::detail::file_or_directory&’
/usr/include/c++/5/bits/stl_pair.h:108:26: note: candidate: constexpr std::pair<_T1, _T2>::pair() [with _T1 = const std::__cxx11::basic_string<char>; _T2 = cmrc::detail::file_or_directory]
       _GLIBCXX_CONSTEXPR pair()
                          ^
/usr/include/c++/5/bits/stl_pair.h:108:26: note:   candidate expects 0 arguments, 2 provided
CMakeFiles/resources.dir/build.make:127: recipe for target 'CMakeFiles/resources.dir/__cmrc_resources/lib.cpp.o' failed
make[2]: *** [CMakeFiles/resources.dir/__cmrc_resources/lib.cpp.o] Error 1
CMakeFiles/Makefile2:453: recipe for target 'CMakeFiles/resources.dir/all' failed
make[1]: *** [CMakeFiles/resources.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

Source for Browser?

Do we have the sources for the default Browser?

If we don't have the source of the current (and so being able to rebuild it as needed) it would probably be worth to make a new one which is Open Source.

Hypercard 1.2.5 crash the Heap when loading a stack

I'm not 100% sure as Hypercard 1.2.5 don't claim to be 32-bit clean, so it may be linked with #12, but when it try to load a stack it generate a HEAP_DEATH assert in mmansubr.cpp:866:

    /* Search from start to the end. */
    for(b = start;
        b != ZONE_BK_LIM(current_zone);
        b = BLOCK_NEXT(b))
    {
        if(PSIZE(b) < MIN_BLOCK_SIZE)
        {
            HEAP_DEATH(); // <<<< HERE
        }

        /* Is it free and big enough? */
        if(USE(b) == FREE)
        {
            ROMlib_coalesce(b);
            if(PSIZE(b) >= (uint32_t)size)
            {
                *newblk = b;
                return noErr;
            }
        }
    }

I've added some trace to check what is happening, and it seems that the current block of the heap which is looked for report a "PSIZE" of 0, which obviously is lower than the 12 bytes of the "MIN_BLOCK_SIZE".

I'm not really sure what's happening there, I would more suspect a bug in executor more than being an issue with the 24-bit vs 23-bit mode.

I don't understand enough how the internal debugger work to try to diagnose the heap (not even sure if we can)

Linux: Debian testing - 64 bit - kernel 4.19.28-2
Build from heads/master-0-gbd19a127

Missing branch?

Per this link, the 'twentyfourbits' branch hasn't been merged yet, but strangely, said branch is nowhere to be found.

Has it been merged?

24-bit addressing support

Originally, Macs used 24-bit addressing. Apple introduced 32-bit addressing as an option with System 7 on 68020 and later processors, and made it mandatory some time later. This caused compatibility problems for quite a few applications.
Executor only implements 32-bit addressing and shows a warning for applications that are not explicitly marked as 32-bit compatible by their developers.

Background: The original 68000 processor ignored the upper 8 bits of every 32-bit address. Some programs took advantage of that and stored other information there, others even relied on the Memory Manager storing some information there in some situations.

TODO:

  • implement a 24-bit address mapping mode for syn68k
  • make sure that executor's memory use "fits" in 4 * 4MB
  • make the memory manager store its attribute bits where old apps expect them

Affected Apps (that are known to crash for this reason):

  • Turbo Pascal 1.0

CMake outputs an error when using Boost 1.76 on Mac OS X Catalina

Using boost 1.76, installed via MacPorts, gave me this error on CMake during compilation:

CMake Error at /opt/local/lib/cmake/Boost-1.76.0/BoostConfig.cmake:141 (find_package):
  Found package configuration file:

    /opt/local/lib/cmake/boost_filesystem-1.76.0/boost_filesystem-config.cmake

  but it set boost_filesystem_FOUND to FALSE so package "boost_filesystem" is
  considered to be NOT FOUND.  Reason given by package:

  No suitable build variant has been found.

  The following variants have been tried and rejected:

  * libboost_filesystem.dylib (shared, Boost_USE_STATIC_LIBS=YES)

Call Stack (most recent call first):
  /opt/local/lib/cmake/Boost-1.76.0/BoostConfig.cmake:258 (boost_find_component)
  /opt/local/share/cmake-3.22/Modules/FindBoost.cmake:594 (find_package)
  src/CMakeLists.txt:16 (find_package)

My instincts say that this is probably a problem with Boost 1.70 and up.

I am using an Intel Mac running Mac OS X 10.15.7. The other dependencies have already been installed.

Cannot compile on RHEL 8.6 + boost 1.66

Hi,
Trying to build executor from source on RHEL 8.6 + libboost 1.66, I get a C++ error:

[raistlin@daltigoth ~/rpmbuild/BUILD/executor/build]$ gmake
[  1%] Built target lmdb
[  6%] Built target resources
[  9%] Built target syngen
[ 14%] Built target syn68k
[ 15%] Built target powergenerator
[ 16%] Built target PowerCore
[ 16%] Built target CountInstructions
[ 16%] Built target testbed
[ 17%] Built target test-powerpc
[ 19%] Built target mon
[ 19%] Built target cxmon
[ 19%] Built target mksspairtable
[ 20%] Built target mkseedtables
[ 21%] Built target mkultable
[ 21%] Built target map_to_c
[ 89%] Built target romlib
[ 89%] Built target front-end-headless
[ 90%] Built target front-end-x
Consolidate compiler generated dependencies of target executor-x
[ 90%] Building CXX object src/CMakeFiles/executor-x.dir/main.cpp.o
In file included from /usr/include/boost/config.hpp:61,
                 from /usr/include/boost/filesystem/config.hpp:28,
                 from /usr/include/boost/filesystem.hpp:15,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/include/rsys/filesystem.h:3,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./file/file.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:37:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp: In instantiation of ‘const bool boost::detail::has_right_shift_impl::operator_exists<std::basic_istream<wchar_t>, MemorySize>::value’:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:179:4:   required from ‘const bool boost::detail::has_right_shift_impl::trait_impl1<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care, false>::value’
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:208:4:   required from ‘const bool boost::detail::has_right_shift_impl::trait_impl<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care>::value’
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:216:8:   required from ‘struct boost::has_right_shift<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care>’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:243:13:   required from ‘struct boost::detail::deduce_target_char_impl<boost::detail::deduce_character_type_later<MemorySize> >’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:270:89:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:468:15:   required from ‘struct boost::detail::lexical_converter_impl<MemorySize, std::__cxx11::basic_string<char> >’
/usr/include/boost/lexical_cast/try_lexical_convert.hpp:196:44:   required from ‘bool boost::conversion::detail::try_lexical_convert(const Source&, Target&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char> ’
/usr/include/boost/lexical_cast.hpp:41:60:   required from ‘Target boost::lexical_cast(const Source&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char>]’
/usr/include/boost/program_options/detail/value_semantic.hpp:92:36:   required from ‘void boost::program_options::validate(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&, T*, long int) [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:184:21:   required from ‘void boost::program_options::typed_value<T, charT>::xparse(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&) const [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:174:5:   required from here
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:158:70: error: ambiguous overload for ‘operator>>’ (operand types are ‘std::basic_istream<wchar_t>’ and ‘MemorySize’)
    BOOST_STATIC_CONSTANT(bool, value = (sizeof(s_check(((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));
                                                                     ^
In file included from /usr/include/c++/8/iterator:65,
                 from /usr/include/boost/filesystem/path_traits.hpp:28,
                 from /usr/include/boost/filesystem/path.hpp:25,
                 from /usr/include/boost/filesystem.hpp:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/include/rsys/filesystem.h:3,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./file/file.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:37:
/usr/include/c++/8/istream:120:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>]’
       operator>>(__istream_type& (*__pf)(__istream_type&))
       ^~~~~~~~
/usr/include/c++/8/istream:124:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<wchar_t>]’
       operator>>(__ios_type& (*__pf)(__ios_type&))
       ^~~~~~~~
/usr/include/c++/8/istream:131:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>]’
       operator>>(ios_base& (*__pf)(ios_base&))
       ^~~~~~~~
/usr/include/c++/8/istream:259:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__streambuf_type*) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<wchar_t>]’
       operator>>(__streambuf_type* __sb);
       ^~~~~~~~
In file included from /usr/include/boost/type_traits/has_right_shift.hpp:43,
                 from /usr/include/boost/lexical_cast/detail/converter_lexical.hpp:39,
                 from /usr/include/boost/lexical_cast/try_lexical_convert.hpp:42,
                 from /usr/include/boost/lexical_cast.hpp:32,
                 from /usr/include/boost/program_options/value_semantic.hpp:14,
                 from /usr/include/boost/program_options/options_description.hpp:13,
                 from /usr/include/boost/program_options.hpp:15,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./commandline/program_options_extended.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:58:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:70:13: note: candidate: ‘boost::detail::has_right_shift_impl::no_operator boost::detail::has_right_shift_impl::operator>>(const boost::detail::has_right_shift_impl::any&, const boost::detail::has_right_shift_impl::any&)’
 no_operator operator BOOST_TT_TRAIT_OP (const any&, const any&);
             ^~~~~~~~
In file included from /usr/include/boost/config.hpp:61,
                 from /usr/include/boost/filesystem/config.hpp:28,
                 from /usr/include/boost/filesystem.hpp:15,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/include/rsys/filesystem.h:3,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./file/file.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:37:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp: In instantiation of ‘const bool boost::detail::has_right_shift_impl::operator_returns_void<std::basic_istream<wchar_t>, MemorySize>::value’:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:179:4:   required from ‘const bool boost::detail::has_right_shift_impl::trait_impl1<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care, false>::value’
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:208:4:   required from ‘const bool boost::detail::has_right_shift_impl::trait_impl<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care>::value’
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:216:8:   required from ‘struct boost::has_right_shift<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care>’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:243:13:   required from ‘struct boost::detail::deduce_target_char_impl<boost::detail::deduce_character_type_later<MemorySize> >’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:270:89:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:468:15:   required from ‘struct boost::detail::lexical_converter_impl<MemorySize, std::__cxx11::basic_string<char> >’
/usr/include/boost/lexical_cast/try_lexical_convert.hpp:196:44:   required from ‘bool boost::conversion::detail::try_lexical_convert(const Source&, Target&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char> ’
/usr/include/boost/lexical_cast.hpp:41:60:   required from ‘Target boost::lexical_cast(const Source&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char>]’
/usr/include/boost/program_options/detail/value_semantic.hpp:92:36:   required from ‘void boost::program_options::validate(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&, T*, long int) [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:184:21:   required from ‘void boost::program_options::typed_value<T, charT>::xparse(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&) const [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:174:5:   required from here
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:95:114: error: ambiguous overload for ‘operator>>’ (operand types are ‘std::basic_istream<wchar_t>’ and ‘MemorySize’)
    BOOST_STATIC_CONSTANT(bool, value = (sizeof(::boost::type_traits::yes_type)==sizeof(returns_void((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>(),returns_void_t())))));
                                                                                                                  ^
In file included from /usr/include/c++/8/iterator:65,
                 from /usr/include/boost/filesystem/path_traits.hpp:28,
                 from /usr/include/boost/filesystem/path.hpp:25,
                 from /usr/include/boost/filesystem.hpp:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/include/rsys/filesystem.h:3,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./file/file.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:37:
/usr/include/c++/8/istream:120:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>]’
       operator>>(__istream_type& (*__pf)(__istream_type&))
       ^~~~~~~~
/usr/include/c++/8/istream:124:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<wchar_t>]’
       operator>>(__ios_type& (*__pf)(__ios_type&))
       ^~~~~~~~
/usr/include/c++/8/istream:131:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>]’
       operator>>(ios_base& (*__pf)(ios_base&))
       ^~~~~~~~
/usr/include/c++/8/istream:259:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__streambuf_type*) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<wchar_t>]’
       operator>>(__streambuf_type* __sb);
       ^~~~~~~~
In file included from /usr/include/boost/type_traits/has_right_shift.hpp:43,
                 from /usr/include/boost/lexical_cast/detail/converter_lexical.hpp:39,
                 from /usr/include/boost/lexical_cast/try_lexical_convert.hpp:42,
                 from /usr/include/boost/lexical_cast.hpp:32,
                 from /usr/include/boost/program_options/value_semantic.hpp:14,
                 from /usr/include/boost/program_options/options_description.hpp:13,
                 from /usr/include/boost/program_options.hpp:15,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./commandline/program_options_extended.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:58:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:70:13: note: candidate: ‘boost::detail::has_right_shift_impl::no_operator boost::detail::has_right_shift_impl::operator>>(const boost::detail::has_right_shift_impl::any&, const boost::detail::has_right_shift_impl::any&)’
 no_operator operator BOOST_TT_TRAIT_OP (const any&, const any&);
             ^~~~~~~~
In file included from /usr/include/boost/iterator/iterator_categories.hpp:21,
                 from /usr/include/boost/iterator/iterator_facade.hpp:13,
                 from /usr/include/boost/filesystem/path.hpp:28,
                 from /usr/include/boost/filesystem.hpp:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/include/rsys/filesystem.h:3,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./file/file.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:37:
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp: In instantiation of ‘struct boost::detail::deduce_target_char_impl<boost::detail::deduce_character_type_later<MemorySize> >’:
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:270:89:   required from ‘struct boost::detail::deduce_target_char<MemorySize>’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:407:92:   required from ‘struct boost::detail::lexical_cast_stream_traits<std::__cxx11::basic_string<char>, MemorySize>’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:468:15:   required from ‘struct boost::detail::lexical_converter_impl<MemorySize, std::__cxx11::basic_string<char> >’
/usr/include/boost/lexical_cast/try_lexical_convert.hpp:196:44:   required from ‘bool boost::conversion::detail::try_lexical_convert(const Source&, Target&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char> ’
/usr/include/boost/lexical_cast.hpp:41:60:   required from ‘Target boost::lexical_cast(const Source&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char>]’
/usr/include/boost/program_options/detail/value_semantic.hpp:92:36:   required from ‘void boost::program_options::validate(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&, T*, long int) [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:184:21:   required from ‘void boost::program_options::typed_value<T, charT>::xparse(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&) const [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:174:5:   required from here
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:243:13: error: ‘value’ is not a member of ‘boost::has_right_shift<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care>’
             BOOST_STATIC_ASSERT_MSG((result_t::value || boost::has_right_shift<std::basic_istream<wchar_t>, T >::value),
             ^~~~~~~~~~~~~~~~~~~~~~~
gmake[2]: *** [src/CMakeFiles/executor-x.dir/build.make:76: src/CMakeFiles/executor-x.dir/main.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:762: src/CMakeFiles/executor-x.dir/all] Error 2
gmake: *** [Makefile:166: all] Error 2
[raistlin@daltigoth ~/rpmbuild/BUILD/executor/build]$ gmake
  06/26/2022 21:43:13 .: 7.81 6.38 5.27 :.  0 raistlin@daltigoth:~  1 coyote@daltigoth:~  2 root@daltigoth:~  3 raistlin@daltigoth:~  4 raistlin@daltigoth:~  5 root@daltigoth:~/Bui  6 root@daltigoth:~  7 raistlin@daltigoth:~  
raits>::__ios_type&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<wchar_t>]’ 
       operator>>(__ios_type& (*__pf)(__ios_type&))
       ^~~~~~~~
/usr/include/c++/8/istream:131:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>]’
       operator>>(ios_base& (*__pf)(ios_base&))
       ^~~~~~~~
/usr/include/c++/8/istream:259:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__streambuf_type*) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<wchar_t>]’
       operator>>(__streambuf_type* __sb);
       ^~~~~~~~
In file included from /usr/include/boost/type_traits/has_right_shift.hpp:43,
                 from /usr/include/boost/lexical_cast/detail/converter_lexical.hpp:39,
                 from /usr/include/boost/lexical_cast/try_lexical_convert.hpp:42,
                 from /usr/include/boost/lexical_cast.hpp:32,
                 from /usr/include/boost/program_options/value_semantic.hpp:14,
                 from /usr/include/boost/program_options/options_description.hpp:13,
                 from /usr/include/boost/program_options.hpp:15,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./commandline/program_options_extended.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:58:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:70:13: note: candidate: ‘boost::detail::has_right_shift_impl::no_operator boost::detail::has_right_shift_impl::operator>>(const boost::detail::has_right_shift_impl::any&, const boost::detail::has_right_shift_impl::any&)’
 no_operator operator BOOST_TT_TRAIT_OP (const any&, const any&);
             ^~~~~~~~
In file included from /usr/include/boost/config.hpp:61,
                 from /usr/include/boost/filesystem/config.hpp:28,
                 from /usr/include/boost/filesystem.hpp:15,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/include/rsys/filesystem.h:3,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./file/file.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:37:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp: In instantiation of ‘const bool boost::detail::has_right_shift_impl::operator_returns_void<std::basic_istream<wchar_t>, MemorySize>::value’:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:179:4:   required from ‘const bool boost::detail::has_right_shift_impl::trait_impl1<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care, false>::value’
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:208:4:   required from ‘const bool boost::detail::has_right_shift_impl::trait_impl<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care>::value’
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:216:8:   required from ‘struct boost::has_right_shift<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care>’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:243:13:   required from ‘struct boost::detail::deduce_target_char_impl<boost::detail::deduce_character_type_later<MemorySize> >’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:270:89:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:468:15:   required from ‘struct boost::detail::lexical_converter_impl<MemorySize, std::__cxx11::basic_string<char> >’
/usr/include/boost/lexical_cast/try_lexical_convert.hpp:196:44:   required from ‘bool boost::conversion::detail::try_lexical_convert(const Source&, Target&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char> ’
/usr/include/boost/lexical_cast.hpp:41:60:   required from ‘Target boost::lexical_cast(const Source&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char>]’
/usr/include/boost/program_options/detail/value_semantic.hpp:92:36:   required from ‘void boost::program_options::validate(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&, T*, long int) [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:184:21:   required from ‘void boost::program_options::typed_value<T, charT>::xparse(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&) const [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:174:5:   required from here
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:95:114: error: ambiguous overload for ‘operator>>’ (operand types are ‘std::basic_istream<wchar_t>’ and ‘MemorySize’)
    BOOST_STATIC_CONSTANT(bool, value = (sizeof(::boost::type_traits::yes_type)==sizeof(returns_void((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>(),returns_void_t())))));
                                                                                                                  ^
In file included from /usr/include/c++/8/iterator:65,
                 from /usr/include/boost/filesystem/path_traits.hpp:28,
                 from /usr/include/boost/filesystem/path.hpp:25,
                 from /usr/include/boost/filesystem.hpp:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/include/rsys/filesystem.h:3,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./file/file.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:37:
/usr/include/c++/8/istream:120:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>]’
       operator>>(__istream_type& (*__pf)(__istream_type&))
       ^~~~~~~~
/usr/include/c++/8/istream:124:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<wchar_t>]’ 
       operator>>(__ios_type& (*__pf)(__ios_type&))
       ^~~~~~~~
/usr/include/c++/8/istream:131:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<wchar_t>]’
       operator>>(ios_base& (*__pf)(ios_base&))
       ^~~~~~~~
/usr/include/c++/8/istream:259:7: note: candidate: ‘std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__streambuf_type*) [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<wchar_t>]’
       operator>>(__streambuf_type* __sb);
       ^~~~~~~~
In file included from /usr/include/boost/type_traits/has_right_shift.hpp:43,
                 from /usr/include/boost/lexical_cast/detail/converter_lexical.hpp:39,
                 from /usr/include/boost/lexical_cast/try_lexical_convert.hpp:42,
                 from /usr/include/boost/lexical_cast.hpp:32,
                 from /usr/include/boost/program_options/value_semantic.hpp:14,
                 from /usr/include/boost/program_options/options_description.hpp:13,
                 from /usr/include/boost/program_options.hpp:15,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./commandline/program_options_extended.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:58:
/usr/include/boost/type_traits/detail/has_binary_operator.hpp:70:13: note: candidate: ‘boost::detail::has_right_shift_impl::no_operator boost::detail::has_right_shift_impl::operator>>(const boost::detail::has_right_shift_impl::any&, const boost::detail::has_right_shift_impl::any&)’
 no_operator operator BOOST_TT_TRAIT_OP (const any&, const any&);
             ^~~~~~~~
In file included from /usr/include/boost/iterator/iterator_categories.hpp:21,
                 from /usr/include/boost/iterator/iterator_facade.hpp:13,
                 from /usr/include/boost/filesystem/path.hpp:28,
                 from /usr/include/boost/filesystem.hpp:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/include/rsys/filesystem.h:3,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/./file/file.h:16,
                 from /export/home/raistlin/rpmbuild/BUILD/executor/src/main.cpp:37:
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp: In instantiation of ‘struct boost::detail::deduce_target_char_impl<boost::detail::deduce_character_type_later<MemorySize> >’:
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:270:89:   required from ‘struct boost::detail::deduce_target_char<MemorySize>’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:407:92:   required from ‘struct boost::detail::lexical_cast_stream_traits<std::__cxx11::basic_string<char>, MemorySize>’
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:468:15:   required from ‘struct boost::detail::lexical_converter_impl<MemorySize, std::__cxx11::basic_string<char> >’
/usr/include/boost/lexical_cast/try_lexical_convert.hpp:196:44:   required from ‘bool boost::conversion::detail::try_lexical_convert(const Source&, Target&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char> ’
/usr/include/boost/lexical_cast.hpp:41:60:   required from ‘Target boost::lexical_cast(const Source&) [with Target = MemorySize; Source = std::__cxx11::basic_string<char>]’
/usr/include/boost/program_options/detail/value_semantic.hpp:92:36:   required from ‘void boost::program_options::validate(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&, T*, long int) [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:184:21:   required from ‘void boost::program_options::typed_value<T, charT>::xparse(boost::any&, const std::vector<std::__cxx11::basic_string<charT> >&) const [with T = MemorySize; charT = char]’
/usr/include/boost/program_options/detail/value_semantic.hpp:174:5:   required from here
/usr/include/boost/lexical_cast/detail/converter_lexical.hpp:243:13: error: ‘value’ is not a member of ‘boost::has_right_shift<std::basic_istream<wchar_t>, MemorySize, boost::detail::has_right_shift_impl::dont_care>’
             BOOST_STATIC_ASSERT_MSG((result_t::value || boost::has_right_shift<std::basic_istream<wchar_t>, T >::value),
             ^~~~~~~~~~~~~~~~~~~~~~~
gmake[2]: *** [src/CMakeFiles/executor-x.dir/build.make:76: src/CMakeFiles/executor-x.dir/main.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:762: src/CMakeFiles/executor-x.dir/all] Error 2
gmake: *** [Makefile:166: all] Error 2

Several Apps don't work (Claris Works 3, MacWrite Pro 1.5)

These Apps work in original Executor without a problem. i copied them on normal file system (%Claris Works 3.0) and wanted to run them from command line like on the original executor 2:

./executor.app/Contents/MacOS/executor -sticky -memory 128M -keyboard Deutsch -system 7 -nobrowser ./Office/MacWrite\ Pro\ 1.5/MacWrite\ Pro

bildschirmfoto 2019-02-13 um 14 09 37

Host: macOS 10.14.1

Couple problems

  • Sound doesn't work, and seems to be disabled.
  • Opening SimpleText, the "Sound" menu is greyed out and disabled. The Cmd-Shift-5 trick to get the preferences doesn't work (to at least try to enable sound support).

Is there a way to hex edit the prefs file to enable it?

X-Wing Collector's CD-ROM segfaults

I'm trying to run X-Wing Collector's CD-ROM with latest Executor 2000 but it is giving me segmentation fault upon execution.

Requirements according to the box:

  • COMPUTER: Apple Macintosh and 100% compatibles.
  • OPERATING SYSTEM: Mac OS 7.1 or higher.
  • CPU: 25Mhz 68040 or PowerPC required. 33Mhz 68040 recommended.
  • GRAPHICS: 256 color 13" or larger display required.
  • MEMORY: 8MB RAM (with 4.5 MB free RAM available.) (5.5 MB free RAM available on PowerPC machines.)
  • CD-ROM DRIVE: Double-speed (2x) or faster required.
  • INPUT DEVICES: Mouse, and joystick suported. Joystick highly recommended.

I've compiled Executor 2000 with Debian GNU/Linux sid with all the bells and whistles detected by "cd build;cmake .." and prefer running "./executor-wayland". I have succesfully mounted the cdrom on startup preparing it with "dd if=/dev/cdrom of=~/.executor/images/X-Wing\ CD.img". I have successfully run some of the LEC demos like The Dig from this volume, but X-Wing gives me a segmentation fault.

I'm skilled in Intel assembler, low level audio programming and a bit of reverse engineering, but new to m68k and PowerPC. How do we (I) proceed?

Support for the Mac version of Warcraft: Orcs & Humans?

A while ago I was playing around with the old releases of Executor for DOS and Windows, and was able to run the demo, and then the full version, of the Macintosh release of Blizzard's Warcraft: Orcs & Humans. This release features revamped high-res graphics and other differences from the original DOS version of that game.

While both the demo and the full version (included in the GOG.com release) do play, there's a huge glitch in that almost no screen is shown in the correct palette (I posted some screenshots here). It seems that the problem is caused by fade-in and fade-out effects which may be based on palette cycling.

Could you please look into this sometime? It would be nice to have full support for the game because of its unique differences from the DOS version, and Executor is AFAIK the only option that allows you to run Mac software without the need for an actual copy of MacOS and the BIOS ROM.

Add support for IPX networking

One of the possible networking solutions used by early Mac games for compatibility with DOS games was IPX. Getting an IPX set up working would be difficult. DOSBox does have support for IPX games by emulating it over TCP.
Perhaps some of the code could be lifted from DOSBox so the IPX-over-IP could also talk with DOSBox games?

Idea to improve rootless mode

It seems like there is some sort of fully transparent window. On systems that draw shadows behind windows this results in an ugly "ghost shadow". Can that transparent window be made fullscreen?

This is the Qt version:

image

Making it fullscreen would also have the advantage that hopefully the Mac menu bar would end up at the real top of the screen.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.