Skip to content

Commit 4c4db2a

Browse files
committed
.pc file
1 parent 0ec59cf commit 4c4db2a

File tree

4 files changed

+60
-7
lines changed

4 files changed

+60
-7
lines changed

CMakeLists.txt

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ ENDIF()
3131

3232
INCLUDE_DIRECTORIES(include)
3333

34+
# get version from header file
35+
FILE(READ "include/dirtrav_version.h" VERSION_HEADER)
36+
STRING(REGEX REPLACE "^.*#define DIRTRAV_VERSION_MAJOR ([0-9]+).*#define DIRTRAV_VERSION_MINOR ([0-9]+).*#define DIRTRAV_VERSION_MICRO ([0-9]+).*$" "\\1.\\2.\\3" PARSED_VERSION "${VERSION_HEADER}")
37+
MESSAGE(STATUS "Version of ${PROJECT_NAME}: ${PARSED_VERSION}")
38+
39+
# other project information
40+
SET(DIRTRAV_PROJECT_DESCRIPTION "Cross-platform C library for recursively traversing directory contents")
41+
SET(DIRTRAVW_PROJECT_DESCRIPTION "${DIRTRAV_PROJECT_DESCRIPTION} - Windows wide character version")
42+
3443
# build definitions
3544
SET(ALLTARGETS)
3645
SET(LINKTYPES)
@@ -42,7 +51,9 @@ IF(BUILD_SHARED)
4251
ENDIF()
4352

4453
IF(WIN32)
45-
SET(WIN32_LIBS -lmpr -lshlwapi)
54+
SET(DEPENDENCY_LIBS -lmpr -lshlwapi)
55+
ELSE()
56+
SET(DEPENDENCY_LIBS)
4657
ENDIF()
4758

4859
FOREACH(LINKTYPE ${LINKTYPES})
@@ -52,7 +63,7 @@ FOREACH(LINKTYPE ${LINKTYPES})
5263
SET_TARGET_PROPERTIES(dirtrav_${LINKTYPE} PROPERTIES OUTPUT_NAME dirtrav)
5364
TARGET_INCLUDE_DIRECTORIES(dirtrav_${LINKTYPE} PRIVATE lib)
5465
IF(WIN32 AND "${LINKTYPE}" STREQUAL "SHARED")
55-
TARGET_LINK_LIBRARIES(dirtrav_${LINKTYPE} ${WIN32_LIBS})
66+
TARGET_LINK_LIBRARIES(dirtrav_${LINKTYPE} ${DEPENDENCY_LIBS})
5667
ENDIF()
5768
SET(ALLTARGETS ${ALLTARGETS} dirtrav_${LINKTYPE})
5869

@@ -63,17 +74,34 @@ FOREACH(LINKTYPE ${LINKTYPES})
6374
SET_TARGET_PROPERTIES(dirtravw_${LINKTYPE} PROPERTIES OUTPUT_NAME dirtravw)
6475
TARGET_INCLUDE_DIRECTORIES(dirtravw_${LINKTYPE} PRIVATE lib)
6576
IF(WIN32 AND "${LINKTYPE}" STREQUAL "SHARED")
66-
TARGET_LINK_LIBRARIES(dirtravw_${LINKTYPE} ${WIN32_LIBS})
77+
TARGET_LINK_LIBRARIES(dirtravw_${LINKTYPE} ${DEPENDENCY_LIBS})
6778
ENDIF()
6879
SET(ALLTARGETS ${ALLTARGETS} dirtravw_${LINKTYPE})
6980
ENDIF()
7081

7182
SET(EXELINKTYPE ${LINKTYPE})
7283
ENDFOREACH()
7384

