Index: Doxyfile
==================================================================
--- Doxyfile
+++ Doxyfile
@@ -1,14 +1,15 @@
PROJECT_NAME = "ObjFW"
OUTPUT_DIRECTORY = docs/
-INPUT = src src/exceptions
+INPUT = src src/exceptions src/runtime
FILE_PATTERNS = *.h *.m
HTML_OUTPUT = .
GENERATE_LATEX = NO
HIDE_UNDOC_CLASSES = YES
HIDE_UNDOC_MEMBERS = YES
-PREDEFINED = DOXYGEN \
+PREDEFINED = __OBJC__ \
+ DOXYGEN \
OF_BOXABLE \
OF_CONSUMED \
OF_DESIGNATED_INITIALIZER \
OF_GENERIC(...)= \
OF_HAVE_BLOCKS \
Index: README.md
==================================================================
--- README.md
+++ README.md
@@ -5,51 +5,48 @@
want to be portable.
See https://objfw.nil.im/ for more information.
-Table of Contents
-=================
+
Table of Contents
* [Installation](#installation)
* [macOS and iOS](#macos-and-ios)
- * [Building as a framework](#building-as-a-framework)
- * [Using the macOS or iOS framework in Xcode](#using-the-macos-or-ios-framework-in-xcode)
+ * [Building as a framework](#building-framework)
+ * [Using the macOS or iOS framework in Xcode](#framework-in-xcode)
* [Broken Xcode versions](#broken-xcode-versions)
* [Windows](#windows)
* [Getting MSYS2](#getting-msys2)
* [Updating MSYS2](#updating-msys2)
- * [Installing MinGW-w64 using MSYS2](#installing-mingw-w64-using-msys2)
- * [Getting, building and installing ObjFW](#getting-building-and-installing-objfw)
- * [Nintendo DS, Nintendo 3DS and Wii](#nintendo-ds-nintendo-3ds-and-wii)
+ * [Installing MinGW-w64 using MSYS2](#installing-mingw-w64)
+ * [Getting, building and installing ObjFW](#steps-windows)
+ * [Nintendo DS, Nintendo 3DS and Wii](#nintendo)
* [Nintendo DS](#nintendo-ds)
* [Nintendo 3DS](#nintendo-3ds)
* [Wii](#wii)
* [Amiga](#amiga)
- * [Writing your first application with ObjFW](#writing-your-first-application-with-objfw)
- * [Bugs and feature requests](#bugs-and-feature-requests)
+ * [Writing your first application with ObjFW](#first-app)
+ * [Bugs and feature requests](#bugs)
* [Commercial use](#commercial-use)
-Installation
-============
+Installation
To install ObjFW, just run the following commands:
$ ./configure
$ make
$ make install
- In case you checked out ObjFW from the Git repository, you need to run the
- following command first:
+ In case you checked out ObjFW from the Fossil or Git repository, you need to
+ run the following command first:
$ ./autogen.sh
-macOS and iOS
--------------
+macOS and iOS
-### Building as a framework
+Building as a framework
When building for macOS or iOS, everything is built as a `.framework` by
default if `--disable-shared` has not been specified to `configure`.
To build for iOS, use something like this:
@@ -66,18 +63,18 @@
$ export OBJC="$clang -arch i386 -arch x86_64"
$ export OBJCPP="$clang -arch i386 -E"
$ export IPHONEOS_DEPLOYMENT_TARGET="9.0"
$ ./configure --prefix=/usr/local/iossim --host=i386-apple-darwin
-### Using the macOS or iOS framework in Xcode
+Using the macOS or iOS framework in Xcode
To use the macOS framework in Xcode, you need to add the `.framework`s to
your project and add the following flags to `Other C Flags`:
-fconstant-string-class=OFConstantString -fno-constant-cfstrings
-### Broken Xcode versions
+Broken Xcode versions
Some versions of Xcode shipped with a version of Clang that ignores
`-fconstant-string-class=OFConstantString`. This will manifest in an error
like this:
@@ -96,30 +93,30 @@
You can get older versions of Xcode
[here](https://developer.apple.com/download) by clicking on "More" in the
top-right corner.
-Windows
--------
+Windows
Windows is only officially supported when following these instructions, as
there are many MinGW versions that behave slightly differently and often
cause problems.
-### Getting MSYS2
+Getting MSYS2
The first thing to install is [MSYS2](https://www.msys2.org) to provide a
basic UNIX-like environment for Windows. Unfortunately, the binaries are not
signed and there is no way to verify their integrity, so only download this
from a trusted connection. Everything else you will download using MSYS2
later will be cryptographically signed.
-### Updating MSYS2
+Updating MSYS2
The first thing to do is updating MSYS2. It is important to update things in
a certain order, as `pacman` (the package manager MSYS2 uses, which comes
- from ArchLinux) does not know about a few things that are special on Windows.
+ from Arch Linux) does not know about a few things that are special on
+ Windows.
First, update the mirror list:
$ pacman -Sy pacman-mirrors
@@ -134,11 +131,11 @@
Now you have a fully updated MSYS2. Whenever you want to update MSYS2,
proceed in this order. Notice that the first `pacman` invocation includes
`-y` to actually fetch a new list of packages.
-### Installing MinGW-w64 using MSYS2
+Installing MinGW-w64 using MSYS2
Now it's time to install MinGW-w64. If you want to build 32 bit binaries:
$ pacman -S mingw-w64-i686-clang mingw-w64-i686-gcc-objc
@@ -151,62 +148,61 @@
Shell`. So if you want to build for 32 or 64 bit, you just start the correct
shell.
Finally, install a few more things needed to build ObjFW:
- $ pacman -S autoconf automake git make
+ $ pacman -S autoconf automake fossil make
-### Getting, building and installing ObjFW
+Getting, building and installing ObjFW
Start the MinGW-w64 Win32 or Win64 Shell (depening on what version you want
to build - do *not* use the MSYS2 Shell shortcut, but use the MinGW-w64 Win32
or Win64 Shell shortcut instead!) and check out ObjFW:
- $ git clone https://git.nil.im/objfw.git
+ $ fossil clone https://objfw.nil.im objfw.fossil
+ $ mkdir objfw && cd objfw
+ $ fossil open ../objfw.fossil
You can also download a release tarball if you want. Now go to the newly
checked out repository and build and install it:
$ ./autogen.sh && ./configure && make -j16 install
If everything was successfully, you can now build projects using ObjFW for
Windows using the normal `objfw-compile` and friends.
-Nintendo DS, Nintendo 3DS and Wii
----------------------------------
+Nintendo DS, Nintendo 3DS and Wii
Download and install [devkitPro](https://devkitpro.org/wiki/Getting_Started).
-### Nintendo DS
+Nintendo DS
Follow the normal process, but instead of `./configure` run:
$ ./configure --host=arm-none-eabi --with-nds
-### Nintendo 3DS
+Nintendo 3DS
Follow the normal process, but instead of `./configure` run:
$ ./configure --host=arm-none-eabi --with-3ds
-### Wii
+Wii
Follow the normal process, but instead of `./configure` run:
$ ./configure --host=powerpc-eabi --with-wii
-Amiga
------
+Amiga
Install [amiga-gcc](https://github.com/bebbo/amiga-gcc). Then follow the
normal process, but instead of `./configure` run:
$ ./configure --host=m68k-amigaos
-Writing your first application with ObjFW
-=========================================
+Writing your first application with ObjFW
To create your first, empty application, you can use `objfw-new`:
$ objfw-new app MyFirstApp
@@ -224,19 +220,17 @@
`objfw-compile` is a tool that allows building applications and libraries
using ObjFW without needing a full-blown build system. If you want to use
your own build system, you can get the necessary flags from `objfw-config`.
-Bugs and feature requests
-=========================
+Bugs and feature requests
If you find any bugs or have feature requests, feel free to send a mail to
js@nil.im!
-Commercial use
-==============
+Commercial use
If for whatever reason neither the terms of the QPL nor those of the GPL work
for you, a proprietary license for ObjFW including support is available upon
request. Just write a mail to js@nil.im and we can find a reasonable solution
for both parties.
Index: src/OFSPXSocket.h
==================================================================
--- src/OFSPXSocket.h
+++ src/OFSPXSocket.h
@@ -16,12 +16,10 @@
*/
#import "OFSequencedPacketSocket.h"
#import "OFRunLoop.h"
-#import "socket.h"
-
OF_ASSUME_NONNULL_BEGIN
/*! @file */
@class OFSPXSocket;
Index: src/OFSPXStreamSocket.h
==================================================================
--- src/OFSPXStreamSocket.h
+++ src/OFSPXStreamSocket.h
@@ -16,12 +16,10 @@
*/
#import "OFStreamSocket.h"
#import "OFRunLoop.h"
-#import "socket.h"
-
OF_ASSUME_NONNULL_BEGIN
/*! @file */
@class OFSPXStreamSocket;
Index: src/OFTCPSocket.h
==================================================================
--- src/OFTCPSocket.h
+++ src/OFTCPSocket.h
@@ -16,12 +16,10 @@
*/
#import "OFStreamSocket.h"
#import "OFRunLoop.h"
-#import "socket.h"
-
OF_ASSUME_NONNULL_BEGIN
/*! @file */
@class OFTCPSocket;
Index: src/runtime/ObjFWRT.h
==================================================================
--- src/runtime/ObjFWRT.h
+++ src/runtime/ObjFWRT.h
@@ -51,35 +51,125 @@
#if !__has_feature(objc_arc) && !defined(__unsafe_unretained)
# define __unsafe_unretained
#endif
+/*!
+ * @brief A value representing no class.
+ */
#define Nil (Class _Null_unspecified)0
+
+/*!
+ * @brief A value representing no object.
+ */
#define nil (id _Null_unspecified)0
+
+/*!
+ * @brief An Objective-C boolean representing true.
+ *
+ * @note This is a legacy from before C had a boolean type. Prefer the standard
+ * C99 true instead!
+ */
#define YES true
-#define NO false
+
+/*!
+ * @brief An Objective-C boolean representing false.
+ *
+ * @note This is a legacy from before C had a boolean type. Prefer the standard
+ * C99 false instead!
+ */
+#define NO false
+
+/*! @file */
+/*!
+ * @brief A pointer to a class.
+ */
typedef struct objc_class *Class;
+
+/*!
+ * @brief A pointer to any object.
+ */
typedef struct objc_object *id;
+
+/*!
+ * @brief A selector.
+ *
+ * A selector is the name of a method including the colons and an optional type
+ * encoding.
+ */
typedef const struct objc_selector *SEL;
+
+/*!
+ * @brief A method.
+ *
+ * A method consists of a selector with a type encoding and an implementation.
+ */
typedef const struct objc_method *Method;
-#ifdef __OBJC__
+
+/*!
+ * @brief A protocol.
+ */
+#if defined(__OBJC__) && !defined(DOXYGEN)
@class Protocol;
#else
typedef const struct objc_protocol *Protocol;
#endif
+
+/*!
+ * @brief An instance variable.
+ */
typedef const struct objc_ivar *Ivar;
+
+/*!
+ * @brief A property.
+ */
typedef const struct objc_property *objc_property_t;
+
#if !defined(__wii__) && !defined(__amigaos__)
+/*!
+ * @brief An Objective-C boolean. Either @ref YES or @ref NO.
+ *
+ * @note This is a legacy from before C had a boolean type. Prefer the standard
+ * C99 bool instead!
+ */
typedef bool BOOL;
#endif
-typedef id _Nullable (*IMP)(id _Nonnull, SEL _Nonnull, ...);
-typedef void (*objc_uncaught_exception_handler_t)(id _Nullable);
-typedef void (*objc_enumeration_mutation_handler_t)(id _Nonnull);
+
+/*!
+ * @brief A method implemenation.
+ *
+ * @param object The messaged object
+ * @param selector The selector sent
+ */
+typedef id _Nullable (*IMP)(id _Nonnull object, SEL _Nonnull selector, ...);
+
+/*!
+ * @brief A handler for uncaught exceptions.
+ *
+ * @param exception The exception which was not caught.
+ */
+typedef void (*objc_uncaught_exception_handler_t)(id _Nullable exception);
+
+/*!
+ * @brief A handler for mutation during enumeration.
+ *
+ * @param object The object that was mutated during enumeration
+ */
+typedef void (*objc_enumeration_mutation_handler_t)(id _Nonnull object);
+/*!
+ * @brief A struct representing a call to super.
+ */
struct objc_super {
+ /*!
+ * @brief The object on which to perform the super call.
+ */
id __unsafe_unretained _Nullable self;
+ /*!
+ * @brief The class from which to take the method.
+ */
#ifdef __cplusplus
Class _Nonnull class_;
#else
Class _Nonnull class;
#endif
Index: tests/TestsAppDelegate.m
==================================================================
--- tests/TestsAppDelegate.m
+++ tests/TestsAppDelegate.m
@@ -45,11 +45,14 @@
# include
# undef asm
#endif
#ifdef OF_NINTENDO_3DS
+/* Newer versions of libctru started using id as a parameter name. */
+# define id id_3ds
# include <3ds.h>
+# undef id
#endif
#ifdef OF_PSP
static int
exit_cb(int arg1, int arg2, void *arg)