I've sworn to never ever use CMake, nor to allow it to exist on my
machines, nor even to be used in my presence.
However I really like ctwm, and in fact I use every day on my main
desktop machine which is a macOS box, and since I'm now also using
pkgsrc to build everything on macOS just like I do on NetBSD, and since
the "minibuild" stuff that comes with the new ctwm release is garbage
(and because I also really like BSD Makefiles), I've written the
following.
In case anyone is interested.
First the following Makefile replaces wm/ctwm/Makefile, then below is a
new Makefile to be put into wm/ctwm/files/Makefile:
Probably the second file could also mostly be used to allow an update of
the version of CTWM in /usr/src/etxternal/mit/ctwm/bin/ctwm/Makefile too.
================
# $NetBSD: Makefile,v 1.39 2019/11/04 21:50:15 rillig Exp $
#
DISTNAME= ctwm-4.0.3
CATEGORIES= x11 wm
MASTER_SITES= http://ctwm.org/dist/
EXTRACT_SUFX= .tar.xz
MAINTAINER= rhialto%NetBSD.org@localhost
HOMEPAGE= http://ctwm.org/
COMMENT= Window manager with support for multiple virtual screens and EWMH
LICENSE= mit
USE_LANGUAGES= c
USE_BSD_MAKEFILE= yes
BSD_MAKE_BUILD_DIR= ${WRKDIR}/pkgbuild
MAKE_ENV+= MAKEOBJDIRPREFIX=${BSD_MAKE_BUILD_DIR}
DEPENDS+= asciidoc-[0-9]*:../../textproc/asciidoc
DEPENDS+= xmlto-[0-9]*:../../textproc/xmlto
.include "../../mk/bsd.prefs.mk"
# We need an m4 that understands the -s option.
.if !empty(TOOLS_PLATFORM.m4)
. if !empty(:!${ECHO} yes | ${TOOLS_PLATFORM.m4} -s 2>/dev/null||${ECHO}!)
TOOLS_PLATFORM.gm4?= ${TOOLS_PLATFORM.m4}
. endif
.endif
USE_TOOLS+= gm4:run
MAKE_FLAGS+= M4=${TOOLS_PLATFORM.gm4}
CFLAGS.SunOS+= -D__EXTENSIONS__
AUTO_MKDIRS= yes
# totally automatic PLIST generation -- probably preferable?
#
#GENERATE_PLIST= cd ${DESTDIR}${PREFIX}; \
# ${FIND} * \( -type f -or -type l \) | ${SORT};
#
GENERATE_PLIST+= cd ${DESTDIR}${PREFIX} && \
${FIND} share/ctwm/images \( -type f -or -type l \) | ${SORT};
post-extract:
${CP} ${FILESDIR}/Makefile ${WRKSRC}/
do-configure:
${MKDIR} ${BSD_MAKE_BUILD_DIR}
# xxx this should be automatic in do-build if USE_BSD_MAKEFILE!
#
# xxx otherwise this would be nice, but .WAIT doesn't work on the command line
#
#BUILD_TARGET= obj .WAIT all
#
pre-build:
cd ${WRKSRC} && ${BUILD_MAKE_CMD} obj
post-install:
.for f in CHANGES.md README.md
${INSTALL_DATA} ${WRKSRC}/${f} ${DESTDIR}${PREFIX}/share/doc/ctwm/
.endfor
.for f in system.ctwmrc
${INSTALL_DATA} ${WRKSRC}/${f} ${DESTDIR}${PREFIX}/share/examples/ctwm/
.endfor
.for f in example.ctwmrc levitte.ctwmrc peterc.ctwmrc
${INSTALL_DATA} ${WRKSRC}/examples/${f} \
${DESTDIR}${PREFIX}/share/examples/ctwm/
.endfor
${INSTALL_DATA} ${FILESDIR}/ctwm.desktop \
${DESTDIR}${PREFIX}/share/xsessions/ctwm.desktop
.include "../../mk/jpeg.buildlink3.mk"
.include "../../x11/libXext/buildlink3.mk"
.include "../../x11/libXmu/buildlink3.mk"
.include "../../x11/libXpm/buildlink3.mk"
.include "../../mk/bsd.pkg.mk"
================
================
# $NetBSD$
.include <bsd.own.mk>
PROG= ctwm
SRCS+= add_window.c
SRCS+= animate.c
SRCS+= captive.c
SRCS+= clargs.c
SRCS+= clicktofocus.c
SRCS+= colormaps.c
SRCS+= ctopts.c
SRCS+= ctwm_main.c
#SRCS+= ctwm_shutdown.c # xxx next release?
#SRCS+= ctwm_takeover.c # xxx next release?
SRCS+= ctwm_wrap.c
SRCS+= cursor.c
SRCS+= drawing.c
SRCS+= event_core.c
SRCS+= event_handlers.c
SRCS+= event_names.c
SRCS+= event_utils.c
SRCS+= ewmh.c
SRCS+= ewmh_atoms.c
SRCS+= functions.c
SRCS+= functions_captive.c
SRCS+= functions_icmgr_wsmgr.c
SRCS+= functions_identify.c
SRCS+= functions_misc.c
SRCS+= functions_warp.c
SRCS+= functions_win.c
SRCS+= functions_win_moveresize.c
SRCS+= functions_workspaces.c
SRCS+= gc.c
SRCS+= iconmgr.c
SRCS+= icons.c
SRCS+= icons_builtin.c
SRCS+= image.c
SRCS+= image_bitmap.c
SRCS+= image_bitmap_builtin.c
SRCS+= image_jpeg.c
SRCS+= image_xpm.c
SRCS+= image_xwd.c
SRCS+= list.c
SRCS+= mask_screen.c
SRCS+= menus.c
SRCS+= mwmhints.c
SRCS+= occupation.c
SRCS+= otp.c
SRCS+= parse.c
SRCS+= parse_be.c
SRCS+= parse_m4.c
SRCS+= parse_yacc.c
#SRCS+= r_area.c # xxx next release?
#SRCS+= r_area_list.c # xxx next release?
#SRCS+= r_layout.c # xxx next release?
SRCS+= session.c
#SRCS+= signals.c # xxx next release?
SRCS+= util.c
SRCS+= vscreen.c
SRCS+= win_decorations.c
SRCS+= win_decorations_init.c
SRCS+= win_iconify.c
SRCS+= win_ops.c
SRCS+= win_regions.c
SRCS+= win_resize.c
#SRCS+= win_ring.c # xxx next release?
SRCS+= win_utils.c
SRCS+= windowbox.c
SRCS+= workspace_config.c
SRCS+= workspace_manager.c
SRCS+= workspace_utils.c
#SRCS+= xparsegeometry.c # xxx next release?
#SRCS+= xrandr.c # xxx next release?
# special sources
SRCS+= gram.y
SRCS+= lex.l
# External libs (note these are in ext/$>.c)
#
SRCS+= repl_str.c
# Generated files
#
SRCS+= ctwm_atoms.c
SRCS+= deftwmrc.c
SRCS+= version.c
PREFIX?= /usr
XPMDIR= ${PREFIX}/share/ctwm/images
# xxx mimic pkgsrc to support systems without <bsd.x11.mk> (which currently
# include non-NetBSD pkgsrc platforms using bootstrap-mk-files!)
#
PKG_SYSCONFSUBDIR?= X11/ctwm
PKG_SYSCONFBASEDIR?= /etc
PKG_SYSCONFDIR?= ${PKG_SYSCONFBASEDIR}/${PKG_SYSCONFSUBDIR}
X11ETCDIR?= ${PKG_SYSCONFBASEDIR}/X11
CTWMCONFIGDIR= ${X11ETCDIR}/ctwm
# xxx CONFIGFILES is not (yet) supported by pkgsrc bootstrap-mk-files
# (note CONFIGFILES still uses ${FILESDIR_${F}:U${FILESDIR}} for dest)
#
FILES+= system.ctwmrc
FILESDIR_system.ctwmrc= ${CTWMCONFIGDIR}
.if empty(CPPFLAGS:M*-I.*)
CPPFLAGS+= -I.
.endif
CPPFLAGS+= -I${.CURDIR} -I${.CURDIR}/ext
CPPFLAGS+= -DPIXMAP_DIRECTORY=\"${XPMDIR}\"
CPPFLAGS+= -DSYSTEM_INIT_FILE=\"${CTWMCONFIGDIR}/system.ctwmrc\"
CPPFLAGS+= -DEWMH
CPPFLAGS+= -DJPEG
CPPFLAGS+= -DUSE_SYS_REGEX
CPPFLAGS+= -DXPM
#CPPFLAGS+= -DXRANDR # xxx next release?
CPPFLAGS+= -DUSEM4
CPPFLAGS+= -DM4CMD=\"${M4:Um4}\"
# NetBSD make has a wee hack which allows one to include a sub-directory
# pathname part in the source file given in SRCS and have the object file be
# created in that same subdir. However this is not portable and so to avoid
# complication we'll just copy the source from its subdir and build from that.
#
repl_str.c: ${.CURDIR}/ext/repl_str.c
cp ${.CURDIR}/ext/repl_str.c $@
YHEADER=1
# xxx this is stupid, but avoids patching a bunch of files with:
#
# s/gram.tab.h/gram.h/
#
gram.tab.h: Makefile
ln -fs gram.h $@
ydeps+= add_window.o
ydeps+= ctwm_main.o
ydeps+= drawing.o
ydeps+= event_handlers.o
ydeps+= gc.o
ydeps+= iconmgr.o
ydeps+= mask_screen.o
ydeps+= menus.o
ydeps+= parse_be.o
ydeps+= parse_yacc.o
ydeps+= util.o
ydeps+= win_decorations.o
ydeps+= workspace_manager.o
${ydeps}: gram.tab.h
# xxx this is also stupid, but avoids patching a bunch of files to remove it
#
ctwm_config.h: Makefile
rm -f ctwm_config.h
touch ctwm_config.h
${SRCS:R:S/$/.o/g}: ctwm_config.h
ctwm_atoms.c: ctwm_atoms.in # tools/mk_atoms.sh
${SHELL} ${.CURDIR}/tools/mk_atoms.sh ${.CURDIR}/ctwm_atoms.in ctwm_atoms CTWM
ctwm_atoms.h: ctwm_atoms.c
add_window.o: ctwm_atoms.h
animate.o: ctwm_atoms.h
captive.o: ctwm_atoms.h
ctwm_main.o: ctwm_atoms.h
event_handlers.o: ctwm_atoms.h
ewmh.o: ctwm_atoms.h
functions_win.o: ctwm_atoms.h
mwmhints.o: ctwm_atoms.h
occupation.o: ctwm_atoms.h
otp.o: ctwm_atoms.h
parse.o: ctwm_atoms.h
parse_be.o: ctwm_atoms.h
session.o: ctwm_atoms.h
vscreen.o: ctwm_atoms.h
win_utils.o: ctwm_atoms.h
workspace_manager.o: ctwm_atoms.h
workspace_utils.o: ctwm_atoms.h
ewmh_atoms.c: ewmh_atoms.in # tools/mk_atoms.sh
${SHELL} ${.CURDIR}/tools/mk_atoms.sh ${.CURDIR}/ewmh_atoms.in ewmh_atoms EWMH
ewmh_atoms.h: ewmh_atoms.c
add_window.o: ewmh_atoms.h
ewmh.o: ewmh_atoms.h
win_utils.o: ewmh_atoms.h
workspace_utils.o: ewmh_atoms.h
deftwmrc.c: system.ctwmrc # tools/mk_deftwmrc.sh
${SHELL} ${.CURDIR}/tools/mk_deftwmrc.sh ${.CURDIR}/system.ctwmrc > deftwmrc.c
event_names_table.h: event_names.list # tools/mk_event_names.sh
${SHELL} ${.CURDIR}/tools/mk_event_names.sh ${.CURDIR}/event_names.list > $@
event_names.o: event_names_table.h
functions_defs.h: functions_defs.list # tools/mk_function_bits.sh
${SHELL} ${.CURDIR}/tools/mk_function_bits.sh ${.CURDIR}/functions_defs.list ${.OBJDIR}
functions_deferral.h functions_parse_table.h functions_dispatch_execution.h: functions_defs.h
event_handlers.o: functions_defs.h
ewmh.o: functions_defs.h
functions.o: functions_defs.h
functions.o: functions_deferral.h
functions_misc.o: functions_defs.h
functions_win.o: functions_defs.h
functions_win_moveresize.o: functions_defs.h
gram.o: functions_defs.h
iconmgr.o: functions_defs.h
lex.o: functions_defs.h
menus.o: functions_defs.h
parse_be.o: functions_defs.h
parse_yacc.o: functions_defs.h
win_decorations_init.o: functions_defs.h
win_resize.o: functions_defs.h
functions.o: functions_deferral.h
functions.o: functions_dispatch_execution.h
functions.o: functions_internal.h
functions_captive.o: functions_internal.h
functions_icmgr_wsmgr.o: functions_internal.h
functions_identify.o: functions_internal.h
functions_misc.o: functions_internal.h
functions_warp.o: functions_internal.h
functions_win.o: functions_internal.h
functions_win_moveresize.o: functions_internal.h
functions_workspaces.o: functions_internal.h
parse_be.o: functions_parse_table.h
# assume this is building a release with a pre-generated version.c.in
#
version.c: version.c.in VERSION # tools/mk_version_in.sh
${SHELL} ${.CURDIR}/tools/mk_version_in.sh ${.CURDIR}/version.c.in | \
sed -e 's/%%VCSTYPE%%/NULL/' \
-e 's/%%REVISION%%/NULL/' > $@
LDADD+= -ljpeg
DPADD+= ${LIBJPEG}
LDADD+= -lXpm -lXmu -lXt -lSM -lICE -lXext -lX11 -lxcb -lXau -lXdmcp
DPADD+= ${LIBXPM} ${LIBXMU} ${LIBXT} ${LIBSM} ${LIBICE} ${LIBXEXT} ${LIBX11} ${LIBXCB} ${LIBXAU} ${LIBXDMCP}
FILESDIR= ${XPMDIR}
#xxx# FILES!= cd ${.CURDIR}/xpm && echo *.xpm
FILES+= 3D_Expand15.xpm
FILES+= 3D_Iconify15.xpm
FILES+= 3D_Lightning15.xpm
FILES+= 3D_Menu15.xpm
FILES+= 3D_Resize15.xpm
FILES+= 3D_Zoom15.xpm
FILES+= 3dcircle.xpm
FILES+= 3ddimple.xpm
FILES+= 3ddot.xpm
FILES+= 3dfeet.xpm
FILES+= 3dleopard.xpm
FILES+= 3dpie.xpm
FILES+= 3dpyramid.xpm
FILES+= 3dslant.xpm
FILES+= IslandD.xpm
FILES+= IslandW.xpm
FILES+= LRom.xpm
FILES+= LRom1.xpm
FILES+= arthur.xpm
FILES+= audio_editor.xpm
FILES+= background1.xpm
FILES+= background2.xpm
FILES+= background3.xpm
FILES+= background4.xpm
FILES+= background5.xpm
FILES+= background6.xpm
FILES+= background7.xpm
FILES+= background8.xpm
FILES+= background9.xpm
FILES+= ball1.xpm
FILES+= ball10.xpm
FILES+= ball11.xpm
FILES+= ball12.xpm
FILES+= ball2.xpm
FILES+= ball3.xpm
FILES+= ball4.xpm
FILES+= ball5.xpm
FILES+= ball6.xpm
FILES+= ball7.xpm
FILES+= ball8.xpm
FILES+= ball9.xpm
FILES+= cdrom1.xpm
FILES+= claude.xpm
FILES+= clipboard.xpm
FILES+= datebook.xpm
FILES+= emacs.xpm
FILES+= ghostview.xpm
FILES+= hpterm.xpm
FILES+= mail0.xpm
FILES+= mail1.xpm
FILES+= nothing.xpm
FILES+= nt1.xpm
FILES+= nt2.xpm
FILES+= pixmap.xpm
FILES+= postit.xpm
FILES+= skull.xpm
FILES+= spider.xpm
FILES+= supman1.xbm
FILES+= supman2.xbm
FILES+= supman3.xbm
FILES+= supman4.xbm
FILES+= supman5.xbm
FILES+= supman6.xbm
FILES+= supman7.xbm
FILES+= supman8.xbm
FILES+= supman9.xbm
FILES+= term.xpm
FILES+= unknown.xpm
FILES+= unknown1.xpm
FILES+= unread.xpm
FILES+= welcome.xpm
FILES+= welcome.xwd
FILES+= xarchie.xpm
FILES+= xcalc.xpm
FILES+= xcalc2.xpm
FILES+= xedit.xpm
FILES+= xftp.xpm
FILES+= xgopher.xpm
FILES+= xgrab.xpm
FILES+= xhpcalc.xpm
FILES+= xirc.xpm
FILES+= xmail.xpm
FILES+= xman.xpm
FILES+= xmosaic.xpm
FILES+= xnomail.xpm
FILES+= xrn-compose.xpm
FILES+= xrn.goodnews.xpm
FILES+= xrn.nonews.xpm
FILES+= xrn.xpm
FILES+= xterm.xpm
.PATH: ${.CURDIR}/xpm
ctwm.1: ctwm.1.docbook
xmlto --skip-validation man ctwm.1.docbook
CTWM_VERSION!= cat ${.CURDIR}/VERSION
ctwm.1.docbook: doc/manual/ctwm.1.adoc VERSION # tools/mk_version_in.sh
sed -e 's|@ETCDIR@|${CTWMCONFIGDIR}|' \
-e 's|@ctwm_version_str@|${CTWM_VERSION}|' \
< ${.CURDIR}/doc/manual/ctwm.1.adoc | \
asciidoc -d manpage -b docbook -o $@ -
.include <bsd.files.mk>
.-include <bsd.x11.mk>
.include <bsd.prog.mk>
================
--
Greg A. Woods <gwoods%acm.org@localhost>
Kelowna, BC +1 250 762-7675 RoboHack <woods%robohack.ca@localhost>
Planix, Inc. <woods%planix.com@localhost> Avoncote Farms <woods%avoncote.ca@localhost>
Attachment:
pgp0RcunFEGpN.pgp
Description: OpenPGP Digital Signature