diff options
author | P. J. McDermott <pjm@nac.net> | 2012-10-22 03:40:58 (EDT) |
---|---|---|
committer | P. J. McDermott <pjm@nac.net> | 2012-10-22 03:40:58 (EDT) |
commit | f3aeb0ffc84c75faea757d94b0270ee566b6a03f (patch) | |
tree | cbea7f3f36427ba7a851c7a5a59696d3288ac8ba /lib | |
parent | d85b660b4a34e2fa2f75fde202059ee41ab20eb4 (diff) | |
parent | dfd503fffcca2c1527c6004dff86e304079a4ebb (diff) |
Merge branch 'feature/buildsystems-support'.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile.in | 76 | ||||
-rw-r--r-- | lib/buildsystem.sh | 108 | ||||
-rw-r--r-- | lib/buildsystem/Makefile.in | 69 | ||||
-rw-r--r-- | lib/buildsystem/autoconf.sh | 72 | ||||
-rw-r--r-- | lib/buildsystem/make.sh | 97 | ||||
-rw-r--r-- | lib/common.sh | 62 | ||||
-rw-r--r-- | lib/load.sh | 51 |
7 files changed, 535 insertions, 0 deletions
diff --git a/lib/Makefile.in b/lib/Makefile.in new file mode 100644 index 0000000..5c2a6f9 --- /dev/null +++ b/lib/Makefile.in @@ -0,0 +1,76 @@ +# opkhelper +# Makefile.in +# Input Makefile for configure. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +package_name = @package_name@ +package_version= @package_version@ + +srcdir = @srcdir@ +prefix = @prefix@ +libdir = @libdir@ +datadir = @datadir@ +localedir = @localedir@ +libopkhelper = @libopkhelper@ +libopkbuild_1 = @libopkbuild_1@ + +sed_script = s&@@PACKAGE_NAME@@&$(package_name)&;\ + s&@@PACKAGE_VERSION@@&$(package_version)&;\ + s&@@LOCALEDIR@@&$(localedir)&;\ + s&@@LIBOPKHELPER@@&$(libopkhelper)&;\ + s&@@LIBOPKBUILD_1@@&$(libopkbuild_1)&; + +.SUFFIXES: +.SUFFIXES: .sh .sm + +SRCS = load.sh common.sh \ + buildsystem.sh +OBJS = $(SRCS:.sh=.sm) + +distdir = ../$(package_name)-$(package_version)/lib +distfiles = Makefile.in $(SRCS) + +all: $(OBJS) + +$(OBJS): + @printf ' SED lib/%s\n' '$@' + @sed '$(sed_script)' '$(srcdir)/lib/$*.sh' >'$@' + +clean: + @for obj in $(OBJS); do \ + printf ' RM lib/%s\n' "$${obj}"; \ + rm -f "$${obj}"; \ + done + +install: all + @mkdir -p '$(DESTDIR)/$(libopkhelper)' + @for obj in $(OBJS); do \ + printf ' INSTALL lib/%s\n' "$${obj}"; \ + cp "$${obj}" "$(DESTDIR)/$(libopkhelper)/$${obj}"; \ + chmod 644 "$(DESTDIR)/$(libopkhelper)/$${obj}"; \ + done + +uninstall: + @for obj in $(OBJS); do \ + printf ' RM %s\n' "$${obj}"; \ + rm -f "$(DESTDIR)/$(libopkhelper)/$${obj}"; \ + done + @rmdir '$(DESTDIR)/$(libopkhelper)' 2>/dev/null || true + +$(distdir): + @mkdir -p '$(distdir)' + @cp -pR $(distfiles) '$(distdir)' diff --git a/lib/buildsystem.sh b/lib/buildsystem.sh new file mode 100644 index 0000000..7cf70f5 --- /dev/null +++ b/lib/buildsystem.sh @@ -0,0 +1,108 @@ +# opkhelper +# lib/buildsystem +# Interface for interacting with software build systems. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +[ -n "${_OH_BUILDSYSTEM_SM}" ] && return 0 +_OH_BUILDSYSTEM_SM='true' + +_OH_BUILDSYSTEMS=' +autoconf +make +' + +oh_buildsystems_init() +{ + _oh_local _ohbsi_bs + + for _ohbsi_bs in ${_OH_BUILDSYSTEMS}; do + oh_use "buildsystem/${_ohbsi_bs}" + done + + _OH_BUILDSYSTEM_WORK_AREA="${PWD}" + _OH_BUILDSYSTEM_SOURCE_DIR="$(cd src && pwd)" + + [ -z "${_OH_BUILDSYSTEM_BUILD_DIR}" ] && \ + _OH_BUILDSYSTEM_BUILD_DIR="${PWD}/src" + [ -z "${_OH_BUILDSYSTEM_DESTDIR}" ] && \ + _OH_BUILDSYSTEM_DESTDIR="${PWD}/dest" + [ -z "${_OH_BUILDSYSTEM_SYSTEM}" ] && \ + _OH_BUILDSYSTEM_SYSTEM='' +} + +oh_set_buildsystem_option() +{ + _oh_local _ohsbso_name _obsbso_value + + if [ ${#} -eq 2 ]; then + _ohsbso_name="${1}" + _ohsbso_value="${2}" + else + _oh_return 125 + return ${?} + fi + + case "${_ohsbso_name}" in + 'build-dir') + _OH_BUILDSYSTEM_BUILD_DIR="${_ohsbso_value}" + ;; + 'destdir') + _OH_BUILDSYSTEM_DESTDIR="${_ohsbso_value}" + ;; + 'build-system') + _OH_BUILDSYSTEM_SYSTEM="${_ohsbso_value}" + ;; + *) + _oh_return 125 + return ${?} + ;; + esac +} + +oh_buildsystem_do() +{ + _oh_local _ohbsd_step _ohbsd_bs _ohbsd_done + + if [ ${#} -ge 1 ]; then + _ohbsd_step="${1}" + shift 1 + else + _oh_return 125 + return ${?} + fi + + _ohbsd_done='false' + + if [ -n "${_OH_BUILDSYSTEM_SYSTEM}" ]; then + if "_oh_${_OH_BUILDSYSTEM_SYSTEM}_can_${_ohbsd_step}"; then + "_oh_${_OH_BUILDSYSTEM_SYSTEM}_${_ohbsd_step}" "${@}" + _ohbsd_done='true' + fi + else + for _ohbsd_bs in ${_OH_BUILDSYSTEMS}; do + if "_oh_${_ohbsd_bs}_can_${_ohbsd_step}"; then + "_oh_${_ohbsd_bs}_${_ohbsd_step}" "${@}" + _ohbsd_done='true' + break + fi + done + fi + + if ! ${_ohbsd_done}; then + : error + fi +} diff --git a/lib/buildsystem/Makefile.in b/lib/buildsystem/Makefile.in new file mode 100644 index 0000000..abc59ff --- /dev/null +++ b/lib/buildsystem/Makefile.in @@ -0,0 +1,69 @@ +# opkhelper +# Makefile.in +# Input Makefile for configure. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +package_name = @package_name@ +package_version= @package_version@ + +srcdir = @srcdir@ +prefix = @prefix@ +libdir = @libdir@ +libopkhelper = @libopkhelper@ + +sed_script = s&@@PACKAGE_NAME@@&$(package_name)&;\ + s&@@PACKAGE_VERSION@@&$(package_version)&; + +.SUFFIXES: +.SUFFIXES: .sh .sm + +SRCS = autoconf.sh make.sh +OBJS = $(SRCS:.sh=.sm) + +distdir = ../../$(package_name)-$(package_version)/lib/buildsystem +distfiles = Makefile.in $(SRCS) + +all: $(OBJS) + +$(OBJS): + @printf ' SED lib/buildsystem/%s\n' '$@' + @sed '$(sed_script)' '$(srcdir)/lib/buildsystem/$*.sh' >'$@' + +clean: + @for obj in $(OBJS); do \ + printf ' RM lib/buildsystem/%s\n' "$${obj}"; \ + rm -f "$${obj}"; \ + done + +install: all + @mkdir -p '$(DESTDIR)/$(libopkhelper)/buildsystem' + @for obj in $(OBJS); do \ + printf ' INSTALL lib/buildsystem/%s\n' "$${obj}"; \ + cp "$${obj}" "$(DESTDIR)/$(libopkhelper)/buildsystem/$${obj}"; \ + chmod 644 "$(DESTDIR)/$(libopkhelper)/buildsystem/$${obj}"; \ + done + +uninstall: + @for obj in $(OBJS); do \ + printf ' RM %s\n' "$${obj}"; \ + rm -f "$(DESTDIR)/$(libopkhelper)/buildsystem/$${obj}"; \ + done + @rmdir '$(DESTDIR)/$(libopkhelper)/buildsystem' 2>/dev/null || true + +$(distdir): + @mkdir -p '$(distdir)' + @cp -pR $(distfiles) '$(distdir)' diff --git a/lib/buildsystem/autoconf.sh b/lib/buildsystem/autoconf.sh new file mode 100644 index 0000000..13370ae --- /dev/null +++ b/lib/buildsystem/autoconf.sh @@ -0,0 +1,72 @@ +# opkhelper +# lib/buildsystem/autoconf +# Build system plugin for GNU Autoconf. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +[ -n "${_OH_BUILDSYSTEM_AUTOCONF_SM}" ] && return 0 +_OH_BUILDSYSTEM_AUTOCONF_SM='true' + +_oh_autoconf_can_configure() +{ + [ -x "${_OH_BUILDSYSTEM_SOURCE_DIR}/configure" ] +} + +_oh_autoconf_configure() +{ + mkdir -p "${_OH_BUILDSYSTEM_BUILD_DIR}" + cd "${_OH_BUILDSYSTEM_BUILD_DIR}" + + "${_OH_BUILDSYSTEM_SOURCE_DIR}/configure" \ + --prefix='/usr' \ + --bindir='${prefix}/bin' \ + --sbindir='${prefix}/sbin' \ + --libexecdir='${prefix}/lib' \ + --sysconfdir='/etc' \ + --localstatedir='/var' \ + --libdir='${prefix}/lib' \ + --includedir='${prefix}/include' \ + --infodir='${prefix}/share/info' \ + --mandir='${prefix}/share/man' \ + --build="${OPK_BUILD_ARCH_GNU}" \ + $([ "${OPK_BUILD_ARCH}" != "${OPK_HOST_ARCH}" ] && \ + printf '%s' "--host=${OPK_HOST_ARCH_GNU}") \ + --disable-maintainer-mode \ + --disable-dependency-tracking \ + "${@}" + + cd "${_OH_BUILDSYSTEM_WORK_AREA}" +} + +_oh_autoconf_can_build() +{ + return 1 +} + +_oh_autoconf_can_clean() +{ + return 1 +} + +_oh_autoconf_can_test() +{ + return 1 +} + +_oh_autoconf_can_install() +{ + return 1 +} diff --git a/lib/buildsystem/make.sh b/lib/buildsystem/make.sh new file mode 100644 index 0000000..5df424a --- /dev/null +++ b/lib/buildsystem/make.sh @@ -0,0 +1,97 @@ +# opkhelper +# lib/buildsystem/make +# Build system plugin for POSIX-conformant make. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +[ -n "${_OH_BUILDSYSTEM_MAKE_SM}" ] && return 0 +_OH_BUILDSYSTEM_MAKE_SM='true' + +_oh_make_can_configure() +{ + return 1 +} + +_oh_make_can_build() +{ + [ -r "${_OH_BUILDSYSTEM_SOURCE_DIR}/makefile" -o \ + -r "${_OH_BUILDSYSTEM_SOURCE_DIR}/Makefile" ] +} + +_oh_make_build() +{ + _oh_make_update_first_defined_target '' "${@}" +} + +_oh_make_can_clean() +{ + _oh_make_can_build +} + +_oh_make_clean() +{ + _oh_make_update_first_defined_target 'distclean realclean clean' "${@}" +} + +_oh_make_can_test() +{ + _oh_make_can_build +} + +_oh_make_test() +{ + _oh_make_update_first_defined_target 'test check' "${@}" +} + +_oh_make_can_install() +{ + _oh_make_can_build +} + +_oh_make_install() +{ + _oh_make_update_first_defined_target 'install' \ + "${@}" "DESTDIR=${_OH_BUILDSYSTEM_DESTDIR}" +} + +_oh_make_update_first_defined_target() +{ + _oh_local _ohbsmufdt_targets _ohbsmufdt_target + + _ohbsmufdt_targets="${1}" + shift + + mkdir -p "${_OH_BUILDSYSTEM_BUILD_DIR}" + cd "${_OH_BUILDSYSTEM_BUILD_DIR}" + + if [ -z "${_ohbsmufdt_targets}" ]; then + make "${@}" + else + for _ohbsmufdt_target in ${_ohbsmufdt_targets}; do + # If the target is defined, ... + if make -n "${_ohbsmufdt_target}" >/dev/null 2>&1; then + # ... then update it. + make "${@}" "${_ohbsmufdt_target}" + break + fi + done + fi + + cd "${_OH_BUILDSYSTEM_WORK_AREA}" + + _oh_return 0 + return ${?} +} diff --git a/lib/common.sh b/lib/common.sh new file mode 100644 index 0000000..b0c465c --- /dev/null +++ b/lib/common.sh @@ -0,0 +1,62 @@ +# opkhelper +# lib/common +# Functions for stack memory management. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +[ -n "${_OH_COMMON_SM}" ] && return 0 +_OH_COMMON_SM='true' + +_OH_STACK_VARS= +_OH_SAVED_IFS= + +_oh_local() +{ + # Push the variable list onto the stack. + _OH_STACK_VARS="${_OH_STACK_VARS}|${*}" + + # Save the old IFS value, if any, and set it to its default. + _OH_SAVED_IFS="${IFS}" + IFS=' +' +} + +_oh_return() +{ + # Unset the variables at the top of the stack. + IFS=' ' + unset -v ${_OH_STACK_VARS##*|} + + # Pop the variable list from the top of the stack. + _OH_STACK_VARS="${_OH_STACK_VARS%|*}" + + # Restore the saved IFS. + IFS="${_OH_SAVED_IFS}" + + return ${1} +} + +oh_init() +{ + ob_use locale + ob_use output + + # Since nothing other than opkhelper is supposed to use libopkhelper, we can + # do strange things like affecting application-wide locale settings from the + # library and assume that no one will play with them. + ob_set_locale_path '@@LOCALEDIR@@/%s/LC_MESSAGES/%s.ms' + ob_set_text_domain 'opkhelper' +} diff --git a/lib/load.sh b/lib/load.sh new file mode 100644 index 0000000..0b54f4a --- /dev/null +++ b/lib/load.sh @@ -0,0 +1,51 @@ +# opkhelper +# lib/load +# Functions for loading library modules. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +[ -n "${_OH_LOAD_SM}" ] && return 0 +_OH_LOAD_SM='true' + +# The "common" module is used by this and all other modules. +# We have to manually load the "common" module so we can use it in oh_use. +. '@@LIBOPKHELPER@@/common.sm' + +# Assume that every library module and utility uses libopkbuild. +. '@@LIBOPKBUILD_1@@/load.sm' + +oh_use() +{ + _oh_local _ohu_module + + if [ ${#} -eq 1 ]; then + _ohu_module="${1}" + else + _oh_return 125 + return ${?} + fi + + _ohu_module='@@LIBOPKHELPER@@'"/${_ohu_module}.sm" + if [ -r "${_ohu_module}" ]; then + . "${_ohu_module}" + else + _oh_return 1 + return ${?} + fi + + _oh_return 0 + return ${?} +} |