Regards,
Floren
I just want to make sure they are reliable and everyone is happy. :)
As a side note, is much easier to build with gyp compared to scons. It was a bit tricky to do it in a Redhat5 env but I previously created the python26 packages so everything compiled like a charm.
The reason I ask this is because I plan to release my v8-3.12.16 64bits rpm's to everyone. (CentOS/Redhat 5 and 6)
I just want to make sure they are reliable and everyone is happy. :)
So you're picking a random trunk revision and are hoping that that's stable and reliable?!In V8's current version numbering scheme, the 4th number indicates stability fixes, and branches are generally way more stable than trunk. I would suggest to look at what Chrome and/or node.js are using, and use those versions as candidates for stable package releases. Currently, Chrome 20/stable is at V8 3.10.8.20, Chrome 21/beta and node.js are using V8 3.11.10.17 (essentially they're tracking the tip of the respective branch).
The version you use in the package name (libv8-3.10.8) reflects the
soname version of the library. Upstream v8 doesn't guarantee ABI
compatibility of libv8 releases (because it is quite difficult to do so),
but, as indicated by data like
http://www.upstream-tracker.org/versions/v8.html
you can safely assume the soname version to be 3.10.8 instead of 3.10.8.23,
because 3.10.8.24 (most likely) won't break ABI/API compatibility.
If you understand this, you realize you can't choose a soname version of
3.12.16, because it is likely to be ABI/API incompatible with 3.12.16.xx
at some point. In that case you either use the full version, or wait for
that branch to reach a stable state.
Provides: libv8.so.3()(64bit)
Requires(interp): /bin/sh /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(post): /bin/sh
Requires(postun): /bin/sh
Requires: libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.4)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libv8.so.3()(64bit) rtld(GNU_HASH)
Processing files: v8-devel-3.11.10-1.el5
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libv8.so.3()(64bit) python(abi) = 2.4 v8 = 3.11.10-1.el5
I would like to also know how do you determine the 4th number which indicates stability fixes? I did not see any info into ChangeLog. So far, I only know the major, minor, build and repo revision.
do you use the right flags ?
here are the ones used in the debian package :
library=shared snapshot=off soname_version=3.11.10
I checked other packages and they all use scons.
For example, in debian (well it didn't got into wheezy, but anyway it's planned)
we're going to use :
SONAME : libv8.so.3.10.8
/usr/lib/libv8.so.3.10.8
/usr/lib/libv8.so -> libv8.so.3.10.8 (provided by libv8-dev)
Is that clear ?
Requires: libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.4)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libv8.so.3.11.10()(64bit) rtld(GNU_HASH)
Processing files: v8-devel-3.11.10-1.el5
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libv8.so.3.11.10()(64bit) python(abi) = 2.4 v8 = 3.11.10-1.el5
When you let your node.js package depend on "V8 >= 3.11.10", it again comes down to luck: If you are careful to release matching updates for both packages at the same time, and if all of your users happen to always install matching sets of updates, everything will be fine. If, however, for whatever reason someone ends up with the older node.js package and e.g. V8 3.14.x, chances are their node.js will not work. (Again, no guarantees either way -- it might happen that our ABI won't change between 3.11 and 3.14, or that at least it doesn't break backwards compatibility, but nobody is ensuring this or even trying.) If my package manager installed two packages on my system which are not compatible given their respective versions, I would consider that a bug ;-)
%global npmver 1.1.45
%global pybasever 2.6
%global pythonver 26
Summary: Evented I/O for V8 JavaScript
Name: nodejs
Version: 0.8.4
Release: 1%{dist}
License: MIT
Group: Development/Languages/Other
URL: http://www.nodejs.org/
Source: http://nodejs.org/dist/v0.8.4/node-v%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: curl, gcc-c++, procps, openssl-devel >= 1.0.1
BuildRequires: python%{pythonver}, pkgconfig, v8-devel = 3.11.10
BuildArch: noarch
Requires: v8 = 3.11.10
Provides: npm = %{npmver}
....
%build
./configure \
--prefix=%{_prefix} \
--shared-openssl \
--shared-v8 --shared-v8-includes=%{_includedir} \
--shared-zlib
%{__make} %{?_smp_mflags}
I agree with you, that is why using an ABI compatibility checker is
indispensable when i suggest to use major.minor.build soname version.
Otherwise one would have to do as you say.