[PATCH] Allow out-of-tree cmake builds to run

[PATCH] Allow out-of-tree cmake builds to run

Postby bradh » 12 Apr 2012, 00:23

While building svn trunk using an out-of-tree cmake build (i.e. where source and build directories are different), Yan Ming and I found that the resulting application would not start:
bradh@saxicola:~/meandmyshadowbuild$ ./meandmyshadow
User preferences will be fetched from: /home/bradh/.config/meandmyshadow/
User data will be fetched from: /home/bradh/.local/share/meandmyshadow/
FATAL ERROR: Failed to configure paths.

This doesn't appear to occur for in-tree cmake builds.

The game will run OK if you pass --data-dir={srcdir}/data/, but it would be
nice if the game could just run from the build directory.

Here is a patch that copies the required content to the build directory

CMakeLists.txt | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 158 insertions(+)
{l Code}: {l Select All Code}
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt      (revision 335)
+++ CMakeLists.txt      (working copy)
@@ -110,6 +110,163 @@
     ${OPENGL_LIBRARY}
 )
 
+foreach(datafile
+    data/levelpacks/tutorial/tut20.map
+    data/levelpacks/tutorial/tut14.map
+    data/levelpacks/tutorial/tut11.map
+    data/levelpacks/tutorial/tut05.map
+    data/levelpacks/tutorial/locale/messages.pot
+    data/levelpacks/tutorial/tut15.map
+    data/levelpacks/tutorial/tut13.map
+    data/levelpacks/tutorial/tut03.map
+    data/levelpacks/tutorial/tut19.map
+    data/levelpacks/tutorial/tut24.map
+    data/levelpacks/tutorial/tut23.map
+    data/levelpacks/tutorial/tut25.map
+    data/levelpacks/tutorial/tut22.map
+    data/levelpacks/tutorial/tut01.map
+    data/levelpacks/tutorial/tut04.map
+    data/levelpacks/tutorial/tut09.map
+    data/levelpacks/tutorial/tut10.map
+    data/levelpacks/tutorial/tut16.map
+    data/levelpacks/tutorial/tut21.map
+    data/levelpacks/tutorial/tut02.map
+    data/levelpacks/tutorial/tut06.map
+    data/levelpacks/tutorial/tut17.map
+    data/levelpacks/tutorial/tut07.map
+    data/levelpacks/tutorial/tut18.map
+    data/levelpacks/tutorial/tut12.map
+    data/levelpacks/tutorial/levels.lst
+    data/levelpacks/tutorial/tut08.map
+    data/levelpacks/default/Towers.map
+    data/levelpacks/default/map04.map
+    data/levelpacks/default/Switches.map
+    data/levelpacks/default/locale/messages.pot
+    data/levelpacks/default/Skyscrapers.map
+    data/levelpacks/default/5.map
+    data/levelpacks/default/1.map
+    data/levelpacks/default/Remote.map
+    data/levelpacks/default/Sweeper.map
+    data/levelpacks/default/map03.map
+    data/levelpacks/default/map05.map
+    data/levelpacks/default/Regroup.map
+    data/levelpacks/default/2.map
+    data/levelpacks/default/map01.map
+    data/levelpacks/default/Volcano.map
+    data/levelpacks/default/3.map
+    data/levelpacks/default/QuickSwap.map
+    data/levelpacks/default/map02.map
+    data/levelpacks/default/4.map
+    data/levelpacks/default/Timing.map
+    data/levelpacks/default/levels.lst
+    data/levelpacks/classic/Jumping.map
+    data/levelpacks/classic/Lab.map
+    data/levelpacks/classic/LeftRight.map
+    data/levelpacks/classic/Spiky.map
+    data/levelpacks/classic/Carry.map
+    data/levelpacks/classic/Road.map
+    data/levelpacks/classic/UpDown.map
+    data/levelpacks/classic/Tower.map
+    data/levelpacks/classic/SomeSpikes.map
+    data/levelpacks/classic/Shadow.map
+    data/levelpacks/classic/LittleHelp.map
+    data/levelpacks/classic/Credits.map
+    data/levelpacks/classic/FreeFall.map
+    data/levelpacks/classic/Headache.map
+    data/levelpacks/classic/Tricky.map
+    data/levelpacks/classic/Here.map
+    data/levelpacks/classic/FirstSpikes.map
+    data/levelpacks/classic/FreeFall2.map
+    data/levelpacks/classic/BabySteps.map
+    data/levelpacks/classic/Control.map
+    data/levelpacks/classic/Jumper.map
+    data/levelpacks/classic/End.map
+    data/levelpacks/classic/ShadowBlocks.map
+    data/levelpacks/classic/Timing.map
+    data/levelpacks/classic/levels.lst
+    data/music/menu.music
+    data/music/default.list
+    data/music/mams-menu_loop.ogg
+    data/music/mams-menu_initial.ogg
+    data/locale/zh_CN.po
+    data/locale/messages.pot
+    data/locale/fi.po
+    data/misc/Empty.map
+    data/gfx/medals.png
+    data/gfx/recordings.png
+    data/gfx/playbutton.png
+    data/gfx/level.png
+    data/gfx/levellocked.png
+    data/gfx/gui.png
+    data/gfx/menu/title.png
+    data/gfx/menu/selection.png
+    data/gfx/menu/moving.png
+    data/gfx/menu/background.png
+    data/gfx/menu/toolbar.png
+    data/gfx/actions.png
+    data/gfx/time.png
+    data/font/knewave.ttf
+    data/font/droidsans_final_fixed.ttf
+    data/font/License
+    data/font/Blokletters-Viltstift.ttf
+    data/font/freesans.ttf
+    data/themes/Cloudscape/deathright.png
+    data/themes/Cloudscape/tiles.png
+    data/themes/Cloudscape/line.png
+    data/themes/Cloudscape/deathleft.png
+    data/themes/Cloudscape/player.png
+    data/themes/Cloudscape/shadowdeathright.png
+    data/themes/Cloudscape/swap.png
+    data/themes/Cloudscape/shadowdeathleft.png
+    data/themes/Cloudscape/License
+    data/themes/Cloudscape/background.png
+    data/themes/Cloudscape/shadow.png
+    data/themes/Cloudscape/theme.mnmstheme
+    data/themes/classic/shadow/shadowleft.png
+    data/themes/classic/shadow/shadowright.png
+    data/themes/classic/shadow/jumprightshadow.png
+    data/themes/classic/shadow/shadowholdingright.png
+    data/themes/classic/shadow/jumpleftshadow.png
+    data/themes/classic/player/playerholdingright.png
+    data/themes/classic/player/jumpright.png
+    data/themes/classic/player/line.png
+    data/themes/classic/player/playerleft.png
+    data/themes/classic/player/jumpleft.png
+    data/themes/classic/player/playerright.png
+    data/themes/classic/blocks/moving_shadowblock.png
+    data/themes/classic/blocks/moving_shadowblock_2.png
+    data/themes/classic/blocks/spikes.png
+    data/themes/classic/blocks/block.png
+    data/themes/classic/blocks/playerstart.png
+    data/themes/classic/blocks/shadowblock.png
+    data/themes/classic/blocks/exit.png
+    data/themes/classic/blocks/switch.png
+    data/themes/classic/blocks/portal.png
+    data/themes/classic/blocks/notification.png
+    data/themes/classic/blocks/moving_block_2.png
+    data/themes/classic/blocks/swap.png
+    data/themes/classic/blocks/shadowstart.png
+    data/themes/classic/blocks/moving_spikes.png
+    data/themes/classic/blocks/checkpoint.png
+    data/themes/classic/blocks/block3.png
+    data/themes/classic/blocks/Credits.txt
+    data/themes/classic/blocks/moving_block.png
+    data/themes/classic/blocks/block2.png
+    data/themes/classic/blocks/fragile.png
+    data/themes/classic/blocks/button.png
+    data/themes/classic/background.png
+    data/themes/classic/theme.mnmstheme
+    data/sfx/swap.wav
+    data/sfx/jump.wav
+    data/sfx/checkpoint.wav
+    data/sfx/error.wav
+    data/sfx/toggle.wav
+    data/sfx/hit.wav
+    data/sfx/Credits.txt
+    data/sfx/walk.wav)
+    CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/${datafile} ${PROJECT_BINARY_DIR}/${datafile} COPYONLY)
+endforeach(datafile)
+
 # Path options
 set(BINDIR "bin" CACHE STRING "Where to install binaries")
 set(DATAROOTDIR "${CMAKE_INSTALL_PREFIX}/share" CACHE STRING "Sets the root of data directories to a non-default location")
@@ -118,6 +275,7 @@
 
 # install locations
 install(DIRECTORY ${PROJECT_SOURCE_DIR}/data DESTINATION ${DATAROOTDIR}/meandmyshadow/)
+
 install(TARGETS meandmyshadow RUNTIME DESTINATION ${BINDIR})
 if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
        install(FILES meandmyshadow.desktop DESTINATION ${DESKTOPDIR})
bradh
 
Posts: 1
Joined: 12 Apr 2012, 00:19

Re: [PATCH] Allow out-of-tree cmake builds to run

Postby Edward_Lii » 12 Apr 2012, 16:39

Hello bradh,

bradh {l Wrote}:While building svn trunk using an out-of-tree cmake build (i.e. where source and build directories are different), Yan Ming and I found that the resulting application would not start:
bradh@saxicola:~/meandmyshadowbuild$ ./meandmyshadow
User preferences will be fetched from: /home/bradh/.config/meandmyshadow/
User data will be fetched from: /home/bradh/.local/share/meandmyshadow/
FATAL ERROR: Failed to configure paths.

This doesn't appear to occur for in-tree cmake builds.

To be honest, I've always compiled meandmyshadow from the meandmyshadow root directory.
But I agree that this should work from the build directory.
Note that if the build directory is inside the root it should work out of the box (<path>/<to>/<meandmyshadow>/build/).

bradh {l Wrote}:The game will run OK if you pass --data-dir={srcdir}/data/, but it would be
nice if the game could just run from the build directory.

It can also be compiled with the data directory specified, which currently is "${CMAKE_INSTALL_PREFIX}/share/data/".
Although this can be changed to the root dir, which will make out-of-tree builds work without problem, but will make system-wide installations and packaging slightly harder.

bradh {l Wrote}:Here is a patch that copies the required content to the build directory

CMakeLists.txt | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 158 insertions(+)

Copying the data directory can be done, although we need to think about this.
One thing I don't like is the way every file is hardcoded, this should be automated.
And what happens when the building from the root, will it still copy the files?

Anyway, thanks for pointing this out. :D
From,
Edward_Lii
User avatar
Edward_Lii
MnMS Moderator
 
Posts: 777
Joined: 20 Dec 2010, 16:46

Who is online

Users browsing this forum: No registered users and 1 guest