# System utilities
CC = cc
CFLAGS = -Iinclude/ -Ilib/ -g -Wall -Wextra -Wpedantic
HOME = /home/trinity
PREFIX = /usr/local
RM = rm -f

all:

HOMEPAGE_FILES = homepage propaganda/*
dist/homepage:
	mkdir -p dist/homepage.tmp
	cp $(HOMEPAGE_FILES) dist/homepage.tmp
	cd dist/homepage.tmp; sh homepage; cd ../..
	$(RM) dist/homepage.tmp/homepage dist/homepage.tmp/homepage.local
	mv dist/homepage.tmp dist/homepage
dist/homepage.tar.gz: dist/homepage
	tar cz -C dist/homepage . >dist/homepage.tar.gz

# i made this script to fetch icons for my grandmother and put them in icons/
# so i wouldn't have to fetch the icons for her desktop when i made her a new
# system.
# i could have downloaded all the icons and put them into a repo for her but
# this uses less space
dist/grammy:	dist/grammy.tmp/989wclz.com.png \
		dist/grammy.tmp/amazon.com.ico \
		dist/grammy.tmp/bangordailynews.com.png \
		dist/grammy.tmp/theguardian.com.png \
		dist/grammy.tmp/centralmaine.com.png \
		dist/grammy.tmp/dictionary.com.png \
		dist/grammy.tmp/google.com.jpg \
		dist/grammy.tmp/longfellowsgreenhouses.com.jpg \
		dist/grammy.tmp/mainepublic.org.png \
		dist/grammy.tmp/news.google.com.png \
		dist/grammy.tmp/newscentermaine.com.png \
		dist/grammy.tmp/pressherald.com.png \
		dist/grammy.tmp/weather.com.png
	mv dist/grammy.tmp dist/grammy
dist/grammy.tmp:
	mkdir -p dist/grammy.tmp
dist/grammy.tmp/989wclz.com.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/989wclz.com.png" "https://web.archive.org/web/20200629174002if_/https://989wclz.com/wp-content/themes/wclz/img/touch-icon-144.png"
dist/grammy.tmp/amazon.com.ico: dist/grammy.tmp
	curl -o "dist/grammy.tmp/amazon.com.ico" "https://web.archive.org/web/20200718050400if_/https://www.amazon.com/favicon.ico"
dist/grammy.tmp/bangordailynews.com.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/bangordailynews.com.png" "http://web.archive.org/web/20200721195123if_/https://i0.wp.com/bdn-data.s3.amazonaws.com/uploads/2020/06/BDN-logo_green-3-1.png"
dist/grammy.tmp/theguardian.com.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/theguardian.com.png" "https://web.archive.org/web/20200720041457if_/https://assets.guim.co.uk/images/favicons/fee5e2d638d1c35f6d501fa397e53329/152x152.png"
dist/grammy.tmp/centralmaine.com.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/centralmaine.com.png" "https://web.archive.org/web/20200720023956if_/https://multifiles.pressherald.com/uploads/sites/2/2014/06/apple-touch-icon-iphone-retina-display.png"
dist/grammy.tmp/dictionary.com.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/dictionary.com.png" "https://web.archive.org/web/20200719135458if_/https://www.dictionary.com/hp-assets/dcom_favicon-1bff2f1b49c077ed504e55c3649f2a4b.png"
dist/grammy.tmp/google.com.jpg: dist/grammy.tmp
	curl -o "dist/grammy.tmp/google.com.jpg" "https://web.archive.org/web/20170621105937if_/https://yt3.ggpht.com/-v0soe-ievYE/AAAAAAAAAAI/AAAAAAAAAAA/OixOH_h84Po/s900-c-k-no/photo.jpg"
dist/grammy.tmp/longfellowsgreenhouses.com.jpg: dist/grammy.tmp
	curl -o "dist/grammy.tmp/longfellowsgreenhouses.com.jpg" "https://web.archive.org/web/20200718173559im_/https://longfellowsgreenhouses.com/wp-content/uploads/2020/03/Longfellows-Logo-Light-Green.jpg"
dist/grammy.tmp/mainepublic.org.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/mainepublic.org.png" "https://d3kle7qwymxpcy.cloudfront.net/images/broadcasts/e5/8e/30457/1/c300.png"
dist/grammy.tmp/news.google.com.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/news.google.com.png" "https://upload.wikimedia.org/wikipedia/commons/0/0b/Google_News_icon.png"
dist/grammy.tmp/newscentermaine.com.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/newscentermaine.com.png" "https://web.archive.org/web/20200721190548if_/https://www.newscentermaine.com/assets/favicons/WCSH.png?ver=2.4.7.4"
dist/grammy.tmp/pressherald.com.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/pressherald.com.png" "https://multifiles.pressherald.com/uploads/sites/4/2014/06/apple-touch-icon-iphone-retina-display.png"
dist/grammy.tmp/weather.com.png: dist/grammy.tmp
	curl -o "dist/grammy.tmp/weather.com.png" "https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/The_Weather_Channel_logo_2005-present.svg/1200px-The_Weather_Channel_logo_2005-present.svg.png"

dist/ifpublic:
	cp ifpublic/ifpublic dist/

dist/pschdir:
	$(MAKE) -C pschdir
	cp pschdir/pschdir dist/pschdir

dist/spacer.bin:
	# creates an 8GB empty file
	# that way when the alarm bells go off you can delete it to save a
	# couple minutes before the system really runs out of disk
	#
	#     512     * 16777216 = 8GB
	dd bs=512 count=16777216 </dev/zero >dist/spacer.bin

dist/str:
	$(MAKE) -C str
	cp str/str dist/

dist/streq:
	$(MAKE) -C streq
	cp streq/streq dist/

$(HOME)/.fonts/unscii-16-full.ttf:
	mkdir -p $(HOME)/.fonts/
	curl -o $(HOME)/.fonts/unscii-16-full.ttf.tmp http://viznut.fi/unscii/unscii-16-full.ttf
	mv $(HOME)/.fonts/unscii-16-full.ttf.tmp $(HOME)/.fonts/unscii-16-full.ttf

# I never finished this because I realized it needed OpenJDK. Fuck Java.
# depends on
#	apk:chimerautils (on Chimera Linux)
#	apk:curl
$(PREFIX)/src/arduino18:
	# the person that made the tarball used the absolute file location in
	# the sha512 file, so it looks like
	# [sum]  /home/user/dir/tarball.tar.xz
	# so filter out the file locations before diffing
	curl -L https://github.com/arduino/Arduino/releases/download/1.8.19/arduino-1.8.19.tar.xz \
		>"$(PREFIX)"/src/arduino-1.8.19.tar.xz
	curl -L https://github.com/arduino/Arduino/releases/download/1.8.19/arduino-1.8.19.tar.xz.sha512 \
		| sed 's/  .*//' \
		>"$(PREFIX)"/src/arduino-1.8.19.tar.xz.sha512
	sha512sum arduino-1.8.19.tar.xz \
		| sed 's/  .*//' \
		>"$(PREFIX)"/src/arduino-1.8.19.tar.xz.sha512.local
	# if the sums differ the makefile will terminate
	cat arduino-1.8.19.tar.xz.sha512 $(PREFIX)/src/arduino-1.8.19.tar.xz.sha512.local \
		| uniq \
		| wc -l \
		| xargs echo \
		| xargs test 1 =
	xz -cd "$(PREFIX)"/src/arduino-1.8.19.tar.xz \
		| tar -C "$(PREFIX)" x
	mv "$(PREFIX)"/arduino-1.8.19 "$(PREFIX)"/arduino18

