@lynx-js/lynx-library-headers 0.0.1-alpha.4 → 0.0.1-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # @lynx-js/lynx-library-headers
2
2
 
3
3
  Header package for Lynx embedder C/C++ API and weak N-API based native
4
- libraries. This package only provides headers; it does not scaffold, build, or
5
- register libraries.
4
+ libraries. This package provides headers and CMake helpers; it does not
5
+ scaffold, build, or register libraries.
6
6
 
7
7
  ## Usage
8
8
 
@@ -12,10 +12,22 @@ native target include directories:
12
12
  ```js
13
13
  const path = require('node:path');
14
14
  const headersRoot = path.dirname(
15
- require.resolve('@lynx-js/lynx-library-headers/package.json'),
15
+ require.resolve('@lynx-js/lynx-library-headers/package.json')
16
16
  );
17
17
  ```
18
18
 
19
+ For Windows Lynx native library builds, include the packaged CMake helper to
20
+ resolve the host runtime import library used by the generated native target:
21
+
22
+ ```cmake
23
+ include("${headersRoot}/cmake/lynx-library-headers.cmake")
24
+ lynx_link_lynxtron_runtime(your_target)
25
+ ```
26
+
27
+ The helper resolves the Windows import library from the runtime package
28
+ installed with `@lynx-js/lynx-library-headers`. You can override discovery with
29
+ `-DLYNXTRON_IMPORT_LIB=/path/to/lynxtron.dll.lib`.
30
+
19
31
  The published package contains:
20
32
 
21
33
  - Lynx embedder C API headers.
@@ -25,8 +37,10 @@ The published package contains:
25
37
  - Lynx value C API headers required by the embedder C API.
26
38
  - `lynx_extension.h` and `lynx/extension.h` convenience wrapper headers.
27
39
  - `lynx/registration.h` for generic embedder static registration helpers.
40
+ - `cmake/lynx-library-headers.cmake` for resolving Windows runtime import
41
+ libraries used by Lynx native library builds.
28
42
 
29
- Embedders and Lynxtron packages use static registration from the native library:
43
+ Lynx native libraries use static registration from the native library:
30
44
 
