Releases: LADSoft/OrangeC
Orange C-v6.0.44.2
this release reworks the assembler so that it will additionally parse ATT assembler sources, and splits the compiler into three pieces for better maintenance. It also removes OCIDE from the install and into a separate github project. Changes are as follows:
- project: fix bugs that would not allow compiling in VS2019
- project: add new appveyor builds for debugger and code analyzer; add 7z format to build artifacts
- project: minor changes to make files
- project: update tool help displays
- windows installer: allow installing in a 'user' account
- occ: fix rare problem where strength reduction could create an invalid multiply instruction
- occ: 'char *xx[]' should be equivalent to 'char *(xx[])' (compiler treats them differently)
- occ: fix error generated when declaring a scoped enum that had been forward declared.
- occ: fix problem with shared expression node getting modified (could result in invalid ASM code)
- occ: fix recursion problem in debug info, for function types that reference themselves in their argument list
- occ: fix { somestruct a; a = { 0 }; } in C++ mode
- occ: emit a more useful diagnostic for things like 'sizeof((int))'
- occ: fix rare problem in peephole optimizer that could create bad code
- occ: add /g as an alias for /v
- occ: replace the preprocessor with a newer version
- occ: replace under the hood utility code with the standard version used by the other tools
- occ: local static variables with the same name used the same name were not differentiated in memory
- occ: clean up clang warnings relating to the floating point structure
- occ: add normal method to push/pop macros
- occ: generate error if using floating point in a preprocessor expression
- occ: fix rare problem where constant evaluation could crash optimizer
- occ: fix some crashes on invalid input
- occ: fix some problems zeroing structures in a function but not in a declaration.
- occ: handle constant evaluation for complement operation correctly
- occ: fix sizeof an array which is a function param to be sizeof(void *)
- occ: add attribute((stdcall)) and parse for attributes in a couple of new places
- occ: allow argument which is an array surrounded by parenthesis
- occ: fix some preprocessor replacement issues found by c-testsuite tests
- occ: handle cast to structured constant which is in the global space
- occ: fix call to address which is an integer constant to generate correct code
- occ: fix a vagary wherein switch-case statements without brackets did not compile properly
- occ: optimize constant expressions involving and, or, and exclusive or a little better
- occ: handle VA_ARGS for empty argument lists properly
- occ: fix problem with capturing variables declared in nested lambdas
- occ: fix problem with not being able to declare variables in a 'default' clause
- occ: fix problem where sometimes a type used in a template prototype would not be expanded properly
- occ: 'main' is inaccessible to the runtime if it is prototyped
- occ: auto type derived from array type is considered an LVALUE
- occ: string in hook was demoted to RVALUE
- occ: using variadic templates for a variable length argument list didn't promote arrays to pointers
- occ: fix compiler crash when generating debug type info for a union
- occ: fix problem where a complex constant in a CMP instruction could be optimized to zero by the peephole optimizer
- occ: fix problem with template parameter lookup: sometimes returned the wrong value
- occ: fix bug in peephole optimizations
- occ: allow type casts in preprocessor expressions
- occ: handle const errors a little better
- occ: fix problems with constant evaluation
- occ: handle a switch-case structure that doesn't have braces for a block
- occ: fix code generation for call to an address which is a constant value
- occ: fix cast to structured constant to work in C++ mode
- occ: allow pointer qualifiers in the array specifiers of an unsized VLA
- occ: fix an argument which is an array surrounded by parenthesis to parse correctly
- occ: fix sizeof an arrary which is a function argument to be the size of a pointer.
- occ: fix various problems with code generation for c11 thread local storage type
- occ: make comparison between 'long' and 'unsigned' an unsigned comparison when sizeof(unsigned) == sizeof(long)
- occ: fix EBP based stack frame to work again
- occ: compile .CC files as C++
- occ: sizeof(un undefined structure) should generate an error
- occ: error for undefined static functions is too strict. Make it a warning, hide it if the function is unused.
- occ: don't generate a 'function must return value' warning for functions when they end with 'exit(xxx)'
- occ: fix 'expression has no results' error when a hook is used where one of the prongs would not generate the error.
- occ/olink/dlpe: add switches for generating .DEF files from DLLs
- occ: fix problem where destructors used in the array-style destructor would not work if they were in a DLL.
- occ: fix preprocessor bug when stringizing in the middle of a long string
- occ: initializing a typdefed array of structures doesn't work...
- occ: only simple constants could be initialized in the thread local storage initialization region
- occ: add __declspec(align(xx))
- occ: calling things like (imported_func)(args) (note the parenthesis around the function call) crashed the built executable
- occ: fix bug in peephole optimizer, statements like "(a == 4 != c == 4) could be generated incorrectly for complex memory accesses
- occ: statements like : char array[256] = {} did not generate any code.
- occ: don't use 'rand' and friends when generating compiler-generated names
- occ: improve assembly-language output compatibility with NASM.
- occil: fix problem with generating code that shifted by an int64 constant
- occil: fix problem with a function call in the middle of a variable arguments sequence resulting in bad code
- occil: fix problem with things like (void)((argc == 1) && myfunc()) getting optimized wrong
- occil: fix crash on the following code sequence: char c = "hello"[0];
- occil: fix problems with compiling char c = "hello"[0];
- dlpe: don't generate fixups for the constants used in thread local storage lookups
- dlpe: add support for SOURCE_DATE_EPOCH in the binary timestamps.
- oasm: add 'gas' syntax
- oasm: set default assembler word size to 32 bits
- oasm: add gas mnemonics, operands, and directives
- oasm: support 8 byte integers with DQ and friends (only supported floats before)
- onm: was broken for a while, fixed it
- ocide, tools: add support for UTF8 and UCS2LE BOMs
- ocide: allow opening a CPJ file directly on the command line
- ocide/orc: could not click on an error and open the related RC file
- ocide: fix code completion analyzer, fix various crashes
- occpr: (code completion analyzer) fix many crashes on invalid input
- olink: fix library search order to be more like other windows compilers
- general: started work on taking care of bugs found by static analysis
- rtl: fix printf() and friends to work properly with long double variables
- rtl: throwing standard C++ classes such as the std::runtime wouldn't work when compiled against lscrtl.dll
- rtl: support more errno values
- rtl, tools: update to latest version of SQLITE3
- rtl: fix nl_types.h to work standalone in C code
- rtl: in command lines, the sequence '\"' was contracted incorrectly
- rtl: fix printf of long double type to work again
- rtl: add alloca.h
- rtl: localtime: adjust for DST properly
- tests: add new tests for code analyzer and preprocessor
note that this is a WIP, right now the MSDOS binaries will not work. They will be fixed in the next released.
Add OCCIL into main compiler package, bug fixes
this version adds the MSIL compiler, OCCIL, into the main line. It also fixes a variety of bugs. Some of the changes are as follows:
- occil: add this as a first class item in the project
- occil: fix various pre-existing bugs
- occ: fix problems with complex math code generation
- occ: fix problems initializing an array of objects in a constructor
- occ: qualifying a constructor with the class name (inside the class definition) resulted in bad code generation.
- occ: static cast of an argument to vector::push_back resulted in the wrong value being pushed
- occ: when stack frames are being used, presence of ONLY the thisptr isn't enough to generate the stack frame load/save
- occ: return statement could use an RREF copy on something that is in another container, effectively wiping the value.
- occ: when a 'throw' occurs from a nested routine, registers such as ESI,EDI,EBX could have been modified by the lower routines but they may not have been used in the catching routine, so the caller's values might not have been saved.
- occ: declaring an enumeration in a class resulted in bad code gen, when the -> or . operators were used to access it from an object
- occ: in function argument, an enum should prefer a match to its base type. Was prefering unsigned char. for example an enum wouldn't be translated to text characters when using streaming operators
- occ: when a function is marked as nothrow, allow it to be inlined
- occ: when a function does not have try/catch, allow it to be optimized even in the presence of an exception table
- occ: noexcept functions that can't possibly throw anyway will have the exception table elided
- occ: it was incorrectly adding EBP references in some cases where they weren't needed
- occ: it was not allowing inlining of functions that return a structure by reference
- occ: for subtractions with long longs, generate neg instructions if necessary to relieve register pressure.
- occ: fix problems with local variables overriding global structures
- occ: when generating line information for C++ files, line numbers were off by one.
- occ: fix debug information for parameters: off by one
- occ: when multiple input files were specified on the command line, the wrong output could occur for files after the first one
- ocide: fix problem with new font handling in resource editor dialog properties window
- ocide: fix problem with runaway stack, when a structure reference is used inside itself
- ocide/brc: fix some problems generating and parsing browse information
- ocide: fix disassembler to not crash for long C++ function names
- omake: fix wildcard function to check for file existance
- build: use 'wildcard' function instead of spawning to a dir or ls command
- rtl: fix problems with complex math library: there was still code for long double complex using the old long double format
- rtl: printf family (and by extension C++ libraries) couldn't deal with LLONG_MIN or unsigned long longs >= ULLONG_MAX/2
- rtl: the exception dump was off by one line, when the source code associated with the exception line is C++
- dotnetpelib: load assemblies more quickly
- general: started work on taking care of bugs found by static analysis
Bug Fixes
- occ: fix problems with tuple and shared_ptr
- occ: source code cleanup
- occ: fix various other problems compiling C++ code
- occ: fix problem with freeing temporaries created in building function-local static variables
- occ: add more support for the gnu attribute keyword
- ocide: allow modifying the face name for dialogs in the resource editor
Bug Fix Release
This release is a bug fix release.
-
occ: show data at CS:EIP in exception dumps
-
occ: fix so that an empty statement at the end of a function didn't confuse the 'function needs return value' warning
-
occ: fix the /D and /U command line switches to work more in line with the standard usage
-
occ: fix problems with std::array, for-range doesn't compile
-
occ: fix problems with std::array, bracket initialization runs out of memory
-
occ: fix problems with bracket-initializing a non-trivial structure that doesn't have user constructors.
-
occ: fix problems with make_unique: two of the overloads were considered as matches for each other.
-
occ: fix problems with std::unique_ptr
-
occ: operator bool() not always considered when a structure is used in an && or || expression
-
occ: in rare instances, the move constructor might be confused with the copy constructor
-
occ: auto increment/decrement in args to inlined functions may not be handled properly if the target is a structure member
-
occ: packed reference variables got the size of the non-reference version of the variable.
-
occ: support forwarding references
-
occ: fix vagary where an argument which was the result of a function call used the wrong value for the result in rare circumstances
-
occ: allow declaring an enumeration with an empty list of elements
-
occ: fix _Pragma to work and allow it in C++ mode
-
occ: fix a couple of problems compiling templates
-
occ: if a copy/move constructor is not defaulted, don't call base class copy constructors (call the default constructor)
-
occ: allow wchar_t and unsigned short to be treated as identical for purposes of the suspicious pointer warning
-
occ: add builtin byteswap functions
-
occ: automatically detect DLL outputs and select "/Wd" command line switch, by parsing the contents of the '/oxxxx' switch
-
occ: add various GCC attributes
-
omake: don't rebuild things that have exactly the same time stamp as their dependencies
-
omake: improve diagnostics: extend /w switch to show more information
-
omake: fix multithreading problem/crash
-
ocide: when typing a '}', move cursor to BEFORE the newly typed character
-
ocide: fix bug, long lines cause buffer overrun
-
ocide: clean up relative paths in project files
-
ocide: allow the output exe file setting to be changed
-
olink: identify invalid libraries
-
olink: create an error if a public symbol was also imported
-
oasm: add .align assembler directive like gas version
-
rtl: revert a usage of std::forward in to use the original code (orangec supports it as written now)
-
rtl: allow nl_types.h to be included in c language files
-
rtl: stdint: handle __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS correctly
-
rtl: return a pointer to nothing when realloc is specified with a size of zero
-
rtl: add wait() and waitpid()
-
rtl: reading from a tty will immediately clear any EOF flag associated with the TTY
-
rtl: add getexecname() function (solaris)
-
rtl: add realpath() and friends
-
rtl: fix _environ when building DLLs: a link error was thrown stopping the build.
-
clean up make files: completes build in local directory and overwrites EXE file if it already exists
Fix MSDOS build release to work again, replace x87 FPU support with SSE2
This releases fixes various problems with the MSDOS install and execute.
This release also replaces the x87 FPU support with SSE2.
There are also various bug fixes.
Here is a list of changes:
- fix various problems with the MSDOS build and install
- occ: fix stack frame in the presence of try/catch processing: don't optimize out the EBP references and don't cache variables in regs
- occ: add __offsetof and use in library
- occ: add __typeid and fix tgmath.h
- occ: fix alignas and alignof, propagate section alignment through to linker
- occ: when putting a qualifier in front of the friend keyword, the friend keyword got ignored
- occ: fix problem with hook; when one side is a structure the other side might need a constructor call to coerce to the same type
- occ: print return code of linker when calling --y
- occ: faster evaluation when constexpr functions are used
- occ: rewrite backend to use assembler core
- occ: convert floating point calculations to use SSE2 instead of the FPU
- occ: fix bug in assembly output when virtual function patches are applied to an overridden virtual table
- occ: allow implicit use of captured this in lambda expressions
- occ: fix problem with constructor initializers: direct initialization of a structure member resulted in bad code
- occ: handle return of reference values properly, by generating an error if generating the return value requires a temporary
- occ: c++: allow function name to be used in arithmetic expressions, warn when this is being done
- occ: consider strings as const pointers for purposes of function argument matching
- occ: when a member name matched a structure at global scope, various problems would occur
- occ: assignment of constant data to a structure crashed the generated program (C++ mode only)
- occ: when a structure is copy-constructed into a function argument, a throw in the function resulted in undefined behavior
- occ: fix some problems with lambda functions being force fit into std::function
- occ: fix unary operators - would apply the conversion AFTER any cast to the destination size instead of before
- occ: fix various problems with complex and imaginary number handling
- occ: in assembly file, represent floating point numbers as a byte sequence instead of as a decimal value
- occ: in C++ code, allow conversion from a pointer to enum to a pointer to void in argument matching
- occ: make operator << instantiation for ostream work with enums
- occ: fix stdatomic.h header
- occ: fix atomic code generation
- occ: fix code generation for converting long long to bool
- occ: fix static initialization of long double variables
- occ: unsigned values promoted to int should be considered as 'signed' for purposes of division
- occ: assignment combined with a math op did not convert the result back to bool if that is the variable type
- occ: allow multiple use of 'const', 'volatile' keywords
- oasm: speed up assembly of large files
- oasm: negative floating point numbers were being represented as positive in the output
- dlpe/oimplib: handle -y switch
- orc: fix crash when compiled with package, when processing invalid input file
- ocpp: (c++ version) allow # without a directive
- ocpp: (c++ version) default to C99
- ocpp: (c++ version) add #warning
- ocpp: (c++ version) add __has_include and #pragma once
- ocpp: (c++ version) reorganize sources for better interoperability with other packages
- ogrep: add gnu-style context and stop after command line switches
- ocide: fix function prototype popup when compiled with package, does not go away
- ocide: when stopping on step into function, don't stop until stack frame is set up
- ocide: when parsing RC file can't redefine keywords with preprocessing...
- ocide: when processing strings in RC files, limit '\x##' to two hex digits
- ocide: add orangec\bin to the path when running/debugging executables
- ocide: empty status bar after scanning for dependencies
- ocide: fix bad DOCKS entry in user prefs file leads to hang
- ocide: when starting the debugger with no windows open, the disassembly window would open instead of the source file window
- ocide: make it work when compiled against LSCRTL.DLL
- ocide: fix crash when loading files from the command line that don't have an extension
- olink, olib: speed up dictionary caching
- rtl: fix recently broken strncpy to work properly again
- rtl: fix tgmath.h
- rtl: fix chrono::system_clock::now();
- rtl: rewrite qsort to make it non-recursive
- rtl: fix sprintf() and friends to print floating point numbers correctly
- rtl: replace 80x87 math functions with cephes library
- rtl: fix startup routines to pass correct version of hInstance to WinMain and DLLMain when compiled against LSCRTL.DLL
- rtl: add bsd finite() functions
Library updates
This release has library improvements
- rtl: add msvcrt.l and crtdll.l back into the project
- rtl: improve stack trace for certain edge cases
Various improvements and bug fixes
This version has various improvements and bug fixes.
- occ: speed up slow symbol table searches in classes with a lot of members
- occ: fix problems compiling C++ regex header
- occ: fix various problems where template specializations should have been instantantiated even though they weren't used in the current source file
- occ: fix problems with linking template functions with static variables
- occ: remove unreferenced external declarations from the object file
- occ: extend range of things you can reference with a __declspec declaration
- occ: call assembler even if -c was specified on the command line
- occ: the -lxxx switch set xxx as the output file name
- occ: fix problems when using namespace qualifiers on member initializer names for base classes
- occ: fix problems with member initializers not being set up correctly
- occ: use 'real' line number in debug info
- occ: add common options to emit data.
- occ, olink, olib: allow '.a' and '.lib' to be used as extensions for libraries
- occ: fix /S switch so you can use -S as well.
- occ: remove 'expression has no effect' warning when both paths of a ?: expression are void values
- occ: fix a newly introduced problem where sometimes it could generate bad output files for static data
- occ: fix a crash if an intermediate code block became dead while it was still being used...
- occ: fix problem where constexpr static variable initializations failed for constexpr functions and constructors
- occ: fix some crashes while errors were occurring
- occ: implement CPATH and SOURCE_DATE_EPOCH environment variables
- occ: pass specified /o switch to assembler or RC compiler, if /c is also specified
- occ: fix problems with auto pointers
- occ: fix problems with the preprocessor not being able to handle maxed out 64-bit unsigned numbers
- occ: delete output files on error
- occ: fix problem where things trailing a function prototype sometimes couldn't refernece the arguments from the prototype
- occ: remove 'suspicious pointer' warning when assigning to a function pointer
- occ: add command line and pragma support for warning control
- occ: pass output file name to assembler, rc compiler when compiling a single file
- occ: fix rare problem with register allocator failing
- occ: implicit cast from long long to 'enum type' as a function arg could result in bad code generation
- occ: local initialization of char aa[10] = ""; didn't work. Forms without the empty string worked
- occ: a negative long long constant got downconverted to int during constant evaluation
- occ: line numbers in c++ code were off by one.
- occ: when a template defined in a template using statement was used as the specialization of another template, it wasn't evaluated properly.
- occ: fix various problems with generating assembly code that oasm couldn't parse
- occ: add fastcall and switch some of the STL support functions to being intrinsics
- occ: fix vagaray in debug format, sometimes function types would not be emitted (could cause link problems)
- occ: fix problem generating code for debug mode, sometimes the resulting code would not run
- oasm: fix bug where too-full buffer could modify generated code stream
- olink: fix a crash if occ failed to output line information properly
- dlpe: fix the fixup of relative branch to import thunks, to allow the thunks to be relocated
- dlpe: use --nologo when invokeing oimplib
- dlpe: fix a rare problem where a write past the end of allocated memory could cause a crash
- occpr (symbol table parser): fix two crashes
- oimplib: 'replace' dll modules in library, instead of 'adding' them, so they don't go stale
- olib: fix '/o' switch
- olib: implement LIBRARY_PATH environment variable
- omake: fix some problems interacting with autoconf-generated make systems
- ocide: could not step into a dll function
- ocide & docs: add step functions to the debug menu
- ocide: fix crash when starting program with 'stop in dll' set
- ocide: fix various problems with 'stop in dll' including problems with invalid breakpoints
- ocide: detect end of file boundary properly when trying to find a breakpoint line
- ocide: fix problems with single stepping and setting breakpoints in dll
- ocide: fix problems with DLL breakpoints not being reset after program is restarted
- ocide: fix perenial crash if closing windows while the colorization is updating
- ocide: clean up menus related to file close options
- ocide: fix problem with 'browseto' (F12) - it wouldn't browse to macro definitions
- ocide: fix various crashes that could occur during database fetches, while editing or opening/closeing debugger
- ocide: fix various display problems with 'build properties' window
- ocide: fix so that build properties window can be refreshed with new data, if left open.
- ocide: be explicit about errors when can't debug a program , especially the 'invalid workding directory' error.
- ocide: find 'stdcall' functions in the code completion
- ocide: fix various other problems with code completion
- ocide: fix build: handle data imports correctly
- ocide: fix problem with browse info and default workspace
- oimplib, olib, olink: fix more problems when '/' was used as a path separator
- olink: bail with an error if a library cannot be found
- olink: make sure intermediate file always has a .rel extension
- omake: fix compatibility issues with /bin/sh
- omake: fix 'order' prerequisites to work correctly
- obrc: tweak error message to not mention object files
- rtl: sprintf could try to modify input strings, didn't work if string is in readonly memory
- rtl: remove definition of __declspec in the _defs.h
- rtl: fix C++ check in stdbool.h
- rtl: fix strncat to work as per the standard
- rtl: uncaught throw will now result in abnormal program termination
- rtl: fix definition of 'bad_cast' to inherit from 'exception'
- rtl: fix the definition of __sync_add_and_fetch provided for locale.cpp to add to the result
- rtl: add a 'helper' dll which can output a stack trace if a program crashes
- rtl: fix the definition of 'TryEnterCriticalSection'
- rtl: access() set errno to EACCESS instead of ENOENT on failure.
- rtl: open/sopen would set errno to ENOENT if they were successfully creating an output file
- rtl: implement fcntl
- rtl: fix strerror(), was adding a line feed to end of string
- rtl: fix problems with LSCRTL: double load issue and issue where DLLs couldn't use it
- rtl: precision on integers in sprintf did not have the desired effect
- rtl: add _TRUE_MIN constants to float.h
- all: add 'clang' to continuous integration builds
- all: add compile-via-assembly to continuous integration builds
- documentation: add minimal documentation for ancilliary projects
V6.0.37.1
This version adds various new features and fixes many issues. Highlights include modifying OMAKE to perform parallel builds, improving compile times on certain problematic files, reworking the documentation, relicensing under GNU V3, adding a tool (onm.exe) to dump object file contents, and adding a PDF version of the OCIDE documentation.
Changes are as follows:
- documentation: various upgrades
- all programs: add --version
- all programs: default 'ORANGEC' environment variable to a sensible value if not defined
- add tool to dump object files and libraries (onm.exe)
- occ, ocide: allow '.s' file extension to mean an assembly language file
- occ: when a temporary was created for a long long value, the temporary could overwrite other variables
- occ: add new macros for OCC version number and update documentation
- occ: fix bug with array length = 0 not allowed at end of structure;
- occ: fix crash on certain types of error conditions and bad input
- occ: fix 'missing type' warning so that it will display the associated identifier when it can
- occ: following a defined macro name with a preprocessor directive (on the next line) resulted in an error
- occ: Add various predefined macros with compiler version information
- occ: improve several error messages
- occ: add various parameters to set options for spawned processes
- occ: C compilation: fix problem with 'external' functions later declared as 'inline' not appearing in the output file
- occ: allow preprocessing from stdin
- occ: add support for #pragma once
- occ: fix problem where defining something on the command line could result in a 'redefinition' error later even if the definitions were the same.
- occ/ocpp: fix problem where using #line directive to change a file name would change the relative path from which include files were located.
- occ: speed up compiles of certain problematic files
- occ: add __declspec(noreturn), __declspec(dllimport), __declspec(dllexport), and parsing of __declspec(...) in general
- olib: remove extraneous warning
- ocpp: support /! and /V
- ocpp: allow preprocessing from stdin
- ocpp: add switch to specify output file; otherwise default to sending output to stdout. Work as before if ORANGEC_LEGACY_OPTIONS set in environment
- ogrep: allow searching from stdin
- omake: when compiled for 64-bit mode could sometimes randomly show the usage instead of doing its job
- omake: fix crash when using help in conjunction with change to /f switch to allow space
- omake: change text of "warning: '' is undefined" to say what is undefined
- omake: fix "if (
$(LEFT),$ (RIGHT))" to evaluate properly - omake: fix 'commands returned error code' error to use the right line and file
- omake: don't use .vpath to figure out path for $@
- omake: error if target specifiers do not match target suffix (e.g. x1.o x2.o: %.p : %.c)
- omake: replace '\t' and '\n' with ' ' after macro replacement
- omake: $shell: strip trailing line feeds
- omake: macro substitue last argument of $(call ...)
- omake: add --eval switch
- omake: spawn directly when possible
- omake: \ at end of line doesn't match the line continuation character now
- omake: tab before a conditional statement is honored as spaces now
- omake: fix crash with bad input
- omake: add multithreading support
- ocide: change the brace matching to SHIFT-ALT-BRACE to allow for keyboards that use ALT-BRACE to mean the brace key
- ocide: fix several crashes if there were a large number of link errors
- ocide: fix problems with german keyboard
- ocide: fix problem where 'DLL' projects were given an extension '.exe'
- ocide: add option to view the commands being sent to the tools during a build
- ocide: fix problems with building DLLs.
- ocide: fix access violation when files with no extension were added to a project
- ocide: add specific setting for module definition files, to avoid collisions with source code of projects
- ocide: close files when creating a new work area
- ocide: add documentation outside the chm (.md, .pdf) and fix command line switches
- olink/dlpe: change the default subsystem versions back to 4.0 for compatibility with older versions of windows.
- olink/dple: Allow setting the OS and SUBSYSTEM versions, allow overriding the SUBSYSTEM
- olink: when toolset was compiled with itself, olink would crash when -v was used
- olink: fix access violation when linking against a file with invalid format
- oimplib: add /C switch to change the name mangling on imported functions to C style
- coff2ieee: fix incompatibilities with latest microsoft libraries
- coff2ieee: fix access violation
- rtl: don't export iob_func from generated executables
- rtl: make 'DLLMain' optional for DLLs
- rtl: implement setenv, unsetenv
- rtl: don't lock up if seek to end of file is followed by a read from file
- rtl: fix fdopen to set binary mode if necessary
- rtl: add popen/pclose
- rtl: change 'access' to support errnos: ENOENT and ENOTDIR
V6.0.36.1
This version fixes more bugs in omake, and cleans up various command line operations for the tools.
Version 6.0.36: 4/18/2018
- omake: support '/' better
- omake: strip leading tabs when necessary
- omake: for += and ?= don't strip leading spaces from the RHS
- omake: handle comment preceded by only a tab
- omake: $< variable could find a prerequisite unassociated with a command
- occ: handle unix-style paths when deciding to strip a path for purposes of putting output in the current directory
- occ: change the /I and /o switches to (optionally) allow a space between the switch and the value
- occ: change command line behavior so that switch starting with - works the normal way, add environment variable OCC_LEGACY_OPTIONS to force old behavior
- occ: add /y and /yy for verbosity
- olink: add /y for verbosity
- olink: change /L and and /o and /s switches to (optionally) allow a space between the switch and the value
- orc: change the /i and /o switches to (optionally) allow a space between the switch and the value
- oasm: change the /I and /o switches to (optionally) allow a space between the switch and the value
- oimplib: change the /o switch to (optionally) allow a space between the switch and the value
- olib: change the /o switch to (optionally) allow a space between the switch and the value
- omake: change the /I and /f and /C and /W and /o switches to (optionally) allow a space between the switch and the value);
- all: add /V switch to show logo and date/time of build
- build: don't show compiler & linker logo
Various OMAKE cleanup, fix builds
This version cleans up OMAKE, and fixes various problems with the build. In addition there are some bug fixes. A full list of changes is as follows:
- ocide: search with replace to '' actually replaced to ']' when in 'direct' replace mode
- ocide: fix uninitialized variables in the replace function
- omake: support both '' and '/' in filenames
- omake: support .IGNORE and .SILENT without any prerequisites
- omake: fix bug where lines other than commands couldn't begin with the tab character
- omake: when :: is used as a rule separator, mark the target as precious
- omake: turn a suffix rule with prerequisites into a normal rule (used to generate an error)
- omake: when a command in a recipe fails and '.POSIX' is not specified, keep going until the end of the recipe
- omake: add '.LOW_RESOLUTION_TIME' special target
- omake: add '.NOTPARALLEL' special target (displays a warning since omake won't run things in parallel)
- omake: add '.ONESHELL' special target
- omake: add '.POSIX' special target
- omake: add '.RECURSIVE' special target
- omake: add '.MFLAGS' and '.MAKEFLAGS' special targets
- omake: add '.MAIN' special target
- omake: add '.SILENT' target attribute
- omake: add '.IGNORE' target attribute
- omake: add '.DONTCARE' target attribute
- omake: add '.MAKE' target attribute
- omake: add '.PRECIOUS' target attribute
- omake: add '.NOTMAIN' target attribute
- omake: add warnings for other BSD target attributes we aren't supporting
- omake: don't treat various GNU and BSD special targets we added as candidates for the first found target
- omake: fix '.PHONY' special target; omake would crash when it was used
- build: fix build with MINGW-32 to work again
- build: fix 'omake fullbuild' to work cleanly again