$(PREFIX)/bin/bar:
	git clone https://github.com/LemonBoy/bar.git "$(PREFIX)"/src/bar
	$(MAKE) -C "$(PREFIX)"/src/bar PREFIX="$(PREFIX)" install

# depends on
# 	apk:clang
# 	apk:git
#	apk:gmake
#	apk:libx11-devel
#	apk:libxau-devel
#	apk:libxcb-devel
#	apk:libxinerama-devel
#	apk:xcb-util-devel
#	apk:xcb-util-keysyms-devel
#	apk:xcb-util-wm-devel
$(PREFIX)/bin/bspwm:
	git clone https://github.com/baskerville/bspwm.git "$(PREFIX)"/src/bspwm
	$(MAKE) -C "$(PREFIX)"/src/bspwm install

# depends on:
#	apk:git (build)
#	apk:ncurses-devel (optional if curses.h is present on system)
$(PREFIX)/bin/cmatrix:
	git clone https://github.com/abishekvashok/cmatrix.git $(PREFIX)/src/cmatrix
	sh -c 'cd "$(PREFIX)"/src/cmatrix; autoreconf -i && ./configure --prefix="$(PREFIX)"'
	$(MAKE) -C "$(PREFIX)"/src/cmatrix install

# game.tar should extract to
# 'The Coffin of Andy and Leyley'/
#	Game.exe
#	[files on which Game.exe depends]
# I originally got it as a RAR which I decompressed and packed into a TAR.
# _CommonRedist/
#	dotNetFx40_Full_setup.exe
#	dxwebsetup.exe
#	oalinst.exe
#	vcredist_2015-2019_x64.exe
#	vcredist_2015-2019_x86.exe
#	vcredist_x64.exe
#	vcredist_x86.exe
#	xnafx40_redist.msi
# depends on
#	apk:curl
#	apk:git
#	apk:qemu-system-arm
#	apk:xz
$(PREFIX)/bin/coffin_files/2021-10-30-raspios-bullseye-armhf-full.img:
	mkdir -p "$(PREFIX)"/bin/coffin_files
	curl http://downloads.raspberrypi.org/raspios_full_armhf/images/raspios_full_armhf-2021-11-08/2021-10-30-raspios-bullseye-armhf-full.zip -o "$(PREFIX)"/bin/coffin_files/2021-10-30-raspios-bullseye-armhf-full.zip
	tar -C "$(PREFIX)"/bin/coffin_files xf "$(PREFIX)"/bin/coffin_files/2021-10-30-raspios-bullseye-armhf-full.zip
