blob: f29a4f249e20780bdf127d645b353189970bbe80 (
plain) (
blame)
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
|
#!/bin/bash
# Makefile for the GL Object eXtensions library
# This bash file is used to generate the makefile
# to produce the library for the graphics library
BINARY_NAME="SonsOfSol"
obs=()
src=()
libs=()
function generate_depends {
# get the dependencies of the dependencies
if [ ! -f $1 ] ; then
return ;
fi
next=$(cat $1 | gawk 'match($0, /#include "(.*)"/, m) { print m[1] }')
deps=$1
for i in $next ; do
for canidate in $(generate_depends $i) ; do
if [[ ! $deps =~ $i ]] && [[ -f $i ]] ; then
deps="$deps \\$(echo -ne '\n ')$i"
fi
done
if [[ $? -ne 0 ]] ; then
echo "Failed to generate depends">&2
return 1;
fi
done
echo "$deps"
}
# Iterate through and find the
# c++ source files
for i in $(find Main.cpp sons_of_sol/ | egrep '.*\.c(pp|xx)?$') ; do
# add this file to the list of
# sources
echo "Generating from source file: $i"
deps="$(generate_depends $i)"
# add the resulting object file to
# the objects
src[$cnt]=$deps
obs+=("obs/`basename $i | sed 's/\.c\(pp\|xx\)\?$/.o/g'`")
cnt=$[cnt + 1]
done
# remove the Makefile if it exists
rm -f Makefile || true
# open Makefile
exec 3<> Makefile
# some commonly used files to generate
echo 'CPPC?=g++'>&3
echo 'AR?=ar'>&3
echo 'OPTFLAGS?=-g3 -ggdb'>&3
echo "CFLAGS=$CFLAGS -Wall -Wextra -I. "'$(OPTFLAGS)'" -D DEBUG_LEVEL_TRACE -Islox -Iglox -Iglox/compat">&3
echo "LDFLAGS=$LDFLAGS -Lslox -Lglox -lslox -lglox -lGL -lGLU -lSDL -lm -ljpeg -lSDL_image -lGLEW">&3
echo 'OBJECTS='${obs[@]}>&3
echo 'BINARY='$BINARY_NAME>&3
# Add all, setup and clean rules
echo -e \
'all: submodules setup $(OBJECTS)
$(CPPC) -o $(BINARY) $(OBJECTS) $(LDFLAGS)
'>&3
echo -e 'genmake:\n\tfind . -name genmake.sh -exec {} \;\n'>&3
echo -e 'setup:\n\tmkdir -p obs/\n'>&3
echo -e \
'submodules:
for i in $$(find */ -name Makefile) ; do \
cd $$(dirname $$i) && make && cd ..; \
done
'>&3
echo -e \
'clean:
- rm -rf obs $(BINARY)
for i in $$(find */ -name Makefile) ; do \
cd $$(dirname $$i) && make clean && cd ..; \
done'>&3
# iterate through all of the objects and
# add a rule for the binary
for ((i=0;i<${#obs[@]};i++)) ; do
echo "Object file: ${obs[$i]}"
# add a rule for the new binary
echo -e "${obs[$i]}: ${src[$i]}\n\t"'$(CPPC) $(CFLAGS) -o $@ -c $<\n'>&3
done
# close Makefile
exec 3>&-
|