Compare commits

..

11 Commits

Author SHA1 Message Date
Takatoshi Kondo
eba6304a3a Merge pull request #1129 from redboltz/update_c_602
Updated the version to 6.0.2 (C)
2024-06-24 15:56:53 +09:00
Takatoshi Kondo
ef0927a6f0 Updated the version to 6.0.2 (C) 2024-06-24 15:30:56 +09:00
Takatoshi Kondo
bf2504e7bb Merge pull request #1125 from otegami/fix-ignored-includedir
Fix header file installation to respect `CMAKE_INSTALL_INCLUDEDIR`
2024-06-24 15:28:45 +09:00
otegami
724d1aad39 Fix header file installation paths to respect CMAKE_INSTALL_INCLUDEDIR
Previously, header files were installed uniformly under the include directory, ignoring the specified paths.
This change ensures header files are installed in the appropriate directories under `CMAKE_INSTALL_INCLUDEDIR`.
2024-06-12 20:22:02 +08:00
Takatoshi Kondo
a5c8a2c845 Merge pull request #1121 from otegami/support-absolute-path-for-pkg-config
Support absolute path for CMAKE_INSTALL_*DIR
2024-05-14 16:01:23 +09:00
otegami
4e027b72de Support absolute path for CMAKE_INSTALL_*DIR
Issue

When `CMAKE_INSTALL_LIBDIR` and `CMAKE_INSTALL_INCLUDEDIR` are set to absolute paths, the `msgpack-c.pc` file generated by CMake improperly configures `libdir` and `includedir`. This leads to incorrect paths that prevent the compiler from locating necessary header and library files.

How to reproduce

Build and install `msgpack-c`.

```console
% cmake -S . -B ../msgpack-c.build -DCMAKE_INSTALL_LIBDIR=/tmp/local/lib -DCMAKE_INSTALL_INCLUDEDIR=/tmp/local/include
% cmake --build ../msgpack-c.build
% sudo cmake --install ../msgpack-c.build
```

Compile `example/simple_c.c` using installed msgpack-c. The following error happens because the linker cannot find paths provided by pkg-config.

```console
% export PKG_CONFIG_PATH=/tmp/local/lib/pkgconfig:$PKG_CONFIG_PATH
% gcc -o simple_c example/simple_c.c $(pkg-config --cflags --libs msgpack-c)
/usr/bin/ld: cannot find -lmsgpack-c: No such file or directory
collect2: error: ld returned 1 exit status
```

Expected

Successfully compile `example/simple_c.c` using installed msgpack-c. We can execute `simple_c` like the following.

```console
% gcc -o simple_c example/simple_c.c $(pkg-config --cflags --libs msgpack-c)
% ./simple_c
93 01 c3 a7 65 78 61 6d 70 6c 65
[1, true, "example"]
```

Explain the problem in detail

The generated `msgpack-c.pc` file does not handle absolute paths correctly. Here is the result of the incorrect configuration in `How to reproduce` section. In the following `msgpack-c.pc` file, `libdir` and `includedir` are showing unrecognized paths, leading to incorrect paths.

```console
% cat /tmp/local/lib/pkgconfig/msgpack-c.pc
prefix=/usr/local
exec_prefix=/usr/local
libdir=${prefix}//tmp/local/lib <- Here the path is wrong. We expected `/tmp/local/lib`
includedir=${prefix}//tmp/local/include <- Here the path is wrong. We expected `/tmp/local/include`

Name: MessagePack
Description: Binary-based efficient object serialization library
Version: 6.0.1
Libs: -L${libdir} -lmsgpack-c
Cflags: -I${includedir}
```

Solution

Modify the `CMakeLists.txt` file to ensure that `libdir` and `includedir` use absolute paths. This change addresses the issue by providing correct paths to the compiler and linker.
2024-05-12 21:38:35 +08:00
Takatoshi Kondo
c31fafbcd1 Merge pull request #1119 from otegami/support-relative-path-for-pkg-config
Support relative path for CMAKE_INSTALL_*DIR
2024-04-26 13:34:22 +09:00
otegami
68cc50a3de Support relative path for CMAKE_INSTALL_*DIR
When `CMAKE_INSTALL_LIBDIR` and `CMAKE_INSTALL_INCLUDEDIR` are set to relative paths, the `msgpack-c.pc` file generated by CMake improperly configures `libdir` and `includedir`. This leads to incorrect paths that prevent the compiler from locating necessary header and library files.

Build and install `msgpack-c`.

