diff --git a/CMakeLists.txt b/CMakeLists.txt index 536a823..5da1198 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ add_library(vroot STATIC lib/vroot/unlink.cc ) -add_executable(somake +add_executable(${PROJECT_NAME} bin/ar.cc bin/depvar.cc bin/doname.cc bin/dosys.cc bin/files.cc bin/globals.cc bin/implicit.cc bin/macro.cc bin/main.cc bin/misc.cc bin/nse_printdep.cc bin/parallel.cc @@ -28,12 +28,22 @@ add_executable(somake comp/progname.c ) -set_property(TARGET somake mksh vroot PROPERTY INCLUDE_DIRECTORIES +set_property(TARGET ${PROJECT_NAME} mksh vroot PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR} ) -target_link_libraries(somake +target_link_libraries(${PROJECT_NAME} mksh vroot pthread ) +install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin) +install(FILES man/man1/make.1 DESTINATION share/man/man1) +install(FILES bin/make.rules.file DESTINATION share/${PROJECT_NAME} + RENAME make.rules) +install(FILES bin/svr4.make.rules.file DESTINATION share/${PROJECT_NAME} + RENAME svr4.make.rules) +install(FILES README.md DESTINATION share/doc/${PROJECT_NAME} +) +install(DIRECTORY example DESTINATION share/doc/${PROJECT_NAME} +) diff --git a/README.md b/README.md index cdf9056..3715302 100644 --- a/README.md +++ b/README.md @@ -282,7 +282,34 @@ Thus, to not add to the confusion I chose `somake`. ## Installation -Basically it is just: +The build file also contains an install target, e.g.: + + $ DESTDIR=dest ninja-build install + [1/1] Install the project... + -- Install configuration: "Release" + -- Installing: dest/usr/local/bin/somake + [..] + +If you use the standard makefile generator with cmake, just +replace `ninja-build` with `make`. Also, omitting the `DESTDIR` +installs everything for real. The destdir mechanism is useful for +preparing a binary package and just to have a preview. + +To change the default install prefix, you have to call `cmake` +differently, e.g.: + + $ cmake ../somake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release -G Ninja + $ DESTDIR=dest ninja-build install + [..] + -- Install configuration: "Release" + -- Installing: dest/usr/bin/somake + [..] + + +### Manual Installation + +In case you prefer a manual installation, basically it is just: - copy the created `somake` binary to a `bin/` directory under some prefix - copy the man page into the related manpath @@ -290,13 +317,17 @@ Basically it is just: in the `bin/` subdirectory of this repository to one of the directories searched by `somake` (and also remove the `.file` suffix) -The `somake` search path is (when `make.rules` is used): +### Rule Search Path + +Using `make.rules` as an example, `somake` tries to open it in +the following order: 1. `make.rules` -2. `$ORIGIN/../share/lib/make/make.rules` -3. `$ORIGIN/../../share/make.rules` -4. `/usr/share/lib/make/make.rules` -5. `/etc/default/make.rules` +2. `$ORIGIN/../share/somake/make.rules` # added by this port +3. `$ORIGIN/../share/lib/make/make.rules` +4. `$ORIGIN/../../share/make.rules` +5. `/usr/share/lib/make/make.rules` +6. `/etc/default/make.rules` ## License diff --git a/bin/read.cc b/bin/read.cc index 3cb3d3e..0f99c52 100644 --- a/bin/read.cc +++ b/bin/read.cc @@ -142,6 +142,11 @@ read_simple_file(register Name makefile_name, register Boolean chase_path, regis &makefile_path, -1); + // As regularly installed + asprintf(&path, "%s/../share/somake", pfx); + add_dir_to_path(path, &makefile_path, -1); + free(path); + // As regularly installed asprintf(&path, "%s/../share/lib/make", pfx); add_dir_to_path(path, &makefile_path, -1);