[package] add package source path override
authorRalph Hempel <ralph.hempel@lantiq.com>
Sun, 31 May 2009 11:35:13 +0000 (11:35 +0000)
committerRalph Hempel <ralph.hempel@lantiq.com>
Sun, 31 May 2009 11:35:13 +0000 (11:35 +0000)
- use external source tree instead of source ball
- the external package source tree will be included as symlink
- make package/<name>/clean will delete the symlink instead of whole source tree
- usefull in conjunction with external SCM like ClearCase
- package-version-override.mk has to be included before package.mk

SVN-Revision: 16227

include/package-version-override.mk
include/package.mk

index 7e3e5729a6d1ad80b9ecda8d9198c56d07338854..f18ecd7bf3c963e4431fb164eed2194fffac2b69 100644 (file)
@@ -1,21 +1,71 @@
+# remember the provided package version
 PKG_VERSION_ORGINAL:=$(PKG_VERSION)
 
-ifeq ($(CONFIG_$(PKG_NAME)_USE_OTHER_VERSION),y)
-PKG_VERSION:= $(strip $(subst ",, $(CONFIG_$(PKG_NAME)_OTHER_VERSION)))
-PKG_MD5SUM:=
+# in case that another version is provided, overwrite the original
+ifeq ($(CONFIG_$(PKG_NAME)_USE_CUSTOM_VERSION),y)
+PKG_VERSION:= $(strip $(subst ",, $(CONFIG_$(PKG_NAME)_CUSTOM_VERSION)))
 PKG_SOURCE:=$(subst $(PKG_VERSION_ORGINAL),$(PKG_VERSION),$(PKG_SOURCE))
+PKG_MD5SUM:=
 endif
 
-define Package/$(PKG_NAME)/config
+# package specific configuration
+# if includeded the package version can be overwritten within the .config file (instead of changing the package specific Makefile)
+define Package/$(PKG_NAME)/override_version
        menu "overwrite package version"
                depends on PACKAGE_$(PKG_NAME)
-       config $(PKG_NAME)_USE_OTHER_VERSION
+       config $(PKG_NAME)_USE_CUSTOM_VERSION
                depends on PACKAGE_$(PKG_NAME)
-               bool "Use other source version"
+               bool "Use custom package version"
                default n
-       config $(PKG_NAME)_OTHER_VERSION
-               depends on $(PKG_NAME)_USE_OTHER_VERSION
+       config $(PKG_NAME)_CUSTOM_VERSION
+               depends on $(PKG_NAME)_USE_CUSTOM_VERSION
                string "$(PKG_BASE_NAME) version as string (default version: $(PKG_VERSION_ORGINAL))"
                default "$(PKG_VERSION_ORGINAL)"
        endmenu
 endef
+
+# in case that an customer source path is provided, set the acc. default variable
+ifeq ($(CONFIG_$(PKG_NAME)_USE_CUSTOM_SOURCE_DIR),y)
+PKG_DEFAULT_CUSTOM_SOURCE_DIR:= $(strip $(subst ",, $(CONFIG_$(PKG_NAME)_CUSTOM_SOURCE_DIR)))
+endif
+
+# package specific configuration
+# if includeded the package source path can be overwritten within the .config file (instead of changing the package specific Makefile)
+# instead of using a source ball (eg tar.gz) the specified path will point to the location of the sources
+define Package/$(PKG_NAME)/override_source_path
+       menu "custom source directory"
+               depends on PACKAGE_$(PKG_NAME)
+       config $(PKG_NAME)_USE_CUSTOM_SOURCE_DIR
+               depends on PACKAGE_$(PKG_NAME)
+               bool "Use custom source directory"
+               default n
+       config $(PKG_NAME)_CUSTOM_SOURCE_DIR
+               depends on $(PKG_NAME)_USE_CUSTOM_SOURCE_DIR
+               string "Custom source directory"
+               default "$(PKG_DEFAULT_CUSTOM_SOURCE_DIR)"
+       endmenu
+endef
+
+# default:
+# include both configurations as long this file is included before package.mk
+# in case that you're defining your own onfiguration within the package Makefile just include the stuff by yourself
+define Package/$(PKG_NAME)/config
+   $(call Package/$(PKG_NAME)/override_version)
+   $(call Package/$(PKG_NAME)/override_source_path)
+endef
+
+# hook for custom source path
+# in case that the specified path is valid a link to the PKG_SOURCE_DIR is created
+# otherwise the make is stopped
+define prepare_custom_source_directory
+       if [ -d $(CONFIG_$(PKG_NAME)_CUSTOM_SOURCE_DIR) ]; then \
+               rm -Rf $(PKG_BUILD_DIR); \
+               echo "Preparing Custom Source Directory link: $(CONFIG_$(PKG_NAME)_CUSTOM_SOURCE_DIR)"; \
+               ln -snf $(CONFIG_$(PKG_NAME)_CUSTOM_SOURCE_DIR) $(PKG_BUILD_DIR); \
+               ( cd $(PKG_BUILD_DIR); autoreconf -i; ) \
+       else \
+               echo "Custom Source Directory $(CONFIG_$(PKG_NAME)_CUSTOM_SOURCE_DIR) is invalid"; \
+               false; \
+       fi
+endef
+
index 79e1f143db37e71fe89cca3ce989e7412fb81ef5..a351661428bf5ee0601bf8ae81444678f619cc7a 100644 (file)
@@ -48,6 +48,17 @@ ifeq ($(DUMP)$(filter prereq clean refresh update,$(MAKECMDGOALS)),)
   endif
 endif
 
+ifeq ($(CONFIG_$(PKG_NAME)_USE_CUSTOM_SOURCE_DIR),y)
+# disable load stage
+PKG_SOURCE_URL:=
+# add hook to install a link to customer source path of dedicated package
+Hooks/Prepare/Pre += prepare_custom_source_directory
+# define empty default action
+define Build/Prepare/Default
+       @: 
+endef
+endif
+
 define Download/default
   FILE:=$(PKG_SOURCE)
   URL:=$(PKG_SOURCE_URL)