Skip to content

Commit 746595e

Browse files
committed
Update cxx_impl and unity build for the regenerated C API
Picks up the C API where each type's C++ <-> C converters live in the *_c.h that declares it, and refreshes the unity translation unit that the macOS/iOS SwiftPM plugin builds: the generated capi sources are re-sorted and the newly generated ones (dialog, geometry, placement) are included. codegen.py stops emitting shortcut_manager_macos.mm in the platform list, since cnativeapi.mm already includes it in its preamble to shadow Carbon's global Point before anything introduces `using namespace nativeapi;`. The Dart bindings are unchanged: the converters sit behind #ifdef __cplusplus, so ffigen sees exactly the same C ABI as before.
1 parent 1c9a1c6 commit 746595e

6 files changed

Lines changed: 40 additions & 12 deletions

File tree

packages/cnativeapi/codegen.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,12 @@ def update_nativeapi_mm(nativeapi_path, cxx_impl_dir, platform):
311311
if "/capi/" in file_str:
312312
capi_files.append(rel_path)
313313
elif f"/platform/{platform}/" in file_str:
314+
# The Carbon-based shortcut implementation is `#include`d directly in
315+
# the cnativeapi.mm preamble (before the "Include source files" marker)
316+
# so it can shadow Carbon's global `Point` before any file introduces
317+
# `using namespace nativeapi;`. Skip it here to avoid including it twice.
318+
if platform == "macos" and "shortcut_manager_macos.mm" in file_str:
319+
continue
314320
platform_files.append(rel_path)
315321
elif "/foundation/" in file_str:
316322
foundation_files.append(rel_path)

