Handle relative vs absolute paths for .pc file variables
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0aaea9d..096a5c1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -607,6 +607,17 @@
         )
     endif()
 
+    # Handle both relative and absolute paths (e.g. NixOS) for a relocatable package
+    if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
+        set(PC_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}")
+    else()
+        set(PC_INCLUDEDIR "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
+    endif()
+    if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
+        set(PC_LIBDIR "${CMAKE_INSTALL_LIBDIR}")
+    else()
+        set(PC_LIBDIR "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
+    endif()
     configure_file(libavif.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libavif.pc @ONLY)
     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libavif.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
 endif()
diff --git a/libavif.pc.cmake b/libavif.pc.cmake
index f87d289..c091443 100644
--- a/libavif.pc.cmake
+++ b/libavif.pc.cmake
@@ -1,7 +1,7 @@
 prefix=@CMAKE_INSTALL_PREFIX@
-exec_prefix=@CMAKE_INSTALL_PREFIX@
-libdir=@CMAKE_INSTALL_FULL_LIBDIR@
-includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
+exec_prefix=${prefix}
+libdir=@PC_LIBDIR@
+includedir=@PC_INCLUDEDIR@
 
 Name: @PROJECT_NAME@
 Description: Library for encoding and decoding .avif files