mirror of
https://github.com/OpenVPN/openvpn.git
synced 2024-09-19 19:42:30 +02:00
cmake: symlink whole build dir not just .json file
It turned out that symlinking compile_commands.json from the top level source dir has some issues: * file is not created on Windows and symlinking may cause an error * some IDEs create their own json and error out b/c a file exists Since clangd also looks for the json in build/ directories by default, we now symlink the whole build directory instead, not just the json file. This approach requires for the existing build/ dir in the repo to vanish. Luckily it only contains one automake include file, which is moved to the top level source dir. Lastly, make this an opt-in feature, so that the default configuration of the buildsystem never causes a build failure because of this. Change-Id: Ib1a5c788269949d8de95d1da2cb0c32a65bf13f2 Signed-off-by: Heiko Hund <heiko@ist.eigentlich.net> Acked-by: Gert Doering <gert@greenie.muc.de> Message-Id: <20240117134929.5317-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg28061.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
parent
6e010d4824
commit
4bcb38c42a
2
.gitignore
vendored
2
.gitignore
vendored
@ -40,7 +40,7 @@ m4/ltsugar.m4
|
|||||||
m4/ltversion.m4
|
m4/ltversion.m4
|
||||||
m4/lt~obsolete.m4
|
m4/lt~obsolete.m4
|
||||||
|
|
||||||
compile_commands.json
|
build
|
||||||
doc/openvpn-examples.5
|
doc/openvpn-examples.5
|
||||||
doc/openvpn-examples.5.html
|
doc/openvpn-examples.5.html
|
||||||
doc/openvpn.8
|
doc/openvpn.8
|
||||||
|
@ -43,9 +43,17 @@ option(USE_WERROR "Treat compiler warnings as errors (-Werror)" ON)
|
|||||||
set(PLUGIN_DIR /usr/local/lib/openvpn/plugins CACHE FILEPATH "Location of the plugin directory")
|
set(PLUGIN_DIR /usr/local/lib/openvpn/plugins CACHE FILEPATH "Location of the plugin directory")
|
||||||
|
|
||||||
# Create machine readable compile commands
|
# Create machine readable compile commands
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
|
option(ENABLE_COMPILE_COMMANDS "Generate compile_commands.json and a symlink for clangd to find it" OFF)
|
||||||
file(CREATE_LINK ${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json
|
if (ENABLE_COMPILE_COMMANDS)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/compile_commands.json SYMBOLIC)
|
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/build AND NOT IS_SYMLINK ${CMAKE_CURRENT_SOURCE_DIR}/build)
|
||||||
|
message(FATAL_ERROR "The top level source directory contains a 'build' file or directory. Please remove or rename it. CMake creates a symlink with that name during build.")
|
||||||
|
endif()
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
|
||||||
|
add_custom_target(
|
||||||
|
symlink-build-dir ALL
|
||||||
|
${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/build
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
|
|
||||||
# AddressSanitize - use CXX=clang++ CC=clang cmake -DCMAKE_BUILD_TYPE=asan to build with ASAN
|
# AddressSanitize - use CXX=clang++ CC=clang cmake -DCMAKE_BUILD_TYPE=asan to build with ASAN
|
||||||
set(CMAKE_C_FLAGS_ASAN
|
set(CMAKE_C_FLAGS_ASAN
|
||||||
|
@ -42,6 +42,7 @@ CLEANFILES = \
|
|||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
contrib \
|
contrib \
|
||||||
debug \
|
debug \
|
||||||
|
ltrc.inc \
|
||||||
CMakeLists.txt \
|
CMakeLists.txt \
|
||||||
CMakePresets.json \
|
CMakePresets.json \
|
||||||
config.h.cmake.in
|
config.h.cmake.in
|
||||||
@ -53,7 +54,7 @@ BUILT_SOURCES = \
|
|||||||
config-version.h
|
config-version.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SUBDIRS = build distro include src sample doc tests
|
SUBDIRS = distro include src sample doc tests
|
||||||
|
|
||||||
dist_doc_DATA = \
|
dist_doc_DATA = \
|
||||||
README \
|
README \
|
||||||
|
@ -135,3 +135,17 @@ to cmake to be able to use these builds.
|
|||||||
The `unix-native` CMake preset is available for these builds. This preset does
|
The `unix-native` CMake preset is available for these builds. This preset does
|
||||||
not require VCPKG and instead assumes all build-dependencies are provided by
|
not require VCPKG and instead assumes all build-dependencies are provided by
|
||||||
the system natively.
|
the system natively.
|
||||||
|
|
||||||
|
Generating compile_commands.json
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
To have the CMake buildsystem generate compile_commands.json you can specify
|
||||||
|
`-DENABLE_COMPILE_COMMANDS=ON` on the command line or enable the CMake option
|
||||||
|
another way you like. For supported generators the file will then be created.
|
||||||
|
Additionally, the buildsystem will create a symlink `build/` to the --preset
|
||||||
|
build directory that contains the generated JSON file. This is done so that
|
||||||
|
clangd is able to find it.
|
||||||
|
|
||||||
|
Enabling this option may cause an error on Windows, since creating a symlink
|
||||||
|
is a privileged operation there. If you enable Developer Mode for the system,
|
||||||
|
symlinks can be created by regular users.
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
#
|
|
||||||
# OpenVPN -- An application to securely tunnel IP networks
|
|
||||||
# over a single UDP port, with support for SSL/TLS-based
|
|
||||||
# session authentication and key exchange,
|
|
||||||
# packet encryption, packet authentication, and
|
|
||||||
# packet compression.
|
|
||||||
#
|
|
||||||
# Copyright (C) 2002-2023 OpenVPN Inc <sales@openvpn.net>
|
|
||||||
#
|
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = \
|
|
||||||
$(srcdir)/Makefile.in
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
|
||||||
ltrc.inc
|
|
@ -1536,7 +1536,6 @@ AC_SUBST([TEST_CFLAGS])
|
|||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
build/Makefile
|
|
||||||
distro/Makefile
|
distro/Makefile
|
||||||
distro/systemd/Makefile
|
distro/systemd/Makefile
|
||||||
doc/Makefile
|
doc/Makefile
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# Copyright (C) 2006-2012 Alon Bar-Lev <alon.barlev@gmail.com>
|
# Copyright (C) 2006-2012 Alon Bar-Lev <alon.barlev@gmail.com>
|
||||||
#
|
#
|
||||||
|
|
||||||
include $(top_srcdir)/build/ltrc.inc
|
include $(top_srcdir)/ltrc.inc
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = \
|
MAINTAINERCLEANFILES = \
|
||||||
$(srcdir)/Makefile.in
|
$(srcdir)/Makefile.in
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
#
|
#
|
||||||
|
|
||||||
include $(top_srcdir)/build/ltrc.inc
|
include $(top_srcdir)/ltrc.inc
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# Copyright (C) 2006-2012 Alon Bar-Lev <alon.barlev@gmail.com>
|
# Copyright (C) 2006-2012 Alon Bar-Lev <alon.barlev@gmail.com>
|
||||||
#
|
#
|
||||||
|
|
||||||
include $(top_srcdir)/build/ltrc.inc
|
include $(top_srcdir)/ltrc.inc
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
#
|
#
|
||||||
|
|
||||||
include $(top_srcdir)/build/ltrc.inc
|
include $(top_srcdir)/ltrc.inc
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user