alliedmodders / metamod-source

Metamod:Source - C++ Plugin Environment and Detour Library for the Source Engine
http://www.metamodsource.net/
Other
370 stars 84 forks source link

Odd path calculation with --hl2sdk-manifests with sample plugin #154

Closed zer0k-z closed 3 weeks ago

zer0k-z commented 7 months ago

Given the folder structure below, running the following command inside the build folder will result in the script trying to find hl2sdk-manifests in plugin/hl2sdk-manifests instead.

python3 ../configure.py --hl2sdk-root <hl2sdk root> --mms_path "../metamod-source" --hl2sdk-manifest "../hl2sdk-manifests" -s cs2 --targets x86_64

|--plugin
  |-- sample_mm2
      |-- AMBuildScript
      |-- AMBuilder
      |-- PackageScript
      |-- README.md
      |-- build
      |-- configure.py
      |-- hl2sdk-manifests
      |-- metamod-source
      |-- sample_mm.cpp
      `-- sample_mm.h
inolen commented 7 months ago

Also having some odd issues with this.

If I try to use absolute paths, e.g. -

~/projects/mm-test/build$ python3 ../configure.py --plugin-name=mm-test --plugin-alias=test --sdks=cs2 --targets=x86_64 --mms_path=/home/inolen/projects/metamod-source/ --hl2sdk-root=/home/inolen/projects/hl2sdk/ --hl2sdk-manifests=/home/inolen/projects/hl2sdk-manifests/

I end up with

No such file or directory: '/home/inolen/projects/mm-test/home/inolen/projects/hl2sdk-manifests/SdkHelpers.ambuild'

which seems to be caused by some path computation down inside of AMBuild.

If I try to use a relative path, e.g. -

~/projects/mm-test/build$ python3 ../configure.py --plugin-name=mm-test--plugin-alias=test--sdks=cs2 --targets=x86_64 --mms_path=/home/inolen/projects/metamod-source/ --hl2sdk-root=/home/inolen/projects/hl2sdk/ --hl2sdk-manifests=../../hl2sdk-manifests/

I end up with

FileNotFoundError: [Errno 2] No such file or directory: '/home/inolen/hl2sdk-manifests/SdkHelpers.ambuild'

which I assume is because the relative path ends up being relative to configure.py, however if I try to adjust for that, e.g. -

~/projects/mm-test/build$ python3 ../configure.py --plugin-name=mm-test--plugin-alias=test--sdks=cs2 --targets=x86_64 --mms_path=/home/inolen/projects/metamod-source/ --hl2sdk-root=/home/inolen/projects/hl2sdk/ --hl2sdk-manifests=../hl2sdk-manifests/

it gets further, but I end up with

FileNotFoundError: [Errno 2] No such file or directory: '/home/inolen/projects/mm-test/hl2sdk-manifests/manifests'

where the path is seemingly relative to the build directory for this path computation (not configure.py).

inolen commented 7 months ago

More closely read -

https://github.com/alliedmodders/metamod-source/commit/5ccaa372899d1c5cc7db3f009553a1bf21b073f4

and I realized the hl2sdk-manifests module needs to be accessible from the directory containing configure.py, and the path you're passing the command line needs to be relative to that seemingly.

JeremiahK96 commented 2 months ago

Has anybody found a solution to this? I am trying to compile s2_sample_mm like so:

cd metamod-source/samples/s2_sample_mm
mkdir build
cd build
python ../configure.py -s insurgency --mms_path /mnt/hdd/alliedmodders/metamod-source/ --hl2sdk-root /mnt/hdd/alliedmodders/ --hl2sdk-manifests /mnt/hdd/alliedmodders/metamod-source/hl2sdk-manifests/

This fails with this output: Configure failed: [Errno 2] No such file or directory: '/mnt/hdd/alliedmodders/metamod-source/samples/s2_sample_mm/mnt/hdd/alliedmodders/metamod-source/hl2sdk-manifests/SdkHelpers.ambuild'

I tried using a relative path for --hl2sdk-manifests by going up 2 directories: --hl2sdk-manifests ../../ ..... Configure failed: [Errno 2] No such file or directory: '/mnt/hdd/alliedmodders/metamod-source/SdkHelpers.ambuild'

Almost there! So I tried this: --hl2sdk-manifests ../../hl2sdk-manifests/ ..... Configure failed: [Errno 2] No such file or directory: '/mnt/hdd/alliedmodders/metamod-source/samples/s2_sample_mm/hl2sdk-manifests/manifests'

This is really frustrating. After 2 weeks of messing around late 2023, I finally managed to compile a basic "Hello World" MM:S plugin, but now I can't remember how I did it. I believe I was using somebody's personal MM:S template repo. I'll have to see if I can find the upstream URL for it...

JeremiahK96 commented 2 months ago

I found it, here is the template repo I used before: https://github.com/nosoop/mmsplugin-base

I was able to compile it like this:

git clone https://github.com/nosoop/mmsplugin-base
mkdir mmsplugin-base/build
cd mmsplugin-base/build
python ../configure.py -s insurgency --hl2sdk-root /mnt/hdd/alliedmodders --mms_path /mnt/hdd/alliedmodders/metamod-source

This gives an error:

File "/home/user/code/source/metamod/test/mmsplugin-base/AMBuildScript", line 168, in configure
    cxx.cflags += proj_c_flags
                  ^^^^^^^^^^^^
NameError: name 'proj_c_flags' is not defined
Configure failed: name 'proj_c_flags' is not defined

To fix this, I just commented out line 168 of ../AMBuildScript and that did the trick.

python ../configure.py -s insurgency --hl2sdk-root /mnt/hdd/alliedmodders --mms_path /mnt/hdd/alliedmodders/metamod-source
ambuild

I don't know if this info will help anyone, but I hope it might!

psychonic commented 3 weeks ago

This has now been addressed with the below. The hl2sdk-manifests directory should be able to live anywhere now, as long as a valid path is given, and relative paths are now better supported for that directory, as well as MM:S's and the SDK root.