Revolutionary-Games / Thrive

The main repository for the development of the evolution game Thrive.
https://revolutionarygamesstudio.com/
Other
2.84k stars 503 forks source link

Cannot compile Thrive in Ubuntu16.04 #422

Closed FreeLikeGNU closed 7 years ago

FreeLikeGNU commented 8 years ago

Installed the following in Ubuntu 16.04:

libbullet-dev libboost-dev build-essential automake libtool libfreetype6-dev libfreeimage-dev libzzip-dev libxrandr-dev libxaw7-dev freeglut3-dev libgl1-mesa-dev libglu1-mesa-dev libois-dev libboost-thread-dev libtinyxml-dev libglm-dev libavutil-dev libopenal-dev libatomic1 cmake make git mercurial subversion libogre-1.9-dev libcegui-mk2-dev libavresample-dev libswscale-dev libpostproc-dev libswresample-dev libavcodec-dev libavformat-dev libavdevice-dev libglm-dev libogg-dev

automake is already the newest version (1:1.15-3ubuntu2).
build-essential is already the newest version (12.1ubuntu2).
cmake is already the newest version (3.3.2is3.2.2-0ubuntu5).
freeglut3-dev is already the newest version (2.8.1-2).
git is already the newest version (1:2.7.0-1).
libatomic1 is already the newest version (5.3.1-11ubuntu1).
libboost-dev is already the newest version (1.58.0.1).
libboost-thread-dev is already the newest version (1.58.0.1).
libfreetype6-dev is already the newest version (2.6.1-0.1ubuntu1).
libgl1-mesa-dev is already the newest version (11.1.2-1ubuntu1).
libglm-dev is already the newest version (0.9.7.2-1).
libglu1-mesa-dev is already the newest version (9.0.0-2.1).
libogg-dev is already the newest version (1.3.2-1).
libtinyxml-dev is already the newest version (2.6.2-3).
libtool is already the newest version (2.4.6-0.1).
libxaw7-dev is already the newest version (2:1.0.13-1).
libxrandr-dev is already the newest version (2:1.5.0-1).
libzzip-dev is already the newest version (0.13.62-3).
make is already the newest version (4.1-6).
subversion is already the newest version (1.9.3-1ubuntu1).
libavcodec-dev is already the newest version (7:2.8.6-1ubuntu1).
libavdevice-dev is already the newest version (7:2.8.6-1ubuntu1).
libavformat-dev is already the newest version (7:2.8.6-1ubuntu1).
libavresample-dev is already the newest version (7:2.8.6-1ubuntu1).
libavutil-dev is already the newest version (7:2.8.6-1ubuntu1).
libboost-atomic-dev is already the newest version (1.58.0.1).
libbullet-dev is already the newest version (2.83.6+dfsg-3).
libcegui-mk2-dev is already the newest version (0.8.4+dfsg-4).
libfreeimage-dev is already the newest version (3.17.0+ds1-2).
libogre-1.9-dev is already the newest version (1.9.0+dfsg1-7).
libois-dev is already the newest version (1.3.0+dfsg0-6).
libopenal-dev is already the newest version (1:1.16.0-3).
libpostproc-dev is already the newest version (7:2.8.6-1ubuntu1).
libswresample-dev is already the newest version (7:2.8.6-1ubuntu1).
libswscale-dev is already the newest version (7:2.8.6-1ubuntu1).
mercurial is already the newest version (3.6.2-1ubuntu2).

removed package installation scripts from SetupThrive.sh and saved as SetupThrive-nosudo.sh (attached) SetupThrive-nosudo.sh.zip

Compile encounters errors:

./SetupThrive-nosudo.sh 
Using 1 threads to compile
Running in folder /home/francisco/Thrive-0.3.2/source_build
Cloning repositories and creating build files...
Ogre...
pulling from https://bitbucket.org/sinbad/ogre
searching for changes
no changes found
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-- Configuring OGRE 2.0.0unstable
-- Detected g++ 5.3.1