31
45
  ```cpp
32
46
  #include <lynx/registration.h>
@@ -47,7 +61,7 @@ Use `LYNX_REGISTER_NATIVE_MODULE` for Lynx weak N-API native modules and
47
61
  both features should call both macros, keeping the native module and element
48
62
  registrations separate.
49
63
 
50
- Lynxtron loads matching native libraries through its autolink flow; loading the
51
- library is enough for these static registrations to run.
64
+ A host runtime that loads the native library is enough for these static
65
+ registrations to run.
52
66
 
53
67
  Run `npm run copy-headers` in this package when updating the source headers.
@@ -0,0 +1,136 @@
1
+ if(NOT COMMAND lynx_resolve_node_package)
2
+ function(lynx_resolve_node_package PACKAGE_NAME OUT_VAR)
3
+ if(NOT DEFINED NODE_EXECUTABLE)
4
+ find_program(NODE_EXECUTABLE NAMES node)
5
+ endif()
6
+
7
+ if(NOT NODE_EXECUTABLE)
8
+ message(FATAL_ERROR "Unable to find node. Install Node.js before configuring Lynx library targets.")
9
+ endif()
10
+
11
+ if(NOT DEFINED LYNX_LIBRARY_PACKAGE_ROOT)
12
+ set(LYNX_LIBRARY_PACKAGE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")
13
+ endif()
14
+
15
+ execute_process(
16
+ COMMAND
17
+ "${NODE_EXECUTABLE}"
18
+ -p
19
+ "require('node:path').dirname(require.resolve('${PACKAGE_NAME}/package.json'))"
20
+ WORKING_DIRECTORY "${LYNX_LIBRARY_PACKAGE_ROOT}"
21
+ RESULT_VARIABLE NODE_PACKAGE_RESULT
22
+ OUTPUT_VARIABLE NODE_PACKAGE_ROOT
23
+ ERROR_VARIABLE NODE_PACKAGE_ERROR
24
+ OUTPUT_STRIP_TRAILING_WHITESPACE
25
+ )
26
+
27
+ if(NOT NODE_PACKAGE_RESULT EQUAL 0 OR NOT NODE_PACKAGE_ROOT)
28
+ string(REPLACE "\n" " " NODE_PACKAGE_ERROR "${NODE_PACKAGE_ERROR}")
29
+ message(FATAL_ERROR "Unable to resolve ${PACKAGE_NAME}. Run npm install first. ${NODE_PACKAGE_ERROR}")
30
+ endif()
31
+
32
+ set(${OUT_VAR} "${NODE_PACKAGE_ROOT}" PARENT_SCOPE)
33
+ endfunction()
34
+ endif()
35
+
36
+ get_filename_component(
37
+ LYNX_LIBRARY_HEADERS_PACKAGE_ROOT
38
+ "${CMAKE_CURRENT_LIST_DIR}/.."
39
+ ABSOLUTE
40
+ )
41
+
42
+ function(lynx_resolve_lynxtron_import_library OUT_VAR)
43
+ if(NOT WIN32)
44
+ set(${OUT_VAR} "" PARENT_SCOPE)
45
+ return()
46
+ endif()
47
+
48
+ if(DEFINED LYNXTRON_IMPORT_LIB)
49
+ file(TO_CMAKE_PATH "${LYNXTRON_IMPORT_LIB}" LYNXTRON_IMPORT_LIB_PATH)
50
+ if(NOT EXISTS "${LYNXTRON_IMPORT_LIB_PATH}")
51
+ message(FATAL_ERROR "LYNXTRON_IMPORT_LIB does not exist: ${LYNXTRON_IMPORT_LIB_PATH}")
52
+ endif()
53
+
54
+ set(${OUT_VAR} "${LYNXTRON_IMPORT_LIB_PATH}" PARENT_SCOPE)
55
+ return()
56
+ endif()
57
+
58
+ if(NOT DEFINED NODE_EXECUTABLE)
59
+ find_program(NODE_EXECUTABLE NAMES node)
60
+ endif()
61
+
62
+ if(NOT NODE_EXECUTABLE)
63
+ message(FATAL_ERROR "Unable to find node. Install Node.js before linking Lynxtron native libraries.")
64
+ endif()
65
+
66
+ if(NOT DEFINED LYNX_LIBRARY_PACKAGE_ROOT)
67
+ set(LYNX_LIBRARY_PACKAGE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")
68
+ endif()
69
+
70
+ execute_process(
71
+ COMMAND
72
+ "${NODE_EXECUTABLE}"
73
+ -e
74
+ "const path=require('node:path');const {createRequire}=require('node:module');try{const r=createRequire(path.join(process.argv[1],'package.json'));const p=r('@lynx-js/lynxtron/native-paths');process.stdout.write(p.importLibraryPath||'')}catch(e){process.exit(1)}"
75
+ "${LYNX_LIBRARY_HEADERS_PACKAGE_ROOT}"
76
+ WORKING_DIRECTORY "${LYNX_LIBRARY_PACKAGE_ROOT}"
77
+ RESULT_VARIABLE LYNXTRON_NATIVE_PATHS_RESULT
78
+ OUTPUT_VARIABLE LYNXTRON_IMPORT_LIB_FROM_PACKAGE
79
+ ERROR_QUIET
80
+ OUTPUT_STRIP_TRAILING_WHITESPACE
81
+ )
82
+
83
+ if(LYNXTRON_NATIVE_PATHS_RESULT EQUAL 0 AND LYNXTRON_IMPORT_LIB_FROM_PACKAGE)
84
+ file(TO_CMAKE_PATH "${LYNXTRON_IMPORT_LIB_FROM_PACKAGE}" LYNXTRON_IMPORT_LIB_FROM_PACKAGE_PATH)
85
+ if(EXISTS "${LYNXTRON_IMPORT_LIB_FROM_PACKAGE_PATH}")
86
+ set(${OUT_VAR} "${LYNXTRON_IMPORT_LIB_FROM_PACKAGE_PATH}" PARENT_SCOPE)
87
+ return()
88
+ endif()
89
+ endif()
90
+
91
+ execute_process(
92
+ COMMAND
93
+ "${NODE_EXECUTABLE}"
94
+ -p
95
+ "const path=require('node:path');const {createRequire}=require('node:module');const r=createRequire(path.join(process.argv[1],'package.json'));let p;try{p=r.resolve('@lynx-js/lynxtron/package.json')}catch(e){p=r.resolve('@lynx-js/lynxtron')}path.dirname(p)"
96
+ "${LYNX_LIBRARY_HEADERS_PACKAGE_ROOT}"
97
+ WORKING_DIRECTORY "${LYNX_LIBRARY_PACKAGE_ROOT}"
98
+ RESULT_VARIABLE LYNXTRON_PACKAGE_ROOT_RESULT
99
+ OUTPUT_VARIABLE LYNXTRON_PACKAGE_ROOT
100
+ ERROR_VARIABLE LYNXTRON_PACKAGE_ROOT_ERROR
101
+ OUTPUT_STRIP_TRAILING_WHITESPACE
102
+ )
103
+
104
+ if(NOT LYNXTRON_PACKAGE_ROOT_RESULT EQUAL 0 OR NOT LYNXTRON_PACKAGE_ROOT)
105
+ string(REPLACE "\n" " " LYNXTRON_PACKAGE_ROOT_ERROR "${LYNXTRON_PACKAGE_ROOT_ERROR}")
106
+ message(FATAL_ERROR "Unable to resolve @lynx-js/lynxtron. Run npm install first. ${LYNXTRON_PACKAGE_ROOT_ERROR}")
107
+ endif()
108
+
109
+ set(LYNXTRON_IMPORT_LIB_CANDIDATES
110
+ "${LYNXTRON_PACKAGE_ROOT}/dist/lynxtron.dll.lib"
111
+ "${LYNXTRON_PACKAGE_ROOT}/dist/win32/x64/lynxtron.dll.lib"
112
+ "${LYNXTRON_PACKAGE_ROOT}/dist/win32/x64/lynxtron/lynxtron.dll.lib"
113
+ )
114
+
115
+ foreach(LYNXTRON_IMPORT_LIB_CANDIDATE IN LISTS LYNXTRON_IMPORT_LIB_CANDIDATES)
116
+ if(EXISTS "${LYNXTRON_IMPORT_LIB_CANDIDATE}")
117
+ set(${OUT_VAR} "${LYNXTRON_IMPORT_LIB_CANDIDATE}" PARENT_SCOPE)
118
+ return()
119
+ endif()
120
+ endforeach()
121
+
122
+ message(FATAL_ERROR
123
+ "Unable to find lynxtron.dll.lib under @lynx-js/lynxtron. "
124
+ "Run npm install so @lynx-js/lynxtron downloads the Windows runtime, "
125
+ "or pass -DLYNXTRON_IMPORT_LIB=/absolute/path/to/lynxtron.dll.lib."
126
+ )
127
+ endfunction()
128
+
129
+ function(lynx_link_lynxtron_runtime TARGET_NAME)
130
+ if(NOT WIN32)
131
+ return()
132
+ endif()
133
+
134
+ lynx_resolve_lynxtron_import_library(LYNXTRON_RESOLVED_IMPORT_LIB)
135
+ target_link_libraries("${TARGET_NAME}" PRIVATE "${LYNXTRON_RESOLVED_IMPORT_LIB}")
136
+ endfunction()
@@ -21,6 +21,7 @@ LYNX_CAPI_EXPORT const char* lynx_env_get_icu_data_path();
21
21
 
22
22
  // Lynx devtools
23
23
  typedef void (*lynx_env_open_card_callback)(void* user_data, const char* url);
24
+ typedef void (*lynx_env_close_card_callback)(void* user_data);
24
25
 
25
26
  LYNX_CAPI_EXPORT void lynx_env_set_devtool_app_info(const char* name,
26
27
  const char* value);
@@ -29,6 +30,8 @@ LYNX_CAPI_EXPORT int lynx_env_is_devtool_enabled();
29
30
  LYNX_CAPI_EXPORT int lynx_env_connect_devtool(const char* url);
30
31
  LYNX_CAPI_EXPORT void lynx_env_set_open_card_callback(
31
32
  lynx_env_open_card_callback callback, void* user_data);
33
+ LYNX_CAPI_EXPORT void lynx_env_set_close_card_callback(
34
+ lynx_env_close_card_callback callback, void* user_data);
32
35
  // logbox
33
36
  LYNX_CAPI_EXPORT void lynx_env_enable_logbox(int enable);
34
37
  LYNX_CAPI_EXPORT int lynx_env_is_logbox_enabled();
@@ -21,6 +21,7 @@ LYNX_CAPI_EXPORT const char* lynx_env_get_icu_data_path();
21
21
 
22
22
  // Lynx devtools
23
23
  typedef void (*lynx_env_open_card_callback)(void* user_data, const char* url);
24
+ typedef void (*lynx_env_close_card_callback)(void* user_data);
24
25
 
25
26
  LYNX_CAPI_EXPORT void lynx_env_set_devtool_app_info(const char* name,
26
27
  const char* value);
@@ -29,6 +30,8 @@ LYNX_CAPI_EXPORT int lynx_env_is_devtool_enabled();
29
30
  LYNX_CAPI_EXPORT int lynx_env_connect_devtool(const char* url);
30
31
  LYNX_CAPI_EXPORT void lynx_env_set_open_card_callback(
31
32
  lynx_env_open_card_callback callback, void* user_data);
33
+ LYNX_CAPI_EXPORT void lynx_env_set_close_card_callback(
34
+ lynx_env_close_card_callback callback, void* user_data);
32
35
  // logbox
33
36
  LYNX_CAPI_EXPORT void lynx_env_enable_logbox(int enable);
34
37
  LYNX_CAPI_EXPORT int lynx_env_is_logbox_enabled();
@@ -26,6 +26,8 @@ class LynxEnv {
26
26
  bool ConnectDevtool(const char* url);
27
27
  void SetOpenCardCallback(lynx_env_open_card_callback callback,
28
28
  void* user_data);
29
+ void SetCloseCardCallback(lynx_env_close_card_callback callback,
30
+ void* user_data);
29
31
  void SetLogboxEnabled(bool enable);
30
32
  bool IsLogboxEnabled();
31
33
  void RegisterNativeModule(const std::string& module_name,
@@ -78,6 +80,11 @@ inline void LynxEnv::SetOpenCardCallback(lynx_env_open_card_callback callback,
78
80
  lynx_env_set_open_card_callback(callback, user_data);
79
81
  }
80
82
 
83
+ inline void LynxEnv::SetCloseCardCallback(lynx_env_close_card_callback callback,
84
+ void* user_data) {
85
+ lynx_env_set_close_card_callback(callback, user_data);
86
+ }
87
+
81
88
  inline void LynxEnv::SetLogboxEnabled(bool enable) {
82
89
  lynx_env_enable_logbox(enable);
83
90
  }
@@ -26,6 +26,8 @@ class LynxEnv {
26
26
  bool ConnectDevtool(const char* url);
27
27
  void SetOpenCardCallback(lynx_env_open_card_callback callback,
28
28
  void* user_data);
29
+ void SetCloseCardCallback(lynx_env_close_card_callback callback,
30
+ void* user_data);
29
31
  void SetLogboxEnabled(bool enable);
30
32
  bool IsLogboxEnabled();
31
33
  void RegisterNativeModule(const std::string& module_name,
@@ -78,6 +80,11 @@ inline void LynxEnv::SetOpenCardCallback(lynx_env_open_card_callback callback,
78
80
  lynx_env_set_open_card_callback(callback, user_data);
79
81
  }
80
82
 
83
+ inline void LynxEnv::SetCloseCardCallback(lynx_env_close_card_callback callback,
84
+ void* user_data) {
85
+ lynx_env_set_close_card_callback(callback, user_data);
86
+ }
87
+
81
88
  inline void LynxEnv::SetLogboxEnabled(bool enable) {
82
89
  lynx_env_enable_logbox(enable);
83
90
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lynx-js/lynx-library-headers",
3
3
  "author": "Lynxtron Authors",
4
- "version": "0.0.1-alpha.4",
4
+ "version": "0.0.1-alpha.7",
5
5
  "type": "module",
6
6
  "description": "Lynx embedder C/C++ API and weak N-API headers for native libraries",
7
7
  "repository": {
@@ -21,8 +21,12 @@
21
21
  ],
22
22
  "files": [
23
23
  "include/**/*",
24
+ "cmake/**/*",
24
25
  "README.md"
25
26
  ],
27
+ "dependencies": {
28
+ "@lynx-js/lynxtron": "0.0.1-alpha.7"
29
+ },
26
30
  "engines": {
27
31
  "node": ">=18"
28
32
  }