summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: 26f6267b4fa4b0f6fe6411d949b1cd6a7676547e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
cmake_minimum_required(VERSION 3.13)

file (STRINGS "VERSION" MSCP_VERSION)

project(mscp
	VERSION ${MSCP_VERSION}
	LANGUAGES C)

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG")

if(APPLE)
	list(APPEND CMAKE_PREFIX_PATH /usr/local) # intel mac homebrew prefix
	list(APPEND CMAKE_PREFIX_PATH /opt/homebrew) # arm mac homebrew prefix
endif() # APPLE

find_package(libssh REQUIRED)

add_executable(mscp src/main.c src/platform.c src/ssh.c src/file.c src/pprint.c)
target_include_directories(mscp PUBLIC ./src)
target_link_libraries(mscp ssh pthread m)
target_compile_definitions(mscp PUBLIC _VERSION="${PROJECT_VERSION}")

install(TARGETS mscp
	RUNTIME		DESTINATION bin
)



# Test
add_test(NAME	pytest
	COMMAND	python3 -m pytest -v
		--mscp-path=${PROJECT_BINARY_DIR}/mscp ${PROJECT_SOURCE_DIR}/test
	WORKING_DIRECTORY	${PROJECT_BINARY_DIR})

enable_testing()


# Build Packages
if(BUILD_PKG)

	# CPACK Rules
	set(CPACK_SET_DESTDIR		true)
	set(CPACK_PROJECT_NAME		${PROJECT_NAME})
	set(CPACK_PROJECT_VERSION	${PROJECT_VERSION})
	set(CPACK_PACKAGE_CONTACT	"Ryo Nakamura <upa@haeena.net>")
	set(CPACK_PACKAGE_DESCRIPTION
		"mscp, copy files over multiple ssh connections")

	# on linux
	if(UNIX AND NOT APPLE)
		execute_process(COMMAND
			bash "-c" "cat /etc/os-release|grep '^ID='|cut -d '=' -f 2|tr -d '\"'"
			OUTPUT_VARIABLE DIST_NAME OUTPUT_STRIP_TRAILING_WHITESPACE)
		execute_process(COMMAND
			bash "-c" "cat /etc/os-release|grep '^VERSION_ID='|cut -d '=' -f 2|tr -d '\"'"
			OUTPUT_VARIABLE DIST_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
		execute_process(COMMAND uname -p
			OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
		set(PACKAGE_FILE_NAME
			${PROJECT_NAME}_${PROJECT_VERSION}-${DIST_NAME}-${DIST_VERSION}-${ARCH})

		set(CPACK_DEBIAN_FILE_NAME		${PACKAGE_FILE_NAME}.deb)
		set(CPACK_DEBIAN_PACKAGE_DEPENDS	"libssh-4")
		set(CPACK_DEBIAN_PACKAGE_HOMEPAGE	"https://github.com/upa/mscp")

		set(CPACK_RPM_FILE_NAME			${PACKAGE_FILE_NAME}.rpm)
		set(CPACK_RPM_PACKAGE_REQUIRES		"libssh")
		set(CPACK_RPM_PACKAGE_HOMEPAGE		"https://github.com/upa/mscp")
		set(CPACK_RPM_PACKAGE_DESCRIPTION	${CPACK_PACKAGE_DESCRIPTION})

	endif() # on linux

	include(CPack)


	# Custom commands to build mscp in docker containers

	# Ubuntu 20.04
	add_custom_target(package-ubuntu-20.04-in-docker
		COMMENT "Build mscp in ubuntu 20.04 docker container"
		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
		COMMAND docker build -t mscp-ubuntu:20.04 -f docker/ubuntu-20.04.Dockerfile .
		COMMAND docker run --init --rm mscp-ubuntu:20.04
			/mscp/scripts/test-in-container.sh
		COMMAND docker run --rm -v ${CMAKE_BINARY_DIR}:/out mscp-ubuntu:20.04
			cp /mscp/build/mscp_${PROJECT_VERSION}-ubuntu-20.04-${ARCH}.deb /out/)

	# Ubuntu 22.04
	add_custom_target(package-ubuntu-22.04-in-docker
		COMMENT "Build mscp in ubuntu 22.04 docker container"
		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
		COMMAND docker build -t mscp-ubuntu:22.04 -f docker/ubuntu-22.04.Dockerfile .
		COMMAND docker run --init --rm mscp-ubuntu:22.04
			/mscp/scripts/test-in-container.sh
		COMMAND docker run --rm -v ${CMAKE_BINARY_DIR}:/out mscp-ubuntu:22.04
		cp /mscp/build/mscp_${PROJECT_VERSION}-ubuntu-22.04-${ARCH}.deb /out/)

	# CentOS 8
	add_custom_target(package-centos-8-in-docker
		COMMENT "Build mscp in centos 8 docker container"
		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
		COMMAND docker build -t mscp-centos:8 -f docker/centos-8.Dockerfile .
		COMMAND docker run --init --rm mscp-centos:8
			/mscp/scripts/test-in-container.sh
		COMMAND docker run --rm -v ${CMAKE_BINARY_DIR}:/out mscp-centos:8
		cp /mscp/build/mscp_${PROJECT_VERSION}-centos-8-${ARCH}.rpm /out/)

	# Rocky 8.6
	add_custom_target(package-rocky-8.6-in-docker
		COMMENT "Build mscp in rocky 8.6 docker container"
		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
		COMMAND docker build -t mscp-rocky:8.6 -f docker/rocky-8.6.Dockerfile .
		COMMAND docker run --init --rm mscp-rocky:8.6
			/mscp/scripts/test-in-container.sh
		COMMAND docker run --rm -v ${CMAKE_BINARY_DIR}:/out mscp-rocky:8.6
		cp /mscp/build/mscp_${PROJECT_VERSION}-rocky-8.6-${ARCH}.rpm /out/)

	# build on all conatiners
	add_custom_target(package-all-in-docker
		COMMENT "Build mscp in all docker containers"
		DEPENDS package-ubuntu-20.04-in-docker
		DEPENDS package-ubuntu-22.04-in-docker
		DEPENDS package-centos-8-in-docker
		DEPENDS package-rocky-8.6-in-docker)

endif() # BUILD_PKG