123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- # GNUmakefile.mingw
- #
- # This file is part of libs3.
- #
- # libs3 is free software: you can redistribute it and/or modify it under the
- # terms of the GNU Lesser General Public License as published by the Free
- # Software Foundation, version 3 or above of the License. You can also
- # redistribute and/or modify it under the terms of the GNU General Public
- # License, version 2 or above 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 Lesser General Public License
- # version 3 along with libs3, in a file named COPYING. If not, see
- # <http://www.gnu.org/licenses/>.
- #
- # You should also have received a copy of the GNU General Public License
- # version 2 along with libs3, in a file named COPYING-GPLv2. If not, see
- # <http://www.gnu.org/licenses/>.
- # 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, unless it is already set.
- LIBS3_VER_MAJOR ?= 4
- LIBS3_VER_MINOR ?= 1
- LIBS3_VER := $(LIBS3_VER_MAJOR).$(LIBS3_VER_MINOR)
- # -----------------------------------------------------------------------------
- # Determine verbosity. VERBOSE_SHOW should be prepended to every command which
- # should only be displayed if VERBOSE is set. QUIET_ECHO may be used to
- # echo text only if VERBOSE is not set. Typically, a VERBOSE_SHOW command will
- # be paired with a QUIET_ECHO command, to provide a command which is displayed
- # in VERBOSE mode, along with text which is displayed in non-VERBOSE mode to
- # describe the command.
- #
- # No matter what VERBOSE is defined to, it ends up as true if it's defined.
- # This will be weird if you defined VERBOSE=false in the environment, and we
- # switch it to true here; but the meaning of VERBOSE is, "if it's defined to
- # any value, then verbosity is turned on". So don't define VERBOSE if you
- # don't want verbosity in the build process.
- # -----------------------------------------------------------------------------
- ifdef VERBOSE
- VERBOSE = true
- VERBOSE_ECHO = @ echo
- VERBOSE_SHOW =
- QUIET_ECHO = @ echo >nul
- else
- VERBOSE = false
- VERBOSE_ECHO = @ echo >nul
- VERBOSE_SHOW = @
- QUIET_ECHO = @ echo
- endif
- # --------------------------------------------------------------------------
- # BUILD directory
- ifndef BUILD
- ifdef DEBUG
- BUILD := build-debug
- else
- BUILD := build
- endif
- 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
- ifdef DEBUG
- CFLAGS := -g
- else
- CFLAGS := -O3
- endif
- 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 -DSLEEP_UNITS_PER_SECOND=1000 \
- -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
- $(QUIET_ECHO) $(DESTDIR)/bin/s3.exe: Installing executable
- - @ mkdir $(DESTDIR)\bin 2>&1 | echo >nul
- $(VERBOSE_SHOW) copy $(BUILD)\bin\s3.exe $(DESTDIR)\bin\s3.exe >nul
- $(QUIET_ECHO) $(DESTDIR)/bin/libs3/dll: Installing dynamic library
- $(VERBOSE_SHOW) copy $(BUILD)\bin\libs3.dll $(DESTDIR)\bin\libs3.dll >nul
- $(QUIET_ECHO) $(DESTDIR)/lib/libs3.a: Installing static library
- - @ mkdir $(DESTDIR)\lib 2>&1 | echo >nul
- $(VERBOSE_SHOW) copy $(BUILD)\lib\libs3.a $(DESTDIR)\lib\libs3.a >nul
- $(QUIET_ECHO) $(DESTDIR)/lib/libs3.def: Installing def file
- $(VERBOSE_SHOW) copy mswin\libs3.def $(DESTDIR)\lib\libs3.def >nul
- - @ mkdir $(DESTDIR)\include 2>&1 | echo >nul
- $(QUIET_ECHO) $(DESTDIR)/include/libs3.h: Copying header
- $(VERBOSE_SHOW) copy $(BUILD)\include\libs3.h \
- $(DESTDIR)\include\libs3.h >nul
- $(QUIET_ECHO) $(DESTDIR)/LICENSE: Copying license
- $(VERBOSE_SHOW) copy LICENSE $(DESTDIR)\LICENSE >nul
- $(QUIET_ECHO) $(DESTDIR)/COPYING: Copying license
- $(VERBOSE_SHOW) copy COPYING $(DESTDIR)\COPYING >nul
- # --------------------------------------------------------------------------
- # Uninstall target
- .PHONY: uninstall
- uninstall:
- $(QUIET_ECHO) Installed files: Uninstalling
- $(VERBOSE_SHOW) \
- del $(DESTDIR)\bin\s3.exe \
- $(DESTDIR)\bin\libs3.dll \
- $(DESTDIR)\lib\libs3.a \
- $(DESTDIR)\lib\libs3.def \
- $(DESTDIR)\include\libs3.h \
- $(DESTDIR)\LICENSE \
- $(DESTDIR)\COPYING
- # --------------------------------------------------------------------------
- # Compile target patterns
- $(BUILD)/obj/%.o: src/%.c
- $(QUIET_ECHO) $@: Compiling object
- - @ mkdir $(subst /,\,$(dir $(BUILD)/dep/$<)) 2>&1 | echo >nul
- @ gcc $(CFLAGS) -M -MG -MQ $@ -DCOMPILINGDEPENDENCIES \
- -o $(BUILD)/dep/$(<:%.c=%.d) -c $<
- - @ mkdir $(subst /,\,$(dir $@)) 2>&1 | echo >nul
- $(VERBOSE_SHOW) gcc $(CFLAGS) -o $@ -c $<
- # --------------------------------------------------------------------------
- # libs3 library targets
- LIBS3_SHARED = $(BUILD)/bin/libs3.dll
- LIBS3_STATIC = $(BUILD)/lib/libs3.a
- .PHONY: libs3
- libs3: $(LIBS3_SHARED) $(BUILD)/lib/libs3.a
- LIBS3_SOURCES := src/bucket.c src/bucket_metadata.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/multipart.c \
- src/mingw_functions.c
- $(LIBS3_SHARED): $(LIBS3_SOURCES:src/%.c=$(BUILD)/obj/%.o)
- $(QUIET_ECHO) $@: Building dynamic library
- - @ mkdir $(subst /,\,$(dir $@)) 2>&1 | echo >nul
- $(VERBOSE_SHOW) gcc -shared -o $@ $^ $(LDFLAGS) -lws2_32
- $(LIBS3_STATIC): $(LIBS3_SHARED)
- $(QUIET_ECHO) $@: Building static library
- - @ mkdir $(subst /,\,$(dir $@)) 2>&1 | echo >nul
- $(VERBOSE_SHOW) 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
- $(QUIET_ECHO) $@: Building executable
- - @ mkdir $(subst /,\,$(dir $@)) 2>&1 | echo >nul
- $(VERBOSE_SHOW) gcc -o $@ $^ $(LDFLAGS) -lws2_32
- # --------------------------------------------------------------------------
- # libs3 header targets
- .PHONY: headers
- headers: $(BUILD)\include\libs3.h
- $(BUILD)\include\libs3.h: inc\libs3.h
- $(QUIET_ECHO) $@: Copying header
- - @ mkdir $(subst /,\,$(dir $@)) 2>&1 | echo >nul
- $(VERBOSE_SHOW) copy $< $@
- # --------------------------------------------------------------------------
- # Test targets
- .PHONY: test
- test: $(BUILD)/bin/testsimplexml
- $(BUILD)/bin/testsimplexml: $(BUILD)/obj/testsimplexml.o \
- $(BUILD)/obj/simplexml.o
- $(QUIET_ECHO) $@: Building executable
- - @ mkdir $(subst /,\,$(dir $@)) 2>&1 | echo >nul
- $(VERBOSE_SHOW) gcc -o $@ $^ $(LIBXML2_LIBS)
- # --------------------------------------------------------------------------
- # Clean target
- .PHONY: clean
- clean:
- $(QUIET_ECHO) $(BUILD): Cleaning
- $(VERBOSE_SHOW) mswin\rmrf.bat $(BUILD)
- # --------------------------------------------------------------------------
- # Clean dependencies target
- .PHONY: cleandeps
- cleandeps:
- $(QUIET_ECHO) $(BUILD)/dep: Cleaning dependencies
- $(VERBOSE_SHOW) mswin\rmrf.bat $(BUILD)\dep
- # --------------------------------------------------------------------------
- # Dependencies
- ALL_SOURCES := $(LIBS3_SOURCES) s3.c testsimplexml.c
- $(foreach i, $(ALL_SOURCES), $(eval -include $(BUILD)/dep/src/$(i:%.c=%.d)))
|