From b6423d2d81ca0867570bf8ff021c30205cb7fd57 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Tue, 4 Nov 2025 09:58:12 +0800 Subject: Fixed build files for Termux. --- CMakeLists.txt | 34 +++++++++++++++++++++++++++++++--- makefile | 31 ++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 613019e..2d155b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,7 +44,7 @@ if (LUA_LIBRARIES MATCHES "LUA_LIBRARIES-NOTFOUND") endif() else () message(STATUS "Lua: using information from luarocks") -endif() +endif() message(STATUS "Lua: " ${LUA}) message(STATUS "Lua include: " ${LUA_INCLUDE_DIR}) @@ -54,6 +54,24 @@ enable_language(CXX) include_directories(src src/3rdParty ${LUA_INCLUDE_DIR}) add_definitions(-std=c++17 -O3 -fPIC) +# Detect Android Termux environment +# Termux typically has ANDROID_ROOT environment variable set and PREFIX points to Termux directory +set(IS_TERMUX FALSE) +if (DEFINED ENV{ANDROID_ROOT}) + # Check if PREFIX environment variable points to Termux directory + if (DEFINED ENV{PREFIX}) + if ("$ENV{PREFIX}" MATCHES "com.termux") + set(IS_TERMUX TRUE) + message(STATUS "Detected Android Termux environment (via PREFIX: $ENV{PREFIX})") + endif() + endif() + # Alternative check: verify if Termux installation path exists + if (NOT IS_TERMUX AND EXISTS "/data/data/com.termux/files/usr") + set(IS_TERMUX TRUE) + message(STATUS "Detected Android Termux environment (via filesystem check)") + endif() +endif() + if (APPLE) add_compile_options(-Wno-deprecated-declarations) endif () @@ -70,6 +88,11 @@ set_target_properties(libyue PROPERTIES PREFIX "") set_target_properties(libyue PROPERTIES OUTPUT_NAME "yue") target_link_libraries(libyue ${LUA_LIBRARIES}) +# Add YUE_NO_WATCHER macro for Termux environment +if (IS_TERMUX) + target_compile_definitions(libyue PRIVATE YUE_NO_WATCHER) +endif() + add_executable(yue src/yuescript/ast.cpp src/yuescript/parser.cpp @@ -154,6 +177,11 @@ else () target_compile_options(yue PRIVATE -Wall -Wno-long-long -fPIC) endif() +# Add YUE_NO_WATCHER macro for Termux environment +if (IS_TERMUX) + target_compile_definitions(yue PRIVATE YUE_NO_WATCHER) +endif() + if (${CMAKE_BUILD_TYPE} MATCHES "Debug") target_compile_definitions(yue PRIVATE DEBUG) elseif (${CMAKE_BUILD_TYPE} MATCHES "Release") @@ -169,9 +197,9 @@ elseif (NOT (${CMAKE_SYSTEM_NAME} MATCHES "Haiku") AND NOT WIN32) else () target_link_libraries(yue PRIVATE ${LUA_LIBRARIES}) endif() - + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - target_link_options(yue PRIVATE -lstdc++fs -ldl) + target_link_options(yue PRIVATE -ldl) endif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") install(CODE "") diff --git a/makefile b/makefile index d7e85d3..acdeb1b 100644 --- a/makefile +++ b/makefile @@ -54,13 +54,42 @@ endif INCLUDES += -I $(SRC_PATH)/3rdParty/lua LINK_FLAGS += -L $(SRC_PATH)/3rdParty/lua -llua -ldl endif + +# Detect Android Termux environment +# Termux typically has ANDROID_ROOT environment variable set and PREFIX points to Termux directory +IS_TERMUX := false +ANDROID_ROOT_VAR := $(shell echo $$ANDROID_ROOT) +PREFIX_VAR := $(shell echo $$PREFIX) +ifneq ($(ANDROID_ROOT_VAR),) + # Check if PREFIX environment variable points to Termux directory + ifneq ($(PREFIX_VAR),) + ifneq ($(findstring com.termux,$(PREFIX_VAR)),) + IS_TERMUX := true + endif + endif + # Alternative check: verify if Termux installation path exists + ifeq ($(IS_TERMUX),false) + ifneq ($(shell test -d /data/data/com.termux/files/usr && echo yes),) + IS_TERMUX := true + endif + endif +endif + +# Auto-set NO_WATCHER for Termux environment if not explicitly set +ifeq ($(IS_TERMUX),true) + ifeq ($(NO_WATCHER),) + NO_WATCHER := true + $(info Detected Android Termux environment, automatically setting NO_WATCHER=true) + endif +endif + ifeq ($(NO_WATCHER),true) COMPILE_FLAGS += -DYUE_NO_WATCHER endif # Add platform related linker flag ifneq ($(UNAME_S),Darwin) - LINK_FLAGS += -lstdc++fs -Wl,-E + LINK_FLAGS += -Wl,-E PLAT = linux else LINK_FLAGS += -framework CoreFoundation -framework CoreServices -- cgit v1.2.3-55-g6feb