aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2021-01-21 16:06:54 -0500
committerDavid Goulet <dgoulet@torproject.org>2021-01-21 16:06:54 -0500
commitc09f8da8a98d035082b207ebdaf1e6fe3110c8b7 (patch)
tree4b93815001614aaccf5bec483675a9b98780e844
parent9b390a556e5030d67c235806b2c027513fb1679f (diff)
parent8500700aa45722595938ef59935e7efde2b1e9e3 (diff)
downloadtor-c09f8da8a98d035082b207ebdaf1e6fe3110c8b7.tar.gz
tor-c09f8da8a98d035082b207ebdaf1e6fe3110c8b7.zip
Merge branch 'maint-0.3.5' into maint-0.4.3
-rw-r--r--.gitignore3
-rw-r--r--Makefile.am14
-rw-r--r--changes/ticket402274
-rwxr-xr-xscripts/maint/gen_ccls_file.sh20
4 files changed, 41 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index f60d72bf1e..dea131963e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,6 +39,8 @@ uptime-*.json
# Core files
core
core.*
+# ccls file that can be per directory.
+*.ccls
# /
/Makefile
@@ -76,6 +78,7 @@ core.*
/Tor*Bundle.dmg
/tor-*-win32.exe
/warning_flags
+/compile_commands.json
/coverage_html/
/callgraph/
diff --git a/Makefile.am b/Makefile.am
index 1041494da7..117c6a5a70 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -577,3 +577,17 @@ show-libs:
show-testing-libs:
@echo $(TOR_INTERNAL_TESTING_LIBS)
+
+# Note here that we hardcode this -j2 because if the user would pass too many
+# cores, bear actually chockes and dies :S. For this to work, a make clean
+# needs to be done else bear will miss some compile flags.
+lsp:
+ @if test -x "`which bear 2>&1;true`"; then \
+ echo "Generating LSP compile_commands.json. Might take few minutes..."; \
+ $(MAKE) clean 2>&1 >/dev/null; \
+ bear >/dev/null 2>&1 -- $(MAKE) -j2 2>&1 >/dev/null; \
+ echo "Generating .ccls file..."; \
+ ./scripts/maint/gen_ccls_file.sh \
+ else \
+ echo "No bear command found. On debian, apt install bear"; \
+ fi
diff --git a/changes/ticket40227 b/changes/ticket40227
new file mode 100644
index 0000000000..e5efad0f95
--- /dev/null
+++ b/changes/ticket40227
@@ -0,0 +1,4 @@
+ o Minor feature (build system):
+ - New "make lsp" command to auto generate the compile_commands.json file
+ used by the ccls server. The "bear" program is needed for this. Closes
+ ticket 40227.
diff --git a/scripts/maint/gen_ccls_file.sh b/scripts/maint/gen_ccls_file.sh
new file mode 100755
index 0000000000..899e4e9603
--- /dev/null
+++ b/scripts/maint/gen_ccls_file.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+##############################################################################
+# THIS MUST BE CALLED FROM THE ROOT DIRECTORY. IT IS USED BY THE MAKEFILE SO #
+# IN THEORY, YOU SHOULD NEVER CALL THIS. #
+##############################################################################
+
+set -e
+
+CCLS_FILE=".ccls"
+
+# Get all #define *_PRIVATE from our source. We need to list them in our .ccls
+# file and enable them otherwise ccls will not find their definition thinking
+# that they are dead code.
+PRIVATE_DEFS=$(grep -r --include \*.h "_PRIVATE" | grep "#ifdef" | cut -d' ' -f2 | sort | uniq)
+
+echo "clang" > "$CCLS_FILE"
+for p in $PRIVATE_DEFS; do
+ echo "-D$p" >> "$CCLS_FILE"
+done