diff --git a/CMakeLists.txt b/CMakeLists.txt
index d8e2cc3056..49b9a5f546 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -108,7 +108,12 @@ enable_testing()
add_subdirectory(app/metashell)
add_subdirectory(app/reference_gen)
+add_subdirectory(app/stub/clang)
+add_subdirectory(app/stub/cl_de)
+add_subdirectory(app/stub/cl_en)
+add_subdirectory(app/stub/gcc)
+add_subdirectory(test/system/auto_engine)
add_subdirectory(test/system/core)
add_subdirectory(test/system/mdb)
add_subdirectory(test/system/pdb)
@@ -124,9 +129,11 @@ add_subdirectory(test/unit/pragma)
add_subdirectory(test/unit/replace_part)
add_subdirectory(test/unit/system_test)
+add_subdirectory(lib/compiler_stub)
add_subdirectory(lib/core)
add_subdirectory(lib/data)
add_subdirectory(lib/defaults)
+add_subdirectory(lib/engine/auto)
add_subdirectory(lib/engine/clang)
add_subdirectory(lib/engine/constant)
add_subdirectory(lib/engine/gcc)
diff --git a/app/metashell/main.cpp b/app/metashell/main.cpp
index acc91aad8a..17f858543f 100644
--- a/app/metashell/main.cpp
+++ b/app/metashell/main.cpp
@@ -135,8 +135,8 @@ int main(int argc_, const char* argv_[])
else
{
return eentry->second.build(config_, shell_dir, temp_dir,
- env_filename, det, ccfg.displayer(),
- &logger);
+ env_filename, engines, det,
+ ccfg.displayer(), &logger);
}
},
metashell::defaults::pragma_map(
diff --git a/app/stub/cl_de/CMakeLists.txt b/app/stub/cl_de/CMakeLists.txt
new file mode 100644
index 0000000000..f4990ad3fc
--- /dev/null
+++ b/app/stub/cl_de/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Metashell - Interactive C++ template metaprogramming shell
+# Copyright (C) 2019, Abel Sinkovics (abel@sinkovics.hu)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+project(app_stub_cl_de)
+
+aux_source_directory(. SOURCES)
+add_executable(${PROJECT_NAME} ${SOURCES})
+
+enable_warnings(${PROJECT_NAME})
+
+target_link_libraries(
+ ${PROJECT_NAME}
+
+ metashell::compiler_stub
+)
diff --git a/app/stub/cl_de/main.cpp b/app/stub/cl_de/main.cpp
new file mode 100644
index 0000000000..63ee6a998e
--- /dev/null
+++ b/app/stub/cl_de/main.cpp
@@ -0,0 +1,39 @@
+// Metashell - Interactive C++ template metaprogramming shell
+// Copyright (C) 2019, Abel Sinkovics (abel@sinkovics.hu)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+#include
+
+using namespace metashell;
+
+int main(int argc_, const char* argv_[])
+{
+ compiler_stub::cl_stub compiler(
+ "Microsoft (R) C/C++-Optimierungscompiler Version 19.16.27025.1 "
+ "f\xc3\xbcr x86\n"
+ "Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.\n"
+ "\n",
+
+ "Syntax: cl [ Option... ] Dateiname... [ /link Linkeroption... ]\n\n",
+
+ [](const std::string& option_) {
+ return "cl : Befehlszeile warning D9002 : Unbekannte Option \"" +
+ option_ +
+ "\" wird ignoriert.\n"
+ "cl : Befehlszeile error D8003 : Name der Quelldatei fehlt.\n";
+ });
+
+ return compiler.run(argc_, argv_).value();
+}
diff --git a/app/stub/cl_en/CMakeLists.txt b/app/stub/cl_en/CMakeLists.txt
new file mode 100644
index 0000000000..3876eb01f3
--- /dev/null
+++ b/app/stub/cl_en/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Metashell - Interactive C++ template metaprogramming shell
+# Copyright (C) 2019, Abel Sinkovics (abel@sinkovics.hu)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+project(app_stub_cl_en)
+
+aux_source_directory(. SOURCES)
+add_executable(${PROJECT_NAME} ${SOURCES})
+
+enable_warnings(${PROJECT_NAME})
+
+target_link_libraries(
+ ${PROJECT_NAME}
+
+ metashell::compiler_stub
+)
diff --git a/app/stub/cl_en/main.cpp b/app/stub/cl_en/main.cpp
new file mode 100644
index 0000000000..dc6d96557f
--- /dev/null
+++ b/app/stub/cl_en/main.cpp
@@ -0,0 +1,38 @@
+// Metashell - Interactive C++ template metaprogramming shell
+// Copyright (C) 2019, Abel Sinkovics (abel@sinkovics.hu)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+#include
+
+using namespace metashell;
+
+int main(int argc_, const char* argv_[])
+{
+ compiler_stub::cl_stub compiler(
+ "Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27025.1 for x86\n"
+ "Copyright (C) Microsoft Corporation. All rights reserved.\n"
+ "\n",
+
+ "usage: cl [ option... ] filename... [ /link linkoption... ]\n",
+
+ [](const std::string& option_) {
+ return "cl : Command line warning D9002 : ignoring unknown option '" +
+ option_ +
+ "'\n"
+ "cl : Command line error D8003 : missing source filename\n";
+ });
+
+ return compiler.run(argc_, argv_).value();
+}
diff --git a/app/stub/clang/CMakeLists.txt b/app/stub/clang/CMakeLists.txt
new file mode 100644
index 0000000000..816a53e1e1
--- /dev/null
+++ b/app/stub/clang/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Metashell - Interactive C++ template metaprogramming shell
+# Copyright (C) 2019, Abel Sinkovics (abel@sinkovics.hu)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+project(app_stub_clang)
+
+aux_source_directory(. SOURCES)
+add_executable(${PROJECT_NAME} ${SOURCES})
+
+enable_warnings(${PROJECT_NAME})
+
+target_link_libraries(
+ ${PROJECT_NAME}
+
+ metashell::compiler_stub
+)
diff --git a/app/stub/clang/main.cpp b/app/stub/clang/main.cpp
new file mode 100644
index 0000000000..2d79899b1c
--- /dev/null
+++ b/app/stub/clang/main.cpp
@@ -0,0 +1,479 @@
+// Metashell - Interactive C++ template metaprogramming shell
+// Copyright (C) 2019, Abel Sinkovics (abel@sinkovics.hu)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+#include
+
+using namespace metashell;
+
+int main(int argc_, const char* argv_[])
+{
+ compiler_stub::stub compiler;
+
+ compiler.on_args(
+ {}, {data::exit_code_t(1), "", "clang: error: no input files\n"});
+
+ compiler.on_args(
+ {"-v"}, {data::exit_code_t(0), "",
+ R"EOS(clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
+Target: x86_64-pc-linux-gnu
+Thread model: posix
+InstalledDir: /usr/bin
+Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
+Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0
+Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.0
+Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.0.0
+Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
+Candidate multilib: .;@m64
+Selected multilib: .;@m64
+)EOS"});
+
+ compiler.on_args(
+ {"--help"}, {data::exit_code_t(0), R"EOS(OVERVIEW: clang LLVM compiler
+
+USAGE: clang [options]
+
+OPTIONS:
+ -### Print (but do not run) the commands to run for this compilation
+ --analyze Run the static analyzer
+ -arcmt-migrate-emit-errors
+ Emit ARC errors even if the migrator can fix them
+ -arcmt-migrate-report-output
+ Output path for the plist report
+ --cuda-device-only Do device-side CUDA compilation only
+ --cuda-host-only Do host-side CUDA compilation only
+ --cuda-path= CUDA installation path
+ -cxx-isystem
+ Add directory to the C++ SYSTEM include search path
+ -c Only run preprocess, compile, and assemble steps
+ -dD Print macro definitions in -E mode in addition to normal output
+ -dependency-dot Filename to write DOT-formatted header dependencies to
+ -dependency-file
+ Filename (or -) to write dependency output to
+ -dM Print macro definitions in -E mode instead of normal output
+ -emit-ast Emit Clang AST files for source inputs
+ -emit-llvm Use the LLVM representation for assembler and object files
+ -E Only run the preprocessor
+ -faltivec Enable AltiVec vector initializer syntax
+ -fansi-escape-codes Use ANSI escape codes for diagnostics
+ -fapple-kext Use Apple's kernel extensions ABI
+ -fapple-pragma-pack Enable Apple gcc-compatible #pragma pack handling
+ -fapplication-extension Restrict code to those available for App Extensions
+ -fblocks Enable the 'blocks' language feature
+ -fborland-extensions Accept non-standard constructs supported by the Borland compiler
+ -fbuild-session-file=
+ Use the last modification time of as the build session timestamp
+ -fbuild-session-timestamp=
+ Time when the current build session started
+ -fcolor-diagnostics Use colors in diagnostics
+ -fcomment-block-commands=
+ Treat each comma separated argument in as a documentation comment block command
+ -fcoverage-mapping Generate coverage mapping to enable code coverage analysis
+ -fcxx-exceptions Enable C++ exceptions)EOS"
+ R"EOS(
+ -fdata-sections Place each data in its own section (ELF Only)
+ -fdebug-prefix-map=
+ remap file source paths in debug info
+ -fdebug-types-section Place debug types in their own section (ELF Only)
+ -fdeclspec Allow __declspec as a keyword
+ -fdelayed-template-parsing
+ Parse templated function definitions at the end of the translation unit
+ -fdiagnostics-parseable-fixits
+ Print fix-its in machine parseable form
+ -fdiagnostics-print-source-range-info
+ Print source range spans in numeric form
+ -fdiagnostics-show-note-include-stack
+ Display include stacks for diagnostic notes
+ -fdiagnostics-show-option
+ Print option name with mappable diagnostics
+ -fdiagnostics-show-template-tree
+ Print a template comparison tree for differing templates
+ -fdollars-in-identifiers
+ Allow '$' in identifiers
+ -femit-all-decls Emit all declarations, even if unused
+ -femulated-tls Use emutls functions to access thread_local variables
+ -fexceptions Enable support for exception handling
+ -ffast-math Enable the *frontend*'s 'fast-math' mode. This has no effect on optimizations, but provides a preprocessor macro __FAST_MATH__ the same as GCC's -ffast-math flag
+ -ffixed-r9 Reserve the r9 register (ARM only)
+ -ffixed-x18 Reserve the x18 register (AArch64 only)
+ -ffp-contract= Form fused FP ops (e.g. FMAs): fast (everywhere) | on (according to FP_CONTRACT pragma, default) | off (never fuse)
+ -ffreestanding Assert that the compilation takes place in a freestanding environment
+ -ffunction-sections Place each function in its own section (ELF Only)
+ -fgnu-keywords Allow GNU-extension keywords regardless of language standard
+ -fgnu-runtime Generate output compatible with the standard GNU Objective-C runtime
+ -fgnu89-inline Use the gnu89 inline semantics
+ -fimplicit-module-maps Implicitly search the file system for module map files.
+ -finstrument-functions Generate calls to instrument function entry and exit
+ -fintegrated-as Enable the integrated assembler
+ -flto= Set LTO mode to either 'full' or 'thin'
+ -flto Enable LTO in 'full' mode
+ -fmath-errno Require math functions to indicate errors by setting errno
+ -fmax-type-align=
+ Specify the maximum alignment to enforce on pointers lacking an explicit alignment
+ -fmodule-file= Load this precompiled module file)EOS"
+ R"EOS(
+ -fmodule-map-file=
+ Load this module map file
+ -fmodule-name= Specify the name of the module to build
+ -fmodules-cache-path=
+ Specify the module cache path
+ -fmodules-decluse Require declaration of modules used within a module
+ -fmodules-ignore-macro=
+ Ignore the definition of the given macro when building and loading modules
+ -fmodules-prune-after=
+ Specify the interval (in seconds) after which a module file will be considered unused
+ -fmodules-prune-interval=
+ Specify the interval (in seconds) between attempts to prune the module cache
+ -fmodules-search-all Search even non-imported modules to resolve references
+ -fmodules-strict-decluse
+ Like -fmodules-decluse but requires all headers to be in modules
+ -fmodules-user-build-path
+ Specify the module user build path
+ -fmodules-validate-once-per-build-session
+ Don't verify input files for the modules if the module has been successfully validated or loaded during this build session
+ -fmodules-validate-system-headers
+ Validate the system headers that a module depends on when loading the module
+ -fmodules Enable the 'modules' language feature
+ -fms-compatibility-version=
+ Dot-separated value representing the Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))
+ -fms-compatibility Enable full Microsoft Visual C++ compatibility
+ -fms-extensions Accept some non-standard constructs supported by the Microsoft compiler
+ -fmsc-version= Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))
+ -fno-access-control Disable C++ access control
+ -fno-assume-sane-operator-new
+ Don't assume that C++'s global operator new can't alias any pointer
+ -fno-autolink Disable generation of linker directives for automatic library linking
+ -fno-builtin- Disable implicit builtin knowledge of a specific function
+ -fno-builtin Disable implicit builtin knowledge of functions
+ -fno-common Compile common globals like normal definitions
+ -fno-constant-cfstrings Disable creation of CodeFoundation-type constant strings
+ -fno-coverage-mapping Disable code coverage analysis
+ -fno-declspec Disallow __declspec as a keyword
+ -fno-diagnostics-fixit-info
+ Do not include fixit information in diagnostics
+ -fno-dollars-in-identifiers)EOS"
+ R"EOS(
+ Disallow '$' in identifiers
+ -fno-elide-constructors Disable C++ copy constructor elision
+ -fno-elide-type Do not elide types when printing diagnostics
+ -fno-gnu-inline-asm Disable GNU style inline asm
+ -fno-integrated-as Disable the integrated assembler
+ -fno-lax-vector-conversions
+ Disallow implicit conversions between vectors with a different number of elements or different element types
+ -fno-lto Disable LTO mode (default)
+ -fno-math-builtin Disable implicit builtin knowledge of math functions
+ -fno-merge-all-constants
+ Disallow merging of constants
+ -fno-objc-infer-related-result-type
+ do not infer Objective-C related result type based on method family
+ -fno-operator-names Do not treat C++ operator name keywords as synonyms for operators
+ -fno-profile-instr-generate
+ Disable generation of profile instrumentation.
+ -fno-profile-instr-use Disable using instrumentation data for profile-guided optimization
+ -fno-reroll-loops Turn off loop reroller
+ -fno-rtti Disable generation of rtti information
+ -fno-sanitize-blacklist Don't use blacklist file for sanitizers
+ -fno-sanitize-cfi-cross-dso
+ Disable control flow integrity (CFI) checks for cross-DSO calls.
+ -fno-sanitize-coverage=
+ Disable specified features of coverage instrumentation for Sanitizers
+ -fno-sanitize-memory-track-origins
+ Disable origins tracking in MemorySanitizer
+ -fno-sanitize-recover=
+ Disable recovery for specified sanitizers
+ -fno-sanitize-trap=
+ Disable trapping for specified sanitizers
+ -fno-short-wchar Force wchar_t to be an unsigned int
+ -fno-show-column Do not include column number on diagnostics
+ -fno-show-source-location
+ Do not include source location information with diagnostics
+ -fno-signed-char Char is unsigned
+ -fno-signed-zeros Allow optimizations that ignore the sign of floating point zeros
+ -fno-spell-checking Disable spell-checking
+ -fno-stack-protector Disable the use of stack protectors
+ -fno-standalone-debug Limit debug information produced to reduce size of debug binary
+ -fno-threadsafe-statics Do not emit code to make initialization of local statics thread safe)EOS"
+ R"EOS(
+ -fno-trigraphs Do not process trigraph sequences
+ -fno-unroll-loops Turn off loop unroller
+ -fno-use-cxa-atexit Don't use __cxa_atexit for calling destructors
+ -fno-use-init-array Don't use .init_array instead of .ctors
+ -fobjc-arc-exceptions Use EH-safe code when synthesizing retains and releases in -fobjc-arc
+ -fobjc-arc Synthesize retain and release calls for Objective-C pointers
+ -fobjc-exceptions Enable Objective-C exceptions
+ -fobjc-gc-only Use GC exclusively for Objective-C related memory management
+ -fobjc-gc Enable Objective-C garbage collection
+ -fobjc-runtime= Specify the target Objective-C runtime kind and version
+ -fobjc-weak Enable ARC-style weak references in Objective-C
+ -fpack-struct= Specify the default maximum struct packing alignment
+ -fpascal-strings Recognize and construct Pascal-style string literals
+ -fpcc-struct-return Override the default ABI to return all structs on the stack
+ -fplugin= Load the named plugin (dynamic shared object)
+ -fprofile-generate=
+ Generate instrumented code to collect execution counts into /default.profraw (overridden by LLVM_PROFILE_FILE env var)
+ -fprofile-instr-generate=
+ Generate instrumented code to collect execution counts into (overridden by LLVM_PROFILE_FILE env var)
+ -fprofile-instr-generate
+ Generate instrumented code to collect execution counts into default.profraw file (overriden by '=' form of option or LLVM_PROFILE_FILE env var)
+ -fprofile-instr-use=
+ Use instrumentation data for profile-guided optimization
+ -fprofile-sample-use=
+ Enable sample-based profile guided optimizations
+ -fprofile-use=
+ Use instrumentation data for profile-guided optimization. If pathname is a directory, it reads from /default.profdata. Otherwise, it reads from file .
+ -freciprocal-math Allow division operations to be reassociated
+ -freg-struct-return Override the default ABI to return small structs in registers
+ -freroll-loops Turn on loop reroller
+ -fsanitize-address-field-padding=
+ Level of field padding for AddressSanitizer
+ -fsanitize-blacklist=
+ Path to blacklist file for sanitizers
+ -fsanitize-cfi-cross-dso
+ Enable control flow integrity (CFI) checks for cross-DSO calls.
+ -fsanitize-coverage=
+ Specify the type of coverage instrumentation for Sanitizers
+ -fsanitize-memory-track-origins=
+ Enable origins tracking in MemorySanitizer)EOS"
+ R"EOS(
+ -fsanitize-memory-track-origins
+ Enable origins tracking in MemorySanitizer
+ -fsanitize-memory-use-after-dtor
+ Enable use-after-destroy detection in MemorySanitizer
+ -fsanitize-recover=
+ Enable recovery for specified sanitizers
+ -fsanitize-trap= Enable trapping for specified sanitizers
+ -fsanitize= Turn on runtime checks for various forms of undefined or suspicious behavior. See user manual for available checks
+ -fshort-enums Allocate to an enum type only as many bytes as it needs for the declared range of possible values
+ -fshort-wchar Force wchar_t to be a short unsigned int
+ -fshow-overloads=
+ Which overload candidates to show when overload resolution fails: best|all; defaults to all
+ -fsized-deallocation Enable C++14 sized global deallocation functions
+ -fslp-vectorize-aggressive
+ Enable the BB vectorization passes
+ -fslp-vectorize Enable the superword-level parallelism vectorization passes
+ -fstack-protector-all Force the usage of stack protectors for all functions
+ -fstack-protector-strong
+ Use a strong heuristic to apply stack protectors to functions
+ -fstack-protector Enable stack protectors for functions potentially vulnerable to stack smashing
+ -fstandalone-debug Emit full debug info for all types used by the program
+ -fstrict-enums Enable optimizations based on the strict definition of an enum's value range
+ -fstrict-vtable-pointers
+ Enable optimizations based on the strict rules for overwriting polymorphic C++ objects
+ -fthinlto-index= Perform ThinLTO importing using provided function summary index
+ -ftrap-function= Issue call to specified function rather than a trap instruction
+ -ftrapv-handler=
+ Specify the function to be called on overflow
+ -ftrapv Trap on integer overflow
+ -ftrigraphs Process trigraph sequences
+ -funique-section-names Use unique names for text and data sections (ELF Only)
+ -funroll-loops Turn on loop unroller
+ -fuse-init-array Use .init_array instead of .ctors
+ -fveclib= Use the given vector functions library
+ -fvectorize Enable the loop vectorization passes
+ -fvisibility-inlines-hidden
+ Give inline C++ member functions default visibility by default
+ -fvisibility-ms-compat Give global types 'default' visibility and global functions and variables 'hidden' visibility by default
+ -fvisibility= Set the default symbol visibility for all global declarations
+ -fwrapv Treat signed integer overflow as two's complement)EOS"
+ R"EOS(
+ -fwritable-strings Store string literals as writable data
+ -fzvector Enable System z vector language extension
+ -F Add directory to framework include search path
+ --gcc-toolchain= Use the gcc toolchain at the given directory
+ -gcodeview Generate CodeView debug information
+ -gdwarf-2 Generate source-level debug information with dwarf version 2
+ -gdwarf-3 Generate source-level debug information with dwarf version 3
+ -gdwarf-4 Generate source-level debug information with dwarf version 4
+ -gdwarf-5 Generate source-level debug information with dwarf version 5
+ -gline-tables-only Emit debug line number tables only
+ -gmodules Generate debug info with external references to clang modules or precompiled headers
+ -g Generate source-level debug information
+ -help Display available options
+ -H Show header includes and nesting depth
+ -idirafter Add directory to AFTER include search path
+ -iframework Add directory to SYSTEM framework search path
+ -imacros Include macros from file before parsing
+ -include-pch Include precompiled header file
+ -include Include file before parsing
+ -index-header-map Make the next included directory (-I or -F) an indexer header map
+ -iprefix Set the -iwithprefix/-iwithprefixbefore prefix
+ -iquote Add directory to QUOTE include search path
+ -isysroot Set the system root directory (usually /)
+ -isystem Add directory to SYSTEM include search path
+ -ivfsoverlay Overlay the virtual filesystem described by file over the real file system
+ -iwithprefixbefore
+ Set directory to include search path with prefix
+ -iwithprefix Set directory to SYSTEM include search path with prefix
+ -iwithsysroot
+ Add directory to SYSTEM include search path, absolute paths are relative to -isysroot
+ -I Add directory to include search path
+ -mabicalls Enable SVR4-style position-independent code (Mips only)
+ -mcrc Allow use of CRC instructions (ARM only)
+ -MD Write a depfile containing user and system headers
+ -meabi Set EABI type, e.g. 4, 5 or gnu (default depends on triple)
+ -mfix-cortex-a53-835769 Workaround Cortex-A53 erratum 835769 (AArch64 only)
+ -mfp32 Use 32-bit floating point registers (MIPS only)
+ -mfp64 Use 64-bit floating point registers (MIPS only)
+ -MF Write depfile output from -MMD, -MD, -MM, or -M to
+ -mgeneral-regs-only Generate code which only uses the general purpose registers (AArch64 only))EOS"
+ R"EOS(
+ -mglobal-merge Enable merging of globals
+ -MG Add missing headers to depfile
+ -mhvx-double Enable Hexagon Double Vector eXtensions
+ -mhvx Enable Hexagon Vector eXtensions
+ --migrate Run the migrator
+ -mincremental-linker-compatible
+ (integrated-as) Emit an object file which can be used with an incremental linker
+ -mios-version-min=
+ Set iOS deployment target
+ -mllvm Additional arguments to forward to LLVM's option processing
+ -mlong-calls Generate an indirect jump to enable jumps further than 64M
+ -mmacosx-version-min=
+ Set Mac OS X deployment target
+ -MMD Write a depfile containing user headers
+ -mms-bitfields Set the default structure layout to be compatible with the Microsoft compiler standard
+ -mmsa Enable MSA ASE (MIPS only)
+ -MM Like -MMD, but also implies -E and writes to stdout by default
+ -mno-abicalls Disable SVR4-style position-independent code (Mips only)
+ -mno-fix-cortex-a53-835769
+ Don't workaround Cortex-A53 erratum 835769 (AArch64 only)
+ -mno-global-merge Disable merging of globals
+ -mno-hvx-double Disable Hexagon Double Vector eXtensions
+ -mno-hvx Disable Hexagon Vector eXtensions
+ -mno-implicit-float Don't generate implicit floating point instructions
+ -mno-incremental-linker-compatible
+ (integrated-as) Emit an object file which cannot be used with an incremental linker
+ -mno-long-calls Restore the default behaviour of not generating long calls
+ -mno-movt Disallow use of movt/movw pairs (ARM only)
+ -mno-ms-bitfields Do not set the default structure layout to be compatible with the Microsoft compiler standard
+ -mno-msa Disable MSA ASE (MIPS only)
+ -mno-restrict-it Allow generation of deprecated IT blocks for ARMv8. It is off by default for ARMv8 Thumb mode
+ -mno-unaligned-access Force all memory accesses to be aligned (AArch32/AArch64 only)
+ -mnocrc Disallow use of CRC instructions (ARM only)
+ -module-dependency-dir
+ Directory to dump module dependencies to
+ -momit-leaf-frame-pointer
+ Omit frame pointer setup for leaf functions
+ -MP Create phony target for each dependency (other than main file)
+ -mqdsp6-compat Enable hexagon-qdsp6 backward compatibility
+ -MQ Specify name of main file output to quote in depfile)EOS"
+ R"EOS(
+ -mrelax-all (integrated-as) Relax all machine instructions
+ -mrestrict-it Disallow generation of deprecated IT blocks for ARMv8. It is on by default for ARMv8 Thumb mode.
+ -mrtd Make StdCall calling convention the default
+ -msoft-float Use software floating point
+ -mstack-alignment=
+ Set the stack alignment
+ -mstack-probe-size=
+ Set the stack probe size
+ -mstackrealign Force realign the stack at entry to every function
+ -mthread-model The thread model to use, e.g. posix, single (posix by default)
+ -MT Specify name of main file output in depfile
+ -munaligned-access Allow memory accesses to be unaligned (AArch32/AArch64 only)
+ -MV Use NMake/Jom format for the depfile
+ -M Like -MD, but also implies -E and writes to stdout by default
+ --no-system-header-prefix=
+ Treat all #include paths starting with as not including a system header.
+ -nobuiltininc Disable builtin #include directories
+ -nostdinc++ Disable standard #include directories for the C++ standard library
+ -ObjC++ Treat source input files as Objective-C++ inputs
+ -objcmt-atomic-property Make migration to 'atomic' properties
+ -objcmt-migrate-all Enable migration to modern ObjC
+ -objcmt-migrate-annotation
+ Enable migration to property and method annotations
+ -objcmt-migrate-designated-init
+ Enable migration to infer NS_DESIGNATED_INITIALIZER for initializer methods
+ -objcmt-migrate-instancetype
+ Enable migration to infer instancetype for method result type
+ -objcmt-migrate-literals
+ Enable migration to modern ObjC literals
+ -objcmt-migrate-ns-macros
+ Enable migration to NS_ENUM/NS_OPTIONS macros
+ -objcmt-migrate-property-dot-syntax
+ Enable migration of setter/getter messages to property-dot syntax
+ -objcmt-migrate-property
+ Enable migration to modern ObjC property
+ -objcmt-migrate-protocol-conformance
+ Enable migration to add protocol conformance on classes
+ -objcmt-migrate-readonly-property
+ Enable migration to modern ObjC readonly property
+ -objcmt-migrate-readwrite-property)EOS"
+ R"EOS(
+ Enable migration to modern ObjC readwrite property
+ -objcmt-migrate-subscripting
+ Enable migration to modern ObjC subscripting
+ -objcmt-ns-nonatomic-iosonly
+ Enable migration to use NS_NONATOMIC_IOSONLY macro for setting property's 'atomic' attribute
+ -objcmt-returns-innerpointer-property
+ Enable migration to annotate property with NS_RETURNS_INNER_POINTER
+ -objcmt-whitelist-dir-path=
+ Only modify files with a filename contained in the provided directory path
+ -ObjC Treat source input files as Objective-C inputs
+ -omptargets= Specify comma-separated list of triples OpenMP offloading targets to be supported
+ -o Write output to
+ -pg Enable mcount instrumentation
+ -pipe Use pipes between commands, when possible
+ -print-file-name= Print the full library path of
+ -print-ivar-layout Enable Objective-C Ivar layout bitmap print trace
+ -print-libgcc-file-name Print the library path for "libgcc.a"
+ -print-prog-name= Print the full program path of
+ -print-search-dirs Print the paths used for finding libraries and programs
+ -pthread Support POSIX threads in generated code
+ -P Disable linemarker output in -E mode
+ -Qunused-arguments Don't emit warning for unused driver arguments
+ -relocatable-pch Whether to build a relocatable precompiled header
+ -rewrite-legacy-objc Rewrite Legacy Objective-C source to C++
+ -rewrite-objc Rewrite Objective-C source to C++
+ -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression
+ -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression
+ -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression
+ -R Enable the specified remark
+ -save-temps= Save intermediate compilation results.
+ -save-temps Save intermediate compilation results
+ -serialize-diagnostics
+ Serialize compiler diagnostics to a file
+ -std= Language standard to compile for
+ -stdlib= C++ standard library to use
+ --system-header-prefix=
+ Treat all #include paths starting with as including a system header.
+ -S Only run preprocess and compilation steps
+ --target= Generate code for the given target
+ -time Time individual commands)EOS"
+ R"EOS(
+ -traditional-cpp Enable some traditional CPP emulation
+ -trigraphs Process trigraph sequences
+ -undef undef all system defines
+ --verify-debug-info Verify the binary representation of debug output
+ -verify-pch Load and verify that a pre-compiled header file is not stale
+ -v Show commands to run and use verbose output
+ -Wa, Pass the comma separated arguments in to the assembler
+ -Wl, Pass the comma separated arguments in to the linker
+ -working-directory
+ Resolve file paths relative to the specified directory
+ -Wp, Pass the comma separated arguments in to the preprocessor
+ -W Enable the specified warning
+ -w Suppress all warnings
+ -Xanalyzer Pass to the static analyzer
+ -Xassembler Pass to the assembler
+ -Xclang Pass to the clang compiler
+ -Xlinker Pass to the linker
+ -Xpreprocessor Pass to the preprocessor
+ -x Treat subsequent input files as having type
+ -z Pass -z to the linker
+)EOS",
+ ""});
+
+ return compiler.run(argc_, argv_).value();
+}
diff --git a/app/stub/gcc/CMakeLists.txt b/app/stub/gcc/CMakeLists.txt
new file mode 100644
index 0000000000..77019885ad
--- /dev/null
+++ b/app/stub/gcc/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Metashell - Interactive C++ template metaprogramming shell
+# Copyright (C) 2019, Abel Sinkovics (abel@sinkovics.hu)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+project(app_stub_gcc)
+
+aux_source_directory(. SOURCES)
+add_executable(${PROJECT_NAME} ${SOURCES})
+
+enable_warnings(${PROJECT_NAME})
+
+target_link_libraries(
+ ${PROJECT_NAME}
+
+ metashell::compiler_stub
+)
diff --git a/app/stub/gcc/main.cpp b/app/stub/gcc/main.cpp
new file mode 100644
index 0000000000..31e8937f73
--- /dev/null
+++ b/app/stub/gcc/main.cpp
@@ -0,0 +1,104 @@
+// Metashell - Interactive C++ template metaprogramming shell
+// Copyright (C) 2019, Abel Sinkovics (abel@sinkovics.hu)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+#include
+
+using namespace metashell;
+
+int main(int argc_, const char* argv_[])
+{
+ compiler_stub::stub compiler;
+
+ compiler.on_args(
+ {}, {data::exit_code_t(1), "",
+ "gcc: fatal error: no input files\ncompilation terminated.\n"});
+
+ compiler.on_args({"-v"}, {data::exit_code_t(1), "",
+ R"EOS(Using built-in specs.
+COLLECT_GCC=gcc
+COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.11' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
+Thread model: posix
+gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11)
+)EOS"});
+
+ compiler.on_args({"--help"}, {data::exit_code_t(0),
+ R"EOS(Usage: gcc [options] file...
+Options:
+ -pass-exit-codes Exit with highest error code from a phase
+ --help Display this information
+ --target-help Display target specific command line options
+ --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]
+ Display specific types of command line options
+ (Use '-v --help' to display command line options of sub-processes)
+ --version Display compiler version information
+ -dumpspecs Display all of the built in spec strings
+ -dumpversion Display the version of the compiler
+ -dumpmachine Display the compiler's target processor
+ -print-search-dirs Display the directories in the compiler's search path
+ -print-libgcc-file-name Display the name of the compiler's companion library
+ -print-file-name= Display the full path to library
+ -print-prog-name= Display the full path to compiler component
+ -print-multiarch Display the target's normalized GNU triplet, used as
+ a component in the library path
+ -print-multi-directory Display the root directory for versions of libgcc
+ -print-multi-lib Display the mapping between command line options and
+ multiple library search directories
+ -print-multi-os-directory Display the relative path to OS libraries
+ -print-sysroot Display the target libraries directory
+ -print-sysroot-headers-suffix Display the sysroot suffix used to find headers
+ -Wa, Pass comma-separated on to the assembler
+ -Wp, Pass comma-separated on to the preprocessor
+ -Wl, Pass comma-separated on to the linker
+ -Xassembler Pass on to the assembler
+ -Xpreprocessor Pass on to the preprocessor
+ -Xlinker Pass on to the linker
+ -save-temps Do not delete intermediate files
+ -save-temps= Do not delete intermediate files
+ -no-canonical-prefixes Do not canonicalize paths when building relative
+ prefixes to other gcc components
+ -pipe Use pipes rather than intermediate files
+ -time Time the execution of each subprocess
+ -specs= Override built-in specs with the contents of
+ -std= Assume that the input sources are for
+ --sysroot= Use as the root directory for headers
+ and libraries
+ -B Add to the compiler's search paths
+ -v Display the programs invoked by the compiler
+ -### Like -v but options quoted and commands not executed
+ -E Preprocess only; do not compile, assemble or link
+ -S Compile only; do not assemble or link
+ -c Compile and assemble, but do not link
+ -o Place the output into
+ -pie Create a position independent executable
+ -shared Create a shared library
+ -x Specify the language of the following input files
+ Permissible languages include: c c++ assembler none
+ 'none' means revert to the default behavior of
+ guessing the language based on the file's extension
+
+Options starting with -g, -f, -m, -O, -W, or --param are automatically
+ passed on to the various sub-processes invoked by gcc. In order to pass
+ other options on to these processes the -W options must be used.
+
+For bug reporting instructions, please see:
+.
+)EOS",
+ ""});
+
+ return compiler.run(argc_, argv_).value();
+}
diff --git a/cmake/Modules/MetashellSystemTest.cmake b/cmake/Modules/MetashellSystemTest.cmake
index d4f07daec3..0b24a5f666 100644
--- a/cmake/Modules/MetashellSystemTest.cmake
+++ b/cmake/Modules/MetashellSystemTest.cmake
@@ -14,9 +14,18 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
+function(templight_path OUT_VAR)
+ if (WIN32)
+ set(${OUT_VAR} templight/templight.exe PARENT_SCOPE)
+ else()
+ set(${OUT_VAR} templight_metashell PARENT_SCOPE)
+ endif()
+endfunction()
+
function(register_system_test TEST_TARGET_NAME)
+ templight_path(TEMPLIGHT_PATH)
+
if (WIN32)
- set(TEMPLIGHT_PATH templight/templight.exe)
set(
CLANG_FLAGS
-fno-ms-compatibility
@@ -26,7 +35,6 @@ function(register_system_test TEST_TARGET_NAME)
"-I$/templight/include"
)
else()
- set(TEMPLIGHT_PATH templight_metashell)
if (APPLE)
set(
CLANG_FLAGS
@@ -52,6 +60,17 @@ function(register_system_test TEST_TARGET_NAME)
--
)
+ add_test(
+ NAME ${TEST_TARGET_NAME}_auto_internal_templight
+ COMMAND
+ ${TEST_TARGET_NAME} "$" --engine auto --
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/config/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/mpl/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/preprocessor/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/type_traits/include"
+ --
+ )
+
add_test(
NAME ${TEST_TARGET_NAME}_templight
COMMAND
@@ -68,6 +87,22 @@ function(register_system_test TEST_TARGET_NAME)
--
)
+ add_test(
+ NAME ${TEST_TARGET_NAME}_auto_templight
+ COMMAND
+ ${TEST_TARGET_NAME} "$" --engine auto --
+ "$/${TEMPLIGHT_PATH}"
+ -std=c++0x
+ -ftemplate-depth=256
+ -Wfatal-errors
+ ${CLANG_FLAGS}
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/config/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/mpl/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/preprocessor/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/type_traits/include"
+ --
+ )
+
add_test(
NAME ${TEST_TARGET_NAME}_clang
COMMAND
@@ -83,6 +118,22 @@ function(register_system_test TEST_TARGET_NAME)
"-I${CMAKE_SOURCE_DIR}/3rd/boost/type_traits/include"
--
)
+
+ add_test(
+ NAME ${TEST_TARGET_NAME}_auto_clang
+ COMMAND
+ ${TEST_TARGET_NAME} "$" --engine auto --
+ "$/${TEMPLIGHT_PATH}"
+ -std=c++0x
+ -ftemplate-depth=256
+ -Wfatal-errors
+ ${CLANG_FLAGS}
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/config/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/mpl/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/preprocessor/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/type_traits/include"
+ --
+ )
endfunction()
function(register_gcc_system_test TEST_TARGET_NAME)
@@ -100,6 +151,19 @@ function(register_gcc_system_test TEST_TARGET_NAME)
"-I${CMAKE_SOURCE_DIR}/3rd/boost/type_traits/include"
--
)
+
+ add_test(
+ NAME ${TEST_TARGET_NAME}_auto_gcc
+ COMMAND
+ ${TEST_TARGET_NAME} "$" --engine auto --
+ "${GXX_BINARY}"
+ -std=c++0x
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/config/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/mpl/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/preprocessor/include"
+ "-I${CMAKE_SOURCE_DIR}/3rd/boost/type_traits/include"
+ --
+ )
else()
message(WARNING "Skipping gcc system test (g++ exectuable not found)")
endif()
@@ -122,6 +186,19 @@ function(register_msvc_system_test TEST_TARGET_NAME)
"/EHsc"
--
)
+
+ add_test(
+ NAME ${TEST_TARGET_NAME}_auto_msvc
+ COMMAND
+ ${TEST_TARGET_NAME} "$" --engine auto --
+ "\"${MSVC_CL_BINARY}\""
+ "\"/I${CMAKE_SOURCE_DIR}\\3rd\\boost\\config\\include\""
+ "\"/I${CMAKE_SOURCE_DIR}\\3rd\\boost\\mpl\\include\""
+ "\"/I${CMAKE_SOURCE_DIR}\\3rd\\boost\\preprocessor\\include\""
+ "\"/I${CMAKE_SOURCE_DIR}\\3rd\\boost\\type_traits\\include\""
+ "/EHsc"
+ --
+ )
else()
message(WARNING "Skipping Visual C++ system test (cl.exe not found)")
endif()
diff --git a/docs/about/changelog.md b/docs/about/changelog.md
index 6568b790fa..8d54ddb448 100644
--- a/docs/about/changelog.md
+++ b/docs/about/changelog.md
@@ -2,12 +2,17 @@
## Not in any release yet
+* New features
+ * New engine: `auto`. It chooses the engine to use based on the compiler
+ specified in the engine arguments.
+
* Changes to existing behaviour
* **Breaking change** Regular expression syntax for breakpoints changes
from
[Perl syntax](https://www.boost.org/doc/libs/1_68_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html)
to
[ECMAScript](https://en.cppreference.com/w/cpp/regex/ecmascript).
+ * The default engine is `auto`.
## Version 4.0.0
diff --git a/docs/img/dependencies.svg b/docs/img/dependencies.svg
index 24b2031540..5bb77d8edc 100644
--- a/docs/img/dependencies.svg
+++ b/docs/img/dependencies.svg
@@ -4,538 +4,628 @@
-
+
%3
-
-
+
+
+compiler_stub
+
+compiler_stub
+
+
+
+data
+
+data
+
+
+
+compiler_stub->data
+
+
+
+
+
core
-
-core
+
+core
-
+
iface
-
-iface
+
+iface
-
+
core->iface
-
-
-
-
-
-data
-
-data
+
+
-
+
defaults
-
-defaults
+
+defaults
+
+
+
+engine/auto
+
+engine/auto
+
+
+
+defaults->engine/auto
+
+
-
+
engine/gcc
-
-engine/gcc
+
+engine/gcc
-
+
defaults->engine/gcc
-
-
+
+
-
+
engine/null
-
-engine/null
+
+engine/null
-
+
defaults->engine/null
-
-
+
+
-
+
engine/templight
-
-engine/templight
+
+engine/templight
-
+
defaults->engine/templight
-
-
+
+
-
+
engine/vc
-
-engine/vc
+
+engine/vc
-
+
defaults->engine/vc
-
-
+
+
-
+
engine/wave
-
-engine/wave
+
+engine/wave
-
+
defaults->engine/wave
-
-
+
+
-
+
pragma
-
-pragma
+
+pragma
-
+
defaults->pragma
-
-
+
+
+
+
+
+engine/auto->core
+
+
-
+
engine/clang
-
-engine/clang
+
+engine/clang
-
+
engine/clang->core
-
-
+
+
-
+
process
-
-process
+
+process
-
+
engine/clang->process
-
-
+
+
-
+
engine/constant
-
-engine/constant
+
+engine/constant
-
+
engine/constant->core
-
-
+
+
-
+
engine/gcc->engine/clang
-
-
+
+
-
+
engine/null->core
-
-
+
+
-
+
engine/templight->engine/clang
-
-
+
+
-
+
engine/vc->core
-
-
+
+
-
+
engine/vc->process
-
-
+
+
-
+
engine/wave->engine/clang
-
-
+
+
-
+
iface->data
-
-
+
+
-
+
main_shell
-
-main_shell
+
+main_shell
-
+
main_shell->core
-
-
+
+
-
+
mdb
-
-mdb
+
+mdb
-
+
mdb->core
-
-
+
+
-
+
mock
-
-mock
+
+mock
-
+
mock->iface
-
-
+
+
-
+
pattern
-
-pattern
+
+pattern
-
+
pragma->mdb
-
-
+
+
-
+
process->data
-
-
+
+
-
+
readline
-
-readline
+
+readline
-
+
readline->iface
-
-
+
+
-
+
replace_part
-
-replace_part
+
+replace_part
-
+
system_test
-
-system_test
+
+system_test
-
+
system_test->pattern
-
-
+
+
-
+
system_test->process
-
-
+
+
-
+
app/metashell
-
-app/metashell
+
+app/metashell
-
+
app/metashell->defaults
-
-
+
+
-
+
app/metashell->main_shell
-
-
+
+
-
+
app/metashell->readline
-
-
+
+
-
+
app/reference_gen
-
-app/reference_gen
+
+app/reference_gen
-
+
app/reference_gen->defaults
-
-
+
+
-
+
app/reference_gen->replace_part
-
-
+
+
+
+
+
+app/stub/cl_de
+
+app/stub/cl_de
+
+
+
+app/stub/cl_de->compiler_stub
+
+
+
+
+
+app/stub/cl_en
+
+app/stub/cl_en
+
+
+
+app/stub/cl_en->compiler_stub
+
+
+
+
+
+app/stub/clang
+
+app/stub/clang
+
+
+
+app/stub/clang->compiler_stub
+
+
+
+
+
+app/stub/gcc
+
+app/stub/gcc
+
+
+
+app/stub/gcc->compiler_stub
+
+
+
+
+
+test/system/auto_engine
+
+test/system/auto_engine
+
+
+
+test/system/auto_engine->process
+
+
-
+
test/system/core
-
-test/system/core
+
+test/system/core
-
+
test/system/core->system_test
-
-
+
+
-
+
test/system/mdb
-
-test/system/mdb
+
+test/system/mdb
-
+
test/system/mdb->system_test
-
-
+
+
-
+
test/system/pdb
-
-test/system/pdb
+
+test/system/pdb
-
+
test/system/pdb->system_test
-
-
+
+
-
+
test/system/pp
-
-test/system/pp
+
+test/system/pp
-
+
test/system/pp->system_test
-
-
+
+
-
+
test/unit/core
-
-test/unit/core
+
+test/unit/core
-
+
test/unit/core->core
-
-
+
+
-
+
test/unit/core->mock
-
-
+
+
-
+
test/unit/data
-
-test/unit/data
+
+test/unit/data
-
+
test/unit/data->data
-
-
+
+
-
+
test/unit/engine/clang
-
-test/unit/engine/clang
+
+test/unit/engine/clang
-
+
test/unit/engine/clang->engine/clang
-
-
+
+
-
+
test/unit/engine/templight
-
-test/unit/engine/templight
+
+test/unit/engine/templight
-
+
test/unit/engine/templight->engine/templight
-
-
+
+
-
+
test/unit/engine/templight->mock
-
-
+
+
-
+
test/unit/engine/vc
-
-test/unit/engine/vc
+
+test/unit/engine/vc
-
+
test/unit/engine/vc->engine/vc
-
-
+
+
-
+
test/unit/main_shell
-
-test/unit/main_shell
+
+test/unit/main_shell
-
+
test/unit/main_shell->engine/constant
-
-
+
+
-
+
test/unit/main_shell->main_shell
-
-
+
+
-
+
test/unit/main_shell->mock
-
-
+
+
-
+
test/unit/mdb
-
-test/unit/mdb
+
+test/unit/mdb
-
+
test/unit/mdb->engine/constant
-
-
+
+
-
+
test/unit/mdb->mdb
-
-
+
+
-
+
test/unit/pragma
-
-test/unit/pragma
+
+test/unit/pragma
-
+
test/unit/pragma->engine/constant
-
-
+
+
-
+
test/unit/pragma->main_shell
-
-
+
+
-
+
test/unit/pragma->mock
-
-
+
+
-
+
test/unit/pragma->pragma
-
-
+
+
-
+