@@ -14,8 +14,9 @@ GD_LIBS := $(shell pkg-config --libs gdlib 2>/dev/null)
14
14
IMAGEMAGICK := $(shell compare 2>/dev/null | grep ImageMagick)
15
15
IMLIB2_CFLAGS := $(shell pkg-config --cflags imlib2 2>/dev/null)
16
16
IMLIB2_LIBS := $(shell pkg-config --libs imlib2 2>/dev/null)
17
-
18
- BUILD_WITH_MPC ?= no
17
+ MPC := $(shell cpp -dM ${GD_CFLAGS} -include mpc.h </dev/null 2>/dev/null | grep MPC_VERSION_STRING)
18
+ MPC_CFLAGS = ${GD_CFLAGS}
19
+ MPC_LIBS = -lmpc -lmpfr -lgmp
19
20
20
21
SILENT = @
21
22
@@ -24,57 +25,69 @@ all: check approval
24
25
check : ${THE_TESTS}
25
26
${SILENT} ./${THE_TESTS}
26
27
27
- approval : is-imagemagick-installed ${THE_PROGRAM}
28
+ approval : .has_imagemagick ${THE_PROGRAM}
28
29
${SILENT} ./${THE_PROGRAM} gd pngelbrot.png 800 500 100 0.0 0.0 4.0
29
30
${SILENT} ./${APPROVAL_TESTS} pngelbrot.png
30
31
31
32
valgrind : ${THE_TESTS}
32
33
${SILENT} valgrind --leak-check=full --show-leak-kinds=all ./${THE_TESTS}
33
34
34
35
clean :
35
- ${SILENT} rm -f * .o ${THE_TESTS} ${THE_LIBRARY} ${THE_PROGRAM}
36
+ ${SILENT} rm -f .has_ * * .o ${THE_TESTS} ${THE_LIBRARY} ${THE_PROGRAM}
36
37
${SILENT} rm -rf * .dSYM
37
38
38
- is-cairo-installed :
39
+ .PHONY : all check approval valgrind clean
40
+
41
+ .has_cairo :
39
42
ifeq (, ${CAIRO_LIBS})
40
43
${SILENT}echo "Please install Cairo (https://www.cairographics.org)." && false
44
+ else
45
+ ${SILENT}touch .has_cairo
41
46
endif
42
47
43
- is-check-installed :
48
+ .has_check :
44
49
ifeq (, ${CHECK_LIBS})
45
50
${SILENT}echo "Please install Check (https://libcheck.github.io/check/)." && false
51
+ else
52
+ ${SILENT}touch .has_check
46
53
endif
47
54
48
- is-gd-installed :
55
+ .has_gd :
49
56
ifeq (, ${GD_LIBS})
50
57
${SILENT}echo "Please install GD (http://libgd.github.io)." && false
58
+ else
59
+ ${SILENT}touch .has_gd
51
60
endif
52
61
53
- is-imagemagick-installed :
62
+ .has_imagemagick :
54
63
ifeq (, ${IMAGEMAGICK})
55
64
${SILENT}echo "Please install ImageMagick (http://www.imagemagick.org)." && false
65
+ else
66
+ ${SILENT}touch .has_imagemagick
56
67
endif
57
68
58
- is-imlib2-installed :
69
+ .has_imlib2 :
59
70
ifeq (, ${IMLIB2_LIBS})
60
71
${SILENT}echo "Please install Imlib 2 (http://docs.enlightenment.org/api/imlib2/html/)." && false
72
+ else
73
+ ${SILENT}touch .has_imlib2
61
74
endif
62
75
63
- is-mpc-installed :
64
- ifeq (yes, ${BUILD_WITH_MPC}) # XXX a little too phony
65
- MPC_CFLAGS = -DUSE_MPC ${GD_CFLAGS}
66
- MPC_LIBS = -lmpc -lmpfr -lgmp
76
+ .has_mpc :
77
+ ifeq (, ${MPC})
78
+ ${SILENT}echo "Please install GNU MPC (http://www.multiprecision.org)." && false
79
+ else
80
+ ${SILENT}touch .has_mpc
67
81
endif
68
82
69
- .PHONY : all check approval valgrind clean is-cairo-installed is-check-installed is-gd-installed is-imagemagick-installed is-imlib2-installed is-mpc-installed
70
-
71
- ${THE_TESTS} : is-check-installed ${THE_LIBRARY} check_mandelbrot.c
83
+ ${THE_TESTS} : .has_check ${THE_LIBRARY} check_mandelbrot.c
72
84
${SILENT}${CC} ${CFLAGS} ${CHECK_CFLAGS} -o ${THE_TESTS} check_mandelbrot.c ${THE_LIBRARY} ${LIBS} ${CAIRO_LIBS} ${GD_LIBS} ${IMLIB2_LIBS} ${MPC_LIBS} ${CHECK_LIBS}
73
85
74
- ${THE_LIBRARY} : is-cairo-installed is-gd-installed is-imlib2-installed is-mpc-installed graph_cairo.h graph_gd.h graph_imlib2.h graph.h graph.c mandelbrot.h mandelbrot.c
86
+ ${THE_LIBRARY} : .has_cairo .has_gd .has_imlib2 .has_mpc graph_cairo.h graph_gd.h graph_imlib2.h graph.h graph.c mandelbrot.h mandelbrot.c mandelbrot_mpc .c
75
87
${SILENT}${CC} ${CFLAGS} ${CAIRO_CFLAGS} ${GD_CFLAGS} ${IMLIB2_CFLAGS} -c graph.c
76
- ${SILENT}${CC} ${CFLAGS} ${MPC_CFLAGS} -c mandelbrot.c
77
- ${SILENT} ar rc ${THE_LIBRARY} graph.o mandelbrot.o
88
+ ${SILENT}${CC} ${CFLAGS} -c mandelbrot.c
89
+ ${SILENT}${CC} ${CFLAGS} ${MPC_CFLAGS} -c mandelbrot_mpc.c
90
+ ${SILENT} ar rc ${THE_LIBRARY} graph.o mandelbrot.o mandelbrot_mpc.o
78
91
${SILENT} ranlib ${THE_LIBRARY}
79
92
80
93
${THE_PROGRAM} : ${THE_LIBRARY} mandelbrot.h main.c
0 commit comments