node-taglib2 icon indicating copy to clipboard operation
node-taglib2 copied to clipboard

Fix compilation on node 13.x, still works on 10.x, 11.x and 12.x

Open papodaca opened this issue 5 years ago • 3 comments

  • Fixes use of deprecated functions in node 13.x
  • Include multiple node versions in ci matrix
  • update nan to support more node versions

Fixes #21

papodaca avatar May 23 '19 22:05 papodaca

Installing using npm install git+https://github.com/papodaca/node-taglib2.git --save Using Node 12.14.0

Getting the following errors:

[ 90%] Building CXX object CMakeFiles/taglib2.dir/src/taglib2.cc.o
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:21: warning: "NDEBUG" redefined
   21 | #define NDEBUG
      | 
<command-line>: note: this is the location of the previous definition
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc: In function ‘Nan::NAN_METHOD_RETURN_TYPE writeTagsSync(Nan::NAN_METHOD_ARGS_TYPE)’:
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:82:69: error: no matching function for call to ‘v8::Value::ToString()’
   82 |   std::string audio_file = *v8::String::Utf8Value(info[0]->ToString());
      |                                                                     ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2572:44: note: candidate: ‘v8::MaybeLocal<v8::String> v8::Value::ToString(v8::Local<v8::Context>) const’
 2572 |   V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(
      |                                            ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2572:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8-internal.h:14,
                 from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:25,
                 from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2588:31: note: candidate: ‘v8::Local<v8::String> v8::Value::ToString(v8::Isolate*) const’
 2588 |                 Local<String> ToString(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2588:31: note:   candidate expects 1 argument, 0 provided
 2588 |                 Local<String> ToString(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc: In lambda function:
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:104:50: error: no matching function for call to ‘v8::Object::Has(v8::Local<v8::String>)’
  104 |     return o->Has(Nan::New(name).ToLocalChecked());
      |                                                  ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:3494:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Has(v8::Local<v8::Context>, v8::Local<v8::Value>)’
 3494 |   V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context,
      |                                     ^~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:3494:37: note:   candidate expects 2 arguments, 1 provided
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:3500:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Has(v8::Local<v8::Context>, uint32_t)’
 3500 |   V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context, uint32_t index);
      |                                     ^~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:3500:37: note:   candidate expects 2 arguments, 1 provided
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc: In lambda function:
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:112:45: error: no matching function for call to ‘v8::String::Utf8Value::Utf8Value(v8::Local<v8::Value>&)’
  112 |     std::string s = *v8::String::Utf8Value(r);
      |                                             ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:3039:5: note: candidate: ‘v8::String::Utf8Value::Utf8Value(v8::Isolate*, v8::Local<v8::Value>)’
 3039 |     Utf8Value(Isolate* isolate, Local<v8::Value> obj);
      |     ^~~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:3039:5: note:   candidate expects 2 arguments, 1 provided
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc: In lambda function:
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:120:64: error: no matching function for call to ‘v8::Value::Int32Value()’
  120 |     return o->Get(Nan::New(name).ToLocalChecked())->Int32Value();
      |                                                                ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2613:40: note: candidate: ‘v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const’
 2613 |   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
      |                                        ^~~~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2613:40: note:   candidate expects 1 argument, 0 provided
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc: In function ‘Nan::NAN_METHOD_RETURN_TYPE writeTagsSync(Nan::NAN_METHOD_ARGS_TYPE)’:
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:221:77: error: no matching function for call to ‘v8::Value::ToObject()’
  221 |       if (!picture.IsEmpty() && node::Buffer::HasInstance(picture->ToObject())) {
      |                                                                             ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2576:44: note: candidate: ‘v8::MaybeLocal<v8::Object> v8::Value::ToObject(v8::Local<v8::Context>) const’
 2576 |   V8_WARN_UNUSED_RESULT MaybeLocal<Object> ToObject(
      |                                            ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2576:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8-internal.h:14,
                 from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:25,
                 from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2590:31: note: candidate: ‘v8::Local<v8::Object> v8::Value::ToObject(v8::Isolate*) const’
 2590 |                 Local<Object> ToObject(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2590:31: note:   candidate expects 1 argument, 0 provided
 2590 |                 Local<Object> ToObject(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:223:61: error: no matching function for call to ‘v8::Value::ToObject()’
  223 |         char* buffer = node::Buffer::Data(picture->ToObject());
      |                                                             ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2576:44: note: candidate: ‘v8::MaybeLocal<v8::Object> v8::Value::ToObject(v8::Local<v8::Context>) const’
 2576 |   V8_WARN_UNUSED_RESULT MaybeLocal<Object> ToObject(
      |                                            ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2576:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8-internal.h:14,
                 from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:25,
                 from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2590:31: note: candidate: ‘v8::Local<v8::Object> v8::Value::ToObject(v8::Isolate*) const’
 2590 |                 Local<Object> ToObject(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2590:31: note:   candidate expects 1 argument, 0 provided
 2590 |                 Local<Object> ToObject(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:224:68: error: no matching function for call to ‘v8::Value::ToObject()’
  224 |         const size_t blen = node::Buffer::Length(picture->ToObject());
      |                                                                    ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2576:44: note: candidate: ‘v8::MaybeLocal<v8::Object> v8::Value::ToObject(v8::Local<v8::Context>) const’
 2576 |   V8_WARN_UNUSED_RESULT MaybeLocal<Object> ToObject(
      |                                            ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2576:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8-internal.h:14,
                 from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:25,
                 from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2590:31: note: candidate: ‘v8::Local<v8::Object> v8::Value::ToObject(v8::Isolate*) const’
 2590 |                 Local<Object> ToObject(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2590:31: note:   candidate expects 1 argument, 0 provided
 2590 |                 Local<Object> ToObject(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc: In function ‘Nan::NAN_METHOD_RETURN_TYPE readTagsSync(Nan::NAN_METHOD_ARGS_TYPE)’:
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:250:69: error: no matching function for call to ‘v8::Value::ToString()’
  250 |   std::string audio_file = *v8::String::Utf8Value(info[0]->ToString());
      |                                                                     ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2572:44: note: candidate: ‘v8::MaybeLocal<v8::String> v8::Value::ToString(v8::Local<v8::Context>) const’
 2572 |   V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(
      |                                            ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2572:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8-internal.h:14,
                 from /home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:25,
                 from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2588:31: note: candidate: ‘v8::Local<v8::String> v8::Value::ToString(v8::Isolate*) const’
 2588 |                 Local<String> ToString(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:2588:31: note:   candidate expects 1 argument, 0 provided
 2588 |                 Local<String> ToString(Isolate* isolate) const);
      |                               ^~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8config.h:318:44: note: in definition of macro ‘V8_DEPRECATED’
  318 | #define V8_DEPRECATED(message, declarator) declarator
      |                                            ^~~~~~~~~~
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc: In function ‘void Init(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’:
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:507:64: error: no matching function for call to ‘v8::FunctionTemplate::GetFunction()’
  507 |     Nan::New<v8::FunctionTemplate>(writeTagsSync)->GetFunction());
      |                                                                ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:5995:46: note: candidate: ‘v8::MaybeLocal<v8::Function> v8::FunctionTemplate::GetFunction(v8::Local<v8::Context>)’
 5995 |   V8_WARN_UNUSED_RESULT MaybeLocal<Function> GetFunction(
      |                                              ^~~~~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:5995:46: note:   candidate expects 1 argument, 0 provided
/home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:510:63: error: no matching function for call to ‘v8::FunctionTemplate::GetFunction()’
  510 |     Nan::New<v8::FunctionTemplate>(readTagsSync)->GetFunction());
      |                                                               ^
In file included from /home/mcabral/Repos/Mike/bookserve/node_modules/taglib2/src/taglib2.cc:4:
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:5995:46: note: candidate: ‘v8::MaybeLocal<v8::Function> v8::FunctionTemplate::GetFunction(v8::Local<v8::Context>)’
 5995 |   V8_WARN_UNUSED_RESULT MaybeLocal<Function> GetFunction(
      |                                              ^~~~~~~~~~~
/home/mcabral/.cmake-js/node-x64/v12.14.0/include/node/v8.h:5995:46: note:   candidate expects 1 argument, 0 provided
make[2]: *** [CMakeFiles/taglib2.dir/build.make:63: CMakeFiles/taglib2.dir/src/taglib2.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:110: CMakeFiles/taglib2.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
ERR! OMG Process terminated: 2

mike391 avatar Jan 09 '20 17:01 mike391

If you notice, this PR pulls from the branch '#21' in my fork. Not the master branch I have updated the master branch on my fork though, this should work now.

papodaca avatar Jan 09 '20 18:01 papodaca

Seems to be working on node v14.13.1 as well (macOS X mojave) Thanks for the command to install directly from GitHub, while waiting for the PR to be merged and published to npm

big ups and cheers 👍

wiill avatar Nov 27 '20 09:11 wiill