MakeMaker maps a root module to its first helper package
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 68/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- java
- Área
- build-system
Línea de trabajo
Start with _root_pm_install_path in src/main/perl/lib/ExtUtils/MakeMaker.pm, which returns on the first package matching NAME or NAME::. Change it to scan all package declarations in the root .pm, prefer an exact NAME match, and fall back to a nested declaration only when none exists. Add a MakeMaker regression test with a root module that declares a nested helper package first, and check that the file stages at the exact main-module path.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
The PerlOnJava CPAN run for Algorithm-Tree-NCA 0.02 fails because the MakeMaker compatibility layer stages its main module at the wrong path. The distribution provides a single root-level NCA.pm, but that file declares a helper package before its main package. PerlOnJava maps it to the helper package path, so the distribution's test programs cannot load Algorithm::Tree::NCA.
Evidence
- CPAN random-tester run:
20261015-111423-76219 - Distribution:
Algorithm-Tree-NCA0.02 (Algorithm::Tree::NCA) - Upstream files:
t/basic.t,t/preprocess.t, andt/random.t - System Perl 5.42.2: PASS; all 3 files and 16 tests pass.
- PerlOnJava CPAN test: FAIL; all 3 files stop before executing assertions because
Algorithm/Tree/NCA.pmcannot be found (0/0 assertions ran). - The PerlOnJava MakeMaker output maps
NCA.pmtoAlgorithm/Tree/NCA/Data.pm. - The distribution has no XS/native code or external service prerequisite.
The module file begins with package Algorithm::Tree::NCA::Data; and later declares package Algorithm::Tree::NCA;. The stock MakeMaker build stages the same file as blib/lib/Algorithm/Tree/NCA.pm, after which the complete test suite passes.
Root cause
src/main/perl/lib/ExtUtils/MakeMaker.pm, in _root_pm_install_path, scans a root .pm file and returns as soon as it sees a package equal to NAME or prefixed by NAME::. For this distribution, the first matching declaration is the nested helper package Algorithm::Tree::NCA::Data, so the function immediately chooses Algorithm/Tree/NCA/Data.pm and never reaches the exact main-package declaration later in the file.
This treats the first matching package as the module represented by the file. A root file can declare helper packages before its primary package, so the exact NAME declaration needs to take precedence over nested declarations.
Proposed fix
Scan all package declarations in the root module before selecting the destination. Prefer an exact declaration matching NAME; use a nested NAME::... declaration only as a fallback when there is no exact declaration. Preserve the existing NAME-derived fallback for files with no matching package.
Add a MakeMaker regression test with a root-level module that declares a nested helper package before its main package. Verify that staging places the file at the exact main module path and that the module can be loaded from blib/lib.
Acceptance criteria
- The new regression test passes under system Perl and PerlOnJava.
Algorithm-Tree-NCA0.02's three upstream test files pass through the PerlOnJava CPAN build/test path.- Existing tests for root modules that only declare nested packages continue to stage those modules at the appropriate path.
Related issues
These closed reports cover nearby but distinct build compatibility problems: #1279 (custom test include paths), #1372 (pm_to_blib marker creation), and #1432 (Module::Build nested-module staging). This report concerns MakeMaker choosing the wrong destination for a root-level .pm file with multiple package declarations.
- Lenguaje dominante
- Perl
- Estrellas
- 64
- Forks
- 7
- Merge medio
- 5 h 31 min
- PR fusionados (30 d)
- 214
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de fglock/PerlOnJava
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
fglock/PerlOnJava#1579 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
fglock/PerlOnJava#1835 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 Medio día Aptitud para principiantes 45/100
fglock/PerlOnJava#1808 ·
Los mantenedores suelen responder en 1 día
-
area:cpan-port area:runtime bug
Dificultad 4/5 3-5 días Aptitud para principiantes 28/100
fglock/PerlOnJava#1802 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
area:backend area:cpan-port area:runtime bug
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
fglock/PerlOnJava#1801 ·
Los mantenedores suelen responder en 1 día
Todos los issues de fglock/PerlOnJava
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
jimsalterjrs/sanoid#1116 · 1 reacción ·
-
Add .gitattributes so share/skel keeps LF on a Windows git checkoutPosiblemente ocupada @sadhana-s-codez la tomó hace 2 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
PerlDancer/Dancer2#1854 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
major/MySQLTuner-perl#1007 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100