-- Enabling GCC visibility flags
-- Search path: /home/francisco/Thrive-0.3.2/source_build/ogreBuild/build/ogre/Dependencies;/home/francisco/Thrive-0.3.2/source_build/ogreBuild/ogre/Dependencies;/home/francisco/Thrive-0.3.2/source_build/ogreBuild/build/ogre/../Dependencies;/home/francisco/Thrive-0.3.2/source_build/ogreBuild/ogre/../Dependencies
-- Looking for ZLIB...
-- Found ZLIB: optimized;/usr/lib/x86_64-linux-gnu/libz.so;debug;/usr/lib/x86_64-linux-gnu/libz.so
-- Looking for ZZip...
-- Found ZZip: optimized;/usr/lib/x86_64-linux-gnu/libzzip.so;debug;/usr/lib/x86_64-linux-gnu/libzzip.so
-- Looking for FreeImage...
-- checking for module 'freeimage'
--   package 'freeimage' not found
-- Found FreeImage: optimized;/usr/lib/x86_64-linux-gnu/libfreeimage.so;debug;/usr/lib/x86_64-linux-gnu/libfreeimage.so
-- Looking for FREETYPE...
-- CMAKE_PREFIX_PATH: /home/francisco/Thrive-0.3.2/source_build/ogreBuild/build/ogre/Dependencies;/home/francisco/Thrive-0.3.2/source_build/ogreBuild/ogre/Dependencies;/home/francisco/Thrive-0.3.2/source_build/ogreBuild/build/ogre/../Dependencies;/home/francisco/Thrive-0.3.2/source_build/ogreBuild/ogre/../Dependencies;/usr/local;/usr/lib/x86_64-linux-gnu
-- CMAKE_PREFIX_PATH: /home/francisco/Thrive-0.3.2/source_build/ogreBuild/build/ogre/Dependencies;/home/francisco/Thrive-0.3.2/source_build/ogreBuild/ogre/Dependencies;/home/francisco/Thrive-0.3.2/source_build/ogreBuild/build/ogre/../Dependencies;/home/francisco/Thrive-0.3.2/source_build/ogreBuild/ogre/../Dependencies;/usr/local;/usr/lib/x86_64-linux-gnu
-- Found FREETYPE: optimized;/usr/lib/x86_64-linux-gnu/libfreetype.so;debug;/usr/lib/x86_64-linux-gnu/libfreetype.so
-- Looking for Cg...
-- checking for module 'Cg'
--   package 'Cg' not found
-- Could not locate Cg
-- Looking for POCO...
-- checking for module 'POCO'
--   package 'POCO' not found
-- Could not locate POCO
-- Looking for TBB...
-- Could not locate TBB
-- Looking for GLSL_Optimizer...
-- checking for module 'GLSL_Optimizer'
--   package 'GLSL_Optimizer' not found
-- Could not locate GLSL_Optimizer
-- Looking for HLSL2GLSL...
-- checking for module 'HLSL2GLSL'
--   package 'HLSL2GLSL' not found
-- Could not locate HLSL2GLSL
-- Looking for OIS...
-- Found OIS: optimized;/usr/lib/x86_64-linux-gnu/libOIS.so;debug;/usr/lib/x86_64-linux-gnu/libOIS.so
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Looking for Softimage...
-- Could not locate Softimage
-- Looking for CppUnit...
-- checking for module 'cppunit'
--   package 'cppunit' not found
-- Could not locate CppUnit
-- 
-----------------------------------------------------------------------------
-- The following external packages were located on your system.
-- This installation will have the extra features provided by these packages.
+ zlib
+ zziplib
+ freeimage
+ freetype
+ X11
+ Xt
+ Xaw
+ OpenGL
+ OpenGL 3+
+ OpenGL ES 2.x
+ OpenGL ES 3.x
+ boost
+ boost-thread
+ boost-date_time
+ boost-system
+ boost-chrono
+ boost-atomic
+ OIS
+ TinyXML
-----------------------------------------------------------------------------
-- The following OPTIONAL packages could NOT be located on your system.
-- Consider installing them to enable more features from this software.
+ OpenGL ES 1.x: Support for the OpenGL ES 1.x render system (DEPRECATED) <http://www.khronos.org/opengles/>
+ cg: C for graphics shader language <http://developer.nvidia.com/object/cg_toolkit.html>
+ POCO: POCO framework <http://pocoproject.org/>
+ tbb: Threading Building Blocks <http://www.threadingbuildingblocks.org/>
+ GLSL Optimizer: GLSL Optimizer <http://github.com/aras-p/glsl-optimizer/>
+ HLSL2GLSL: HLSL2GLSL <http://hlsl2glslfork.googlecode.com/>
+ Doxygen: Tool for building API documentation <http://doxygen.org>
+ Softimage: Softimage SDK needed for building XSIExporter <FALSE>
+ CppUnit: Library for performing unit tests <http://cppunit.sourceforge.net>
-----------------------------------------------------------------------------

