PROJECT(deps)

INCLUDE(../../../cmake/SetDefaultBuildType.cmake)
INCLUDE(../../../cmake/SetDefaultMsvcFlags.cmake)

BF_SET_DEFAULT_BUILD_TYPE(MinSizeRel)
BF_SET_DEFAULT_MSVC_FLAGS()

GET_FILENAME_COMPONENT(outer_dir "${PROJECT_SOURCE_DIR}/../../../.." ABSOLUTE) 

FILE(GLOB wx_dirs "${outer_dir}/wxMSW-2.*.*[0-9]")
FILE(GLOB sigc_dirs "${outer_dir}/libsigc++-2.*.*[0-9]")
FILE(GLOB zlib_dirs "${outer_dir}/zlib-*.*.*[0-9]")

FIND_PATH(
	WX_DIR include/wx/wx.h PATHS ${wx_dirs}
	DOC "Path to the wxWidgets source directory."
)

FIND_PATH(
	ACE_DIR ace/ACE.h PATHS "${outer_dir}/ACE_wrappers"
	DOC "Path the ACE source directory."
)

FIND_PATH(
	SIGC_DIR sigc++/sigc++.h PATHS ${sigc_dirs}
	DOC "Path to libsigc++ source directory."
)

FIND_PATH(
	ZLIB_DIR zlib.h PATHS ${zlib_dirs}
	DOC "Path to zlib source directory."
)

# Just to make sure all directories were found.
INCLUDE_DIRECTORIES("${WX_DIR}" "${ACE_DIR}" "${SIGC_DIR}" "${ZLIB_DIR}")
ADD_EXECUTABLE(dummy dummy.cpp)

IF(WX_DIR)
	SET(config_fname "${WX_DIR}/build/msw/config.vc")
	
	IF(EXISTS "${config_fname}.orig")
		FILE(READ "${config_fname}.orig" config_file)
	ELSE(EXISTS "${config_fname}.orig")
		FILE(READ "${config_fname}" config_file)
		FILE(WRITE "${config_fname}.orig" "${config_file}")
	ENDIF(EXISTS "${config_fname}.orig")
	
	STRING(
		REGEX REPLACE "CFLAGS[ \t]+=[^\r\n]*" "CFLAGS = /O1 /MT"
		config_file "${config_file}"
	)
	STRING(
		REGEX REPLACE "CXXFLAGS[ \t]+=[^\r\n]*" "CXXFLAGS = /O1 /MT"
		config_file "${config_file}"
	)
	STRING(
		REGEX REPLACE "CPPFLAGS[ \t]+=[^\r\n]*"
		"CPPFLAGS = /D_SECURE_SCL=0 /D_HAS_ITERATOR_DEBUGGING=0"
		config_file "${config_file}"
	)
	STRING(
		REGEX REPLACE "BUILD[ \t]+=[^\r\n]*" "BUILD = release"
		config_file "${config_file}"
	)
	STRING(
		REGEX REPLACE "DEBUG_INFO[ \t]+=[^\r\n]*" "DEBUG_INFO = 1"
		config_file "${config_file}"
	)
	STRING(
		REGEX REPLACE "USE_THREADS[ \t]+=[^\r\n]*" "USE_THREADS = 0"
		config_file "${config_file}"
	)
	STRING(
		REGEX REPLACE "RUNTIME_LIBS[ \t]+=[^\r\n]*" "RUNTIME_LIBS = static"
		config_file "${config_file}"
	)
	
	FILE(WRITE "${config_fname}" "${config_file}")
	
	
	SET(setup_fname "${WX_DIR}/include/wx/msw/setup.h")
	
	IF(EXISTS "${setup_fname}.orig")
		FILE(READ "${setup_fname}.orig" setup_file)
	ELSE(EXISTS "${setup_fname}.orig")
		FILE(READ "${setup_fname}" setup_file)
		FILE(WRITE "${setup_fname}.orig" "${setup_file}")
	ENDIF(EXISTS "${setup_fname}.orig")
	
	STRING(
		REGEX REPLACE "#define wxUSE_THREADS[^\r\n]*"
		"#define wxUSE_THREADS 0"
		setup_file "${setup_file}"
	)
	
	FILE(WRITE "${setup_fname}" "${setup_file}")
	
	
	SET(build_wx_fname "${CMAKE_CURRENT_BINARY_DIR}/build-wx.bat")
	FILE(TO_NATIVE_PATH "${WX_DIR}/build/msw" wx_build_dir)
	FILE(
		WRITE "${build_wx_fname}"
		"cd \"${wx_build_dir}\"\nnmake -f makefile.vc"
	)
	
	ADD_CUSTOM_TARGET(
		wxWidgets ALL "${build_wx_fname}"
		DEPENDS "${build_wx_fname}"
	)	
