Skip to content

Commit 5d88940

Browse files
committed
Check for remote url instead of .git existence
Current implementation of .git checking have some issues: - If a kernel source being cloned using git-repo tool, especially newer version, it will clone .git in .repo inside of the submodule source. - Newer kernel source changed how $(src) & $(srctree) output. In the case of kernel 6.11 as I tested $(src) show the relative path of the symlink in drivers/ instead of KernelSU main directory. Which makes checking for ../.git existence comletely useless. One idea I would like to propose is to check for the remote URL in $(src). If the remote is correct then we can assume this is KSU repo and then count the version (also unshallow the repo). Here's what I did: - Check if kernel is 6.9+ and then change $(src) accordingly. - Print $(src) remote in verbose and check for the correct URL (both ssh & https). - If correct, check if the repo is shallow by using git rev-parse --is-shallow-repository. Unshallow if it's return true. - Calculate version as usual. The only drawback I can see so far is that forks will have to edit the url in the Makefile, which I don't think it's much of an issue. Signed-off-by: hmtheboy154 <[email protected]>
1 parent 7be82d2 commit 5d88940

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

kernel/Makefile

+26-5
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,36 @@ ccflags-y += -I$(objtree)/security/selinux -include $(srctree)/include/uapi/asm-
1616

1717
obj-$(CONFIG_KSU) += kernelsu.o
1818

19-
# .git is a text file while the module is imported by 'git submodule add'.
20-
ifeq ($(shell test -e $(srctree)/$(src)/../.git; echo $$?),0)
21-
$(shell cd $(srctree)/$(src); /usr/bin/env PATH="$$PATH":/usr/bin:/usr/local/bin [ -f ../.git/shallow ] && git fetch --unshallow)
22-
KSU_GIT_VERSION := $(shell cd $(srctree)/$(src); /usr/bin/env PATH="$$PATH":/usr/bin:/usr/local/bin git rev-list --count HEAD)
19+
IS_KERNEL_69 := $(strip $(shell \
20+
if [ "$(VERSION)" -ge "6" -a "$(PATCHLEVEL)" -ge "9" ]; then \
21+
echo TRUE; \
22+
else \
23+
echo FALSE; \
24+
fi \
25+
))
26+
27+
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b1992c3772e69a6fd0e3fc81cd4d2820c8b6eca0
28+
ifeq ($(IS_KERNEL_69),TRUE)
29+
SRC_LOCATION := $(src)
30+
else
31+
SRC_LOCATION := $(srctree)/$(src)
32+
endif
33+
34+
GIT_TOOL := /usr/bin/env PATH="$$PATH":/usr/bin:/usr/local/bin git
35+
36+
# Check for both https & ssh remote
37+
REMOTE_CHECK := $(shell cd $(SRC_LOCATION); $(GIT_TOOL) remote -v | grep -E 'github\.com[/:]tiann/KernelSU')
38+
39+
ifneq ($(REMOTE_CHECK),)
40+
ifeq ($(shell cd $(SRC_LOCATION); $(GIT_TOOL) rev-parse --is-shallow-repository),true)
41+
$(shell cd $(SRC_LOCATION); $(GIT_TOOL) fetch --unshallow)
42+
endif
43+
KSU_GIT_VERSION := $(shell cd $(SRC_LOCATION); $(GIT_TOOL) rev-list --count HEAD)
2344
# ksu_version: major * 10000 + git version + 200 for historical reasons
2445
$(eval KSU_VERSION=$(shell expr 10000 + $(KSU_GIT_VERSION) + 200))
2546
$(info -- KernelSU version: $(KSU_VERSION))
2647
ccflags-y += -DKSU_VERSION=$(KSU_VERSION)
27-
else # If there is no .git file, the default version will be passed.
48+
else # Pass default version if the defined remote is not found
2849
$(warning "KSU_GIT_VERSION not defined! It is better to make KernelSU a git submodule!")
2950
ccflags-y += -DKSU_VERSION=16
3051
endif

0 commit comments

Comments
 (0)