Sync from SUSE:ALP:Source:Standard:1.0 ocaml-rpm-macros revision ea8fc1b2a682e96b55d82beb371b96fb
This commit is contained in:
commit
f00d66f3ee
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
## Default LFS
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.zst filter=lfs diff=lfs merge=lfs -text
|
235
ocaml-findlib.rpm.prov_req.attr.sh
Normal file
235
ocaml-findlib.rpm.prov_req.attr.sh
Normal file
@ -0,0 +1,235 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
prov_req_name="ocamlfind"
|
||||
td=`mktemp --directory`
|
||||
|
||||
test -n "${td}"
|
||||
_x() {
|
||||
rm -rf "${td}"
|
||||
}
|
||||
trap _x EXIT
|
||||
|
||||
cmd=
|
||||
test "$1" = "-prov" && cmd=prov
|
||||
test "$1" = "-req" && cmd=req
|
||||
do_work() {
|
||||
local f=$1
|
||||
local pkg_name
|
||||
local pkg_prov_req
|
||||
local pkg_prov
|
||||
local pkg_req
|
||||
local elem req
|
||||
pkg_name="${f##*/}"
|
||||
if test "${pkg_name}" = "META"
|
||||
then
|
||||
pkg_name="${f%/*}"
|
||||
pkg_name="${pkg_name##*/}"
|
||||
else
|
||||
pkg_name="${pkg_name#META.}"
|
||||
fi
|
||||
pkg_prov_req="`
|
||||
env \
|
||||
pkg_name="${pkg_name}" \
|
||||
cmd="${cmd}" \
|
||||
awk '
|
||||
BEGIN {
|
||||
dbg=0;
|
||||
count=1;
|
||||
depth=0;
|
||||
pkg_name=ENVIRON["pkg_name"];
|
||||
cmd=ENVIRON["cmd"];
|
||||
|
||||
if(dbg) printf "bEGIN \\"%s\\" cmd: %s\n", pkg_name, cmd > "/dev/stderr" ;
|
||||
requires[pkg_name]=""
|
||||
ppx_runtime_deps[pkg_name]=""
|
||||
pkg_names[depth]=pkg_name
|
||||
}
|
||||
|
||||
{
|
||||
if(dbg) printf "line: %s\n", $0 > "/dev/stderr"
|
||||
}
|
||||
|
||||
/^[[:blank:]]*directory[[:blank:]]*=/ {
|
||||
if(dbg) printf "GOT: %s\n", $0 > "/dev/stderr" ;
|
||||
if (depth == 0) {
|
||||
x = split($0, a, "\\"");
|
||||
if ( a[2] ) {
|
||||
candidate = a[2];
|
||||
if(dbg) printf "dir: %s %s\n", x, candidate > "/dev/stderr" ;
|
||||
if (candidate == "^") {
|
||||
next
|
||||
}
|
||||
if (candidate == "+") {
|
||||
next
|
||||
}
|
||||
if (candidate ~ /^\^/) {
|
||||
next
|
||||
}
|
||||
if (candidate ~ /^\+/) {
|
||||
candidate = substr(candidate, 2);
|
||||
}
|
||||
if (candidate ~ /^\//) {
|
||||
x = split(candidate, a, "/");
|
||||
if ( x )
|
||||
candidate = a[x];
|
||||
}
|
||||
if (candidate ~ /^\.\.\//) {
|
||||
x = split(candidate, a, "/");
|
||||
if ( x )
|
||||
candidate = a[x];
|
||||
}
|
||||
if(dbg) printf "dir: %s %s\n", x, candidate > "/dev/stderr" ;
|
||||
if (candidate != pkg_name) {
|
||||
requires[candidate] = requires[pkg_name];
|
||||
delete requires[pkg_name];
|
||||
pkg_name = candidate;
|
||||
if(dbg) printf "new pkg_name %s %s\n", x, pkg_name > "/dev/stderr" ;
|
||||
pkg_names[depth]=pkg_name
|
||||
} else {
|
||||
if(dbg) printf "pkg_name remains %s\n", pkg_name > "/dev/stderr" ;
|
||||
}
|
||||
}
|
||||
}
|
||||
next
|
||||
}
|
||||
|
||||
/^[[:blank:]]*requires(|\([^-][^)]+\))[[:blank:]]*(+=|=)/ {
|
||||
if(dbg) printf "GOT: %s\n", $0 > "/dev/stderr" ;
|
||||
done=0
|
||||
requires_line = ""
|
||||
do {
|
||||
need_next_line = 1
|
||||
line = $0
|
||||
requires_line = sprintf("%s%s", requires_line, line)
|
||||
l = length(requires_line)
|
||||
qm = index(requires_line, "\\"")
|
||||
if (l > qm) {
|
||||
line = substr(requires_line, qm + 1)
|
||||
qm = index(line, "\\"")
|
||||
need_next_line = qm == 0
|
||||
}
|
||||
|
||||
if (need_next_line) {
|
||||
done = getline == 0
|
||||
} else {
|
||||
done = 1
|
||||
}
|
||||
} while (done == 0)
|
||||
|
||||
x = split(requires_line, a, "\\"");
|
||||
if ( a[2] ) {
|
||||
if(dbg) printf "req2 %s %s\n", x, a[2] > "/dev/stderr" ;
|
||||
x = gsub("[[:blank:]]+", ",", a[2]);
|
||||
if(dbg) printf "req2 %s %s\n", x, a[2] > "/dev/stderr" ;
|
||||
if (requires[pkg_name] == "") {
|
||||
requires[pkg_name] = a[2]
|
||||
} else {
|
||||
requires[pkg_name] = sprintf("%s,%s", requires[pkg_name],a[2])
|
||||
}
|
||||
}
|
||||
next
|
||||
}
|
||||
|
||||
/^[[:blank:]]*ppx_runtime_deps[[:blank:]]*(+=|=)/ {
|
||||
if(dbg) printf "GOT: %s\n", $0 > "/dev/stderr" ;
|
||||
done=0
|
||||
ppx_runtime_deps_line = ""
|
||||
do {
|
||||
need_next_line = 1
|
||||
line = $0
|
||||
ppx_runtime_deps_line = sprintf("%s%s", ppx_runtime_deps_line, line)
|
||||
l = length(ppx_runtime_deps_line)
|
||||
qm = index(ppx_runtime_deps_line, "\\"")
|
||||
if (l > qm) {
|
||||
line = substr(ppx_runtime_deps_line, qm + 1)
|
||||
qm = index(line, "\\"")
|
||||
need_next_line = qm == 0
|
||||
}
|
||||
|
||||
if (need_next_line) {
|
||||
done = getline == 0
|
||||
} else {
|
||||
done = 1
|
||||
}
|
||||
} while (done == 0)
|
||||
|
||||
x = split(ppx_runtime_deps_line, a, "\\"");
|
||||
if ( a[2] ) {
|
||||
if(dbg) printf "req2 %s %s\n", x, a[2] > "/dev/stderr" ;
|
||||
x = gsub("[[:blank:]]+", ",", a[2]);
|
||||
if(dbg) printf "req2 %s %s\n", x, a[2] > "/dev/stderr" ;
|
||||
if (ppx_runtime_deps[pkg_name] == "") {
|
||||
ppx_runtime_deps[pkg_name] = a[2]
|
||||
} else {
|
||||
requires[pkg_name] = sprintf("%s,%s", requires[pkg_name],a[2])
|
||||
}
|
||||
}
|
||||
next
|
||||
}
|
||||
|
||||
/^[[:blank:]]*package[[:blank:]]/ {
|
||||
if(dbg) printf "GOT: %s\n", $0 > "/dev/stderr" ;
|
||||
depth = depth + 1;
|
||||
if(dbg) printf "depth %s\n", depth > "/dev/stderr" ;
|
||||
x = split($0, a, "\\"");
|
||||
if ( a[2] ) {
|
||||
if(dbg) printf "req2 %s %s\n", x, a[2] > "/dev/stderr" ;
|
||||
pkg_name = pkg_name"."a[2];
|
||||
requires[pkg_name]=""
|
||||
pkg_names[depth]=pkg_name
|
||||
if(dbg) printf "new pkg_name %s %s\n", x, pkg_name > "/dev/stderr" ;
|
||||
}
|
||||
next
|
||||
}
|
||||
|
||||
/^[[:blank:]]*)/ {
|
||||
if(dbg) printf "GOT: %s\n", $0 > "/dev/stderr" ;
|
||||
depth = depth -1;
|
||||
if(dbg) printf "depth %s\n", depth > "/dev/stderr" ;
|
||||
pkg_name=pkg_names[depth]
|
||||
if(dbg) printf "old pkg_name %s %s\n", x, pkg_name > "/dev/stderr" ;
|
||||
next
|
||||
}
|
||||
|
||||
END {
|
||||
if(dbg) printf "eND \\"%s\\"\n", pkg_name > "/dev/stderr" ;
|
||||
for (req in requires) {
|
||||
if(dbg)printf "eNd \\"%s\\"\n", req > "/dev/stderr";
|
||||
# format: provides:requires
|
||||
printf "%s:%s\n", req, requires[req];
|
||||
}
|
||||
for (req in ppx_runtime_deps) {
|
||||
if(dbg)printf "eNd \\"%s\\"\n", req > "/dev/stderr";
|
||||
# format: provides:requires
|
||||
printf "%s:%s\n", req, ppx_runtime_deps[req];
|
||||
}
|
||||
if(dbg) printf "ENd \\"%s\\"\n", pkg_name > "/dev/stderr" ;
|
||||
}
|
||||
' \"${f}\"
|
||||
`"
|
||||
for elem in ${pkg_prov_req}
|
||||
do
|
||||
pkg_prov="${elem%%:*}"
|
||||
pkg_req="${elem#*:}"
|
||||
pkg_req="${pkg_req//,/ }"
|
||||
if test -n "${pkg_prov}" && test "${cmd}" = "prov"
|
||||
then
|
||||
echo "${prov_req_name}($pkg_prov)"
|
||||
fi
|
||||
if test "${cmd}" = "req"
|
||||
then
|
||||
for i in ${pkg_req}
|
||||
do
|
||||
echo "${prov_req_name}(${i})"
|
||||
done
|
||||
fi
|
||||
done
|
||||
}
|
||||
while read filename
|
||||
do
|
||||
case "${filename}" in
|
||||
*/META*) do_work "${filename}" ;;
|
||||
*) ;;
|
||||
esac
|
||||
done
|
||||
# vim: tw=666 ts=2 shiftwidth=2 et
|
247
ocaml-ocaml.rpm.prov_req.attr.sh
Normal file
247
ocaml-ocaml.rpm.prov_req.attr.sh
Normal file
@ -0,0 +1,247 @@
|
||||
#!/bin/bash
|
||||
# This is a helper for rpm which collects 'Provides' and 'Requires' information from OCaml files.
|
||||
# It reads a list of filenames from STDIN.
|
||||
# It expects as argument either '--provides|-P' or '--requires|-R'.
|
||||
# Additional optional arguments are:
|
||||
# -f "ocamlobjinfo command"
|
||||
# -c # ignored, recognized just for compat reasons
|
||||
# -i NAME # omit the Requires/Provides for this bytecode unit name
|
||||
# -x NAME # omit the Requires/Provides for this native unit name
|
||||
#
|
||||
# OCaml object files contain either bytecode or native code.
|
||||
# Each bytecode variant provides a certain interface, which is represented by a hash.
|
||||
# Each native variant provides a certain interface and a certain implementation, which are represented by hashes.
|
||||
# Each variant may also require a certain interface and/or implementation provided by other files.
|
||||
# The details for each file can be inspected with 'ocamlobjinfo'.
|
||||
#
|
||||
# Each file contains at least one module.
|
||||
# Information about each module follows after a line starting with "Name:" or "Unit name:":
|
||||
#
|
||||
# cma/cmi/cmo (bytecode):
|
||||
# Unit name: NAME
|
||||
# Interfaces imported:
|
||||
# HASH NAME
|
||||
# HASH NAME_FROM_OTHER_MODULE
|
||||
#
|
||||
# cmx/cmxa/cmxs (native):
|
||||
# Name: NAME
|
||||
# CRC of implementation: HASH
|
||||
# Interfaces imported:
|
||||
# HASH NAME
|
||||
# HASH NAME_FROM_OTHER_MODULE
|
||||
# Implementations imported:
|
||||
# HASH NAME_FROM_OTHER_MODULE
|
||||
#
|
||||
# cmxs files are recoqnized, but need to be ignored.
|
||||
# They contain references of the interfaces and implementations
|
||||
# compiled into them.
|
||||
#
|
||||
# The hash may contain just '-', in which case it is ignored.
|
||||
#
|
||||
# Output:
|
||||
# ocaml(NAME) = HASH # for interfaces (bytecode and native)
|
||||
# ocamlx(NAME) = HASH # for implementations (native)
|
||||
|
||||
set -e
|
||||
#
|
||||
OCAMLOBJINFO=ocamlobjinfo
|
||||
rpm_prefix_interface='ocaml'
|
||||
rpm_prefix_implementation='ocamlx'
|
||||
#
|
||||
parse() {
|
||||
local filename="$1"
|
||||
|
||||
${OCAMLOBJINFO} "${filename}" | awk '
|
||||
BEGIN {
|
||||
debug=0
|
||||
mode=ENVIRON["mode"]
|
||||
RPM_BUILD_ROOT=ENVIRON["RPM_BUILD_ROOT"]
|
||||
rpm_prefix_interface=ENVIRON["rpm_prefix_interface"]
|
||||
rpm_prefix_implementation=ENVIRON["rpm_prefix_implementation"]
|
||||
state="find"
|
||||
unit=""
|
||||
|
||||
split(ENVIRON["ignore_implementation"], ignore_implementation_a)
|
||||
for (i in ignore_implementation_a) {
|
||||
val=ignore_implementation_a[i]
|
||||
if (debug)
|
||||
printf "INFO: ignore_implementation %s\n", val > "/dev/stderr"
|
||||
ignore_implementation[val]=1
|
||||
}
|
||||
split(ENVIRON["ignore_interface"], ignore_interface_a)
|
||||
for (i in ignore_interface_a) {
|
||||
val=ignore_interface_a[i]
|
||||
if (debug)
|
||||
printf "INFO: ignore_interface %s\n", val > "/dev/stderr"
|
||||
ignore_interface[val]=1
|
||||
}
|
||||
}
|
||||
|
||||
/^File / {
|
||||
if (RPM_BUILD_ROOT != "" ) {
|
||||
file=substr($2,length(RPM_BUILD_ROOT)+1)
|
||||
} else {
|
||||
file=$2
|
||||
}
|
||||
state="file"
|
||||
next
|
||||
}
|
||||
/^Unit name:/ {
|
||||
unit=$3
|
||||
state="cma"
|
||||
next
|
||||
}
|
||||
/^Name:/ {
|
||||
unit=$2
|
||||
state="cmx"
|
||||
next
|
||||
}
|
||||
|
||||
/^CRC of implementation:/ {
|
||||
if (state == "cmx") {
|
||||
if (ignore_implementation[unit] != "") {
|
||||
if (ignore_implementation[unit] != "seen") {
|
||||
printf "INFO: ignoring Provides %s(%s)=%s from %s\n", rpm_prefix_implementation, unit, $4, file > "/dev/stderr"
|
||||
ignore_implementation[unit]="seen"
|
||||
}
|
||||
} else {
|
||||
implementation_provides[unit]=$4
|
||||
}
|
||||
} else {
|
||||
printf "WARN: state %s, expected cmx, got %s\n", state, $0 > "/dev/stderr"
|
||||
}
|
||||
state="crc"
|
||||
next
|
||||
}
|
||||
|
||||
/^Interfaces imported:/ {
|
||||
state="interface"
|
||||
next
|
||||
}
|
||||
|
||||
/^Implementations imported:/ {
|
||||
state="implementation"
|
||||
next
|
||||
}
|
||||
|
||||
/^\t/ {
|
||||
if (state == "interface" && NF > 1 && match($1, "^-") == 0) {
|
||||
if (unit == $2) {
|
||||
if (ignore_interface[unit] != "") {
|
||||
if (ignore_interface[unit] != "seen") {
|
||||
printf "INFO: ignoring Provides %s(%s)=%s from %s\n", rpm_prefix_interface, unit, $1, file > "/dev/stderr"
|
||||
ignore_interface[unit]="seen"
|
||||
}
|
||||
} else {
|
||||
interface_provides[unit]=$1
|
||||
}
|
||||
} else {
|
||||
if (ignore_interface[$2] != "") {
|
||||
if (ignore_interface[$2] != "seen") {
|
||||
printf "INFO: ignoring Requires %s(%s)=%s from %s\n", rpm_prefix_interface, $2, $1, file > "/dev/stderr"
|
||||
ignore_interface[$2]="seen"
|
||||
}
|
||||
} else {
|
||||
interface_requires[$2]=$1
|
||||
}
|
||||
}
|
||||
next
|
||||
} else if (state == "implementation" && NF > 1 && match($1, "^-") == 0) {
|
||||
if (unit == $2) {
|
||||
if (ignore_implementation[unit] != "") {
|
||||
if (ignore_implementation[unit] != "seen") {
|
||||
printf "INFO: ignoring Provides %s(%s)=%s from %s\n", rpm_prefix_implementation, unit, $1, file > "/dev/stderr"
|
||||
ignore_implementation[unit]="seen"
|
||||
}
|
||||
} else {
|
||||
implementation_provides[unit]=$1
|
||||
}
|
||||
} else {
|
||||
if (ignore_implementation[$2] != "") {
|
||||
if (ignore_implementation[$2] != "seen") {
|
||||
printf "INFO: ignoring Requires %s(%s)=%s from %s\n", rpm_prefix_implementation, $2, $1, file > "/dev/stderr"
|
||||
ignore_implementation[$2]="seen"
|
||||
}
|
||||
} else {
|
||||
implementation_requires[$2]=$1
|
||||
}
|
||||
}
|
||||
next
|
||||
} else {
|
||||
next
|
||||
}
|
||||
}
|
||||
/^.*/ {
|
||||
state="find"
|
||||
}
|
||||
|
||||
END {
|
||||
if (mode == "provides") {
|
||||
for (i in interface_provides) {
|
||||
printf "%s(%s) = %s\n", rpm_prefix_interface, i, interface_provides[i]
|
||||
}
|
||||
for (i in implementation_provides) {
|
||||
printf "%s(%s) = %s\n", rpm_prefix_implementation, i, implementation_provides[i]
|
||||
}
|
||||
}
|
||||
if (mode == "requires") {
|
||||
for (i in interface_requires) {
|
||||
printf "%s(%s) = %s\n", rpm_prefix_interface, i, interface_requires[i]
|
||||
}
|
||||
for (i in implementation_requires) {
|
||||
printf "%s(%s) = %s\n", rpm_prefix_implementation, i, implementation_requires[i]
|
||||
}
|
||||
}
|
||||
}
|
||||
'
|
||||
}
|
||||
#
|
||||
#
|
||||
usage() {
|
||||
echo >&2 "Usage: ${0##*/} -provides|-requires [-f 'ocamlobjinfo cmd']"
|
||||
}
|
||||
#
|
||||
mode=
|
||||
ignore_implementation_a=()
|
||||
ignore_interface_a=()
|
||||
while test "$#" -gt 0
|
||||
do
|
||||
: "${1}" "${2}"
|
||||
case "${1}" in
|
||||
-P|--provides) mode='provides' ;;
|
||||
-R|--requires) mode='requires' ;;
|
||||
-i) ignore_interface_a+=("$2") ; shift ;;
|
||||
-x) ignore_implementation_a+=("$2") ; shift ;;
|
||||
-f) OCAMLOBJINFO="$2"; shift ;;
|
||||
-h|--help) usage ; exit 0 ;;
|
||||
-c) ;; # ignored
|
||||
--) break ;;
|
||||
*) usage ; exit 1 ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
if test -z "${mode}"
|
||||
then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
#
|
||||
export rpm_prefix_interface
|
||||
export rpm_prefix_implementation
|
||||
export mode
|
||||
export ignore_implementation="${ignore_implementation_a[@]}"
|
||||
export ignore_interface="${ignore_interface_a[@]}"
|
||||
#
|
||||
while read filename
|
||||
do
|
||||
case "${filename}" in
|
||||
*.cma) parse "${filename}" ;;
|
||||
*.cmi) parse "${filename}" ;;
|
||||
*.cmo) parse "${filename}" ;;
|
||||
*.cmx) parse "${filename}" ;;
|
||||
*.cmxa) parse "${filename}" ;;
|
||||
*.cmxs) ;;
|
||||
*) continue ;;
|
||||
esac
|
||||
done
|
||||
# vim: tw=666 ts=2 shiftwidth=2 et
|
188
ocaml-rpm-macros.changes
Normal file
188
ocaml-rpm-macros.changes
Normal file
@ -0,0 +1,188 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 31 21:44:55 UTC 2023 - Aaron Puchert <aaronpuchert@alice-dsl.net>
|
||||
|
||||
- Increase stack size limit for riscv64 like for ppc64(le).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Jan 29 08:34:55 UTC 2023 - Bernhard Wiedemann <bwiedemann@suse.com>
|
||||
|
||||
- Allow variables in smp_mflags to be interpolated
|
||||
for https://github.com/rpm-software-management/rpm/issues/2343
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Jan 1 01:01:01 UTC 2023 - ohering@suse.de
|
||||
|
||||
- Remove stale references to ocaml_make_testsuite
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 7 07:07:07 UTC 2022 - ohering@suse.de
|
||||
|
||||
- Handle plain ^ and + as values for directory= in findlib META files
|
||||
They stand for the OCaml standard library directory.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Apr 9 12:34:56 UTC 2022 - ohering@suse.de
|
||||
|
||||
- remove unused ocaml_dune_bootstrap_directory
|
||||
- move all invocations of dune from ocaml_dune_setup to ocaml_dune_build
|
||||
- process content of ocaml_standard_library only if it exists in buildroot
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Feb 22 22:22:22 UTC 2022 - ohering@suse.de
|
||||
|
||||
- remove usage of external-lib-deps for dune3
|
||||
- define ocaml_dune_bootstrap_directory for dune3
|
||||
- remove braces from rpm macros
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 27 07:31:27 UTC 2021 - ohering@suse.de
|
||||
|
||||
- Move cmxs files into the main package
|
||||
Applications like Coq may load them at runtime.
|
||||
- Ignore dependencies for cmxs files
|
||||
- Restore dummy ocaml_native_compiler to allow quilt setup with
|
||||
old packages
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Sep 11 12:34:56 UTC 2021 - ohering@suse.de
|
||||
|
||||
- Rename a single opam file to $dune_release_pkgs.opam
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Apr 21 12:34:56 UTC 2021 - ohering@suse.de
|
||||
|
||||
- Remove ocaml_native_compiler flag, assume native target
|
||||
This flag puts too much burden on pkgs that use ocaml, but build
|
||||
with their buildsystem instead of using dune
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 9 09:09:09 UTC 2021 - ohering@suse.de
|
||||
|
||||
- Use bcond suse_ocaml_use_rpm_license_macro for license in filelist
|
||||
- Add suse prefix to ocaml_native_compiler to avoid conflict
|
||||
- Create Provides/Requires only for rpm variants which understand fileattrs
|
||||
- Fix syntax for chmod of .cmxs
|
||||
- Add conditional to disable debug_package macro when building with broken rpm variants
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Feb 9 09:09:09 UTC 2021 - ohering@suse.de
|
||||
|
||||
- Fix regex in file list generator to really match dot and extension
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jan 21 21:21:21 UTC 2021 - ohering@suse.de
|
||||
|
||||
- Adjust parser of ocamfind() requires
|
||||
Take negative predicates in requires() into account, and ignore them.
|
||||
This is supposed to avoid dependency cycles due to excessive
|
||||
list of dependencies.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jan 14 14:14:14 UTC 2021 - ohering@suse.de
|
||||
|
||||
- Adjust injection of version into findlib META files
|
||||
A file VERSION is not handled anymore by dune since 1.11.
|
||||
Remove version: from *.opam files, inject version into dune-project
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Aug 20 20:20:20 UTC 2020 - ohering@suse.de
|
||||
|
||||
- Package also *.v, for Coq
|
||||
- Package changelog files
|
||||
- Enable native riscv64
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu May 14 14:14:14 UTC 2020 - ohering@suse.de
|
||||
|
||||
- The filename for rpm *.attr files and the tag used within these
|
||||
files must match. Otherwise rpm will not execute the helper scripts.
|
||||
Use tag 'suseocaml', rename zocaml.attr to suseocaml.attr to
|
||||
avoid filename conflicts with rpm-build.rpm (bsc#1154874)
|
||||
- Rename also ocamlfind to suseocamlfind
|
||||
- Escape plain % chars
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Apr 12 12:12:12 UTC 2020 - ohering@suse.de
|
||||
|
||||
- run OCaml rpm dependency generator only if both path and magic matches (rpm#1173)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Mar 21 12:34:56 UTC 2020 - ohering@suse.de
|
||||
|
||||
- Disable parallel build for OCaml 4.08, 4.09 and 4.10
|
||||
to get reproducible cma archives (issue#9307)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Feb 20 20:20:20 UTC 2020 - ohering@suse.de
|
||||
|
||||
- Add ocaml-ocaml.rpm.prov_req.attr.sh
|
||||
New script for rpm Provides/Requires, replacement for rpm
|
||||
built-in ocaml(NAME)=hash, which covers bytecode and interfaces
|
||||
Now it covers also native code via ocamlx(NAME)=HASH (bsc#1154874)
|
||||
- Update the filelist generator
|
||||
Use awk to match directories in ocamls built-in ld.conf
|
||||
C stublibs in default locations do not need a ld.so.conf entry
|
||||
Remaining ld.so.conf files for stublibs go to the devel package
|
||||
- Disable debug in ocamlfind() Provides/Requires generator
|
||||
Update META parser to handle multiline statements and ppx
|
||||
- Provide a ocaml_standard_library macro
|
||||
- Explicitly preserve debuginfo in .cmxs, already enforced by dune
|
||||
- Install also COPYRIGHT.txt as license, needed for some JaneStreet pkgs
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Nov 25 12:34:56 UTC 2019 - ohering@suse.de
|
||||
|
||||
- Install also LGPL as license, needed by ocaml-lablgtk2
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Nov 1 12:34:56 UTC 2019 - ohering@suse.de
|
||||
|
||||
- Moved ocaml-findlib.rpm.prov_req.attr.sh from ocaml to provide
|
||||
ocamlfind() in ocaml itself
|
||||
- Handle license separately because sed w truncates output
|
||||
- Document individual file extensions
|
||||
- Move cmxs and so files to devel packages because they are not
|
||||
used at runtime. Also, cmxs dependencies in main pkg are
|
||||
not covered by ocaml-find-requires.sh (bsc#1154874)
|
||||
- Set VERSION unconditionally for each patch, sometimes dune picks it up
|
||||
- Pass --for-release-of-packages to dune via dune_release_pkgs=
|
||||
- Print potential BuildRequires during build
|
||||
- Package sml for camlp5
|
||||
- SLE_12 has still no license macro, package as doc instead
|
||||
- Use _smp_mflags instead of nproc for parallel build
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 9 05:48:16 UTC 2019 - ohering@suse.de
|
||||
|
||||
- Package also COPYRIGHT, for labltk
|
||||
- Package also Copyright, for dose3
|
||||
- Package also *.cmo
|
||||
- Package also *.so.owner
|
||||
- Package also *.o
|
||||
- Package also /etc/ld.so.conf.d
|
||||
- Package also *.js
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 4 07:56:44 UTC 2019 - ohering@suse.de
|
||||
|
||||
- Use _rpmmacrodir
|
||||
- Automatically package known license files in main pkg
|
||||
- List unhandled files in ocaml_create_file_list macro
|
||||
- Do not mark files as %config
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 30 14:15:16 UTC 2019 - ohering@suse.de
|
||||
|
||||
- Increase ulimit -s on ppc64 in dune macros
|
||||
Required for at least ocaml-camomile
|
||||
- Show external-lib-deps also for dune runtest
|
||||
- Provide a ocaml_create_file_list macro
|
||||
- Optional extra args for dune commands
|
||||
- Pass --verbose to dune commands
|
||||
- Move prefix/man to datadir/man to workaround bug in dune (#2670)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 30 12:34:56 UTC 2019 - ohering@suse.de
|
||||
|
||||
- moved ocaml-rpm-macros from ocaml.spec to separate pkg
|
||||
|
545
ocaml-rpm-macros.spec
Normal file
545
ocaml-rpm-macros.spec
Normal file
@ -0,0 +1,545 @@
|
||||
#
|
||||
# spec file for package ocaml-rpm-macros
|
||||
#
|
||||
# Copyright (c) 2023 SUSE LLC
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
# upon. The license for this file, and modifications and additions to the
|
||||
# file, is the same license as for the pristine package itself (unless the
|
||||
# license for the pristine package is not an Open Source License, in which
|
||||
# case the license is the MIT License). An "Open Source License" is a
|
||||
# license that conforms to the Open Source Definition (Version 1.9)
|
||||
# published by the Open Source Initiative.
|
||||
|
||||
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
|
||||
Name: ocaml-rpm-macros
|
||||
Version: 20231101
|
||||
Release: 0
|
||||
Summary: RPM macros for building OCaml source packages
|
||||
License: GPL-2.0-only
|
||||
Group: Development/Languages/OCaml
|
||||
BuildRoot: %_tmppath/%name-%version-build
|
||||
ExclusiveArch: %arm aarch64 %ix86 ppc ppc64 ppc64le riscv64 s390x x86_64
|
||||
URL: https://build.opensuse.org/project/show/devel:languages:ocaml
|
||||
Source0: ocaml-ocaml.rpm.prov_req.attr.sh
|
||||
Source1: ocaml-findlib.rpm.prov_req.attr.sh
|
||||
|
||||
# Some rpm variants know about license, but can only use them in plain file context
|
||||
%bcond_without suse_ocaml_use_rpm_license_macro
|
||||
# Some rpm variants are unable to create proper debuginfo and/or debugsource packages
|
||||
%bcond_without suse_ocaml_opt_debug_package
|
||||
# Some rpm variants fail to build even this innocent package...
|
||||
%define debug_package %nil
|
||||
|
||||
%define ocaml_standard_library %_libdir/ocaml
|
||||
|
||||
%description
|
||||
OCaml is a high-level, strongly-typed, functional and object-oriented
|
||||
programming language from the ML family of languages.
|
||||
|
||||
This package contains a set of helper macros to unify common code used
|
||||
in ocaml spec files.
|
||||
|
||||
%prep
|
||||
|
||||
%build
|
||||
|
||||
%install
|
||||
> files.fileattrs
|
||||
if test -d '%_rpmconfigdir/fileattrs'
|
||||
then
|
||||
# Generating dependencies can currently only be done by rpm versions
|
||||
# which support "fileattrs", because it is easy to add new hooks.
|
||||
mkdir -vp %buildroot%_rpmconfigdir/fileattrs
|
||||
|
||||
# Map ocamlobjinfo output to rpm Provides/Requires
|
||||
# This tag name MUST match what ocaml.spec uses internally
|
||||
tag="suseocaml"
|
||||
file_attr="%_rpmconfigdir/fileattrs/${tag}.attr"
|
||||
file_sh="%_rpmconfigdir/${tag}.sh"
|
||||
attr_sh="%%_rpmconfigdir/${tag}.sh"
|
||||
tee %buildroot${file_sh} < %{SOURCE0}
|
||||
tee %buildroot${file_attr} <<_EOF_
|
||||
%%__${tag}_provides ${attr_sh} --provides
|
||||
%%__${tag}_requires ${attr_sh} --requires
|
||||
%%__${tag}_magic ^(Objective caml|OCaml) .*$
|
||||
%%__${tag}_path .(cma|cmi|cmo|cmx|cmxa)$
|
||||
%%__${tag}_flags magic_and_path
|
||||
_EOF_
|
||||
echo "${file_attr}" >> files.fileattrs
|
||||
echo "%%attr(755,root,root) ${file_sh}" >> files.fileattrs
|
||||
|
||||
# Map findlib names to rpm Provides/Requires
|
||||
tag="suseocamlfind"
|
||||
file_attr="%_rpmconfigdir/fileattrs/${tag}.attr"
|
||||
file_sh="%_rpmconfigdir/${tag}.sh"
|
||||
attr_sh="%%_rpmconfigdir/${tag}.sh"
|
||||
tee %buildroot${file_sh} < %{SOURCE1}
|
||||
tee %buildroot${file_attr} <<_EOF_
|
||||
%%__${tag}_provides ${attr_sh} -prov
|
||||
%%__${tag}_requires ${attr_sh} -req
|
||||
%%__${tag}_path ^%ocaml_standard_library/.*/META$|^%ocaml_standard_library/META$
|
||||
_EOF_
|
||||
echo "${file_attr}" >> files.fileattrs
|
||||
echo "%%attr(755,root,root) ${file_sh}" >> files.fileattrs
|
||||
fi
|
||||
#
|
||||
|
||||
# install OCaml macros
|
||||
mkdir -vp %buildroot%_rpmmacrodir
|
||||
tee %buildroot%_rpmmacrodir/macros.%name <<'_EOF_'
|
||||
# Guidelines:
|
||||
# - Providing applications written in OCaml is the main goal of our packaging.
|
||||
# - Applications written in OCaml are static binaries.
|
||||
# - A concept of shared libraries does not exist, beside the Dynlink module
|
||||
# - All binaries go into the main package, in case they are produced.
|
||||
# - All modules go into the -devel subpackage
|
||||
# - Helper applications below %ocaml_standard_library go into the -devel subpackage
|
||||
# - License files go into the main package.
|
||||
# - To aid debugging of cmxs files, their debuginfo is preserved by removing the executable bit.
|
||||
#
|
||||
# get rid of %_rpmconfigdir/find-debuginfo.sh
|
||||
# strip kills the bytecode part of ELF binaries
|
||||
#
|
||||
# provide empty _find_debuginfo_dwz_opts
|
||||
# the .dwz files contains identical contents, which leads to identical
|
||||
# checksums, which leads to file conflicts due to identical symlinks
|
||||
%%ocaml_standard_library %ocaml_standard_library
|
||||
%if %{without suse_ocaml_opt_debug_package}
|
||||
# Obviously, handling presence or absence of debug information works only when being built in a SUSE system.
|
||||
%endif
|
||||
%%ocaml_preserve_bytecode \
|
||||
%if %{without suse_ocaml_opt_debug_package}
|
||||
%%define debug_package %%nil \
|
||||
%%define __debug_install_post %%nil \
|
||||
%endif
|
||||
%%define _lto_cflags %%nil \
|
||||
%%nil
|
||||
%%_find_debuginfo_dwz_opts %%nil
|
||||
|
||||
# Compatibility for quilt setup and old packages
|
||||
%%ocaml_native_compiler 1
|
||||
%%suse_ocaml_native_compiler 1
|
||||
|
||||
# Create file list for base pkg and base-devel pkg
|
||||
# Files with known extensions or names are written to 'files' or 'files.devel'
|
||||
# Other unknown files are shown on stdout
|
||||
%%ocaml_create_file_list \
|
||||
> %%name.files ;\
|
||||
> %%name.files.changes ;\
|
||||
> %%name.files.devel ;\
|
||||
> %%name.files.ldsoconf ;\
|
||||
> %%name.files.license ;\
|
||||
> %%name.files.unhandled ;\
|
||||
for changes in \\\
|
||||
CHANGELOG.md \\\
|
||||
CHANGES \\\
|
||||
CHANGES.md \\\
|
||||
CHANGES.txt \\\
|
||||
ChangeLog \\\
|
||||
Changelog \\\
|
||||
;\
|
||||
do\
|
||||
test -f "${changes}" && echo "%%%%doc ${changes}" >> '%%name.files.changes' ;\
|
||||
done ;\
|
||||
for license in \\\
|
||||
COPYING \\\
|
||||
COPYING.txt \\\
|
||||
COPYRIGHT \\\
|
||||
COPYRIGHT.txt \\\
|
||||
Copyright \\\
|
||||
LGPL \\\
|
||||
LICENCE \\\
|
||||
LICENSE \\\
|
||||
LICENSE.md \\\
|
||||
LICENSE.txt \\\
|
||||
;\
|
||||
do\
|
||||
%if %{with suse_ocaml_use_rpm_license_macro}
|
||||
license_macro='license' ;\
|
||||
%else
|
||||
license_macro='doc' ;\
|
||||
%endif
|
||||
test -f "${license}" && echo "%%%%${license_macro} ${license}" >> '%%name.files.license' ;\
|
||||
done ;\
|
||||
if test -d %%buildroot%%ocaml_standard_library ;\
|
||||
then\
|
||||
find %%buildroot%%ocaml_standard_library -name '*.cmxs' -exec chmod -v a-x '{}' + ;\
|
||||
find %%buildroot%%ocaml_standard_library ! -type d | awk\\\
|
||||
-v "buildroot=%%buildroot"\\\
|
||||
-v "ocaml_standard_library=%%ocaml_standard_library"\\\
|
||||
-v "out_files_main=%%name.files"\\\
|
||||
-v "out_files_devel=%%name.files.devel"\\\
|
||||
-v "out_files_ldconf=%%name.files.ldsoconf"\\\
|
||||
-v "out_files_unhandled=%%name.files.unhandled"\\\
|
||||
-v "ocaml_ldconf=$(ls -1d %%ocaml_standard_library/ld.conf || : ld.conf not found)"\\\
|
||||
'\
|
||||
BEGIN {\
|
||||
nr=0\
|
||||
if (ocaml_ldconf != "") {\
|
||||
do {\
|
||||
r = getline < ocaml_ldconf\
|
||||
if (r > 0) {\
|
||||
ldconf[nr++]=$0\
|
||||
}\
|
||||
} while (r > 0)\
|
||||
}\
|
||||
}\
|
||||
function _split (line) {\
|
||||
file_path=substr(line, length(buildroot) + 1)\
|
||||
m=match(file_path, "/[^/]+$")\
|
||||
dirname=substr(file_path, 0, m - 1)\
|
||||
basename=substr(file_path, m + 1)\
|
||||
if (dirname == ocaml_standard_library) {\
|
||||
# do not package above standard_library\
|
||||
parent_dir=""\
|
||||
} else {\
|
||||
m=match(dirname, "/[^/]+$")\
|
||||
parent_dir=substr(dirname, 0, m - 1)\
|
||||
}\
|
||||
}\
|
||||
function files_ldconf(line) {\
|
||||
_split(line)\
|
||||
print file_path >> out_files_devel\
|
||||
print "%%dir " dirname >> out_files_devel\
|
||||
for (ldconf_dir in ldconf) {\
|
||||
if (dirname == ldconf[ldconf_dir]) {\
|
||||
# done with this cycle, ocaml ld.conf covers it\
|
||||
next\
|
||||
}\
|
||||
}\
|
||||
print dirname >> out_files_ldconf\
|
||||
next\
|
||||
}\
|
||||
function files_devel(line) {\
|
||||
_split(line)\
|
||||
print file_path >> out_files_devel\
|
||||
print "%%dir " dirname >> out_files_devel\
|
||||
if (parent_dir != "") {\
|
||||
print "%%dir " parent_dir >> out_files_devel\
|
||||
}\
|
||||
next\
|
||||
}\
|
||||
function files_main(line) {\
|
||||
_split(line)\
|
||||
print file_path >> out_files_main\
|
||||
print "%%dir " dirname >> out_files_main\
|
||||
if (parent_dir != "") {\
|
||||
print "%%dir " parent_dir >> out_files_main\
|
||||
}\
|
||||
next\
|
||||
}\
|
||||
function files_unhandled(line) {\
|
||||
_split(line)\
|
||||
print file_path >> out_files_unhandled\
|
||||
next\
|
||||
}\
|
||||
# for findlib, describing a package\
|
||||
/\\/META$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# stub ELF library\
|
||||
/\\/[^/]+\\.so$/{\
|
||||
files_ldconf($0)\
|
||||
}\
|
||||
# stub ELF library\
|
||||
/\\/[^/]+\\.so.owner$/{\
|
||||
files_ldconf($0)\
|
||||
}\
|
||||
# ELF archive with object files\
|
||||
/\\/[^/]+\\.a$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml legacy source code annotations, produced via -annot\
|
||||
/\\/[^/]+\\.annot$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml library file with bytecode\
|
||||
/\\/[^/]+\\.cma$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml compiled header file\
|
||||
/\\/[^/]+\\.cmi$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml object file with bytecode\
|
||||
/\\/[^/]+\\.cmo$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml source code annotations, produced via -bin-annot from source files\
|
||||
/\\/[^/]+\\.cmt$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml source code annotations, produced via -bin-annot from header files\
|
||||
/\\/[^/]+\\.cmti$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml object file with native code\
|
||||
/\\/[^/]+\\.cmx$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml library file with native code\
|
||||
/\\/[^/]+\\.cmxa$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# ELF shared library with native code\
|
||||
/\\/[^/]+\\.cmxs$/{\
|
||||
files_main($0)\
|
||||
}\
|
||||
# Some helper binary\
|
||||
/\\/[^/]+\\.exe$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# C header\
|
||||
/\\/[^/]+\\.h$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
#\
|
||||
/\\/[^/]+\\.js$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml source code, source file\
|
||||
/\\/[^/]+\\.ml$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# OCaml source code, header file\
|
||||
/\\/[^/]+\\.mli$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# ELF object file\
|
||||
/\\/[^/]+\\.o$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
#\
|
||||
/\\/[^/]+\\.sml$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# generated by dune\
|
||||
/\\/dune-package$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# generated by dune\
|
||||
/\\/opam$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
# Some Coq files\
|
||||
/\\/[^/]+\\.v$/{\
|
||||
files_devel($0)\
|
||||
}\
|
||||
#\
|
||||
# record unknown paths\
|
||||
files_unhandled($0)\
|
||||
END {\
|
||||
;\
|
||||
}' ;\
|
||||
fi ;\
|
||||
cat '%%name.files.changes' >> '%%name.files' ;\
|
||||
cat '%%name.files.license' >> '%%name.files' ;\
|
||||
if test -s %%name.files.ldsoconf ;\
|
||||
then\
|
||||
ldsoconfd='/etc/ld.so.conf.d' ;\
|
||||
mkdir -vp "%%buildroot${ldsoconfd}" ;\
|
||||
tee "%%buildroot${ldsoconfd}/%%name.conf" < %%name.files.ldsoconf ;\
|
||||
echo "%config ${ldsoconfd}/%%name.conf" >> %%name.files.devel ;\
|
||||
fi ;\
|
||||
for i in \\\
|
||||
%%name.files \\\
|
||||
%%name.files.devel \\\
|
||||
%%name.files.ldsoconf \\\
|
||||
%%name.files.unhandled \\\
|
||||
;\
|
||||
do\
|
||||
sort -u $i > $$ ;\
|
||||
mv $$ $i ;\
|
||||
done ;\
|
||||
%%nil
|
||||
|
||||
# setup.ml comes from oasis, but this is here for libs oasis depends on
|
||||
#
|
||||
# html goes into a separate, browsable dir
|
||||
# which is also safe regarding wiping due to %%doc macro usage
|
||||
%%_oasis_docdir_base %%_datadir/doc/ocaml
|
||||
%%_oasis_docdir_dvi %%_oasis_docdir_base/%%name
|
||||
%%_oasis_docdir_html %%_oasis_docdir_base/%%name
|
||||
%%_oasis_docdir_pdf %%_oasis_docdir_base/%%name
|
||||
%%_oasis_docdir_ps %%_oasis_docdir_base/%%name
|
||||
%%oasis_docdir %%_oasis_docdir_base/%%name
|
||||
#
|
||||
# For now provide a convinience macro which covers also the parent dir
|
||||
%%oasis_docdir_dvi %%dir %%_oasis_docdir_base \
|
||||
%%_oasis_docdir_dvi
|
||||
%%oasis_docdir_html %%dir %%_oasis_docdir_base \
|
||||
%%_oasis_docdir_html
|
||||
%%oasis_docdir_pdf %%dir %%_oasis_docdir_base \
|
||||
%%_oasis_docdir_pdf
|
||||
%%oasis_docdir_ps %%dir %%_oasis_docdir_base \
|
||||
%%_oasis_docdir_ps
|
||||
#
|
||||
# various macros to unify setup/build/install
|
||||
%%oasis_setup \
|
||||
oasis setup
|
||||
%%ocaml_oasis_configure \
|
||||
ocaml setup.ml -configure \\\
|
||||
--psdir %%_oasis_docdir_ps \\\
|
||||
--pdfdir %%_oasis_docdir_pdf \\\
|
||||
--dvidir %%_oasis_docdir_dvi \\\
|
||||
--htmldir %%_oasis_docdir_html \\\
|
||||
--docdir %%oasis_docdir \\\
|
||||
--localedir %%_datadir/locale \\\
|
||||
--datadir %%_datadir \\\
|
||||
\\\
|
||||
--bindir %%_bindir \\\
|
||||
--mandir %%_mandir \\\
|
||||
--destdir %%buildroot \\\
|
||||
--datarootdir %%_datadir \\\
|
||||
--infodir %%_infodir \\\
|
||||
--libdir %%_libdir \\\
|
||||
--libexecdir %%_libexecdir \\\
|
||||
--localstatedir %%_localstatedir \\\
|
||||
--sbindir %%_sbindir \\\
|
||||
--prefix %%_prefix \\\
|
||||
--sysconfdir %%_sysconfdir \\\
|
||||
--exec-prefix %%_prefix \\\
|
||||
--sharedstatedir %%_sharedstatedir
|
||||
#
|
||||
%%ocaml_oasis_build \
|
||||
ocaml setup.ml -build
|
||||
%%ocaml_oasis_doc \
|
||||
ocaml setup.ml -doc
|
||||
%%ocaml_oasis_install \
|
||||
ocaml setup.ml -install
|
||||
%%ocaml_oasis_findlib_install \
|
||||
export OCAMLFIND_DESTDIR=%%buildroot%%ocaml_standard_library ; \
|
||||
export OCAMLFIND_LDCONF=/dev/null ; \
|
||||
mkdir -p $OCAMLFIND_DESTDIR ; \
|
||||
ocaml setup.ml -install
|
||||
%%ocaml_oasis_test \
|
||||
ocaml setup.ml -test
|
||||
#
|
||||
%%ocaml_dune_setup \
|
||||
%ifarch ppc64 ppc64le riscv64
|
||||
ulimit -s $((1024 * 64)) ; \
|
||||
%endif
|
||||
%if 0
|
||||
# obviously this works just with a single entry in dune_release_pkgs=
|
||||
%endif
|
||||
if test -n "${dune_release_pkgs}" ; \
|
||||
then \
|
||||
test -f 'opam' && mv -v 'opam' "${dune_release_pkgs}.opam" ; \
|
||||
fi ; \
|
||||
echo '%%version' | tee VERSION ; \
|
||||
for opam in *.opam \
|
||||
do\
|
||||
test -f "${opam}" || continue ; \
|
||||
sed -i~ '\
|
||||
/^version:/d\
|
||||
' "${opam}" ; \
|
||||
diff -u "$_"~ "$_" || : got version ; \
|
||||
done ; \
|
||||
if test -f 'dune-project' ; \
|
||||
then \
|
||||
sed -i~ '\
|
||||
/^([[:blank:]]*version[[:blank:]]\\+/d\
|
||||
/^([[:blank:]]*lang[[:blank:]]\\+dune[[:blank:]]/a (version %%version)\
|
||||
' 'dune-project'; \
|
||||
diff -u "$_"~ "$_" || : got version ; \
|
||||
fi ; \
|
||||
dune_for_release= ; \
|
||||
: dune_release_pkgs \
|
||||
if test -n "${dune_release_pkgs}" ; \
|
||||
then \
|
||||
echo "${dune_release_pkgs}" > dune_release_pkgs-%%name-%%version-%%release ; \
|
||||
dune_for_release="--for-release-of-packages=${dune_release_pkgs}" ; \
|
||||
fi ; \
|
||||
%%nil
|
||||
%%ocaml_dune_build \
|
||||
dune --version ; \
|
||||
dune installed-libraries $OCAML_DUNE_INSTALLED_LIBRARIES_ARGS ; \
|
||||
if test -z "${_smp_mflags}" ;\
|
||||
then \
|
||||
_smp_mflags="%%{?_smp_mflags}" ;\
|
||||
case "$(ocamlc --version)" in \\\
|
||||
4.08*) _smp_mflags='-j1' ;;\\\
|
||||
4.09*) _smp_mflags='-j1' ;;\\\
|
||||
4.10*) _smp_mflags='-j1' ;;\\\
|
||||
esac ;\
|
||||
fi ;\
|
||||
dune build \\\
|
||||
--verbose \\\
|
||||
${dune_for_release} \\\
|
||||
${_smp_mflags} \\\
|
||||
'@install' \\\
|
||||
$OCAML_DUNE_BUILD_INSTALL_ARGS
|
||||
%%ocaml_dune_install \
|
||||
%ifarch ppc64 ppc64le riscv64
|
||||
ulimit -s $((1024 * 64)) ; \
|
||||
%endif
|
||||
if test -z "${_smp_mflags}" ;\
|
||||
then \
|
||||
_smp_mflags="%%{?_smp_mflags}" ;\
|
||||
case "$(ocamlc --version)" in \\\
|
||||
4.08*) _smp_mflags='-j1' ;;\\\
|
||||
4.09*) _smp_mflags='-j1' ;;\\\
|
||||
4.10*) _smp_mflags='-j1' ;;\\\
|
||||
esac ;\
|
||||
fi ;\
|
||||
dune_for_release= ;\
|
||||
if test -f dune_release_pkgs-%%name-%%version-%%release ; \
|
||||
then \
|
||||
read dune_release_pkgs < dune_release_pkgs-%%name-%%version-%%release ; \
|
||||
dune_for_release="--for-release-of-packages=${dune_release_pkgs}" ; \
|
||||
fi ;\
|
||||
dune install \\\
|
||||
--verbose \\\
|
||||
${dune_for_release} \\\
|
||||
${_smp_mflags} \\\
|
||||
--prefix=%%_prefix \\\
|
||||
--libdir=%%ocaml_standard_library \\\
|
||||
--destdir=%%buildroot \\\
|
||||
${dune_release_pkgs//,/ } \\\
|
||||
$OCAML_DUNE_INSTALL_ARGS ;\
|
||||
rm -rfv %%buildroot%%_prefix/doc ;\
|
||||
if test -d %%buildroot%%_prefix/man ; then \
|
||||
mkdir -vp %%buildroot%%_datadir ; \
|
||||
mv -vt %%buildroot%%_datadir %%buildroot%%_prefix/man ; \
|
||||
fi ;
|
||||
%%ocaml_dune_test \
|
||||
%ifarch ppc64 ppc64le
|
||||
ulimit -s $((1024 * 64)) ; \
|
||||
%endif
|
||||
dune_for_release= ; \
|
||||
if test -f dune_release_pkgs-%%name-%%version-%%release ; \
|
||||
then \
|
||||
read dune_release_pkgs < dune_release_pkgs-%%name-%%version-%%release ; \
|
||||
dune_for_release="--for-release-of-packages=${dune_release_pkgs}" ; \
|
||||
fi ; \
|
||||
if dune runtest \\\
|
||||
--verbose \\\
|
||||
${dune_for_release} \\\
|
||||
$OCAML_DUNE_RUNTEST_ARGS ; \
|
||||
then \
|
||||
echo "dune runtest succeeded" ; \
|
||||
else \
|
||||
echo "dune runtest failed" ; \
|
||||
if test -n "${dune_test_tolerate_fail}" ; \
|
||||
then \
|
||||
echo "ignored" ; \
|
||||
else \
|
||||
echo "aborting" ; \
|
||||
exit 1 ; \
|
||||
fi ; \
|
||||
fi
|
||||
|
||||
#
|
||||
#
|
||||
_EOF_
|
||||
|
||||
%files -f files.fileattrs
|
||||
%defattr(-,root,root,-)
|
||||
%_rpmmacrodir/*
|
||||
|
||||
%changelog
|
Loading…
Reference in New Issue
Block a user