-- 
----------------------------------------------------------------------------
  FEATURE SUMMARY
----------------------------------------------------------------------------

Building components:
  + MeshLodGenerator
  + RTShader System
  + RTShader System Core Shaders
  + RTShader System Extensions Shaders
Building plugins:
  + Particle FX
Building rendersystems:
  + OpenGL
  + OpenGL 3+ (EXPERIMENTAL)
Building executables:
  + Tools
Building core features:
  + Mesh Lod
  + DDS image codec
  + ETC image codec
  + FreeImage codec
  + ZIP archives

Build type:                      dynamic
Threading support:               background (boost)
Use double precision:            disabled
Assert mode:                     standard
Allocator type:                  nedmalloc (pooling)
STL containers use allocator:    enabled
Strings use allocator:           disabled
Memory tracker (debug):          disabled
Memory tracker (release):        disabled
Use 1.x legacy animations:       enabled
Use Boost:                       enabled
Use SIMD (SSE2):                 enabled
Use SIMD (NEON):                 enabled

----------------------------------------------------------------------------

-- Configuring done
-- Generating done
-- Build files have been written to: /home/francisco/Thrive-0.3.2/source_build/ogreBuild/build
Done
CEGUI...
pulling from https://bitbucket.org/cegui/cegui
searching for changes
no changes found
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-- Could NOT find MINIZIP (missing:  MINIZIP_LIB MINIZIP_H_PATH) 
-- checking for module 'fribidi'
--   package 'fribidi' not found
-- Could NOT find FRIBIDI (missing:  FRIBIDI_FOUND_ALL_LIBS FRIBIDI_INCLUDE_DIR) 
-- Could NOT find GLEW (missing:  GLEW_LIB GLEW_H_PATH) 
-- Could NOT find GLFW (missing:  GLFW_LIB GLFW_H_PATH) 
-- Could NOT find GLFW3 (missing:  GLFW3_LIB GLFW3_H_PATH) 
-- Could NOT find SDL2 (missing:  SDL2_LIB SDL2_H_PATH) 
-- Could NOT find SDL2IMAGE (missing:  SDL2IMAGE_LIB SDL2IMAGE_H_PATH) 
-- Could NOT find DIRECTXSDK (missing:  DIRECTXSDK_LIB_PATH DIRECTXSDK_H_PATH DIRECTXSDK_MAX_D3D) 
-- Could NOT find IRRLICHT (missing:  IRRLICHT_LIB IRRLICHT_H_PATH) 
-- Boost version: 1.58.0
-- Found the following Boost libraries:
--   thread
--   system
-- Could NOT find DIRECTFB (missing:  DIRECTFB_LIB DIRECTFB_H_PATH) 
-- Could NOT find OPENGLES (missing:  OPENGLES_LIB OPENGLES_H_PATH) 
-- Could NOT find OPENGLES2 (missing:  OPENGLES2_LIB OPENGLES2_H_PATH) 
-- Could NOT find OPENGLES3 (missing:  OPENGLES3_LIB OPENGLES3_H_PATH) 
-- Could NOT find EPOXY (missing:  EPOXY_LIB EPOXY_H_PATH) 
-- Could NOT find EXPAT (missing:  EXPAT_LIB EXPAT_H_PATH) 
-- Could NOT find XERCESC (missing:  XERCESC_LIB XERCESC_H_PATH) 
-- Could NOT find LibXml2 (missing:  LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR) 
-- Could NOT find RAPIDXML (missing:  RAPIDXML_H_PATH) 
-- Could NOT find SILLY (missing:  SILLY_LIB SILLY_H_PATH) 
-- Could NOT find CORONA (missing:  CORONA_LIB CORONA_H_PATH) 
-- Could NOT find PVRTOOLS (missing:  PVRTOOLS_LIB PVRTOOLS_H_PATH) 
-- Could NOT find LUA51 (missing:  LUA_LIB LUA_H_PATH) 
-- Could NOT find TOLUAPP (missing:  TOLUAPP_LIB TOLUAPP_H_PATH) 
-- Could NOT find PythonLibs (missing:  PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS) (Required is exact version "2.7.11")
-- Could NOT find Boost
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Some or all of the gtk libraries were not found. (missing:  GTK2_GTK_LIBRARY GTK2_GTK_INCLUDE_DIR GTK2_GDK_INCLUDE_DIR GTK2_GDKCONFIG_INCLUDE_DIR GTK2_GDK_LIBRARY GTK2_GLIB_INCLUDE_DIR GTK2_GLIBCONFIG_INCLUDE_DIR GTK2_GLIB_LIBRARY) 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/francisco/Thrive-0.3.2/source_build/cegui/build
Done
OgreFFMPEG
Already on 'master'
Your branch is up-to-date with 'origin/master'.
From https://github.com/Revolutionary-Games/ogre-ffmpeg-videoplayer
 * branch            master     -> FETCH_HEAD