packages/cnativeapi/ios/cnativeapi/Package.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ let package = Package(
2424
dependencies: [],
2525
path: "Sources/cnativeapi",
2626
sources: [
27-
"cnativeapi.mm"
27+
"cnativeapi.mm",
28+
// The C API translation units (src/capi/*.cpp) need not be
29+
// listed here: cnativeapi.mm #includes them into a single unity
30+
// translation unit, and their conversion helpers are defined in
31+
// the *_c.h that owns each type, so no redefinition errors occur.
2832
],
2933
publicHeadersPath: "include",
3034
cxxSettings: [

packages/cnativeapi/ios/cnativeapi/Sources/cnativeapi/cnativeapi.mm

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,26 @@
55
#import <UIKit/UIKit.h>
66
#import <Foundation/Foundation.h>
77

8+
// NOTE: The C API translation units (cxx_impl/src/capi/*.cpp) are compiled in
9+
// this unity translation unit. Their C++ <-> C conversion helpers are defined in
10+
// the *_c.h header that owns each type, so every *_c.cpp shares one definition
11+
// and merging them here raises no redefinition errors.
12+
813
// Include source files
914
#include "../../../../cxx_impl/src/capi/accessibility_manager_c.cpp"
1015
#include "../../../../cxx_impl/src/capi/application_c.cpp"
11-
#include "../../../../cxx_impl/src/capi/launch_at_login_c.cpp"
1216
#include "../../../../cxx_impl/src/capi/color_c.cpp"
17+
#include "../../../../cxx_impl/src/capi/dialog_c.cpp"
1318
#include "../../../../cxx_impl/src/capi/display_c.cpp"
1419
#include "../../../../cxx_impl/src/capi/display_manager_c.cpp"
20+
#include "../../../../cxx_impl/src/capi/geometry_c.cpp"
1521
#include "../../../../cxx_impl/src/capi/image_c.cpp"
16-
#include "../../../../cxx_impl/src/capi/dialog_c.cpp"
1722
#include "../../../../cxx_impl/src/capi/keyboard_c.cpp"
1823
#include "../../../../cxx_impl/src/capi/keyboard_monitor_c.cpp"
24+
#include "../../../../cxx_impl/src/capi/launch_at_login_c.cpp"
1925
#include "../../../../cxx_impl/src/capi/menu_c.cpp"
2026
#include "../../../../cxx_impl/src/capi/message_dialog_c.cpp"
27+
#include "../../../../cxx_impl/src/capi/placement_c.cpp"
2128
#include "../../../../cxx_impl/src/capi/positioning_strategy_c.cpp"
2229
#include "../../../../cxx_impl/src/capi/preferences_c.cpp"
2330
#include "../../../../cxx_impl/src/capi/secure_storage_c.cpp"
@@ -30,13 +37,13 @@
3037
#include "../../../../cxx_impl/src/capi/window_c.cpp"
3138
#include "../../../../cxx_impl/src/capi/window_manager_c.cpp"
3239
#include "../../../../cxx_impl/src/platform/ios/accessibility_manager_ios.mm"
33-
#include "../../../../cxx_impl/src/platform/ios/dispatcher_ios.mm"
3440
#include "../../../../cxx_impl/src/platform/ios/application_ios.mm"
35-
#include "../../../../cxx_impl/src/platform/ios/launch_at_login_ios.mm"
41+
#include "../../../../cxx_impl/src/platform/ios/dispatcher_ios.mm"
3642
#include "../../../../cxx_impl/src/platform/ios/display_ios.mm"
3743
#include "../../../../cxx_impl/src/platform/ios/display_manager_ios.mm"
3844
#include "../../../../cxx_impl/src/platform/ios/image_ios.mm"
3945
#include "../../../../cxx_impl/src/platform/ios/keyboard_monitor_ios.mm"
46+
#include "../../../../cxx_impl/src/platform/ios/launch_at_login_ios.mm"
4047
#include "../../../../cxx_impl/src/platform/ios/menu_ios.mm"
4148
#include "../../../../cxx_impl/src/platform/ios/message_dialog_ios.mm"
4249
#include "../../../../cxx_impl/src/platform/ios/preferences_ios.mm"

packages/cnativeapi/macos/cnativeapi/Package.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ let package = Package(
2424
dependencies: [],
2525
path: "Sources/cnativeapi",
2626
sources: [
27-
"cnativeapi.mm"
27+
"cnativeapi.mm",
28+
// The C API translation units (src/capi/*.cpp) need not be
29+
// listed here: cnativeapi.mm #includes them into a single unity
30+
// translation unit, and their conversion helpers are defined in
31+
// the *_c.h that owns each type, so no redefinition errors occur.
2832
],
2933
publicHeadersPath: "include",
3034
cxxSettings: [

packages/cnativeapi/macos/cnativeapi/Sources/cnativeapi/cnativeapi.mm

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,31 @@
44
// Import Cocoa framework
55
#import <Cocoa/Cocoa.h>
66

7-
// Include Carbon-based shortcut implementation before any C API translation units
7+
// Include Carbon-based shortcut implementation before any platform translation units
88
// that introduce `using namespace nativeapi;`, otherwise Carbon's global `Point`
99
// collides with nativeapi::Point in this unified Objective-C++ translation unit.
1010
#include "../../../../cxx_impl/src/platform/macos/shortcut_manager_macos.mm"
1111

12+
// NOTE: The C API translation units (cxx_impl/src/capi/*.cpp) are compiled in
13+
// this unity translation unit. Their C++ <-> C conversion helpers are defined in
14+
// the *_c.h header that owns each type, so every *_c.cpp shares one definition
15+
// and merging them here raises no redefinition errors.
16+
1217
// Include source files
1318
#include "../../../../cxx_impl/src/capi/accessibility_manager_c.cpp"
1419
#include "../../../../cxx_impl/src/capi/application_c.cpp"
15-
#include "../../../../cxx_impl/src/capi/launch_at_login_c.cpp"
1620
#include "../../../../cxx_impl/src/capi/color_c.cpp"
21+
#include "../../../../cxx_impl/src/capi/dialog_c.cpp"
1722
#include "../../../../cxx_impl/src/capi/display_c.cpp"
1823
#include "../../../../cxx_impl/src/capi/display_manager_c.cpp"
24+
#include "../../../../cxx_impl/src/capi/geometry_c.cpp"
1925
#include "../../../../cxx_impl/src/capi/image_c.cpp"
20-
#include "../../../../cxx_impl/src/capi/dialog_c.cpp"
2126
#include "../../../../cxx_impl/src/capi/keyboard_c.cpp"
2227
#include "../../../../cxx_impl/src/capi/keyboard_monitor_c.cpp"
28+
#include "../../../../cxx_impl/src/capi/launch_at_login_c.cpp"
2329
#include "../../../../cxx_impl/src/capi/menu_c.cpp"
2430
#include "../../../../cxx_impl/src/capi/message_dialog_c.cpp"
31+
#include "../../../../cxx_impl/src/capi/placement_c.cpp"
2532
#include "../../../../cxx_impl/src/capi/positioning_strategy_c.cpp"
2633
#include "../../../../cxx_impl/src/capi/preferences_c.cpp"
2734
#include "../../../../cxx_impl/src/capi/secure_storage_c.cpp"
@@ -34,13 +41,13 @@
3441
#include "../../../../cxx_impl/src/capi/window_c.cpp"
3542
#include "../../../../cxx_impl/src/capi/window_manager_c.cpp"
3643
#include "../../../../cxx_impl/src/platform/macos/accessibility_manager_macos.mm"
37-
#include "../../../../cxx_impl/src/platform/macos/dispatcher_macos.mm"
3844
#include "../../../../cxx_impl/src/platform/macos/application_macos.mm"
39-
#include "../../../../cxx_impl/src/platform/macos/launch_at_login_macos.mm"
45+
#include "../../../../cxx_impl/src/platform/macos/dispatcher_macos.mm"
4046
#include "../../../../cxx_impl/src/platform/macos/display_macos.mm"
4147
#include "../../../../cxx_impl/src/platform/macos/display_manager_macos.mm"
4248
#include "../../../../cxx_impl/src/platform/macos/image_macos.mm"
4349
#include "../../../../cxx_impl/src/platform/macos/keyboard_monitor_macos.mm"
50+
#include "../../../../cxx_impl/src/platform/macos/launch_at_login_macos.mm"
4451
#include "../../../../cxx_impl/src/platform/macos/menu_macos.mm"
4552
#include "../../../../cxx_impl/src/platform/macos/message_dialog_macos.mm"
4653
#include "../../../../cxx_impl/src/platform/macos/preferences_macos.mm"

0 commit comments

Comments
 (0)