Skip to content

Commit

Permalink
Fix a bug in the CMake script.
Browse files Browse the repository at this point in the history
PR [#207] introduced a check for setting the right suffix to the library,
depending on the target OS:

https://github.com/open-quantum-safe/oqs-provider/blob/823f3178dd50eeb5febf29eb82680400c4d9e887/oqsprov/CMakeLists.txt#L61-L7://github.com/open-quantum-safe/oqs-provider/blob/823f3178dd50eeb5febf29eb82680400c4d9e887/oqsprov/CMakeLists.txt#L61-L79

However, mixed with PR [#201] and the `OQS_PROVIDER_BUILD_STATIC` option, the
library may be suffixed with the wrong extension: we may end up with a static
library named `oqsprovider.dylib`, even if it's an archive:

```shell
$ cmake -GNinja \
    -DOQS_PROVIDER_BUILD_STATIC=ON \
    -B build
$ cmake --build build
$ file build/lib/oqsprovider.dylib
build/lib/oqsprovider.dylib: current ar archive random library
$ # ^ should be named `oqsprovider.a`!
```

The check mentioned above is only relevant when oqsprovider is built as a module.

This commit fixes this bug and introduces a check in the CircleCI jobs to verify
that `oqsprovider.a` is actually produced.

[#201](#201)
[#207](#207)
  • Loading branch information
thb-sb committed Jul 19, 2023
1 parent 823f317 commit 8e0c642
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 18 deletions.
10 changes: 9 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ jobs:
name: Run tests
command: |
if << parameters.OQS_PROVIDER_BUILD_STATIC >> ; then
test -f _build/lib/oqsprovider.a
ctest --test-dir _build/
else
./scripts/runtests.sh -V
Expand All @@ -98,6 +99,7 @@ jobs:
name: Run tests (-DNOPUBKEY_IN_PRIVKEY=ON)
command: |
if << parameters.OQS_PROVIDER_BUILD_STATIC >> ; then
test -f _build/lib/oqsprovider.a
ctest --test-dir _build/
else
./scripts/runtests.sh -V
Expand Down Expand Up @@ -170,11 +172,16 @@ jobs:
- run:
name: Build OQS-OpenSSL provider
command: |
export OPENSSL_INSTALL=`brew config | grep HOMEBREW_PREFIX | sed -e "s/HOMEBREW_PREFIX: //g"`/opt/openssl@3 && mkdir _build && cd _build && liboqs_DIR=`pwd`/../.local cmake -GNinja -DOPENSSL_ROOT_DIR=$OPENSSL_INSTALL .. && ninja && echo "export OPENSSL_INSTALL=$OPENSSL_INSTALL" >> "$BASH_ENV" && cd .. && echo "export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$OPENSSL_INSTALL/lib" >> "$BASH_ENV"
oqsprovider_cmake_args="<< parameters.CMAKE_ARGS >>"
if << parameters.OQS_PROVIDER_BUILD_STATIC >> ; then
oqsprovider_cmake_args="${oqsprovider_cmake_args} -DOQS_PROVIDER_BUILD_STATIC=ON"
fi
export OPENSSL_INSTALL=`brew config | grep HOMEBREW_PREFIX | sed -e "s/HOMEBREW_PREFIX: //g"`/opt/openssl@3 && mkdir _build && cd _build && liboqs_DIR=`pwd`/../.local cmake -GNinja -DOPENSSL_ROOT_DIR=$OPENSSL_INSTALL ${oqsprovider_cmake_args} .. && ninja && echo "export OPENSSL_INSTALL=$OPENSSL_INSTALL" >> "$BASH_ENV" && cd .. && echo "export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$OPENSSL_INSTALL/lib" >> "$BASH_ENV"
- run:
name: Run tests
command: |
if << parameters.OQS_PROVIDER_BUILD_STATIC >> ; then
test -f _build/lib/oqsprovider.a
ctest --test-dir _build/ --output-on-failure
else
./scripts/runtests.sh -V
Expand All @@ -191,6 +198,7 @@ jobs:
name: Run tests
command: |
if << parameters.OQS_PROVIDER_BUILD_STATIC >> ; then
test -f _build/lib/oqsprovider.a
ctest --test-dir _build/ --output-on-failure
else
./scripts/runtests.sh -V
Expand Down
36 changes: 19 additions & 17 deletions oqsprov/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,24 +58,26 @@ set_target_properties(oqsprovider
# For Windows DLLs
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")

if (APPLE)
# OpenSSL looks for `.dylib` files on XNU-based platforms.
# Because `MODULE` writes to a `.so` file by default, we must explicitely
# set the suffix here.
set_target_properties(oqsprovider
PROPERTIES
SUFFIX ".dylib"
)
endif()
if (NOT OQS_PROVIDER_BUILD_STATIC)
if (APPLE)
# OpenSSL looks for `.dylib` files on XNU-based platforms.
# Because `MODULE` writes to a `.so` file by default, we must explicitely
# set the suffix here.
set_target_properties(oqsprovider
PROPERTIES
SUFFIX ".dylib"
)
endif()

if (CYGWIN OR MSVC)
# OpenSSL looks for `.dll` files on Windows platforms.
# Because `MODULE` writes to a `.so` file by default, we must explicitely
# set the suffix here.
set_target_properties(oqsprovider
PROPERTIES
SUFFIX ".dll"
)
if (CYGWIN OR MSVC)
# OpenSSL looks for `.dll` files on Windows platforms.
# Because `MODULE` writes to a `.so` file by default, we must explicitely
# set the suffix here.
set_target_properties(oqsprovider
PROPERTIES
SUFFIX ".dll"
)
endif()
endif()

target_link_libraries(oqsprovider PUBLIC OQS::oqs ${OPENSSL_CRYPTO_LIBRARY} ${OQS_ADDL_SOCKET_LIBS})
Expand Down

0 comments on commit 8e0c642

Please sign in to comment.