How to update #
To update an existing mulle-objc project, you should clean the (global)
archive cache and throw away the old downloaded dependencies in stash
. Then
upgrade the project and rebuild:
1mulle-sde -f clean cache
2mulle-sde -f clean tidy
3mulle-sde upgrade
4mulle-sde craft
This should give you no trouble.
What's new ? #
There are some new features and improvements, including a technological world premiere and ... some breakage.
Colorization for terminal output #
In logging statements color output can be very helpful to quickly
scan output lines for the same object. There is a new method
-colorizedUTF8String
which will be used by the printf extension format
"%#@" to print a colorized description of the object.
Implementing a colorization for an object can look like this:
1- (int) colorizerColorCode
2{
3 return( 111); // 256 color terminal code
4}
5
6- (char *) colorizerPrefixUTF8String
7{
8 char *s;
9 int color;
10
11 color = [self colorizerColorCode]
12 mulle_asprintf( &s, "\033[38;5;%dm", color);
13 return( MulleObjCAutoreleaseAllocation( s, NULL));
14}
-colorizerPrefixUTF8String
and -colorizerSuffixUTF8String
will be called
by -[NSObject colorizedUTF8String]
.
mulle_asprintf
will create a malloced terminal color string, which will
be returned autoreleased.
C callbacks for NSThread #
NSThread is very convenient to start a new thread. Yet until now, to just let a small function run, you needed a class and a method. Now you can just pass in a C function and some user info.
1+ (void) mulleDetachNewThreadWithFunction:(MulleThreadFunction_t *) f
2 argument:(void *) argument;
3
4+ (instancetype) mulleInitWithFunction:(MulleThreadFunction_t *) f
5 argument:(void *) argument;
Support for static Objective-C executables (Linux) #
With musl libc instead of glibc as the standard C library it becomes possible to create Objective-C executables that do not need any shared libraries. mulle-markdown is an example of such a standalone executable.
As far as I know, a fully statically linked Objective-C executable has never been done before, so I claim this as "World Premiere Tech" 😉
Improved Windows support #
Some time as been expended to make mulle-objc work on Windows (WIN32). The tooling should be OK and the libraries up to MulleObjC should work. There hasn't been enough effort yet to achieve proper Windows support in MulleObjCLockFoundation and MulleObjCOSFoundation.
You use WSL to build native versions of the mulle-objc libraries, and you can then use the native mulle-clang-cl.exe in Visual Studio as the Objective-C compiler.
mulle-sde config switch #
I am writing a graphics library, that I want to base on multiple backends. This
library called MulleUI has a dependency named MulleUIOS,
which can be based on either
libsdl or glfw.
With config select
i can now choose between two different sets of
dependencies. MulleUIOS has two sourcetrees alternatives. "config is the
default and "sdl" is the alternative. MulleUIOS usually selects glfw,
and the projects headers and cmake files are "reflected" for it.
With mulle-sde config switch
you can now choose in "MulleUI" the sourcetree
that "MulleUIOS" should use. This is done via an environment setting in the
main project. This will force on the next craft
a new "reflect" in
"MulleUIOS", which changes the C headers and cmake files in "MulleUIOS". So
for example the source code in "MulleUIOS" changes from #include <libsdl.h>
to #include <GLFW.h>
or vice versa.
Foundation brew formula is broken (MacOS) #
Unfortunately the 'homebrew' formula for Foundation.rb is broken. It seems to me, that the brew project really goes out of its way to make things as cumbersome as possible for formula writers. You can still build the Foundation with mulle-sde with no problems though, but it's just not possible to use mulle-sde within a brew formula to fetch something via curl...
Raspberry PI llvm build is broken #
The llvm code base does not compile with the old gcc compiler delivered with
bullseye and the clang of bullseye crashes when compiling
lib/Target/AArch64/AArch64ISelLowering.cpp
.
Release Notes #
This is the list of release notes of the various projects. Enjoy the read :)
MulleFoundation #
The most interesting change is the addition of MulleObjCTimeFoundation,
which was spawned by MulleObjCOSFoundation and MulleObjCValueFoundation
as a home for NSDate
and NSTimer
. Overall not a lot has changed here.
RELEASENOTES | Version | mulle-objc 0.20 version |
---|---|---|
MulleObjCArchiverFoundation | 0.20.1 | 0.20.0 |
MulleObjCCalendarFoundation | 0.20.1 | 0.20.0 |
MulleObjCContainerFoundation | 0.20.1 | 0.20.0 |
MulleObjCExpatFoundation | 0.20.2 | 0.20.1 |
MulleObjCInetOSFoundation | 0.20.1 | 0.20.0 |
MulleObjCKVCFoundation | 0.20.1 | 0.20.0 |
MulleObjCLockFoundation | 0.20.1 | 0.20.0 |
MulleObjCMathFoundation | 0.20.1 | 0.20.0 |
MulleObjCOSFoundation | 0.21.0 | 0.20.0 |
MulleObjCPlistFoundation | 0.20.1 | 0.20.0 |
MulleObjCStandardFoundation | 0.20.1 | 0.20.0 |
MulleObjCTimeFoundation | 0.0.1 | - |
MulleObjCUnicodeFoundation | 0.20.1 | 0.20.0 |
MulleObjCValueFoundation | 0.21.0 | 0.20.0 |
Foundation | 0.21.0 | 0.20.0 |
MulleFoundation | 0.21.0 | 0.20.0 |
objc-compat | 0.20.1 | 0.20.0 |
mulle-bunchobjects | 0.20.1 | 0.20.0 |
mulle-testgen | 0.20.1 | 0.20.0 |
MulleObjCStandardFoundation-startup | 0.20.1 | 0.20.0 |
Foundation-startup | 0.20.1 | 0.20.0 |
MulleFoundation-startup | 0.20.1 | 0.20.0 |
mulle-foundation-developer | 0.21.0 | 0.20.0 |
foundation-developer | 0.20.1 | 0.20.0 |
MulleWeb #
There is a new project mulle-markdown. It's a small executable to convert markdown to HTML. It's a showcase for the use of musl with mulle-objc, to produce a self-contained executable with no shared libraries linked.
Otherwise there have been no real changes to MulleWeb.
RELEASENOTES | Version | mulle-objc 0.20 version |
---|---|---|
MulleObjCHTTPFoundation | 0.18.3 | 0.18.2 |
MulleObjCInetFoundation | 0.18.3 | 0.18.2 |
MulleObjCJSMNFoundation | 0.18.3 | 0.18.2 |
MulleBase64 | 0.0.3 | 0.0.2 |
MulleCivetWeb | 0.17.7 | 0.17.6 |
MulleCurl | 0.17.6 | 0.17.5 |
MulleZlib | 0.15.7 | 0.15.6 |
MulleHoedown | 0.2.5 | 0.2.4 |
MulleWebClient | 0.0.7 | 0.0.6 |
MulleWebServer | 0.0.7 | 0.0.6 |
MulleScion | 1859.1.9 | 1859.1.8 |
MulleScionHTMLPreprocessor | 0.2.5 | 0.2.4 |
mulle-scion | 1859.1.8 | 1859.1.7 |
mulle-markdown | 0.0.1 | - |
mulle-objc #
Finally the synced version numbers are a thing of the past. It's expected that mulle-objc-runtime and MulleObjC remain syned, but the others will likely fall behind (and have fallen behind).
New is the addition of mulle-musl-gcc for support of the musl C library.
RELEASENOTES | Version | mulle-objc 0.20 version |
---|---|---|
mulle-objc-runtime | 0.21.0 | 0.20.0 |
mulle-objc-debug | 0.20.1 | 0.20.0 |
mulle-objc-list | 0.20.1 | 0.20.0 |
mulle-musl-gcc | 0.0.1 | - |
mulle-objc-compat | 0.20.1 | 0.20.0 |
MulleObjC | 0.21.0 | 0.20.0 |
MulleObjC-startup | 0.20.1 | 0.20.0 |
mulle-objc-runtime-startup | 0.20.1 | 0.20.0 |
mulle-objc-developer | 0.23.0 | 0.22.0 |
mulle-cc #
mulle-gdb remains essentially unchanged, but follows the gdb version. The mulle-clang compiler received an update to the newest llvm version and a code generation bug was fixed.
RELEASENOTES | Version | mulle-objc 0.20 version |
---|---|---|
mulle-clang-project | 14.0.6.0 | 13.0.0.0 |
mulle-gdb | 11.1.0.0 | 10.1.0.0 |
mulle-core #
mulle-fprintf and mulle-sprintf have seen some significant changes.
mulle-time now distinguishes between "calendar" time and a process' "absolute" time.
RELEASENOTES | Version | mulle-objc 0.20 version |
---|---|---|
mulle-atexit | 0.0.11 | 0.0.10 |
mulle-atinit | 0.0.8 | 0.0.7 |
mulle-dlfcn | 0.0.9 | 0.0.8 |
mulle-fprintf | 0.1.0 | 0.0.1 |
mulle-mmap | 0.1.2 | 0.1.1 |
mulle-sprintf | 2.1.0 | 2.0.0 |
mulle-stacktrace | 0.2.5 | 0.2.4 |
mulle-testallocator | 4.2.5 | 4.2.4 |
mulle-time | 1.0.0 | 0.1.0 |
mulle-concurrent #
There is nothing new for mulle-concurrent.
RELEASENOTES | Version | mulle-objc 0.20 version |
---|---|---|
mulle-thread | 4.4.1 | 4.4.0 |
mulle-fifo | 0.0.3 | 0.0.2 |
mulle-aba | 2.0.23 | 2.0.22 |
mulle-concurrent | 2.2.12 | 2.2.11 |
mulle-multififo | 0.0.2 | 0.0.1 |
mulle-c #
mulle-c11 is now supporting Windows better. There is now support for the musl C library (Linux/FreeBSD only).
RELEASENOTES | Version | mulle-objc 0.20 version |
---|---|---|
mulle-c11 | 4.2.0 | 4.1.2 |
mulle-allocator | 4.2.5 | 4.2.4 |
mulle-data | 0.1.0 | 0.0.3 |
mulle-buffer | 3.2.0 | 3.1.0 |
mulle-container | 6.1.0 | 6.0.0 |
mulle-http | 0.1.4 | 0.1.3 |
mulle-musl-gcc | 0.0.1 | - |
mulle-unicode | 2.4.4 | 2.4.3 |
mulle-url | 2.3.4 | 2.3.3 |
mulle-utf | 3.1.1 | 3.1.0 |
mulle-vararg | 1.1.3 | 1.1.2 |
mulle-c-developer | 0.15.0 | 0.14.0 |
mulle-sde #
mulle-sde sees a major new feature, with the addition of multiple sourcetrees per project. This makes large projects like the MulleFoundation more easily configurable.
RELEASENOTES | Version | mulle-objc 0.20 version |
---|---|---|
mulle-craft | 2.0.0 | 1.0.0 |
mulle-dispense | 3.1.0 | 3.0.0 |
mulle-domain | 1.0.1 | 1.0.0 |
mulle-env | 4.1.0 | 4.0.2 |
mulle-fetch | 3.0.1 | 3.0.0 |
mulle-make | 1.1.0 | 1.0.0 |
mulle-match | 1.0.1 | 1.0.0 |
mulle-monitor | 1.0.1 | 1.0.0 |
mulle-platform | 1.0.1 | 1.0.0 |
mulle-sde | 1.1.0 | 1.0.1 |
mulle-semver | 1.0.1 | 1.0.0 |
mulle-sourcetree | 1.1.0 | 1.0.0 |
mulle-template | 1.0.1 | 1.0.0 |
mulle-test | 6.1.0 | 6.0.1 |
mulle-sde-developer | 0.24.0 | 0.23.0 |
mulle-nat #
mulle-project now contains the convenient mulle-gitignore script!
RELEASENOTES | Version | mulle-objc 0.20 version |
---|---|---|
mulle-bashfunctions | 4.1.0 | 4.0.0 |
mulle-project | 3.1.0 | 3.0.0 |