Fix build error with scons-4.4.0 version which is based on python3
[platform/upstream/iotivity.git] / extlibs / gtest / SConscript
index 6ecdcd1..30102ea 100644 (file)
+# -*- mode: python; python-indent-offset: 4; indent-tabs-mode: nil -*-
 ##
-# 'googletest' script to check if Google Unit Test library is installed.  If not,
-# get it and install it
+# 'googletest' script to check if Google Unit Test library is installed.
+# If not, get it and install it
 #
 ##
 
 import os
+import shutil
 
 Import('env')
 
-target_os = env.get('TARGET_OS')
-src_dir = env.get('SRC_DIR')
+gtest_env = env.Clone()
+target_os = gtest_env.get('TARGET_OS')
+src_dir = gtest_env.get('SRC_DIR')
 
-targets_need_gtest = ['darwin','linux']
-gtest_dir      = src_dir + '/extlibs/gtest/gtest-1.7.0'
-gtest_zip_file = src_dir + '/extlibs/gtest/gtest-1.7.0.zip'
-gtest_url      = 'https://googletest.googlecode.com/files/gtest-1.7.0.zip'
+targets_need_gtest = ['darwin','linux', 'msys_nt', 'windows']
+gtest_dir      = os.path.join(src_dir, 'extlibs', 'gtest', 'gtest-1.7.0')
+gtest_lib_dir = os.path.join(gtest_dir,'lib')
+gtest_dotlib_dir =  os.path.join(gtest_lib_dir, '.libs')
+gtest_zip_file = os.path.join(src_dir, 'extlibs', 'gtest', 'gtest-1.7.0.zip')
+gtest_url = 'http://pkgs.fedoraproject.org/repo/pkgs/gtest/gtest-1.7.0.zip/2d6ec8ccdf5c46b05ba54a9fd1d130d7/gtest-1.7.0.zip'
 
 if target_os in targets_need_gtest:
-       print '*** Checking for installation of google unit test 1.7.0 ***'
-
-       if not os.path.exists(gtest_dir):
+       print('*** Checking for installation of google unit test 1.7.0 ***')
+       env_lib_path = env.get('LIBPATH')
+       if gtest_lib_dir in env_lib_path:
+               print('*** Found google unit test, set environments ***')
+               gtest_env.AppendUnique(LIBPATH = [gtest_dotlib_dir])
+               gtest_env.PrependUnique(CPPPATH = [os.path.join(gtest_dir, 'include')])
+               gtest_env.AppendENVPath('LD_LIBRARY_PATH', gtest_dotlib_dir)
+               if 'g++' in gtest_env.get('CXX'):
+                       gtest_env.AppendUnique(CXXFLAGS = ['-std=c++0x'])
+                       gtest_env.AppendUnique(CXXFLAGS = ['-Wall'])
+                       if target_os not in ['android']:
+                               gtest_env.AppendUnique(CXXFLAGS = ['-pthread'])
+                               gtest_env.PrependUnique(LIBS = ['pthread'])
+               gtest_env.PrependUnique(LIBS = ['gtest', 'gtest_main'])
+               if target_os in ['windows']:
+                       gtest_env.AppendUnique(LINKFLAGS = ['/subsystem:CONSOLE'])
+               Return('gtest_env')
+       else:
+               print('*** Prepare to build google unit test 1.7.0 ***')
+               if os.path.exists(gtest_dir):
+                       shutil.rmtree(gtest_dir)
                # If the gtest zip file is not already present, download it
                if not os.path.exists(gtest_zip_file):
-                       gtest_zip = env.Download(gtest_zip_file, gtest_url)
+                       gtest_zip = gtest_env.Download(gtest_zip_file, gtest_url)
                else:
                        gtest_zip = gtest_zip_file
-
-               # Unzip gtest
-               print 'Unzipping google unit test'
-               env.UnpackAll(gtest_dir, gtest_zip)
-
+               print('Unzipping to : ' + gtest_dir)
+               gtest_env.UnpackAll(gtest_dir, gtest_zip)
 
 if target_os == 'darwin':
        if os.path.exists(gtest_dir):
                # Build gtest and store it at a temporary directory
-               gtest_lib_dir = gtest_dir + '/lib'
-               gtest_dotlib_dir = gtest_lib_dir + '/.libs'
 
-        if not os.path.exists(gtest_lib_dir):
+               if not os.path.exists(gtest_lib_dir):
 #                      print 'Create a directory'
 #                      os.mkdir(gtest_lib_dir)
 
 
-                       print 'Invoke cmake command to generate appropriate make files'
-                       env.Configure(gtest_dir, './configure')
+                       print('Invoke cmake command to generate appropriate make files')
+                       gtest_env.Configure(gtest_dir, './configure')
 
                        # Run make on gtest
-                       print 'Making google unit test'
-                       env.Configure(gtest_dir, 'make')
+                       print('Making google unit test')
+                       gtest_env.Configure(gtest_dir, 'make')
 
 #                      print 'Create a directory'
 #                      os.mkdir(gtest_dotlib_dir)
 
