diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 0073f3cb97..712c876b3b 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -2,7 +2,7 @@ name: lwnode actions on: [ push, pull_request ] jobs: build_lwnode: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 timeout-minutes: 30 strategy: fail-fast: false @@ -24,7 +24,7 @@ jobs: - name: Install Packages run: | sudo apt update - sudo apt install -y ninja-build gcc-multilib g++-multilib sed clang-format-8 + sudo apt install -y ninja-build gcc-multilib g++-multilib sed - name: Build lwnode run: | ./configure.py ${{ matrix.config }} @@ -40,7 +40,7 @@ jobs: test/parallel test/regression popd cctest: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 timeout-minutes: 30 steps: - name: Checkout source @@ -117,17 +117,20 @@ jobs: name: tizen_std_${{ matrix.profile }} path: /home/runner/GBS-ROOT/${{ matrix.profile }}/local/repos/${{ matrix.profile }}/armv7l/RPMS/ lint: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 timeout-minutes: 30 strategy: fail-fast: false steps: - name: Checkout source uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' - name: Install Packages run: | sudo apt update sudo apt install -y ninja-build gcc-multilib g++-multilib sed clang-format-8 - name: Lint CC run: | - python2 ./tools/check_tidy.py --filter=$(paste -sd, tools/lint-filters.txt) + tools/check_tidy.py --filter=$(paste -sd, tools/lint-filters.txt) diff --git a/deps/node/lib/internal/bootstrap/switches/is_main_thread.js b/deps/node/lib/internal/bootstrap/switches/is_main_thread.js index e68ddd3bd5..b64b362e15 100644 --- a/deps/node/lib/internal/bootstrap/switches/is_main_thread.js +++ b/deps/node/lib/internal/bootstrap/switches/is_main_thread.js @@ -41,19 +41,27 @@ const { guessHandleType } = internalBinding('util'); function createWritableStdioStream(fd) { let stream; // Note stream._type is used for test-module-load-list.js + + // @lwnode + if (process.lwnode) { + // The handle type guessed of stdout(1) or stderr(2) can be PIPE on tizen. + if (process.lwnode.hasSystemInfo('tizen') && (fd === 1 || fd === 2)) { + const { Writable } = require('stream'); + stream = new Writable({ + write(chunk, encoding, callback) { + process.lwnode._print(chunk.toString()); + callback(); + } + }); + // For supporting legacy API we put the FD here. + stream.fd = fd; + stream._isStdio = true; + return stream; + } + } + switch (guessHandleType(fd)) { case 'TTY': - // @lwnode - if (process.lwnode) { - const { Writable } = require('stream'); - stream = new Writable({ - write(chunk, encoding, callback) { - process.lwnode._print(chunk.toString()); - callback(); - } - }); - break; - } const tty = require('tty'); stream = new tty.WriteStream(fd); stream._type = 'tty'; diff --git a/deps/node/src/lwnode/aul-event-receiver.cc b/deps/node/src/lwnode/aul-event-receiver.cc index f556c41be3..89b76ab68a 100644 --- a/deps/node/src/lwnode/aul-event-receiver.cc +++ b/deps/node/src/lwnode/aul-event-receiver.cc @@ -75,16 +75,17 @@ bool AULEventReceiver::start(int argc, char* argv[]) { if (hasAulArguments(argc, argv)) { isEventReceiverRunning_ = true; - initLoggerOutput(); - - aul_launch_init(aulEventHandler, nullptr); - aul_launch_argv_handler(argc, argv); char appid[kMaxPackageNameSize + 1]; aul_app_get_appid_bypid(getpid(), appid, kMaxPackageNameSize); appid_ = appid; - LWNODE_DEV_LOG("appid: ", appid_); + initLoggerOutput(appid_); + + LWNODE_DEV_LOG("appid:", appid_); + + aul_launch_init(aulEventHandler, nullptr); + aul_launch_argv_handler(argc, argv); char* path = app_get_resource_path(); if (uv_chdir(path) != 0) { @@ -110,9 +111,9 @@ bool AULEventReceiver::isEventReceiverRunning() { return isEventReceiverRunning_; } -void AULEventReceiver::initLoggerOutput() { - if (!appid_.empty()) { - LogKind::user()->tag = appid_; +void AULEventReceiver::initLoggerOutput(const std::string tag) { + if (!tag.empty()) { + LogKind::user()->tag = tag; } LogOption::setDefaultOutputInstantiator([&]() { diff --git a/deps/node/src/lwnode/aul-event-receiver.h b/deps/node/src/lwnode/aul-event-receiver.h index ac20891ccb..39337e368e 100644 --- a/deps/node/src/lwnode/aul-event-receiver.h +++ b/deps/node/src/lwnode/aul-event-receiver.h @@ -37,7 +37,7 @@ class AULEventReceiver { } #endif - void initLoggerOutput(); + void initLoggerOutput(const std::string tag = ""); bool isEventReceiverRunning(); private: diff --git a/deps/node/src/module_wrap.cc b/deps/node/src/module_wrap.cc index f778b089dc..ec2e1b379b 100644 --- a/deps/node/src/module_wrap.cc +++ b/deps/node/src/module_wrap.cc @@ -558,8 +558,9 @@ static MaybeLocal ImportModuleDynamically( ->Uint32Value(context) .ToChecked(); if (type == ScriptType::kScript) { - contextify::ContextifyScript* wrap = env->id_to_script_map.find(id)->second; - object = wrap->object(); + auto it = env->id_to_function_map.find(id); + CHECK_NE(it, env->id_to_function_map.end()); + object = it->second->object(); } else if (type == ScriptType::kModule) { ModuleWrap* wrap = ModuleWrap::GetFromID(env, id); object = wrap->object(); diff --git a/deps/node/src/node_crypto.cc b/deps/node/src/node_crypto.cc index ed886abd74..dae3372889 100644 --- a/deps/node/src/node_crypto.cc +++ b/deps/node/src/node_crypto.cc @@ -4579,11 +4579,11 @@ static unsigned int GetBytesOfRS(const ManagedEVPPKey& pkey) { int bits, base_id = EVP_PKEY_base_id(pkey.get()); if (base_id == EVP_PKEY_DSA) { - DSA* dsa_key = EVP_PKEY_get0_DSA(pkey.get()); + const DSA* dsa_key = EVP_PKEY_get0_DSA(pkey.get()); // Both r and s are computed mod q, so their width is limited by that of q. bits = BN_num_bits(DSA_get0_q(dsa_key)); } else if (base_id == EVP_PKEY_EC) { - EC_KEY* ec_key = EVP_PKEY_get0_EC_KEY(pkey.get()); + const EC_KEY* ec_key = EVP_PKEY_get0_EC_KEY(pkey.get()); const EC_GROUP* ec_group = EC_KEY_get0_group(ec_key); bits = EC_GROUP_order_bits(ec_group); } else { diff --git a/deps/node/src/node_file.cc b/deps/node/src/node_file.cc index de5c455c7a..56dc1507ea 100644 --- a/deps/node/src/node_file.cc +++ b/deps/node/src/node_file.cc @@ -1455,7 +1455,7 @@ int MKDirpAsync(uv_loop_t* loop, std::string dirname = path.substr(0, path.find_last_of(kPathSeparator)); if (dirname != path) { - req_wrap->continuation_data()->PushPath(std::move(path)); + req_wrap->continuation_data()->PushPath(path); req_wrap->continuation_data()->PushPath(std::move(dirname)); } else if (req_wrap->continuation_data()->paths().size() == 0) { err = UV_EEXIST; diff --git a/deps/node/src/node_messaging.cc b/deps/node/src/node_messaging.cc index 17ca38b76c..2bfd489b55 100644 --- a/deps/node/src/node_messaging.cc +++ b/deps/node/src/node_messaging.cc @@ -327,7 +327,7 @@ class SerializerDelegate : public ValueSerializer::Delegate { std::vector> nested_transferables; if (!host_objects_[i]->NestedTransferables().To(&nested_transferables)) return Nothing(); - for (auto nested_transferable : nested_transferables) { + for (auto& nested_transferable : nested_transferables) { if (std::find(host_objects_.begin(), host_objects_.end(), nested_transferable) == host_objects_.end()) { diff --git a/packaging/lwnode.spec b/packaging/lwnode.spec index 26abeb4205..b9c1d62ff7 100644 --- a/packaging/lwnode.spec +++ b/packaging/lwnode.spec @@ -37,14 +37,24 @@ BuildRequires: pkgconfig(glib-2.0) BuildRequires: nghttp2-devel BuildRequires: pkgconfig(libcares) -%if (0%{?tizen_version_major} >= 6) +%if (0%{?tizen_version_major} >= 8) +BuildRequires: pkgconfig(openssl3) +%endif + +%if (0%{?tizen_version_major} == 7 || 0%{?tizen_version_major} == 6) BuildRequires: pkgconfig(openssl1.1) -%else - %if (0%{?tizen_version_major} == 5) && (0%{?tizen_version_minor} == 5) +%endif + +%if (0%{?tizen_version_major} == 5) +%if (0%{?tizen_version_minor} >= 5) BuildRequires: pkgconfig(openssl1.1) - %else +%else +BuildRequires: pkgconfig(openssl) +%endif +%endif + +%if (0%{?tizen_version_major} < 5) BuildRequires: pkgconfig(openssl) - %endif %endif %if 0%{?asan} == 1 diff --git a/src/api-environment.cc b/src/api-environment.cc index f26ce597be..3d70b801f6 100644 --- a/src/api-environment.cc +++ b/src/api-environment.cc @@ -777,8 +777,8 @@ MaybeLocal v8::RegExp::Exec(Local context, } auto vector = ValueVectorRef::create(); - for (auto tokens : result.m_matchResults) { - for (auto token : tokens) { + for (auto& tokens : result.m_matchResults) { + for (auto& token : tokens) { auto match = subject->substring(token.m_start, token.m_end); vector->pushBack(match); } diff --git a/src/api-exception.cc b/src/api-exception.cc index 449aef35ec..e3e48dd68a 100644 --- a/src/api-exception.cc +++ b/src/api-exception.cc @@ -82,18 +82,16 @@ v8::TryCatch::~TryCatch() { } void* v8::TryCatch::operator new(size_t) { - LWNODE_UNIMPLEMENT; - return new TryCatch(nullptr); + std::abort(); } void* v8::TryCatch::operator new[](size_t) { - LWNODE_UNIMPLEMENT; - return new TryCatch(nullptr); + std::abort(); } void v8::TryCatch::operator delete(void*, size_t) { - LWNODE_UNIMPLEMENT; + std::abort(); } void v8::TryCatch::operator delete[](void*, size_t) { - LWNODE_UNIMPLEMENT; + std::abort(); } bool v8::TryCatch::HasCaught() const { diff --git a/src/api-handles.cc b/src/api-handles.cc index 71d99ef75b..494d7a694f 100644 --- a/src/api-handles.cc +++ b/src/api-handles.cc @@ -43,13 +43,10 @@ HandleScope::~HandleScope() { } void* HandleScope::operator new(size_t) { - LWNODE_UNIMPLEMENT; - // TODO: abort : only stack is available - return new HandleScope(nullptr); + std::abort(); } void* HandleScope::operator new[](size_t) { - LWNODE_UNIMPLEMENT; - return new HandleScope(nullptr); + std::abort(); } void HandleScope::operator delete(void*, size_t) { LWNODE_UNIMPLEMENT; @@ -120,18 +117,16 @@ i::Address* EscapableHandleScope::Escape(i::Address* escape_value) { } void* EscapableHandleScope::operator new(size_t) { - LWNODE_UNIMPLEMENT; - return new EscapableHandleScope(nullptr); + std::abort(); } void* EscapableHandleScope::operator new[](size_t) { - LWNODE_UNIMPLEMENT; - return new EscapableHandleScope(nullptr); + std::abort(); } void EscapableHandleScope::operator delete(void*, size_t) { - LWNODE_UNIMPLEMENT; + std::abort(); } void EscapableHandleScope::operator delete[](void*, size_t) { - LWNODE_UNIMPLEMENT; + std::abort(); } SealHandleScope::SealHandleScope(Isolate* isolate) @@ -147,18 +142,16 @@ SealHandleScope::~SealHandleScope() { } void* SealHandleScope::operator new(size_t) { - LWNODE_UNIMPLEMENT; - return new SealHandleScope(nullptr); + std::abort(); } void* SealHandleScope::operator new[](size_t) { - LWNODE_UNIMPLEMENT; - return new SealHandleScope(nullptr); + std::abort(); } void SealHandleScope::operator delete(void*, size_t) { - LWNODE_UNIMPLEMENT; + std::abort(); } void SealHandleScope::operator delete[](void*, size_t) { - LWNODE_UNIMPLEMENT; + std::abort(); } void Context::Enter() { diff --git a/src/api/engine.h b/src/api/engine.h index 6a99b63f1a..a6cd0a19df 100644 --- a/src/api/engine.h +++ b/src/api/engine.h @@ -88,7 +88,7 @@ class GCHeap : public gc { void* data = nullptr; }; typedef GC_word GC_heap_pointer; - typedef std::pair HeapSegment; + typedef std::pair HeapSegment; void acquire(void* address, Kind kind, void* data); void release(void* address, Kind kind); diff --git a/src/api/utils/logger/flags.cc b/src/api/utils/logger/flags.cc index eb78abf47f..b9005883c0 100644 --- a/src/api/utils/logger/flags.cc +++ b/src/api/utils/logger/flags.cc @@ -96,7 +96,7 @@ void Flags::add(const std::string& userOption) { std::string optionValues = userOption.substr(userOption.find_first_of('=') + 1); // +1 for skipping '=' auto tokens = strSplit(optionValues, ','); - for (auto token : tokens) { + for (auto& token : tokens) { flag->addValue(token); } } diff --git a/src/api/utils/logger/logger-impl.cc b/src/api/utils/logger/logger-impl.cc index a1e88b2620..dbfff2c32a 100644 --- a/src/api/utils/logger/logger-impl.cc +++ b/src/api/utils/logger/logger-impl.cc @@ -167,7 +167,7 @@ Logger& Logger::flush() { void StdOut::flush(std::stringstream& stream, std::shared_ptr config) { - std::cerr << stream.str(); + fprintf(stderr, "%s", stream.str().c_str()); } // --- Option --- diff --git a/src/api/utils/logger/logger-util.h b/src/api/utils/logger/logger-util.h index f3f2acaff5..20173dc0ce 100644 --- a/src/api/utils/logger/logger-util.h +++ b/src/api/utils/logger/logger-util.h @@ -16,8 +16,10 @@ #include +#ifndef __FILE_NAME__ #define __FILE_NAME__ \ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) +#endif #define __FUNCTION_NAME__ getPrettyFunctionName(__PRETTY_FUNCTION__) diff --git a/src/api/utils/logger/logger.cc b/src/api/utils/logger/logger.cc index ab6d6686be..880fce1a7f 100644 --- a/src/api/utils/logger/logger.cc +++ b/src/api/utils/logger/logger.cc @@ -26,6 +26,9 @@ void DlogOut::flush(std::stringstream& ss, std::shared_ptr config) { auto c = config ? std::static_pointer_cast(config) : LogKind::lwnode(); + + // TODO: handle the case where users manually select a logging method. + #ifdef HOST_TIZEN dlog_print(DLOG_INFO, c->tag.c_str(), "%s", ss.str().c_str()); #else diff --git a/src/api/utils/sf-vector.h b/src/api/utils/sf-vector.h index 04395a2d89..941cd05c50 100644 --- a/src/api/utils/sf-vector.h +++ b/src/api/utils/sf-vector.h @@ -148,7 +148,6 @@ class Vector { void erase(size_t start, size_t end) { if (start == end) return; - assert(start >= 0); assert(end <= m_size); size_t howMuch = end - start; @@ -351,7 +350,6 @@ class Vector { size_t end = start + sizeToErase; assert(start < end); - assert(start >= 0); assert(end <= m_size); size_t c = end - start; @@ -384,7 +382,6 @@ class Vector { size_t end = start + sizeToErase; assert(start < end); - assert(start >= 0); assert(end <= m_size); size_t c = end - start; diff --git a/tools/check_tidy.py b/tools/check_tidy.py index 398062f955..61ad258afb 100755 --- a/tools/check_tidy.py +++ b/tools/check_tidy.py @@ -16,8 +16,6 @@ # note: this uses `black` for formatting. -from __future__ import print_function - import os import subprocess import sys @@ -96,7 +94,9 @@ def report_error(msg, line=None): with open(file, "r") as f: original = f.readlines() - formatted = subprocess.check_output([clang_format, "-style=file", file]) + formatted = subprocess.check_output( + [clang_format, "-style=file", file], encoding="utf-8" + ) if update: with open(file, "w") as f: diff --git a/tools/patch/01-escargot-gcc13-build-error.patch b/tools/patch/01-escargot-gcc13-build-error.patch new file mode 100644 index 0000000000..c9190764d8 --- /dev/null +++ b/tools/patch/01-escargot-gcc13-build-error.patch @@ -0,0 +1,12 @@ +diff --git raw/src/api/EscargotPublic.h fix/src/api/EscargotPublic.h +index 3a8362a9..6fc888d1 100644 +--- raw/src/api/EscargotPublic.h ++++ fix/src/api/EscargotPublic.h +@@ -30,6 +30,7 @@ + + #include + #include ++#include + #include + #include + #include diff --git a/tools/release.sh b/tools/release.sh index a5e9296d8b..74ec517eca 100755 --- a/tools/release.sh +++ b/tools/release.sh @@ -23,6 +23,10 @@ git submodule update --init pushd deps/escargot git submodule update --init third_party +# Patch update code for escargot +find ../../tools/patch -type f -name "*escargot*.patch" \ + -exec patch -p1 --forward -r /dev/null -i {} \; + # Patch update code for wasm pushd third_party/wasm/wabt patch -p0 --forward -r /dev/null -i ../../../tools/test/wasm-js/wabt_patch