# GNUmakefile # # Copyright 2008 Bryan Ischo # # This file is part of libs3. # # libs3 is free software: you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation, version 3 of the License. # # In addition, as a special exception, the copyright holders give # permission to link the code of this library and its programs with the # OpenSSL library, and distribute linked combinations including the two. # # libs3 is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # details. # # You should have received a copy of the GNU General Public License version 3 # along with libs3, in a file named COPYING. If not, see # . # I tried to use the autoconf/automake/autolocal/etc (i.e. autohell) tools # but I just couldn't stomach them. Since this is a Makefile for POSIX # systems, I will simply do away with autohell completely and use a GNU # Makefile. GNU make ought to be available pretty much everywhere, so I # don't see this being a significant issue for portability. # All commands assume a GNU compiler. For systems which do not use a GNU # compiler, write scripts with the same names as these commands, and taking # the same arguments, and translate the arguments and commands into the # appropriate non-POSIX ones as needed. libs3 assumes a GNU toolchain as # the most portable way to build software possible. Non-POSIX, non-GNU # systems can do the work of supporting this build infrastructure. # -------------------------------------------------------------------------- # Set libs3 version number LIBS3_VER_MAJOR := 1 LIBS3_VER_MINOR := 4 LIBS3_VER := $(LIBS3_VER_MAJOR).$(LIBS3_VER_MINOR) # -------------------------------------------------------------------------- # BUILD directory ifndef BUILD BUILD := build endif # -------------------------------------------------------------------------- # DESTDIR directory ifndef DESTDIR DESTDIR := libs3-$(LIBS3_VER) endif # -------------------------------------------------------------------------- # Acquire configuration information for libraries that libs3 depends upon ifndef CURL_LIBS CURL_LIBS := -Lc:\libs3-libs\bin -lcurl endif ifndef CURL_CFLAGS CURL_CFLAGS := -Ic:\libs3-libs\include endif ifndef LIBXML2_LIBS LIBXML2_LIBS := -Lc:\libs3-libs\bin -lxml2 endif ifndef LIBXML2_CFLAGS LIBXML2_CFLAGS := -Ic:\libs3-libs\include endif # -------------------------------------------------------------------------- # These CFLAGS assume a GNU compiler. For other compilers, write a script # which converts these arguments into their equivalent for that particular # compiler. ifndef CFLAGS CFLAGS = -O3 endif CFLAGS += -Wall -Werror -Wshadow -Wextra -Iinc \ $(CURL_CFLAGS) $(LIBXML2_CFLAGS) \ -DLIBS3_VER_MAJOR=\"$(LIBS3_VER_MAJOR)\" \ -DLIBS3_VER_MINOR=\"$(LIBS3_VER_MINOR)\" \ -DLIBS3_VER=\"$(LIBS3_VER)\" \ -D__STRICT_ANSI__ \ -D_ISOC99_SOURCE \ -D_POSIX_C_SOURCE=200112L \ -Dsleep=Sleep -DFOPEN_EXTRA_FLAGS=\"b\" \ -Iinc/mingw -include windows.h LDFLAGS = $(CURL_LIBS) $(LIBXML2_LIBS) # -------------------------------------------------------------------------- # Default targets are everything .PHONY: all all: exported test # -------------------------------------------------------------------------- # Exported targets are the library and driver program .PHONY: exported exported: libs3 s3 headers # -------------------------------------------------------------------------- # Install target .PHONY: install install: exported -@mkdir $(DESTDIR)\bin -@mkdir $(DESTDIR)\include -@mkdir $(DESTDIR)\lib copy $(BUILD)\bin\s3.exe $(DESTDIR)\bin copy $(BUILD)\bin\libs3.dll $(DESTDIR)\bin copy $(BUILD)\lib\libs3.a $(DESTDIR)\lib copy mswin\libs3.def $(DESTDIR)\lib copy $(BUILD)\include\libs3.h $(DESTDIR)\include copy LICENSE $(DESTDIR) copy COPYING $(DESTDIR) # -------------------------------------------------------------------------- # Compile target patterns $(BUILD)/obj/%.o: src/%.c -@mkdir $(subst /,\,$(dir $@)) gcc $(CFLAGS) -o $@ -c $< # -------------------------------------------------------------------------- # libs3 library targets LIBS3_SHARED = $(BUILD)/bin/libs3.dll .PHONY: libs3 libs3: $(LIBS3_SHARED) $(BUILD)/lib/libs3.a LIBS3_SOURCES := src/acl.c src/bucket.c src/error_parser.c src/general.c \ src/object.c src/request.c src/request_context.c \ src/response_headers_handler.c src/service_access_logging.c \ src/service.c src/simplexml.c src/util.c src/mingw_functions.c $(LIBS3_SHARED): $(LIBS3_SOURCES:src/%.c=$(BUILD)/obj/%.o) -@mkdir $(subst /,\,$(dir $@)) gcc -shared -o $@ $^ $(LDFLAGS) -lws2_32 $(BUILD)/lib/libs3.a: $(LIBS3_SHARED) -@mkdir $(subst /,\,$(dir $@)) dlltool --def mswin\libs3.def --dllname $(subst /,\,$<) \ --output-lib $(subst /,\,$@) # -------------------------------------------------------------------------- # Driver program targets .PHONY: s3 s3: $(BUILD)/bin/s3.exe $(BUILD)/bin/s3.exe: $(BUILD)/obj/s3.o $(BUILD)/obj/mingw_s3_functions.o \ $(BUILD)/lib/libs3.a -@mkdir $(subst /,\,$(dir $@)) gcc -o $@ $^ $(LDFLAGS) -lws2_32 # -------------------------------------------------------------------------- # libs3 header targets .PHONY: headers headers: $(BUILD)\include\libs3.h $(BUILD)\include\libs3.h: inc\libs3.h -@mkdir $(subst /,\,$(dir $@)) copy $< $@ # -------------------------------------------------------------------------- # Test targets .PHONY: test test: $(BUILD)/bin/testsimplexml $(BUILD)/bin/testsimplexml: $(BUILD)/obj/testsimplexml.o \ $(BUILD)/obj/simplexml.o -@mkdir $(subst /,\,$(dir $@)) gcc -o $@ $^ $(LIBXML2_LIBS) # -------------------------------------------------------------------------- # Clean target .PHONY: clean clean: mswin\rmrf.bat $(BUILD)