-                       print 'Change to a directory'
+                       print('Change to a directory')
                        os.chdir(gtest_dotlib_dir)
 
 ##                     print 'Change to a directory'
 #                      os.chdir(gtest_lib_dir)
 
-                       print 'Create hard links pointing to gtest libraries'
+                       print('Create hard links pointing to gtest libraries')
                        os.link('libgtest.a', gtest_lib_dir + 'libgtest.a')
                        os.link('libgtest_main.a', gtest_lib_dir +  'libgtest_main.a')
-                       print 'Create hard links pointing to gtest libraries - DONE'
+                       print('Create hard links pointing to gtest libraries - DONE')
 
 
-elif target_os == 'linux':
+elif target_os in ['linux']:
        if os.path.exists(gtest_dir):
-               if not os.path.exists(gtest_dir + "/lib"):
+               if not os.path.exists(gtest_lib_dir):
                        # Run configure on gtest
-                       print 'Configuring google unit test'
+                       print('Configuring google unit test')
                        if env.get('CROSS_COMPILE'):
-                               env.Configure(gtest_dir, './configure --host=' + env['CROSS_COMPILE'])
+                               env.Configure(gtest_dir, './configure --disable-shared --host=' + env['CROSS_COMPILE'])
                        else:
-                               env.Configure(gtest_dir, './configure')
-
+                               env.Configure(gtest_dir, './configure --disable-shared')
                        # Run make on gtest
-                       print 'Making google unit test'
-                       env.Configure(gtest_dir, 'make')
+                       print('Making google unit test')
+                       gtest_env.Configure(gtest_dir, 'make')
+               env.AppendUnique(LIBPATH = [gtest_lib_dir])
 
+elif target_os == 'msys_nt':
+       if os.path.exists(gtest_dir):
+               if not os.path.exists(gtest_lib_dir):
+                       # Create lib dir
+                       os.mkdir(gtest_lib_dir)
+                       os.mkdir(gtest_dotlib_dir)
 
+                       # Run configure on gtest
+                       print('Configuring google unit test for compilation')
+                       gtest_env.Configure(gtest_dir, 'cmake -G "Unix Makefiles" .')
+
+                       # Run make on gtest
+                       print('Making google unit test')
+                       gtest_env.Configure(gtest_dir, 'make')
+
+                       print('Moving libraries to lib folder')
+                       gtest_env.Configure(gtest_dir, 'cp libgtest.a lib')
+                       gtest_env.Configure(gtest_dir, 'mv libgtest.a lib/.libs')
+                       gtest_env.Configure(gtest_dir, 'cp libgtest_main.a lib')
+                       gtest_env.Configure(gtest_dir, 'mv libgtest_main.a lib/.libs')
+
+elif target_os == 'windows':
+       # Avoid building the same StaticLibrary in more than one environment, by using the
+       # IOTIVITY_GTEST_HAS_BEEN_BUILT environment variable
+       if 'IOTIVITY_GTEST_HAS_BEEN_BUILT' not in env:
+               gtest_env.Append(CPPPATH = [ gtest_dir ])
+               gtest = gtest_env.StaticLibrary(target = 'gtest', source = [ '%s/src/gtest-all.cc' % gtest_dir ])
+               gtest_main = gtest_env.StaticLibrary(target = 'gtest_main', source = [ '%s/src/gtest_main.cc' % gtest_dir ])
+               gtest_env.InstallTarget(gtest, 'gtest')
+               gtest_env.InstallTarget(gtest_main, 'gtest_main')
+
+               vars = Variables();
+               vars.AddVariables(('IOTIVITY_GTEST_HAS_BEEN_BUILT', '', '1'))
+               vars.Update(env)
+
+# Export flags once for all
+if target_os in targets_need_gtest:
+       gtest_env.AppendUnique(LIBPATH = [gtest_dotlib_dir])
+       gtest_env.PrependUnique(CPPPATH = [os.path.join(gtest_dir, 'include')])
+       gtest_env.AppendENVPath('LD_LIBRARY_PATH', gtest_dotlib_dir)
+       if 'g++' in gtest_env.get('CXX'):
+               gtest_env.AppendUnique(CXXFLAGS = ['-std=c++0x'])
+               gtest_env.AppendUnique(CXXFLAGS = ['-Wall'])
+# Note: 'pthread' for android is in bionic 
+# On other platform, if use new gcc(>4.9?) it isn't required, otherwise, it's required
+               if target_os not in ['android']:
+                       gtest_env.AppendUnique(CXXFLAGS = ['-pthread'])
+                       gtest_env.PrependUnique(LIBS = ['pthread'])
+       gtest_env.PrependUnique(LIBS = ['gtest', 'gtest_main'])
+       if target_os in ['windows']:
+               gtest_env.AppendUnique(LINKFLAGS = ['/subsystem:CONSOLE'])
+
+Return('gtest_env')