Skip to content

Commit

Permalink
use umbrella headers for C modules (#636)
Browse files Browse the repository at this point in the history
Motivation:

SwiftPM only generates fully usable clang modules for C modules if they
have umbrella headers. Therefore, adding a generated NIO.xcodeproj to
another Xcode project as a sub-project never worked.
To make a header an umbrella header you need to name them _exactly_ like
the module.

Modifications:

give each C module an umbrella header

Result:

generated NIO Xcode projects can be used as sub-projects.
  • Loading branch information
weissi authored and Lukasa committed Oct 19, 2018
1 parent ed28803 commit 9bae007
Show file tree
Hide file tree
Showing 13 changed files with 21 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "cpp_magic.h"

#if __clang_major__ == 3 && __clang_minor__ <= 6
/* clang 3.6 doesn't seem to know about _Nonnull yet */
#define _Nonnull __attribute__((nonnull))
Expand Down
2 changes: 1 addition & 1 deletion Sources/CNIOAtomics/src/c-atomics.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#include <inttypes.h>
#include <stdio.h>

#include "../include/c-atomics.h"
#include "../include/CNIOAtomics.h"
#include "../include/cpp_magic.h"

struct catmc_atomic_flag {
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion Sources/CNIODarwin/shim.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
//
//===----------------------------------------------------------------------===//
#ifdef __APPLE__
#include <c_nio_darwin.h>
#include <CNIODarwin.h>
#include <err.h>
#include <sysexits.h>
#include <stdlib.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
#ifndef C_NIO_LINUX_H
#define C_NIO_LINUX_H

#include "ifaddrs-android.h"

#ifdef __linux__
#include <sys/epoll.h>
#include <sys/eventfd.h>
Expand All @@ -22,11 +24,7 @@
#include <sys/socket.h>
#include <sched.h>
#include <errno.h>

#ifdef __ANDROID__
#include <pthread.h>
#include "ifaddrs-android.h"
#endif

// Some explanation is required here.
//
Expand Down
10 changes: 6 additions & 4 deletions Sources/CNIOLinux/include/ifaddrs-android.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,12 @@ struct ifaddrs {
unsigned int ifa_flags;
struct sockaddr* ifa_addr;
struct sockaddr* ifa_netmask;
union {
struct sockaddr *ifu_broadaddr;
struct sockaddr *ifu_dstaddr;
} ifa_ifu;
union {
struct sockaddr *ifu_broadaddr;
struct sockaddr *ifu_dstaddr;
} ifa_ifu;
/* Real ifaddrs has broadcast, point to point and data members.
* We don't need them (yet?). */
};

int android_getifaddrs(struct ifaddrs** result);
Expand Down
2 changes: 1 addition & 1 deletion Sources/CNIOLinux/shim.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#ifdef __linux__

#define _GNU_SOURCE
#include <c_nio_linux.h>
#include <CNIOLinux.h>
#include <pthread.h>
#include <sched.h>
#include <stdio.h>
Expand Down
3 changes: 2 additions & 1 deletion Sources/CNIOSHA1/c_nio_sha1.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- removed the _KERNEL include guards
- defined the __min_size macro inline
- included sys/types.h in c_nio_sha1.h
- included sys/endian.h on Android
*/
/* $KAME: sha1.c,v 1.5 2000/11/08 06:13:08 itojun Exp $ */
/*-
Expand Down Expand Up @@ -51,7 +52,7 @@
#include <sys/time.h>
#include <strings.h>

#include "include/c_nio_sha1.h"
#include "include/CNIOSHA1.h"

/* sanity check */
#if BYTE_ORDER != BIG_ENDIAN
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- removed the _KERNEL include guards
- defined the __min_size macro inline
- included sys/types.h in c_nio_sha1.h
- included sys/endian.h on Android
*/
/* $FreeBSD$ */
/* $KAME: sha1.h,v 1.5 2000/03/27 04:36:23 sumikawa Exp $ */
Expand Down Expand Up @@ -47,7 +48,6 @@
#ifndef _CRYPTO_SHA1_H_
#define _CRYPTO_SHA1_H_
#include <sys/types.h>

#ifdef __ANDROID__
#include <sys/endian.h>
#endif
Expand Down
6 changes: 4 additions & 2 deletions Sources/CNIOSHA1/update_and_patch_sha1.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ for f in sha1.c sha1.h; do
echo " - removed the _KERNEL include guards"
echo " - defined the __min_size macro inline"
echo " - included sys/types.h in c_nio_sha1.h"
echo " - included sys/endian.h on Android"
echo "*/"
curl -Ls "https://raw.githubusercontent.com/freebsd/freebsd/master/sys/crypto/$f"
) > "$here/c_nio_$f"
Expand All @@ -41,16 +42,17 @@ for f in sha1.c sha1.h; do
"$sed" -i \
-e "s/$func/c_nio_$func/g" \
-e 's#<sys/systm.h>#<strings.h>#g' \
-e 's#<crypto/sha1.h>#"include/c_nio_sha1.h"#g' \
-e 's#<crypto/sha1.h>#"include/CNIOSHA1.h"#g' \
-e 's%#ifdef _KERNEL%#define __min_size(x) static (x)%g' \
-e 's%#endif /\* _KERNEL \*/%%g' \
-e 's%__FBSDID("$FreeBSD$");%%g' \
"$here/c_nio_$f"
done
done

gsed -i $'/#define _CRYPTO_SHA1_H_/a #ifdef __ANDROID__\\\n#include <sys/endian.h>\\\n#endif' "$here/c_nio_sha1.h"
gsed -i '/#define _CRYPTO_SHA1_H_/a #include <sys/types.h>' "$here/c_nio_sha1.h"
mv "$here/c_nio_sha1.h" "$here/include/c_nio_sha1.h"
mv "$here/c_nio_sha1.h" "$here/include/CNIOSHA1.h"

tmp=$(mktemp -d /tmp/.test_compile_XXXXXX)

Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion scripts/sanity.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ for language in swift-or-c bash dtrace; do
matching_files=( -name '*' )
case "$language" in
swift-or-c)
exceptions=( -name c_nio_http_parser.c -o -name c_nio_http_parser.h -o -name cpp_magic.h -o -name Package.swift -o -name c_nio_sha1.h -o -name c_nio_sha1.c -o -name ifaddrs-android.c -o -name ifaddrs-android.h)
exceptions=( -name c_nio_http_parser.c -o -name c_nio_http_parser.h -o -name cpp_magic.h -o -name Package.swift -o -name CNIOSHA1.h -o -name c_nio_sha1.c -o -name ifaddrs-android.c -o -name ifaddrs-android.h)
matching_files=( -name '*.swift' -o -name '*.c' -o -name '*.h' )
cat > "$tmp" <<"EOF"
//===----------------------------------------------------------------------===//
Expand Down

0 comments on commit 9bae007

Please sign in to comment.