# **************************************************************************** #
#                                                                              #
#                                                         :::      ::::::::    #
#    Makefile                                           :+:      :+:    :+:    #
#                                                     +:+ +:+         +:+      #
#    By: scebula <marvin@42.fr>                     +#+  +:+       +#+         #
#                                                 +#+#+#+#+#+   +#+            #
#    Created: 2017/01/09 20:49:49 by scebula           #+#    #+#              #
#    Updated: 2017/01/10 21:46:25 by scebula          ###   ########.fr        #
#                                                                              #
# **************************************************************************** #

NAME = RT

C_FILES = main.c \
		  color_maths.c \
		  color_tools.c \
		  csg_diff.c \
		  csg_inter.c \
		  csg_add.c \
		  display.c \
		  display_names.c \
		  display_scene_tmb.c \
		  events_menu.c \
		  events_scene.c \
		  events_scene_look.c \
		  events_scene_movement.c \
		  events_scene_movement_up_down.c \
		  free_functions.c \
		  ft_error.c\
		  get_obj_color.c \
		  get_obj_color_bis.c \
		  get_obj_normal.c \
		  get_obj_normal_bis.c \
		  get_obj_tf_list.c \
		  get_obj_tf_list_complex.c \
		  get_list_from_page.c \
		  init_camera.c \
		  init_env.c \
		  init_cut_condition.c \
		  init_function.c \
		  init_img.c \
		  init_light.c \
		  init_obj_cone.c \
		  init_obj_cube.c \
		  init_obj_cylinder.c \
		  init_obj_hyperboloid.c \
		  init_obj_paraboloid.c \
		  init_obj_plane.c \
		  init_obj_prism.c \
		  init_obj_sphere.c \
		  init_obj_triangle.c \
		  init_obj_triangle_bis.c \
		  init_scenes.c \
		  init_obj_csg.c \
		  init_solid.c \
		  init_vector.c \
		  list_light_manage.c \
		  list_obj_cone.c \
		  list_obj_cube.c \
		  list_obj_cylinder.c \
		  list_obj_hyperboloid.c \
		  list_obj_paraboloid.c \
		  list_obj_plane.c \
		  list_obj_prism.c \
		  list_obj_sphere.c \
		  list_obj_triangle.c \
		  list_obj_csg.c \
		  list_scene.c \
		  maths_matrix.c \
		  maths_matrix_rotation.c \
		  maths_matrix_scale.c \
		  maths_matrix_translation.c \
		  maths_obj_cone.c \
		  maths_obj_cube.c \
		  maths_obj_cylinder.c \
		  maths_obj_hyperboloid.c \
		  maths_obj_paraboloid.c \
		  maths_obj_plane.c \
		  maths_obj_prism.c \
		  maths_obj_sphere.c \
		  maths_obj_triangle.c \
		  maths_vector_calc.c \
		  maths_vector_op.c \
		  obj_apply_parameters.c\
		  light_cam_apply_parameters.c\
		  obj_apply_parameters_basic.c\
		  obj_apply_parameters_complex.c\
		  obj_parameter_parser.c\
		  light_cam_populators.c\
		  objects_populators_basic.c\
		  objects_populators_complex.c\
		  parameter_input_testers.c \
		  parser.c\
		  parser_check.c\
		  parser_lexer.c \
		  parser_line_identifier.c\
		  post_pro_eblouissement.c \
		  post_pro_hub.c \
		  post_pro_img_anaglyph.c \
		  post_pro_recolor.c \
		  putpixel.c \
		  init_ray.c \
		  record_tools.c \
		  rt_calculate_ray.c \
		  rt_find_n.c \
		  rt_get_color_at.c \
		  rt_get_pixel_color.c \
		  rt_raytracer.c \
		  rt_reflection.c \
		  rt_shadow.c \
		  specular.c \
		  texture_getter.c \
		  texture_modifiers.c \
		  texture_manager.c \
		  tf_add.c \
		  tf_apply.c \
		  tf_free.c \
		  tf_push.c \
		  tools.c\
		  events_select_scene.c \
		  cut_object.c \
		  cut_save.c \
		  cut_select_negative.c \
		  cut_select_positive.c \
		  cut_select_special.c \
		  cut_select_neg_or_pos.c \
		  cut_keep.c \
		  cut_research_in_cone.c \
		  init_button.c \
		  events_redirect.c \
		  maths_obj_csg.c \

INC_NAME = rt.h \
		   mlx.h \
		   libft.h \
		   parser.h\
		   keys.h

CC = gcc -Wextra -Werror -Wall -o3
MLX_FLAGS = -lft -lmlx -framework OpenGL -framework Appkit
LIBFT = libft.a
LIBMLX = libmlx.a
LIBFT_DIR = libft/
LIB_DIR = lib/
INC_DIR = inc/
EXEC_NAME = RT

INC = $(addprefix inc/,$(INC_NAME))
OBJ = $(addprefix $(O_PATH), $(C_FILES:.c=.o))
SRC = $(addprefix $(C_PATH), $(C_FILES))

######

C_PATH = ./src/
O_PATH = ./obj/

$(addprefix $(O_PATH),%.o): $(addprefix $(C_PATH),%.c)
	@mkdir -p $(O_PATH)
	@$(CC) -o $@ -c $^ -I inc/
	@echo -n .

all: $(NAME)

$(NAME): create_libft obj_comp $(OBJ)
	@$(CC) -o $(NAME) $(OBJ) -Llib $(MLX_FLAGS)
	@echo "\n\x1b[32m-- COMPILING SUCCESSFULL --"

create_libft:
	@echo "\x1b[31mMaking LIBFT ...\033[0m"
	@make -s -C $(LIBFT_DIR)
	@mkdir -p lib
	@cp $(LIBFT_DIR)$(LIBFT) $(LIB_DIR)$(LIBFT)
	@cp $(LIBFT_DIR)/includes/libft.h $(INC_DIR)libft.h

obj_comp:
	@echo "\x1b[33m-- COMPILING ... --\033[0m"

norminette:
	@echo "----------NORMINETTE------------"
	@echo "\x1b[37m"
	@norminette ./libft/*.h
	@norminette ./libft/*.c
	@norminette ./inc/*.h
	@norminette ./src/*.c

welcome:
	@echo "Welcome to our project."
	@echo "To launch the program, please use both following commands"
	@echo "> make\n> ./RT"

clean:
	@make fclean -C $(LIBFT_DIR)
	@echo "libft cleaned"
	@rm -f $(INC_DIR)libft.h
	@rm -f $(INC_DIR)mlx.h
	@rm -rf ./obj
	@rm -rf ./lib
	@echo ".o cleaned"

fclean: clean
	@rm -f $(NAME)
	@echo "exec deleted"
	@echo "Project Cleaned."

re: fclean all

fcleanlibft:
	make fclean -C $(LIBFT_DIR)