```console
% git switch -c c_master
% cmake -S . -B ../msgpack-c.build -DCMAKE_INSTALL_PREFIX=/tmp/local -DCMAKE_INSTALL_LIBDIR=lib-relative -DCMAKE_INSTALL_INCLUDEDIR=include-relative
% cmake --build ../msgpack-c.build
% cmake --install ../msgpack-c.build/
```

Compile `example/simple_c.c` using installed msgpack-c.
The following error happens because the linker cannot find paths provided by pkg-config.

```console
% export PKG_CONFIG_PATH=/usr/local/lib-relative/pkgconfig:$PKG_CONFIG_PATH
% gcc -o simple_c example/simple_c.c $(pkg-config --cflags --libs msgpack-c)
/usr/bin/ld: cannot find -lmsgpack-c: No such file or directory
collect2: error: ld returned 1 exit status
```

Successly compile `example/simple_c.c` using install msgpack-c.
We can execute `simple_c.c` like the following.

```console
% gcc -o simple_c example/simple_c.c $(pkg-config --cflags --libs msgpack-c)
% ./simple_c
93 01 c3 a7 65 78 61 6d 70 6c 65
[1, true, "example"]
```

The generated `msgpack-c.pc` file does not handle relative paths correctly. Here is the result of the incorrect configuration in How to reproduce section.
In the following `msgpack-c.pc` file, `libdir` and `includedir` are relative to the current directory, leading to incorrect paths.

```console
cat ../msgpack-c.build/msgpack-c.pc
prefix=/tmp/local
exec_prefix=/tmp/local
libdir=lib-relative
includedir=include-relative

Name: MessagePack
Description: Binary-based efficient object serialization library
Version: 6.0.1
Libs: -L${libdir} -lmsgpack-c
Cflags: -I${includedir}
```

Modify the `msgpack-c.pc.in` file to ensure that `libdir` and `includedir` use absolute paths by prefixing them with ${prefix}/. This change addresses the issue by providing correct paths to the compiler and linker.
2024-04-26 12:21:26 +08:00
Takatoshi Kondo
9f37918bb5 Merge pull request #1120 from redboltz/fix_osx_ci
Removed invalid ctest option `r`.
2024-04-26 13:02:40 +09:00
Takatoshi Kondo
b8b54a2fef Updated gtest install methond on macos. 2024-04-26 12:29:23 +09:00
Takatoshi Kondo
f2c1991ede Removed invalid ctest option r. 2024-04-26 12:19:06 +09:00
7 changed files with 30 additions and 25 deletions

View File

@@ -18,6 +18,9 @@ jobs:
pattern: [0, 1, 2, 3] pattern: [0, 1, 2, 3]
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: install gtest
run: |
brew install --force googletest
- name: build and test - name: build and test
env: env:
CC: clang CC: clang
@@ -48,22 +51,8 @@ jobs:
export CHAR_SIGN="unsigned" export CHAR_SIGN="unsigned"
fi fi
# install gtest
wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip
unzip -q googletest-release-1.7.0.zip
cd googletest-release-1.7.0
$CXX -m${ARCH} src/gtest-all.cc -I. -Iinclude -c
$CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c
ar -rv libgtest.a gtest-all.o
ar -rv libgtest_main.a gtest_main.o
mkdir -p ${BASE}/usr/include
cp -r include/gtest ${BASE}/usr/include
mkdir -p ${BASE}/usr/lib
mv *.a ${BASE}/usr/lib
cd ..
# build and test # build and test
CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" GTEST_ROOT="${BASE}/usr" CFLAGS="-Werror -g -fsanitize=undefined -fno-sanitize-recover=all" CXXFLAGS="-Werror -g -ggdb3 -fsanitize=undefined -fno-sanitize-recover=all" ${ACTION} CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CFLAGS="-Werror -g -fsanitize=undefined -fno-sanitize-recover=all" CXXFLAGS="-Werror -g -ggdb3 -fsanitize=undefined -fno-sanitize-recover=all" ${ACTION}
linux: linux:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@@ -1,3 +1,9 @@
# 2024-06-24 version 6.0.2
* Fix header file installation to respect `CMAKE_INSTALL_INCLUDEDIR` (#1125)
* Support absolute path for `CMAKE_INSTALL_*DIR` (#1121)
* Removed invalid ctest option. (#1120)
* Support relative path for `CMAKE_INSTALL_*DIR{ (#1119)
# 2024-04-02 version 6.0.1 # 2024-04-02 version 6.0.1
* Improve CI environment (#1061, #1091, #1109) * Improve CI environment (#1061, #1091, #1109)
* Improve build system (#1060, #1069, #1108) * Improve build system (#1060, #1069, #1108)

View File

@@ -30,8 +30,16 @@ LIST (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
include(GNUInstallDirs) include(GNUInstallDirs)
SET (prefix ${CMAKE_INSTALL_PREFIX}) SET (prefix ${CMAKE_INSTALL_PREFIX})
SET (exec_prefix ${CMAKE_INSTALL_PREFIX}) SET (exec_prefix ${CMAKE_INSTALL_PREFIX})
SET (libdir ${CMAKE_INSTALL_LIBDIR}) IF (IS_ABSOLUTE ${CMAKE_INSTALL_LIBDIR})
SET (includedir ${CMAKE_INSTALL_INCLUDEDIR}) SET (libdir ${CMAKE_INSTALL_LIBDIR})
ELSE ()
SET (libdir "\${prefix}/${CMAKE_INSTALL_LIBDIR}")
ENDIF ()
IF (IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR})
SET (includedir ${CMAKE_INSTALL_INCLUDEDIR})
ELSE ()
SET (includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
ENDIF ()
OPTION (MSGPACK_32BIT "32bit compile" OFF) OPTION (MSGPACK_32BIT "32bit compile" OFF)
@@ -263,12 +271,14 @@ INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-c-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
) )
FOREACH (file ${msgpack-c_common_HEADERS}) FOREACH (file ${msgpack-c_common_HEADERS})
GET_FILENAME_COMPONENT (dir ${file} PATH) GET_FILENAME_COMPONENT(dir ${file} DIRECTORY)
INSTALL (FILES ${file} DESTINATION ${dir}) STRING(REPLACE "include" "${CMAKE_INSTALL_INCLUDEDIR}" header_path ${dir})
INSTALL (FILES ${file} DESTINATION ${header_path})
ENDFOREACH () ENDFOREACH ()
FOREACH (file ${msgpack-c_configured_HEADERS}) FOREACH (file ${msgpack-c_configured_HEADERS})
GET_FILENAME_COMPONENT (dir ${file} PATH) GET_FILENAME_COMPONENT(dir ${file} DIRECTORY)
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/${file} DESTINATION ${dir}) STRING(REPLACE "include" "${CMAKE_INSTALL_INCLUDEDIR}" header_path ${dir})
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/${file} DESTINATION ${header_path})
ENDFOREACH () ENDFOREACH ()
IF (NOT MSVC) IF (NOT MSVC)
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack-c.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack-c.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)

View File

@@ -1,7 +1,7 @@
`msgpack` for C `msgpack` for C
=================== ===================
Version 6.0.1 [![Build Status](https://github.com/msgpack/msgpack-c/workflows/CI/badge.svg?branch=c_master)](https://github.com/msgpack/msgpack-c/actions) [![Build status](https://ci.appveyor.com/api/projects/status/8kstcgt79qj123mw/branch/c_master?svg=true)](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/c_master) Version 6.0.2 [![Build Status](https://github.com/msgpack/msgpack-c/workflows/CI/badge.svg?branch=c_master)](https://github.com/msgpack/msgpack-c/actions) [![Build status](https://ci.appveyor.com/api/projects/status/8kstcgt79qj123mw/branch/c_master?svg=true)](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/c_master)
[![codecov](https://codecov.io/gh/msgpack/msgpack-c/branch/c_master/graph/badge.svg)](https://codecov.io/gh/msgpack/msgpack-c/branch/c_master) [![codecov](https://codecov.io/gh/msgpack/msgpack-c/branch/c_master/graph/badge.svg)](https://codecov.io/gh/msgpack/msgpack-c/branch/c_master)
It's like JSON but smaller and faster. It's like JSON but smaller and faster.

View File

@@ -1,4 +1,4 @@
version: 6.0.1.{build} version: 6.0.2.{build}
branches: branches:
only: only:

View File

@@ -42,7 +42,7 @@ then
exit $ret exit $ret
fi fi
ctest -VVr ctest -VV
ret=$? ret=$?
if [ $ret -ne 0 ] if [ $ret -ne 0 ]

View File

@@ -1,3 +1,3 @@
#define MSGPACK_VERSION_MAJOR 6 #define MSGPACK_VERSION_MAJOR 6
#define MSGPACK_VERSION_MINOR 0 #define MSGPACK_VERSION_MINOR 0
#define MSGPACK_VERSION_REVISION 1 #define MSGPACK_VERSION_REVISION 2