From ae1412fdc283e442a0869aa7d63778449a7e5cfe Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 16 Jan 2020 00:51:22 +0100 Subject: Features toggle to avoid bloat and unauthorized functions, config file, script to generate a rendu branch --- Makefile | 156 +++++++++++++--------------------------------- include/libft.h | 10 ++- libft.conf | 11 ++++ pre2019_subject.en.pdf | Bin 1455686 -> 0 bytes scripts/generate_rendu.sh | 26 ++++++++ src/str/ft_atoi_strict.c | 39 ++++++++++++ src/str/ft_strict_atoi.c | 39 ------------ subject.en.pdf | Bin 1657956 -> 0 bytes subject.pdf | Bin 0 -> 1657956 bytes 9 files changed, 127 insertions(+), 154 deletions(-) create mode 100644 libft.conf delete mode 100644 pre2019_subject.en.pdf create mode 100644 scripts/generate_rendu.sh create mode 100644 src/str/ft_atoi_strict.c delete mode 100644 src/str/ft_strict_atoi.c delete mode 100644 subject.en.pdf create mode 100644 subject.pdf 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 diff --git a/include/libft.h b/include/libft.h index a7f86af..c2215ed 100644 --- a/include/libft.h +++ b/include/libft.h @@ -18,11 +18,16 @@ # include # include # include + # include + + # include "get_next_line.h" -# define TRUE 1 -# define FALSE 0 +# ifdef __linux__ +# include +# define OPEN_MAX FOPEN_MAX +# endif # define MIN(x, y) ((x) < (y) ? (x) : (y)) # define MAX(x, y) ((x) > (y) ? (x) : (y)) @@ -157,5 +162,4 @@ char *ft_itoa(int n); int ft_strict_atoi(const char *s); long ft_strtol(const char *s, char **endptr, int base); - #endif diff --git a/libft.conf b/libft.conf new file mode 100644 index 0000000..a9f3ea7 --- /dev/null +++ b/libft.conf @@ -0,0 +1,11 @@ +# Making + +SRC_DIR=src +INCLUDE_DIR=include +BUILD_DIR=build +FEATURES=get_next_line ft_lst + + +# Repository + +RENDU_IGNORE=subject.pdf README.md scripts build libft.conf diff --git a/pre2019_subject.en.pdf b/pre2019_subject.en.pdf deleted file mode 100644 index e5bee09..0000000 Binary files a/pre2019_subject.en.pdf and /dev/null differ diff --git a/scripts/generate_rendu.sh b/scripts/generate_rendu.sh new file mode 100644 index 0000000..1b68a97 --- /dev/null +++ b/scripts/generate_rendu.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +if [ "$(git status --porcelain)" ] +then + echo "Error: Your working directory isn't clean" + exit +fi + +BASE_BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) +RENDU_BRANCH_NAME="rendu-$BASE_BRANCH_NAME" + +if [ -z $(git show-ref --verify --quiet refs/heads/$RENDU_BRANCH_NAME) ] +then + echo "Error: $RENDU_BRANCH_NAME was already generated" + exit +fi + +git checkout -b $RENDU_BRANCH_NAME +RENDU_IGNORE=$(sed -n 's/RENDU_IGNORE=//p') +make fclean +rm -f $RENDU_IGNORE + +# generate makefile strict src + +git add . +git commit --message "Generated commit: creation of rendu for $BASE_BRANCH_NAME" diff --git a/src/str/ft_atoi_strict.c b/src/str/ft_atoi_strict.c new file mode 100644 index 0000000..6156b03 --- /dev/null +++ b/src/str/ft_atoi_strict.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strict_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cacharle +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/01/15 10:06:29 by cacharle #+# #+# */ +/* Updated: 2020/01/15 14:09:03 by cacharle ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +#include +int ft_strict_atoi(const char *s) +{ + char *end; + long ret; + + if (*s != '-' && !ft_isdigit(*s)) + { + errno = EINVAL; + return (0); + } + errno = 0; + ret = ft_strtol(s, &end, 10); + if (errno == ERANGE || ret > INT_MAX || ret < INT_MIN) + { + errno = ERANGE; + return (0); + } + if (*end != '\0') + { + errno = EINVAL; + return (0); + } + return (ret); +} diff --git a/src/str/ft_strict_atoi.c b/src/str/ft_strict_atoi.c deleted file mode 100644 index 6156b03..0000000 --- a/src/str/ft_strict_atoi.c +++ /dev/null @@ -1,39 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strict_atoi.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: cacharle +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2020/01/15 10:06:29 by cacharle #+# #+# */ -/* Updated: 2020/01/15 14:09:03 by cacharle ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" - -#include -int ft_strict_atoi(const char *s) -{ - char *end; - long ret; - - if (*s != '-' && !ft_isdigit(*s)) - { - errno = EINVAL; - return (0); - } - errno = 0; - ret = ft_strtol(s, &end, 10); - if (errno == ERANGE || ret > INT_MAX || ret < INT_MIN) - { - errno = ERANGE; - return (0); - } - if (*end != '\0') - { - errno = EINVAL; - return (0); - } - return (ret); -} diff --git a/subject.en.pdf b/subject.en.pdf deleted file mode 100644 index 67a054c..0000000 Binary files a/subject.en.pdf and /dev/null differ diff --git a/subject.pdf b/subject.pdf new file mode 100644 index 0000000..67a054c Binary files /dev/null and b/subject.pdf differ -- cgit