902fce5f39866a7deaa9cf3d13ec9989a9d19e39
[blender.git] / extern / libmv / third_party / ceres / bundle.sh
1 #!/bin/sh
2
3 if [ "x$1" = "x--i-really-know-what-im-doing" ] ; then
4   echo Proceeding as requested by command line ...
5 else
6   echo "*** Please run again with --i-really-know-what-im-doing ..."
7   exit 1
8 fi
9
10 repo="https://ceres-solver.googlesource.com/ceres-solver"
11 branch="master"
12 tag="1.3.0"
13 tmp=`mktemp -d`
14 checkout="$tmp/ceres"
15
16 GIT="git --git-dir $tmp/ceres/.git --work-tree $checkout"
17
18 git clone $repo $checkout
19
20 if [ $branch != "master" ]; then
21     $GIT checkout -t remotes/origin/$branch
22 else
23   if [ "x$tag" != "x" ]; then
24       $GIT checkout $tag
25   fi
26 fi
27
28 $GIT log -n 50 > ChangeLog
29
30 for p in `cat ./patches/series`; do
31   echo "Applying patch $p..."
32   cat ./patches/$p | patch -d $tmp/ceres -p1
33 done
34
35 find include -type f -not -iwholename '*.svn*' -exec rm -rf {} \;
36 find internal -type f -not -iwholename '*.svn*' -exec rm -rf {} \;
37
38 cat "files.txt" | while read f; do
39   mkdir -p `dirname $f`
40   cp $tmp/ceres/$f $f
41 done
42
43 rm -rf $tmp
44
45 sources=`find ./include ./internal -type f -iname '*.cc' -or -iname '*.cpp' -or -iname '*.c' | sed -r 's/^\.\//\t/' | grep -v -E 'schur_eliminator_[0-9]_[0-9]_[0-9d].cc' | sort -d`
46 generated_sources=`find ./include ./internal -type f -iname '*.cc' -or -iname '*.cpp' -or -iname '*.c' | sed -r 's/^\.\//#\t\t/' | grep -E 'schur_eliminator_[0-9]_[0-9]_[0-9d].cc' | sort -d`
47 headers=`find ./include ./internal -type f -iname '*.h' | sed -r 's/^\.\//\t/' | sort -d`
48
49 src_dir=`find ./internal -type f -iname '*.cc' -exec dirname {} \; -or -iname '*.cpp' -exec dirname {} \; -or -iname '*.c' -exec dirname {} \; | sed -r 's/^\.\//\t/' | sort -d | uniq`
50 src=""
51 for x in $src_dir $src_third_dir; do
52   t=""
53
54   if test  `echo "$x" | grep -c glog ` -eq 1; then
55     continue;
56   fi
57
58   if test  `echo "$x" | grep -c generated` -eq 1; then
59     continue;
60   fi
61
62   if stat $x/*.cpp > /dev/null 2>&1; then
63     t="src += env.Glob('`echo $x'/*.cpp'`')"
64   fi
65
66   if stat $x/*.c > /dev/null 2>&1; then
67     if [ -z "$t" ]; then
68       t="src += env.Glob('`echo $x'/*.c'`')"
69     else
70       t="$t + env.Glob('`echo $x'/*.c'`')"
71     fi
72   fi
73
74   if stat $x/*.cc > /dev/null 2>&1; then
75     if [ -z "$t" ]; then
76       t="src += env.Glob('`echo $x'/*.cc'`')"
77     else
78       t="$t + env.Glob('`echo $x'/*.cc'`')"
79     fi
80   fi
81
82   if [ -z "$src" ]; then
83     src=$t
84   else
85     src=`echo "$src\n$t"`
86   fi
87 done
88
89 cat > CMakeLists.txt << EOF
90 # ***** BEGIN GPL LICENSE BLOCK *****
91 #
92 # This program is free software; you can redistribute it and/or
93 # modify it under the terms of the GNU General Public License
94 # as published by the Free Software Foundation; either version 2
95 # of the License, or (at your option) any later version.
96 #
97 # This program is distributed in the hope that it will be useful,
98 # but WITHOUT ANY WARRANTY; without even the implied warranty of
99 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
100 # GNU General Public License for more details.
101 #
102 # You should have received a copy of the GNU General Public License
103 # along with this program; if not, write to the Free Software Foundation,
104 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
105 #
106 # The Original Code is Copyright (C) 2012, Blender Foundation
107 # All rights reserved.
108 #
109 # Contributor(s): Blender Foundation,
110 #                 Sergey Sharybin
111 #
112 # ***** END GPL LICENSE BLOCK *****
113
114 # NOTE: This file is automatically generated by bundle.sh script
115 #       If you're doing changes in this file, please update template
116 #       in that script too
117
118 set(INC
119         .
120         ../../../Eigen3
121         include
122         internal
123         ../gflags
124 )
125
126 set(INC_SYS
127 )
128
129 set(SRC
130 ${sources}
131
132 ${headers}
133 )
134
135 #if(FALSE)
136 #       list(APPEND SRC
137 ${generated_sources}
138 #       )
139 #endif()
140
141 if(WIN32)
142         list(APPEND INC
143                 ../glog/src/windows
144         )
145
146         if(NOT MINGW)
147                 list(APPEND INC
148                         ../msinttypes
149                 )
150         endif()
151 else()
152         list(APPEND INC
153                 ../glog/src
154         )
155 endif()
156
157 add_definitions(
158         -DCERES_HAVE_PTHREAD
159         -DCERES_NO_SUITESPARSE
160         -DCERES_NO_CXSPARSE
161         -DCERES_NO_PROTOCOL_BUFFERS
162         -DCERES_RESTRICT_SCHUR_SPECIALIZATION
163 )
164
165 if(MSVC10)
166         add_definitions(
167                 -D"CERES_HASH_NAMESPACE_START=namespace std {"
168                 -D"CERES_HASH_NAMESPACE_END=}"
169         )
170 else()
171         add_definitions(
172                 -D"CERES_HASH_NAMESPACE_START=namespace std { namespace tr1 {"
173                 -D"CERES_HASH_NAMESPACE_END=}}"
174         )
175 endif()
176
177 if(APPLE)
178         if(CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "10.5")
179                 add_definitions(
180                         -DCERES_NO_TR1
181                 )
182         endif()
183 endif()
184
185 blender_add_lib(extern_ceres "\${SRC}" "\${INC}" "\${INC_SYS}")
186 EOF
187
188 cat > SConscript << EOF
189 #!/usr/bin/python
190
191 # NOTE: This file is automatically generated by bundle.sh script
192 #       If you're doing changes in this file, please update template
193 #       in that script too
194
195 import sys
196 import os
197
198 Import('env')
199
200 src = []
201 defs = []
202
203 $src
204 src += env.Glob('internal/ceres/generated/schur_eliminator_d_d_d.cc')
205 #src += env.Glob('internal/ceres/generated/*.cc')
206
207 defs.append('CERES_HAVE_PTHREAD')
208 defs.append('CERES_HASH_NAMESPACE_START=namespace std { namespace tr1 {')
209 defs.append('CERES_HASH_NAMESPACE_END=}}')
210 defs.append('CERES_NO_SUITESPARSE')
211 defs.append('CERES_NO_CXSPARSE')
212 defs.append('CERES_NO_PROTOCOL_BUFFERS')
213 defs.append('CERES_RESTRICT_SCHUR_SPECIALIZATION')
214
215 if 'Mac OS X 10.5' in env['MACOSX_SDK_CHECK']:
216     defs.append('CERES_NO_TR1')
217
218 incs = '. ../../ ../../../Eigen3 ./include ./internal ../gflags'
219
220 # work around broken hashtable in 10.5 SDK
221 if env['OURPLATFORM'] == 'darwin' and env['WITH_BF_BOOST']:
222     incs += ' ' + env['BF_BOOST_INC']
223     defs.append('CERES_HASH_BOOST')
224
225 if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'):
226     if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
227         incs += ' ../msinttypes'
228
229     incs += ' ../glog/src/windows'
230 else:
231     incs += ' ../glog/src'
232
233 env.BlenderLib ( libname = 'extern_ceres', sources=src, includes=Split(incs), defines=defs, libtype=['extern', 'player'], priority=[20,137])
234 EOF