# Copyright © 2010, 2013
#    Thorsten Glaser <t.glaser@tarent.de>
# This file is provided under the same terms as mksh.

LOCAL_PATH := $(call my-dir)


# /system/etc/mkshrc

include $(CLEAR_VARS)

LOCAL_MODULE := mkshrc
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT)/etc
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)


# /system/bin/sh

include $(CLEAR_VARS)

LOCAL_MODULE := sh
LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk

# mksh source files
MKSH_SRC_FILES := \
    src/lalloc.c src/edit.c src/eval.c src/exec.c \
    src/expr.c src/funcs.c src/histrap.c src/jobs.c \
    src/lex.c src/main.c src/misc.c src/shf.c \
    src/syn.c src/tree.c src/var.c

MKSH_INCLUDES := $(LOCAL_PATH)/src

MKSH_CFLAGS += \
    -Wno-deprecated-declarations \
    -fno-asynchronous-unwind-tables \
    -fno-strict-aliasing \
    -fstack-protector -fwrapv \

# ...and CPPFLAGS.
MKSH_CFLAGS += \
    -DDEBUG_LEAKS -DMKSH_ASSUME_UTF8 \
    -DMKSH_DONT_EMIT_IDSTRING \
    -DMKSH_BUILDSH \
    -D_GNU_SOURCE -DSETUID_CAN_FAIL_WITH_EAGAIN \
    -DHAVE_ATTRIBUTE_BOUNDED=0 -DHAVE_ATTRIBUTE_FORMAT=1 \
    -DHAVE_ATTRIBUTE_NORETURN=1 \
    -DHAVE_ATTRIBUTE_PURE=1 \
    -DHAVE_ATTRIBUTE_UNUSED=1 \
    -DHAVE_ATTRIBUTE_USED=1 -DHAVE_SYS_TIME_H=1 -DHAVE_TIME_H=1 \
    -DHAVE_BOTH_TIME_H=1 -DHAVE_SYS_BSDTYPES_H=0 \
    -DHAVE_SYS_FILE_H=1 -DHAVE_SYS_MKDEV_H=0 -DHAVE_SYS_MMAN_H=1 \
    -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_RESOURCE_H=1 \
    -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_SYSMACROS_H=1 \
    -DHAVE_BSTRING_H=0 -DHAVE_GRP_H=1 -DHAVE_IO_H=0 -DHAVE_LIBGEN_H=1 \
    -DHAVE_LIBUTIL_H=0 -DHAVE_PATHS_H=1 -DHAVE_STDINT_H=1 \
    -DHAVE_STRINGS_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_ULIMIT_H=0 \
    -DHAVE_VALUES_H=0 -DHAVE_CAN_INTTYPES=1 -DHAVE_CAN_UCBINTS=1 \
    -DHAVE_CAN_INT8TYPE=1 -DHAVE_CAN_UCBINT8=1 -DHAVE_RLIM_T=1 \
    -DHAVE_SIG_T=1 \
    -DHAVE_STRING_POOLING=1 \
    -DHAVE_SYS_ERRLIST=0 -DHAVE_SYS_SIGNAME=1 \
    -DHAVE_SYS_SIGLIST=1 -DHAVE_FLOCK=1 -DHAVE_LOCK_FCNTL=1 \
    -DHAVE_GETRUSAGE=1 \
    -DHAVE_GETSID=1 \
    -DHAVE_GETTIMEOFDAY=1 \
    -DHAVE_ISSETUGID=0 \
    -DHAVE_KILLPG=1 \
    -DHAVE_MEMMOVE=1 -DHAVE_MKNOD=0 -DHAVE_MMAP=1 -DHAVE_NICE=1 \
    -DHAVE_REVOKE=0 -DHAVE_SETLOCALE_CTYPE=0 \
    -DHAVE_LANGINFO_CODESET=0 -DHAVE_SELECT=1 -DHAVE_SETRESUGID=1 \
    -DHAVE_SETGROUPS=1 -DHAVE_STRERROR=1 -DHAVE_STRSIGNAL=0 \
    -DHAVE_STRLCPY=1 -DHAVE_FLOCK_DECL=1 -DHAVE_REVOKE_DECL=1 \
    -DHAVE_SYS_ERRLIST_DECL=0 -DHAVE_SYS_SIGLIST_DECL=1 \
    -DHAVE_PERSISTENT_HISTORY=0 -DMKSH_BUILD_R=541

LOCAL_SRC_FILES := $(MKSH_SRC_FILES)

LOCAL_SYSTEM_SHARED_LIBRARIES := libc

LOCAL_C_INCLUDES := $(MKSH_INCLUDES)

# Additional flags first...
LOCAL_CFLAGS += \
    -DMKSH_DEFAULT_PROFILEDIR=\"/system/etc\" \
    -DMKSHRC_PATH=\"/system/etc/mkshrc\" \
    -DMKSH_DEFAULT_EXECSHELL=\"/system/bin/sh\" \
    -DMKSH_DEFAULT_TMPDIR=\"/data/local\" \

LOCAL_CFLAGS += $(MKSH_CFLAGS)

include $(BUILD_EXECUTABLE)

ifeq ($(PRODUCT_FULL_TREBLE),true)
# /vendor/etc/mkshrc
include $(CLEAR_VARS)

LOCAL_MODULE := mkshrc_vendor
LOCAL_MODULE_STEM := mkshrc
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)

# /vendor/bin/sh
include $(CLEAR_VARS)

LOCAL_MODULE := sh_vendor
LOCAL_MODULE_STEM := sh
LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES)

# mksh source files
LOCAL_SRC_FILES := $(MKSH_SRC_FILES)

LOCAL_STATIC_LIBRARIES := libc

LOCAL_C_INCLUDES := $(MKSH_INCLUDES)

# Additional flags first...
LOCAL_CFLAGS += \
    -DMKSH_DEFAULT_PROFILEDIR=\"/vendor/etc\" \
    -DMKSHRC_PATH=\"/vendor/etc/mkshrc\" \
    -DMKSH_DEFAULT_EXECSHELL=\"/vendor/bin/sh\" \
    -DMKSH_DEFPATH_OVERRIDE=\"/vendor/bin:/vendor/xbin\" \

LOCAL_CFLAGS += $(MKSH_CFLAGS)

LOCAL_FORCE_STATIC_EXECUTABLE := true

include $(BUILD_EXECUTABLE)
endif

MKSH_SRC_FILES:=
MKSH_CFLAGS:=
MKSH_INCLUDES:=
