Ensure that we only find '.a's when building statically (#4785)
authorAndrew V. Jones <andrew.jones@vector.com>
Sat, 1 Aug 2020 07:34:37 +0000 (08:34 +0100)
committerGitHub <noreply@github.com>
Sat, 1 Aug 2020 07:34:37 +0000 (00:34 -0700)
## Issue

When trying to building statically, and if your machine *does not* have static libraries (e.g., there is [no static GMP on CentOS 8](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/considerations_in_adopting_rhel_8/index#removed-packages_changes-to-packages)), then CVC4's CMake does not detect this:

```
FAILED: bin/cvc4
: && /usr/bin/c++  -O3 -Wall -Wno-deprecated -Wsuggest-override -Wnon-virtual-dtor -Wimplicit-fallthrough -Wshadow -Wno-class-memaccess  -fuse-ld=gold   -static src/main/CMakeFiles/main.dir/command_executor.cpp.o src/main/CMakeFiles/main.dir/interactive_shell.cpp.o src/main/CMakeFiles/main.dir/signal_handlers.cpp.o src/main/CMakeFiles/main.dir/time_limit.cpp.o src/main/CMakeFiles/cvc4-bin.dir/driver_unified.cpp.o src/main/CMakeFiles/cvc4-bin.dir/main.cpp.o  -o bin/cvc4  src/libcvc4.a  src/parser/libcvc4parser.a  src/libcvc4.a  -Wl,-Bdynamic  /usr/lib64/libgmp.so  -Wl,-Bstatic  ../deps/install/lib/libantlr3c.a && :
/usr/bin/ld.gold: error: cannot mix -static with dynamic object /usr/lib64/libgmp.so
```

## Resolution

This PR changes CVC4's CMakeLists such that, if you're building statically, it *only* allows for linking against `.a`s (or `.a`s + `.lib`s on Windows).

Signed-off-by: Andrew V. Jones <andrew.jones@vector.com>
CMakeLists.txt

index 7fc0af52ccc2a0dd7e2d780f1e15a053824da2ce..93ea5cbebc7aec2b3de677b071c0f223fe79a132 100644 (file)
@@ -314,7 +314,12 @@ if(ENABLE_SHARED)
   # https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/RPATH-handling
   set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIBRARY_INSTALL_DIR};${PROJECT_SOURCE_DIR}/deps/install/lib")
 else()
-  set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
+  # When building statically, we *only* want static archives/libraries
+  if (WIN32)
+      set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a)
+  else()
+      set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
+  endif()
   set(BUILD_SHARED_LIBS OFF)
   cvc4_set_option(ENABLE_STATIC_BINARY ON)