diff --git a/binding.gyp b/binding.gyp index bfbcd1d..4f100f3 100644 --- a/binding.gyp +++ b/binding.gyp @@ -1,4 +1,7 @@ { + "variables": { + "GTK_Root%": "c:\\gtk", + }, "targets": [ { "target_name": "rsvg", @@ -9,13 +12,16 @@ ], "variables": { "packages": "librsvg-2.0 cairo-png cairo-pdf cairo-svg", - "libraries": " #include +#ifdef _MSC_VER +#include "win32-math.h" +#endif + using namespace v8; using namespace node; diff --git a/src/win32-math.cc b/src/win32-math.cc new file mode 100644 index 0000000..425c721 --- /dev/null +++ b/src/win32-math.cc @@ -0,0 +1,82 @@ +// Copyright 2011 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Extra POSIX/ANSI routines for Win32 when using Visual Studio C++. Please +// refer to The Open Group Base Specification for specification of the correct +// semantics for these functions. +// (http://www.opengroup.org/onlinepubs/000095399/) +#if defined(_MSC_VER) && (_MSC_VER < 1800) + +#include // Required for INT_MAX etc. +#include // Required for DBL_MAX and on Win32 for finite() +#include +#include "win32-math.h" + +namespace std { + +// Test for a NaN (not a number) value - usually defined in math.h +int isnan(double x) { + return _isnan(x); +} + + +// Test for infinity - usually defined in math.h +int isinf(double x) { + return (_fpclass(x) & (_FPCLASS_PINF | _FPCLASS_NINF)) != 0; +} + + +// Test for finite value - usually defined in math.h +int isfinite(double x) { + return _finite(x); +} + + +// Test if x is less than y and both nominal - usually defined in math.h +int isless(double x, double y) { + return isnan(x) || isnan(y) ? 0 : x < y; +} + + +// Test if x is greater than y and both nominal - usually defined in math.h +int isgreater(double x, double y) { + return isnan(x) || isnan(y) ? 0 : x > y; +} + +// Test sign - usually defined in math.h +int signbit(double x) { + // We need to take care of the special case of both positive + // and negative versions of zero. + if (x == 0) + return _fpclass(x) & _FPCLASS_NZ; + else + return x < 0; +} + +} // namespace std + +#endif // _MSC_VER diff --git a/src/win32-math.h b/src/win32-math.h new file mode 100644 index 0000000..ee0c461 --- /dev/null +++ b/src/win32-math.h @@ -0,0 +1,65 @@ +// Copyright 2011 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Extra POSIX/ANSI routines for Win32 when using Visual Studio C++. Please +// refer to The Open Group Base Specification for specification of the correct +// semantics for these functions. +// (http://www.opengroup.org/onlinepubs/000095399/) + +#ifndef V8_WIN32_MATH_H_ +#define V8_WIN32_MATH_H_ + +#ifndef _MSC_VER +#error Wrong environment, expected MSVC. +#endif // _MSC_VER + +// MSVC 2013+ provides implementations of all standard math functions. +#if (_MSC_VER < 1800) +enum { + FP_NAN, + FP_INFINITE, + FP_ZERO, + FP_SUBNORMAL, + FP_NORMAL +}; + +#define round(val) floor(val + 0.5) + +namespace std { + +int isfinite(double x); +int isinf(double x); +int isnan(double x); +int isless(double x, double y); +int isgreater(double x, double y); +int signbit(double x); + +} // namespace std + +#endif // _MSC_VER < 1800 + +#endif // V8_WIN32_MATH_H_ diff --git a/tools/include_dirs.py b/tools/include_dirs.py new file mode 100644 index 0000000..13334ef --- /dev/null +++ b/tools/include_dirs.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +import os +import re +import sys +from subprocess import Popen, PIPE + +def main(): + GTK_Root = sys.argv[1] + packages = ' '.join(sys.argv[2:]) + + if not os.path.exists(GTK_Root): + print >> sys.stderr, "You must download GTK bundle for install node-rsvg in windows. More information at https://github.com/walling/node-rsvg#windows" + return 1 + + p = Popen(os.path.join(GTK_Root, 'bin/pkg-config') + ' --cflags-only-I %s' % packages, shell=True, stdout=PIPE) + dirs = p.stdout.read() + + print re.sub(r'-I', '', dirs) + + return p.wait() + + +if __name__ == '__main__': + sys.exit(main())