Already up-to-date.
CMake Warning (dev) at CMakeLists.txt:6 (set):
  Cannot set "OGRE_FFMPEG_VIDEOPLAYER_LIBRARY": current scope has no parent.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Boost version: 1.58.0
-- Found the following Boost libraries:
--   thread
-- Looking for OGRE...
-- Found Ogre Ghadamon (1.9.0)
-- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so
-- Looking for OGRE_Paging...
-- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so
-- Looking for OGRE_Terrain...
-- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so
-- Looking for OGRE_Property...
-- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so
-- Looking for OGRE_RTShaderSystem...
-- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so
-- Looking for OGRE_Volume...
-- Found OGRE_Volume: optimized;/usr/lib/x86_64-linux-gnu/libOgreVolume.so;debug;/usr/lib/x86_64-linux-gnu/libOgreVolume.so
-- Looking for OGRE_Overlay...
-- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/francisco/Thrive-0.3.2/source_build/ogre-ffmpeg-videoplayer/build
Done
cAudio
Already on 'master'
Your branch is up-to-date with 'origin/master'.
From https://github.com/wildicv/cAudio
 * branch            master     -> FETCH_HEAD
Already up-to-date.
-- Search path: 
-- Looking for OPENAL...
-- Found OPENAL: optimized;/usr/lib/x86_64-linux-gnu/libopenal.so;debug;/usr/lib/x86_64-linux-gnu/libopenal.so
-- 
-----------------------------------------------------------------------------
-- The following external packages were located on your system.
-- This installation will have the extra features provided by these packages.
+ OpenAL
Congratulations! All external packages have been found.
-----------------------------------------------------------------------------

-- Configuring done
-- Generating done
-- Build files have been written to: /home/francisco/Thrive-0.3.2/source_build/cAudio/build
Done
Compiling. This may take a long time!
Ogre...
[ 54%] Built target OgreMain
[ 70%] Built target RenderSystem_GL
[ 80%] Built target RenderSystem_GL3Plus
[ 84%] Built target Plugin_ParticleFX
[ 90%] Built target OgreMeshLodGenerator
[ 99%] Built target OgreRTShaderSystem
[100%] Built target OgreXMLConverter
[100%] Built target OgreMeshUpgrader
Done
CEGUI...
[ 78%] Built target CEGUIBase-9999
[ 82%] Built target CEGUIOgreRenderer-9999
[ 83%] Built target CEGUITinyXMLParser
[ 84%] Built target CEGUIDevILImageCodec
[ 85%] Built target CEGUIFreeImageImageCodec
[ 98%] Built target CEGUICoreWindowRendererSet
[100%] Built target CEGUICommonDialogs-9999
Done
OgreFFMPEG...
[100%] Built target ogre-ffmpeg-videoplayer
Done
cAudio...
[  3%] Built target Ogg
[ 40%] Built target Vorbis
[ 85%] Built target cAudio
[ 86%] Built target Tutorial1_2DSound
[ 88%] Built target Tutorial1_3DSound
[ 90%] Built target Tutorial3_MemoryPlayback
[ 91%] Built target Tutorial4_AudioCapture
[ 93%] Built target Tutorial5_AudioEffects
[ 96%] Built target Tutorial6_CustomEventHandler
[100%] Built target Tutorial7_CustomLogReceiver
Done
Setting up Thrive
Getting code
Already on 'master'
Your branch is up-to-date with 'origin/master'.
From https://github.com/Revolutionary-Games/Thrive
 * branch            master     -> FETCH_HEAD
Fetching submodule contrib/googletest
Fetching submodule contrib/luabind
Fetching submodule contrib/luabind/test/jenkins-ctest-plugin
Already up-to-date.
Getting assets
Updating '.':
At revision 67.
Making all the links
Copying Ogre resources file
Copying complelety pointless Ogre files
Copying Ogre libs to bin
cp: cannot stat '/home/francisco/Thrive-0.3.2/source_build/ogreBuild/build/ogre/lib/Plugin_CgProgramManager.*': No such file or directory
Compiling Thrive
-- Looking for OGRE...
-- Found Ogre Ghadamon (1.9.0)
-- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so
-- Looking for OGRE_Paging...
-- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so
-- Looking for OGRE_Terrain...
-- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so
-- Looking for OGRE_Property...
-- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so
-- Looking for OGRE_RTShaderSystem...
-- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so
CMake Error at cmake_modules/FindBoost.cmake:1192 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.58.0

  Boost include path: /usr/include

  The following Boost libraries could not be found:

          boost_filesystem

  Some (but not all) of the required Boost libraries were found.  You may
  need to install these additional Boost libraries.  Alternatively, set
  BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
  to the location of Boost.
