Patchwork [c-hglib] Makefile: create a Makefile to build the hglib shared library

login
register
mail settings
Submitter Iulian Stana
Date Feb. 24, 2014, 6:33 p.m.
Message ID <3450b2bacd1bc27126dc.1393266783@doppler>
Download mbox | patch
Permalink /patch/3743/
State Accepted
Headers show

Comments

Iulian Stana - Feb. 24, 2014, 6:33 p.m.
# HG changeset patch
# User Iulian Stana and Giovanni Gherdovich <g.gherdovich@gmail.com>
# Date 1386352529 -7200
#      Fri Dec 06 19:55:29 2013 +0200
# Node ID 3450b2bacd1bc27126dcfab980463051f2057447
# Parent  d2f51737f8b2b819796c660b8fb5728862684ccc
Makefile: create a Makefile to build the hglib shared library

There are 5 types of targets: build, install, uninstall, examples, clean
 - the build target will create the shared library in the current directory.
 - the install target will create the shared library in the current directory
   and will copy it to the local directory.
 - the uninstall target will remove the shared library from the local directory
 - the examples target will create an executable file for each example
 - the clean target will clean the entire repository from build artifacts and
   binaries
Matt Mackall - Feb. 24, 2014, 8:52 p.m.
On Mon, 2014-02-24 at 20:33 +0200, julian.stana@gmail.com wrote:
> # HG changeset patch
> # User Iulian Stana and Giovanni Gherdovich <g.gherdovich@gmail.com>
> # Date 1386352529 -7200
> #      Fri Dec 06 19:55:29 2013 +0200
> # Node ID 3450b2bacd1bc27126dcfab980463051f2057447
> # Parent  d2f51737f8b2b819796c660b8fb5728862684ccc
> Makefile: create a Makefile to build the hglib shared library

Queued, thanks.

Patch

diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,78 @@ 
+CC = gcc
+CFLAGS = -Wall -g -std=c89
+
+HGLIB_OBJ= hglib/client.o hglib/utils.o
+SHARED_LIBRARY = hg
+
+EXAMPLE_FILES = examples/export-import \
+		examples/import \
+		examples/init \
+		examples/log \
+		examples/merge \
+		examples/verify
+EXAMPLES_TARGETS = $(EXAMPLE_FILES:=_level0)
+
+SHARED_LIB_PATH = /usr/local/lib
+HGLIB_DIR_PATH = ./hglib
+EXAMPLES_DIR_PATH = ./examples
+
+
+# Build Target
+##############
+build: lib$(SHARED_LIBRARY).so
+
+
+# Help
+######
+help:
+	@echo 'Commonly used make targets:'
+	@echo '  build        - build the shared library in the local directory'
+	@echo '  install      - install the shared library to PREFIX ($(SHARED_LIB_PATH))'
+	@echo '  examples     - build example executable'
+	@echo '  clean        - remove files created by other targets'
+	@echo '  uninstall    - uninstall the shared library'
+
+
+# Install
+#########
+install: lib$(SHARED_LIBRARY).so
+	cp -uf lib$(SHARED_LIBRARY).so $(SHARED_LIB_PATH)
+
+uninstall:
+	rm -f $(SHARED_LIB_PATH)/lib$(SHARED_LIBRARY).so
+
+
+# Shared Library
+################
+lib$(SHARED_LIBRARY).so: $(HGLIB_OBJ)
+	$(CC) -shared $(HGLIB_OBJ) -o lib$(SHARED_LIBRARY).so
+
+hglib/%.o: hglib/%.c
+	$(CC) $(CFLAGS) -fPIC -c $< -o $@
+
+
+# Examples
+##########
+examples: build $(EXAMPLE_FILES)
+
+examples/%: examples/%.o
+	$(CC) $(CFLAGS) $< -o $@_level0 -l$(SHARED_LIBRARY) -L.
+
+examples/%.o: examples/%.c
+	$(CC) $(CFLAGS) -c $< -o $@ -I$(HGLIB_DIR_PATH)
+
+
+# Clean
+#######
+clean: cleanex cleanhg
+	rm -f *.o *~
+	rm -f lib$(SHARED_LIBRARY).so
+
+cleanex:
+	rm -f $(EXAMPLES_DIR_PATH)/*.o $(EXAMPLES_DIR_PATH)/*~
+	rm -f $(EXAMPLES_TARGETS)
+
+cleanhg:
+	rm -f $(HGLIB_DIR_PATH)/*.o $(HGLIB_DIR_PATH)/*~
+
+.PHONY: build clean install uninstall examples