PROJECT(packaging)

INCLUDE_DIRECTORIES(.)

IF(MSVC71)
	SET(additional_cflags "")
ELSE(MSVC71) # assuming a later version
	SET(additional_cflags "/GS-")
ENDIF(MSVC71)

ADD_LIBRARY(ProxySettings SHARED proxysettings.c)
TARGET_LINK_LIBRARIES(ProxySettings kernel32 user32)
SET_TARGET_PROPERTIES(
	ProxySettings PROPERTIES
	COMPILE_FLAGS "${additional_cflags}"
)

ADD_LIBRARY(UnWarn SHARED unwarn.c resource.rc)
TARGET_LINK_LIBRARIES(UnWarn kernel32 user32 gdi32)
SET_TARGET_PROPERTIES(
	UnWarn PROPERTIES
	COMPILE_FLAGS "${additional_cflags}"
	LINK_FLAGS "/ENTRY:DllMain /NODEFAULTLIB"
)

FIND_PATH(
	NSIS_DIRECTORY makensis.exe
	PATHS C: D: E: F: G: H:
	PATH_SUFFIXES "Program Files/NSIS"
)
IF(NOT NSIS_DIRECTORY) 
	MESSAGE(SEND_ERROR "NSIS Installation not found.")
ENDIF(NOT NSIS_DIRECTORY)

SET(install_temp_dir "${CMAKE_CURRENT_BINARY_DIR}/install_files")
FILE(MAKE_DIRECTORY "${install_temp_dir}")

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy_directory
	"${CMAKE_SOURCE_DIR}/doc" "${install_temp_dir}/doc"
)
FILE(REMOVE_RECURSE "${install_temp_dir}/doc/.svn")

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy_directory
	"${CMAKE_SOURCE_DIR}/main/gui/win32/resources/external"
	"${install_temp_dir}/resources"
)
FILE(REMOVE_RECURSE "${install_temp_dir}/resources/.svn")

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy
	"${CMAKE_SOURCE_DIR}/main/gui/gtk/pics/logo.png"
	"${install_temp_dir}/resources/logo.png"
)

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy_directory
	"${CMAKE_SOURCE_DIR}/conf/filters" "${install_temp_dir}/filters"
)
FILE(REMOVE_RECURSE "${install_temp_dir}/filters/.svn")

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy
	"${CMAKE_CURRENT_SOURCE_DIR}/bfilter.nsi"
	"${install_temp_dir}/bfilter.nsi"
)

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy
	"${CMAKE_CURRENT_SOURCE_DIR}/lastpage.ini"
	"${install_temp_dir}/lastpage.ini"
)

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy
	"${CMAKE_SOURCE_DIR}/COPYING" "${install_temp_dir}/License.txt"
)

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy
	"${CMAKE_SOURCE_DIR}/conf/config.default" "${install_temp_dir}"
)

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy
	"${CMAKE_SOURCE_DIR}/conf/urls" "${install_temp_dir}"
)

EXEC_PROGRAM(
	"${CMAKE_COMMAND}" ARGS -E copy
	"${CMAKE_SOURCE_DIR}/conf/urls.local" "${install_temp_dir}"
)

SET(nsis_args)
LIST(APPEND nsis_args /V3 "/DVERSION=${BFILTER_VERSION}")
IF(WIN9x_COMPATIBILITY)
	LIST(APPEND nsis_args "/DWIN9x_SUPPORT=1")
	SET(INSTALLER_FNAME "bfilter-${BFILTER_VERSION}-win9x-install.exe")
ELSE(WIN9x_COMPATIBILITY)
	LIST(APPEND nsis_args "/DWIN9x_SUPPORT=0")
	SET(INSTALLER_FNAME "bfilter-${BFILTER_VERSION}-install.exe")
ENDIF(WIN9x_COMPATIBILITY)
LIST(APPEND nsis_args bfilter.nsi)

GET_TARGET_PROPERTY(bfilter_exe bfilter-gui LOCATION)
GET_TARGET_PROPERTY(proxysettings_dll ProxySettings LOCATION)
GET_TARGET_PROPERTY(unwarn_dll UnWarn LOCATION)

FIND_PROGRAM(
	UPX_EXECUTABLE upx.exe
	PATHS "${CMAKE_SOURCE_DIR}/.."
	DOC "[OPTIONAL] Full path to upx.exe"
)

SET(exe_copy_command)
IF(UPX_EXECUTABLE)
	LIST(
		APPEND exe_copy_command
		COMMAND "${UPX_EXECUTABLE}" --best -o
		"${install_temp_dir}/bfilter.exe" "${bfilter_exe}"
	)
ELSE(UPX_EXECUTABLE)
	LIST(
		APPEND exe_copy_command 
		COMMAND "${CMAKE_COMMAND}" -E copy
		"${bfilter_exe}" "${install_temp_dir}"
	)
ENDIF(UPX_EXECUTABLE)

ADD_CUSTOM_TARGET(
	PACKAGE ALL
	COMMAND "${CMAKE_COMMAND}" -E remove "${install_temp_dir}/bfilter.exe"
	COMMAND ${exe_copy_command}
	COMMAND "${CMAKE_COMMAND}" -E copy "${proxysettings_dll}" "${install_temp_dir}"
	COMMAND "${CMAKE_COMMAND}" -E copy "${unwarn_dll}" "${install_temp_dir}"
	COMMAND "${NSIS_DIRECTORY}/makensis.exe" ${nsis_args}
	COMMAND "${CMAKE_COMMAND}" -E copy
	"${install_temp_dir}/bfilter-${BFILTER_VERSION}-install.exe"
	"${CMAKE_BINARY_DIR}/${INSTALLER_FNAME}"
	COMMAND "${CMAKE_COMMAND}" -E echo
	"Installer written to ${CMAKE_BINARY_DIR}/${INSTALLER_FNAME}"
	DEPENDS bfilter-gui ProxySettings UnWarn
	WORKING_DIRECTORY "${install_temp_dir}"
)