Skip to content

Commit

Permalink
Basic support for building .rpm packages with a package.spec in the r…
Browse files Browse the repository at this point in the history
…oot, and PACKAGE_FORMAT=rpm
  • Loading branch information
rpetrich committed Mar 4, 2015
1 parent 7a0f167 commit 6171f02
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 2 deletions.
1 change: 1 addition & 0 deletions makefiles/master/rules.mk
Expand Up @@ -34,6 +34,7 @@ ifeq ($(MAKELEVEL),0)
$(ECHO_CLEANING)rm -rf $(THEOS_OBJ_DIR)$(ECHO_END)
$(ECHO_NOTHING)rm -rf "$(THEOS_STAGING_DIR)"$(ECHO_END)
$(ECHO_NOTHING)rm -rf $(THEOS_PACKAGE_DIR)/$(THEOS_PACKAGE_NAME)_*-*_$(THEOS_PACKAGE_ARCH).deb$(ECHO_END)
$(ECHO_NOTHING)rm -rf $(THEOS_PACKAGE_DIR)/$(THEOS_PACKAGE_NAME)-*_*.$(THEOS_PACKAGE_ARCH).rpm$(ECHO_END)
else
$(ECHO_NOTHING)rm -rf $(THEOS_OBJ_DIR)$(ECHO_END)
endif
Expand Down
4 changes: 2 additions & 2 deletions makefiles/package.mk
Expand Up @@ -46,11 +46,11 @@ __BASEVER_FOR_BUILDNUM = $(or $(__USERVER_FOR_BUILDNUM),$(THEOS_PACKAGE_BASE_VER
# a really stupidly long name.
# VERSION.* are meant to be used in user PACKAGE_VERSIONs.
VERSION.INC_BUILD_NUMBER = $(shell THEOS_PROJECT_DIR="$(THEOS_PROJECT_DIR)" "$(THEOS_BIN_PATH)/package_version.sh" -N "$(THEOS_PACKAGE_NAME)" -V "$(__BASEVER_FOR_BUILDNUM)")
VERSION.EXTRAVERSION = $(if $(PACKAGE_BUILDNAME),+$(PACKAGE_BUILDNAME))
VERSION.EXTRAVERSION = $(if $(PACKAGE_BUILDNAME),$(_THEOS_PACKAGE_EXTRA_VERSION_PREFIX)$(PACKAGE_BUILDNAME))
ifeq ($(FINALPACKAGE),1)
_THEOS_PACKAGE_DEFAULT_VERSION_FORMAT = $(THEOS_PACKAGE_BASE_VERSION)$(VERSION.EXTRAVERSION)
else
_THEOS_PACKAGE_DEFAULT_VERSION_FORMAT = $(THEOS_PACKAGE_BASE_VERSION)-$(VERSION.INC_BUILD_NUMBER)$(VERSION.EXTRAVERSION)
_THEOS_PACKAGE_DEFAULT_VERSION_FORMAT = $(THEOS_PACKAGE_BASE_VERSION)$(_THEOS_PACKAGE_INC_VERSION_PREFIX)$(VERSION.INC_BUILD_NUMBER)$(VERSION.EXTRAVERSION)
endif

# Copy the actual value of PACKAGE_VERSION to __PACKAGE_VERSION and replace PACKAGE_VERSION with
Expand Down
2 changes: 2 additions & 0 deletions makefiles/package/deb.mk
Expand Up @@ -3,6 +3,8 @@ _THEOS_PACKAGE_FORMAT_LOADED := 1

_THEOS_DEB_PACKAGE_CONTROL_PATH := $(or $(wildcard $(THEOS_PROJECT_DIR)/control),$(wildcard $(THEOS_PROJECT_DIR)/layout/DEBIAN/control))
_THEOS_DEB_CAN_PACKAGE := $(if $(_THEOS_DEB_PACKAGE_CONTROL_PATH),$(_THEOS_TRUE),$(_THEOS_FALSE))
_THEOS_PACKAGE_INC_VERSION_PREFIX := -
_THEOS_PACKAGE_EXTRA_VERSION_PREFIX := +

_THEOS_DEB_HAS_DPKG_DEB := $(call __executable,dpkg-deb)
ifneq ($(_THEOS_DEB_HAS_DPKG_DEB),$(_THEOS_TRUE))
Expand Down
39 changes: 39 additions & 0 deletions makefiles/package/rpm.mk
@@ -0,0 +1,39 @@
ifeq ($(_THEOS_PACKAGE_FORMAT_LOADED),)
_THEOS_PACKAGE_FORMAT_LOADED := 1

_THEOS_RPM_PACKAGE_SPEC_PATH := $(wildcard $(THEOS_PROJECT_DIR)/package.spec)
_THEOS_RPM_CAN_PACKAGE := $(if $(_THEOS_RPM_PACKAGE_SPEC_PATH),$(_THEOS_TRUE),$(_THEOS_FALSE))
_THEOS_PACKAGE_INC_VERSION_PREFIX := _
_THEOS_PACKAGE_EXTRA_VERSION_PREFIX := +

_THEOS_RPM_HAS_RPMBUILD := $(call __executable,rpmbuild)
ifneq ($(_THEOS_RPM_HAS_RPMBUILD),$(_THEOS_TRUE))
internal-package-check::
@echo "$(MAKE) package requires rpmbuild."; exit 1
endif

ifeq ($(_THEOS_RPM_CAN_PACKAGE),$(_THEOS_TRUE)) # Control file found (or layout/ found.)
THEOS_PACKAGE_NAME := $(shell grep -i "^Name:" "$(_THEOS_RPM_PACKAGE_SPEC_PATH)" | cut -d':' -f2- | xargs)
THEOS_PACKAGE_ARCH := $(shell grep -i "^BuildArch:" "$(_THEOS_RPM_PACKAGE_SPEC_PATH)" | cut -d':' -f2- | xargs)
THEOS_PACKAGE_BASE_VERSION := $(shell grep -i "^Version:" "$(_THEOS_RPM_PACKAGE_SPEC_PATH)" | cut -d':' -f2- | xargs)

before-package::
$(ECHO_NOTHING)sed -e 's/[Vv]ersion:.*/Version: $(_THEOS_INTERNAL_PACKAGE_VERSION)/g' -e '/^[Ss]ource0:/d' "$(_THEOS_RPM_PACKAGE_SPEC_PATH)" > "$(THEOS_OBJ_DIR)/package.spec"$(ECHO_END)
$(ECHO_NOTHING)echo '%files' >> "$(THEOS_OBJ_DIR)/package.spec"$(ECHO_END)
$(ECHO_NOTHING)echo '/*' >> "$(THEOS_OBJ_DIR)/package.spec"$(ECHO_END)

_THEOS_RPM_PACKAGE_FILENAME = $(THEOS_PACKAGE_DIR)/$(THEOS_PACKAGE_NAME)-$(_THEOS_INTERNAL_PACKAGE_VERSION).$(THEOS_PACKAGE_ARCH).rpm
internal-package::
$(ECHO_NOTHING)COPYFILE_DISABLE=1 $(FAKEROOT) -r rpmbuild -bb "$(THEOS_OBJ_DIR)/package.spec" --buildroot "$(THEOS_STAGING_DIR)" --define "_rpmdir$(THEOS_OBJ_DIR)" $(STDERR_NULL_REDIRECT)$(ECHO_END)
$(ECHO_NOTHING)ln "$(THEOS_OBJ_DIR)/$(THEOS_PACKAGE_ARCH)/$(THEOS_PACKAGE_NAME)-$(_THEOS_INTERNAL_PACKAGE_VERSION)-1.$(THEOS_PACKAGE_ARCH).rpm" "$(_THEOS_RPM_PACKAGE_FILENAME)"$(ECHO_END)
$(ECHO_NOTHING)rm -r "$(THEOS_OBJ_DIR)/$(THEOS_PACKAGE_ARCH)"$(ECHO_END)

# This variable is used in package.mk
after-package:: __THEOS_LAST_PACKAGE_FILENAME = $(_THEOS_RPM_PACKAGE_FILENAME)

else # _THEOS_RPM_CAN_PACKAGE == 0
internal-package::
@echo "$(MAKE) package requires you to have a package.spec file in the project directory."; exit 1

endif # _THEOS_RPM_CAN_PACKAGE
endif # _THEOS_PACKAGE_FORMAT_LOADED

0 comments on commit 6171f02

Please sign in to comment.