From 3989c45519cb63c20d746af9be94b59fcb903053 Mon Sep 17 00:00:00 2001
From: yangfl <yangfl@users.noreply.github.com>
Date: Sat, 15 Jul 2023 12:23:11 +0800
Subject: [PATCH 1/3] Rewrite Makefile

---
 Makefile        | 75 +++++++++++++++++++++++++++++++++++++++++--------
 simpleini.pc.in | 10 +++++++
 2 files changed, 73 insertions(+), 12 deletions(-)
 create mode 100644 simpleini.pc.in

diff --git a/Makefile b/Makefile
index 1c7eda729471..f4c21e2aa20c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,18 +1,69 @@
-# This makefile is just to build the automatic test harness
-# To use SimpleIni, just include SimpleIni.h header file 
+PROJECT = simpleini
 
-PREFIX?=	/usr/local
+MULTIARCH ?= $(shell $(CC) --print-multiarch)
 
-TOPTARGETS := all clean test
+PREFIX ?= /usr
+INCLUDEDIR ?= include
+LIBDIR ?= lib/$(MULTIARCH)
 
-SUBDIRS := tests
+CPPFLAGS += -DSI_CONVERT_ICU -DSI_SUPPORT_IOSTREAMS
 
-$(TOPTARGETS): $(SUBDIRS)
-$(SUBDIRS):
-	$(MAKE) -C $@ $(MAKECMDGOALS)
+HEADERS := $(wildcard *.h)
+SRCS := SimpleIni.cpp
+OBJS := $(SRCS:.cpp=.o)
 
-.PHONY: $(TOPTARGETS) $(SUBDIRS)
+LIB_NAME := lib$(PROJECT).so
+SO_NAME := $(LIB_NAME).1
+REAL_NAME := $(LIB_NAME).$(VERSION)
 
-install:
-	mkdir -p $(DESTDIR)$(PREFIX)/include/
-	install -C -m 644 SimpleIni.h $(DESTDIR)$(PREFIX)/include/
+ARLIB := lib$(PROJECT).a
+SHLIB := $(SO_NAME)
+PCFILE := $(PROJECT).pc
+
+.PHONY: all
+all: $(ARLIB) $(SHLIB) $(PCFILE)
+
+$(ARLIB): $(OBJS)
+	$(AR) rcs $@ $^
+
+$(SHLIB): $(OBJS)
+	$(CXX) -shared -Wl,-soname,$(SO_NAME) -o $@ $^ $(LDFLAGS) -licuuc
+
+SimpleIni.o: SimpleIni.cpp
+	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -fPIC -c -o $@ $^
+
+$(PCFILE): $(PCFILE).in
+	sed 's|@prefix@|$(PREFIX)|; s|@libdir@|$(LIBDIR)|; s|@includedir@|$(INCLUDEDIR)|; s|@version@|$(VERSION)|' $< > $@
+
+.PHONY: clean
+clean:
+	+$(MAKE) -C tests clean
+	rm -f $(ARLIB) $(SHLIB) $(OBJS) $(PCFILE) *.o testsi test*-out*.ini
+
+.PHONY: install-shared
+install-shared: $(SHLIB)
+	install -d $(DESTDIR)$(PREFIX)/$(LIBDIR) || true
+	install -m 0644 $< $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(REAL_NAME)
+	rm -f $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(SO_NAME)
+	ln -s $(REAL_NAME) $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(SO_NAME)
+	rm -f $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(LIB_NAME)
+	ln -s $(SO_NAME) $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(LIB_NAME)
+
+.PHONY: install-static
+install-static: $(ARLIB)
+	install -d $(DESTDIR)$(PREFIX)/$(LIBDIR) || true
+	install -m 0644 $< $(DESTDIR)$(PREFIX)/$(LIBDIR)/$(ARLIB)
+
+.PHONY: install-header
+install-header: $(HEADERS) $(PCFILE)
+	install -d $(DESTDIR)$(PREFIX)/$(INCLUDEDIR) || true
+	install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/$(INCLUDEDIR)/
+	install -d $(DESTDIR)$(PREFIX)/$(LIBDIR)/pkgconfig || true
+	install -m 0644 $(PCFILE) $(DESTDIR)$(PREFIX)/$(LIBDIR)/pkgconfig
+
+.PHONY: install
+install: install-shared install-static install-header
+
+.PHONY: test
+test:
+	+$(MAKE) -C tests
diff --git a/simpleini.pc.in b/simpleini.pc.in
new file mode 100644
index 000000000000..93cbb989a9fd
--- /dev/null
+++ b/simpleini.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+libdir=${prefix}/@libdir@
+includedir=${prefix}/@includedir@
+
+Name: simpleini
+Description: C++ library for INI-style configuration files
+Version: @version@
+Requires: icu-io
+Libs: -L${libdir} -lsimpleini
+Cflags: -I${includedir}
-- 
2.43.0