Call Stack (most recent call first):
  CMakeLists.txt:111 (find_package)

-- Finding CEGUI version 9999 for Ogre version 1.9.0
Could not located CEGUI.h
Could not located Renderer.h
Could not located CEGUIBase-9999
Could not located CEGUIOgreRenderer-9999
CMake Error at cmake_modules/FindCEGUI.cmake:176 (MESSAGE):
  Error(s) during CEGUI detection!
Call Stack (most recent call first):
  CMakeLists.txt:159 (find_package)

CMake Error at /usr/share/cmake-3.2/Modules/FindPackageHandleStandardArgs.cmake:138 (message):
  Could NOT find CEGUI (missing: CEGUI_LIBRARY CEGUI_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/share/cmake-3.2/Modules/FindPackageHandleStandardArgs.cmake:374 (_FPHSA_FAILURE_MESSAGE)
  cmake_modules/FindCEGUI.cmake:180 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:159 (find_package)

-- Configuring incomplete, errors occurred!
See also "/home/francisco/Thrive-0.3.2/source_build/thrive/build/CMakeFiles/CMakeOutput.log".
See also "/home/francisco/Thrive-0.3.2/source_build/thrive/build/CMakeFiles/CMakeError.log".
make: *** No targets specified and no makefile found.  Stop.
Making symlinks to libraries in bin/contrib
ln: failed to create symbolic link 'liblua.so': File exists
.
.
.
hhyyrylainen commented 8 years ago

Looking for OGRE... -- Found Ogre Ghadamon (1.9.0) -- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so

Is a problem, you need to compile 2.0 and install it before configuring the other scripts. So the script needs to pause / exit after downloading Ogre to allow the user to install it manually.

CMake Error at cmake_modules/FindCEGUI.cmake:176 (MESSAGE): Error(s) during CEGUI detection!

Then is the error that CEGUI hasn't been compiled and installed. So that would also need to be installed by the user before they can continue. As you can see without using sudo the script is quite useless, unless you can somehow detect when the user has built and installed Ogre 2.0 correctly and then continue to the next step.

Edit: I actually notcied that my setup script is also flawed, it too needs to compile Ogre first before continuing. I'll get around to that, sometime.

FreeLikeGNU commented 8 years ago

The user might have ogre 1.9 (or some other 2.x fork/branch) installed to compile or run other applications. It would be nice to detect the Ogre version your script pulls and utilize that without interfering with a users existing installations. I avoid installing libraries that are not part of the distro repository to maintain the stability of my system and development environment.

Moopli commented 8 years ago

@FreeLikeGNU you're smart to keep your system clean, it's pretty frustrating for me too. What I've always wanted to do (and have kept putting off (since all I know about it is that it's difficult)) is build our own packages with the version of Ogre, etc that we need; so we don't have to package them all into the release. Maybe someday we'll be in sync with the library versions in the repos, and even that will be unnecessary.

hhyyrylainen commented 8 years ago

Maybe someday we'll be in sync with the library versions in the repos

That is very unlikely to happen if we want the packages to work on multiple distributions. Like my Fedora installation has an ABI incompatible libstdc++ with Ubuntu stable release.

Although having a package with minimal dependencies and then another with all the libraries would be quite nice. Or the optimal solution of having different packages for all distributions.

FreeLikeGNU commented 8 years ago

OpenMW requires a few libraries to be installed that are not part of the distro. They distribute these libraries via ppa so that they can be installed or removed easily.
https://launchpad.net/~openmw/+archive/ubuntu/openmw

The compiled program is also distributed this way as well.

https://wiki.openmw.org/index.php?title=Development_Environment_Setup

hhyyrylainen commented 8 years ago

This still needs fixing. @moopli Can you verify the package names and put them into the setup script? I could probably also do that, but I'd have to use a vm.

hhyyrylainen commented 7 years ago

I'm closing this as we have a new build script, open a new issue if it is still broken.