build: allow for reproducible builds
[vpp.git] / src / pkg / CMakeLists.txt
1 # Copyright (c) 2019 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 if(CMAKE_CROSSCOMPILING)
15   return()
16 endif()
17
18 get_cmake_property(VPP_COMPONENTS COMPONENTS)
19 string(REPLACE ";" " " VPP_COMPONENTS "${VPP_COMPONENTS}")
20
21 ##############################################################################
22 # pinned timestamp for reproducible builds
23 ##############################################################################
24 set(VPP_SOURCE_DATE_EPOCH
25    ""
26    CACHE
27    STRING "Artifact build timestamp for reproducible builds"
28 )
29
30 if(VPP_SOURCE_DATE_EPOCH STREQUAL "")
31    set(VPP_TIMESTAMP_ARG "")
32 else()
33    set(VPP_TIMESTAMP_ARG "--date=@${VPP_SOURCE_DATE_EPOCH}")
34 endif()
35
36 execute_process(
37   COMMAND date -R ${VPP_TIMESTAMP_ARG}
38   OUTPUT_VARIABLE TIMESTAMP
39   OUTPUT_STRIP_TRAILING_WHITESPACE
40 )
41
42 # parse /etc/os-release
43 file(READ "/etc/os-release" os_release)
44 string(REPLACE "\n" ";" os_release ${os_release})
45 foreach(l ${os_release})
46   string(REPLACE "=" ";" l ${l})
47   list(GET l 0 _name)
48   list(GET l 1 _value)
49   string(REPLACE "\"" "" _value ${_value})
50   set(OS_${_name} ${_value})
51 endforeach()
52
53 set(VPP_DEB_BUILD_DEPENDS "python3-all, python3-setuptools")
54 set(VPP_DEB_WITH_PYTHON2 "no")
55
56 foreach(f rules changelog control)
57   configure_file(
58     ${CMAKE_CURRENT_SOURCE_DIR}/debian/${f}.in
59     ${VPP_BINARY_DIR}/debian/${f}
60     @ONLY
61   )
62 endforeach()
63
64 foreach(f copyright vpp.preinst vpp.postrm vpp.postinst vpp.service)
65   file(COPY
66     ${CMAKE_CURRENT_SOURCE_DIR}/debian/${f}
67     DESTINATION ${VPP_BINARY_DIR}/debian
68   )
69 endforeach()
70
71 add_custom_target(pkg-deb
72   COMMENT "Building .deb packages..."
73   WORKING_DIRECTORY ${VPP_BINARY_DIR}
74   COMMAND "dpkg-buildpackage" "-us" "-uc" "-b"
75   USES_TERMINAL
76 )