diff --git a/Makefile b/Makefile index cb9c177..7d19add 100644 --- a/Makefile +++ b/Makefile @@ -6,221 +6,147 @@ # By: sede-san make DEBUG=1 -DFLAGS = -g3 -ifeq ($(DEBUG), 1) - CFLAGS += $(DFLAGS) +ifeq ($(DEBUG), lldb) # debug with LLDB + CFLAGS += -g3 +else ifeq ($(DEBUG), address) # use AdressSanitize + CFLAGS += -fsanitize=address -g3 +else # apply optimization flags if no debugging is being done + CFLAGS += -O3 endif -# Make command with no-print-directory flag -MAKE += --no-print-directory - -# ***************************** Style variables ****************************** # - -# Define color codes -RED = \033[0;31m -GREEN = \033[0;32m -YELLOW = \033[0;33m -BLUE = \033[0;34m -RESET = \033[0m # No Color - -# Emojis -EMOJI_BROOM = ๐Ÿงน -EMOJI_CHECK = โœ… -EMOJI_CROSS = โŒ -EMOJI_WRENCH = ๐Ÿ”ง -EMOJI_BOX = ๐Ÿ“ฆ +MAKE += --no-print-directory # ****************************** Source files ******************************** # -# Source files path -SRC_PATH = src +SRC_PATH = src +# SRC = +SRC = $(shell find $(SRC_PATH) -type f -name "*.c") -# Source files -SRC = \ - $(SRC_PATH)/minishell.c \ - $(SRC_PATH)/commands/command_utils.c \ - $(SRC_PATH)/commands/exec.c \ - $(SRC_PATH)/commands/parse.c \ - $(SRC_PATH)/features/builtins/builtin_utils.c \ - $(SRC_PATH)/features/builtins/cd.c \ - $(SRC_PATH)/features/builtins/echo.c \ - $(SRC_PATH)/features/builtins/exit.c \ - $(SRC_PATH)/features/builtins/export.c \ - $(SRC_PATH)/features/builtins/printenv.c \ - $(SRC_PATH)/features/builtins/pwd.c \ - $(SRC_PATH)/features/builtins/unset.c \ - $(SRC_PATH)/utils/signals.c - -# Include path -INCLUDE_PATH = ./include +INCLUDE_PATH = include # ****************************** Object files ******************************** # -# Object files path -OBJS_PATH = build +OBJS_PATH = build +OBJS = $(SRC:$(SRC_PATH)/%.c=$(OBJS_PATH)/%.o) -# Source files and destination paths -OBJS = $(SRC:$(SRC_PATH)/%.c=$(OBJS_PATH)/%.o) - -# Compile as object files $(OBJS_PATH)/%.o: $(SRC_PATH)/%.c @mkdir -p $(@D) - @$(CC) $(CFLAGS) -c $< -o $@ $(HEADERS) - @echo "$< compiled" + @$(CC) $(CFLAGS) $(HEADERS) -c $< -o $@ + @$(PRINT) "$< compiled" # ********************************* Rules ************************************ # -# Compile all -all: lib $(NAME) +all: mandatory .PHONY: all -# Compile project -$(NAME): $(OBJS) - @echo "$(YELLOW)$(EMOJI_BOX) Linking...$(RESET)" - @$(CC) $(CFLAGS) $(OBJS) $(LIBS) -o $(NAME) - @echo "$(GREEN)$(EMOJI_CHECK) Linked.$(RESET)" +mandatory: libft get_next_line $(NAME) +.PHONY: mandatory + +$(NAME): $(OBJS) + @$(CC) $(CFLAGS) $(OBJS) $(LIBS) -o $(NAME) + @$(PRINT) "$(GREEN)$(EMOJI_CHECK) $(NAME) ready. $(RESET)" -# Clean object files clean: - @echo "$(RED)$(EMOJI_BROOM) Cleaning object files...$(RESET)" @rm -rf $(OBJS_PATH) - @echo "$(GREEN)$(EMOJI_CHECK) Object files cleaned.$(RESET)" + @$(PRINT) "$(RED)$(EMOJI_BROOM) Object files removed.$(RESET)" .PHONY: clean -# Clean object files and binaries fclean: clean - @echo "$(RED)$(EMOJI_BROOM) Cleaning binaries...$(RESET)" @rm -f $(NAME) - @if [ -d $(LIBFT_PATH) ]; then \ - $(MAKE) -C $(LIBFT_PATH) fclean; \ + @if [ -d $(LIBFT_PATH) ]; then \ + $(MAKE) --silent -C $(LIBFT_PATH) fclean > /dev/null; \ fi - @if [ -d $(GNL_PATH) ]; then \ - $(MAKE) -C $(GNL_PATH) fclean; \ + @if [ -d $(GET_NEXT_LINE_PATH) ]; then \ + $(MAKE) --silent -C $(GET_NEXT_LINE_PATH) fclean > /dev/null; \ fi - @echo "$(GREEN)$(EMOJI_CHECK) Binaries cleaned.$(RESET)" + @$(PRINT) "$(RED)$(EMOJI_BROOM) Binaries removed.$(RESET)" .PHONY: fclean -# Delete libraries, object files and binaries -update: fclean - @echo "$(RED)$(EMOJI_BROOM) Removing libraries...$(RESET)" - @rm -rf $(LIB_PATH) - @echo "$(GREEN)$(EMOJI_CHECK) Libraries removed.$(RESET)" - @echo "$(YELLOW)$(EMOJI_WRENCH) Fetching updates...$(RESET)" - @git pull - @echo "$(GREEN)$(EMOJI_CHECK) Updated.$(RESET)" - @echo "$(YELLOW)$(EMOJI_WRENCH) Recompiling...$(RESET)" - @$(MAKE) -.PHONY: update - -# Recompile re: fclean all .PHONY: re -# ********************************* Libraries ******************************** # +# ****************************** Libraries ********************************** # -# Compile libraries -lib: - @$(MAKE) libft -# @$(MAKE) ft_printf - @$(MAKE) get_next_line -.PHONY: lib - -# Compile file with libraries -LIBS = -lreadline $(GNL_BIN) $(LIBFT_BIN) # $(PRINTF_BIN) - -# Libraries path -LIB_PATH = lib +LIBS = -lreadline $(LIBFT_NAME) $(GET_NEXT_LINE_NAME) +LIBS_INCLUDE = -I $(LIBFT_INCLUDE_PATH) -I $(GET_NEXT_LINE_INCLUDE_PATH) +LIBS_PATH = lib # ** Libft ** # -LIBFT = Libft -LIBFT_REPO = https://github.com/sdevsantiago/Libft.git -LIBFT_PATH = $(LIB_PATH)/$(LIBFT) -LIBFT_INCLUDE_PATH = $(LIBFT_PATH) -LIBFT_BIN = $(LIBFT_PATH)/libft.a +LIBFT = Libft +LIBFT_REPO = https://github.com/sdevsantiago/Libft.git +LIBFT_PATH = $(LIBS_PATH)/$(LIBFT) +LIBFT_INCLUDE_PATH = $(LIBFT_PATH) +LIBFT_NAME = $(LIBFT_PATH)/libft.a -libft: - @if [ ! -d $(LIBFT_PATH) ]; then \ - echo "$(YELLOW)$(EMOJI_WRENCH) Cloning $(LIBFT)...$(RESET)"; \ - git clone $(LIBFT_REPO) $(LIBFT_PATH); \ - rm -rf $(LIBFT_PATH)/.git; \ - echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) cloned...$(RESET)"; \ - fi - @if [ ! -f $(LIBFT_BIN) ]; then \ - echo "$(YELLOW)$(EMOJI_WRENCH) Compiling $(LIBFT)...$(RESET)"; \ - $(MAKE) -C $(LIBFT_PATH) all bonus clean; \ - echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) compiled.$(RESET)"; \ - else \ - echo "$(GREEN)$(EMOJI_CHECK) $(LIBFT) already compiled.$(RESET)"; \ - fi +libft: $(LIBFT_NAME) .PHONY: libft -# ** ft_printf ** # - -PRINTF = ft_printf -PRINTF_REPO = https://github.com/sdevsantiago/ft_printf.git -PRINTF_PATH = $(LIB_PATH)/$(PRINTF) -PRINTF_INCLUDE_PATH = $(PRINTF_PATH) -PRINTF_BIN = $(PRINTF_PATH)/libftprintf.a - -ft_printf: - @if [ ! -d $(PRINTF_PATH) ]; then \ - echo "$(YELLOW)$(EMOJI_WRENCH) Cloning $(PRINTF)...$(RESET)"; \ - git clone $(PRINTF_REPO) $(PRINTF_PATH); \ - rm -rf $(PRINTF_PATH)/.git; \ - echo "$(GREEN)$(EMOJI_CHECK) $(PRINTF) cloned...$(RESET)"; \ +$(LIBFT_NAME): + @if [ ! -d $(LIBFT_PATH) ]; then \ + $(PRINT) "$(YELLOW)$(EMOJI_WRENCH) Cloning $(LIBFT)...$(RESET)"; \ + git clone --quiet $(LIBFT_REPO) $(LIBFT_PATH); \ + rm -rf $(LIBFT_PATH)/.git; \ + $(PRINT) "$(GREEN)$(EMOJI_CHECK) $(LIBFT) cloned...$(RESET)"; \ fi - @if [ ! -f $(PRINTF_BIN) ]; then \ - echo "$(YELLOW)$(EMOJI_WRENCH) Compiling $(PRINTF)...$(RESET)"; \ - $(MAKE) -C $(PRINTF_PATH) all bonus clean; \ - echo "$(GREEN)$(EMOJI_CHECK) $(PRINTF) compiled.$(RESET)"; \ - else \ - echo "$(GREEN)$(EMOJI_CHECK) $(PRINTF) already compiled.$(RESET)"; \ + @if [ ! -f $(LIBFT_NAME) ]; then \ + $(PRINT) "$(YELLOW)$(EMOJI_WRENCH) Compiling $(LIBFT)...$(RESET)"; \ + $(MAKE) --silent -C $(LIBFT_PATH) all clean; \ + $(PRINT) "$(GREEN)$(EMOJI_CHECK) $(LIBFT) compiled.$(RESET)"; \ fi -.PHONY: ft_printf -# ** get_next_line ** # +# ** get_next_line ** -GNL = get_next_line -GNL_REPO = https://github.com/sdevsantiago/get_next_line.git -GNL_PATH = $(LIB_PATH)/$(GNL) -GNL_INCLUDE_PATH = $(GNL_PATH)/include -GNL_BIN = $(GNL_PATH)/get_next_line.a +GET_NEXT_LINE = get_next_line +GET_NEXT_LINE_REPO = https://github.com/sdevsantiago/get_next_line.git +GET_NEXT_LINE_PATH = $(LIBS_PATH)/$(GET_NEXT_LINE) +GET_NEXT_LINE_INCLUDE_PATH = $(GET_NEXT_LINE_PATH)/include +GET_NEXT_LINE_NAME = $(GET_NEXT_LINE_PATH)/get_next_line.a -get_next_line: - @if [ ! -d $(GNL_PATH) ]; then \ - echo "$(YELLOW)$(EMOJI_WRENCH) Cloning $(GNL)...$(RESET)"; \ - git clone $(GNL_REPO) $(GNL_PATH); \ - rm -rf $(GNL_PATH)/.git; \ - rm -rf $(GNL_PATH)/tests; \ - echo "$(GREEN)$(EMOJI_CHECK) $(GNL) cloned...$(RESET)"; \ - fi - @if [ ! -f $(GNL_BIN) ]; then \ - echo "$(YELLOW)$(EMOJI_WRENCH) Compiling $(GNL)...$(RESET)"; \ - $(MAKE) -C $(GNL_PATH) all clean; \ - echo "$(GREEN)$(EMOJI_CHECK) $(GNL) compiled.$(RESET)"; \ - else \ - echo "$(GREEN)$(EMOJI_CHECK) $(GNL) already compiled.$(RESET)"; \ - fi +get_next_line: $(GET_NEXT_LINE_NAME) .PHONY: get_next_line + +$(GET_NEXT_LINE_NAME): + @if [ ! -d $(GET_NEXT_LINE_PATH) ]; then \ + $(PRINT) "$(YELLOW)$(EMOJI_WRENCH) Cloning $(GET_NEXT_LINE)...$(RESET)"; \ + git clone --quiet $(GET_NEXT_LINE_REPO) $(GET_NEXT_LINE_PATH); \ + rm -rf $(GET_NEXT_LINE_PATH)/.git; \ + rm -rf $(GET_NEXT_LINE_PATH)/tests; \ + rm -rf $(GET_NEXT_LINE_PATH)/files; \ + $(PRINT) "$(GREEN)$(EMOJI_CHECK) $(GET_NEXT_LINE) cloned...$(RESET)"; \ + fi + @if [ ! -f $(GET_NEXT_LINE_NAME) ]; then \ + $(PRINT) "$(YELLOW)$(EMOJI_WRENCH) Compiling $(GET_NEXT_LINE)...$(RESET)"; \ + $(MAKE) --silent -C $(GET_NEXT_LINE_PATH) all clean > /dev/null; \ + $(PRINT) "$(GREEN)$(EMOJI_CHECK) $(GET_NEXT_LINE) compiled.$(RESET)"; \ + fi + +# ***************************** Style variables ****************************** # + +PRINT = printf "%b\n" + +RED = \033[0;31m +GREEN = \033[0;32m +YELLOW = \033[0;33m +BLUE = \033[0;34m +RESET = \033[0m + +EMOJI_BROOM = ๐Ÿงน +EMOJI_CHECK = โœ… +EMOJI_CROSS = โŒ +EMOJI_WRENCH = ๐Ÿ”ง +EMOJI_BOX = ๐Ÿ“ฆ