1+ # directory name that will hold temporary package generation files
2+ SIMPLE_OPKG_TOOLS_TEMP_FILENAME =package.tmp
3+ # directory where generated packages will be installed
4+ SIMPLE_OPKG_TOOLS_PKG_OUTPUT_DIR =${BASE_DIR}/ipkg
5+ # packages that needs to be built before
6+ SIMPLE_OPKG_TOOLS_DEPENDENCIES =host-opkg-utils
7+
8+ define inner-sot-ensure-var-set
9+ @# Checks whether given variable is set and strips it from quotes
10+ $(if ${${1}},\
11+ @echo "${1}=${${1}}",\
12+ $(error "${1} not defined!") \
13+ )
14+
15+ $(eval ${1} := $(call qstrip,${${1}}) )
16+ endef # inner-sot-ensure-var-set
17+
18+ define SIMPLE_OPKG_TOOLS_INIT
19+ @# Creates necessary files and directories to build package
20+ @# Input arguments:
21+ @# 1 - package name
22+ @# 2 - workdir/destination
23+
24+ @# ensure that all REQUIRED fields are present
25+ $(call inner-sot-ensure-var-set,${1}_OPKG_NAME)
26+ $(call inner-sot-ensure-var-set,${1}_OPKG_VERSION)
27+ $(call inner-sot-ensure-var-set,${1}_OPKG_DEPENDS)
28+ $(call inner-sot-ensure-var-set,${1}_OPKG_ARCHITECTURE)
29+ $(call inner-sot-ensure-var-set,${1}_OPKG_MAINTAINER)
30+ $(call inner-sot-ensure-var-set,${1}_OPKG_SOURCE)
31+ $(call inner-sot-ensure-var-set,${1}_OPKG_SECTION)
32+ $(call inner-sot-ensure-var-set,${1}_OPKG_PRIORITY)
33+ $(call inner-sot-ensure-var-set,${1}_OPKG_DESCRIPTION)
34+
35+ @# prepare necessary files
36+ ${INSTALL} -d ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}
37+ $(RM ) -r ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/*
38+ ${INSTALL} -d ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL
39+
40+ @# create fields in control file
41+ @echo "Package: ${${1}_OPKG_NAME}" >> ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
42+ @echo "Version: ${${1}_OPKG_VERSION}" >> ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
43+ @echo "Depends: ${${1}_OPKG_DEPENDS}" >> ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
44+ @echo "Architecture: ${${1}_OPKG_ARCHITECTURE}" >> ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
45+ @echo "Maintainer: ${${1}_OPKG_MAINTAINER}" >> ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
46+ @echo "Section: ${${1}_OPKG_SECTION}" >> ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
47+ @echo "Source: ${${1}_OPKG_SOURCE}" >> ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
48+ @echo "Priority: ${${1}_OPKG_PRIORITY}" >> ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
49+ @echo "Description: ${${1}_OPKG_DESCRIPTION}" >> ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
50+ endef # SIMPLE_OPKG_TOOLS_INIT
51+
52+ define SIMPLE_OPKG_TOOLS_SET_CUSTOM_FIELD
53+ @# Adds custom field to package control file
54+ @# Input arguments:
55+ @# 1 - workdir/destination
56+ @# 2 - custom field key
57+ @# 3 - custom field value
58+ @echo "${2}: ${3}" >> ${1}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME}/CONTROL/control
59+ endef # SIMPLE_OPKG_TOOLS_SET_CUSTOM_FIELD
60+
61+ define SIMPLE_OPKG_TOOLS_BUILD_PACKAGE
62+ @# Builds package from already prepared directory
63+ @# Input arguments:
64+ @# 1 - package target directory
65+ opkg-build ${1}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME} ${1}
66+ endef # SIMPLE_OPKG_TOOLS_BUILD_PACKAGE
67+
68+ define SIMPLE_OPKG_TOOLS_SET_TARGET
69+ @# Sets new target path to package temporary directory
70+ @# Input arguments:
71+ @# 1 - package name
72+ @# 2 - new TARGET_DIR
73+ $(eval ${1}_ORIGINAL_TARGET := ${TARGET_DIR})
74+ $(eval TARGET_DIR := ${2}/${SIMPLE_OPKG_TOOLS_TEMP_FILENAME})
75+ @echo "New TARGET_DIR=${TARGET_DIR}"
76+ endef # SIMPLE_OPKG_TOOLS_SET_TARGET
77+
78+ define SIMPLE_OPKG_TOOLS_UNSET_TARGET
79+ @# Reverts target path, set by SIMPLE_OPKG_TOOLS_SET_TARGET
80+ @# Input arguments:
81+ @# 1 - package name
82+ $(eval TARGET_DIR := ${${1}_ORIGINAL_TARGET})
83+ @echo "New TARGET_DIR=${TARGET_DIR}"
84+ endef # SIMPLE_OPKG_TOOLS_UNSET_TARGET
85+
86+ define SIMPLE_OPKG_TOOLS_INSTALL_PACKAGE
87+ @# Installs built package in output path
88+ @# Input arguments:
89+ @# 1 - package path
90+ ${INSTALL} -d ${SIMPLE_OPKG_TOOLS_PKG_OUTPUT_DIR}
91+ ${INSTALL} -m 755 ${1} ${SIMPLE_OPKG_TOOLS_PKG_OUTPUT_DIR}
92+ endef # SIMPLE_OPKG_TOOLS_INSTALL_PACKAGE
93+
94+ define SIMPLE_OPKG_TOOLS_MAKE_PACKAGE
95+ @# Makes package from CPack generated makefile
96+ ${MAKE} package -C ${@D}
97+ endef # SIMPLE_OPKG_TOOLS_MAKE_PACKAGE
98+
99+ define SIMPLE_OPKG_TOOLS_CREATE_CPACK_METADATA
100+ @# Creates CMake build parameters for CPack configuration
101+ @# Input arguments:
102+ @# 1 - package name
103+ $(call inner-sot-ensure-var-set,${1}_OPKG_NAME)
104+ $(call inner-sot-ensure-var-set,${1}_OPKG_VERSION)
105+ $(call inner-sot-ensure-var-set,${1}_OPKG_ARCHITECTURE)
106+ $(call inner-sot-ensure-var-set,${1}_OPKG_MAINTAINER)
107+ $(call inner-sot-ensure-var-set,${1}_OPKG_DESCRIPTION)
108+
109+ $(eval ${1}_OPKG_CPACK_METADATA += -D${1}_OPKG_NAME="${${1}_OPKG_NAME}")
110+ $(eval ${1}_OPKG_CPACK_METADATA += -D${1}_OPKG_VERSION="${${1}_OPKG_VERSION}")
111+ $(eval ${1}_OPKG_CPACK_METADATA += -D${1}_OPKG_ARCHITECTURE="${${1}_OPKG_ARCHITECTURE}")
112+ $(eval ${1}_OPKG_CPACK_METADATA += -D${1}_OPKG_MAINTAINER="${${1}_OPKG_MAINTAINER}")
113+ $(eval ${1}_OPKG_CPACK_METADATA += -D${1}_OPKG_DESCRIPTION="${${1}_OPKG_DESCRIPTION}")
114+ $(eval ${1}_OPKG_CPACK_METADATA += -D${1}_OPKG_FILE_NAME="${${1}_OPKG_NAME}_${${1}_OPKG_VERSION}_${${1}_OPKG_ARCHITECTURE}")
115+ endef # SIMPLE_OPKG_TOOLS_CREATE_CPACK_METADATA
116+
117+ define SIMPLE_OPKG_TOOLS_REMOVE_FROM_TARGET
118+ @# Remove files installed by CMake in TARGET_DIR, that already belongs to the packages
119+ @( \
120+ for manifest in ${@D}/install_manifest_*; \
121+ do \
122+ echo "Removing file(s) included in $${manifest}..."; \
123+ cat $${manifest} | xargs printf -- "$${TARGET_DIR}/%s\n"; \
124+ cat $${manifest} | xargs printf -- "$${TARGET_DIR}/%s\n" | xargs rm; \
125+ done \
126+ )
127+ endef # SIMPLE_OPKG_TOOLS_REMOVE_FROM_TARGET
0 commit comments