added opensrf, openils, and evergreen targets to build the entire sub-project
[Evergreen.git] / install.sh
1 #!/bin/bash
2 # --------------------------------------------------------------------
3 # Copyright (C) 2005  Georgia Public Library Service 
4 # Bill Erickson <highfalutin@gmail.com>
5 #
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License
8 # as published by the Free Software Foundation; either version 2
9 # of the License, or (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 # --------------------------------------------------------------------
16
17
18 # --------------------------------------------------------------------
19 # ILS install script
20 # --------------------------------------------------------------------
21 CONFIG_FILE="install.conf";
22 DEFAULT_CONFIG_FILE="install.conf.default";
23
24
25 # --------------------------------------------------------------------
26 # Loads all of the path information from the user setting 
27 # install variables as it goes
28 # --------------------------------------------------------------------
29
30 function fail {
31         MSG="$1";
32         echo "A build error occured: $MSG";
33         exit 99;
34 }
35
36
37 function verifyInstallPaths {
38
39         cat <<-WORDS
40
41         -----------------------------------------------------------------------
42         Verify the following install directories are sane.
43         Note: * indicates that you must have write privelages for the location
44         -----------------------------------------------------------------------
45
46         -----------------------------------------------------------------------
47         Install prefix            [$PREFIX]*
48         Temporary files directory [$TMP]*
49         Apache2 apxs binary       [$APXS2]
50         Apache2 header directory  [$APACHE2_HEADERS]
51         Libxml2 header directory  [$LIBXML2_HEADERS]
52         Building targets          [${TARGETS[@]:0}];
53         -----------------------------------------------------------------------
54
55         If these are not OK, use control-c to break out and fix the variables 
56         in install.config.  Otherwise, type enter.
57
58         To disable this message, run "./install.sh force".
59
60         WORDS
61         read OK;
62 }
63
64 #function postMessage {
65
66 #cat <<-WORDS
67 #       --------------------------------------------------------------------
68
69
70 #}
71
72 # --------------------------------------------------------------------
73 # Makes sure the install directories exist and are writable
74 # --------------------------------------------------------------------
75 function mkInstallDirs {
76
77         if installing; then
78
79                 mkdir -p "$PREFIX";
80                 if [ "$?" != "0" ]; then
81                         fail "Error creating $PREFIX";
82                 fi
83
84                 if [ ! -w "$PREFIX" ]; then
85                         fail "We don't have write access to $PREFIX";
86                 fi
87
88         fi
89
90         if building; then
91
92                 mkdir -p "$TMP";
93                 if [ "$?" != "0" ]; then
94                         fail "Error creating $TMP";
95                 fi
96
97                 if [ ! -w "$TMP" ]; then
98                         fail "We don't have write access to $TMP";
99                 fi
100         fi
101
102         
103
104 }
105
106 function installing {
107         if [ -z "$INSTALLING" ]; then return 1; fi;
108         return 0;
109 }
110
111 function building {
112         if [ -z "$BUILDING" ]; then return 1; fi;
113         return 0;
114 }
115
116
117
118 # --------------------------------------------------------------------
119 # Loads the config file.  If it can't fine CONFIG_FILE, it attempts to
120 # use DEFAULT_CONFIG_FILE.  If it can't find that, it fails.
121 # --------------------------------------------------------------------
122 function loadConfig {
123         if [ ! -f "$CONFIG_FILE" ]; then
124                 if [ -f "$DEFAULT_CONFIG_FILE" ]; then
125                         echo "+ + + Copying $DEFAULT_CONFIG_FILE to $CONFIG_FILE and using its settings...";
126                         cp "$DEFAULT_CONFIG_FILE" "$CONFIG_FILE";
127                 else
128                         fail "config file \"$CONFIG_FILE\" cannot be found";
129                 fi
130         fi
131         source "$CONFIG_FILE";
132 }
133
134
135 function runInstall {
136
137
138         loadConfig;
139         #[ -z "$FORCE" ] && verifyInstallPaths;
140         mkInstallDirs;
141
142         # pass the collected variables to make
143         for target in ${TARGETS[@]:0}; do
144
145                 cat <<-MSG
146
147                 --------------------------------------------------------------------
148                 Building $target
149                 --------------------------------------------------------------------
150
151                 MSG
152
153                 MAKE="make APXS2=$APXS2 PREFIX=$PREFIX TMP=$TMP \
154                         APACHE2_HEADERS=$APACHE2_HEADERS LIBXML2_HEADERS=$LIBXML2_HEADERS \
155                         BINDIR=$BINDIR LIBDIR=$LIBDIR PERLDIR=$PERLDIR INCLUDEDIR=$INCLUDEDIR";
156
157                 echo "Passing to sub-makes: $MAKE"
158                         
159                 case "$target" in
160                         
161                         "jserver" | "router" | "gateway" | "srfsh" ) 
162                                 if building; then $MAKE -C "$OPENSRF_DIR" "$target"; fi;
163                                 if installing; then $MAKE -C "$OPENSRF_DIR" "$target-install"; fi;
164                                 ;;
165
166                         "opensrf_perl")
167                                 if installing; then $MAKE -C "$OPENSRF_DIR" "perl-install"; fi;
168                                 ;;
169
170                         "openils_perl")
171                                 if installing; then $MAKE -C "$OPENILS_DIR" "perl-install"; fi;
172                                 ;;
173
174                         "opensrf")
175                                 if building; then $MAKE -C "$OPENSRF_DIR" all; fi;
176                                 if installing; then $MAKE -C "$OPENSRF_DIR" install; fi;
177                                 ;;
178
179                         "openils")
180                                 if building; then $MAKE -C "$OPENILS_DIR" all; fi;
181                                 if installing; then $MAKE -C "$OPENILS_DIR" install; fi;
182                                 ;;
183
184                         "evergreen")
185                                 if building; then $MAKE -C "$EVERGREEN_DIR" all; fi;
186                                 if installing; then $MAKE -C "$EVERGREEN_DIR" install; fi;
187                                 ;;
188
189
190                         *) fail "Unknown target: $target";;
191
192                 esac
193
194         done
195 }
196
197
198 # --------------------------------------------------------------------
199 # Checks command line parameters for special behavior
200 # Supported params are:
201 # clean - cleans all build files
202 # force - forces build without the initial message
203 # --------------------------------------------------------------------
204 function checkParams {
205
206         if [ -z "$1" ]; then return; fi;
207
208         for arg in "$@"; do
209
210                 lastArg="$arg";
211
212                 case "$arg" in
213
214                         "clean") 
215                                 cleanMe;;
216
217                         "force")
218                                 FORCE="1";;
219
220                         "build")
221                                 BUILDING="1";;
222
223                         "install")
224                                 INSTALLING="1";;
225
226                         *) fail "Unknown command line argument: $arg";;
227                 esac
228         done
229
230         if [ "$lastArg" = "clean" ]; then exit 0; fi;
231 }
232
233
234 function cleanMe {
235         loadConfig;
236         make -C "$OPENSRF_DIR" clean;
237         make -C "$OPENILS_DIR"  clean;
238         make -C "$EVERGREEN_DIR" clean;
239 }
240
241 checkParams "$@";
242
243 if installing; then echo "Installing..."; fi;
244
245 # Kick it off...
246 runInstall;
247
248
249