Use CMake buildsystem

It is very tiny project with 3 source files. We don't want to have gyp as
build-time dependency as it is huge. Writing plain makefile is painful.

Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
This commit is contained in:
Igor Gnatenko 2016-11-21 20:54:43 +01:00
parent 394fa448b8
commit 0cb0b0d3e3
5 changed files with 61 additions and 94 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@
/joyent-http-parser-v2.0-7-gcd01361.tar.gz
/v2.6.0.tar.gz
/v2.7.1.tar.gz
/http-parser-2.7.1.tar.gz

View File

@ -96,3 +96,6 @@ index ea26394..45c72a0 100644
/* Request Methods */
#define HTTP_METHOD_MAP(XX) \
XX(0, DELETE, DELETE) \
--
2.10.2

View File

@ -1,40 +0,0 @@
--- http_parser.gyp~ 2012-11-27 15:40:11.721398004 -0700
+++ http_parser.gyp 2012-11-27 15:40:11.721398004 -0700
@@ -12,7 +12,7 @@
# RuntimeLibrary MUST MATCH across the entire project
'Debug': {
'defines': [ 'DEBUG', '_DEBUG' ],
- 'cflags': [ '-Wall', '-Wextra', '-O0', '-g', '-ftrapv' ],
+ 'cflags': [ '-Wall', '-Wextra', '-g', '-ftrapv' ],
'msvs_settings': {
'VCCLCompilerTool': {
'RuntimeLibrary': 1, # static debug
@@ -21,7 +21,7 @@
},
'Release': {
'defines': [ 'NDEBUG' ],
- 'cflags': [ '-Wall', '-Wextra', '-O3' ],
+ 'cflags': [ '-Wall', '-Wextra' ],
'msvs_settings': {
'VCCLCompilerTool': {
'RuntimeLibrary': 0, # static release
@@ -50,7 +50,8 @@
'targets': [
{
'target_name': 'http_parser',
- 'type': 'static_library',
+ 'type': 'shared_library',
+ 'product_extension': 'so.2',
'include_dirs': [ '.' ],
'direct_dependent_settings': {
'defines': [ 'HTTP_PARSER_STRICT=0' ],
@@ -73,7 +74,8 @@
{
'target_name': 'http_parser_strict',
- 'type': 'static_library',
+ 'type': 'shared_library',
+ 'product_extension': 'so.2',
'include_dirs': [ '.' ],
'direct_dependent_settings': {
'defines': [ 'HTTP_PARSER_STRICT=1' ],

View File

@ -5,23 +5,18 @@
Name: http-parser
Version: %{somajor}.%{sominor}.%{sopoint}
Release: 3%{?dist}
Release: 4%{?dist}
Summary: HTTP request/response parser for C
Group: System Environment/Libraries
License: MIT
URL: http://github.com/joyent/http-parser
URL: https://github.com/nodejs/http-parser
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
Source0: https://github.com/nodejs/http-parser/archive/v%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
# https://github.com/nodejs/http-parser/commit/335850f6b868d3411968cbf5a4d59fe619dee36f
Patch0001: %{name}-0001-parser-HTTP_STATUS_MAP-XX-and-enum-http_status.patch
# Build shared library with SONAME using gyp and remove -O flags so optflags take over
# TODO: do this nicely upstream
Patch1: http-parser-gyp-sharedlib.patch
Patch2: http-parser-status.patch
BuildRequires: gyp
BuildRequires: util-linux
BuildRequires: gcc
BuildRequires: cmake
%description
This is a parser for HTTP messages written in C. It parses both requests and
@ -31,76 +26,84 @@ be interrupted at anytime. Depending on your architecture, it only requires
about 40 bytes of data per message stream (in a web server that is per
connection).
%package devel
Group: Development/Libraries
Summary: Development headers and libraries for http-parser
Requires: %{name} = %{version}-%{release}
Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release}
%description devel
Development headers and libraries for http-parser.
%prep
%autosetup -n http-parser-%{version}
%autosetup -p1
# TODO: try to send upstream?
cat > CMakeLists.txt << EOF
cmake_minimum_required (VERSION 2.8.5)
project (http-parser C)
include (GNUInstallDirs)
set (SRCS http_parser.c)
set (HDRS http_parser.h)
set (TEST_SRCS test.c)
# Non-Strict version
add_library (http_parser \${SRCS})
target_compile_definitions (http_parser
PUBLIC -DHTTP_PARSER_STRICT=0)
add_executable (test-nonstrict \${TEST_SRCS})
target_link_libraries (test-nonstrict http_parser)
# Strict version
add_library (http_parser_strict \${SRCS})
target_compile_definitions (http_parser_strict
PUBLIC -DHTTP_PARSER_STRICT=1)
add_executable (test-strict \${TEST_SRCS})
target_link_libraries (test-strict http_parser_strict)
set_target_properties (http_parser http_parser_strict
PROPERTIES
SOVERSION %{somajor}
VERSION %{version})
install (TARGETS http_parser http_parser_strict
LIBRARY DESTINATION \${CMAKE_INSTALL_LIBDIR})
install (FILES \${HDRS}
DESTINATION \${CMAKE_INSTALL_INCLUDEDIR})
enable_testing ()
add_test (NAME test-nonstrict COMMAND test-nonstrict)
add_test (NAME test-strict COMMAND test-strict)
EOF
%build
# TODO: fix -fPIC upstream
export CFLAGS='%{optflags} -fPIC'
gyp -f make --depth=`pwd` http_parser.gyp
make %{?_smp_mflags} BUILDTYPE=Release
mkdir %{_target_platform}
pushd %{_target_platform}
%cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
popd
%make_build -C %{_target_platform}
%install
rm -rf %{buildroot}
install -d %{buildroot}%{_includedir}
install -d %{buildroot}%{_libdir}
install -pm644 http_parser.h %{buildroot}%{_includedir}
#install regular variant
install out/Release/lib.target/libhttp_parser.so.%{somajor} %{buildroot}%{_libdir}/libhttp_parser.so.%{somajor}.%{sominor}
ln -sf libhttp_parser.so.%{somajor}.%{sominor} %{buildroot}%{_libdir}/libhttp_parser.so.%{somajor}
ln -sf libhttp_parser.so.%{somajor}.%{sominor} %{buildroot}%{_libdir}/libhttp_parser.so
#install strict variant
install out/Release/lib.target/libhttp_parser_strict.so.%{somajor} %{buildroot}%{_libdir}/libhttp_parser_strict.so.%{somajor}.%{sominor}
ln -sf libhttp_parser_strict.so.%{somajor}.%{sominor} %{buildroot}%{_libdir}/libhttp_parser_strict.so.%{somajor}
ln -sf libhttp_parser_strict.so.%{somajor}.%{sominor} %{buildroot}%{_libdir}/libhttp_parser_strict.so
%make_install -C %{_target_platform}
%check
export LD_LIBRARY_PATH='./out/Release/lib.target'
./out/Release/test-nonstrict
./out/Release/test-strict
%clean
rm -rf %{buildroot}
make test -C %{_target_platform}
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%defattr(-,root,root,-)
%{_libdir}/libhttp_parser.so.*
%{_libdir}/libhttp_parser_strict.so.*
%doc AUTHORS README.md
%license LICENSE-MIT
%files devel
%defattr(-,root,root,-)
%{_includedir}/*
%{_includedir}/http_parser.h
%{_libdir}/libhttp_parser.so
%{_libdir}/libhttp_parser_strict.so
%changelog
* Mon Nov 21 2016 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 2.7.1-4
- Use CMake buildsystem
* Tue Oct 25 2016 Nathaniel McCallum <npmccallum@redhat.com> - 2.7.1-3
- Add (upstreamed) status code patch

View File

@ -1 +1 @@
31c6fefb6208b16d19b3f990e71cb04a v2.7.1.tar.gz
31c6fefb6208b16d19b3f990e71cb04a http-parser-2.7.1.tar.gz