ENDIF(WX_DIR)


IF(ACE_DIR)
	GET_FILENAME_COMPONENT(ace_config_source "${CMAKE_SOURCE_DIR}/ace_config.h" ABSOLUTE)
	SET(ace_config_target "${ACE_DIR}/ace/config.h")
	
	CONFIGURE_FILE("${ace_config_source}" "${ace_config_target}" COPYONLY)
	
	FILE(READ "${ACE_DIR}/ace/ace.mpc" ace_mpc)
	
	STRING(
		REGEX REPLACE ".*Source_Files\\(ACE_COMPONENTS\\) {([^}]*)}.*" "\\1"
		source_lines "${ace_mpc}"
	)
	STRING(
		REGEX MATCHALL "[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+"
		source_files "${source_lines}"
	)
	
	SET(full_path_sources)
	FOREACH(file ${source_files})
		LIST(APPEND full_path_sources "${ACE_DIR}/ace/${file}")
	ENDFOREACH(file)
	
	ADD_LIBRARY(ACE_NT STATIC ${full_path_sources})
	SET_TARGET_PROPERTIES(
		ACE_NT PROPERTIES
		COMPILE_FLAGS "-DWIN9x_COMPATIBILITY=0"
    )
	GET_TARGET_PROPERTY(ace_nt_location ACE_NT LOCATION)
	ADD_CUSTOM_COMMAND(
		TARGET ACE_NT POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy
		"${ace_nt_location}" "${ACE_DIR}/ace/ACE_NT.lib"
	)
	
	ADD_LIBRARY(ACE_WIN9x STATIC ${full_path_sources})
	SET_TARGET_PROPERTIES(
		ACE_WIN9x PROPERTIES
		COMPILE_FLAGS "-DWIN9x_COMPATIBILITY=1"
	)
	GET_TARGET_PROPERTY(ace_win9x_location ACE_WIN9x LOCATION)
	ADD_CUSTOM_COMMAND(
		TARGET ACE_WIN9x POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy
		"${ace_win9x_location}" "${ACE_DIR}/ace/ACE_WIN9x.lib"
	)
ENDIF(ACE_DIR)


IF(SIGC_DIR)
	SET(config_fname "${SIGC_DIR}/sigc++config.h")
	FILE(READ "${config_fname}.in" config_file)
	STRING(
		REGEX REPLACE "#define SIGC_DLL[^\r\n]*" ""
		config_file "${config_file}"
	)
	FILE(WRITE "${config_fname}" "${config_file}")
	
	SET(
		source_files
		connection.cc adaptors/lambda/lambda.cc signal.cc signal_base.cc
		functors/slot.cc functors/slot_base.cc trackable.cc
	)
	
	SET(full_path_sources)
	FOREACH(file ${source_files})
		LIST(APPEND full_path_sources "${SIGC_DIR}/sigc++/${file}")
	ENDFOREACH(file)
	
	ADD_LIBRARY(sigc STATIC ${full_path_sources})
	GET_TARGET_PROPERTY(sigc_location sigc LOCATION)
	ADD_CUSTOM_COMMAND(
		TARGET sigc POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy
		"${sigc_location}" "${SIGC_DIR}/sigc++/sigc.lib"
	)
ENDIF(SIGC_DIR)


IF(ZLIB_DIR)
	SET(
		source_files
		adler32.c compress.c crc32.c deflate.c inffast.c inflate.c
		inftrees.c trees.c uncompr.c zutil.c
	)
	
	SET(full_path_sources)
	FOREACH(file ${source_files})
		LIST(APPEND full_path_sources "${ZLIB_DIR}/${file}")
	ENDFOREACH(file)
	
	ADD_LIBRARY(zlib STATIC ${full_path_sources})
	GET_TARGET_PROPERTY(zlib_location zlib LOCATION)
	ADD_CUSTOM_COMMAND(
		TARGET zlib POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy
		"${zlib_location}" "${ZLIB_DIR}/z.lib"
	)
ENDIF(ZLIB_DIR)