#$(PREFIX)/bin/coffin: $(PREFIX)/bin/coffin_files/game.tar $(PREFIX)/bin/coffin_files/2021-10-30-raspios-bullseye-armhf-full.img $(PREFIX)/src/qemu-rpi-kernel

# Installs the Python script without documentation because I'm lazy and don't
# wanna run the upstream Makefile and then deal with filtering out the Python
# stuff (which is specific to 3.6 which is a little outdated).
# depends on apk:git apk:python
$(PREFIX)/bin/git-filter-repo:
	git clone https://github.com/newren/git-filter-repo.git $(PREFIX)/src/git-filter-repo
	$(INSTALL) -Dm0755 $(PREFIX)/src/git-filter-repo/git-filter-repo $(PREFIX)/bin/git-filter-repo

# depends on
#	apk:git
#	apk:texinfo
$(PREFIX)/bin/macchanger:
	git clone https://github.com/alobbs/macchanger.git "$(PREFIX)"/src/macchanger
	sh -c 'cd "$(PREFIX)"/src/macchanger; ./autogen.sh --prefix=/usr/local/'
	# https://github.com/alobbs/macchanger/issues/14
	sed -i .orig -e 's/caddr_t/void */' "$(PREFIX)"/src/macchanger/src/netinfo.c
	$(MAKE) -C "$(PREFIX)"/src/macchanger install

# nmap 7.80 is the last Free nmap release
# depends on apk:linux-headers
# had to # ln -s /bin/gmake /usr/local/bin/make
# with clang 16.0.6 aarch75-chimera-linux-musl, cannot compile (4 errors?)
$(PREFIX)/bin/nmap:
	curl "https://nmap.org/dist/nmap-7.80.tar.bz2" | bzip2 -cd | tar x -C /usr/local/src/
	cd /usr/local/src/nmap-7.80; ./configure --prefix=/usr/local
	$(MAKE) -C /usr/local/src/nmap-7.80

# depends on
#	apk:git
$(PREFIX)/bin/pandoc: $(PREFIX)/bin/cabal
	git clone https://github.com/jgm/pandoc.git "$(PREFIX)"/src/pandoc.tmp
	mv "$(PREFIX)"/pandoc.tmp "$(PREFIX)"/pandoc