85+
LIST(JOIN DEPENDENCY_LIBS " " PC_STATIC_DEPENDENCIES)
86+
SET(PC_PROJECT_NAME "libdirtrav")
87+
SET(PC_PROJECT_DESCRIPTION "${DIRTRAV_PROJECT_DESCRIPTION}")
88+
SET(PC_LINK_LIBRARY "dirtrav")
89+
SET(PC_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
90+
CONFIGURE_FILE(pkgconfig.pc.in libdirtrav.pc @ONLY)
91+
INSTALL(FILES libdirtrav.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
92+
93+
IF(WITH_WIDE)
94+
SET(PC_PROJECT_NAME "libdirtravw")
95+
SET(PC_PROJECT_DESCRIPTION "${DIRTRAVW_PROJECT_DESCRIPTION}")
96+
SET(PC_LINK_LIBRARY "dirtravw")
97+
SET(PC_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
98+
CONFIGURE_FILE(pkgconfig.pc.in libdirtravw.pc @ONLY)
99+
INSTALL(FILES libdirtravw.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
100+
ENDIF()
101+
74102
IF(BUILD_TOOLS)
75103
IF(WIN32 AND "${EXELINKTYPE}" STREQUAL "STATIC")
76-
SET(TOOLS_LIBS ${WIN32_LIBS})
104+
SET(TOOLS_LIBS ${DEPENDENCY_LIBS})
77105
ELSE()
78106
SET(TOOLS_LIBS)
79107
ENDIF()

Changelog.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
0.2.24
22

3+
* generate pkg-config .pc file in Makefile and CMakeLists.txt
4+
35
0.2.23
46

57
2025-11-04 Brecht Sanders https://github.com/brechtsanders/

Makefile

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ EXAMPLES_BIN = test1$(BINEXT)
8181
COMMON_PACKAGE_FILES = README.md LICENSE Changelog.txt
8282
SOURCE_PACKAGE_FILES = $(COMMON_PACKAGE_FILES) Makefile CMakeLists.txt doc/Doxyfile include/*.h src/*.c build/*.workspace build/*.cbp build/*.depend
8383

84+
PC_FILEBASE := dirtrav
85+
PC_DESCRIPTION := Cross-platform C library for recursively traversing directory contents
86+
ifneq ($(BUILD_WIDE),)
87+
PC_FILEBASE := $(PC_FILEBASE)w
88+
PC_DESCRIPTION := $(PC_DESCRIPTION) - Windows wide character version
89+
endif
90+
8491
default: all
8592

8693
all: static-lib shared-lib $(TOOLS_BIN)
@@ -122,6 +129,10 @@ static-lib: $(LIBPREFIX)dirtrav$(LIBEXT) $(STATIC_LIB_WIDE)
122129

123130
shared-lib: $(LIBPREFIX)dirtrav$(SOEXT) $(SHARED_LIB_WIDE)
124131

132+
pkg-config: lib$(PC_FILEBASE).pc
133+
lib$(PC_FILEBASE).pc: version
134+
sed -e "s?@PC_PROJECT_DESCRIPTION@?$(PC_DESCRIPTION)?; s?@PC_PROJECT_NAME@?$(@:.pc=)?; s?@CMAKE_INSTALL_PREFIX@?$(PREFIX)?; s?@PARSED_VERSION@?$(shell cat version)?; s?@PC_LINK_LIBRARY@?$(PC_FILEBASE)?; s?@PC_STATIC_DEPENDENCIES@?$(libdirtrav_LDFLAGS)?" pkgconfig.pc.in > $@
135+
125136
#tree.o: src/tree.c
126137
# $(CC) -c -o $@ $< $(CFLAGS)
127138

@@ -151,10 +162,11 @@ ifdef DOXYGEN
151162
$(DOXYGEN) doc/Doxyfile
152163
endif
153164

154-
install: all doc
155-
$(MKDIR) $(PREFIX)/include $(PREFIX)/lib $(PREFIX)/bin
165+
install: all pkg-config doc
166+
$(MKDIR) $(PREFIX)/include $(PREFIX)/lib/pkgconfig $(PREFIX)/bin
156167
$(CP) include/*.h $(PREFIX)/include/
157168
$(CP) *$(LIBEXT) $(PREFIX)/lib/
169+
$(CP) lib$(PC_FILEBASE).pc $(PREFIX)/lib/pkgconfig/
158170
ifeq ($(OS),Windows_NT)
159171
$(CP) *$(SOEXT) $(PREFIX)/bin/
160172
else
@@ -193,7 +205,7 @@ endif
193205

194206
.PHONY: clean
195207
clean:
196-
$(RM) src/*.o *$(LIBEXT) *$(SOEXT) $(TOOLS_BIN) $(EXAMPLES_BIN) version libdirtrav-*.tar.xz doc/doxygen_sqlite3.db
208+
$(RM) src/*.o *$(LIBEXT) *$(SOEXT) *.pc $(TOOLS_BIN) $(EXAMPLES_BIN) version libdirtrav-*.tar.xz doc/doxygen_sqlite3.db
197209
ifeq ($(OS),Windows_NT)
198210
$(RM) *.def
199211
endif

pkgconfig.pc.in

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
exec_prefix=${prefix}
3+
libdir=${prefix}/lib
4+
includedir=${prefix}/include
5+
6+
Name: @PC_PROJECT_NAME@
7+
Description: @PC_PROJECT_DESCRIPTION@
8+
Version: @PARSED_VERSION@
9+
Cflags: -I${includedir}
10+
Libs: -L${libdir} -l@PC_LINK_LIBRARY@
11+
Libs.private: @PC_STATIC_DEPENDENCIES@

0 commit comments

Comments
 (0)