Skip to content

Commit

Permalink
Fix sdcv build on macOS (#1310)
Browse files Browse the repository at this point in the history
  • Loading branch information
NiLuJe committed Feb 18, 2021
1 parent 4a52447 commit fe39ae1
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 11 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Expand Up @@ -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
10 changes: 7 additions & 3 deletions Makefile.third
Expand Up @@ -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 && \
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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 && \
Expand Down
11 changes: 8 additions & 3 deletions thirdparty/gettext/CMakeLists.txt
Expand Up @@ -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)

Expand All @@ -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}")

Expand Down
17 changes: 14 additions & 3 deletions thirdparty/sdcv/CMakeLists.txt
Expand Up @@ -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)
Expand All @@ -35,13 +37,13 @@ endif()
# took me an eternity to find $<SEMICOLON>
# 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}$<SEMICOLON>${GLIB_DIR}/lib/glib-2.0/include$<SEMICOLON>${GETTEXT_DIR}/include")
set(GLIB2_INCLUDE_DIRS "${GLIB2_INCLUDE_DIRS}$<SEMICOLON>${GLIB_DIR}/lib/glib-2.0/include$<SEMICOLON>${GETTEXT_DIR}/include$<SEMICOLON>${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}$<SEMICOLON>${ZLIB_DIR}$<SEMICOLON>${LIBICONV_DIR}$<SEMICOLON>${GETTEXT_DIR}")
set(CMAKE_PREFIX_PATH "${GLIB2_INCLUDE_DIRS}$<SEMICOLON>${GETTEXT_DIR}$<SEMICOLON>${LIBICONV_DIR}$<SEMICOLON>${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.
Expand All @@ -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}$<SEMICOLON>${LIBICONV_DIR}/lib/libiconv.a$<SEMICOLON>${GETTEXT_DIR}/lib/libintl.a")
set(GLIB2_LIBRARIES "${GLIB2_LIBRARIES}$<SEMICOLON>${GETTEXT_DIR}/lib/libintl.a$<SEMICOLON>${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")
Expand Down

0 comments on commit fe39ae1

Please sign in to comment.