commit 0f658d0ae318a62d08bfea908a80c54eb91261c3 Author: EnumDev Date: Thu Jul 30 13:42:30 2026 +0300 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9d96df7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Ignore BPM archives and signatures +*.bpm +*.bpm.sig diff --git a/check-version.sh b/check-version.sh new file mode 100644 index 0000000..6aae911 --- /dev/null +++ b/check-version.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +URL="ftp://ftp.gnu.org/gnu/vcdimager/" + +# Get version number from FTP server +VERSION=$(curl -s --list-only "$URL" | grep -E '^vcdimager-[0-9]{1,}\.[0-9]{1,}(\.[0-9]{1,})?.tar.gz$' | cut -d '-' -f2 | sort -V | tail -n1) + +# Remove '.tar.gz' suffix from VERSION variable +VERSION=${VERSION//.tar.gz/} + +echo "$VERSION" diff --git a/info.yml b/info.yml new file mode 100644 index 0000000..bf2bce9 --- /dev/null +++ b/info.yml @@ -0,0 +1,17 @@ +name: vcdimager +description: full-featured mastering suite for authoring, disassembling and analyzing Video CDs and Super Video CDs +version: 2.0.1 +revision: 1 +url: https://www.gnu.org/software/vcdimager/ +license: GPL-2.0-or-later +architecture: any +type: source +depends: + - libcdio + - libxml2 + - popt +downloads: + - url: https://ftpmirror.gnu.org/gnu/vcdimager/vcdimager-${BPM_PKG_VERSION}.tar.gz + extract_to: ${BPM_SOURCE} + extract_strip_components: 1 + checksum: 67515fefb9829d054beae40f3e840309be60cda7d68753cafdd526727758f67a diff --git a/recipe.sh b/recipe.sh new file mode 100644 index 0000000..bfa2c8f --- /dev/null +++ b/recipe.sh @@ -0,0 +1,26 @@ +# This is the recipe.sh script. It is executed by BPM in a temporary directory when compiling a source package +# BPM Expects the source code to be extracted into the automatically created 'source' directory which can be accessed using $BPM_SOURCE +# BPM Expects the output files to be present in the automatically created 'output' directory which can be accessed using $BPM_OUTPUT + +# The prepare function is executed in the root of the temp directory +# This function is used for putting downloaded files to the correct location or applying patches +prepare() { + cd "$BPM_SOURCE" + patch -Np1 -i "$BPM_WORKDIR"/libxml214.diff +} + +# The build function is executed in the source directory +# This function is used to compile the source code +build() { + ./configure --prefix=/usr + make +} + +# The package function is executed in the source directory +# This function is used to move the compiled files into the output directory +package() { + make DESTDIR="$BPM_OUTPUT" install + + # Install package license + install -Dm644 "$BPM_SOURCE"/COPYING "$BPM_OUTPUT"/usr/share/licenses/vcdimager/COPYING +} diff --git a/source-files/libxml214.diff b/source-files/libxml214.diff new file mode 100644 index 0000000..4dc5e00 --- /dev/null +++ b/source-files/libxml214.diff @@ -0,0 +1,37 @@ +diff -Nurp vcdimager-2.0.1/frontends/xml/vcd_xml_common.c vcdimager-2.0.1-libxml214/frontends/xml/vcd_xml_common.c +--- vcdimager-2.0.1/frontends/xml/vcd_xml_common.c 2018-01-03 21:17:37.000000000 +0100 ++++ vcdimager-2.0.1-libxml214/frontends/xml/vcd_xml_common.c 2025-04-26 05:22:03.008769534 +0200 +@@ -242,17 +242,27 @@ _convert (const char in[], const char en + + temp = size - 1; + if (from) { +- if (NULL != handler->output) +- ret = handler->output (out, &out_size, (const unsigned char *) in, &temp); +- else ++ if (!(handler->flags & 2) && NULL != handler->output.func) ++ ret = handler->output.func (handler->outputCtxt, out, &out_size, (const unsigned char *) in, &temp, 1); ++ if ((handler->flags & 2) && NULL != handler->output.legacyFunc) ++ ret = handler->output.legacyFunc (out, &out_size, (const unsigned char *) in, &temp); ++ else { ++ xmlCharEncCloseFunc(handler); + return strdup(in); ++ } + } else { +- if (NULL != handler->input) +- ret = handler->input (out, &out_size, (const unsigned char *) in, &temp); +- else ++ if (!(handler->flags & 2) && NULL != handler->input.func) ++ ret = handler->input.func (handler->inputCtxt, out, &out_size, (const unsigned char *) in, &temp, 1); ++ if ((handler->flags & 2) && NULL != handler->input.legacyFunc) ++ ret = handler->input.legacyFunc (out, &out_size, (const unsigned char *) in, &temp); ++ else { ++ xmlCharEncCloseFunc(handler); + return strdup(in); ++ } + } + ++ xmlCharEncCloseFunc(handler); ++ + if (ret < 0 || (temp - size + 1)) + { + free (out);