Files
2026-07-01 16:33:16 +10:00

198 lines
8.1 KiB
Makefile

TCL_SUBDIR= @VENDOR_TCL_SUBDIR@
TCLX_SUBDIR= @VENDOR_TCLX_SUBDIR@
TCLLIB_SUBDIR= @VENDOR_TCLLIB_SUBDIR@
CRITCL_SUBDIR= critcl
SIGNIFY_SUBDIR= signify-osx
INSTALL_SUBDIR= install
DESTROOT= @abs_top_builddir@/@VENDOR_DESTROOT@
TCL_PREFIX= @TCL_PREFIX@
INSTALL= @INSTALL@
TCL_INSTALL_D_ARG= INSTALL_DATA_DIR="@abs_top_builddir@/vendor/tcl/unix/install-sh -d -m 755"
.PHONY: all clean distclean install destroot test
.PHONY: destroot-tcl destroot-critcl destroot-tclx destroot-tcllib destroot-tcllibc destroot-signify destroot-install
.PHONY: install-tcl install-tclx install-tcllib install-tcllibc install-signify install-install
.PHONY: %-tcl %-tclx %-tcllib %-signify %-install
# for make all, run destroot (where destroot will depend on all of each
# subpackage)
all: destroot
%-tcl:
@echo ===\> making $(@:%-tcl=%) in ${DIRPRFX}@VENDOR_TCL_SUBDIR@
@umask 0022; "$(MAKE)" -C "@VENDOR_TCL_SUBDIR@" $(@:%-tcl=%)
%-tclx:
@echo ===\> making $(@:%-tclx=%) in ${DIRPRFX}@VENDOR_TCLX_SUBDIR@
@umask 0022; "$(MAKE)" -C "@VENDOR_TCLX_SUBDIR@" $(@:%-tclx=%)
# tclx also links against libtclstub
all-tclx: all-tcl
%-tcllib:
@echo ===\> making $(@:%-tcllib=%) in ${DIRPRFX}@VENDOR_TCLLIB_SUBDIR@
@umask 0022; "$(MAKE)" -C "@VENDOR_TCLLIB_SUBDIR@" TCLSH_PROG="@INTREE_TCLSH@" $(@:%-tcllib=%)
%-signify:
@echo ===\> making $(@:%-signify=%) in ${DIRPRFX}${SIGNIFY_SUBDIR}
@umask 0022; "$(MAKE)" -C "${SIGNIFY_SUBDIR}" $(@:%-signify=%)
%-install:
@echo ===\> making $(@:%-install=%) in ${DIRPRFX}${INSTALL_SUBDIR}
@umask 0022; "$(MAKE)" -C "${INSTALL_SUBDIR}" $(@:%-install=%)
DESTROOT_TARGETS= destroot-tcl destroot-tclx destroot-tcllib destroot-tcllibc
CLEAN_TARGETS= clean-tcl clean-tcllib clean-tclx clean-signify
DISTCLEAN_TARGETS= distclean-tcl distclean-tcllib distclean-tclx distclean-signify
CODESIGN_TARGETS= signify-osx/signify tcl/unix/libtcl[89]*.dylib tcl/unix/tclsh tclx/libtclx[89]*.dylib tcl/unix/pkgs/itcl*/libitcl*.dylib tcl/unix/pkgs/tdbc[0-9]*/libtdbc*.dylib tcl/unix/pkgs/tdbcpostgres*/libtdbcpostgres*.dylib tcl/unix/pkgs/thread*/libthread*.dylib tcl/unix/pkgs/tdbcmysql*/libtdbcmysql*.dylib tcl/unix/pkgs/tdbcodbc*/libtdbcodbc*.dylib tcl/unix/pkgs/sqlite3*/libsqlite3*.dylib $(DESTROOT)$(TCL_PREFIX)/lib/tcllibc*/macosx-macports/tcllibc.dylib
ifneq (@OS_PLATFORM@,linux)
DESTROOT_TARGETS+= destroot-signify
endif
ifeq (@HAVE_CLONEFILE@,yes)
ifeq (@HAVE_DECL_CLONE_NOOWNERCOPY@,yes)
DESTROOT_TARGETS+= destroot-install
CLEAN_TARGETS+= clean-install
DISTCLEAN_TARGETS+= distclean-install
CODESIGN_TARGETS+= install/build/install
TCL_INSTALL_D_ARG=
all-tcl: all-install
all-tclx: all-install
destroot-signify: all-install
endif
endif
ifeq (@OS_PLATFORM@,darwin)
CRITCL_TARGET= -target macosx-macports
endif
destroot: $(DESTROOT_TARGETS)
destroot-tcl: all-tcl
@echo ===\> staging to destroot in ${DIRPRFX}@VENDOR_TCL_SUBDIR@
@umask 0022; "$(MAKE)" -C "@VENDOR_TCL_SUBDIR@" "DESTDIR=$(DESTROOT)" "INSTALL=$(INSTALL)" $(TCL_INSTALL_D_ARG) @VENDOR_TCL_INSTALL@
[ "@OS_PLATFORM@" != darwin ] || install_name_tool -change "$(TCL_PREFIX)/lib/libtcl@TCL_VERSION@.dylib" \
"@executable_path/../lib/libtcl@TCL_VERSION@.dylib" \
"$(DESTROOT)$(TCL_PREFIX)/bin/tclsh@TCL_VERSION@"
destroot-tclx: all-tclx
@echo ===\> staging to destroot in ${DIRPRFX}@VENDOR_TCLX_SUBDIR@
@umask 0022; "$(MAKE)" -C "@VENDOR_TCLX_SUBDIR@" "DESTDIR=${DESTROOT}" @VENDOR_TCLX_INSTALL@
# tcllib requires a working tclsh
destroot-tcllib: destroot-tcl
@echo ===\> staging to destroot in ${DIRPRFX}@VENDOR_TCLLIB_SUBDIR@
@umask 0022; "$(MAKE)" -C "@VENDOR_TCLLIB_SUBDIR@" "DESTDIR=${DESTROOT}" TCLSH_PROG="@INTREE_TCLSH@" @VENDOR_TCLLIB_INSTALL@
@chmod -R ugo+rX $(DESTROOT)$(TCL_PREFIX)/lib/tcllib*
# The unusual values for --prefix and --dest-dir are because critcl's
# build system internally normalizes the prefix, which means the
# directory structure in the destroot would be different and prevent us
# from finding its files in other steps unless we also normalized,
# which is difficult on older macOS versions.
.stamp-critcl: $(CRITCL_SUBDIR)/lib/critcl/critcl.tcl | destroot-tcl
@echo ===\> staging to destroot in ${DIRPRFX}${CRITCL_SUBDIR}
@umask 0022; cd "$(CRITCL_SUBDIR)" && /usr/bin/env "HOME=@abs_top_builddir@/vendor" "@INTREE_TCLSH@" ./build.tcl install --prefix / --dest-dir "$(DESTROOT)$(TCL_PREFIX)" $(CRITCL_TARGET)
@chmod -R ugo+rX $(DESTROOT)$(TCL_PREFIX)/lib/critcl*
@touch .stamp-critcl
destroot-critcl: .stamp-critcl
.stamp-tcllibc: $(TCLLIB_SUBDIR)/support/installation/version.tcl .stamp-critcl
@echo ===\> staging tcllibc to destroot in ${DIRPRFX}@VENDOR_TCLLIB_SUBDIR@
@umask 0022; /usr/bin/env "PATH=$(DESTROOT)$(TCL_PREFIX)/bin:$$PATH" "$(MAKE)" -C "@VENDOR_TCLLIB_SUBDIR@" "DESTDIR=$(DESTROOT)" "CRITCL_TARGET=$(CRITCL_TARGET)" TCLSH_PROG="@INTREE_TCLSH@" install-binaries
@chmod -R ugo+rX $(DESTROOT)$(TCL_PREFIX)/lib/tcllib*
@touch .stamp-tcllibc
destroot-tcllibc: .stamp-tcllibc
destroot-signify:
@echo ===\> staging to destroot in ${DIRPRFX}${SIGNIFY_SUBDIR}
@umask 0022; "$(MAKE)" -C "$(SIGNIFY_SUBDIR)" install "PREFIX=$(DESTROOT)$(TCL_PREFIX)"
destroot-install: all-install
@echo ===\> staging to destroot in ${DIRPRFX}${INSTALL_SUBDIR}
@umask 0022; "$(MAKE)" -C "${INSTALL_SUBDIR}" install "DESTDIR=${DESTROOT}"
INSTALL_TARGETS= install-tcl install-tclx install-tcllib install-tcllibc
ifneq (@OS_PLATFORM@,linux)
INSTALL_TARGETS+= install-signify
endif
ifeq (@HAVE_CLONEFILE@,yes)
ifeq (@HAVE_DECL_CLONE_NOOWNERCOPY@,yes)
INSTALL_TARGETS+= install-install
endif
endif
install: $(INSTALL_TARGETS)
TCL_PACKAGE_PATH=@TCL_PACKAGE_PATH@
OLD_TCL_FILES= $(DESTDIR)$(TCL_PACKAGE_PATH)/tcl8 \
$(DESTDIR)$(TCL_PACKAGE_PATH)/tcl8.{5,6} \
$(DESTDIR)$(TCL_PACKAGE_PATH)/tcl9/9.0/{http-2.10.1,tcltest-2.5.10}.tm \
$(DESTDIR)$(TCL_PREFIX)/bin/tclsh8.{5,6} \
$(DESTDIR)$(TCL_PREFIX)/lib/libtcl8.{5,6}@SHLIB_SUFFIX@ \
$(DESTDIR)$(TCL_PREFIX)/lib/libtclstub8.{5,6}.a \
$(DESTDIR)$(TCL_PACKAGE_PATH)/thread2.7.{0,2,3} \
$(DESTDIR)$(TCL_PACKAGE_PATH)/thread2.8.{7,8,9,10,11,12} \
$(DESTDIR)$(TCL_PACKAGE_PATH)/thread3.0.4 \
$(DESTDIR)$(TCL_PACKAGE_PATH)/itcl4.2.{2,3,4} \
$(DESTDIR)$(TCL_PACKAGE_PATH)/itcl4.3.{0,2,4,5} \
$(DESTDIR)$(TCL_PACKAGE_PATH)/sqlite3.{36,40,51}.0 \
$(DESTDIR)$(TCL_PACKAGE_PATH)/sqlite3.{44,47}.2 \
$(DESTDIR)$(TCL_PACKAGE_PATH)/sqlite3.45.3 \
$(DESTDIR)$(TCL_PACKAGE_PATH)/sqlite3.50.4 \
$(DESTDIR)$(TCL_PACKAGE_PATH)/tdbc1.1.{3,5,7,9,10,12} \
$(DESTDIR)$(TCL_PACKAGE_PATH)/tdbc{mysql,odbc,postgres}*
install-tcl:
rm -rf $(OLD_TCL_FILES)
@echo ===\> making $(@:%-tcl=%) in ${DIRPRFX}@VENDOR_TCL_SUBDIR@
@umask 0022; "$(MAKE)" -C "@VENDOR_TCL_SUBDIR@" "INSTALL=$(INSTALL)" @VENDOR_TCL_INSTALL@
install-tclx:
rm -rf "$(DESTDIR)$(TCL_PACKAGE_PATH)/tclx8.4" "$(DESTDIR)$(TCL_PACKAGE_PATH)/tclx8.6"
@echo ===\> making $(@:%-tclx=%) in ${DIRPRFX}@VENDOR_TCLX_SUBDIR@
@umask 0022; "$(MAKE)" -C "@VENDOR_TCLX_SUBDIR@" @VENDOR_TCLX_INSTALL@
install-tcllib:
rm -rf $(DESTDIR)$(TCL_PACKAGE_PATH)/tcllib1.*
@echo ===\> making $(@:%-tcllib=%) in ${DIRPRFX}@VENDOR_TCLLIB_SUBDIR@
@umask 0022; "$(MAKE)" -C "@VENDOR_TCLLIB_SUBDIR@" TCLSH_PROG="@INTREE_TCLSH@" @VENDOR_TCLLIB_INSTALL@
@chmod -R ugo+rX $(DESTDIR)$(TCL_PREFIX)/lib/tcllib*
install-tcllibc:
@echo ===\> making $(@:%-tcllibc=%)
@umask 0022; cd "$(DESTROOT)$(TCL_PREFIX)/lib"; \
for d in $$(find tcllibc* -type d); do \
mkdir -p "$(DESTDIR)$(TCL_PREFIX)/lib/$$d"; \
done; \
for f in $$(find tcllibc* -type f); do \
$(INSTALL) -m 0444 "$$f" "$(DESTDIR)$(TCL_PREFIX)/lib/$$f"; \
done
@chmod -R ugo+rX $(DESTDIR)$(TCL_PREFIX)/lib/tcllibc*
install-signify:
@echo ===\> making $(@:%-signify=%) in ${DIRPRFX}${SIGNIFY_SUBDIR}
@umask 0022; "$(MAKE)" -C "$(SIGNIFY_SUBDIR)" install "PREFIX=$(DESTDIR)$(TCL_PREFIX)"
install-install:
@echo ===\> making $(@:%-install=%) in ${DIRPRFX}${INSTALL_SUBDIR}
@umask 0022; "$(MAKE)" -C "${INSTALL_SUBDIR}" install
test:
clean: $(CLEAN_TARGETS)
rm -rf vendor-destroot
rm -f .stamp-*
rm -rf .critcl
distclean: $(DISTCLEAN_TARGETS)
rm -rf vendor-destroot
rm -f .stamp-*
rm -rf .critcl
rm -f Makefile
rm -f tclsh
codesign:: $(CODESIGN_TARGETS)
../src/codesign.sh $?