diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..2a9e9ba --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ +language: c +sudo: false +dist: trusty +cache: + ccache: true +compiler: +- gcc +- clang +env: + global: + - EXTRAFLAGS='-v' + - PREFIX="${HOME}" +install: +- 'true' +script: +- make +- ./mcrcon -h +- ./mcrcon -v +- make install +- make uninstall diff --git a/INSTALL b/INSTALL.md similarity index 100% rename from INSTALL rename to INSTALL.md diff --git a/Makefile b/Makefile index 14b0f34..54e553f 100644 --- a/Makefile +++ b/Makefile @@ -1,37 +1,49 @@ -# if you want to cross compile +# if you want to cross compile # export PATH=$PATH:/path/to/compiler/bin # export CROSS_COMPILE=arm-none-linux-gnueabi- # make +EXENAME = mcrcon +PREFIX ?= /usr/local + +EXTRAFLAGS ?= -fstack-protector-strong + +INSTALL = install +LINKER = +RM = rm -f + ifeq ($(OS), Windows_NT) LINKER = -lws2_32 EXENAME = mcrcon.exe RM = cmd /C del /F -else - LINKER = - EXENAME = mcrcon - RM = rm -f endif -CC = gcc -CFLAGS = -std=gnu99 -Wall -Wextra -Wpedantic -Os -s -EXTRAFLAGS = -fstack-protector-strong +ifeq ($(shell uname), Darwin) + INSTALL = ginstall + CFLAGS ?= -std=gnu99 -Wall -Wextra -Wpedantic -Os +else + CFLAGS ?= -std=gnu99 -Wall -Wextra -Wpedantic -Os -s +endif -all: - $(CROSS_COMPILE)$(CC) $(CFLAGS) $(EXTRAFLAGS) -o $(EXENAME) mcrcon.c $(LINKER) +.PHONY: all +all: $(EXENAME) + +$(EXENAME): mcrcon.c + $(CROSS_COMPILE)$(CC) $(CFLAGS) $(EXTRAFLAGS) -o $@ $< $(LINKER) ifneq ($(OS), Windows_NT) +.PHONY: install install: - cp $(EXENAME) /usr/local/bin/$(EXENAME) - chmod 0755 /usr/local/bin/$(EXENAME) - cp mcrcon.1 /usr/local/share/man/man1/mcrcon.1 - chmod 0644 /usr/local/share/man/man1/mcrcon.1 + $(INSTALL) -vD $(EXENAME) $(PREFIX)/bin/$(EXENAME) + $(INSTALL) -vD -m 0644 mcrcon.1 $(PREFIX)/share/man/man1/mcrcon.1 @echo "\nmcrcon installed. Run 'make uninstall' if you want to uninstall.\n" + +.PHONY: uninstall uninstall: - rm -f /usr/local/bin/$(EXENAME) - rm -f /usr/local/share/man/man1/mcrcon.1 + rm -f $(PREFIX)/bin/$(EXENAME) $(PREFIX)/share/man/man1/mcrcon.1 @echo "\nmcrcon uninstalled.\n" endif +.PHONY: clean clean: $(RM) $(EXENAME) diff --git a/mcrcon.c b/mcrcon.c index aa8bae0..8145dea 100644 --- a/mcrcon.c +++ b/mcrcon.c @@ -304,9 +304,10 @@ int net_connect(const char *host, const char *port) { int sd; - struct addrinfo hints = {0}; + struct addrinfo hints; struct addrinfo *server_info, *p; + memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP;