mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-22 20:45:59 +01:00
Unbreak CMake build on FreeBSD (#2209)
* cmake: unbreak on non-GNU after 474ada9267
CMake Error at CMakeLists.txt:121 (target_link_libraries):
The keyword signature for target_link_libraries has already been used with
the target "Hyprland". All uses of target_link_libraries with a target
must be either all-keyword or all-plain.
The uses of the keyword signature are here:
* CMakeLists.txt:107 (target_link_libraries)
Fixes https://github.com/hyprwm/Hyprland/issues/1780
* cmake: always link with dependencies via imported targets
On BSD systems base compiler by default only looks for headers and
libraries from base system. For dependencies from packages extra flags
are necessary.
ld: error: unable to find library -lxcb
ld: error: unable to find library -lpixman-1
ld: error: unable to find library -lOpenGL
ld: error: unable to find library -lGLESv2
* make: use same make in recursive calls
On BSDs `make` is BSD make while `gmake` is GNU make
* make: work around GNU vs. BSD sed -i incompatibility
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=254091
* make: replace GNU make extension with POSIX sh
`$(shell ...)` in GNU make is similar to `${:!..!}` in BSD make
* make: fall back when nproc isn't available
Only FreeBSD added nproc for compatibility with Linux.
* make: unbreak hyprctl on Clang-based systems
/bin/sh: g++: not found
error: invalid value 'c++23' in '-std=c++23'
* make: create lib/ before copying libwlroots.so there
$ make install PREFIX=/tmp/test
[...]
cp: directory /tmp/test/lib does not exist
* make: pass cp(1) flags before arguments
cp: -f is not a directory
* make: replace install -Dt with mkdir
install: illegal option -- t
* make: replace cp --parents with cpio -dump
cp: illegal option -- -
* make: limit pkg-config workaround to Linux when run as root
/usr/share/pkgconfig doesn't exist on BSDs or may not be writable.
This commit is contained in:
parent
c949173bc9
commit
609c7ab6b5
3 changed files with 43 additions and 43 deletions
|
@ -86,7 +86,8 @@ message(STATUS "Checking deps...")
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
pkg_check_modules(deps REQUIRED IMPORTED_TARGET wayland-server wayland-client wayland-cursor wayland-protocols cairo libdrm egl xkbcommon libinput pango pangocairo) # we do not check for wlroots, as we provide it ourselves
|
find_package(OpenGL REQUIRED)
|
||||||
|
pkg_check_modules(deps REQUIRED IMPORTED_TARGET wayland-server wayland-client wayland-cursor wayland-protocols cairo libdrm xkbcommon libinput pango pangocairo pixman-1) # we do not check for wlroots, as we provide it ourselves
|
||||||
|
|
||||||
file(GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp")
|
file(GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp")
|
||||||
|
|
||||||
|
@ -104,7 +105,7 @@ endif()
|
||||||
include(CheckLibraryExists)
|
include(CheckLibraryExists)
|
||||||
check_library_exists(execinfo backtrace "" HAVE_LIBEXECINFO)
|
check_library_exists(execinfo backtrace "" HAVE_LIBEXECINFO)
|
||||||
if(HAVE_LIBEXECINFO)
|
if(HAVE_LIBEXECINFO)
|
||||||
target_link_libraries(Hyprland PRIVATE execinfo)
|
target_link_libraries(Hyprland execinfo)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(LEGACY_RENDERER)
|
if(LEGACY_RENDERER)
|
||||||
|
@ -117,8 +118,8 @@ if(NO_XWAYLAND)
|
||||||
add_compile_definitions(NO_XWAYLAND)
|
add_compile_definitions(NO_XWAYLAND)
|
||||||
else()
|
else()
|
||||||
message(STATUS "XWAYLAND Enabled (NO_XWAYLAND not defined) checking deps...")
|
message(STATUS "XWAYLAND Enabled (NO_XWAYLAND not defined) checking deps...")
|
||||||
pkg_check_modules(xcbdep REQUIRED xcb)
|
pkg_check_modules(xcbdep REQUIRED IMPORTED_TARGET xcb)
|
||||||
target_link_libraries(Hyprland xcb)
|
target_link_libraries(Hyprland PkgConfig::xcbdep)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NO_SYSTEMD)
|
if(NO_SYSTEMD)
|
||||||
|
@ -175,11 +176,9 @@ target_link_libraries(Hyprland PkgConfig::deps)
|
||||||
|
|
||||||
target_link_libraries(Hyprland
|
target_link_libraries(Hyprland
|
||||||
${CMAKE_SOURCE_DIR}/subprojects/wlroots/build/libwlroots.so.12032 # wlroots is provided by us
|
${CMAKE_SOURCE_DIR}/subprojects/wlroots/build/libwlroots.so.12032 # wlroots is provided by us
|
||||||
pixman-1
|
OpenGL::EGL
|
||||||
OpenGL
|
OpenGL::GL
|
||||||
GLESv2
|
Threads::Threads
|
||||||
pthread
|
|
||||||
${CMAKE_THREAD_LIBS_INIT}
|
|
||||||
${CMAKE_SOURCE_DIR}/subprojects/udis86/build/libudis86/liblibudis86.a
|
${CMAKE_SOURCE_DIR}/subprojects/udis86/build/libudis86/liblibudis86.a
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
67
Makefile
67
Makefile
|
@ -2,19 +2,19 @@ PREFIX = /usr/local
|
||||||
|
|
||||||
legacyrenderer:
|
legacyrenderer:
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DLEGACY_RENDERER:BOOL=true -S . -B ./build -G Ninja
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DLEGACY_RENDERER:BOOL=true -S . -B ./build -G Ninja
|
||||||
cmake --build ./build --config Release --target all -j$(shell nproc)
|
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
|
|
||||||
legacyrendererdebug:
|
legacyrendererdebug:
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DLEGACY_RENDERER:BOOL=true -S . -B ./build -G Ninja
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DLEGACY_RENDERER:BOOL=true -S . -B ./build -G Ninja
|
||||||
cmake --build ./build --config Release --target all -j$(shell nproc)
|
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
|
|
||||||
release:
|
release:
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build -G Ninja
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build -G Ninja
|
||||||
cmake --build ./build --config Release --target all -j$(shell nproc)
|
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -S . -B ./build -G Ninja
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -S . -B ./build -G Ninja
|
||||||
cmake --build ./build --config Debug --target all -j$(shell nproc)
|
cmake --build ./build --config Debug --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
|
|
||||||
clear:
|
clear:
|
||||||
rm -rf build
|
rm -rf build
|
||||||
|
@ -23,47 +23,48 @@ clear:
|
||||||
rm -rf ./subprojects/wlroots/build
|
rm -rf ./subprojects/wlroots/build
|
||||||
|
|
||||||
all:
|
all:
|
||||||
make clear
|
$(MAKE) clear
|
||||||
make fixwlr
|
$(MAKE) fixwlr
|
||||||
cd ./subprojects/wlroots && meson setup build/ --buildtype=release && ninja -C build/ && cp ./build/libwlroots.so.12032 ${PREFIX}/lib/ || echo "Could not install libwlroots to ${PREFIX}/lib/libwlroots.so.12032"
|
cd ./subprojects/wlroots && meson setup build/ --buildtype=release && ninja -C build/ && mkdir -p ${PREFIX}/lib/ && cp ./build/libwlroots.so.12032 ${PREFIX}/lib/ || echo "Could not install libwlroots to ${PREFIX}/lib/libwlroots.so.12032"
|
||||||
cd subprojects/udis86 && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B./build -G Ninja && cmake --build ./build --config Release --target all -j$(shell nproc)
|
cd subprojects/udis86 && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B./build -G Ninja && cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
make release
|
$(MAKE) release
|
||||||
make -C hyprctl all
|
$(MAKE) -C hyprctl all
|
||||||
|
|
||||||
install:
|
install:
|
||||||
make clear
|
$(MAKE) clear
|
||||||
make fixwlr
|
$(MAKE) fixwlr
|
||||||
cd ./subprojects/wlroots && meson setup build/ --buildtype=release && ninja -C build/ && cp ./build/libwlroots.so.12032 ${PREFIX}/lib/ || echo "Could not install libwlroots to ${PREFIX}/lib/libwlroots.so.12032"
|
cd ./subprojects/wlroots && meson setup build/ --buildtype=release && ninja -C build/ && mkdir -p ${PREFIX}/lib/ && cp ./build/libwlroots.so.12032 ${PREFIX}/lib/ || echo "Could not install libwlroots to ${PREFIX}/lib/libwlroots.so.12032"
|
||||||
cd subprojects/udis86 && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B./build -G Ninja && cmake --build ./build --config Release --target all -j$(shell nproc) && cd ../..
|
cd subprojects/udis86 && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B./build -G Ninja && cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF` && cd ../..
|
||||||
make release
|
$(MAKE) release
|
||||||
make -C hyprctl all
|
$(MAKE) -C hyprctl all
|
||||||
|
|
||||||
mkdir -p ${PREFIX}/share/wayland-sessions
|
mkdir -p ${PREFIX}/share/wayland-sessions
|
||||||
mkdir -p ${PREFIX}/bin
|
mkdir -p ${PREFIX}/bin
|
||||||
cp ./build/Hyprland ${PREFIX}/bin -f
|
cp -f ./build/Hyprland ${PREFIX}/bin
|
||||||
cp ./hyprctl/hyprctl ${PREFIX}/bin -f
|
cp -f ./hyprctl/hyprctl ${PREFIX}/bin
|
||||||
if [ ! -f ${PREFIX}/share/wayland-sessions/hyprland.desktop ]; then cp ./example/hyprland.desktop ${PREFIX}/share/wayland-sessions; fi
|
if [ ! -f ${PREFIX}/share/wayland-sessions/hyprland.desktop ]; then cp ./example/hyprland.desktop ${PREFIX}/share/wayland-sessions; fi
|
||||||
mkdir -p ${PREFIX}/share/hyprland
|
mkdir -p ${PREFIX}/share/hyprland
|
||||||
cp ./assets/wall_2K.png ${PREFIX}/share/hyprland
|
cp ./assets/wall_2K.png ${PREFIX}/share/hyprland
|
||||||
cp ./assets/wall_4K.png ${PREFIX}/share/hyprland
|
cp ./assets/wall_4K.png ${PREFIX}/share/hyprland
|
||||||
cp ./assets/wall_8K.png ${PREFIX}/share/hyprland
|
cp ./assets/wall_8K.png ${PREFIX}/share/hyprland
|
||||||
|
|
||||||
install -Dm644 -t ${PREFIX}/share/man/man1 ./docs/*.1
|
mkdir -p ${PREFIX}/share/man/man1
|
||||||
|
install -m644 ./docs/*.1 ${PREFIX}/share/man/man1
|
||||||
|
|
||||||
mkdir -p ${PREFIX}/include/hyprland
|
mkdir -p ${PREFIX}/include/hyprland
|
||||||
mkdir -p ${PREFIX}/include/hyprland/protocols
|
mkdir -p ${PREFIX}/include/hyprland/protocols
|
||||||
mkdir -p ${PREFIX}/include/hyprland/wlroots
|
mkdir -p ${PREFIX}/include/hyprland/wlroots
|
||||||
mkdir -p ${PREFIX}/share/pkgconfig
|
mkdir -p ${PREFIX}/share/pkgconfig
|
||||||
|
|
||||||
find src -name '*.h*' -exec cp --parents '{}' ${PREFIX}/include/hyprland ';'
|
find src -name '*.h*' -print0 | cpio --quiet -0dump ${PREFIX}/include/hyprland
|
||||||
cd subprojects/wlroots/include && find . -name '*.h*' -exec cp --parents '{}' ${PREFIX}/include/hyprland/wlroots ';' && cd ../../..
|
cd subprojects/wlroots/include && find . -name '*.h*' -print0 | cpio --quiet -0dump ${PREFIX}/include/hyprland/wlroots && cd ../../..
|
||||||
cp ./protocols/*-protocol.h ${PREFIX}/include/hyprland/protocols
|
cp ./protocols/*-protocol.h ${PREFIX}/include/hyprland/protocols
|
||||||
cp ./build/hyprland.pc ${PREFIX}/share/pkgconfig
|
cp ./build/hyprland.pc ${PREFIX}/share/pkgconfig
|
||||||
cp ./build/hyprland.pc /usr/share/pkgconfig
|
if [ -d /usr/share/pkgconfig ]; then cp ./build/hyprland.pc /usr/share/pkgconfig 2>/dev/null || true; fi
|
||||||
|
|
||||||
cleaninstall:
|
cleaninstall:
|
||||||
echo -en "make cleaninstall has been DEPRECATED, you should avoid using it in the future.\nRunning make install instead...\n"
|
echo -en "$(MAKE) cleaninstall has been DEPRECATED, you should avoid using it in the future.\nRunning $(MAKE) install instead...\n"
|
||||||
make install
|
$(MAKE) install
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
rm -f ${PREFIX}/share/wayland-sessions/hyprland.desktop
|
rm -f ${PREFIX}/share/wayland-sessions/hyprland.desktop
|
||||||
|
@ -75,24 +76,24 @@ uninstall:
|
||||||
rm -f ${PREFIX}/share/man/man1/hyprctl.1
|
rm -f ${PREFIX}/share/man/man1/hyprctl.1
|
||||||
|
|
||||||
fixwlr:
|
fixwlr:
|
||||||
sed -i -E 's/(soversion = 12)([^032]|$$)/soversion = 12032/g' subprojects/wlroots/meson.build
|
sed -E -i -e 's/(soversion = 12)([^032]|$$)/soversion = 12032/g' subprojects/wlroots/meson.build
|
||||||
|
|
||||||
rm -rf ./subprojects/wlroots/build
|
rm -rf ./subprojects/wlroots/build
|
||||||
|
|
||||||
config:
|
config:
|
||||||
make fixwlr
|
$(MAKE) fixwlr
|
||||||
|
|
||||||
meson setup subprojects/wlroots/build subprojects/wlroots --prefix=${PREFIX} --buildtype=release -Dwerror=false -Dexamples=false
|
meson setup subprojects/wlroots/build subprojects/wlroots --prefix=${PREFIX} --buildtype=release -Dwerror=false -Dexamples=false
|
||||||
ninja -C subprojects/wlroots/build/
|
ninja -C subprojects/wlroots/build/
|
||||||
|
|
||||||
ninja -C subprojects/wlroots/build/ install
|
ninja -C subprojects/wlroots/build/ install
|
||||||
|
|
||||||
cd subprojects/udis86 && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build -G Ninja && cmake --build ./build --config Release --target all -j$(shell nproc)
|
cd subprojects/udis86 && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build -G Ninja && cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
|
|
||||||
pluginenv:
|
pluginenv:
|
||||||
cd subprojects/udis86 && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build -G Ninja && cmake --build ./build --config Release --target all -j$(shell nproc)
|
cd subprojects/udis86 && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build -G Ninja && cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
|
|
||||||
make fixwlr
|
$(MAKE) fixwlr
|
||||||
|
|
||||||
meson setup subprojects/wlroots/build subprojects/wlroots --prefix=${PREFIX} --buildtype=release -Dwerror=false -Dexamples=false
|
meson setup subprojects/wlroots/build subprojects/wlroots --prefix=${PREFIX} --buildtype=release -Dwerror=false -Dexamples=false
|
||||||
ninja -C subprojects/wlroots/build/
|
ninja -C subprojects/wlroots/build/
|
||||||
|
@ -104,14 +105,14 @@ pluginenv:
|
||||||
mkdir -p ${PREFIX}/include/hyprland/wlroots
|
mkdir -p ${PREFIX}/include/hyprland/wlroots
|
||||||
mkdir -p ${PREFIX}/share/pkgconfig
|
mkdir -p ${PREFIX}/share/pkgconfig
|
||||||
|
|
||||||
find src -name '*.h*' -exec cp --parents '{}' ${PREFIX}/include/hyprland ';'
|
find src -name '*.h*' -print0 | cpio --quiet -0dump ${PREFIX}/include/hyprland
|
||||||
cd subprojects/wlroots/include && find . -name '*.h*' -exec cp --parents '{}' ${PREFIX}/include/hyprland/wlroots ';' && cd ../../..
|
cd subprojects/wlroots/include && find . -name '*.h*' -print0 | cpio --quiet -0dump ${PREFIX}/include/hyprland/wlroots && cd ../../..
|
||||||
cp ./protocols/*-protocol.h ${PREFIX}/include/hyprland/protocols
|
cp ./protocols/*-protocol.h ${PREFIX}/include/hyprland/protocols
|
||||||
cp ./build/hyprland.pc ${PREFIX}/share/pkgconfig
|
cp ./build/hyprland.pc ${PREFIX}/share/pkgconfig
|
||||||
cp ./build/hyprland.pc /usr/share/pkgconfig
|
if [ -d /usr/share/pkgconfig ]; then cp ./build/hyprland.pc /usr/share/pkgconfig 2>/dev/null || true; fi
|
||||||
|
|
||||||
configdebug:
|
configdebug:
|
||||||
make fixwlr
|
$(MAKE) fixwlr
|
||||||
|
|
||||||
meson setup subprojects/wlroots/build subprojects/wlroots --prefix=${PREFIX} --buildtype=debug -Dwerror=false -Dexamples=false -Db_sanitize=address
|
meson setup subprojects/wlroots/build subprojects/wlroots --prefix=${PREFIX} --buildtype=debug -Dwerror=false -Dexamples=false -Db_sanitize=address
|
||||||
ninja -C subprojects/wlroots/build/
|
ninja -C subprojects/wlroots/build/
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
all:
|
all:
|
||||||
g++ -std=c++23 ./main.cpp -o ./hyprctl
|
$(CXX) -std=c++2b ./main.cpp -o ./hyprctl
|
||||||
clean:
|
clean:
|
||||||
rm ./hyprctl
|
rm ./hyprctl
|
||||||
|
|
Loading…
Reference in a new issue