aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile156
1 files changed, 44 insertions, 112 deletions
diff --git a/Makefile b/Makefile
index 429d029..fbe4ee7 100644
--- a/Makefile
+++ b/Makefile
@@ -13,137 +13,69 @@
LIB = ar rcs
RM = rm -f
-SRC_DIR = src
-OBJ_DIR = build
-INCLUDE_DIR = include
-GET_NEXT_LINE_DIR = get_next_line
-
CC = gcc
CCFLAGS = -I$(INCLUDE_DIR) -Wall -Wextra -Werror
NAME = libft.a
-# SRC_CTYPE_DIR = ctype
-# SRC_CTYPE = ft_isalnum.c \
-# ft_isalpha.c \
-# ft_isascii.c \
-# ft_isdigit.c \
-# ft_isprint.c \
-# ft_tolower.c \
-# ft_toupper.c
-#
-# SRC_IO_DIR = io
-# SRC_IO = ft_asprintf.c \
-# ft_dprintf.c \
-# ft_printf \
-# ft_printf.c \
-# ft_putchar.c \
-# ft_putchar_fd.c \
-# ft_putendl.c \
-# ft_putendl_fd.c \
-# ft_putnbr.c \
-# ft_putnbr_fd.c \
-# ft_putstr.c \
-# ft_putstr_fd.c \
-# ft_snprintf.c \
-# ft_sprintf.c \
-# ft_vasprintf.c \
-# ft_vdprintf.c \
-# ft_vprintf.c \
-# ft_vsnprintf.c \
-# ft_vsprintf.c \
-# get_next_line
-#
-# SRC_LST_DIR = lst
-# SRC_LST = ft_lstadd_back.c \
-# ft_lstadd_front.c \
-# ft_lstclear.c \
-# ft_lstdelone.c \
-# ft_lstiter.c \
-# ft_lstlast.c \
-# ft_lstmap.c \
-# ft_lstnew.c \
-# ft_lstpop_front.c \
-# ft_lstsize.c
-#
-# SRC_MEM_DIR = mem
-# SRC_MEM = ft_bzero.c \
-# ft_calloc.c \
-# ft_memalloc.c \
-# ft_memccpy.c \
-# ft_memchr.c \
-# ft_memcmp.c \
-# ft_memcpy.c \
-# ft_memdel.c \
-# ft_memmove.c \
-# ft_memset.c
-#
-# SRC_STR_DIR = str
-# SRC_STR = ft_atoi.c \
-# ft_itoa.c \
-# ft_split.c \
-# ft_strcat.c \
-# ft_strchr.c \
-# ft_strclr.c \
-# ft_strcmp.c \
-# ft_strcount.c \
-# ft_strcpy.c \
-# ft_strdel.c \
-# ft_strdup.c \
-# ft_strequ.c \
-# ft_striter.c \
-# ft_striteri.c \
-# ft_strjoin.c \
-# ft_strjoin_free.c \
-# ft_strjoin_free_snd.c \
-# ft_strlcat.c \
-# ft_strlcpy.c \
-# ft_strlen.c \
-# ft_strmap.c \
-# ft_strmapi.c \
-# ft_strncat.c \
-# ft_strncmp.c \
-# ft_strncpy.c \
-# ft_strndup.c \
-# ft_strnequ.c \
-# ft_strnew.c \
-# ft_strnstr.c \
-# ft_strrchr.c \
-# ft_strstr.c \
-# ft_strtrim.c \
-# ft_substr.c
-
-SRC = $(shell find $(SRC_DIR) -name *.c)
-
-# SRC = $(addprefix $(SRC_DIR)/,$(SRC_FILES))
-OBJ = $(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
+# AVAILABLE_FEATURES = get_next_line ft_printf ft_lst
+CONF_FILE = libft.conf
+
+ifeq ($(wildcard $(CONF_FILE)),)
+$(warning "No configuration file found with name $(CONF_FILE), using default")
+ SRC_DIR = src
+ BUILD_DIR = build
+ INCLUDE_DIR = include
+ FEATURES = get_next_line
+else
+ SRC_DIR = $(shell sed -n 's/SRC_DIR=//p' $(CONF_FILE))
+ BUILD_DIR = $(shell sed -n 's/BUILD_DIR=//p' $(CONF_FILE))
+ INCLUDE_DIR = $(shell sed -n 's/INCLUDE_DIR=//p' $(CONF_FILE))
+ FEATURES = $(shell sed -n 's/FEATURES=//p' $(CONF_FILE))
+endif
+
+ifeq ($(findstring get_next_line,$(FEATURES)),)
+ FIND_ARGS += -not -path "*get_next_line*"
+endif
+ifeq ($(findstring ft_printf,$(FEATURES)),)
+ FIND_ARGS += -not -path "*printf*"
+endif
+ifeq ($(findstring ft_lst,$(FEATURES)),)
+ FIND_ARGS += -not -name "ft_lst*"
+endif
+
+SRC = $(shell find $(SRC_DIR) $(FIND_ARGS) -name *.c)
+
+OBJ = $(SRC:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o)
HEADER_FILES = libft.h get_next_line.h
HEADER = $(addprefix $(INCLUDE_DIR)/,$(HEADER_FILES))
-
-BONUSOBJ = $(BONUSSRC:.c=.o)
-
all: make_build_dirs $(NAME)
make_build_dirs:
- @for dir in $$(find $(SRC_DIR)/* -type d | sed 's_$(SRC_DIR)/_$(OBJ_DIR)/_g'); \
+ @for dir in $$(find $(SRC_DIR)/* $(FIND_ARGS) -type d | \
+ sed 's_$(SRC_DIR)/_$(BUILD_DIR)/_g'); \
do \
- if [ ! -d "$$dir" ]; then mkdir -p $$dir; fi \
+ if [ ! -d "$$dir" ]; then \
+ mkdir -p $$dir; echo "Making build dir: $$dir"; fi \
done
$(NAME): $(OBJ) $(HEADER)
- $(LIB) $(NAME) $(OBJ)
+ @echo "Linking: $@"
+ @$(LIB) $(NAME) $(OBJ)
-$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
- $(CC) $(CCFLAGS) -c -o $@ $<
+$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
+ @echo "Compiling: $@"
+ @$(CC) $(CCFLAGS) -c -o $@ $<
clean:
- $(RM) $(OBJ)
+ @echo "Removing objects"
+ @$(RM) -r $(BUILD_DIR)
+
fclean: clean
- $(RM) $(NAME)
+ @echo "Removing library"
+ @$(RM) $(NAME)
-re:
- @make fclean
- @make all
+re: fclean all