forked from larsch/ocra
-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathCHANGELOG.txt
More file actions
358 lines (267 loc) · 32.2 KB
/
Copy pathCHANGELOG.txt
File metadata and controls
358 lines (267 loc) · 32.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
=== 1.4.5
- Windows: detected DLLs are now also bundled into bin, next to ruby.exe, whenever they are not already resolvable from where they get packed. The Windows loader resolves a native extension's imports from the extension's own directory, ruby.exe's application directory (bin) plus its ruby_builtin_dlls SxS assembly, and the system directories - PATH is not consulted on hardened systems, and the AddDllDirectory route gems take through ruby_installer/runtime does not exist in a packed app. A DLL loaded from a gem's own tree (e.g. FreeTDS, which tiny_tds ships under ports/), from a devkit's msys64 tree inside the Ruby prefix, or from outside the prefix entirely was packed only at that original location, which the loader never searches, so the packaged application died at require time with a misleading LoadError on machines where a rich PATH did not mask the gap - the out-of-prefix case was skipped entirely by a guard that made its copy_to_bin branch unreachable. DLLs from the Windows directory keep coming from the target system and are never bundled. Companion DLLs found next to native extensions (e.g. libssl-3-x64.dll beside openssl.so in archdir) go into bin as well: a copy in archdir only helps extensions in archdir itself, while the same extension packed at a gem path (openssl and psych are gems since Ruby 3.x) resolves its imports from bin.
- `--cosmo-ruby`: a native gem now also counts as provided by the payload when the payload can resolve the gem's primary feature, not only when the payload has a gemspec of that name. A gemspec is not what makes a library requirable - an extension linked into the APE, or a library in the interpreter's embedded stdlib, answers `require` with nothing under /zip/lib/ruby/gems/*/specifications - so gems such as cgi and pathname (both compiled into CosmoRuby, and both ordinary native gems on Ruby 3.4+) were reported incompatible and refused builds that work. The probe runs the payload once using $LOAD_PATH.resolve_feature_path, which searches exactly as require does, built-in extensions included, but executes none of the code it finds.
- A Rails application with SQLite now packages into a single Actually Portable Executable with `--cosmo-ruby` alone (no compiler at all), given an interpreter with sqlite3, nokogiri, puma, nio4r, bigdecimal and racc linked in: 39.0 MB, serving its first request 1.8s after launch, against 50.4 MB and 1.5s for the same application as a native OCRAN executable, and with nothing unpacked at run time. test/test_rails.rb drives the same HTTP assertions - scaffold CRUD through SQLite with CSRF token and session cookie, dynamically added controllers, persistence across a restart - through both builds. The one remaining limitation is cryptographic and belongs to the interpreter: its openssl is an MbedTLS shim with no cipher, HMAC or PBKDF2 surface, and Rails names those at load time, so the application must fill the gap itself, set SECRET_KEY_BASE, ship no config/credentials.yml.enc, and keep the session out of the (encrypted) cookie. See the Rails section of README.md.
- New `--chdir-exe-dir` option (issue #32): the packaged executable starts the script with its working directory set to the directory containing the executable itself, so relative file access (e.g. reading data files placed next to the .exe) works regardless of how the executable is invoked. Implemented as a new CHDIR_TO_EXE_DIR (0x40) stub header flag; the stub passes `-C <exe dir>` to the packed Ruby interpreter. Mutually exclusive with `--chdir-first`.
- README: document that `__FILE__`/`__dir__`/`$0` point into the temporary extraction directory at runtime (the cause of issue #32) and show the supported `ENV["OCRAN_EXECUTABLE"]` pattern for locating files next to the executable.
- `--gemfile <path>` now governs the dependency run too, not just the Gemfile scan that follows it. The script is loaded inside the OCRAN process, so whatever BUNDLE_GEMFILE the environment carried used to win: running OCRAN from inside another project's `bundle exec` made the script's own `require "bundler/setup"` activate that project's bundle, and gems only the application's Gemfile provides went missing. Local development gems declared with `path:` or `gemspec` always did, since they exist nowhere but that Gemfile, so packaging them (issue #34) failed with a LoadError before anything could be packed. OCRAN now points BUNDLE_GEMFILE at the given Gemfile before loading the script, and when a different bundle has already been set up through RUBYOPT it drops Bundler's memoized state so the application's Gemfile is the one that takes effect.
- Test suite: build and run steps assert through a new assert_system helper that captures the child's stdout and stderr and puts them in the failure message. A failing build used to report nothing but "Expected false to be truthy" while its diagnostics scrolled past in the runner's output.
- `--cosmo-ruby <ruby.com>` now packages without any compiler when the given cosmopolitan Ruby runs an embedded /zip/main.rb (issue #26). Instead of compiling an APE launcher stub, OCRAN copies the interpreter and injects the application into the interpreter's own ZIP store, so the executable IS the interpreter: no cosmocc, no make, and nothing is unpacked at run time. Startup drops from 0.79s to 0.23s on Linux and from 1.52s to 0.49s on Windows for a 4-gem CLI, no temporary directory is created at all (so none can be leaked when the process is killed), and the executable is about twice as large because it cannot be LZMA-compressed. The mode is selected automatically - `--cosmo-ruby <ruby.com>` alone remains the whole command line - by detecting the capability in the binary; interpreters without it still get the launcher stub, and an explicit `--cosmo <toolchain>` (or --output-dir/--output-zip/--innosetup/--macosx-bundle) forces it. No new command line option.
- Behavior differences of the ZIP packaging mode, documented in README: the application runs from inside the executable, so $0, __FILE__ and __dir__ point into /zip/ocran/src instead of a temporary directory (files shipping next to the executable are still found via OCRAN_EXECUTABLE, which is unchanged); --chdir-first changes into the executable's directory; of RUBYOPT only -I and -r can be replayed; --icon and --debug-extract have no effect.
- ZIP packaging now passes the whole command line to the application and reports exact exit codes, including on Windows, given a cosmopolitan Ruby with the 2026-08 interpreter fixes. Previously the interpreter parsed leading option-shaped arguments as its own ("app.com --verbose" failed with "invalid option --verbose", only "app.com -- --verbose" worked) and multiplied Windows exit codes by 256 ("exit 3" arrived as 768). Both were interpreter bugs that also affected plain "ruby.com script.rb"; "--" is now an ordinary argument and interpreter options are reachable through RUBYOPT.
- The APE launcher stub sets COSMORUBY_WAIT_STATUS_EXIT=1 for the packaged interpreter. The stub is itself a cosmopolitan program: it fork/execs the interpreter and reads the result with WEXITSTATUS(), so with the interpreter's Windows exit-code fix in place an unmarked child's "exit 3" came back as 131 (128 + signal 3). The variable asks the interpreter to keep cosmopolitan's wait-status encoding for this one caller; the stub still reports the plain status to its own native parent.
- New Ocran::ZipWriter: a minimal, dependency-free ZIP appender (Zlib only) used to inject the application into the APE without shelling out to the zip command, which Windows build hosts do not have. It rewrites the central directory in place, refuses ZIP64 and archives with trailing data, rejects entries that would shadow an existing member, and writes UNIX file-type bits in the external attributes - without S_IFREG/S_IFDIR the members are readable but Ruby's load refuses to open them and directory listings come back empty.
- New experimental `--cosmo <path>` option (alias `--cosmo-toolchain`): build the launcher stub from its C sources with a Cosmopolitan Libc toolchain (cosmocc) at packaging time and package the application with the resulting Actually Portable Executable (APE) stub instead of the pre-built stub (issue #26). `<path>` is the cosmocc executable or the toolchain directory (containing bin/cosmocc). Console applications only (`--windows` is rejected); requires make and a Linux/macOS build host. The default output name uses the `.com` extension (APE convention); an explicit `--output` is used verbatim. Compiled stubs are cached in ~/.cache/ocran keyed on the toolchain and stub sources; compile errors surface the compiler output.
- Ship the stub C sources (src/) in the binary platform gems so `--cosmo` can rebuild the stub from an installed gem, not only from a source checkout.
- `--cosmo-ruby <ruby.com>` is a complete command line on its own: the cosmocc toolchain that builds the APE launcher stub is now discovered on the build host instead of having to be named with `--cosmo` (issue #26). Search order: the COSMOCC environment variable (the cosmocc executable or its install directory; a value that does not resolve is an error, not a silent fallback), cosmocc in PATH, then the conventional install locations ~/.cosmocc/*/bin/cosmocc, ~/cosmocc/*/bin/cosmocc, /opt/cosmocc/*/bin/cosmocc, /opt/cosmo/bin/cosmocc and /usr/local/cosmocc/bin/cosmocc (newest version first). `--cosmo <path>` remains an explicit override that always wins and still works on its own. When no toolchain is found, option parsing fails - before the dependency run - with a message naming the environment variable, PATH, the conventional locations, the download URL and the `--cosmo` flag.
- New experimental `--cosmo-ruby <ruby.com>` option: package a cosmopolitan-built Ruby APE as the bundled interpreter instead of the host Ruby, so the produced `.com` contains both an APE stub and an APE Ruby and runs with no host-native code (issue #26). The payload's embedded stdlib (in its /zip store) is used at runtime instead of the host's, its embedded gem directory is appended to GEM_PATH, pure-Ruby gems are packed as usual, and native-extension gems are skipped when the payload provides them (json, psych, ...) or abort the build otherwise. The payload is validated by running it once on the build host; a warning is printed when host and payload Ruby versions differ. Verified end-to-end on Linux; console-only, POSIX build hosts only.
=== 1.4.4
- Fix crash on distro-packaged and Homebrew Ruby when a default gem (e.g. fiddle, singleton) has a gemspec but no materialized gem directory: file collection now treats the missing directory as an empty set instead of raising Errno::ENOENT from Find.find (issue #44). The gem's files, which live in the stdlib, are still packed via the load path.
- Pack the real Ruby interpreter when bindir/ruby is a dispatcher script (e.g. Fedora's rubypick): the running interpreter binary (/proc/self/exe) is packed under the expected name instead, so the packed executable no longer requires Ruby on the target system.
- Build runtime RUBYLIB from the build Ruby's actual default load path in addition to the RbConfig directories, covering distro-specific compiled-in entries such as Fedora's /usr/share/rubygems where rubygems.rb lives outside rubylibdir.
- Include every Gem.path entry under the Ruby prefix in the runtime GEM_PATH (not just Gem.default_dir), so RubyGems can activate gems from split layouts like Fedora's /usr/share/gems + /usr/local/share/gems.
- Make default gems activatable at runtime: their gemspecs (from specifications/default/, which RubyGems only scans under the compiled-in Gem.default_dir) are also copied into the regular specifications directory of the same packed base directory.
- Handle distros that expose gem files under additional symlinked paths (e.g. Fedora symlinks /usr/share/ruby/psych.rb into the psych gem directory): loaded features are resolved by realpath so they are packed inside the gem directory, and duplicate stdlib-level copies that would shadow the packed gem at runtime are no longer packed.
- Pack native extension files that distros build outside the gem's base_dir (e.g. Fedora's /usr/lib64/gems/ruby) into the extension directory RubyGems computes at runtime, and recreate the gem.build_complete marker there so the gem activates instead of being ignored ("its extensions are not built").
- Linux: bundle detected non-glibc shared libraries (libyaml, libssl, libcrypt, libgmp, libz, ...) next to libruby, with soname symlink aliases, so packed executables also run on other distros where these are missing or have different sonames. Core glibc libraries, the loader, and libnss_* plugins are never bundled; the target's glibc must be at least as new as the build host's. Disable with --no-autodll.
- CI: new isolated workflow test-aspera-cli.yml that packages the aspera-cli gem with distro Ruby on Fedora and verifies the executable runs on clean Fedora and Ubuntu containers without Ruby. Kept separate from the release pipeline with a read-only token; the third-party gem only ever runs inside throwaway containers.
- Restore the OCRA-compatible wrapper executable for Inno Setup builds: `--innosetup` now additionally builds a small stub executable named after `--output` and installs it into `{app}` alongside the application files. The wrapper runs the installed application directly from its own directory (new RUN_IN_EXE_DIR stub mode) — no extraction, no cleanup of the application directory. This behavior existed in OCRA and ocran <= 1.3.x but was lost in the 1.4.0 rewrite, breaking user ISS scripts that reference the executable, e.g. in [Run]/[UninstallRun] entries or for Windows service registration (`myapp.exe --register-service`). The launcher.bat is still generated and installed as before.
- Add `run_in_exe_dir` option to StubBuilder and a RUN_IN_EXE_DIR (0x20) stub header flag. In this mode the stub never deletes its directory (double-guarded in the stub itself, since the directory is the real application directory).
- Allow `--innosetup` on POSIX hosts when an ISCC command is available in PATH (e.g. a Wine wrapper); previously it was rejected on non-Windows unconditionally. Fix the ISCC presence check to use `command -v` instead of the Windows-only `where`/`>NUL` on POSIX.
- Inno Setup builds from POSIX hosts no longer crash on symlink entries (symlinks cannot be expressed in an installer script and are skipped; they are only generated for POSIX shared-library aliases).
- `--output-dir` and `--output-zip` now also include the wrapper executable (named after `--output`) next to the launch script, so the unpacked output has a doubleclickable, pinnable, signable entry point that can even be registered as a Windows service. The launch script (`.bat`/`.sh`) is still generated.
- New `--no-wrapper-exe` option: omit the wrapper executable from installer, directory and zip output.
- Always create the packed prefix gem directories (e.g. lib/ruby/gems/<api>) even when empty: RubyGems probes the default gem dir for writability at startup and printed "Can't determine writability of default gem path" on stderr for every packed executable on newer RubyGems.
- Stub: normalize the extraction/application directory to its long path form on Windows (GetLongPathName). With an 8.3 short TEMP path (e.g. C:\Users\RUNNER~1) the same file could be loaded under two spellings, defeating $LOADED_FEATURES deduplication and causing "already initialized constant" warnings.
=== 1.4.3
- Migrate edicon from C to Ruby: replace edicon.exe with a pure-Ruby implementation (ed_icon.rb), fixing incorrect BeginUpdateResource error checking and wrong GroupIconSize calculation. Shortens build times and removes the C binary from the build.
- Include Gem.default_dir in GEM_PATH on all platforms: previously the exec_prefix gem directory was excluded on Windows, causing native-extension gems (e.g. fxruby/fox16) to fail at runtime with a LoadError even though they were bundled correctly.
- Add FXRuby (fox16) test: verify that native extension DLLs are bundled correctly so the packaged executable does not raise a LoadError at runtime.
- CI: start a virtual display (xpra + Xorg dummy driver with GLX) on Linux before running tests so FXRuby's X11 requirement is satisfied.
- CI: install XQuartz on macOS runners and add it to the portability test job so FXRuby can connect to a display on both test and portability jobs.
=== 1.4.2
- Auto-bundle OpenSSL and all its transitive dependencies (openssl.rb, digest.so, etc.) when net/http is loaded but no HTTPS request was made during the dependency scan. OpenSSL is now required inside the OCRAN build process so every file it pulls in appears in the bundled executable.
- Add companion DLL scan on windows: when a native extension (.so) within the Ruby installation is loaded, all DLLs in the same directory are proactively included. This ensures libssl-3-x64.dll, libcrypto-3-x64.dll, libwinpthread-1.dll, and libyaml-0-2.dll are bundled even when no HTTPS connection is made during the build scan.
- Add `return if defined?(Ocran)` guards to test fixtures that have runtime-only side effects (file writes, Dir.chdir, file existence checks, network requests) to prevent them from running during the dependency scan, so we can check if the dependencies are included correctly.
=== 1.4.1
- Fix kernel_require.rb packed at wrong path when rubygems-update is installed (e.g. via asdf on Linux/macOS). kernel_require.rb is now located relative to the actually-loaded rubygems.rb from $LOADED_FEATURES, falling back to rubylibdir for standard Ruby installations.
=== 1.4.0
- Add Linux support: build and run self-extracting ELF executables on Linux. The stub compiles and runs natively on Linux using POSIX APIs.
- Add macOS support: build and run self-extracting Mach-O executables on macOS.
- Add `--output-dir` option: output all files to a directory with a platform-appropriate launch script (`.sh` on Linux/macOS, `.bat` on Windows) instead of a single executable.
- Add `--output-zip` option: same as `--output-dir` but packages the result into a zip archive.
- Add `--macosx-bundle` option: wrap the macOS executable in a `.app` bundle with a generated `Info.plist`, suitable for Finder, the Dock, and Authenticode-style code signing with `codesign` and `xcrun notarytool`. Use `--bundle-id` to set `CFBundleIdentifier` and `--icon` (`.icns`) to set the bundle icon.
- Use symlinks for shared library aliases on POSIX (e.g. `libruby.so → libruby.so.4.0`) instead of copying files, matching the layout Ruby expects at runtime.
- Fix crash on cleanup when a symlink target does not exist: `DeleteRecursively` now uses `lstat` instead of `stat` so dangling symlinks are removed correctly.
- Publish platform-specific gems for Linux, macOS (ARM and Intel), and Windows so `gem install ocran` selects the right pre-built stub automatically.
- Publish a source gem (`ruby` platform) with `ext/extconf.rb` so users on unlisted platforms can install by compiling the stub from source. Falls back to plain `make` if `ridk exec make` is unavailable on Windows.
- CI: add GitHub Actions workflow to build and publish per-platform gems on tag push.
- CI: run the packed Linux executable inside a Debian Docker container to verify cross-distro portability (no Ruby required on target).
- CI: test against Ruby 3.2, 3.3, 3.4, and 4.0 on Linux, macOS (ARM and Intel), and Windows.
=== 1.3.18
- Support shipping IRB as .exe File
- Fix SxS error 14001 when loading native extensions (e.g. openssl.so, date_core.so) at runtime. Each .so file may have a companion *.so-assembly.manifest in archdir defining its private SxS assembly; these manifests are now included alongside the .so files. All files in ruby_builtin_dlls/ (DLLs and manifest) are now included rather than the manifest alone.
- Support for Ruby 4.0.
- Include cacert.pem in the exe file to avoid SSL certificate verification issues.
- Use wide (UTF-16) Win32 APIs throughout system_utils.c (CreateFileW, CreateDirectoryW, DeleteFileW, FindFirstFileW/FindNextFileW, RemoveDirectoryW, GetFileAttributesW, MoveFileExW, GetTempPathW, CreateProcessW) to correctly handle multibyte (UTF-8) file and directory paths in the stub.
- Add Windows Authenticode code signing support. The stub now detects and skips PE security directory entries when searching for the OCRAN signature, so signed executables unpack correctly. Build time clears invalid security directory entries from PE headers to allow subsequent signing.
- Fix incorrect buffer size passed to GetModuleFileNameW in LibraryDetector (passed bytesize instead of character count).
- Fix pointer subtraction underflow in stub unpacker when a tampered offset places head past tail.
- Add bounds checking for icon file entries in edicon to prevent out-of-bounds reads from malformed .ico files.
- Support for Ruby 3.2 and above. Drop ruby 3.0 and 3.1 support.
- Suppress user notifications during stub cleanup and log errors to DEBUG output
- Fixes issue where two MessageBox dialogs appeared in GUI mode when a signature was not found.
- No longer create a marker file when the stub fails to delete the installation directory during cleanup.
- stub: During cleanup, switch to a safer working directory before removing the extraction directory.
- stub: Truncate error messages originating from the stub to a fixed maximum length.
- stub: Changed the name of the extraction directory to follow the mkdtemp style. The name is now generated using secure random numbers.
- stub: Disabled path expansion of template characters for additional options passed to the script.
- stub: Changed the script’s working directory switch to use Ruby’s `-C` option.
=== 1.3.17
- Modified `rake test` to no longer build stubs during test execution. Use `rake build_stub` when stub generation is necessary.
- New `rake build` task as a unified build entry point, delegating to `build_stub`.
- Updated GitHub Actions and internal scripts to use `rake build` instead of `rake build_stub`.
- Add full support for multibyte (UTF-8) names across executables, scripts, and resources. Requires Windows 10 version 1903 or later.
- Added UTF-8 manifest to stub.exe to enable UTF-8 support in ANSI API calls.
- Update Bundler from 2.5.10 to 2.5.23. This is the last Bundler version officially supporting Ruby 3.0.
- Added `bin/setup` and `bin/console` scripts for development (both Bash and Windows .bat versions).
- `bin/setup` now installs dependencies and builds stub executables automatically.
- Improved `spec.files` to explicitly include README, LICENSE, and CHANGELOG.
- Introduced a `Development` section in the README with setup instructions and Windows shell compatibility.
- Updated copyright year in README and LICENSE.
=== 1.3.16
- Support for Ruby 3.0 and above. Drop ruby 2.6 and 2.7 support.
- At startup, OCRAN no longer automatically removes directories that were previously deployed but couldn't be deleted. This change has been made to enhance security by preventing processes other than the startup process from manipulating temporary files created by them.
- The ability for the stub to launch any script during the unpacking of application files has been removed. This feature was not in use.
- The exit code from the Ruby application is now returned when the stub is terminated.
- The packed data no longer contains redundant directory information.
- Fixed errors in the --debug option.
- Upgraded LZMA decoder to version 22.01
- The directory generation for file extraction has been changed to use unique directory names created with high-resolution timestamps. Additionally, a retry limit for directory creation has been introduced, reducing the risk of infinite loops due to name collisions.
- Implemented variable-length buffer handling for path strings in stub, eliminating the risk of buffer overruns dependent on MAX_PATH.
- In order to reduce security risks during the cleanup process before application termination, we have implemented a safe current directory change from the system directory and the root of the C drive to the user's temporary directory and the directory of the app executable.
- The 'stub' executable has been enhanced for security, ensuring it prevents directory traversal attacks by verifying that path elements do not contain relative notations like '.' or '..'.
- Removed OcranBuilder and split functionality into StubBuilder and InnoSetupBuilder to introduce delayed loading and improve resource efficiency.
- InnoSetup installer now operates independently of stub, launching through its own batch file.
- Moved LibraryDetector to a separate file for modularity and implemented delayed loading with standardized Fiddle usage.
- Update Bundler from 2.4.13 to 2.5.10.
- Fixed issue where the gem.build_complete file was not included in the package due to an incorrect change.
- Changed error output from standard output to standard error (stderr).
- ocransa (Ocran-stand-alone) has been discontinued.
- The implementation of bin/ocran.rb has been refactored and split into multiple files. These files have been relocated to the lib directory.
=== 1.3.15
- Support for Ruby 2.6 and above.
- Properly display errors from InnoSetup.
- Fixed errors when creating an installer using InnoSetup. Previously, installer creation was not possible due to errors related to file sharing, which occurred only on Windows.
- Retrieve the path of runtime DLLs even when the path is long. Note that stubs still do not support long paths, so creating executable files with long paths is not yet possible.
- Fixed bugs in tests. All tests can now be executed.
- Improved the speed of manifest file discovery. This manifest file is only required in the RubyInstaller environment.
- Fixed bugs in the regular expressions of GEM_EXTRA_RE. This allows excluding C source files, etc., from the ocran executable package based on command options.
- Added methods to Ocran::Pathname, making it closer to the implementation of Ruby's Pathname.
- Reimplemented certain parts to match the implementation of Ruby 2.6 era, for compatibility with older Ruby versions. Therefore, the ocran command cannot be executed on Ruby versions earlier than 2.6.
=== 1.3.14
- Add option to suppress or override RUBYOPT environment variable #3 by ccorn90
=== 1.3.13
- Fixed the bug why Innosetup did not run because of missing encode method
- Fix an issue where rubyinstaller did not find the msys path by putting in an empty msys-2.0.dll into msys64/usr/bin/msys-2.0.dll
- compatibility with the tiny_tds gem (see above)
- GitHub builds through github action: making sure you can trust the included binaries.
- Added some samples including the glimmer-libui GUI example. GUI that starts fast.
=== 1.3.12
* Forked from Ocra
* Support Ruby up to 3.2
* Update lzma.exe to version 22.01
=== 1.3.11
* Support Ruby 2.2-2.7
* Add ruby2_keywords.rb to ignored modules
* Update lzma.exe to version 19.00
* Workaround for warning about deprecated Object#=~
* Use Fiddle instead of Win32API
* Fix for invalid argument to relative_path_from
=== 1.3.10
* Reduce memory usage while building & compressing (avoids out of
memory issue on really big programs).
* Compile stub.exe with 32-bit compiler again
=== 1.3.9
* Support Ruby 2.4.1p111 (include manifest)
=== 1.3.8
* Use GetModuleFileNameW for DLL detection
=== 1.3.7
* Workaround for handling of file names and directory name with
non-ASCII characters (e.g. "invalid byte sequence in UTF-8")
=== 1.3.6
* More robust cleanup of temporary files. Deletes using manual
recursive method instead of using the shell. Will mark files for
later deletion both using Windows (requires Administrator
privileges) and a custom method that will remove old temporary files
when the executable is restarted.
=== 1.3.5
* Fixes for Ruby 2.2.2p95
=== 1.3.4
* Workarounds for Ruby 2.1.5
=== 1.3.3
* Rebuild executables with MinGW GCC 4.8.1-4.
=== 1.3.2
* Refactored Gemfile handling for better compatibility with Ruby
version.
=== 1.3.1
* Now includes $LOADED_FEATURES even when script is not run to check
dependencies. This fixes compatability with Ruby 1.9.3 where
rubygems is always loaded.
* Fixed compatability with Ruby 2.0.0: Temp-path alias in binary
changed to be valid UTF-8 character.
* README.txt updated related to --no-dep-run (karhatsu).
* Fixes for Bundler handling (DavidMikeSimon).
=== 1.3.0
* Fixed some additional corner cases with absolute and relative
require & load paths. Extended test suite to cover a lot more
cases.
* Now provides a meaningful exit status code (1 on error, 0 on
success). (DavidMikeSimon)
* New option to _not_ run the script to detect dependencies
(--no-dep-run). (DavidMikeSimon)
* Bundler support using the --gemfile option. (DavidMikeSimon)
* Debug mode support in the stub (--debug). Also --debug-extract to
keep extracted files from executable. (DavidMikeSimon)
* New gem behaviour yet again due to changes in Rubygems. See README
file.
=== 1.2.0
* Ignore console events (Ctrl-C, Ctrl-Break). Ruby process handles
them anyway and exist, allowing the stub to clean up temporary
files.
* Temporary memory used for decompression is now freed before the ruby
interpreter is launched by the stub.
* Progress dialog is no longer displayed when removing temporary
files.
* Now includes most files from any require'd Rubygem (Now works with
mime-types, oledb and other gems that load additional data files
from the Gem installation). Some files are still ignored
(e.g. Readme's). Use "--no-gem-filter" to make Ocra unconditionally
include all files listed in the Gem specification (Thanks to Jorge
L. Cangas for patch & ideas).
* NameErrors are now rescued when attempting to load autoloadable
constants. Hopefully resolves issues with ActiveRecord [#28488].
* Now works if the script changes environment or working directory
while running.
* Fixed a regression in 1.1.4 when resource files are specified;
directory layout would not be maintained, e.g. when running "ocra
bin/script share/data.dat".
* Added support for passing arguments to script. Specify argument to
your script after a "--" marker. Arguments will be passed both at
compile time and run time. (#27815)
* Now works if the source files are located beneath Ruby's
exec_prefix. (#28505)
=== 1.1.4
* The tempdir marker is now pretty-printed as "<tempdir>" in the
output.
* Fixed various issues with path and filenames being handled case
sensitive.
* Now uses config settings for Ruby executable names (should now also
work with ruby installations built with --program-suffix).
* Supported invoking ocra with an absolute path to the script. Will
assume that the script is in the root of the source hierachy.
=== 1.1.3
* Use Win32API (provided with Ruby) instead of win32-api (gem).
* No longer sets GEM_HOME (which would override the default gem
path). Instead sets GEM_PATH. Resolves issues with gems not loading
on Ruby 1.9.
=== 1.1.2
* Warnings can be disabled using --no-warnings.
* Fixed not .exe being generated when script calls 'exit'.
* Path to the generated executable is now avilable to the running
script in the OCRA_EXECUTABLE environment variable.
* Directories on the command line will now be created.
* Supports path globs, fx. "ocra script.rb assets/**/*.png". (See
documentation for Ruby's Dir class).
* Fixed issue with spaces in temporary path (TMP environment).
* Improved path comparison to ignore case (this is Windows after all)
and be a bit more robust.
* Added support for RubyGems installed in GEM_HOME (or other part
handled by RubyGems). If not installed in the Ruby hierarchy, they
will now be installed in a directory named 'gemhome' under the
temporary directory.
=== 1.1.1
* Fixed duplicate entries in the RUBYLIB environment variable.
* Another slight fix for relative load paths.
* RUBYOPT is now set to the value it had when OCRA was invoked.
=== 1.1.0
* Added an icon to the executable. Can be replaced from a .ico file
using the --icon <ico> option.
* Improved handling of load paths added either from the command line
(ruby -I), RUBYLIB environment variable or during the script (by
modifying $: or $LOAD_PATH).
* Now automatically detects loaded DLLs through Win32::API. Disable
with --no-autodll.
=== 1.0.3 / 2009-05-25
* Fixed invokation of executables with spaces in path names (#25966).
* Fixed inverted handling of --windows & --console (#25974)
* Fixed installation issue with RubyGems (missing "lib")
=== 1.0.2 / 2009-05-10
* Added stubw.exe to gem (was missing 1.0.1)
=== 1.0.1 / 2009-05-05
* Added stub with windows runtime for windowed applications
(e.g. wxRuby) and fixed issue where OCRA would use ruby.exe instead
of rubyw.exe for such programs. [#25774]
=== 1.0.0 / 2009-04-05
* 1 major enhancement
* Birthday!