Advertisement
Guest User

Untitled

a guest
Nov 6th, 2017
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 9.76 KB | None | 0 0
  1.     # **************************************************************************** #
  2.     #                                                                              #
  3.     #                                                         :::      ::::::::    #
  4.     #    Makefile                                           :+:      :+:    :+:    #
  5.     #                                                     +:+ +:+         +:+      #
  6.     #    By: chbravo- <chbravo-@student.42.fr>          +#+  +:+       +#+         #
  7.     #                                                 +#+#+#+#+#+   +#+            #
  8.     #    Created: 2015/12/08 11:02:51 by chbravo-          #+#    #+#              #
  9.     #    Updated: 2017/10/11 11:52:49 by gpouyat          ###   ########.fr        #
  10.     #                                                                              #
  11.     # **************************************************************************** #
  12.  
  13.     #TODO fix indent, space before '\'...
  14.     NAME                    = 21sh
  15.  
  16.     SRC_SUBDIR              = core
  17.     SRCS                    += main.c prompt.c init.c input.c usage_help.c input_utils.c deinit.c
  18.  
  19.     SRC_SUBDIR              += environ
  20.     SRCS                    += environ.c env_list_utils.c getter_env.c builtin_environ.c\
  21.                                        builtin_env_utils.c modif_env.c
  22.  
  23.     SRC_SUBDIR              += builtins
  24.     SRCS                    += builtins_utils.c builtin_exit.c builtin_echo.c \
  25.                         builtin_chdir.c builtin_history.c builtin_history_acdws.c \
  26.                         builtin_history_print.c builtin_history_npr.c \
  27.                         builtin_help.c builtins_utils2.c builtin_pwd.c \
  28.                         builtin_environ_env.c builtin_environ_env_i.c \
  29.                         builtin_environ_env_u.c builtin_environ_env_exec.c \
  30.                         builtin_help_2.c builtin_local_var.c
  31.  
  32.     SRC_SUBDIR              += exec
  33.     SRCS                    += sh_process_exec.c check_path.c sh_exec.c sh_exec_pipe.c\
  34.                                                             sh_exec_redir.c sh_heradoc.c
  35.  
  36.     SRC_SUBDIR              += tools
  37.     SRCS                    += ft_strdblfree.c is_printstr.c sh_pipe.c sh_fork.c \
  38.                                                             sh_open.c ft_isdigit_str.c ft_strsplit_secu.c ft_strsub_secu.c\
  39.                                                             ft_strnew_secu.c sh_ret.c ft_strdup_secu.c ft_strjoincl_secu.c\
  40.                                                             ft_str_insert_secu.c string_secu.c string_insert_secu.c\
  41.                                                             string_growth_secu.c string_dup_secu.c sh_test_access.c is.c
  42.  
  43.     SRC_SUBDIR              += lexer
  44.     SRCS                    += lexer_init.c lexer.c lexer_clean.c
  45.  
  46.     SRC_SUBDIR              += automaton
  47.     SRCS                    += automaton.c
  48.  
  49.     SRC_SUBDIR              += signals
  50.     SRCS                    += signals.c signals_handler.c
  51.  
  52.     SRC_SUBDIR              += parser
  53.     SRCS                    += parser.c parser_grammar.c
  54.  
  55.     SRC_SUBDIR              += expand
  56.     SRCS                    += expand.c expand_utils.c ft_replace.c expand_print.c\
  57.                                             expand_history.c expand_dol.c expand_quote.c\
  58.                                             expand_history_tools.c expand_merge.c
  59.  
  60.     SRC_SUBDIR      += tests
  61.     SRCS            += env_tests.c lexer_tests.c parser_tests.c ast_tests.c\
  62.                                         expand_tests.c exec_tests.c local_var_tests.c
  63.  
  64.     SRC_SUBDIR      += term
  65.     SRCS            += term_modes.c
  66.  
  67.     SRC_SUBDIR      += history
  68.     SRCS            += history.c history_list_utils.c history_getter.c\
  69.                                             history_print.c history_arrow.c history_research.c\
  70.                                             history_research_start_end.c
  71.  
  72.     SRC_SUBDIR      += tcaps
  73.     SRCS            += tcaps_exec_arrow.c tcaps_exec_backspace.c \
  74.                         tcaps_exec_ctrl_1.c tcaps_exec_ctrl_2.c tcaps_exec_tab.c \
  75.                         tcaps_key_exec.c tcaps_exec_delete.c tcaps_redraw_line.c\
  76.                                                                                     tcaps_exec_end_home.c tcaps_exec_alt_arrows.c\
  77.                                                                                     tcaps_exec_select.c clean_term.c get_curs_y.c get_curs_x.c
  78.  
  79.     SRC_SUBDIR      += btree
  80.     SRCS            += btree_create_node.c btree_apply.c\
  81.                                             btree_print.c btree_utils.c
  82.  
  83.     SRC_SUBDIR      += ast
  84.     SRCS            += ast.c ast_utils.c ast_built.c ast_is_redir.c ast_cmp.c
  85.  
  86.     SRC_SUBDIR      += autocomplete
  87.     SRCS            += autocomplete_is.c autocomplete_get_words.c autocomplete_get_path.c \
  88.                         autocomplete.c autocomplete_display.c autocomplete_get_bin.c\
  89.                         autocomplete_utils.c autocomplete_sort.c autocomplete_display_cols.c
  90.  
  91.     SRC_SUBDIR += ft_secu_malloc
  92.     SRCS                    += ft_secu_free_all.c ft_secu_free.c ft_secu_malloc.c\
  93.                                                             ft_secu_malloc_get.c ft_secu_malloc_lvl.c ft_secu_free_lvl.c
  94.  
  95.     ###############################################################################
  96.     #
  97.                                       #
  98.     #                                                                       CONFIG
  99.                               #
  100.     #
  101.                                       #
  102.     ###############################################################################
  103.     #  Compiler
  104.     CC                      = clang
  105.     CFLAGS          = -g -Wall -Wextra -Werror
  106.  
  107.     ifeq ($(DEV),yes)
  108.             CFLAGS          += -std=c11 -pedantic -pedantic-errors
  109.     endif
  110.  
  111.     ifeq ($(SAN),yes)
  112.             LDFLAGS += -fsanitize=address
  113.             CFLAGS += -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
  114.     endif
  115.  
  116.     #The Directories, Source, Includes, Objects and Libraries
  117.     INC                     = -I includes
  118.     SRCS_DIR        = srcs
  119.     vpath  %c $(addprefix $(SRCS_DIR)/,$(SRC_SUBDIR))
  120.  
  121.     #Objects
  122.     OBJS_DIR        = objs
  123.     OBJS            = $(SRCS:%.c=$(OBJS_DIR)/%.o)
  124.  
  125.     # Dependencies
  126.     DEPS_DIR        = .deps
  127.     DEPS            = $(SRCS:%.c=$(DEPS_DIR)/%.d)
  128.     BUILD_DIR       = $(OBJS_DIR) $(DEPS_DIR)
  129.  
  130.     # Libraries
  131.     #LIBS_FOLDER    = lib
  132.     ## libcbc
  133.     LIB_CBC_DIR := libcbc
  134.  
  135.     # libft:
  136.     INC += -I $(LIB_CBC_DIR)/libft/includes
  137.     # ftprintf:
  138.     INC += -I $(LIB_CBC_DIR)/libftprintf/includes
  139.     # logger:
  140.     INC += -I $(LIB_CBC_DIR)/liblogger/includes
  141.     # tcaps:
  142.     INC += -I $(LIB_CBC_DIR)/libtcaps/includes
  143.  
  144.     LIBS += -L $(LIB_CBC_DIR) -lcbc
  145.  
  146.     ## Curses
  147.     LIBS                            += -lcurses
  148.  
  149.     #Utils
  150.     RM                                      = rm -rf
  151.     MKDIR                           = mkdir -p
  152.     COUNT_OBJ = 0
  153.     COUNT_DEP = 0
  154.     TOTAL = 0
  155.     PERCENT = 0
  156.     $(eval TOTAL=$(shell echo $$(printf "%s" "$(SRCS)" | wc -w)))
  157.  
  158.     #color
  159.     C_NO = \033[0m
  160.     C_G = \033[0;32m
  161.     C_Y = \033[1;33m
  162.     C_B = \033[1;34m
  163.     C_C = \033[1;36m
  164.     C_R = \033[1;31m
  165.     C_P = \033[1;35m
  166.     DOXYGEN = $(shell doxygen -v dot 2> /dev/null)
  167.  
  168.     UNAME_S := $(shell uname -s)
  169.  
  170.     ###############################################################################
  171.     #
  172.                                       #
  173.     #                                                               DOT NOT EDIT BELOW
  174.                       #
  175.     #
  176.                                       #
  177.     ###############################################################################
  178.      #########
  179.     ## RULES ##
  180.      #########
  181.     #.SECONDARY: $(OBJS) lib
  182.  
  183.     .NOTPARALLEL:
  184.     all: $(DEPS) lib $(NAME)
  185.  
  186.     # Add dependency as prerequisites
  187.     #-include $(DEPS)
  188.  
  189.  
  190.     $(NAME): $(OBJS)
  191.     ifeq ($(UNAME_S),Linux)
  192.             @$(CC) $(CFLAGS) -o $(NAME) $(OBJS) $(LIBS) $(INC)
  193.             @echo -e "$(C_G)🎩🎩🎩$(C_NO) ALL LINKED $(C_G)🎩🎩🎩$(C_NO)"
  194.             @echo -e "INFO: Flags: $(CFLAGS)"
  195.             @echo -e "[\033[35m---------------------------------\033[0m]"
  196.             @echo -e "[\033[36m---------- 21sh Done ! ----------\033[0m]"
  197.             @echo -e "[\033[35m---------------------------------\033[0m]"
  198.     endif
  199.     ifeq ($(UNAME_S),Darwin)
  200.             @$(CC) $(CFLAGS) -o $(NAME) $(OBJS) $(LIBS) $(INC)
  201.             @echo "$(C_G)🎩🎩🎩$(C_NO) ALL LINKED $(C_G)🎩🎩🎩$(C_NO)"
  202.             @echo "INFO: Flags: $(CFLAGS)"
  203.             @echo "[\033[35m---------------------------------\033[0m]"
  204.             @echo "[\033[36m---------- 21sh Done ! ----------\033[0m]"
  205.             @echo "[\033[35m---------------------------------\033[0m]"
  206.     endif
  207.  
  208.     $(OBJS_DIR)/%.o: %.c | $(OBJS_DIR)
  209.             @$(CC) $(LDFLAGS) $(CFLAGS) $(INC) -o $@ -c $<
  210.             $(eval COUNT_OBJ=$(shell echo $$(($(COUNT_OBJ)+1))))
  211.             $(eval PERCENT=$(shell echo $$((($(COUNT_OBJ) * 100 )/$(TOTAL)))))
  212.             @printf "$(C_B)%-8s $(C_P) $<$(C_NO)\n" "[$(PERCENT)%]"
  213.  
  214.     $(DEPS_DIR)/%.d: %.c | $(DEPS_DIR)
  215.             @$(CC) $(INC) -MM $< -MT $(OBJS_DIR)/$*.o -MF $@
  216.             $(eval COUNT_DEP=$(shell echo $$(($(COUNT_DEP)+1))))
  217.             $(eval PERCENT=$(shell echo $$((($(COUNT_DEP) * 100 )/$(TOTAL)))))
  218.             @printf "$(C_B)%-8s $(C_G) $@$(C_NO)\n" "[$(PERCENT)%]"
  219.  
  220.     $(BUILD_DIR):
  221.             @$(MKDIR) -p $@
  222.  
  223.     lib:
  224.             @make -C $(LIB_CBC_DIR)
  225.  
  226.     re: fclean $(DEPS) lib $(NAME)
  227.  
  228.     clean:
  229.     ifeq ($(UNAME_S),Linux)
  230.         @echo -e "\033[35m21sh  :\033[0m [\033[31mSuppression des .o\033[0m]"
  231.         @$(RM) $(OBJS_DIR)
  232.         @echo -e "\033[35m21sh  :\033[0m [\033[31mSuppression des .d\033[0m]"
  233.         @$(RM) $(DEPS_DIR)
  234.         @make clean -C $(LIB_CBC_DIR)
  235.     endif
  236.     ifeq ($(UNAME_S),Darwin)
  237.         @echo "\033[35m21sh  :\033[0m [\033[31mSuppression des .o\033[0m]"
  238.         @$(RM) $(OBJS_DIR)
  239.         @echo "\033[35m21sh  :\033[0m [\033[31mSuppression des .d\033[0m]"
  240.         @$(RM) $(DEPS_DIR)
  241.         @make clean -C $(LIB_CBC_DIR)
  242.     endif
  243.  
  244.     fclean: clean
  245.     ifeq ($(UNAME_S),Linux)
  246.         @echo -e "\033[35m21sh  :\033[0m [\033[31mSuppression de $(NAME)\033[0m]"
  247.         @$(RM) $(NAME)
  248.         @make fclean -C $(LIB_CBC_DIR)
  249.         @rm -rf DOC
  250.     endif
  251.     ifeq ($(UNAME_S),Darwin)
  252.         @echo "\033[35m21sh  :\033[0m [\033[31mSuppression de $(NAME)\033[0m]"
  253.         @$(RM) $(NAME)
  254.         @make fclean -C $(LIB_CBC_DIR)
  255.         @rm -rf DOC  
  256.     endif
  257.  
  258.     dev:
  259.             @make -C ./ SAN="yes" DEV="yes"
  260.  
  261.     doc:
  262.     ifndef DOXYGEN
  263.             @echo $(DOXYGEN)
  264.             @echo "Please install doxygen and graphviz first (brew install doxygen graphviz)."
  265.     else
  266.     ifeq ($(UNAME_S),Linux)
  267.         @doxygen Doxyfile
  268.         @echo -e "[\033[35m--------------------------\033[0m]"
  269.         @echo -e "[\033[36m------ Documentation -----\033[0m]"
  270.         @echo -e "[\033[36m------   generated   -----\033[0m]"
  271.         @echo -e "[\033[35m--------------------------\033[0m]"
  272.     endif
  273.     ifeq ($(UNAME_S),Darwin)
  274.         @doxygen Doxyfile
  275.         @echo "[\033[35m--------------------------\033[0m]"
  276.         @echo "[\033[36m------ Documentation -----\033[0m]"
  277.         @echo "[\033[36m------   generated   -----\033[0m]"
  278.         @echo "[\033[35m--------------------------\033[0m]"      
  279.     endif
  280.  
  281.     endif
  282.  
  283.     .PHONY: re clean fclean all lib doc dev
  284.     .SUFFIXES: .c .h .o .d
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement