Re #58 Fixed MinGW build and install after r5349

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5351 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 7add551618c82029033563d3d7a3d03f2c8cff20
Former-commit-id: 83c6050ac6ecf089d3ac8fb794151f57bdc2a75f
This commit is contained in:
pouillot 2013-03-23 21:57:52 +00:00
parent cbe6210099
commit a2c721ae45
4 changed files with 90 additions and 15 deletions

View file

@ -28,6 +28,7 @@
MACRO(_GET_TARGET_REAL_PATHNAME TGT_NAME VAR_PATHNAME)
GET_TARGET_PROPERTY(${VAR_PATHNAME} ${TGT_NAME} LOCATION)
MESSAGE(STATUS "GET_TARGET_REAL_PATHNAME(${TGT_NAME})=${${VAR_PATHNAME}}")
IF(MSVC)
STRING(REPLACE \"$(OutDir)\" \"\${CMAKE_INSTALL_CONFIG_NAME}\" ${VAR_PATHNAME} \${${VAR_PATHNAME}})
STRING(REPLACE \"$(ConfigurationName)\" \"\${CMAKE_INSTALL_CONFIG_NAME}\" ${VAR_PATHNAME} \${${VAR_PATHNAME}})
@ -65,7 +66,17 @@ ENDMACRO(SD_SETUP_SETTINGS_VERSION)
MACRO(SD_UPDATE_SETTINGS_VERSION)
# Determine the full path-name of xmlversion.exe
_GET_TARGET_REAL_PATHNAME(xmlversion _XMLVER_EXE)
IF(FALSE AND WIN32)
# Does not work with MinGW at leat !?
MESSAGE(STATUS "CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}")
SET(_XMLVER_EXE "${CMAKE_BINARY_DIR}/${SD_BINDIR}/${CMAKE_EXECUTABLE_PREFIX}xmlversion${CMAKE_EXECUTABLE_SUFFIX}")
ELSE()
_GET_TARGET_REAL_PATHNAME(xmlversion _XMLVER_EXE)
ENDIF()
# In order to run xmlversion.exe in the build tree (see below), under Windows,
# we nearly always have to copy dependency DLLs next to it.
@ -75,15 +86,32 @@ MACRO(SD_UPDATE_SETTINGS_VERSION)
# Internal dependencies (needed in all cases).
# TODO: Check if still needed after DLLs built in "standard" folders in build tree ????
_GET_TARGET_REAL_PATHNAME(_DLL_PATHNAME tgf)
IF(FALSE)
IF(WIN32)
SET(_DLL_PATHNAME "${CMAKE_BINARY_DIR}/${SD_BINDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}tgf${CMAKE_SHARED_LIBRARY_SUFFIX}")
ELSE()
_GET_TARGET_REAL_PATHNAME(_DLL_PATHNAME tgf)
ENDIF()
LIST(APPEND _DLLS_TO_INSTALL ${_DLL_PATHNAME})
_GET_TARGET_REAL_PATHNAME(_DLL_PATHNAME portability)
IF(WIN32)
SET(_DLL_PATHNAME "${CMAKE_BINARY_DIR}/${SD_BINDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}portability${CMAKE_SHARED_LIBRARY_SUFFIX}")
ELSE()
_GET_TARGET_REAL_PATHNAME(_DLL_PATHNAME portability)
ENDIF()
LIST(APPEND _DLLS_TO_INSTALL ${_DLL_PATHNAME})
IF(NOT OPTION_3RDPARTY_EXPAT)
_GET_TARGET_REAL_PATHNAME(_DLL_PATHNAME txml)
IF(WIN32)
SET(_DLL_PATHNAME "${CMAKE_BINARY_DIR}/${SD_BINDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}txml${CMAKE_SHARED_LIBRARY_SUFFIX}")
ELSE()
_GET_TARGET_REAL_PATHNAME(_DLL_PATHNAME txml)
ENDIF()
LIST(APPEND _DLLS_TO_INSTALL ${_DLL_PATHNAME})
ENDIF()
ENDIF()
# 3rd party dependencies
@ -130,9 +158,15 @@ MACRO(SD_UPDATE_SETTINGS_VERSION)
ENDIF(MINGW AND NOT CMAKE_GENERATOR STREQUAL "MSYS Makefiles")
# Copy the dependency DLLs found above.
GET_FILENAME_COMPONENT(_XMLVER_DIR "${_XMLVER_EXE}" PATH)
MESSAGE(STATUS "xmlversion : DLLs to install=${_DLLS_TO_INSTALL}")
FILE(COPY ${_DLLS_TO_INSTALL} DESTINATION "${_XMLVER_DIR}")
IF(_DLLS_TO_INSTALL)
FOREACH(_DLL ${_DLLS_TO_INSTALL})
ADD_CUSTOM_COMMAND(TARGET settings_versions PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E echo Copying "${_DLL}" "${CMAKE_BINARY_DIR}/${SD_BINDIR}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/${SD_BINDIR}"
COMMAND ${CMAKE_COMMAND} -E copy "${_DLL}" "${CMAKE_BINARY_DIR}/${SD_BINDIR}")
ENDFOREACH()
ENDIF()
ENDIF(WIN32)
@ -148,8 +182,8 @@ MACRO(SD_UPDATE_SETTINGS_VERSION)
SET(_USER_DIR ${_ARG})
# Register file for run-time install/update at game startup
# (through filesetup.cpp services)
ADD_CUSTOM_COMMAND(TARGET settings_versions
COMMENT "${_XMLVER_EXE}" "${CMAKE_BINARY_DIR}/${SD_BINDIR}/version.xml" "${_SRC_FILE}" "${_USER_DIR}" "${PROJECT_SOURCE_DIR}/data"
ADD_CUSTOM_COMMAND(TARGET settings_versions POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "${_XMLVER_EXE}" "${CMAKE_BINARY_DIR}/${SD_BINDIR}/version.xml" "${_SRC_FILE}" "${_USER_DIR}" "${PROJECT_SOURCE_DIR}/data"
COMMAND "${_XMLVER_EXE}" "${CMAKE_BINARY_DIR}/${SD_BINDIR}/version.xml" "${_SRC_FILE}" "${_USER_DIR}" "${PROJECT_SOURCE_DIR}/data")
# Done for this {file, folder} couple, ready for next one.
SET(_SRC_FILE)

View file

@ -189,8 +189,20 @@ MACRO(SD_ADD_EXECUTABLE TARGET_NAME)
ADD_EXECUTABLE(${TARGET_NAME} ${ARGN})
# Change target location (for running in build-tree without installing).
SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${SD_BINDIR})
IF(WIN32)
GET_TARGET_PROPERTY(_TARGET_LOC ${TARGET_NAME} LOCATION)
ADD_CUSTOM_COMMAND(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo Copying "${_TARGET_LOC}" to "${CMAKE_BINARY_DIR}/${SD_BINDIR}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/${SD_BINDIR}"
COMMAND ${CMAKE_COMMAND} -E copy "${_TARGET_LOC}" "${CMAKE_BINARY_DIR}/${SD_BINDIR}")
ELSE(WIN32)
SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${SD_BINDIR})
ENDIF()
ENDMACRO(SD_ADD_EXECUTABLE TARGET_NAME)
@ -216,9 +228,21 @@ MACRO(SD_ADD_LIBRARY TARGET_NAME TARGET_TYPE)
# Change target location (for running in build-tree without installing).
IF(${TARGET_TYPE} STREQUAL "SHARED")
SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${SD_LIBDIR}/lib
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${SD_LIBDIR}/lib)
IF(WIN32)
GET_TARGET_PROPERTY(_TARGET_LOC ${TARGET_NAME} LOCATION)
ADD_CUSTOM_COMMAND(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo Copying "${_TARGET_LOC}" to "${CMAKE_BINARY_DIR}/${SD_BINDIR}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/${SD_BINDIR}"
COMMAND ${CMAKE_COMMAND} -E copy "${_TARGET_LOC}" "${CMAKE_BINARY_DIR}/${SD_BINDIR}")
ELSE(WIN32)
SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${SD_LIBDIR}/lib
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${SD_LIBDIR}/lib)
ENDIF()
ELSEIF(${TARGET_TYPE} STREQUAL "MODULE")

View file

@ -424,7 +424,7 @@ bool GfApplication::parseOptions()
// If the (installed) data dir. does not exists, may be it's because we are running
// without installing : try and use the _source_ data dir.
if (pszLocalDir && strlen(pszLocalDir) && !GfDirExists(pszDataDir))
if (pszDataDir && strlen(pszDataDir) && !GfDirExists(pszDataDir))
{
GfLogTrace("Installed data dir. '%s' not found, trying source data dir.\n", pszDataDir);
pszDataDir = GfSetDataDir(SD_DATADIR_SRC);

View file

@ -106,8 +106,25 @@ void GfDirFreeList(tFList *list, tfDirfreeUserData freeUserData, bool freeName,
*/
bool GfDirExists(const char* pszName)
{
if (!pszName || strlen(pszName) == 0)
return false;
struct stat st;
return stat(pszName, &st) ? false : true;
#ifdef WIN32
if (pszName[strlen(pszName)-1] == '/' || pszName[strlen(pszName)-1] == '\\')
{
// Windows stat() does not supports traling (anti-)slashes ... no comment please.
char* pszNameNoTrailSlash = strdup(pszName);
pszNameNoTrailSlash[strlen(pszName)-1] = 0;
GfLogDebug("XXXXXXXXXXX pszNameNoTrailSlash=%s\n", pszNameNoTrailSlash);
const bool bAnswer = (stat(pszNameNoTrailSlash, &st) ? false : true);
free(pszNameNoTrailSlash);
return bAnswer;
}
else
#endif
return stat(pszName, &st) ? false : true;
}
/** Create a directory and the parents if needed