-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
189 lines (159 loc) · 5.14 KB
/
Copy pathMakefile
File metadata and controls
189 lines (159 loc) · 5.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# **************************************************************************** #
# Colors #
# **************************************************************************** #
C_STD = \033[0;39m
C_GRAY = \033[0;90m
C_RED = \033[0;91m
C_GREEN = \033[0;92m
C_YELLOW = \033[0;93m
C_BLUE = \033[0;94m
C_MAGENTA = \033[0;95m
C_CYAN = \033[0;96m
C_WHITE = \033[0;97m
# **************************************************************************** #
# Files #
# **************************************************************************** #
NAME = minishell
LIBFT = $(LIBFT_PATH)libft.a
VALGRINDRC = ~/.valgrindrc
READLINESUPP = ~/.readline.supp
# **************************************************************************** #
# Path's #
# **************************************************************************** #
INC_PATH = include
BUILD_PATH = .build/
VPATH += ./
VPATH += src/
VPATH += src/aux
VPATH += src/aux/get
VPATH += src/aux/btree
VPATH += src/parse
VPATH += src/parse/aux
VPATH += src/parse/aux/get
VPATH += src/parse/aux/string_argument
VPATH += src/parse/aux/string_argument/aux
VPATH += src/execute
VPATH += src/execute/aux
VPATH += src/signal
VPATH += src/builtin
VPATH += src/builtin/aux
VPATH += src/builtin/aux/get
VPATH += src/error
VPATH += src/error/aux
VPATH += src/error/aux/get
LIBFT_PATH = $(INC_PATH)/libft/
# **************************************************************************** #
# Files #
# **************************************************************************** #
FILES += main
FILES += initializer
FILES += minishell
FILES += prompt_prefix
FILES += signal_handler
FILES += free_all
FILES += new_shlvl
FILES += is_variable_exist
FILES += is_directory
#parsing
FILES += get_size_double_array
FILES += parse
FILES += heredoc
FILES += get_operator
FILES += get_valid_path
FILES += get_command
FILES += handle_file
FILES += get_var_path
FILES += string_argument
FILES += string_argument_size
FILES += is_tohandle_backslash
FILES += is_var_char
FILES += quotes
FILES += get_realloc_args
FILES += is_valid_argument
FILES += is_quotes_valid
FILES += is_str_alpha
#binary_tree
FILES += btree_create
FILES += btree_add_as_first
FILES += btree_set_file_last_cmd
#execute
FILES += process_manager
FILES += execute
FILES += execute_utils
FILES += builtin
FILES += count_cmds
#built-in
FILES += ft_pwd
FILES += ft_cd
FILES += ft_env
FILES += ft_echo
FILES += ft_export
FILES += ft_unset
FILES += ft_exit
FILES += get_ascii_order
#error
FILES += error
FILES += is_to_exit
FILES += print_error
FILES += get_exit_error_code
FILES += get_error_description
SRCS = $(addprefix ./, $(addsuffix .c, $(FILES)))
OBJS = $(addprefix $(BUILD_PATH), $(addsuffix .o, $(FILES)))
# **************************************************************************** #
# Git #
# **************************************************************************** #
LIBFT_URL = https://github.com/Denionline/libft.git
# **************************************************************************** #
# Compiler #
# **************************************************************************** #
CC = cc
CFLAGS = -Werror -Wextra -Wall -g
MAKE = make --no-print-directory
MAKERE = make re --no-print-directory
RM = rm -rf
LIBS = $(LIBFT)
# **************************************************************************** #
# Commands #
# **************************************************************************** #
all: start verify_libft $(VALGRINDRC) $(NAME)
@printf "$(C_MAGENTA)===========End [$(NAME)]===========$(C_STD)\n"
start:
@printf "$(C_MAGENTA)===========Program [$(NAME)]===========$(C_STD)\n"
$(NAME): $(BUILD_PATH) $(OBJS)
@$(CC) $(CFLAGS) -I$(INC_PATH) $(OBJS) -lreadline $(LIBS) -o $(NAME)
$(BUILD_PATH)%.o: %.c
@$(CC) $(CFLAGS) -I$(INC_PATH) -c $< -o $@
@printf "$(C_YELLOW)Compiling $< -> $@$(C_STD)\n";
$(BUILD_PATH):
@mkdir -p $(BUILD_PATH)
clean:
@$(RM) $(BUILD_PATH)
fclean: clean
@$(RM) $(NAME)
re: fclean make_libft all
$(VALGRINDRC): $(READLINESUPP)
@echo "--suppressions=$(HOME)/.readline.supp" > $(VALGRINDRC)
$(READLINESUPP):
@echo "\
{\n\
leak readline\n\
Memcheck:Leak\n\
...\n\
fun:readline\n\
}\n\
{\n\
leak add_history\n\
Memcheck:Leak\n\
...\n\
fun:add_history\n\
}" > $(READLINESUPP)
verify_libft:
@if test ! -d "$(LIBFT_PATH)"; then $(MAKE) get_libft; \
else printf "libft: $(C_GREEN)✅$(C_STD)\n"; fi
@cd $(LIBFT_PATH); git pull; $(MAKE); cd ../../
get_libft:
@echo "Cloning Libft"
@git clone $(LIBFT_URL) $(LIBFT_PATH)
@printf "$(C_GREEN)libft$(C_STD) successfully downloaded\n"
make_libft:
@$(MAKERE) -C $(LIBFT_PATH)