From fe39ae12accdae7210c4e6e4912f3d7f5f920070 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 18 Feb 2021 22:40:44 +0100 Subject: [PATCH] Fix sdcv build on macOS (#1310) --- .github/workflows/build.yml | 4 ++-- Makefile.third | 10 +++++++--- thirdparty/gettext/CMakeLists.txt | 11 ++++++++--- thirdparty/sdcv/CMakeLists.txt | 17 ++++++++++++++--- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2928f6b4b..a5b51c400 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,7 +33,7 @@ jobs: - name: Homebrew install dependencies # Compared to the README, adds ccache for faster compilation times and removes sh5sum to prevent some conflict with coreutils, and gnu-getopt because we're not using kodev - run: brew install ccache nasm ragel binutils coreutils libtool autoconf automake cmake makedepend sdl2 lua@5.1 luarocks gettext pkg-config wget + run: brew install ccache nasm ragel binutils coreutils libtool autoconf automake cmake makedepend sdl2 lua@5.1 luarocks gettext pkg-config wget bison - name: Building in progress… - run: export MACOSX_DEPLOYMENT_TARGET=10.14 PATH="$(brew --prefix)/opt/gettext/bin:${PATH}" && make fetchthirdparty && make + run: export MACOSX_DEPLOYMENT_TARGET=10.14 PATH="$(brew --prefix)/opt/gettext/bin:$(brew --prefix)/opt/bison/bin:${PATH}" && make fetchthirdparty && make diff --git a/Makefile.third b/Makefile.third index 98a47b5d1..6740c892f 100644 --- a/Makefile.third +++ b/Makefile.third @@ -328,9 +328,11 @@ $(LIBICONV): $(THIRDPARTY_DIR)/libiconv/*.* $(LIBGETTEXT): $(LIBICONV) $(THIRDPARTY_DIR)/gettext/*.* install -d $(GETTEXT_BUILD_DIR) cd $(GETTEXT_BUILD_DIR) && \ - $(CMAKE) $(CMAKE_FLAGS) -DCC="$(CC)" -DLIBICONV_PREFIX=$(LIBICONV_DIR) \ - -DAR="$(AR)" -DRANLIB="$(RANLIB)" \ + $(CMAKE) $(CMAKE_FLAGS) -DCC="$(CC)" -DAR="$(AR)" -DRANLIB="$(RANLIB)" \ + -DCPPFLAGS="$(CPPFLAGS) -I$(LIBICONV_DIR)/include" \ + -DLDFLAGS="$(LDFLAGS) -L$(LIBICONV_DIR)/lib" \ -DCHOST_OPTS="$(if $(EMULATE_READER),,--host=$(if $(ANDROID),arm-linux,$(CHOST)))" \ + -DLIBICONV_PREFIX=$(LIBICONV_DIR) \ $(if $(ANDROID),-DNDK=$(NDK),) \ $(if $(ANDROID),-DNDKABI=$(NDKABI),) \ $(CURDIR)/thirdparty/gettext && \ @@ -358,7 +360,7 @@ $(GLIB): $(if $(DARWIN),$(LIBICONV) $(LIBGETTEXT),) $(LIBFFI_DIR)/include $(THIR -DCFLAGS="$(CFLAGS)" -DLDFLAGS="$(LDFLAGS)" \ -DLIBICONV_DIR="$(LIBICONV_DIR)" \ -DLIBFFI_DIR="$(LIBFFI_DIR)" -DZLIB_DIR="$(ZLIB_DIR)" \ - -DWITH_LIBICONV="$(if $(DARWIN),yes,no)" -DENABLE_SHARED="glib" \ + -DWITH_LIBICONV="$(if $(DARWIN),gnu,no)" -DENABLE_SHARED="glib" \ -DHOST_OPTS="$(if $(EMULATE_READER),,--host=$(CHOST) --cache-file=arm_cache.conf)" \ $(CURDIR)/$(THIRDPARTY_DIR)/glib && \ $(CMAKE_MAKE_PROGRAM) $(CMAKE_MAKE_PROGRAM_FLAGS) @@ -424,7 +426,9 @@ $(OUTPUT_DIR)/sdcv: $(if $(ANDROID),$(GLIB_STATIC),$(GLIB)) $(ZLIB_STATIC) $(THI -DGLIB_DIR="$(GLIB_DIR)" \ -DZLIB="$(ZLIB_STATIC)" \ -DZLIB_DIR="$(ZLIB_DIR)" \ + -DLIBICONV="$(LIBICONV)" \ -DLIBICONV_DIR="$(LIBICONV_DIR)" \ + -DGETTEXT="$(LIBGETTEXT)" \ -DGETTEXT_DIR="$(GETTEXT_DIR)" \ -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) \ $(CURDIR)/$(THIRDPARTY_DIR)/sdcv && \ diff --git a/thirdparty/gettext/CMakeLists.txt b/thirdparty/gettext/CMakeLists.txt index 9ead75232..6bf6ac82e 100644 --- a/thirdparty/gettext/CMakeLists.txt +++ b/thirdparty/gettext/CMakeLists.txt @@ -6,6 +6,11 @@ include("koreader_thirdparty_common") enable_language(C) +assert_var_defined(CC) +assert_var_defined(AR) +assert_var_defined(RANLIB) +assert_var_defined(CPPFLAGS) +assert_var_defined(LDFLAGS) assert_var_defined(LIBICONV_PREFIX) assert_var_defined(CHOST_OPTS) @@ -17,13 +22,13 @@ if(DEFINED ENV{ANDROID}) set(PATCH_CMD "${KO_PATCH} ${CMAKE_CURRENT_SOURCE_DIR}/gettext-0.21-android-pre21-build.patch") endif() -set(CFG_ENV_VAR "CC=\"${CC}\" AR=\"${AR}\" RANLIB=\"${RANLIB}\"") +set(CFG_ENV_VAR "CC=\"${CC}\" AR=\"${AR}\" RANLIB=\"${RANLIB}\" CPPFLAGS=\"${CPPFLAGS}\" LDFLAGS=\"${LDFLAGS}\"") if(DEFINED ENV{ANDROID}) # workaround of 'undefined reference to getdtablesize' for NDK-r11c - set(CFG_ENV_VAR "${CFG_ENV_VAR} ac_cv_member_struct_lconv_decimal_point=no LDFLAGS=-lc LIBS=${NDK}/platforms/android-${NDKABI}/arch-arm/usr/lib/libc.a") + set(CFG_ENV_VAR "${CFG_ENV_VAR} ac_cv_member_struct_lconv_decimal_point=no LDFLAGS=\"${LDFLAGS} -lc\" LIBS=${NDK}/platforms/android-${NDKABI}/arch-arm/usr/lib/libc.a") endif() set(CFG_OPTS "--enable-silent-rules --with-threads=none --disable-acl --disable-curses --disable-openmp --disable-native-java --disable-java") -set(CFG_OPTS "${CFG_OPTS} --prefix=${BINARY_DIR} --with-libiconv-prefix=${LIBICONV_PREFIX}") +set(CFG_OPTS "${CFG_OPTS} --prefix=${BINARY_DIR} --with-libiconv-prefix=${LIBICONV_PREFIX} --with-included-libunistring --with-included-libxml --with-included-gettext") set(CFG_OPTS "${CFG_OPTS} --enable-shared=false --enable-static=true ${CHOST_OPTS}") set(CFG_CMD sh -c "${CFG_ENV_VAR} ${SOURCE_DIR}/configure ${CFG_OPTS}") diff --git a/thirdparty/sdcv/CMakeLists.txt b/thirdparty/sdcv/CMakeLists.txt index 5c8390c78..17112af6a 100644 --- a/thirdparty/sdcv/CMakeLists.txt +++ b/thirdparty/sdcv/CMakeLists.txt @@ -12,7 +12,9 @@ assert_var_defined(CFLAGS) assert_var_defined(CXXFLAGS) assert_var_defined(LDFLAGS) assert_var_defined(HOST) +assert_var_defined(GETTEXT) assert_var_defined(GETTEXT_DIR) +assert_var_defined(LIBICONV) assert_var_defined(LIBICONV_DIR) assert_var_defined(GLIB) assert_var_defined(GLIB_DIR) @@ -35,13 +37,13 @@ endif() # took me an eternity to find $ # important docs here https://cmake.org/cmake/help/v2.8.11/cmake.html#command:add_custom_command set(GLIB2_INCLUDE_DIRS "${GLIB_DIR}/include/glib-2.0") -set(GLIB2_INCLUDE_DIRS "${GLIB2_INCLUDE_DIRS}$${GLIB_DIR}/lib/glib-2.0/include$${GETTEXT_DIR}/include") +set(GLIB2_INCLUDE_DIRS "${GLIB2_INCLUDE_DIRS}$${GLIB_DIR}/lib/glib-2.0/include$${GETTEXT_DIR}/include$${LIBICONV_DIR}/include") set(GLIB2_LIBRARIES "${GLIB}") # `CMAKE_PREFIX_PATH`, `CMAKE_INCLUDE_PATH` and `CMAKE_LIBRARY_PATH` are key # It's very hard to tell CMake to use specific directories, but it's easy to # tell it to search in specific directories. -set(CMAKE_PREFIX_PATH "${GLIB2_INCLUDE_DIRS}$${ZLIB_DIR}$${LIBICONV_DIR}$${GETTEXT_DIR}") +set(CMAKE_PREFIX_PATH "${GLIB2_INCLUDE_DIRS}$${GETTEXT_DIR}$${LIBICONV_DIR}$${ZLIB_DIR}") # For some reason this doesn't actually work and CMake keeps finding mostly .so # Which is funny, because the .a is in the *same* directory. Just saying. @@ -50,7 +52,16 @@ if(DEFINED ENV{ANDROID} OR DEFINED ENV{DARWIN}) # glib2 also needs to link with libiconv and gettext # this is a fairly clean hack # CMAKE_CXX_FLAGS with -I and -L doesn't seem to have much of an effect - set(GLIB2_LIBRARIES "${GLIB2_LIBRARIES}$${LIBICONV_DIR}/lib/libiconv.a$${GETTEXT_DIR}/lib/libintl.a") + set(GLIB2_LIBRARIES "${GLIB2_LIBRARIES}$${GETTEXT_DIR}/lib/libintl.a$${LIBICONV_DIR}/lib/libiconv.a") +endif() + +# NOTE: This is all good and well, but it's unclear whether these actually end up as target_link_libraries, unlike GLIB2_LIBRARIES, +# hence the hack above... +if(DEFINED ENV{DARWIN}) + set(ICONV_INCLUDE_DIR "${LIBICONV_DIR}/include") + set(ICONV_LIBRARIES "${LIBICONV}") + set(LIBINTL_LIBRARIES "${GETTEXT}") + set(LIBINTL_FOUND True) endif() set(ZLIB_INCLUDE_DIR "${ZLIB_DIR}/include")