|
root / base / motif
motif Plain Text 111 lines 4.9 KB
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
#!/bin/sh
# Build script for motif / OpenMotif 2.3.8 (autotools, Template A).
# Older codebase - config.sub/libtool/__EXTENSIONS__ gotchas expected.
# CORRECTION (2026-07-23): motif's own configure.ac only references its
# in-tree bitmaps/Makefile, but lib/Xm/I18List.c has a *hardcoded*
# `#include <X11/bitmaps/gray>` - a real X.Org bitmap from the standalone
# xbitmaps package, NOT one of motif's own bitmaps/. Needs base/xbitmaps
# built+installed to $PREFIX/include first (see zports base/xbitmaps).
set -e

# Resolve the port dir (holds patches/) BEFORE cd'ing into the extracted source.
PORTDIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)

cd "$SRCDIR"

# MANDATORY libtool fix - see Template A (confirmed 4 kopensolaris hits
# in this configure).
if [ -f configure ]; then
    sed -i -E 's/(kopensolaris\*-gnu)([^)]*\))/\1 | hammerhead*\2/' configure
fi

# GOTCHA: lib/Xm/Xmfuncs.h #defines bcopy/bzero/bcmp as function-like
# macros (for pre-ANSI systems) BEFORE illumos's X11/Xos.h later does its
# own (normally-safe, guarded) `#include <strings.h>`. Since strings.h
# hasn't been seen yet at that point, its `extern int bcmp(const void *,
# ...)` etc. prototypes get macro-substituted into invalid syntax
# ("expected declaration specifiers ... before '(' token"). Fixed by
# patching Xmfuncs.h to pull in <strings.h> itself before defining the
# macros, so strings.h's own include guard makes Xos.h's later include a
# no-op. See patches/0001-xmfuncs-strings-h-macro-mangling.patch.
for p in "$PORTDIR"/patches/*.patch; do
    [ -f "$p" ] || continue
    echo "==> Applying patch: $(basename "$p")"
    patch -p1 < "$p"
done

# GOTCHA: ResEncod.c casts its iconv() 2nd arg to (char **) - matching
# illumos's non-POSIX-conformant iconv(3C) prototype, which /usr/include/
# iconv.h only exposes when _XPG6 is defined (otherwise it exposes the
# `const char **` prototype instead, and the explicit (char **) cast in the
# old motif source becomes an incompatible-pointer-type error under GCC 14's
# now-stricter default). Define _XPG6 to select the signature the existing
# cast already expects, rather than patching upstream source.
export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PREFIX/share/pkgconfig:/usr/lib/pkgconfig:$PKG_CONFIG_PATH"
export CFLAGS="${CFLAGS} -I$PREFIX/include -D__EXTENSIONS__ -D_POSIX_PTHREAD_SEMANTICS -D_XPG6 -fpermissive -fcommon"
export LDFLAGS="${LDFLAGS} -L$PREFIX/lib -R$PREFIX/lib"

# GOTCHA: ac_find_xft.m4's Xrender probe does
# `XRENDER_LIBS="-L$x_libraries -lXft -lXrender"` unconditionally once
# $have_x=yes, with NO fallback if $x_libraries came back empty (which it
# does here since AC_PATH_XTRA never needed to search - X11 is already on
# the default $PREFIX/lib path) - producing a malformed literal "-L -lXft"
# that trips libtool ("require no space between '-L' and '-lXft'").
# Force --x-libraries/--x-includes explicitly so $x_libraries is non-empty.
./configure \
    --prefix="$PREFIX" \
    --build="$BUILD_TRIPLE" \
    --host="$BUILD_TRIPLE" \
    --sysconfdir="$SYSCONFDIR" \
    --disable-static \
    --enable-xft \
    --disable-printing \
    --x-includes="$PREFIX/include" \
    --x-libraries="$PREFIX/lib"

gmake -j${JOBS:-1}
gmake install DESTDIR="$PKGDIR"
# motif (OpenMotif) - X11 widget toolkit, backs the XNEdit editor
# https://sourceforge.net/projects/motif/

[package]
name = "motif"
version = "2.3.8"
release = 1
description = "OpenMotif X11 widget toolkit"
url = "https://sourceforge.net/projects/motif/"
license = "LGPL-2.1-or-later"
maintainer = "Chris Tusa <chris.tusa@leafscale.com>"
arch = "x86_64"

[dependencies]
runtime = ["libX11", "libXext", "libXt", "libXft", "libXpm", "freetype"]
build = ["libX11", "libXext", "libXt", "libXft", "libXpm", "freetype", "xbitmaps"]

[[source]]
file = "motif-2.3.8.tar.gz"
urls = ["https://downloads.sourceforge.net/project/motif/Motif%202.3.8%20Source%20Code/motif-2.3.8.tar.gz"]
checksum = "859b723666eeac7df018209d66045c9853b50b4218cecadb794e2359619ebce7"

[build]
parallel = true
--- a/lib/Xm/Xmfuncs.h
+++ b/lib/Xm/Xmfuncs.h
@@ -41,6 +41,16 @@
 #else
 #if (__STDC__ && !defined(X_NOT_STDC_ENV) && !defined(sun) && !defined(macII) && !defined(apollo)) || defined(SVR4) || defined(hpux) || defined(_IBMR2) || defined(_SEQUENT_)
 #include <string.h>
+/* HAMMERHEAD: pull in <strings.h> here, BEFORE bcopy/bzero/bcmp become
+ * function-like macros below. Otherwise X11/Xos.h's later (guarded, so
+ * normally a no-op) `#include <strings.h>` is the FIRST time these
+ * prototypes are seen, and the macro substitution mangles the illumos
+ * `extern int bcmp(const void *, const void *, size_t);` declarations
+ * into invalid syntax ("expected declaration specifiers ... before '('
+ * token"). Pre-including here means strings.h's own guard (_STRINGS_H)
+ * makes X11/Xos.h's later include a safe no-op.
+ */
+#include <strings.h>
 #define _XFUNCS_H_INCLUDED_STRING_H
 #define bcopy(b1,b2,len) memmove(b2, b1, (size_t)(len))
 #define bzero(b,len) memset(b, 0, (size_t)(len))