# depends on
# 	apk:bison
# 	apk:cairo-devel
# 	apk:flex
# 	apk:gdk-pixbuf-devel
# 	apk:glib-devel
# 	apk:libxkbcommon-devel
# 	apk:pango-devel
# 	apk:pkgconf
# 	apk:meson
# 	apk:startup-notification-devel
# 	apk:xcb-util-cursor-devel
$(PREFIX)/bin/rofi:
	git clone https://davatorium/rofi.git $(PREFIX)/src/rofi
	sh -c 'cd $(PREFIX)/src/rofi; meson setup build'
	ninja -C $(PREFIX)/src/rofi/build install

# depends on
# 	apk:autoconf
# 	apk:autoconf-archive
# 	apk:imlib2-devel
# 	apk:libxcomposite-devel
# 	apk:libxfixes-devel
$(PREFIX)/bin/scrot:
	git clone https://github.com/resurrecting-open-source-projects/scrot.git "$(PREFIX)"/src/scrot
	sh -c 'cd $(PREFIX)/src/scrot && ./autogen.sh && ./configure MAKE=$(MAKE) PREFIX=$(PREFIX)'
	$(MAKE) -C $(PREFIX)/src/scrot install

# depends on
#	apk:g++
$(PREFIX)/bin/unrar:
	git clone https://github.com/pmachapman/unrar.git "$(PREFIX)"/src/unrar
	$(MAKE) -C "$(PREFIX)"/src/unrar
	$(INSTALL) -Dm0755 "$(PREFIX)"/src/unrar/unrar "$(PREFIX)"/bin/unrar

# I tried final_official_2.50 but it wouldn't build
# (ld: error: duplicate symbol: comDat)
# depends on
#	apk:sudo
$(PREFIX)/src/wiringpi:
	git clone https://github.com/WiringPi/WiringPi.git $(PREFIX)/src/wiringpi
	git -C $(PREFIX)/src/wiringpi checkout 2.61-1
	sed -i .old -e /^sudo/d $(PREFIX)/src/wiringpi/build
	sed -i .old -e s/root\.root/root\:root/ $(PREFIX)/src/wiringpi/gpio
	sh -c 'cd $(PREFIX)/src/wiringpi; sudo=sudo ./build'

$(PREFIX)/bin/xdo:
	git clone https://github.com/baskerville/xdo.git $(PREFIX)/src/xdo
	$(MAKE) -C $(PREFIX)/src/xdo install

$(PREFIX)/share/audacious/Skins/Sailor_Moon_Gang.wsz:
	mkdir -p $(PREFIX)/share/audacious/Skins
	curl https://archive.org/download/winampskin_Sailor_Moon_Gang/Sailor_Moon_Gang.wsz -o $(PREFIX)/share/audacious/Skins/Sailor_Moon_Gang.wsz

# depends on
#	apk:git
$(PREFIX)/src/qemu-rpi-kernel:
	git clone https://github.com/dhruvvyas90/qemu-rpi-kernel "$(PREFIX)"/src/qemu-rpi-kernel

# depends on
#	apk:git
$(PREFIX)/src/moreutils:
	git clone git://git.joeyh.name/moreutils "$(PREFIX)"/src/moreutils.tmp
	mv "$(PREFIX)"/src/moreutils.tmp "$(PREFIX)"/src/moreutils

# depends on
#	apk:git
$(PREFIX)/src/syslinux:
	git clone --recursive https://repo.or.cz/syslinux.git "$(PREFIX)"/src/syslinux

.PHONY: android-udev-rules
android-udev-rules:
	git clone https://github.com/M0Rf30/android-udev-rules.git "$(PREFIX)"/src/android-udev-rules
	# rather than requiring user to be in `adbusers`, just use group wheel
	sed -i .orig -e s/adbusers/wheel/g "$(PREFIX)"/src/android-udev-rules/51-android.rules
	mkdir -p /etc/udev/rules.d
	cp "$(PREFIX)"/src/android-udev-rules/51-android.rules /etc/udev/rules.d/51-android.rules
	chmod a+r /etc/udev/rules.d/51-android.rules
	udevadm control --reload-rules
	# assumes dinit
	dinitctl restart udevd


.PHONY: unscii-pkgsrc
unscii-pkgsrc:
	$(MAKE) -C /usr/pkgsrc/fonts/unscii install clean clean-depends
