# SPDX-FileCopyrightText: 2021 fosslinux # SPDX-FileCopyrightText: 2021 Andrius Štikonas # SPDX-License-Identifier: GPL-3.0-or-later # Note: This makefile is not currently parallel-safe. VERSION=5.10.1 PRIVLIB_EXP=$(PREFIX)/lib/perl5/$(VERSION) CC = gcc AR = ar CFLAGS = -DPRIVLIB_EXP=\"$(PRIVLIB_EXP)\" \ -DPERL_CORE=1 \ -I. \ -DVERSION=\"$(VERSION)\" \ -DNO_PPPORT_H MINICFLAGS = -DPERL_EXTERNAL_GLOB .PHONY: all LIBPERL_SRC = av scope op doop doio dump gv hv mg reentr mro perl perly pp \ pp_hot pp_ctl pp_sys regcomp regexec utf8 sv taint toke util \ deb run universal xsutils pad globals perlio perlapi numeric \ mathoms locale pp_pack pp_sort LIBPERL_OBJ = $(addsuffix .o, $(LIBPERL_SRC)) EXTENSIONS = File/Glob Digest/SHA Data/Dumper Cwd EXTENSIONS_A := $(foreach f,$(EXTENSIONS), lib/auto/$f/$(notdir $f).a) EXTENSIONS_PM = ext/File/Glob/Glob.pm ext/Digest/SHA/lib/Digest/SHA.pm \ ext/Data/Dumper/Dumper.pm all: perl # miniperl opmini.c: op.c cp op.c opmini.c perlmini.c: perl.c cp perl.c perlmini.c generate_uudmap: generate_uudmap.o $(CC) $(CFLAGS) $^ $(LDFLAGS) -o $@ uudmap.h: generate_uudmap ./generate_uudmap > $@ git_version.h: lib/Config_git.pl lib/Config_git.pl: perl make_patchnum.pl globals.o: uudmap.h perl.o: git_version.h perlmini.o: git_version.h libperl.a: $(LIBPERL_OBJ) $(AR) cr $@ $^ miniperl: miniperlmain.o opmini.o perlmini.o libperl.a $(CC) $(CFLAGS) $(MINICFLAGS) $^ $(LDFLAGS) -o $@ # An extremely dodgy hack sed -i 's/va\.a\.a/v5.8.1/' miniperl chmod +x miniperl # full perl lib/re.pm: cp ext/re/re.pm lib/re.pm lib/Config.pm: config.sh miniperl configpm lib/re.pm ./miniperl -Ilib configpm writemain: writemain.SH spitshell=cat eunicefix=true ./$< perlmain.c: writemain $(EXTENSIONS_A) ./writemain $(EXTENSIONS_A) > $@ perl: perlmain.o libperl.a $(EXTENSIONS_A) lib/File/Glob.pm lib/Digest/SHA.pm \ lib/DynaLoader.pm lib/XSLoader.pm lib/Data/Dumper.pm $(CC) $(CFLAGS) perlmain.o libperl.a $(EXTENSIONS_A) -o $@ # An extremely dodgy hack (v2) sed -i 's/va\.a\.a/v5.8.1/' perl chmod +x perl # extensions autosplit.pl: lib/re.pm lib/Config.pm miniperl echo 'use AutoSplit; autosplit_lib_modules(@ARGV)' > $@ ext/DynaLoader/DynaLoader.pm: miniperl lib/Config.pm ./miniperl -Ilib ext/DynaLoader/DynaLoader_pm.PL DynaLoader.pm mv DynaLoader.pm $@ ext/DynaLoader/XSLoader.pm: miniperl lib/Config.pm ./miniperl -Ilib ext/DynaLoader/XSLoader_pm.PL XSLoader.pm mv XSLoader.pm $@ lib/DynaLoader.pm: ext/DynaLoader/DynaLoader.pm install $< $@ lib/XSLoader.pm: ext/DynaLoader/XSLoader.pm install $< $@ lib/File/Glob.pm: ext/File/Glob/Glob.pm install $< $@ lib/Digest/SHA.pm: ext/Digest/SHA/lib/Digest/SHA.pm install $< $@ lib/Data: mkdir $@ lib/Data/Dumper.pm: ext/Data/Dumper/Dumper.pm lib/Data install $< $@ define build_rule lib/auto/$1/$(notdir $1).a: ext/$1/$(notdir $1).o $(patsubst %.c,%.o,$(wildcard ext/$1/*.c)) $(EXTENSIONS_PM) mkdir -p lib/auto/$1 $(AR) cr lib/auto/$1/$(notdir $1).a ext/$1/$(notdir $1).o $(patsubst %.c,%.o,$(wildcard ext/$1/*.c)) ext/$1/$(notdir $1).c: miniperl lib/Config.pm cd ext/$1; \ $(CURDIR)/miniperl -I$(CURDIR)/lib Makefile.PL; \ $(CURDIR)/miniperl -I$(CURDIR)/lib $(CURDIR)/lib/ExtUtils/xsubpp -noprototypes -typemap $(CURDIR)/lib/ExtUtils/typemap `echo $(notdir $1) | sed 's/.*-//'`.xs > $(notdir $1).c endef $(foreach f,$(EXTENSIONS),$(eval $(call build_rule,$f))) install: all install perl "$(DESTDIR)$(PREFIX)/bin/perl" mkdir -p "$(DESTDIR)$(PRIVLIB_EXP)" cp -r lib/* "$(DESTDIR)$(PRIVLIB_EXP)"