github.com/jstaf/onedriver@v0.14.2-0.20240420231225-f07678f9e6ef/Makefile (about)

     1  .PHONY: all, test, test-init, srpm, rpm, dsc, changes, deb, clean, install, uninstall
     2  
     3  # autocalculate software/package versions
     4  VERSION := $(shell grep Version onedriver.spec | sed 's/Version: *//g')
     5  RELEASE := $(shell grep -oP "Release: *[0-9]+" onedriver.spec | sed 's/Release: *//g')
     6  DIST := $(shell rpm --eval "%{?dist}" 2> /dev/null || echo 1)
     7  RPM_FULL_VERSION = $(VERSION)-$(RELEASE)$(DIST)
     8  
     9  # -Wno-deprecated-declarations is for gotk3, which uses deprecated methods for older
    10  # glib compatibility: https://github.com/gotk3/gotk3/issues/762#issuecomment-919035313
    11  CGO_CFLAGS := CGO_CFLAGS=-Wno-deprecated-declarations
    12  
    13  # test-specific variables
    14  TEST_UID := $(shell whoami)
    15  GORACE := GORACE="log_path=fusefs_tests.race strip_path_prefix=1"
    16  
    17  all: onedriver onedriver-launcher
    18  
    19  
    20  onedriver: $(shell find fs/ -type f) cmd/onedriver/main.go
    21  	bash cgo-helper.sh 
    22  	$(CGO_CFLAGS) go build -v \
    23  		-ldflags="-X github.com/jstaf/onedriver/cmd/common.commit=$(shell git rev-parse HEAD)" \
    24  		./cmd/onedriver
    25  
    26  
    27  onedriver-headless: $(shell find fs/ cmd/common/ -type f) cmd/onedriver/main.go
    28  	CGO_ENABLED=0 go build -v -o onedriver-headless \
    29  		-ldflags="-X github.com/jstaf/onedriver/cmd/common.commit=$(shell git rev-parse HEAD)" \
    30  		./cmd/onedriver
    31  
    32  
    33  onedriver-launcher: $(shell find ui/ cmd/common/ -type f) cmd/onedriver-launcher/main.go
    34  	$(CGO_CFLAGS) go build -v \
    35  		-ldflags="-X github.com/jstaf/onedriver/cmd/common.commit=$(shell git rev-parse HEAD)" \
    36  		./cmd/onedriver-launcher
    37  
    38  
    39  install: onedriver onedriver-launcher
    40  	cp onedriver /usr/bin/
    41  	cp onedriver-launcher /usr/bin/
    42  	mkdir -p /usr/share/icons/onedriver/
    43  	cp pkg/resources/onedriver.svg /usr/share/icons/onedriver/
    44  	cp pkg/resources/onedriver.png /usr/share/icons/onedriver/
    45  	cp pkg/resources/onedriver-128.png /usr/share/icons/onedriver/
    46  	cp pkg/resources/onedriver-launcher.desktop /usr/share/applications/
    47  	cp pkg/resources/onedriver@.service /etc/systemd/user/
    48  	gzip -c pkg/resources/onedriver.1 > /usr/share/man/man1/onedriver.1.gz
    49  	mandb
    50  
    51  
    52  uninstall:
    53  	rm -f \
    54  		/usr/bin/onedriver \
    55  		/usr/bin/onedriver-launcher \
    56  		/etc/systemd/user/onedriver@.service \
    57  		/usr/share/applications/onedriver-launcher.desktop \
    58  		/usr/share/man/man1/onedriver.1.gz
    59  	rm -rf /usr/share/icons/onedriver
    60  	mandb
    61  
    62  
    63  # used to create release tarball for rpmbuild
    64  v$(VERSION).tar.gz: $(shell git ls-files)
    65  	rm -rf onedriver-$(VERSION)
    66  	mkdir -p onedriver-$(VERSION)
    67  	git ls-files > filelist.txt
    68  	git rev-parse HEAD > .commit
    69  	echo .commit >> filelist.txt
    70  	rsync -a --files-from=filelist.txt . onedriver-$(VERSION)
    71  	mv onedriver-$(VERSION)/pkg/debian onedriver-$(VERSION)
    72  	go mod vendor
    73  	cp -R vendor/ onedriver-$(VERSION)
    74  	tar -czf $@ onedriver-$(VERSION)
    75  
    76  
    77  # build srpm package used for rpm build with mock
    78  srpm: onedriver-$(RPM_FULL_VERSION).src.rpm 
    79  onedriver-$(RPM_FULL_VERSION).src.rpm: v$(VERSION).tar.gz
    80  	rpmbuild -ts $<
    81  	cp $$(rpm --eval '%{_topdir}')/SRPMS/$@ .
    82  
    83  
    84  # build the rpm for the default mock target
    85  MOCK_CONFIG=$(shell readlink -f /etc/mock/default.cfg | grep -oP '[a-z0-9-]+x86_64')
    86  rpm: onedriver-$(RPM_FULL_VERSION).x86_64.rpm
    87  onedriver-$(RPM_FULL_VERSION).x86_64.rpm: onedriver-$(RPM_FULL_VERSION).src.rpm
    88  	mock -r /etc/mock/$(MOCK_CONFIG).cfg $<
    89  	cp /var/lib/mock/$(MOCK_CONFIG)/result/$@ .
    90  
    91  
    92  # create a release tarball for debian builds
    93  onedriver_$(VERSION).orig.tar.gz: v$(VERSION).tar.gz
    94  	cp $< $@
    95  
    96  
    97  # create the debian source package for the current version
    98  changes: onedriver_$(VERSION)-$(RELEASE)_source.changes
    99  onedriver_$(VERSION)-$(RELEASE)_source.changes: onedriver_$(VERSION).orig.tar.gz
   100  	cd onedriver-$(VERSION) && debuild -S -sa -d
   101  
   102  
   103  # just a helper target to use while building debs
   104  dsc: onedriver_$(VERSION)-$(RELEASE).dsc
   105  onedriver_$(VERSION)-$(RELEASE).dsc: onedriver_$(VERSION).orig.tar.gz
   106  	dpkg-source --build onedriver-$(VERSION)
   107  
   108  
   109  # create the debian package in a chroot via pbuilder
   110  deb: onedriver_$(VERSION)-$(RELEASE)_amd64.deb
   111  onedriver_$(VERSION)-$(RELEASE)_amd64.deb: onedriver_$(VERSION)-$(RELEASE).dsc
   112  	sudo mkdir -p /var/cache/pbuilder/aptcache
   113  	sudo pbuilder --build $<
   114  	cp /var/cache/pbuilder/result/$@ .
   115  
   116  
   117  # a large text file for us to test upload sessions with. #science
   118  dmel.fa:
   119  	curl ftp://ftp.ensemblgenomes.org/pub/metazoa/release-42/fasta/drosophila_melanogaster/dna/Drosophila_melanogaster.BDGP6.22.dna.chromosome.X.fa.gz | zcat > $@
   120  
   121  
   122  # setup tests for the first time on a new computer
   123  test-init: onedriver
   124  	go install github.com/rakyll/gotest@latest
   125  	mkdir -p mount/
   126  	$< -a mount/	
   127  
   128  
   129  # For offline tests, the test binary is built online, then network access is
   130  # disabled and tests are run. sudo is required - otherwise we don't have
   131  # permission to deny network access to onedriver during the test.
   132  test: onedriver onedriver-launcher dmel.fa
   133  	rm -f *.race* fusefs_tests.log
   134  	CGO_ENABLED=0 gotest -v -parallel=8 -count=1 $(shell go list ./ui/... | grep -v offline)
   135  	$(CGO_CFLAGS) gotest -v -parallel=8 -count=1 ./cmd/...
   136  	$(CGO_CFLAGS) $(GORACE) gotest -race -v -parallel=8 -count=1 ./fs/graph/...
   137  	$(CGO_CFLAGS) $(GORACE) gotest -race -v -parallel=8 -count=1 ./fs
   138  	$(CGO_CFLAGS) go test -c ./fs/offline
   139  	@echo "sudo is required to run tests of offline functionality:"
   140  	sudo unshare -n sudo -u $(TEST_UID) ./offline.test -test.v -test.parallel=8 -test.count=1
   141  
   142  
   143  # will literally purge everything: all built artifacts, all logs, all tests,
   144  # all files tests depend on, all auth tokens... EVERYTHING
   145  clean:
   146  	fusermount3 -uz mount/ || true
   147  	rm -f *.db *.rpm *.deb *.dsc *.changes *.build* *.upload *.xz filelist.txt .commit
   148  	rm -f *.log *.fa *.gz *.test vgcore.* onedriver onedriver-headless onedriver-launcher .auth_tokens.json
   149  	rm -rf util-linux-*/ onedriver-*/ vendor/ build/